§
    9˜ºhG ã                   ó¨  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZmZmZmZmZmZmZmZmZ ddlmZmZ ddlmZmZ ddlmZmZmZ dd	lmZm Z m!Z! dd
l"m#Z#m$Z$ ddl%m&Z& ddl'm(Z(m)Z)m*Z* ddl+m,Z,m-Z-m.Z. d„ Z/d„ Z0dede1fd„Z2dede1fd„Z3dede1fd„Z4dede1fd„Z5dede1fd„Z6d„ Z7d„ Z8d„ Z9dee          fd„Z:deej;                 dee!         fd„Z<e1e= e>d¦  «        hZ? G d „ d!¦  «        Z@ G d"„ d#e jA        ¦  «        ZB G d$„ d%¦  «        ZC ed&¬'¦  «         G d(„ d)¦  «        ¦   «         ZD G d*„ d+e jA        ¦  «        ZEd-d,„ZFdS ).é    N)Ú	dataclass)Ú
ModuleType)	ÚAnyÚCallableÚDictÚOptionalÚTupleÚTypeÚUnionÚIterableÚListé   )ÚknobsÚlanguage)ÚirÚgluon_ir)Ú	constexprÚ	str_to_tyÚtensor)Ú_unwrap_if_constexprÚ
base_valueÚ	base_type)Úget_jit_fn_file_lineÚget_full_name)ÚJITFunction)Úfind_paths_ifÚget_iterable_pathÚset_iterable_pathé   )ÚCompilationErrorÚCompileTimeAssertionFailureÚUnsupportedLanguageConstructc                 ó`   — d}t          j        || ¦  «        st          d|› d| › �| ¦  «        ‚| S )Nz^[a-zA-Z_][a-zA-Z0-9_]*$zinvalid z identifier: )ÚreÚmatchr    )ÚnameÚtypeÚpatterns      úf/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/triton/compiler/code_generator.pyÚcheck_identifier_legalityr*      sB   € Ø)€GÝŒ8�G˜TÑ"Ô"ð KÝÐC¨$ÐCÐC¸TÐCÐCÀTÑJÔJÐJØ€Kó    c                 ób  ‡— d                      d„ |D ¦   «         ¦  «        }d                      ˆfd„t          ‰¦  «        D ¦   «         ¦  «        }|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «                             d	d¦  «        }| › d
|› d
|› �}|S )NÚ_c                 ó6   — g | ]}|                      ¦   «         ‘ŒS © )Úmangle)Ú.0Útys     r)   ú
<listcomp>zmangle_fn.<locals>.<listcomp>!   s    € Ð!@Ð!@Ð!@°" "§)¢)¡+¤+Ð!@Ð!@Ð!@r+   c                 óD   •— g | ]}|› d t          ‰|         ¦  «        › �‘ŒS )Úc)Úrepr)r1   ÚiÚ	constantss     €r)   r3   zmangle_fn.<locals>.<listcomp>"   s3   ø€ Ð!YÐ!YÐ!YÀ! QÐ"=Ð"=­¨i¸¬lÑ);Ô);Ð"=Ð"=Ð!YÐ!YÐ!Yr+   ú.Ú_d_ú'Ú_sq_ú[ú]Ú__)ÚjoinÚsortedÚreplace)r&   Úarg_tysr8   Úmangled_arg_namesÚmangled_constantsÚrets     `   r)   Ú	mangle_fnrG      sÇ   ø€ àŸšÐ!@Ð!@¸Ð!@Ñ!@Ô!@ÑAÔAÐØŸšÐ!YÐ!YÐ!YÐ!YÅvÈiÑGXÔGXÐ!YÑ!YÔ!YÑZÔZÐØ)×1Ò1°#°uÑ=Ô=ÐØ)×1Ò1°#°vÑ>Ô>Ðà)×1Ò1°#°sÑ;Ô;×CÒCÀCÈÑMÔMÐØÐ
=Ð
=Ð&Ð
=Ð
=Ð*;Ð
=Ð
=€CØ€Jr+   ÚoÚreturnc                 ó,   — t          | t          ¦  «        S ©N)Ú
isinstancer   ©rH   s    r)   Ú_is_triton_valuerN   +   s   € Ý�a�Ñ$Ô$Ð$r+   c                 ó,   — t          | t          ¦  «        S rK   )rL   r   rM   s    r)   Ú_is_triton_tensorrP   /   s   € Ý�a�Ñ Ô Ð r+   c                 ób   — | d u p+t          | t          t          j        j        t
          f¦  «        S rK   )rL   r   r   ÚcoreÚdtyper   rM   s    r)   Ú_is_constexprrT   3   s'   € Ø�ˆ9ÐT�
 1¥yµ(´-Ô2EÅ{Ð&SÑTÔTÐTr+   c                 ór   — t          | ¦  «        o(| j                             ¦   «         o| j        j        dk    S ©Nr   )rP   r'   Úis_blockÚnumelrM   s    r)   Ú_is_non_scalar_tensorrY   7   s/   € Ý˜QÑÔÐM Q¤V§_¢_Ñ%6Ô%6Ð%L¸1¼6¼<È1Ò;LÐMr+   c                 ó:   — t          | t          t          f¦  «        S rK   )rL   ÚlistÚtuplerM   s    r)   Ú_is_list_liker]   ;   s   € Ý�a�$¥˜Ñ'Ô'Ð'r+   c                 óÜ   — |j         rbt          |¦  «        D ]T\  }}t          |¦  «        s>t          |¦  «        r/t	          |j        | d|j        › d|j        |         › d|› �¦  «        ‚ŒSd S d S )Nz	Function z= is marked noinline, but was called with non-scalar argument ú:)ÚnoinlineÚ	enumeraterT   rY   r"   ÚsrcÚ__name__Ú	arg_names)ÚnodeÚfnÚargsÚidxÚargs        r)   Ú_check_fn_argsrj   ?   s´   € Ø	„{ð Ý! $™œð 	ð 	‰HˆC�Ý  Ñ%Ô%ð Õ*?ÀÑ*DÔ*Dð Ý2Ø”F˜Dð D ¤ð  Dð  DÐjlÔjvÐwzÔj{ð  Dð  Dð  Bð  Dð  Dñô ð øðð ð	ð 	r+   c                 óv   — t          | t          ¦  «        o$t          | t          ¦  «        ot	          | d¦  «        S )NÚ_fields)rL   r'   Ú
issubclassr\   Úhasattr)Úvals    r)   Ú_is_namedtuplerp   I   s0   € Ý�c�4Ñ Ô ÐW¥Z°µUÑ%;Ô%;ÐWÅÈÈYÑ@WÔ@WÐWr+   c                 ój  ‡— t          t          | ¦  «        ¦  «        r| j        }nAt          | t          j        ¦  «        r| j        j        }nJ dt          | ¦  «        › �¦   «         ‚ˆfd„| D ¦   «         }d„ |D ¦   «         }d„ |D ¦   «         }t	          j        |t	          j        ||¦  «        ¦  «        S )NFzUnsupported type c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r/   r/   )r1   Úvrf   s     €r)   r3   z*_apply_to_tuple_values.<locals>.<listcomp>U   s!   ø€ Ð!Ð!Ð!�aˆBˆBˆq‰EŒEÐ!Ð!Ð!r+   c                 ó4   — g | ]}|€t          |¦  «        n|‘ŒS rK   )r   ©r1   rs   s     r)   r3   z*_apply_to_tuple_values.<locals>.<listcomp>V   s&   € Ð;Ð;Ð;°˜A˜I�I�a‰LŒLˆL¨1Ð;Ð;Ð;r+   c                 ó   — g | ]	}|j         ‘Œ
S r/   ©r'   ru   s     r)   r3   z*_apply_to_tuple_values.<locals>.<listcomp>W   s   € Ð"Ð"Ð"˜ˆQŒVÐ"Ð"Ð"r+   )rp   r'   rl   rL   r   r\   ÚfieldsÚ
tuple_type)Úvaluerf   rx   ÚvalsÚtypess    `   r)   Ú_apply_to_tuple_valuesr}   M   s½   ø€ Ý•d˜5‘k”kÑ"Ô"ð 8Ø”ˆˆÝ	�E�8œ>Ñ	*Ô	*ð 8Ø”Ô"ˆˆà7Ð7­$¨u©+¬+Ð7Ð7Ñ7Ô7Ð7à!Ð!Ð!Ð!˜5Ð!Ñ!Ô!€DØ;Ð;°dÐ;Ñ;Ô;€DØ"Ð"˜TÐ"Ñ"Ô"€EÝŒ>˜$¥Ô 3°E¸6Ñ BÔ BÑCÔCÐCr+   Úvaluesc                 ó>   — g }| D ]}|                      |¦  «         Œ|S rK   )Ú_flatten_ir)r~   Úhandlesrs   s      r)   Úflatten_values_to_irr‚   [   s0   € Ø€GØð ð ˆØ	�Š�gÑÔÐÐØ€Nr+   r�   r|   c              #   ó|   K  — d}|D ]}|                      | |¦  «        \  }}|V — Œ |t          | ¦  «        k    sJ ‚d S )Nr   )Ú_unflatten_irÚlen)r�   r|   Úcursorr2   rz   s        r)   Úunflatten_ir_valuesr‡   b   s[   è è € Ø€FØð ð ˆØ×(Ò(¨°&Ñ9Ô9‰ˆˆvØˆˆˆˆØ•S˜‘\”\Ò!Ð!Ð!Ð!Ð!Ð!r+   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )Úenter_sub_regionc                 ó   — || _         d S rK   )Ú	generator)Úselfr‹   s     r)   Ú__init__zenter_sub_region.__init__o   s   € Ø"ˆŒˆˆr+   c                 óN  — | j         j                             ¦   «         | _        | j         j                             ¦   «         | _        i | j         _        | j         j                             ¦   «         | _        | j         j         	                    ¦   «         | _
        | j        | j        fS rK   )r‹   ÚlscopeÚcopyÚliveinsÚ
local_defsÚ	prev_defsÚbuilderÚget_insertion_blockÚinsert_blockÚget_insertion_pointÚinsert_point)rŒ   s    r)   Ú	__enter__zenter_sub_region.__enter__r   s~   € à”~Ô,×1Ò1Ñ3Ô3ˆŒØœÔ2×7Ò7Ñ9Ô9ˆŒØ$&ˆŒÔ!Ø œNÔ2×FÒFÑHÔHˆÔØ œNÔ2×FÒFÑHÔHˆÔØŒ|˜TÔ.Ð.Ð.r+   c                 ó’   — | j         j                             | j        ¦  «         | j        | j         _        | j        | j         _        d S rK   )r‹   r”   Úrestore_insertion_pointr˜   r‘   r�   r“   r’   )rŒ   rg   Úkwargss      r)   Ú__exit__zenter_sub_region.__exit__{   s<   € ØŒÔ×6Ò6°tÔ7HÑIÔIÐIØ $¤ˆŒÔØ$(¤NˆŒÔ!Ð!Ð!r+   N)rc   Ú
__module__Ú__qualname__r�   r™   r�   r/   r+   r)   r‰   r‰   m   sA   € € € € € ð#ð #ð #ð/ð /ð /ð3ð 3ð 3ð 3ð 3r+   r‰   c                   ó<  — e Zd Zd„ Zdefd„Zdefd„Zdefd„Zdej	        defd„Z
dej        defd„Zdej        defd	„Zdej        defd
„Zdej        defd„Zdej        defd„Zdej        defd„Zdej        defd„Zdej        defd„Zdej        defd„ZdS )ÚContainsReturnCheckerc                 ó   — || _         d S rK   )Úgscope)rŒ   r£   s     r)   r�   zContainsReturnChecker.__init__„   s   € ØˆŒˆˆr+   rI   c                 ó:   ‡ — t          ˆ fd„|D ¦   «         ¦  «        S )Nc              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S rK   ©Úvisit)r1   ÚsrŒ   s     €r)   ú	<genexpr>z5ContainsReturnChecker._visit_stmts.<locals>.<genexpr>ˆ   s-   øè è € Ð/Ð/ Q�4—:’:˜a‘=”=Ð/Ð/Ð/Ð/Ð/Ð/r+   )Úany)rŒ   Úbodys   ` r)   Ú_visit_stmtsz"ContainsReturnChecker._visit_stmts‡   s&   ø€ ÝÐ/Ð/Ð/Ð/¨$Ð/Ñ/Ô/Ñ/Ô/Ð/r+   c                 ó   — dS ©NFr/   )rŒ   rf   s     r)   Ú_visit_functionz%ContainsReturnChecker._visit_functionŠ   s	   € ð ˆur+   c                 ó8  — d}t          j        |¦  «        D ]‚\  }}t          |t          ¦  «        r7|D ]3}t          |t           j        ¦  «        r|p|                      |¦  «        }Œ4ŒQt          |t           j        ¦  «        r|p|                      |¦  «        }Œƒ|S r®   )ÚastÚiter_fieldsrL   r[   ÚASTr§   )rŒ   re   rF   r-   rz   Úitems         r)   Úgeneric_visitz#ContainsReturnChecker.generic_visit�   s§   € ØˆÝœ¨Ñ-Ô-ð 	/ð 	/‰HˆAˆuÝ˜%¥Ñ&Ô&ð /Ø!ð 6ð 6�DÝ! $­¬Ñ0Ô0ð 6Ø!Ð5 T§Z¢Z°Ñ%5Ô%5˜øð6õ ˜E¥3¤7Ñ+Ô+ð /ØÐ.˜TŸZšZ¨Ñ.Ô.�øØˆ
r+   re   c                 ó   — t          |j        t          j        ¦  «        rV|j        j        | j        v rA| j        |j        j                 }t          ||j        ¦  «        }|                      |¦  «        S dS |  	                    |j        ¦  «        S r®   )
rL   rz   r±   ÚNameÚidr£   ÚgetattrÚattrr¯   r§   )rŒ   re   rz   rf   s       r)   Úvisit_Attributez%ContainsReturnChecker.visit_Attribute›   sy   € õ �d”j¥#¤(Ñ+Ô+ð 	ØŒzŒ} ¤Ð+Ð+Øœ D¤J¤MÔ2�Ý˜U D¤IÑ.Ô.�Ø×+Ò+¨BÑ/Ô/Ð/Ø�5Ø�zŠz˜$œ*Ñ%Ô%Ð%r+   c                 ó´   — t          |j        ¦  «        t          j        u rdS |j        | j        v r'| j        |j                 }|                      |¦  «        S dS r®   )r'   Úctxr±   ÚStorer¸   r£   r¯   )rŒ   re   rf   s      r)   Ú
visit_Namez ContainsReturnChecker.visit_Nameª   sR   € Ý�”‰>Œ>�SœYÐ&Ð&Ø�5ØŒ7�d”kÐ!Ð!Ø”˜TœWÔ%ˆBØ×'Ò'¨Ñ+Ô+Ð+Øˆur+   c                 ó   — dS ©NTr/   ©rŒ   re   s     r)   Úvisit_Returnz"ContainsReturnChecker.visit_Return²   ó   € Øˆtr+   c                 ó   — dS r®   r/   rÂ   s     r)   Úvisit_Assignz"ContainsReturnChecker.visit_Assignµ   ó	   € ð ˆur+   c                 ó   — dS r®   r/   rÂ   s     r)   Úvisit_AugAssignz%ContainsReturnChecker.visit_AugAssignº   rÇ   r+   c                 ó6   — |                       |j        ¦  «        S rK   ©r¬   r«   rÂ   s     r)   Úvisit_Modulez"ContainsReturnChecker.visit_Module¿   ó   € Ø× Ò  ¤Ñ+Ô+Ð+r+   c                 ó6   — |                       |j        ¦  «        S rK   rË   rÂ   s     r)   Úvisit_FunctionDefz'ContainsReturnChecker.visit_FunctionDefÂ   rÍ   r+   c                 ó€   — |                       |j        ¦  «        }|j        r|p|                       |j        ¦  «        }|S rK   )r¬   r«   Úorelse)rŒ   re   rF   s      r)   Úvisit_IfzContainsReturnChecker.visit_IfÅ   sB   € ð ×Ò ¤	Ñ*Ô*ˆØŒ;ð 	8ØÐ7˜×*Ò*¨4¬;Ñ7Ô7ˆCØˆ
r+   c                 ój   — |                       |j        ¦  «        p|                       |j        ¦  «        S rK   )r§   r«   rÑ   rÂ   s     r)   Úvisit_IfExpz!ContainsReturnChecker.visit_IfExpÒ   s)   € Ø�zŠz˜$œ)Ñ$Ô$Ð?¨¯
ª
°4´;Ñ(?Ô(?Ð?r+   c                 ó6   — |                       |j        ¦  «        S rK   )r§   ÚfuncrÂ   s     r)   Ú
visit_Callz ContainsReturnChecker.visit_CallÕ   s   € Ø�zŠz˜$œ)Ñ$Ô$Ð$r+   N)rc   rž   rŸ   r�   Úboolr¬   r¯   rµ   r±   Ú	Attributer»   r·   r¿   ÚReturnrÃ   ÚAssignrÆ   Ú	AugAssignrÉ   ÚModulerÌ   ÚFunctionDefrÏ   ÚIfrÒ   ÚIfExprÔ   ÚCallr×   r/   r+   r)   r¡   r¡   ‚   sâ  € € € € € ðð ð ð0 Dð 0ð 0ð 0ð 0ð Tð ð ð ð ð	 Tð 	ð 	ð 	ð 	ð& C¤Mð &°dð &ð &ð &ð &ð˜sœxð ¨Dð ð ð ð ð ¤ð °ð ð ð ð ð ¤ð °ð ð ð ð ð
 C¤Mð °dð ð ð ð ð
, ¤ð ,°ð ,ð ,ð ,ð ,ð, c¤oð ,¸$ð ,ð ,ð ,ð ,ð˜SœVð ¨ð ð ð ð ð@ ¤	ð @¨dð @ð @ð @ð @ð%˜sœxð %¨Dð %ð %ð %ð %ð %ð %r+   r¡   c                   ó    — e Zd Zd„ Zdej        dee         deej                 fd„Z	dej        deej                 fd„Z
dej        fd„Zd„ Zd	S )
ÚASTFunctionc                 ó>   — || _         || _        || _        || _        d S rK   )Ú	ret_typesÚ	arg_typesr8   Úattrs)rŒ   rå   ræ   r8   rç   s        r)   r�   zASTFunction.__init__Û   s"   € Ø"ˆŒØ"ˆŒØ"ˆŒØˆŒ
ˆ
ˆ
r+   r”   r|   rI   c                 óF   — g }|D ]}|€Œ|                      ||¦  «         Œ|S rK   )Ú_flatten_ir_types)rŒ   r”   r|   Úir_typesr2   s        r)   Úflatten_ir_typeszASTFunction.flatten_ir_typesá   s<   € ØˆØð 	4ð 	4ˆBØˆzØØ× Ò  ¨(Ñ3Ô3Ð3Ð3Øˆr+   c                 ó8   — |                       || j        ¦  «        S rK   )rë   rå   )rŒ   r”   s     r)   Úreturn_types_irzASTFunction.return_types_iré   s   € Ø×$Ò$ W¨d¬nÑ=Ô=Ð=r+   c                 óð   ‡ — ˆ fd„}t          t          ‰ j        |¦  «        ¦  «        }ˆ fd„|D ¦   «         }‰                      ||¦  «        }‰                      |¦  «        }|                     ||¦  «        S )Nc                 ó   •— | ‰j         vo|d uS rK   ©r8   ©Úpathr-   rŒ   s     €r)   ú<lambda>z'ASTFunction.serialize.<locals>.<lambda>ï   ó   ø€  ¨T¬^Ð!;Ð!MÀÈÀ€ r+   c                 ó:   •— g | ]}t          ‰j        |¦  «        ‘ŒS r/   )r   ræ   )r1   rò   rŒ   s     €r)   r3   z)ASTFunction.serialize.<locals>.<listcomp>ñ   s&   ø€ ÐSÐSÐSÀÕ& t¤~°tÑ<Ô<ÐSÐSÐSr+   )r[   r   ræ   rë   rí   Úget_function_ty)rŒ   r”   Úis_valÚ	val_pathsræ   Úarg_types_irÚret_types_irs   `      r)   Ú	serializezASTFunction.serializeì   s„   ø€ ð NÐMÐMÐMˆÝ� t¤~°vÑ>Ô>Ñ?Ô?ˆ	ØSÐSÐSÐSÈÐSÑSÔSˆ	Ø×,Ò,¨W°iÑ@Ô@ˆØ×+Ò+¨GÑ4Ô4ˆØ×&Ò& |°\ÑBÔBÐBr+   c                 óf  ‡ ‡‡— ˆfd„Š ‰‰ j         ¦  «        }ˆ fd„}t          t          ‰ j         |¦  «        ¦  «        }d}ˆfd„t          ‰                     ¦   «         ¦  «        D ¦   «         }|D ]{}t          ‰ j         |¦  «        }‰ j                             |g ¦  «        }	|	D ]\  }
}‰                     ||
|¦  «         Œ| 	                    ||¦  «        \  }}t          |||¦  «         Œ|‰ j        }|                     ¦   «         D ](\  }}t          ||t          j        |¦  «        ¦  «         Œ)|S )Nc                 ó¼   •— t          | t          t          t          j        f¦  «        r!t          j        ˆfd„| D ¦   «         | ¦  «        S t          j        d ¦  «        S )Nc                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r/   r/   )r1   ÚxÚmake_templates     €r)   r3   zBASTFunction.deserialize.<locals>.make_template.<locals>.<listcomp>ú   s#   ø€ Ð&DÐ&DÐ&D¸A } }°QÑ'7Ô'7Ð&DÐ&DÐ&Dr+   )rL   r[   r\   r   ry   r   )r2   r   s    €r)   r   z.ASTFunction.deserialize.<locals>.make_templateø   sX   ø€ Ý˜"�t¥U­HÔ,?Ð@ÑAÔAð JÝ”~Ð&DÐ&DÐ&DÐ&DÀÐ&DÑ&DÔ&DÀbÑIÔIÐIÝÔ% dÑ+Ô+Ð+r+   c                 ó   •— | ‰j         vo|d uS rK   rð   rñ   s     €r)   ró   z)ASTFunction.deserialize.<locals>.<lambda>þ   rô   r+   r   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r/   )rg   )r1   r7   rf   s     €r)   r3   z+ASTFunction.deserialize.<locals>.<listcomp>  s#   ø€ Ð@Ð@Ð@ !�2—7’7˜1‘:”:Ð@Ð@Ð@r+   )ræ   r[   r   ÚrangeÚget_num_argsr   rç   ÚgetÚset_arg_attrr„   r   r8   Úitemsr   r   )rŒ   rf   r{   r÷   rø   r†   r�   rò   r2   Ú
attr_specsÚ	attr_nameÚattr_valro   r8   r   s   ``            @r)   ÚdeserializezASTFunction.deserializeö   sc  øøø€ ð	,ð 	,ð 	,ð 	,ð 	,ð
 ˆ}˜Tœ^Ñ,Ô,ˆØMÐMÐMÐMˆÝ� t¤~°vÑ>Ô>Ñ?Ô?ˆ	àˆØ@Ð@Ð@Ð@¥u¨R¯_ª_Ñ->Ô->Ñ'?Ô'?Ð@Ñ@Ô@ˆØð 	/ð 	/ˆDÝ" 4¤>°4Ñ8Ô8ˆBàœŸš¨¨bÑ1Ô1ˆJØ'1ð =ð =Ñ#�	˜8Ø—’ ¨	°8Ñ<Ô<Ð<Ð<à×*Ò*¨7°FÑ;Ô;‰KˆC�Ý˜d D¨#Ñ.Ô.Ð.Ð.à”Nˆ	Ø"ŸšÑ*Ô*ð 	Cð 	C‰IˆD�#Ý˜d D­(Ô*<¸SÑ*AÔ*AÑBÔBÐBÐBØˆr+   N)rc   rž   rŸ   r�   r   r”   r   r   r'   rë   rí   rû   r  r/   r+   r)   rã   rã   Ù   sµ   € € € € € ðð ð ð¨¬
ð ¸4À	¼?ð ÈtÐTVÔT[Ì}ð ð ð ð ð> r¤zð >°d¸2¼7´mð >ð >ð >ð >ðC ¤ð Cð Cð Cð Cðð ð ð ð r+   rã   T)Úfrozenc                   ó$   — e Zd ZU eed<   eed<   dS )ÚBoundJITMethodÚ__self__Ú__func__N)rc   rž   rŸ   r   Ú__annotations__r   r/   r+   r)   r  r    s*   € € € € € € àÐÐÑØÐÐÑÐÐr+   r  c                   ó´  ‡ — e Zd ZU 	 	 djdedee         dee         fd„Zd„ ee	e
eeeeefD ¦   «         Zeeef         ed	<   e                     d
ej        j        fdej        fdej        ff¦  «         d„ Zd„ Zd„ Zdedeeef         ddfd„Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%defd„Z&d„ Z'd„ Z(d„ Z)d„ Z*d„ Z+d „ Z,d!„ Z-d"„ Z.d#„ Z/d$„ Z0d%„ Z1d&„ Z2d'„ Z3e4j5        d(e4j6        d)e4j7        d*e4j8        d+e4j9        d,e4j:        d-e4j;        d.e4j<        d/e4j=        d0e4j>        d1e4j?        d2e4j@        d3iZAeeBe4jC                 ef         ed4<   d5„ ZDd6„ ZEd7„ ZFd8„ ZGd9„ ZHd:„ ZId;„ ZJe4jK        d<e4jL        d=e4jM        d>e4jN        d?e4jO        d@e4jP        dAiZQeeBe4jR                 ef         edB<   dC„ ZSe4jT        dDe4jU        dEe4jV        dFe4jW        dGiZXeeBe4jY                 ef         edH<   dI„ ZZdJ„ Z[dK„ Z\dL„ Z]dM„ Z^dN„ Z_dO„ Z`dP„ ZadQ„ ZbdR„ ZcdS„ Zddeeeef         fdT„ZfdefdU„ZgdVefdW„ZhdX„ ZidY„ ZjdZe4jk        fd[„Zle4jm        d\e4jn        d]iZoeeBe4jp                 ef         ed^<   d_„ Zqd`„ Zrda„ Zsdb„ Ztˆ fdc„Zudd„ ZvdZe4jw        ddfde„Zxdf„ ZydgdhlzmZ{ ej        j|        exej        j}         eye~¦  «        e{j|        exe{j}         eye~¦  «        e eye¦  «        e eye¦  «        iZee€e�e4jw        gef         f         edi<   ˆ xZ‚S )kÚCodeGeneratorNFr   Újit_fnÚfunction_typesÚ	file_namec                 óŠ  — || _         |                     ¦   «         r5ddlm} t	          j        |¦  «        | _         || j        ¦  «        | _        n4ddlm	} t          j        |¦  «        | _         || j        ¦  «        | _        || _        |dz
  | _        | j                             ||d¦  «         || j        _        || j        _        |€i n|| j        _        |	€| j                             ¦   «         n|	| _        |€i n|| _        || _        i | _        |                     ¦   «         D ]�\  }}t/          |t0          ¦  «        r$|                     |j        |¦  «        | j        |<   Œ>t7          |dd¦  «        }||v r$t7          ||         |j        ¦  «        | j        |<   Œw|| j        |<   Œ‚i | _        || _        |
r0||                     d¦  «        dz   d …         }t?          |d¦  «        }|| _         |
| _!        d | _"        || _#        g | _$        d | _%        i | _&        |  '                    ¦   «         | _(        d | _)        d	| _*        d S )
Nr   )ÚGluonSemantic)ÚTritonSemanticr   rž   Ú r9   ÚfunctionF)+ÚcontextÚis_gluonÚ,triton.experimental.gluon.language._semanticr  r   ÚGluonOpBuilderr”   ÚsemanticÚtriton.language.semanticr  r   r  Ú
begin_lineÚset_locÚoptionsÚcodegen_fnsÚ
module_mapÚcreate_moduleÚmoduleÚfunction_ret_typesÚ	prototyper£   r  rL   r   r  rc   r¹   r�   r  Úrfindr*   Úfunction_nameÚ	is_kernelÚcur_noder`   Ú	scf_stackÚret_typer’   Ú_define_name_lookupÚdereference_namerf   Úvisiting_arg_default_value)rŒ   r  r*  r£   r,  r  r$  r%  r&  r(  r-  r  r`   r  r"  r  r  Úkrs   Úmodule_names                       r)   r�   zCodeGenerator.__init__  sX  € ð ˆŒØ�?Š?ÑÔð 	9ØRÐRÐRÐRÐRÐRÝ#Ô2°7Ñ;Ô;ˆDŒLØ)˜M¨$¬,Ñ7Ô7ˆDŒMˆMà?Ð?Ð?Ð?Ð?Ð?Ýœ: gÑ.Ô.ˆDŒLØ*˜N¨4¬<Ñ8Ô8ˆDŒMØ"ˆŒà$ q™.ˆŒØŒ×Ò˜Y¨
°AÑ6Ô6Ð6Ø&ˆŒÔð $/ˆŒÔ Ø(2Ð(: " "À
ˆŒÔØ6<°n�d”l×0Ò0Ñ2Ô2Ð2È&ˆŒØ(6Ð(> " "ÀNˆÔØ"ˆŒàˆŒØ—L’L‘N”Nð 		#ð 		#‰DˆAˆqÝ˜!�ZÑ(Ô(ð Ø!+§¢°´
¸AÑ!>Ô!>�”˜A‘Øå! ! \°2Ñ6Ô6ˆKØ˜jÐ(Ð(Ý!(¨°KÔ)@À!Ä*Ñ!MÔ!M�”˜A‘�à!"�”˜A‘�àˆŒØˆŒàð 	QØ)¨-×*=Ò*=¸cÑ*BÔ*BÀQÑ*FÐ*GÐ*GÔHˆMÝ5°mÀZÑPÔPˆMØ*ˆÔØ"ˆŒØˆŒØ ˆŒØˆŒØˆŒð .0ˆŒØ6:×6NÒ6NÑ6PÔ6PˆÔØˆŒð +0ˆÔ'Ð'Ð'r+   c                 ó   — i | ]
}|j         |“ŒS r/   ©rc   ©r1   r-   s     r)   ú
<dictcomp>zCodeGenerator.<dictcomp>V  s,   € ð )ð )ð )àð 	
Œ
�Að)ð )ð )r+   Úbuiltin_namespaceÚprintÚminÚmaxc                 ó8   — t          | j        j        ||¦  «        S rK   )r"   r  rb   )rŒ   re   Úmessages      r)   Ú_unsupportedzCodeGenerator._unsupported`  s   € Ý+¨D¬K¬O¸TÀ7ÑKÔKÐKr+   c                 ó†   — t          ¦   «         }| j                             ||¦  «        }||u rdS t          |¦  «        rdS dS )NFT)Úobjectr£   r  rT   )rŒ   r&   Úabsent_markerro   s       r)   Ú_is_constexpr_globalz"CodeGenerator._is_constexpr_globalc  sJ   € Ý™œˆØŒk�oŠo˜d MÑ2Ô2ˆØ�-ÐÐØ�5å˜ÑÔð 	Ø�4àˆur+   c                 óŒ   ‡ ‡‡‡— dt           fˆ fd„Šdt           fˆ fd„Št          ¦   «         Šdt           dt          fˆˆˆˆ fd„}|S )Nr&   c                 ó:   •— ‰j                              | |¦  «        S rK   )r�   r  )r&   ÚabsentrŒ   s     €r)   Úlocal_lookupz7CodeGenerator._define_name_lookup.<locals>.local_lookupp  s   ø€ à”;—?’? 4¨Ñ0Ô0Ð0r+   c                 ó¤  •— ‰j                              | |¦  «        }t          ||u | ‰j        v t	          |¦  «        t
          u t          |t          ¦  «        t          |dd¦  «        t          |dd¦  «        t          |dd¦  «         	                    d¦  «        t          |dd¦  «         	                    d¦  «        t          |t          j        ¦  «        t          |¦  «        ‰                     | ¦  «        ‰j        t          j        j        g¦  «        r|S t%          t'          j        d| › d	�¦  «                             d
d¦  «        ¦  «        ‚)NÚ__triton_builtin__FÚ__triton_aggregate__rž   r  ztriton.languagez"triton.experimental.gluon.languagez.                Cannot access global variable aà   from within @jit'ed
                function. Triton kernels can only access global variables that
                are instanstiated as constexpr (`x = triton.language.constexpr(42)`). Note that this is different from
                annotating a variable as constexpr (`x: triton.language.constexpr = 42`), which is not supported.  Alternatively, set the
                envvar TRITON_ALLOW_NON_CONSTEXPR_GLOBALS=1, but we do not
                promise to support this forever.ú
ú )r£   r  rª   r:  r'   r   rL   r   r¹   Ú
startswithr   rS   rp   rD  r3  r   ÚcompilationÚallow_non_constexpr_globalsÚ	NameErrorÚtextwrapÚdedentrB   )r&   rG  ro   rŒ   s      €r)   Úglobal_lookupz8CodeGenerator._define_name_lookup.<locals>.global_lookupt  sI  ø€ Ø”+—/’/ $¨Ñ/Ô/ˆCõ Ø˜6�MØ˜DÔ2Ð2Ý˜‘I”I¥Ð+Ý˜s¥KÑ0Ô0Ý˜CÐ!5°uÑ=Ô=Ý˜CÐ!7¸Ñ?Ô?Ý˜C ¨rÑ2Ô2×=Ò=Ð>OÑPÔPÝ˜C ¨rÑ2Ô2×=Ò=Ð>bÑcÔcÝ˜s¥H¤NÑ3Ô3Ý" 3Ñ'Ô'Ø×-Ò-¨dÑ3Ô3ð Ô3ÝÔ%ÔAð!ñ ô ð ð$ �
ÝÝ”ð !4Ø/3ð!4ð !4ð !4ñ 5ô 5÷ 6=²W¸TÀ3Ñ5GÔ5GñIô Ið Ir+   rI   c                 óx   •— ‰}‰‰‰j         j        fD ]} || |¦  «        }||ur|c S Œt          | › d�¦  «        ‚)Nz is not defined)r:  r  rQ  )r&   rG  Úlookup_functionrz   rC  rT  rH  rŒ   s       €€€€r)   Úname_lookupz6CodeGenerator._define_name_lookup.<locals>.name_lookup—  se   ø€ Ø"ˆFØ#/°ÀÔ@VÔ@ZÐ#Zð !ð !�Ø'˜¨¨fÑ5Ô5�Ø Ð&Ð&Ø �L�L�Lð 'å˜tÐ4Ð4Ð4Ñ5Ô5Ð5r+   )ÚstrrB  r   )rŒ   rW  rC  rT  rH  s   ` @@@r)   r1  z!CodeGenerator._define_name_lookupn  s¦   øøøø€ ð	1�sð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð	I¥ð 	Ið 	Ið 	Ið 	Ið 	Ið 	IõB ™œˆð	6�cð 	6¥cð 	6ð 	6ð 	6ð 	6ð 	6ð 	6ð 	6ð 	6ð 	6ð Ðr+   r&   rz   rI   c                 ó.   — || j         |<   || j        |<   dS )zâ This function:
            called by visit_Assign() & visit_FunctionDef() to store left value (lvalue)
        1. record local defined name (FIXME: should consider control flow)
        2. store tensor in self.lvalue
        N)r�   r’   )rŒ   r&   rz   s      r)   Ú	set_valuezCodeGenerator.set_value¡  s"   € ð "ˆŒ�DÑØ %ˆŒ˜ÑÐÐr+   c                 ón   — | j                              ¦   «         }| j                              ¦   «         }||fS rK   )r”   Úget_locr—   )rŒ   ÚlocÚips      r)   Ú_get_insertion_point_and_locz*CodeGenerator._get_insertion_point_and_locª  s3   € ð Œl×"Ò"Ñ$Ô$ˆØŒ\×-Ò-Ñ/Ô/ˆØ�3ˆwˆr+   c                 ón   — | j                              |¦  «         | j                              |¦  «         d S rK   )r”   r›   r#  )rŒ   r^  r]  s      r)   Ú_set_insertion_point_and_locz*CodeGenerator._set_insertion_point_and_loc²  s4   € ØŒ×,Ò,¨RÑ0Ô0Ð0ØŒ×Ò˜SÑ!Ô!Ð!Ð!Ð!r+   c                 ó˜   — t          |¦  «        s|g}|D ]4}|                      |¦  «         t          |t          j        ¦  «        r d S Œ5d S rK   )r]   r§   rL   r±   rÚ   )rŒ   ÚstmtsÚstmts      r)   Úvisit_compound_statementz&CodeGenerator.visit_compound_statement¹  sf   € å˜UÑ#Ô#ð 	Ø�GˆEØð 	ð 	ˆDØ�JŠJ�tÑÔÐõ ˜$¥¤
Ñ+Ô+ð Ø��ðð		ð 	r+   c                 óF   — t           j                             | |¦  «         d S rK   ©r±   ÚNodeVisitorrµ   rÂ   s     r)   rÌ   zCodeGenerator.visit_ModuleÄ  ó    € ÝŒ×%Ò% d¨DÑ1Ô1Ð1Ð1Ð1r+   c                 óŽ   ‡ — ‰                       |j        ¦  «        }|�J ‚t          j        ˆ fd„|j        D ¦   «         ¦  «        }|S )Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r/   r¦   )r1   ÚeltrŒ   s     €r)   r3   z,CodeGenerator.visit_List.<locals>.<listcomp>Ê  s#   ø€ ÐDÐDÐD°3˜tŸzšz¨#™œÐDÐDÐDr+   )r§   r½   r   r\   Úelts)rŒ   re   r½   rm  s   `   r)   Ú
visit_ListzCodeGenerator.visit_ListÇ  sJ   ø€ Ø�jŠj˜œÑ"Ô"ˆØˆ{ˆ{ˆ{ÝŒ~ÐDÐDÐDÐD¸$¼)ÐDÑDÔDÑEÔEˆØˆr+   c                 óþ  ‡ ‡— ‰                       |j        ¦  «        }g }ˆˆ fd„Š ‰|¦  «        }|€t          j        }n=t	          |t          j        j        ¦  «        sJ ‚|                     |¦  «         |j        }‰ j	         
                    |¦  «         ‰ j        €|‰ _        n%‰ j        |k    rt          d‰ j        › d|› �¦  «        ‚‰ j	                             ¦   «         }‰ j	                             |¦  «         d S )Nc                 óÞ   •— t          | t          j        ¦  «        rt          | ‰¦  «        S t          | t          j        t
          t          f¦  «        r‰j                             | ¦  «        S | S rK   )	rL   r   r\   r}   r   ÚintÚfloatr   Ú	to_tensor)rz   ÚdecayrŒ   s    €€r)   rt  z)CodeGenerator.visit_Return.<locals>.decayÒ  s^   ø€ Ý˜%¥¤Ñ0Ô0ð 6Ý-¨e°UÑ;Ô;Ð;Ý˜E¥HÔ$6½½UÐ#CÑDÔDð 6Ø”}×.Ò.¨uÑ5Ô5Ð5ØˆLr+   zInconsistent return types: ú and )r§   rz   r   ÚvoidrL   rR   r   r€   r'   r”   rF   r0  Ú	TypeErrorÚcreate_blockÚset_insertion_point_to_end)rŒ   re   Ú	ret_valuer�   Úret_tyÚpost_ret_blockrt  s   `     @r)   rÃ   zCodeGenerator.visit_ReturnÎ  s  øø€ Ø—J’J˜tœzÑ*Ô*ˆ	Øˆð	ð 	ð 	ð 	ð 	ð 	ð �E˜)Ñ$Ô$ˆ	àÐÝ”]ˆFˆFå˜i­¬Ô)AÑBÔBÐBÐBÐBØ×!Ò! 'Ñ*Ô*Ð*Ø”^ˆFØŒ×Ò˜Ñ!Ô!Ð!ØŒ=Ð Ø"ˆDŒMˆMØŒ]˜fÒ$Ð$ÝÐV¸$¼-ÐVÐVÈfÐVÐVÑWÔWÐWð œ×2Ò2Ñ4Ô4ˆØŒ×/Ò/°Ñ?Ô?Ð?Ð?Ð?r+   c                 ó†   — |                       |j        ¦  «        }t          |t          j        j        ¦  «        sJ ‚|j        S rK   )r§   rz   rL   r   rR   r\   r~   ©rŒ   re   rg   s      r)   Úvisit_StarredzCodeGenerator.visit_Starredì  s8   € Ø�zŠz˜$œ*Ñ%Ô%ˆÝ˜$¥¤Ô 3Ñ4Ô4Ð4Ð4Ð4ØŒ{Ðr+   c                 ój  ‡ — ‰                       |j        ¦  «        \  }}‰ j        r‰                      |d¦  «        ‚t	          |j        j        d d d…         ¦  «        D ]º\  }}|j        j        | dz
           }|j        }|j        }t          j	        |t          j
        ¦   «         ¬¦  «        }	|€t          j        |	g|¬¦  «        }
nt          j        |	||¬¦  «        }
	 ‰ j        rJ ‚d‰ _        ‰                       |
¦  «         d‰ _        Œ¯# d‰ _        w xY w‰ j        rd	nd
}‰ j                             ‰ j        ¦  «        }‰ j                             ‰ j        ‰ j        ||‰ j        ¦  «        ‰ _        ‰ j                             ‰ j        ¦  «         ‰ j                             ¦   «         }‰ j                             ‰ j        ¦  «        }t3          ||¦  «        D ]\  }}‰                      ||¦  «         Œ‰ j                             ¦   «         }‰ j                             |¦  «         ‰                      |j        ¦  «         ‰ j                             ¦   «                              ¦   «         rJ ‚‰ j         �‰ j         tB          j"        k    r,tB          j"        ‰ _         ‰ j         #                    g ¦  «         nÂtI          ‰ j         tB          j%        ¦  «        r‰ j         j&        ‰ j        _'        n‰ j         g‰ j        _'        ‰ j         (                    ‰ j                             ‰ j        ¦  «        ¦  «         ‰ j         #                    ˆ fd„‰ j         )                    ‰ j        ¦  «        D ¦   «         ¦  «         ‰ j         *                    ¦   «          |r‰ j         +                    |¦  «         d S d S )Nz,nested function definition is not supported.éÿÿÿÿr   )r¸   r½   ©Útargetsrz   )Útargetrz   Ú
annotationTFÚpublicÚprivatec                 óD   •— g | ]}‰j                              |¦  «        ‘ŒS r/   )r”   Úcreate_poison)r1   r2   rŒ   s     €r)   r3   z3CodeGenerator.visit_FunctionDef.<locals>.<listcomp>   s)   ø€ ÐtÐtÐtÀ˜dœl×8Ò8¸Ñ<Ô<ÐtÐtÐtr+   ),r§   rg   rf   r@  ra   Údefaultsr…  ri   r±   r·   r¾   rÛ   Ú	AnnAssignr3  r-  r*  rû   r”   Úget_or_insert_functionr(  r,  r`   Ú	push_backÚadd_entry_blockr  ÚziprZ  r•   Úset_insertion_point_to_startre  r«   Úhas_terminatorr0  r   rv  rF   rL   ry   r|   rå   Ú
reset_typerí   Úfinalizery  )rŒ   re   rd   Úkwarg_namesr7   Údefault_valueÚarg_noder…  r&   Ú	st_targetÚ	init_nodeÚ
visibilityÚfn_tyÚentryÚ
arg_valuesÚarg_nameÚ	arg_valueÚ	insert_pts   `                 r)   rÏ   zCodeGenerator.visit_FunctionDefñ  sq  ø€ Ø!%§¢¨D¬IÑ!6Ô!6Ñˆ	�;ØŒ7ð 	ZØ×#Ò# DÐ*XÑYÔYÐYå )¨$¬)Ô*<¸T¸T¸r¸TÔ*BÑ CÔ Cð 	8ð 	8ÑˆAˆ}Ø”y”~ q b¨1¡fÔ-ˆHØ!Ô,ˆJØ”<ˆDÝœ D­c¬i©k¬kÐ:Ñ:Ô:ˆIØÐ!ÝœJ°	¨{À-ÐPÑPÔP�	�	åœM°À-Ð\fÐgÑgÔg�	ð8ØÔ:Ð:Ð:Ð:Ø26�Ô/Ø—
’
˜9Ñ%Ô%Ð%à27�Ô/Ð/ø°%�Ô/Ð7Ð7Ð7Ð7ð "&¤Ð>�X�X°Yˆ
Ø”×(Ò(¨¬Ñ6Ô6ˆØ”,×5Ò5°d´kÀ4ÔCUÐW\Ð^hÐjnÔjwÑxÔxˆŒØŒ×Ò˜dœgÑ&Ô&Ð&Ø”×'Ò'Ñ)Ô)ˆØ”^×/Ò/°´Ñ8Ô8ˆ
å#& y°*Ñ#=Ô#=ð 	0ð 	0ÑˆH�iØ�NŠN˜8 YÑ/Ô/Ð/Ð/Ø”L×4Ò4Ñ6Ô6ˆ	ØŒ×1Ò1°%Ñ8Ô8Ð8à×%Ò% d¤iÑ0Ô0Ð0ð ”<×3Ò3Ñ5Ô5×DÒDÑFÔFÐFÐFÐFØŒ=Ð  D¤MµX´]Ò$BÐ$BÝ$œMˆDŒMØŒL×Ò˜RÑ Ô Ð Ð å˜$œ-­Ô)<Ñ=Ô=ð ;Ø+/¬=Ô+>�”Ô(Ð(à,0¬M¨?�”Ô(ØŒG×Ò˜tœ~×7Ò7¸¼ÑEÔEÑFÔFÐFØŒL×ÒÐtÐtÐtÐtÀtÄ~×GeÒGeÐfjÔfrÑGsÔGsÐtÑtÔtÑuÔuÐuØŒ×ÒÑÔÐàð 	?ØŒL×3Ò3°IÑ>Ô>Ð>Ð>Ð>ð	?ð 	?s   Ã %DÄ	Dc                 óˆ   — g }|j         D ]}||                      |¦  «        gz  }Œ|                      |j        ¦  «        }||fS rK   )rg   r§   Úkwarg)rŒ   re   rd   ri   r”  s        r)   Úvisit_argumentszCodeGenerator.visit_arguments&  sO   € Øˆ	Ø”9ð 	+ð 	+ˆCØ˜$Ÿ*š* S™/œ/Ð*Ñ*ˆIˆIØ—j’j ¤Ñ,Ô,ˆØ˜+Ð%Ð%r+   c                 óP   — t           j                             | |¦  «         |j        S rK   )r±   rh  rµ   ri   rÂ   s     r)   Ú	visit_argzCodeGenerator.visit_arg-  s!   € ÝŒ×%Ò% d¨DÑ1Ô1Ð1ØŒxˆr+   c                 ó`  — |                       |j        ¦  «        }|                       |j        ¦  «        }|                       |j        ¦  «        }|t          k    rA|| j        v rt          |› d�¦  «        ‚t	          |¦  «        }|| j        |<   | j        |         S |                      |¦  «        S )Nz4 is already defined. constexpr cannot be reassigned.)r§   r…  r„  rz   r   r�   Ú
ValueErrorrÆ   )rŒ   re   r…  r„  rz   s        r)   Úvisit_AnnAssignzCodeGenerator.visit_AnnAssign1  s¶   € à—Z’Z ¤Ñ0Ô0ˆ
Ø—’˜DœKÑ(Ô(ˆØ—
’
˜4œ:Ñ&Ô&ˆà�Ò"Ð"Ø˜œÐ$Ð$Ý  Fð "Eð "Eð "Eñ Fô Fð Få˜eÑ$Ô$ˆEØ"'ˆDŒK˜ÑØ”;˜vÔ&Ð&à× Ò  Ñ&Ô&Ð&r+   c                 óx  — t          |j        t          j        ¦  «        sJ ‚t          |t          j        ¦  «        r|                      ||¦  «        S t          |t          j        ¦  «        r=t          |j        ¦  «        D ]&\  }}|  	                    ||j
        |         ¦  «         Œ'd S t          |t          j        ¦  «        r2|                      |j        ¦  «        }t          ||j        |¦  «         d S t          |t          j        ¦  «        sJ ‚|                      |                      |¦  «        |¦  «         d S rK   )rL   r½   r±   r¾   Ú	SubscriptÚvisit_Subscript_Storer	   ra   rm  ÚassignTargetr~   rÙ   r§   rz   Úsetattrrº   r·   rZ  )rŒ   r„  rz   r7   Úbases        r)   r«  zCodeGenerator.assignTargetA  s  € Ý˜&œ*¥c¤iÑ0Ô0Ð0Ð0Ð0Ý�f�cœmÑ,Ô,ð 	=Ø×-Ò-¨f°eÑ<Ô<Ð<Ý�f�cœiÑ(Ô(ð 	Ý& v¤{Ñ3Ô3ð ;ð ;‘	��6Ø×!Ò! &¨%¬,°q¬/Ñ:Ô:Ð:Ð:ØˆFÝ�f�cœmÑ,Ô,ð 	Ø—:’:˜fœlÑ+Ô+ˆDÝ�D˜&œ+ uÑ-Ô-Ð-ØˆFÝ˜&¥#¤(Ñ+Ô+Ð+Ð+Ð+Ø�Š�t—z’z &Ñ)Ô)¨5Ñ1Ô1Ð1Ð1Ð1r+   c                 ó  ‡ ‡— ˆˆ fd„Š ‰‰                       |j        ¦  «        ¦  «        }t          |t          j        ¦  «        r|j        gn|j        }t          |¦  «        dk    sJ ‚‰                      |d         |¦  «         d S )Nc                 ó   •— t          | t          j        ¦  «        rt          | ‰¦  «        S t          j        t          j        f}t          | ¦  «        } | �9t          | ¦  «        s*t          | |¦  «        s‰j                             | ¦  «        } | S rK   )	rL   r   r\   r}   rS   r   rN   r   rs  )rz   Únative_nontensor_typesÚ_sanitize_valuerŒ   s     €€r)   r±  z3CodeGenerator.visit_Assign.<locals>._sanitize_valueR  s‰   ø€ Ý˜%¥¤Ñ0Ô0ð FÝ-¨e°_ÑEÔEÐEÝ&.¤nµh´nÐ%EÐ"Ý(¨Ñ/Ô/ˆEØÐ Ý$ UÑ+Ô+ð !å˜uÐ&<Ñ=Ô=ð !ð œ×/Ò/°Ñ6Ô6�ØˆLr+   r   r   )	r§   rz   rL   r±   r‹  r„  rƒ  r…   r«  )rŒ   re   r~   rƒ  r±  s   `   @r)   rÆ   zCodeGenerator.visit_AssignP  s˜   øø€ ð		ð 		ð 		ð 		ð 		ð 		ð !� §¢¨D¬JÑ!7Ô!7Ñ8Ô8ˆÝ#-¨dµC´MÑ#BÔ#BÐT�4”;�-�-ÈÌˆÝ�7‰|Œ|˜qÒ Ð Ð Ð Ø×Ò˜' !œ* fÑ-Ô-Ð-Ð-Ð-r+   c                 ó0  — t          j        |j        ¦  «        }t          j        ¦   «         |_        t          j        ||j        |j        ¦  «        }t          j	        |j        g|¬¦  «        }|  
                    |¦  «         |  
                    |¦  «        S )Nr‚  )r�   Údeepcopyr„  r±   ÚLoadr½   ÚBinOpÚoprz   rÛ   r§   )rŒ   re   ÚlhsÚrhsÚassigns        r)   rÉ   zCodeGenerator.visit_AugAssignb  sq   € ÝŒm˜DœKÑ(Ô(ˆÝ”(‘*”*ˆŒÝŒi˜˜TœW d¤jÑ1Ô1ˆÝ” T¤[ M¸Ð=Ñ=Ô=ˆØ�
Š
�6ÑÔÐØ�zŠz˜#‰ŒÐr+   c                 ó„   — t          |j        ¦  «        t          j        u r|j        S |                      |j        ¦  «        S rK   )r'   r½   r±   r¾   r¸   r2  rÂ   s     r)   r¿   zCodeGenerator.visit_Namej  s4   € Ý�”‰>Œ>�SœYÐ&Ð&Ø”7ˆNØ×$Ò$ T¤WÑ-Ô-Ð-r+   c                 óF   — t           j                             | |¦  «         d S rK   rg  rÂ   s     r)   Úvisit_StorezCodeGenerator.visit_Storeo  ri  r+   c                 óF   — t           j                             | |¦  «         d S rK   rg  rÂ   s     r)   Ú
visit_LoadzCodeGenerator.visit_Loadr  ri  r+   c                 óR   ‡ — ˆ fd„|j         D ¦   «         }t          j        |¦  «        S )Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r/   r¦   )r1   rÿ   rŒ   s     €r)   r3   z-CodeGenerator.visit_Tuple.<locals>.<listcomp>v  s#   ø€ Ð1Ð1Ð1 !�—
’
˜1‘”Ð1Ð1Ð1r+   )rm  r   r\   r~  s   `  r)   Úvisit_TuplezCodeGenerator.visit_Tupleu  s.   ø€ Ø1Ð1Ð1Ð1 t¤yÐ1Ñ1Ô1ˆÝŒ~˜dÑ#Ô#Ð#r+   c                 ó¦  — t          |¦  «        r  t          ||¦  «        || j        ¬¦  «        S t          |¦  «        r6t          j        dd|¦  «        } t          ||¦  «        || j        ¬¦  «        S t          |t          t          j        f¦  «        s$t          |t          ¦  «        rt          |¦  «        } t          ||¦  «        |¦  «        S )N©Ú	_semanticz__(.*)__z__r\1__)	rP   r¹   r   r$   ÚsubrL   r   r   r\   )rŒ   Úmethod_namer·  r¸  Úreverse_method_names        r)   Ú_apply_binary_methodz"CodeGenerator._apply_binary_methody  sË   € å˜SÑ!Ô!ð 	KØ,•7˜3 Ñ,Ô,¨S¸D¼MÐJÑJÔJÐJÝ˜SÑ!Ô!ð 	SÝ"$¤&¨°jÀ+Ñ"NÔ"NÐØ4•7˜3Ð 3Ñ4Ô4°SÀDÄMÐRÑRÔRÐRÝ˜#¥	­8¬>Ð:Ñ;Ô;ð 	!Å
È3ÕPYÑ@ZÔ@Zð 	!Ý˜C‘.”.ˆCØ(�w�s˜KÑ(Ô(¨Ñ-Ô-Ð-r+   c                 óZ  — |                       |j        ¦  «        }|                       |j        ¦  «        }| j                             t          |j        ¦  «        ¦  «        }|€3|                      |d                     |j        j	        ¦  «        ¦  «        ‚|  
                    |||¦  «        S )Nz8AST binary operator '{}' is not (currently) implemented.)r§   ÚleftÚrightÚ_method_name_for_bin_opr  r'   r¶  r@  Úformatrc   rÈ  )rŒ   re   r·  r¸  rÆ  s        r)   Úvisit_BinOpzCodeGenerator.visit_BinOp„  s™   € Ø�jŠj˜œÑ#Ô#ˆØ�jŠj˜œÑ$Ô$ˆØÔ2×6Ò6µt¸D¼G±}´}ÑEÔEˆØÐØ×#Ò# DØ$^×$eÒ$eÐfjÔfmÔfvÑ$wÔ$wñyô yð yà×(Ò(¨°c¸3Ñ?Ô?Ð?r+   Ú__add__Ú__sub__Ú__mul__Ú__truediv__Ú__floordiv__Ú__mod__Ú__pow__Ú
__lshift__Ú
__rshift__Ú__and__Ú__or__Ú__xor__rÌ  c                 óä  — | j                              |¦  «         |                      |j        ¦  «         | j                              ¦   «         }| j                             ¦   «         }i }|j        r†| j                              |¦  «         |                     ¦   «         | _        i | _        |                      |j        ¦  «         | j                             ¦   «         }| j                              ¦   «         }g }|D ]Ã}|df|dffD ]u\  }	}
||	v rlt          |	|         ¦  «        t          ||         ¦  «        k    }|r|	|         j	        ||         j	        k    s"J d|› d||         › d|
› d|	|         › �¦   «         ‚Œv||v s||v r| 
                    |¦  «         ||v r||vr||         ||<   ||v r||vr||         ||<   ŒÄt          |                     ¦   «         |                     ¦   «         z  ¦  «        D ]v}||v rŒ||         }|j	        }||         }|j	        }t          |¦  «        t          |¦  «        k    }|r||k    sJ d|› d|› d	|› d
�¦   «         ‚| 
                    |¦  «         Œw|||||fS )NÚthenÚelsezinitial value for `z` is of type z
, but the z block redefines it as zMismatched type for z between then block (z) and else block (ú))r”   r�  re  r«   r•   r’   r�   rÑ   r�   r'   ÚappendrA   Úkeys)rŒ   re   r‘   Ú
then_blockÚ
else_blockÚ	then_defsÚ	else_defsÚnamesr&   ÚdefsÚ
block_nameÚ
type_equalÚthen_valÚthen_tyÚelse_valÚelse_tys                   r)   Úvisit_then_else_blocksz$CodeGenerator.visit_then_else_blocksœ  s  € àŒ×1Ò1°*Ñ=Ô=Ð=Ø×%Ò% d¤iÑ0Ô0Ð0Ø”\×5Ò5Ñ7Ô7ˆ
Ø”O×(Ò(Ñ*Ô*ˆ	àˆ	ØŒ;ð 	<ØŒL×5Ò5°jÑAÔAÐAØ!Ÿ,š,™.œ.ˆDŒKØ ˆDŒOØ×)Ò)¨$¬+Ñ6Ô6Ð6Øœ×,Ò,Ñ.Ô.ˆIØœ×9Ò9Ñ;Ô;ˆJð ˆàð 	0ð 	0ˆDà&/°Ð%8¸9ÀfÐ:MÐ$Nð Sð SÑ ��jØ˜4�<�<Ý!% d¨4¤jÑ!1Ô!1µT¸'À$¼-Ñ5HÔ5HÒ!H�JØ%ð S¨$¨t¬*¬/¸WÀT¼]Ô=OÒ*OÐ*OÐ*OðS¨dð Sð SÀÈÄð Sð SØ#-ðSð SØFJÈ4ÄjðSð Sñ +PÔ*OÐ*Oøð �yÐ Ð  D¨IÐ$5Ð$5Ø—’˜TÑ"Ô"Ð"à�yÐ Ð  T°Ð%:Ð%:Ø")¨$¤-�	˜$‘à�yÐ Ð  T°Ð%:Ð%:Ø")¨$¤-�	˜$‘øõ ˜9Ÿ>š>Ñ+Ô+¨i¯nªnÑ.>Ô.>Ñ>Ñ?Ô?ð 	ð 	ˆDØ�uˆ}ˆ}ØØ  ”ˆHØ”mˆGØ  ”ˆHØ”mˆGÝ˜h™œ­4°©>¬>Ò9ˆJØð . '¨WÒ"4Ð"4Ð"4ð. tð .ð .À'ð .ð .Ø#*ð.ð .ð .ñ #5Ô"4Ð"4ð �LŠL˜ÑÔÐÐà˜) Z°¸UÐBÐBr+   c                 óx  ‡‡‡— t          | ¦  «        5 }|\  }}| j                             ¦   «         }| j                             ¦   «         }| j                             |¦  «         | j                             |j        ||¦  «         |                      ||||¦  «        \  ŠŠ}}}| j                             ¦   «         Š| j                             |¦  «         |                     ¦   «         rJ |› ¦   «         ‚t          ˆfd„|D ¦   «         ¦  «        }	| j         	                    ‰|	¦  «         | j                             |¦  «         |                     ¦   «         rJ |› ¦   «         ‚t          ˆfd„|D ¦   «         ¦  «        }
| j         	                    ‰|
¦  «         t          |	¦  «        t          |
¦  «        k    sJ ‚t          |	|
¦  «        D ]H\  }}|                     ¦   «         }||                     ¦   «         k    sJ ‚‰                     |¦  «         ŒI	 d d d ¦  «         n# 1 swxY w Y   | j                             ‰¦  «         ˆfd„t          t          |	¦  «        ¦  «        D ¦   «         }ˆfd„|D ¦   «         }t!          ||¦  «        }t          ||¦  «        D ]\  }}|                      ||¦  «         Œd S )Nc              3   ó(   •K  — | ]}‰|         V — Œd S rK   r/   ©r1   r&   rã  s     €r)   r©   z3CodeGenerator.visit_if_top_level.<locals>.<genexpr>à  ó'   øè è € Ð/RÐ/RÀD°	¸$´Ð/RÐ/RÐ/RÐ/RÐ/RÐ/Rr+   c              3   ó(   •K  — | ]}‰|         V — Œd S rK   r/   ©r1   r&   rä  s     €r)   r©   z3CodeGenerator.visit_if_top_level.<locals>.<genexpr>å  rñ  r+   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r/   ©ri   )r1   r7   Úendif_blocks     €r)   r3   z4CodeGenerator.visit_if_top_level.<locals>.<listcomp>ð  s%   ø€ ÐLÐLÐL¨a�{—’ qÑ)Ô)ÐLÐLÐLr+   c                 ó*   •— g | ]}‰|         j         ‘ŒS r/   rw   rð  s     €r)   r3   z4CodeGenerator.visit_if_top_level.<locals>.<listcomp>ñ  ó    ø€ Ð8Ð8Ð8¨$�˜4”Ô%Ð8Ð8Ð8r+   )r‰   r”   rx  ry  Úcreate_cond_branchÚhandlerí  r‘  r‚   Úcreate_branchr…   r�  Úget_typeÚadd_argumentr�  r  r‡   rZ  )rŒ   Úcondre   Úsrr‘   Úip_blockrá  râ  rå  Úthen_handlesÚelse_handlesÚthen_hÚelse_hr2   Úres_handlesr|   Ú
new_valuesr&   Ú	new_valuerä  rö  rã  s                      @@@r)   Úvisit_if_top_levelz CodeGenerator.visit_if_top_levelÐ  s  øøø€ Ý˜dÑ#Ô#ð 	- rØ "ÑˆG�XØœ×2Ò2Ñ4Ô4ˆJØœ×2Ò2Ñ4Ô4ˆJàŒL×3Ò3°HÑ=Ô=Ð=ØŒL×+Ò+¨D¬K¸ÀZÑPÔPÐPð ×+Ò+¨D°'¸:ÀzÑRÔRñ @ˆI�y *¨j¸%ð œ,×3Ò3Ñ5Ô5ˆKàŒL×3Ò3°JÑ?Ô?Ð?Ø!×0Ò0Ñ2Ô2ÐCÐC°z°OÑCÔCÐCÝ/Ð/RÐ/RÐ/RÐ/RÈEÐ/RÑ/RÔ/RÑRÔRˆLØŒL×&Ò& {°LÑAÔAÐAàŒL×3Ò3°JÑ?Ô?Ð?Ø!×0Ò0Ñ2Ô2ÐCÐC°z°OÑCÔCÐCÝ/Ð/RÐ/RÐ/RÐ/RÈEÐ/RÑ/RÔ/RÑRÔRˆLØŒL×&Ò& {°LÑAÔAÐAÝ�|Ñ$Ô$­¨LÑ(9Ô(9Ò9Ð9Ð9Ð9Ý"% l°LÑ"AÔ"Að -ð -‘�˜Ø—_’_Ñ&Ô&�Ø˜VŸ_š_Ñ.Ô.Ò.Ð.Ð.Ð.Ø×(Ò(¨Ñ,Ô,Ð,Ð,ð-ð/	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-ð: 	Œ×1Ò1°+Ñ>Ô>Ð>àLÐLÐLÐLµ5½¸\Ñ9JÔ9JÑ3KÔ3KÐLÑLÔLˆØ8Ð8Ð8Ð8°%Ð8Ñ8Ô8ˆÝ(¨°eÑ<Ô<ˆ
Ý" 5¨*Ñ5Ô5ð 	,ð 	,‰OˆD�)Ø�NŠN˜4 Ñ+Ô+Ð+Ð+ð	,ð 	,s   “HH#È#H'È*H'c                 óN  ‡‡‡— t          | ¦  «        5 }|\  }}|                      ¦   «         \  }}| j                             ¦   «         }|j        r| j                             ¦   «         nd }	|                      ||||	¦  «        \  ŠŠ}}	}
t          ˆfd„|
D ¦   «         ¦  «        }|                      ||¦  «         | j                             d„ |D ¦   «         |j	        d¦  «        Š| 
                    ‰                     ¦   «         ¦  «         | j                             ‰                     ¦   «         ¦  «         t          |
¦  «        dk    r| j                             |¦  «         |j        s‰                     ¦   «         }	n'|	 
                    ‰                     ¦   «         ¦  «         | j                             ‰                     ¦   «         ¦  «         t          |
¦  «        dk    r5t          ˆfd„|
D ¦   «         ¦  «        }| j                             |¦  «         d d d ¦  «         n# 1 swxY w Y   ˆfd„t!          t          |¦  «        ¦  «        D ¦   «         }ˆfd„|
D ¦   «         }t#          ||¦  «        }t%          |
|¦  «        D ]\  }}|                      ||¦  «         Œd S )Nc              3   ó(   •K  — | ]}‰|         V — Œd S rK   r/   rð  s     €r)   r©   z-CodeGenerator.visit_if_scf.<locals>.<genexpr>   rñ  r+   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r/   ©rü  ©r1   Úhs     r)   r3   z.CodeGenerator.visit_if_scf.<locals>.<listcomp>  s    € Ð.RÐ.RÐ.RÀ¨q¯zªz©|¬|Ð.RÐ.RÐ.Rr+   Tr   c              3   ó(   •K  — | ]}‰|         V — Œd S rK   r/   ró  s     €r)   r©   z-CodeGenerator.visit_if_scf.<locals>.<genexpr>  s'   øè è € Ð3VÐ3VÈ°I¸d´OÐ3VÐ3VÐ3VÐ3VÐ3VÐ3Vr+   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r/   ©Ú
get_result)r1   r7   Úif_ops     €r)   r3   z.CodeGenerator.visit_if_scf.<locals>.<listcomp>  s'   ø€ ÐMÐMÐM¨q�u×'Ò'¨Ñ*Ô*ÐMÐMÐMr+   c                 ó*   •— g | ]}‰|         j         ‘ŒS r/   rw   rð  s     €r)   r3   z.CodeGenerator.visit_if_scf.<locals>.<listcomp>  rø  r+   )r‰   r_  r”   rx  rÑ   rí  r‚   ra  Úcreate_if_oprú  Úmerge_block_beforeÚget_then_blockry  r…   Úcreate_yield_opÚget_else_blockr  r‡   r�  rZ  )rŒ   rþ  re   rÿ  r‘   r-   r^  Úlast_locrá  râ  rå  r  r  r  r|   r  r&   r  rä  r  rã  s                     @@@r)   Úvisit_if_scfzCodeGenerator.visit_if_scf÷  sä  øøø€ Ý˜dÑ#Ô#ð 	; rØ‰JˆG�QØ×<Ò<Ñ>Ô>‰LˆB�Øœ×2Ò2Ñ4Ô4ˆJØ8<¼ÐM˜œ×2Ò2Ñ4Ô4Ð4ÈˆJà×+Ò+¨D°'¸:ÀzÑRÔRñ @ˆI�y *¨j¸%õ 0Ð/RÐ/RÐ/RÐ/RÈEÐ/RÑ/RÔ/RÑRÔRˆLØ×-Ò-¨b°(Ñ;Ô;Ð;Ø”L×-Ò-Ð.RÐ.RÀ\Ð.RÑ.RÔ.RÐTXÔT_ÐaeÑfÔfˆEØ×)Ò)¨%×*>Ò*>Ñ*@Ô*@ÑAÔAÐAØŒL×3Ò3°E×4HÒ4HÑ4JÔ4JÑKÔKÐKÝ�5‰zŒz˜AŠ~ˆ~Ø”×,Ò,¨\Ñ:Ô:Ð:Ø”;ð FØ"×1Ò1Ñ3Ô3�
�
à×-Ò-¨e×.BÒ.BÑ.DÔ.DÑEÔEÐEØŒL×3Ò3°E×4HÒ4HÑ4JÔ4JÑKÔKÐKÝ�5‰zŒz˜AŠ~ˆ~Ý3Ð3VÐ3VÐ3VÐ3VÐPUÐ3VÑ3VÔ3VÑVÔV�Ø”×,Ò,¨\Ñ:Ô:Ð:ð-	;ð 	;ð 	;ñ 	;ô 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;øøøð 	;ð 	;ð 	;ð 	;ð0 NÐMÐMÐMµE½#¸lÑ:KÔ:KÑ4LÔ4LÐMÑMÔMˆØ8Ð8Ð8Ð8°%Ð8Ñ8Ô8ˆÝ(¨°eÑ<Ô<ˆ
Ý" 5¨*Ñ5Ô5ð 	,ð 	,‰OˆD�)Ø�NŠN˜4 Ñ+Ô+Ð+Ð+ð	,ð 	,s   “H	H(È(H,È/H,c           	      ó  — |                       |j        ¦  «        }t          |¦  «        �r/t          |¦  «        r|                      |d¦  «        ‚|j                             ¦   «         rUt          j        dt          j
        |j        ¦  «        z  ¦  «         t          j                             || j        | ¬¦  «        }|                     t          j        | j        ¬¦  «        }t#          | j        ¦  «                              |¦  «        }|r5| j        r|                      |d¦  «        ‚|                      ||¦  «         d S |                      ||¦  «         d S t-          |¦  «        }t          |¦  «        t.          vr^|                      |d                     d                     d„ t.          D ¦   «         ¦  «        t          |¦  «        j        ¦  «        ¦  «        ‚|r|j        n|j        }|                      |¦  «         d S )	Nz=Boolean value of Tensor with more than one value is ambiguousziIf conditional called with multidimensional Tensor instead of scalar; please use "if (%s).item()" instead)rÄ  Ú
_generatorrÃ  zÔCannot have `return` statements inside `while` or `for` statements in triton (note that this also applies to `return` statements that are inside functions transitively called from within `while`/`for` statements)úO`if` conditionals can only accept values of type {{{}}}, not objects of type {}ú, c              3   ó$   K  — | ]}|j         V — Œd S rK   r7  r8  s     r)   r©   z)CodeGenerator.visit_If.<locals>.<genexpr>2  ó$   è è € Ð!GÐ!G° !¤*Ð!GÐ!GÐ!GÐ!GÐ!GÐ!Gr+   )r§   ÚtestrP   rY   r@  r'   rW   ÚwarningsÚwarnr±   Úunparser   rR   Ú_unsplatr   ÚtoÚint1r¡   r£   r/  r  r  r   Ú_condition_typesrÍ  r@   rc   r«   rÑ   re  )rŒ   re   rþ  Úcontains_returnÚactive_blocks        r)   rÒ   zCodeGenerator.visit_If  s   € Ø�zŠz˜$œ)Ñ$Ô$ˆå˜TÑ"Ô"ñ 	8Ý$ TÑ*Ô*ð oØ×'Ò'¨Ð.mÑnÔnÐnØŒy×!Ò!Ñ#Ô#ð ^Ý”ð BÝ”k $¤)Ñ,Ô,ñ-ñ.ô .ð .õ  ”}×-Ò-¨d¸d¼mÐX\Ð-Ñ]Ô]�Ø—7’7�8œ=°D´M�7ÑBÔBˆDÝ3°D´KÑ@Ô@×FÒFÀtÑLÔLˆOØð .Ø”>ð UØ×+Ò+Øð TñUô Uð Uð ×'Ò'¨¨dÑ3Ô3Ð3Ð3Ð3à×!Ò! $¨Ñ-Ô-Ð-Ð-Ð-å'¨Ñ-Ô-ˆDå�D‰zŒzÕ!1Ð1Ð1Ø×'Ò'ØÐk×rÒrØŸ	š	Ð!GÐ!GÕ6FÐ!GÑ!GÔ!GÑGÔGÝ˜T™
œ
Ô+ñ-ô -ñ.ô .ð .ð
 )-Ð=˜4œ9˜9°$´+ˆLØ×)Ò)¨,Ñ7Ô7Ð7Ð7Ð7r+   c           	      óP  — |                       |j        ¦  «        }t          |¦  «        �rD|                     t          j        | j        ¬¦  «        }t          | ¦  «        5  |                      ¦   «         \  }}| j	         
                    ¦   «         }| j	                             |¦  «         | j                             |                       |j        ¦  «        ¦  «        }| j	                             ¦   «         }| j	         
                    ¦   «         }| j	                             |¦  «         | j                             |                       |j        ¦  «        ¦  «        }| j	                             ¦   «         }|                      ||¦  «         |j        |j        k    sJ d|j        › d|j        › �¦   «         ‚|j        }	|	t          j        k    r|	                     | j	        ¦  «        gng }
| j	                             |
|j        d¦  «        }|                     |                     ¦   «         ¦  «         |
rL| j	                             |                     ¦   «         ¦  «         | j	                             |j        g¦  «         | j	                             |                     ¦   «         ¦  «         |                     |                     ¦   «         ¦  «         |
rL| j	                             |                     ¦   «         ¦  «         | j	                             |j        g¦  «         |
r3t          j                             |                     d¦  «        |	¦  «        nd cd d d ¦  «         S # 1 swxY w Y   d S t=          |¦  «        }t#          |¦  «        t>          vr^|                       |d !                    d "                    d„ t>          D ¦   «         ¦  «        t#          |¦  «        j#        ¦  «        ¦  «        ‚|r|                       |j        ¦  «        S |                       |j        ¦  «        S )	NrÃ  zATernary expression with dynamic condition has inconsistent types ru  Tr   r  r  c              3   ó$   K  — | ]}|j         V — Œd S rK   r7  r8  s     r)   r©   z,CodeGenerator.visit_IfExp.<locals>.<genexpr>f  r!  r+   )$r§   r"  rP   r'  r   r(  r   r‰   r_  r”   rx  r�  rs  r«   r•   rÑ   ra  r'   rv  Úto_irr  rú  r  r  ry  r  r  rR   r   r  r   r)  r@  rÍ  r@   rc   )rŒ   re   rþ  r^  r  rá  ré  râ  rë  r0  Úret_type_irr  s               r)   rÔ   zCodeGenerator.visit_IfExp8  sý  € Ø�zŠz˜$œ)Ñ$Ô$ˆÝ˜TÑ"Ô"ñ 1	/Ø—7’7�8œ=°D´M�7ÑBÔBˆDå! $Ñ'Ô'ð !dð !dØ#×@Ò@ÑBÔB‘��Hà!œ\×6Ò6Ñ8Ô8�
Ø”×9Ò9¸*ÑEÔEÐEØœ=×2Ò2°4·:²:¸d¼iÑ3HÔ3HÑIÔI�Ø!œ\×=Ò=Ñ?Ô?�
à!œ\×6Ò6Ñ8Ô8�
Ø”×9Ò9¸*ÑEÔEÐEð  œ=×2Ò2°4·:²:¸d¼kÑ3JÔ3JÑKÔK�Ø!œ\×=Ò=Ñ?Ô?�
à×1Ò1°"°hÑ?Ô?Ð?à”}¨¬Ò5Ð5Ð5Ø{ÐX`ÔXeÐ{Ð{ÐltÔlyÐ{Ð{ñ 6Ô5Ð5à#œ=�à@HÍHÌMÒ@YÐ@Y˜xŸ~š~¨d¬lÑ;Ô;Ð<Ð<Ð_a�Øœ×1Ò1°+¸t¼{ÈDÑQÔQ�Ø×-Ò-¨e×.BÒ.BÑ.DÔ.DÑEÔEÐEØð DØ”L×;Ò;¸E×<PÒ<PÑ<RÔ<RÑSÔSÐSØ”L×0Ò0°(´/Ð1BÑCÔCÐCà”×7Ò7¸×8LÒ8LÑ8NÔ8NÑOÔOÐOØ×-Ò-¨e×.BÒ.BÑ.DÔ.DÑEÔEÐEØð DØ”L×;Ò;¸E×<PÒ<PÑ<RÔ<RÑSÔSÐSØ”L×0Ò0°(´/Ð1BÑCÔCÐCØNYÐc•x”}×+Ò+¨E×,<Ò,<¸QÑ,?Ô,?ÀÑJÔJÐJÐ_cðC!dð !dð !dð !dñ !dô !dð !dð !dð !dð !dð !dð !døøøð !dð !dð !dð !dð !dð !dõF (¨Ñ-Ô-ˆDõ �D‰zŒzÕ!1Ð1Ð1Ø×'Ò'ØÐk×rÒrØŸ	š	Ð!GÐ!GÕ6FÐ!GÑ!GÔ!GÑGÔGÝ˜T™
œ
Ô+ñ-ô -ñ.ô .ð .ð ð /Ø—z’z $¤)Ñ,Ô,Ð,à—z’z $¤+Ñ.Ô.Ð.s   Á K5M"Í"M&Í)M&c                 ó   — d S rK   r/   rÂ   s     r)   Ú
visit_PasszCodeGenerator.visit_Passm  s   € Øˆr+   c                 ó"  — t          |j        ¦  «        dk    rt          |j        ¦  «        dk    s|                      |d¦  «        ‚|                      |j        ¦  «        }|                      |j        d         ¦  «        }t          |¦  «        }t          |¦  «        }t          |j        d         ¦  «        t          j	        u rt          ||u ¦  «        S t          |j        d         ¦  «        t          j        u rt          ||u¦  «        S | j                             t          |j        d         ¦  «        ¦  «        }|€9|                      |d                     |j        d         j        ¦  «        ¦  «        ‚|                      |||¦  «        S )Nr   z1simultaneous multiple comparison is not supportedr   z<AST comparison operator '{}' is not (currently) implemented.)r…   ÚcomparatorsÚopsr@  r§   rÊ  r   r'   r±   ÚIsr   ÚIsNotÚ_method_name_for_comp_opr  rÍ  rc   rÈ  )rŒ   re   r·  r¸  Ú	lhs_valueÚ	rhs_valuerÆ  s          r)   Úvisit_ComparezCodeGenerator.visit_Comparep  sa  € Ý�DÔ$Ñ%Ô%¨Ò*Ð*­s°4´8©}¬}ÀÒ/AÐ/AØ×#Ò# DÐ*]Ñ^Ô^Ð^Ø�jŠj˜œÑ#Ô#ˆØ�jŠj˜Ô)¨!Ô,Ñ-Ô-ˆÝ(¨Ñ-Ô-ˆ	Ý(¨Ñ-Ô-ˆ	Ý�”˜”ÑÔ¥¤Ð&Ð&Ý˜Y¨)Ð3Ñ4Ô4Ð4Ý�”˜”ÑÔ¥¤	Ð)Ð)Ý˜Y¨iÐ7Ñ8Ô8Ð8ØÔ3×7Ò7½¸T¼XÀa¼[Ñ8IÔ8IÑJÔJˆØÐØ×#Ò#ØÐT×[Ò[Ð\`Ô\dÐefÔ\gÔ\pÑqÔqñsô sð sà×(Ò(¨°c¸3Ñ?Ô?Ð?r+   Ú__eq__Ú__ne__Ú__lt__Ú__le__Ú__gt__Ú__ge__r7  c           
      ó  — |                       |j        ¦  «        }| j                             t	          |j        ¦  «        ¦  «        }|€$|                      |d|j        j        › d�¦  «        ‚t          |¦  «        r t          ||¦  «        | j
        ¬¦  «        S 	  t          ||¦  «        ¦   «         S # t          $ rG |dk    rt          | ¦  «        cY S |                      |d|› dt	          |¦  «        j        › �¦  «        ‚w xY w)NzAST unary operator 'z!' is not (currently) implemented.rÃ  Ú__not__z)' is not (currently) implemented on type )r§   ÚoperandÚ_method_name_for_unary_opr  r'   r¶  r@  rc   rP   r¹   r   ÚAttributeErrorr   )rŒ   re   rC  rf   s       r)   Úvisit_UnaryOpzCodeGenerator.visit_UnaryOp…  s)  € Ø—*’*˜Tœ\Ñ*Ô*ˆØÔ+×/Ò/µ°T´W±´Ñ>Ô>ˆØˆ:Ø×#Ò# DÐ*tÀÄÔAQÐ*tÐ*tÐ*tÑuÔuÐuÝ˜WÑ%Ô%ð 	AØ'•7˜7 BÑ'Ô'°$´-Ð@Ñ@Ô@Ð@ð	tØ'•7˜7 BÑ'Ô'Ñ)Ô)Ð)øÝð 	tð 	tð 	tØ�YŠˆÝ  W Ñ-Ô-Ð-Ð-Ð-Ø×#Ò#ØÐr¨RÐrÐrÕZ^Ð_fÑZgÔZgÔZpÐrÐrñtô tð tð	tøøøs   ÂB4 Â4 DÃ/DÚ__neg__Ú__pos__rB  Ú
__invert__rD  c                 óP  — t          |¦  «        sJ d|› d�¦   «         ‚t          |¦  «        sJ d|› d�¦   «         ‚t          |¦  «        t          |¦  «        u sJ d|› d�¦   «         ‚t          |¦  «        r.|j        |j        k    s J d|› d|j        › d|j        › d	�¦   «         ‚d S d S )
Nzcannot reassign constxpr z in the loopzcannot reasign constexpr zLoop carried variable z changed typezLoop-carried variable z has initial type z but is re-assigned to z: in loop! Please make sure that the type stays consistent.)rN   r'   rP   )rŒ   r&   Úloop_valÚlive_vals       r)   Ú_verify_loop_carried_variablez+CodeGenerator._verify_loop_carried_variable˜  sþ   € Ý Ñ)Ô)ÐYÐYÐ+YÀtÐ+YÐ+YÐ+YÑYÔYÐYÝ Ñ)Ô)ÐYÐYÐ+YÀtÐ+YÐ+YÐ+YÑYÔYÐYÝ�H‰~Œ~¥ h¡¤Ð/Ð/Ð/Ð1]È$Ð1]Ð1]Ð1]Ñ/Ô/Ð/Ý$ XÑ.Ô.ð 	@°(´-À8Ä=Ò2PÐ2PÐ2Pð@ Tð @ð @¸X¼]ð @ð @Ø%-¤]ð@ð @ð @ñ 3QÔ2PÐ2Pð 	@ð 	@Ð2PÐ2Pr+   c                 ó6   — |                       |j        ¦  «        S rK   )r§   Úcontext_exprrÂ   s     r)   Úvisit_withitemzCodeGenerator.visit_withitem¡  s   € Ø�zŠz˜$Ô+Ñ,Ô,Ð,r+   c                 ó’  ‡ — t          |j        ¦  «        dk    sJ ‚|j        d         j        }‰                      |j        ¦  «        }|t
          j        k    rUˆ fd„|j        D ¦   «         } ||d‰ j        iŽ5  ‰  	                    |j
        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S ‰  	                    |j
        ¦  «         d S )Nr   r   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r/   r¦   ©r1   ri   rŒ   s     €r)   r3   z,CodeGenerator.visit_With.<locals>.<listcomp>©  s#   ø€ Ð<Ð<Ð<¨�D—J’J˜s‘O”OÐ<Ð<Ð<r+   Ú_builder)r…   r  rO  r§   rÖ   r   Ú
async_taskrg   r”   re  r«   )rŒ   re   r  ÚwithitemClassrg   s   `    r)   Ú
visit_WithzCodeGenerator.visit_With¤  s  ø€ Ý�4”:‰Œ !Ò#Ð#Ð#Ð#Ø”*˜Q”-Ô,ˆØŸ
š
 7¤<Ñ0Ô0ˆØ�HÔ/Ò/Ð/Ø<Ð<Ð<Ð<¨w¬|Ð<Ñ<Ô<ˆDØ� Ð<¨t¬|Ð<Ð<ð 9ð 9Ø×-Ò-¨d¬iÑ8Ô8Ð8ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9ð 9ð 9ð ×)Ò)¨$¬)Ñ4Ô4Ð4Ð4Ð4s   Á8B Â B$Â'B$c                 ó’  ‡‡‡— t          | ¦  «        5 }|\  }}|                      ¦   «         \  }}| j                             ¦   «         }| j                             |¦  «         | j                             |¦  «         |                      |j        ¦  «         | j         	                    ¦   «          | j
        }|                     ¦   «          g }	g }
|D ]W}||v rQ||         }||         }|                      |||¦  «         |	                     |¦  «         |
                     |¦  «         ŒXt          |
¦  «        }d„ |D ¦   «         }d„ |
D ¦   «         }|                      ||¦  «         | j                             ||¦  «        Š| j                             ‰                     ¦   «         |¦  «        Š| j                             ‰¦  «         ˆfd„t%          t'          |¦  «        ¦  «        D ¦   «         }t)          ||¦  «        }t+          |	|¦  «        D ]\  }}|| j        |<   || j
        |<   Œ|                      |j        ¦  «        }| j                             ‰¦  «         | j                             |j        |¦  «         | j                             ‰                     ¦   «         |¦  «        Š| j                             ‰¦  «         ˆfd„t%          t'          |¦  «        ¦  «        D ¦   «         }t)          ||¦  «        }t+          |	|¦  «        D ]\  }}|| j        |<   || j
        |<   Œ| j                             |¦  «         |                      |j        ¦  «         | j         	                    ¦   «          | j
        }g }|D ]!}||v r||                              |¦  «         Œ"| j                             |¦  «         d d d ¦  «         n# 1 swxY w Y   ˆfd„t%          t'          |¦  «        ¦  «        D ¦   «         }t)          ||¦  «        }t+          |	|¦  «        D ]\  }}|| j        |<   || j
        |<   Œ|j        D ]}J d¦   «         ‚d S )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r/   r  r  s     r)   r3   z-CodeGenerator.visit_While.<locals>.<listcomp>Í  s    € Ð;Ð;Ð;¨˜Ÿ
š
™œÐ;Ð;Ð;r+   c                 ó   — g | ]	}|j         ‘Œ
S r/   rw   )r1   Úas     r)   r3   z-CodeGenerator.visit_While.<locals>.<listcomp>Î  s   € Ð5Ð5Ð5 a˜1œ6Ð5Ð5Ð5r+   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r/   rõ  )r1   r7   Úbefore_blocks     €r)   r3   z-CodeGenerator.visit_While.<locals>.<listcomp>Ô  s'   ø€ ÐPÐPÐP°!˜,×*Ò*¨1Ñ-Ô-ÐPÐPÐPr+   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r/   rõ  )r1   r7   Úafter_blocks     €r)   r3   z-CodeGenerator.visit_While.<locals>.<listcomp>â  s%   ø€ ÐQÐQÐQ°1˜KŸOšO¨AÑ.Ô.ÐQÐQÐQr+   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r/   r  )r1   r7   Úwhile_ops     €r)   r3   z-CodeGenerator.visit_While.<locals>.<listcomp>ó  s'   ø€ ÐSÐSÐS°Q˜(×-Ò-¨aÑ0Ô0ÐSÐSÐSr+   FzNot implemented)#r‰   r_  r”   rx  r�  r/  rß  re  r«   Úpopr’   ÚeraserM  r‚   ra  Úcreate_while_opÚcreate_block_with_parentÚ
get_beforer  r…   r‡   r�  r�   r§   r"  ry  Úcreate_condition_oprú  Ú	get_afterr€   r  rÑ   r±   rh  rµ   )rŒ   re   rÿ  r‘   r–   r^  r  ÚdummyÚ	loop_defsrå  Ú	init_argsr&   rK  rL  Úinit_handlesÚinit_tysÚinit_fe_tysÚ
block_argsÚcondition_argsro   rþ  Úbody_handlesÚ	body_argsÚyieldsÚresult_handlesÚresult_valsÚnew_defrd  r_  r]  ra  s                               @@@r)   Úvisit_WhilezCodeGenerator.visit_While¯  sµ  øøø€ Ý˜dÑ#Ô#ð @	1 rØ$&Ñ!ˆG�\Ø×<Ò<Ñ>Ô>‰LˆB�ð ”L×-Ò-Ñ/Ô/ˆEØŒL×5Ò5°eÑ<Ô<Ð<ØŒN×!Ò! $Ñ'Ô'Ð'Ø×)Ò)¨$¬)Ñ4Ô4Ð4ØŒN×ÒÑ Ô Ð ØœˆIØ�KŠK‰MŒMˆMð ˆEØˆIØ!ð 	/ð 	/�Ø˜7�?�?à(¨œ�HØ& tœ}�HØ×6Ò6°t¸XÀxÑPÔPÐPð —L’L Ñ&Ô&Ð&Ø×$Ò$ XÑ.Ô.Ð.øå/°	Ñ:Ô:ˆLØ;Ð;¨lÐ;Ñ;Ô;ˆHØ5Ð5¨9Ð5Ñ5Ô5ˆKØ×-Ò-¨b°(Ñ;Ô;Ð;Ø”|×3Ò3°H¸lÑKÔKˆHàœ<×@Ò@À×ATÒATÑAVÔAVÐX`ÑaÔaˆLØŒL×5Ò5°lÑCÔCÐCØPÐPÐPÐPµu½SÀÑ=NÔ=NÑ7OÔ7OÐPÑPÔPˆJÝ0°¸[ÑIÔIˆNÝ  ¨Ñ7Ô7ð ,ð ,‘	��cØ$'�”˜DÑ!Ø(+�” Ñ%Ð%Ø—:’:˜dœiÑ(Ô(ˆDØŒL×3Ò3°LÑAÔAÐAàŒL×,Ò,¨T¬[¸*ÑEÔEÐEàœ,×?Ò?À×@RÒ@RÑ@TÔ@TÐV^Ñ_Ô_ˆKð ŒL×5Ò5°kÑBÔBÐBØQÐQÐQÐQ½½cÀ,Ñ>OÔ>OÑ8PÔ8PÐQÑQÔQˆLÝ+¨L¸+ÑFÔFˆIÝ  ¨	Ñ2Ô2ð ,ð ,‘	��cØ$'�”˜DÑ!Ø(+�” Ñ%Ð%ØŒN×!Ò! $Ñ'Ô'Ð'Ø×)Ò)¨$¬)Ñ4Ô4Ð4ØŒN×ÒÑ Ô Ð ØœˆIØˆFØ!ð 8ð 8�Ø˜7�?�?Ø˜d”O×/Ò/°Ñ7Ô7Ð7øàŒL×(Ò(¨Ñ0Ô0Ð0ðA@	1ð @	1ð @	1ñ @	1ô @	1ð @	1ð @	1ð @	1ð @	1ð @	1ð @	1øøøð @	1ð @	1ð @	1ð @	1ðF TÐSÐSÐS½%ÅÀLÑ@QÔ@QÑ:RÔ:RÐSÑSÔSˆÝ)¨.¸+ÑFÔFˆÝ  ¨Ñ4Ô4ð 	,ð 	,‰MˆD�'Ø 'ˆDŒK˜ÑØ$+ˆDŒO˜DÑ!Ð!à”Kð 	6ð 	6ˆDØ+Ð+Ñ+Ô+Ð+ð	6ð 	6s   “N(OÏOÏOc                 ó  — t          |j        t          j        ¦  «        sJ ‚|                      |j        ¦  «        }|                      |j        ¦  «        }t          |¦  «        r|                     || j	        ¬¦  «        S ||         S )NrÃ  )
rL   r½   r±   r´  r§   rz   ÚslicerP   Ú__getitem__r   )rŒ   re   r·  Úslicess       r)   Úvisit_Subscript_Loadz"CodeGenerator.visit_Subscript_Loadý  su   € Ý˜$œ(¥C¤HÑ-Ô-Ð-Ð-Ð-Ø�jŠj˜œÑ$Ô$ˆØ—’˜DœJÑ'Ô'ˆÝ˜SÑ!Ô!ð 	DØ—?’? 6°T´]�?ÑCÔCÐCØ�6Œ{Ðr+   c                 ó  — t          |j        t          j        ¦  «        sJ ‚|                      |j        ¦  «        }|                      |j        ¦  «        }t          |t          j        ¦  «        sJ ‚| 	                    ||¦  «         d S rK   )
rL   r½   r±   r¾   r§   rz   ry  r   r\   Ú__setitem__)rŒ   re   rz   r·  r{  s        r)   rª  z#CodeGenerator.visit_Subscript_Store  st   € Ý˜$œ(¥C¤IÑ.Ô.Ð.Ð.Ð.Ø�jŠj˜œÑ$Ô$ˆØ—’˜DœJÑ'Ô'ˆÝ˜#�xœ~Ñ.Ô.Ð.Ð.Ð.Ø�Š˜ Ñ&Ô&Ð&Ð&Ð&r+   c                 ó,   — |                       |¦  «        S rK   )r|  rÂ   s     r)   Úvisit_SubscriptzCodeGenerator.visit_Subscript  s   € Ø×(Ò(¨Ñ.Ô.Ð.r+   c                 ó*   ‡ — ˆ fd„|j         D ¦   «         S )Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r/   r¦   )r1   ÚdimrŒ   s     €r)   r3   z0CodeGenerator.visit_ExtSlice.<locals>.<listcomp>  ó#   ø€ Ð5Ð5Ð5 C�—
’
˜3‘”Ð5Ð5Ð5r+   )ÚdimsrÂ   s   ` r)   Úvisit_ExtSlicezCodeGenerator.visit_ExtSlice  s   ø€ Ø5Ð5Ð5Ð5¨4¬9Ð5Ñ5Ô5Ð5r+   c           	      óž  ‡ ‡,‡-— ‰                       |j        j        ¦  «        }ˆ fd„|j        j        D ¦   «         }t	          ˆ fd„|j        j        D ¦   «         ¦  «        }|t          j        k    r£ ||i |¤Ž}t          |j	        j
        |j        j
        |j        j
        ¦  «        }|D ]g}t          |¦  «        ‰ j        |j        j        <   ‰                      |j        ¦  «         |j        D ]"}t(          j                             ‰ |¦  «         Œ#Œhd S d }	d }
d}d}d}|t          j        u rA ||i |¤Ž}|j	        }|j        }|j        }|j        }	|j        }
|j        }|j        }|j        }nÝ|t          u rÅt9          |¦  «        dk    r|d         n&‰                       t)          j        d¦  «        ¦  «        }t9          |¦  «        dk    r|d         n$‰                       |j        j        d         ¦  «        }t9          |¦  «        dk    r|d         n&‰                       t)          j        d¦  «        ¦  «        }nt=          d¦  «        ‚d}t?          |¦  «        r&|j
        dk     rt          |j
         ¦  «        }d}||}}‰ j          !                    |¦  «        }‰ j          !                    |¦  «        }‰ j          !                    |¦  «        }|j"         #                    ¦   «         r2|j"         #                    ¦   «         r|j"         #                    ¦   «         s(tI          d	|j"        › d
|j"        › d
|j"        › d�¦  «        ‚‰ j          %                    |j"        |j"        ¦  «        }‰ j          %                    ||j"        ¦  «        }| &                    ‰ j'        ¦  «        }|j(        t          j)        j"        j*        j+        k    }|j,        }|j,        }|j,        }‰ j'         -                    |||¦  «        }‰ j'         -                    |||¦  «        }‰ j'         -                    |||¦  «        }‰ j'         .                    |¦  «        }‰  /                    |j        j        t          j)         0                    ||¦  «        ¦  «         tc          ‰ ¦  «        5 }|\  }}‰  2                    ¦   «         \  }}‰ j'         3                    ¦   «         }‰ j'         4                    |¦  «         ‰ j5         6                    |¦  «         ‰                      |j        ¦  «         ‰ j5         7                    ¦   «          | 8                    ¦   «          g }g }g }‰ j9        D ]q}||v rk‰ j9        |         } ||         }!‰  :                    || |!¦  «         | 6                    |¦  «         | 6                    |!¦  «         | 6                    | ¦  «         Œr‰  ;                    ||¦  «         ty          |¦  «        }"d„ |D ¦   «         }#‰ j'         =                    ||||"¦  «        Š,t}          |	¦  «        �.‰, ?                    d‰ j'         @                    |	¦  «        ¦  «         t}          |
¦  «        �.‰, ?                    d‰ j'         @                    |
¦  «        ¦  «         |r-‰, ?                    d‰ j'         A                    ¦   «         ¦  «         |r-‰, ?                    d‰ j'         A                    ¦   «         ¦  «         |r-‰, ?                    d‰ j'         A                    ¦   «         ¦  «         ‰ j5         6                    |¦  «         ‰, B                    d¦  «        Š-‰ j'         4                    ‰-¦  «         | C                    ¦   «         ‰ _        i ‰ _9        ˆ-fd„t          t9          |"¦  «        ¦  «        D ¦   «         }$t‰          |$|#¦  «        }%t‹          ||%¦  «        D ]\  }}&‰  /                    ||&¦  «         Œ‰                      |j        ¦  «         ‰ j5         7                    ¦   «          g }‰ j9        D ]W}||v rQ‰ j9        |         }'t�          |'t          ¦  «        r‰ j          !                    |'¦  «        }'| 6                    |'¦  «         ŒXt9          |¦  «        dk    r)ty          |¦  «        }(‰ j'         G                    |(¦  «         ‰- H                    ¦   «         })|) I                    ¦   «         dk    s
J d¦   «         ‚‰ j'         4                    ‰-¦  «         ‰, J                    ¦   «         }|r6‰ j'         K                    ||¦  «        }‰ j'         L                    ||¦  «        }‰ j        |j        j                 j,         M                    |¦  «         ‰  /                    |j        j        t          j)         0                    ||¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   ˆ,fd„t          t9          |"¦  «        ¦  «        D ¦   «         }*t‰          |*|#¦  «        }+t‹          ||+¦  «        D ]\  }}&‰  /                    ||&¦  «         Œ|j        D ]}J d¦   «         ‚d S )Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r/   r¦   rS  s     €r)   r3   z+CodeGenerator.visit_For.<locals>.<listcomp>  s#   ø€ Ð?Ð?Ð?¨�T—Z’Z ‘_”_Ð?Ð?Ð?r+   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S rK   r¦   ©r1   ÚkeywordrŒ   s     €r)   r©   z*CodeGenerator.visit_For.<locals>.<genexpr>  s/   øè è € ÐQÐQ°7˜4Ÿ:š: gÑ.Ô.ÐQÐQÐQÐQÐQÐQr+   Fr   r   r   zAOnly `range` and `static_range` iterators are currently supportedTz0For loop bounds and step must all be ints, are (r  rÞ  c                 ó   — g | ]	}|j         ‘Œ
S r/   rw   ru   s     r)   r3   z+CodeGenerator.visit_For.<locals>.<listcomp>u  s   € Ð2Ð2Ð2 1˜œÐ2Ð2Ð2r+   ztt.num_stagesztt.loop_unroll_factorztt.disallow_acc_multi_bufferz
tt.flattenztt.warp_specializec                 ó@   •— g | ]}‰                      |d z   ¦  «        ‘ŒS )r   rõ  )r1   r7   Úfor_op_bodys     €r)   r3   z+CodeGenerator.visit_For.<locals>.<listcomp>ˆ  s)   ø€ ÐVÐVÐV¸˜[Ÿ_š_¨Q°©UÑ3Ô3ÐVÐVÐVr+   z7We use SCF, so the loop body should only have one blockc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r/   r  )r1   r7   Úfor_ops     €r)   r3   z+CodeGenerator.visit_For.<locals>.<listcomp>§  s'   ø€ ÐQÐQÐQ°1˜&×+Ò+¨AÑ.Ô.ÐQÐQÐQr+   z)Don't know what to do with else after for)Nr§   ÚiterrÖ   rg   ÚdictÚkeywordsr   Ústatic_ranger  Ústartrz   ÚendÚstepr   r�   r„  r¸   re  r«   rÑ   r±   rh  rµ   Ú
num_stagesÚloop_unroll_factorÚdisallow_acc_multi_bufferÚflattenÚwarp_specializer…   ÚNumÚRuntimeErrorrT   r   rs  rS   Úis_intrw  Úinteger_promote_implr.  r”   Úint_signednessrR   Ú
SIGNEDNESSÚSIGNEDrú  Úcreate_int_castr‰  rZ  r   r‰   r_  rx  r�  r/  rß  rb  rc  r’   rM  ra  r‚   Úcreate_for_opr   Úset_attrÚget_int32_attrÚget_unit_attrÚget_bodyr�   r‡   r�  rL   r  Ú
get_parentÚsizeÚget_induction_varÚ
create_subÚ
create_addÚreplace_all_uses_with).rŒ   re   ÚIteratorClassÚ	iter_argsÚiter_kwargsÚiteratorr”  r7   rd  r˜  r™  rš  r›  rœ  ÚlbÚubr—  Únegative_stepÚiv_typeÚ
iv_ir_typeÚiv_is_signedÚivrÿ  r‘   r–   r^  r  Úblockrk  rs  rå  r&   rK  rL  rl  rm  Úblock_handlesro  ro   ÚlocalÚyield_handlesÚfor_op_regionrt  Úresult_valuesr�  rŽ  s.   `                                           @@r)   Ú	visit_ForzCodeGenerator.visit_For  s
  øøø€ ØŸ
š
 4¤9¤>Ñ2Ô2ˆØ?Ð?Ð?Ð?°´	´Ð?Ñ?Ô?ˆ	ÝÐQÐQÐQÐQ¸d¼iÔ>PÐQÑQÔQÑQÔQˆØ�HÔ1Ò1Ð1Ø$�} iÐ?°;Ð?Ð?ˆHÝ  ¤Ô!5°x´|Ô7IÈ8Ì=ÔK^Ñ_Ô_ˆLØ!ð >ð >�Ý.7¸©l¬l�”˜DœKœNÑ+Ø×-Ò-¨d¬iÑ8Ô8Ð8Ø œKð >ð >�DÝ”O×1Ò1°$¸Ñ=Ô=Ð=Ð=ð>àˆFØˆ
Ø!ÐØ$)Ð!ØˆØˆØ�HœNÐ*Ð*Ø$�} iÐ?°;Ð?Ð?ˆHð ”ˆBØ”ˆBØ”=ˆDØ!Ô,ˆJØ!)Ô!<ÐØ(0Ô(JÐ%ØÔ&ˆGØ&Ô6ˆOˆOØ�eÐ#Ð#õ "% Y¡¤°!Ò!3Ð!3�˜1”�¸¿ºÅCÄGÈAÁJÄJÑ9OÔ9OˆBÝ!$ Y¡¤°!Ò!3Ð!3�˜1”�¸¿ºÀDÄIÄNÐSTÔDUÑ9VÔ9VˆBÝ#& y¡>¤>°AÒ#5Ð#5�9˜Q”<�<¸4¿:º:ÅcÄgÈaÁjÄjÑ;QÔ;QˆDˆDåÐbÑcÔcÐcàˆÝ˜ÑÔð 	 4¤:°¢> >Ý˜dœj˜[Ñ)Ô)ˆDØ ˆMØ˜�ˆBØŒ]×$Ò$ RÑ(Ô(ˆØŒ]×$Ò$ RÑ(Ô(ˆØŒ}×&Ò& tÑ,Ô,ˆàŒx�ŠÑ Ô ð 	v¨¬¯ªÑ(9Ô(9ð 	vÀÄ×ARÒARÑATÔATð 	vÝÐtÈrÌxÐtÐtÐ[]Ô[cÐtÐtÐgkÔgqÐtÐtÐtÑuÔuÐuØ”-×4Ò4°R´X¸r¼xÑHÔHˆØ”-×4Ò4°W¸d¼jÑIÔIˆØ—]’] 4¤<Ñ0Ô0ˆ
ØÔ-µ´Ô1DÔ1OÔ1VÒVˆàŒYˆØŒYˆØŒ{ˆàŒ\×)Ò)¨"¨j¸,ÑGÔGˆØŒ\×)Ò)¨"¨j¸,ÑGÔGˆØŒ|×+Ò+¨D°*¸lÑKÔKˆàŒ\×'Ò'¨
Ñ3Ô3ˆØ�Š�t”{”~¥x¤}×';Ò';¸BÀÑ'HÔ'HÑIÔIÐIå˜dÑ#Ô#ð N	N rØ$&Ñ!ˆG�\Ø×<Ò<Ñ>Ô>‰LˆB�ð ”L×-Ò-Ñ/Ô/ˆEØŒL×5Ò5°eÑ<Ô<Ð<àŒN×!Ò! $Ñ'Ô'Ð'Ø×)Ò)¨$¬)Ñ4Ô4Ð4ØŒN×ÒÑ Ô Ð Ø�KŠK‰MŒMˆMð ˆIØˆFØˆEØœð ,ð ,�Ø˜7�?�?Ø#œ¨tÔ4�HØ& tœ}�HØ×6Ò6°t¸XÀxÑPÔPÐPà—L’L Ñ&Ô&Ð&Ø×$Ò$ XÑ.Ô.Ð.Ø—M’M (Ñ+Ô+Ð+øð ×-Ò-¨b°(Ñ;Ô;Ð;Ý/°	Ñ:Ô:ˆLØ2Ð2¨	Ð2Ñ2Ô2ˆHØ”\×/Ò/°°B¸¸lÑKÔKˆFÝ# JÑ/Ô/Ð;Ø—’ °´×1LÒ1LÈZÑ1XÔ1XÑYÔYÐYÝ#Ð$6Ñ7Ô7ÐCØ—’Ð 7¸¼×9TÒ9TÐUgÑ9hÔ9hÑiÔiÐiØ(ð ^Ø—’Ð >ÀÄ×@ZÒ@ZÑ@\Ô@\Ñ]Ô]Ð]Øð LØ—’ ¨d¬l×.HÒ.HÑ.JÔ.JÑKÔKÐKØð TØ—’Ð 4°d´l×6PÒ6PÑ6RÔ6RÑSÔSÐSàŒN×!Ò! $Ñ'Ô'Ð'Ø Ÿ/š/¨!Ñ,Ô,ˆKØŒL×5Ò5°kÑBÔBÐBà!Ÿ,š,™.œ.ˆDŒKØ ˆDŒOØVÐVÐVÐV½UÅ3À|ÑCTÔCTÑ=UÔ=UÐVÑVÔVˆMÝ,¨]¸HÑEÔEˆJÝ  ¨
Ñ3Ô3ð *ð *‘	��cØ—’˜t SÑ)Ô)Ð)Ð)Ø×)Ò)¨$¬)Ñ4Ô4Ð4ØŒN×ÒÑ Ô Ð ØˆFØœð )ð )�Ø˜7�?�?Ø œO¨DÔ1�EÝ! %­Ñ3Ô3ð ?Ø $¤× 7Ò 7¸Ñ >Ô >˜Ø—M’M %Ñ(Ô(Ð(øõ �6‰{Œ{˜QŠˆÝ 4°VÑ <Ô <�Ø”×,Ò,¨]Ñ;Ô;Ð;Ø'×2Ò2Ñ4Ô4ˆMØ ×%Ò%Ñ'Ô'¨1Ò,Ð,Ð,Ð.gÑ,Ô,Ð,ð ŒL×5Ò5°kÑBÔBÐBØ×)Ò)Ñ+Ô+ˆBØð 5Ø”\×,Ò,¨R°Ñ4Ô4�Ø”\×,Ò,¨R°Ñ4Ô4�ØŒK˜œœÔ'Ô.×DÒDÀRÑHÔHÐHØ�NŠN˜4œ;œ>­8¬=×+?Ò+?ÀÀGÑ+LÔ+LÑMÔMÐMð]N	Nð N	Nð N	Nñ N	Nô N	Nð N	Nð N	Nð N	Nð N	Nð N	Nð N	Nøøøð N	Nð N	Nð N	Nð N	Nðb RÐQÐQÐQ½½cÀ,Ñ>OÔ>OÑ8PÔ8PÐQÑQÔQˆÝ+¨N¸HÑEÔEˆÝ˜U MÑ2Ô2ð 	&ð 	&‰IˆD�#Ø�NŠN˜4 Ñ%Ô%Ð%Ð%à”Kð 	6ð 	6ˆDØEÐEÑEÔEÐEð	6ð 	6s   ÒT+gçgçgc                 óÊ   — |                       |j        ¦  «        }|                       |j        ¦  «        }|                       |j        ¦  «        }t	          j        |||¦  «        S rK   )r§   ÚlowerÚupperr—  r   ry  )rŒ   re   rÃ  rÄ  r—  s        r)   Úvisit_SlicezCodeGenerator.visit_Slice°  sO   € Ø—
’
˜4œ:Ñ&Ô&ˆØ—
’
˜4œ:Ñ&Ô&ˆØ�zŠz˜$œ)Ñ$Ô$ˆÝŒ~˜e U¨DÑ1Ô1Ð1r+   c                 ó6   — |                       |j        ¦  «        S rK   )r§   rz   rÂ   s     r)   Úvisit_IndexzCodeGenerator.visit_Index¶  s   € Ø�zŠz˜$œ*Ñ%Ô%Ð%r+   c                 óD   — |j         |                      |j        ¦  «        fS rK   )ri   r§   rz   rÂ   s     r)   Úvisit_keywordzCodeGenerator.visit_keyword¹  s   € ØŒx˜Ÿš D¤JÑ/Ô/Ð/Ð/r+   c                 óÊ   — |                       |j        ¦  «        }|j        �|                       |j        ¦  «        nd}t          j                             ||| j        ¬¦  «        S )Nr  rÃ  )r§   r"  Úmsgr   rR   Údevice_assertr   )rŒ   re   r"  rË  s       r)   Úvisit_AssertzCodeGenerator.visit_Assert¼  sS   € Ø�zŠz˜$œ)Ñ$Ô$ˆØ&*¤hÐ&:ˆd�jŠj˜œÑ"Ô"Ð"ÀˆÝŒ}×*Ò*¨4°ÀÄÐ*ÑNÔNÐNr+   rf   c                 óÊ  ‡‡— t          j        |j        g‰¢R i |¤ŽŠˆfd„|j        D ¦   «         Št	          ‰¦  «        D ]Z\  }}t          |t          j        t          t          t          t          f¦  «        r"t          j                             |¦  «        ‰|<   Œ[t          ‰d„ ¦  «        }ˆfd„|D ¦   «         }t          ‰d„ ¦  «        }ˆfd„|D ¦   «         }t          t!          |¦  «        d„ |D ¦   «         |¦  «        }	| j                             |	¦  «        �st'          |¦  «        \  }
}d„ ‰D ¦   «         }t)          g ||t+          ¦   «         ¦  «        }t-          | j        ||                     ¦   «         | j        ||	| j        |j        |
|| j        j        | j        j        | j        j        ¬¦  «        }	 |                     |                      ¦   «         ¦  «         nE# tB          $ r8}tD          j#        j$        r‚ tK          | j&        j'        | j(        d ¦  «        |‚d }~ww xY w|j)        }|| j        |	<   n| j        |	         }| j         *                    |	¦  «        }tW          |¦  «        }| j         ,                    ||¦  «        Š|t          j-        k    rd S ˆfd	„t]          ‰ /                    ¦   «         ¦  «        D ¦   «         }ta          tc          ||g¦  «        ¦  «        S )
Nc                 ó    •— g | ]
}‰|         ‘ŒS r/   r/   )r1   r&   rg   s     €r)   r3   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>Ã  s   ø€ Ð4Ð4Ð4˜t��T”
Ð4Ð4Ð4r+   c                 ó    — t          |¦  «        S rK   ©rT   ©r-   rÿ   s     r)   ró   z0CodeGenerator.call_JitFunction.<locals>.<lambda>Ç  s   € µMÀ!Ñ4DÔ4D€ r+   c                 ó2   •— i | ]}|t          ‰|¦  «        “ŒS r/   ©r   ©r1   rò   rg   s     €r)   r9  z2CodeGenerator.call_JitFunction.<locals>.<dictcomp>È  s&   ø€ ÐMÐMÐM¸D�DÕ+¨D°$Ñ7Ô7ÐMÐMÐMr+   c                 ó"   — t          |¦  «         S rK   rÑ  rÒ  s     r)   ró   z0CodeGenerator.call_JitFunction.<locals>.<lambda>É  s   € ½ÀqÑ9IÔ9IÐ5I€ r+   c                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r/   rÔ  rÕ  s     €r)   r3   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>Ê  s$   ø€ ÐHÐHÐH°dÕ% d¨DÑ1Ô1ÐHÐHÐHr+   c                 ó   — g | ]	}|j         ‘Œ
S r/   rw   ©r1   ri   s     r)   r3   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>Ì  s   € Ð/MÐ/MÐ/M¸S°´Ð/MÐ/MÐ/Mr+   c                 óš   — g | ]H}|�,t          |t          t          t          j        j        f¦  «        rt          j        j        n|j        ‘ŒIS rK   )rL   rØ   rq  r   rR   rS   r   r'   rÙ  s     r)   r3   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>Ñ  s_   € ð ð ð ð ð ,/¨;½*ÀSÝFJÍCÕQYÔQ^ÔQdÐEeñ;gô ;g¨;•”Ô'Ð'ØloÔltðð ð r+   )
r(  r  r,  r  r`   r  r"  r$  r%  r&  c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r/   r  )r1   r7   Úcall_ops     €r)   r3   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>í  s'   ø€ ÐSÐSÐS¨Q�7×%Ò% aÑ(Ô(ÐSÐSÐSr+   )2ÚinspectÚgetcallargsrf   rd   ra   rL   r   rS   rr  rq  rØ   r   rR   r   r   rG   r   r(  Úhas_functionr   rã   r’  r  r  Úget_capture_scoper)  r`   r”   r$  r%  r&  r§   ÚparseÚ	Exceptionr   rO  Úfront_end_debuggingr    r  rb   r.  r0  Úget_functionr‚   Úcallrv  r  Úget_num_resultsÚnextr‡   )rŒ   rf   rg   rœ   r7   ri   Úargs_cstÚ	args_pathÚargs_valÚfn_namer  r"  ræ   r*  r‹   ÚeÚcallee_ret_typeÚsymbolr�   rÜ  s     `                @r)   Úcall_JitFunctionzCodeGenerator.call_JitFunctionÁ  s  øø€ ÝÔ" 2¤5Ð:¨4Ð:Ð:Ð:°6Ð:Ð:ˆØ4Ð4Ð4Ð4 r¤|Ð4Ñ4Ô4ˆÝ ‘o”oð 	7ð 	7‰FˆAˆsÝ˜#¥¤µµs½DÅ+ÐNÑOÔOð 7Ý"œ-×1Ò1°#Ñ6Ô6��Q‘øÝ  Ð'DÐ'DÑEÔEˆØMÐMÐMÐMÀHÐMÑMÔMˆÝ! $Ð(IÐ(IÑJÔJˆ	ØHÐHÐHÐH¸iÐHÑHÔHˆå�M¨"Ñ-Ô-Ð/MÐ/MÀHÐ/MÑ/MÔ/MÈxÑXÔXˆàŒ{×'Ò'¨Ñ0Ô0ñ 	?å$8¸Ñ$<Ô$<Ñ!ˆI�zðð ð  ðñ ô ˆIõ
 $ B¨	°8½T¹V¼VÑDÔDˆIÝ% d¤l°I¸r×?SÒ?SÑ?UÔ?UÐ^bÔ^iÐrtØ4;ÈDÔLcØ/1¬{ÀiÐ\fØ.2¬lÔ.BÐPTÔP\ÔPhØ15´Ô1Hð	Jñ Jô JˆIð
TØ—’ §¢¡
¤
Ñ+Ô+Ð+Ð+øÝð Tð Tð TåÔ$Ô8ð ØÝ& t¤{¤¸¼ÀtÑLÔLÐRSÐSøøøøð	Tøøøð (Ô0ˆOØ/>ˆDÔ# GÑ,Ð,à"Ô5°gÔ>ˆOØ”×)Ò)¨'Ñ2Ô2ˆÝ'¨Ñ1Ô1ˆØ”,×#Ò# F¨HÑ5Ô5ˆØ�hœmÒ+Ð+Ø�4ØSÐSÐSÐSµ%¸×8OÒ8OÑ8QÔ8QÑ2RÔ2RÐSÑSÔSˆÝÕ'¨°/Ð1BÑCÔCÑDÔDÐDs   Æ8'G  Ç 
H"Ç*3HÈH"c                 óN  ‡ — t          ‰                      |j        ¦  «        ¦  «        }t          |t          ¦  «        s(‰ j                             |¦  «        }|� |‰ |¦  «        S t          |dd¦  «        }|r†t          |dd¦  «        rudt          j	        |j        ¦  «        z  g}t          |t          ¦  «        r|                     |¦  «         t          ‰ j        j        |d                     |¦  «        ¦  «        ‚t!          ˆ fd„|j        D ¦   «         ¦  «        }ˆ fd„|j        D ¦   «         }t'          t(          j                             d„ |D ¦   «         ¦  «        ¦  «        }t          |t          ¦  «        r"|                     d	|j        ¦  «         |j        }t          |t4          ¦  «        r(t7          |||¦  «         ‰                      |||¦  «        S t;          |d
¦  «        rt=          |j        ¦  «        st>          j          !                    |¦  «        r¡d‰ j"        i}tG          j$        |¦  «        }	d|	j%        v r‰ |d<   	  ||i |¤|¤Ž}
t          |
tL          ¦  «        rt?          j&        |
¦  «        }
|
S # tN          $ r3}tP          j)        j*        r‚ t          ‰ j        j        |d ¦  «        |‚d }~ww xY w|‰ j+         ,                    ¦   «         v rt[          t           |¦  «        } ||i |¤Ž}
t]          t_          |
¦  «        ¦  «        rta          |
d„ ¦  «        n|
S )NÚ_must_use_resultFÚ
_is_unusedz#The result of %s is not being used.rM  c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S rK   r¦   rŠ  s     €r)   r©   z+CodeGenerator.visit_Call.<locals>.<genexpr>þ  s/   øè è € ÐDÐD¨7�4—:’:˜gÑ&Ô&ÐDÐDÐDÐDÐDÐDr+   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r/   r¦   rS  s     €r)   r3   z,CodeGenerator.visit_Call.<locals>.<listcomp>ÿ  r„  r+   c              3   óJ   K  — | ]}t          |t          ¦  «        r|n|gV — Œd S rK   )rL   r[   )r1   rÿ   s     r)   r©   z+CodeGenerator.visit_Call.<locals>.<genexpr>   s:   è è € Ð1bÐ1bÐXYµzÀ!ÅTÑ7JÔ7JÐ2S°!°!ÐQRÐPSÐ1bÐ1bÐ1bÐ1bÐ1bÐ1br+   r   r  rÄ  r  c                 ó   — | S rK   r/   )rÿ   s    r)   ró   z*CodeGenerator.visit_Call.<locals>.<lambda>   s   € °Q€ r+   )1r   r§   rÖ   rL   r  Ú statically_implemented_functionsr  r¹   r±   r%  rX  rß  r    r  rb   r@   r’  r“  rg   r[   Ú	itertoolsÚchainÚfrom_iterableÚinsertr  r  r   rj   rï  rn   rN   r   rR   Ú
is_builtinr   rÝ  Ú	signatureÚ
parametersr\   râ  r   rO  rã  r:  r~   Úmaprp   r'   r}   )rŒ   re   rf   Ústatic_implementationÚmurÚerror_messageÚkwsrg   Úextra_kwargsÚsigrF   rì  s   `           r)   r×   zCodeGenerator.visit_Callð  s:  ø€ Ý! $§*¢*¨T¬YÑ"7Ô"7Ñ8Ô8ˆÝ˜"�nÑ-Ô-ð 	9Ø$(Ô$I×$MÒ$MÈbÑ$QÔ$QÐ!Ø$Ð0Ø,Ð,¨T°4Ñ8Ô8Ð8å�bÐ,¨eÑ4Ô4ˆØð 	S•7˜4 ¨uÑ5Ô5ð 	SØBÅSÄ[ÐQUÔQZÑE[ÔE[Ñ[Ð\ˆMÝ˜#�sÑ#Ô#ð *Ø×$Ò$ SÑ)Ô)Ð)Ý" 4¤;¤?°D¸#¿(º(À=Ñ:QÔ:QÑRÔRÐRåÐDÐDÐDÐD°d´mÐDÑDÔDÑDÔDˆØ5Ð5Ð5Ð5¨4¬9Ð5Ñ5Ô5ˆÝ•I”O×1Ò1Ð1bÐ1bÐ]aÐ1bÑ1bÔ1bÑbÔbÑcÔcˆÝ�b�.Ñ)Ô)ð 	Ø�KŠK˜˜2œ;Ñ'Ô'Ð'Ø”ˆBÝ�b�+Ñ&Ô&ð 	8Ý˜4  TÑ*Ô*Ð*Ø×(Ò(¨¨T°3Ñ7Ô7Ð7Ý�B˜
Ñ#Ô#ð 	KÕ(8¸¼Ñ(EÔ(Eð 	KÍ(Ì-×JbÒJbÐceÑJfÔJfð 	KØ'¨¬Ð7ˆLÝÔ# BÑ'Ô'ˆCØ˜sœ~Ð-Ð-Ø-1�˜\Ñ*ðKØ�b˜$Ð6 ,Ð6°#Ð6Ð6�å˜c¥5Ñ)Ô)ð .Ý"œ.¨Ñ-Ô-�CØ�
øÝð 	Kð 	Kð 	KÝÔ$Ô8ð Øõ ' t¤{¤¸¸dÑCÔCÈÐJøøøøð	Køøøð �Ô'×.Ò.Ñ0Ô0Ð0Ð0ÝÕ+¨TÑ2Ô2ˆDØˆb�$Ð˜#ÐÐˆÝ;IÍ$ÈsÉ)Ì)Ñ;TÔ;TÐ]Õ% c¨;¨;Ñ7Ô7Ð7ÐZ]Ð]s   É4J  Ê 
J=Ê
.J8Ê8J=c                 ó*   — t          |j        ¦  «        S rK   )r   rz   rÂ   s     r)   Úvisit_ConstantzCodeGenerator.visit_Constant"  s   € Ý˜œÑ$Ô$Ð$r+   re   c           
      óú  — | j                              t          |j        ¦  «        ¦  «        }|€3|                      |d                     |j        j        ¦  «        ¦  «        ‚g }|j        D ]Ò}|                      |¦  «        }t          |¦  «        s,t          |¦  «        }|du r
|dk    r|c S |du r
|dk    r|c S ŒR|j                             ¦   «         rRt          |dd ¦  «        }|�
|| j        z  }t          j        dt           | j        |t%          j        |¦  «        ¬¦  «         |                     |¦  «         ŒÓt+          |¦  «        d	k    r|                     |¦  «         t+          |¦  «        d
k    rg|                     ¦   «         }|                     ¦   «         }	|                      ||	|¦  «        }
|                     |
¦  «         t+          |¦  «        d
k    °gt+          |¦  «        dk    sJ ‚|d	         S )Nz9AST boolean operator '{}' is not (currently) implemented.FÚlogical_andTÚ
logical_orÚlinenozeLogical operators 'and' and 'or' are deprecated for non-scalar tensors; please use '&' or '|' instead)ÚcategoryÚfilenamer  Úsourcer   r   r   )Ú_method_name_for_bool_opr  r'   r¶  r@  rÍ  rc   r~   r§   rP   rØ   rW   r¹   r"  r#  Úwarn_explicitÚUserWarningr  r±   r%  rß  r…   rb  rÈ  )rŒ   re   rÆ  Únontrivial_valuesÚsubnoderz   Úbvr  r¸  r·  Úress              r)   Úvisit_BoolOpzCodeGenerator.visit_BoolOp%  s-  € ØÔ3×7Ò7½¸T¼W¹¼ÑFÔFˆØÐØ×#Ò#ØÐQ×XÒXÐY]ÔY`ÔYiÑjÔjñlô lð lð Ðà”{ð 	0ð 	0ˆGð —J’J˜wÑ'Ô'ˆEÝ$ UÑ+Ô+ð 0å˜%‘[”[�Ø˜%�K�K k°]Ò&BÐ&Bà �L�L�LØ˜$�J�J [°LÒ%@Ð%@à �L�L�Løð ”:×&Ò&Ñ(Ô(ð 
Ý$ T¨8°TÑ:Ô:�FØÐ)Ø $¤/Ñ1˜ÝÔ*ØÝ!,Ø!%¤Ø%Ý"œ{¨4Ñ0Ô0ðñ ô ð ð "×(Ò(¨Ñ/Ô/Ð/Ð/åÐ Ñ!Ô! QÒ&Ð&ð ×$Ò$ UÑ+Ô+Ð+åÐ#Ñ$Ô$¨Ò)Ð)Ø#×'Ò'Ñ)Ô)ˆCØ#×'Ò'Ñ)Ô)ˆCØ×+Ò+¨K¸¸cÑBÔBˆCØ×$Ò$ SÑ)Ô)Ð)õ	 Ð#Ñ$Ô$¨Ò)Ð)õ Ð$Ñ%Ô%¨Ò*Ð*Ð*Ð*Ø  Ô#Ð#r+   r	  r
  r  c                 ó„  — |                       |j        ¦  «        }t          |¦  «        r&|j        dk    r| j                             |d¦  «        S t          |t          ¦  «        r|j        dk    r|j        }t          ||j        ¦  «        }t          |¦  «        r%t          |t          ¦  «        rt          ||¦  «        S |S )NÚT)r   r   rz   )r§   rz   rP   rº   r   ÚpermuterL   r   r¹   rN   r   r  )rŒ   re   r·  rº   s       r)   r»   zCodeGenerator.visit_Attribute[  sµ   € Ø�jŠj˜œÑ$Ô$ˆÝ˜SÑ!Ô!ð 	6 d¤i°3Ò&6Ð&6Ø”=×(Ò(¨¨fÑ5Ô5Ð5å�c�9Ñ%Ô%ð 	¨$¬)°wÒ*>Ð*>Ø”)ˆCÝ�s˜DœIÑ&Ô&ˆÝ˜CÑ Ô ð 	-¥Z°µkÑ%BÔ%Bð 	-Ý! # tÑ,Ô,Ð,Øˆr+   c                 ó^   — d|j         _        t          j                             | |¦  «         d S rÁ   )rz   rò  r±   rh  rµ   rÂ   s     r)   Ú
visit_ExprzCodeGenerator.visit_Exprg  s*   € Ø $ˆŒ
ÔÝŒ×%Ò% d¨DÑ1Ô1Ð1Ð1Ð1r+   c                 ó   — d S rK   r/   rÂ   s     r)   Úvisit_NoneTypezCodeGenerator.visit_NoneTypek  rÄ   r+   c           
      ó¬  — t          |j        ¦  «        }t          |¦  «        D �]\  }}t          |t          j        ¦  «        rt          |j        ¦  «        ||<   Œ8t          |t          j        ¦  «        rœ|j	        }|  
                    |j        ¦  «        }t          |¦  «        s3|                      |dt          t          |¦  «        ¦  «        z   ¦  «        ‚|dk     rdndt          |¦  «        z   dz                        |j        ¦  «        ||<   Œît!          d                     t          |¦  «        ¦  «        ¦  «        ‚d                     |¦  «        S )Nz^Cannot evaluate f-string containing non-constexpr conversion values, found conversion of type r   z{}z{!Ú}z:encountered unexpected node of type {} in a JoinedStr noder  )r[   r~   ra   rL   r±   ÚConstantrX  rz   ÚFormattedValueÚ
conversionr§   rT   r@  r'   ÚchrrÍ  ÚAssertionErrorr@   )rŒ   re   r~   r7   rz   Úconversion_codeÚ	evaluateds          r)   Úvisit_JoinedStrzCodeGenerator.visit_JoinedStrn  sD  € Ý�d”kÑ"Ô"ˆÝ! &Ñ)Ô)ð 	wñ 	w‰HˆAˆuÝ˜%¥¤Ñ.Ô.ð wÝ ¤Ñ,Ô,��q‘	�	Ý˜E¥3Ô#5Ñ6Ô6ð 
wØ"'Ô"2�Ø ŸJšJ u¤{Ñ3Ô3�	Ý$ YÑ/Ô/ð 0Ø×+Ò+ØØxÝ�d 9™oœoÑ.Ô.ñ/ñ0ô 0ð 0ð &5°qÒ%8Ð%8˜T˜T¸dÅSÈÑEYÔEYÑ>YÐ\_Ñ>_×gÒgÐhqÔhwÑxÔx��q‘	�	å$Ð%a×%hÒ%hÕimÐnsÑitÔitÑ%uÔ%uÑvÔvÐvØ�wŠw�v‰ŒÐr+   c           	      ó<  •— |€d S t          j        ¦   «         5  t          j        dt          ¦  «         t          j        dt          ¦  «         | j        }| j                             ¦   «         }|| _        t          |d¦  «        r\t          |d¦  «        rL| j         	                    | j
        | j        |j        z   |j        ¦  «         | j                             ¦   «         }	 t          ¦   «                              |¦  «        }n\# t           $ r ‚ t"          $ rE}t$          j        j        r‚ t!          | j        j        | j        t/          |¦  «        ¦  «        d ‚d }~ww xY w|r!|| _        | j         	                    |¦  «         |cd d d ¦  «         S # 1 swxY w Y   d S )NÚignorer  Ú
col_offset)r#  Úcatch_warningsÚsimplefilterÚDeprecationWarningÚPendingDeprecationWarningr.  r”   r\  rn   r#  r  r"  r  r*  Úsuperr§   r    râ  r   rO  rã  r  rb   r6   )rŒ   re   Ú	last_noder  rF   rì  Ú	__class__s         €r)   r§   zCodeGenerator.visit€  sÝ  ø€ Øˆ<ØˆFÝÔ$Ñ&Ô&ð 	ð 	õ Ô! (Õ,>Ñ?Ô?Ð?ÝÔ! (Õ,EÑFÔFÐFØœˆIØ”|×+Ò+Ñ-Ô-ˆHØ ˆDŒMÝ�t˜XÑ&Ô&ð 2­7°4¸Ñ+FÔ+Fð 2Ø”×$Ò$ T¤^°T´_ÀtÄ{Ñ5RÐTXÔTcÑdÔdÐdØœ<×/Ò/Ñ1Ô1�ð	ZÝ‘g”g—m’m DÑ)Ô)��øÝ#ð ð ð ØÝð Zð Zð ZÝÔ$Ô8ð Øõ ' t¤{¤¸¼ÅtÈAÁwÄwÑOÔOÐUYÐYøøøøðZøøøð ð /Ø )�”Ø”×$Ò$ XÑ.Ô.Ð.Øð5	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s7   ™CFÃ"!DÄFÄEÄA EÅEÅ'FÆFÆFc                 óx   — |                       |d                     t          |¦  «        j        ¦  «        ¦  «        ‚)Nzunsupported AST node type: {})r@  rÍ  r'   rc   rÂ   s     r)   rµ   zCodeGenerator.generic_visitŸ  s1   € Ø×Ò Ð&E×&LÒ&LÍTÐRVÉZÌZÔM`Ñ&aÔ&aÑbÔbÐbr+   c                 ó8  — t          |j        ¦  «        }d|cxk     rdk    rn nt          |j        ¦  «        rt          d¦  «        ‚t	          |                      |j        d         ¦  «        ¦  «        }t          |t          ¦  «        st          d¦  «        ‚|s|dk    rd}nN	 |                      |j        d         ¦  «        }n,# t          $ r}dt          |¦  «        z   dz   }Y d }~nd }~ww xY wt          | j        j        |t	          |¦  «        ¦  «        ‚d S )	Nr   r   z=`static_assert` requires one or two positional arguments onlyzqAssertion condition could not be determined at compile-time. Make sure that it depends only on `constexpr` valuesr   r  z'<failed to evaluate assertion message: ú>)r…   rg   r“  rw  r   r§   rL   rØ   ÚNotImplementedErrorrâ  r6   r!   r  rb   )rŒ   re   Ú	arg_countÚpassedr?  rì  s         r)   Úexecute_static_assertz#CodeGenerator.execute_static_assert¢  s<  € Ý˜œ	‘N”Nˆ	Ø�IÐ"Ð"Ò"Ð" Ò"Ð"Ð"Ð"Ð"¥s¨4¬=Ñ'9Ô'9Ð"ÝÐ[Ñ\Ô\Ð\å% d§j¢j°´¸1´Ñ&>Ô&>Ñ?Ô?ˆÝ˜&¥$Ñ'Ô'ð 	Ý%ð Dñô ð ð ð 		dØ˜AŠ~ˆ~Ø��ðXØ"Ÿjšj¨¬°1¬Ñ6Ô6�G�GøÝ ð Xð Xð XØGÍ$ÈqÉ'Ì'ÑQÐTWÑW�G�G�G�G�G�GøøøøðXøøøõ .¨d¬k¬o¸tÕEYÐZaÑEbÔEbÑcÔcÐcØˆts   Â% C Ã
C/ÃC*Ã*C/c                 ó,   ‡ — dt           j        fˆ fd„}|S )Nre   c                 ó�   •‡ — d„ ˆ fd„|j         D ¦   «         D ¦   «         }ˆ fd„|j        D ¦   «         }t           ‰|i |¤Ž¦  «        S )Nc                 ó4   — i | ]\  }}|t          |¦  «        “ŒS r/   )r   )r1   r&   rz   s      r)   r9  z>CodeGenerator.static_executor.<locals>.ret.<locals>.<dictcomp>»  s7   € ð ð ð á�D˜%ð Õ*¨5Ñ1Ô1ðð ð r+   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S rK   r¦   rŠ  s     €r)   r©   z=CodeGenerator.static_executor.<locals>.ret.<locals>.<genexpr>½  s/   øè è € Ð#UÐ#U¸G D§J¢J¨wÑ$7Ô$7Ð#UÐ#UÐ#UÐ#UÐ#UÐ#Ur+   c                 óT   •— g | ]$}t          ‰                     |¦  «        ¦  «        ‘Œ%S r/   )r   r§   rS  s     €r)   r3   z>CodeGenerator.static_executor.<locals>.ret.<locals>.<listcomp>¿  s,   ø€ ÐOÐOÐO¸cÕ(¨¯ª°C©¬Ñ9Ô9ÐOÐOÐOr+   )r“  rg   r   )rŒ   re   r  rg   Ú	python_fns   `   €r)   rF   z*CodeGenerator.static_executor.<locals>.retº  ss   øø€ ðð à#UÐ#UÐ#UÐ#UÀtÄ}Ð#UÑ#UÔ#Uðñ ô ˆCð PÐOÐOÐOÀTÄYÐOÑOÔOˆDÝ˜Y˜Y¨Ð4°Ð4Ð4Ñ5Ô5Ð5r+   )r±   rá   )r>  rF   s   ` r)   Ústatic_executorzCodeGenerator.static_executor¸  s1   ø€ ð	6�CœHð 	6ð 	6ð 	6ð 	6ð 	6ð 	6ð ˆ
r+   r   )r   r÷  )NFNFNr   )ƒrc   rž   rŸ   r   r   r   rX  r�   r…   r[   r  rr  rq  rL   r¹   rn   r:  r   r  Úupdater   rR   Údevice_printÚminimumÚmaximumr@  rD  r1  r   r   r   rZ  r_  ra  re  rÌ   rn  rÃ   r  rÏ   r¢  r¤  r§  r«  rÆ   rÉ   r¿   r¼  r¾  rÁ  rÈ  rÎ  r±   ÚAddÚSubÚMultÚDivÚFloorDivÚModÚPowÚLShiftÚRShiftÚBitAndÚBitOrÚBitXorrÌ  r
   Úoperatorrí  r  r  rÒ   rÔ   r1  r:  ÚEqÚNotEqÚLtÚLtEÚGtÚGtEr7  ÚcmpoprF  ÚUSubÚUAddÚNotÚInvertrD  ÚunaryoprM  rP  rW  rw  r|  rª  r€  r†  rÁ  rÅ  rÇ  r	   rÉ  rÍ  rï  r×   r  ÚBoolOpr  ÚAndÚOrr  Úboolopr»   r  r  r'  r§   rµ   rá   r8  r?  Úexperimental.gluonÚttglÚstatic_assertÚstatic_printr;  r÷  rB  r   Ú__classcell__)r1  s   @r)   r  r    só  ø€ € € € € € ð `eØ=>ð90ð 90È+ð 90Ø?GÈ¼~ð90à$ SœMð90ð 90ð 90ð 90ðv)ð )à�t˜U E¨3°
¸GÀWÐMð)ñ )ô )Ð�t˜C ˜H”~ð ð ñ ð ×ÒØ	�(”-Ô,Ð-Ø	�Ô Ð!Ø	�Ô Ð!ðñ ô ð ðLð Lð Lð	ð 	ð 	ð1ð 1ð 1ðf&˜cð &¨%°
¸IÐ0EÔ*Fð &È4ð &ð &ð &ð &ðð ð ð"ð "ð "ð	ð 	ð 	ð2ð 2ð 2ðð ð ð@ð @ð @ð< Sð ð ð ð ð
3?ð 3?ð 3?ðj&ð &ð &ðð ð ð'ð 'ð 'ð 2ð 2ð 2ð.ð .ð .ð$ð ð ð.ð .ð .ð
2ð 2ð 2ð2ð 2ð 2ð$ð $ð $ð	.ð 	.ð 	.ð@ð @ð @ð 	Œ�ØŒ�ØŒ�)ØŒ�ØŒ�nØŒ�ØŒ�ØŒ
�LØŒ
�LØŒ
�IØŒ	�8ØŒ
�Ið>Ð˜T $ s¤|Ô"4°cÐ"9Ô:ð ð ñ ð2Cð 2Cð 2Cðh$,ð $,ð $,ðN,ð ,ð ,ð> 8ð  8ð  8ðD3/ð 3/ð 3/ðjð ð ð@ð @ð @ð$ 	Œ�˜#œ) X¨s¬v°xÀÄÈ(ÐTWÔTZÐ\dÐfiÔfmÐowð<Ð˜d 4¨¬	¤?°CÐ#7Ô8ð ð ñ ðtð tð tð  	Œ�)˜SœX y°#´'¸9ÀcÄjÐR^ð?Ð˜t D¨¬Ô$5°sÐ$:Ô;ð ð ñ ð@ð @ð @ð-ð -ð -ð	5ð 	5ð 	5ðL6ð L6ð L6ð\ð ð ð'ð 'ð 'ð/ð /ð /ð6ð 6ð 6ð\6ð \6ð \6ð|2ð 2ð 2ð&ð &ð &ð0 U¨3°¨8¤_ð 0ð 0ð 0ð 0ðO Cð Oð Oð Oð Oð
-E ;ð -Eð -Eð -Eð -Eð^0^ð 0^ð 0^ðd%ð %ð %ð2$ ¤ð 2$ð 2$ð 2$ð 2$ðh >A¼WÀmÐUXÔU[Ð]iÐ<jÐ˜d 4¨¬
Ô#3°SÐ#8Ô9ÐjÐjÑjð
ð 
ð 
ð2ð 2ð 2ðð ð ðð ð ð$ð ð ð ð ð>cð cð cð¨#¬(ð °tð ð ð ð ð,
ð 
ð 
ð 6Ð5Ð5Ð5Ð5Ð5àŒÔ#Ð%:ØŒÔ" O O°EÑ$:Ô$:ØÔÐ1ØÔ˜?˜?¨5Ñ1Ô1Øˆ_ˆ_˜SÑ!Ô!Øˆ_ˆ_˜SÑ!Ô!ðQÐ$ d¨6°8¸S¼X¸JÈ¸OÔ3LÐ+LÔ&Mð ð ñ ð ð ð ð r+   r  c                 óª  ‡ ‡— d gt          ‰ j        ¦  «        z  }‰j                             ¦   «         D ]1\  }}	‰ j                             |¦  «        }
t          |	¦  «        ||
<   Œ2t          g |‰j        ‰j        ¦  «        }t          ‰ ¦  «        \  }}ddl
m} t          d„ ‰j        ¦  «        }ˆ ˆfd„|D ¦   «         }‰j        }  |dddg¦  «        ||¦  «        }t          ||‰                      ¦   «         ‰                      |¦  «        ‰ d||||||¬	¦  «        }|                     ‰                      ¦   «         ¦  «         |j        }||_        |S )
Nr   )Ú
namedtuplec                 ó(   — t          | ¦  «        dk    S rV   )r…   )rs   s    r)   ró   zast_to_ttir.<locals>.<lambda>Ø  s   € �c !™fœf¨šk€ r+   c                 óN   •— i | ]!}‰j         |d                   ‰j        |         “Œ"S )r   )rd   r8   )r1   r7   rf   rb   s     €€r)   r9  zast_to_ttir.<locals>.<dictcomp>Ù  s-   ø€ ÐFÐFÐF¸!�”˜a œdÔ# S¤]°1Ô%5ÐFÐFÐFr+   ÚSpecializationProxyr8   rý  T)
r£   r,  r  r-  r  r"  r$  r%  r&  r(  )r…   rd   rý  r  Úindexr   rã   r8   rç   r   Úcollectionsrg  Úfilterr  rà  r6   r§   rá  r(  r  )rf   rb   r  r$  r%  r&  r(  ræ   r4  rs   rh   r*  r  r"  rg  Úleavesr8   rý  Úproxyr‹   rF   s   ``                   r)   Úast_to_ttirrp  Ï  sx  øø€ Ø��˜Rœ\Ñ*Ô*Ñ*€IØ”×#Ò#Ñ%Ô%ð &ð &‰ˆˆ1ØŒl× Ò  Ñ#Ô#ˆÝ" 1™œˆ	�#‰ˆÝ˜B 	¨3¬=¸#¼)ÑDÔD€IÝ0°Ñ4Ô4Ñ€Iˆzà&Ð&Ð&Ð&Ð&Ð&ÝÐ)Ð)¨3¬=Ñ9Ô9€FØFÐFÐFÐFÐF¸vÐFÑFÔF€IØ”€IØIˆJˆJÐ,¨{¸KÐ.HÑIÔIÈ)ÐU^Ñ_Ô_€EÝ˜g y¸×9MÒ9MÑ9OÔ9OÐ_a×_fÒ_fÐglÑ_mÔ_mØ%'°4À9ÐYcÐmtØ*5À*ÐU[ð]ñ ]ô ]€Ið ‡O‚O�B—H’H‘J”JÑÔÐØ
Ô
€Cà€C„KØ€Jr+   rK   )Gr±   r�   rÝ  r$   r#  rR  rø  Údataclassesr   r|   r   Útypingr   r   r   r   r	   r
   r   r   r   r  r   r   Ú_C.libtritonr   r   r   r   r   Úlanguage.corer   r   r   Úruntime.jitr   r   Úruntimer   Ú_utilsr   r   r   Úerrorsr    r!   r"   r*   rG   rØ   rN   rP   rT   rY   r]   rj   rp   r}   r‚   rz   r‡   rq  r'   r)  r‰   rh  r¡   rã   r  r  rp  r/   r+   r)   ú<module>ry     s  ðØ 
€
€
€
Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ Tà Ð Ð Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ =Ð =Ð =Ð =Ð =Ð =Ð =Ð =à !Ð !Ð !Ð !Ð !Ð !Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ Hà aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aðð ð ð	ð 	ð 	ð%˜ð % ð %ð %ð %ð %ð!˜ð ! ð !ð !ð !ð !ðU�Sð U˜Tð Uð Uð Uð UðN˜Sð N Tð Nð Nð Nð Nð(�Sð (˜Tð (ð (ð (ð (ðð ð ðXð Xð XðDð Dð Dð ¨*Ô!5ð ð ð ð ð"  b¤h¤ð "¸¸Y¼ð "ð "ð "ð "ð ˜#˜t˜t D™zœzÐ*Ð ð3ð 3ð 3ð 3ð 3ñ 3ô 3ð 3ð*T%ð T%ð T%ð T%ð T%˜CœOñ T%ô T%ð T%ðn7ð 7ð 7ð 7ð 7ñ 7ô 7ð 7ðt €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð
sð sð sð sð s�C”Oñ sô sð sðl%ð ð ð ð ð r+   