ó
    “~iY ã                   ó¦  • S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	  S SK
Jr  S SKJrJrJrJrJrJrJrJrJr  SSKJrJr  SSKJrJr  SSKJrJrJrJr   SS	K!J"r"J#r#J$r$  SS
K%J&r&J'r'J(r(J)r)J*r*J+r+  SSK,J-r-J.r.J/r/J0r0  SSK1J2r2J3r3J4r4  S r5S r6S\S\74S jr8S\S\74S jr9S\S\74S jr:S\S\74S jr;S\S\74S jr<S r=S r>S\\#   4S jr?S\\R€                     S\\$   4S jrA\7\B\C" S5      1rDS rES rF " S  S!5      rG " S" S#\ R�                  5      rI " S$ S%5      rJ\	" S&S'9 " S( S)5      5       rK " S* S+\ R�                  5      rLS-S, jrMg).é    N)Ú	dataclass)Ú
ModuleType)	ÚAnyÚCallableÚDictÚOptionalÚTupleÚTypeÚUnionÚIterableÚListé   )ÚknobsÚlanguage)ÚirÚgluon_ir)Ú	constexprÚ	str_to_tyÚtensorÚtuple)Ú_unwrap_if_constexprÚ
base_valueÚ	base_type)Úget_jit_fn_file_lineÚget_full_nameÚJITCallableÚBoundConstexprFunctionÚConstexprFunctionÚJITFunction)Úfind_paths_ifÚget_iterable_pathÚset_iterable_pathÚis_namedtupleé   )ÚCompilationErrorÚCompileTimeAssertionFailureÚUnsupportedLanguageConstructc                 ód   • Sn[         R                  " X 5      (       d  [        SU SU  3U 5      eU $ )Nz^[a-zA-Z_][a-zA-Z0-9_]*$zinvalid z identifier: )ÚreÚmatchr%   )ÚnameÚtypeÚpatterns      Ú[/home/mande/repo/quber/.venv/lib/python3.13/site-packages/triton/compiler/code_generator.pyÚcheck_identifier_legalityr/      s5   € Ø)€GÜ�8Š8�G×"Ñ"Ü ¨$¨¨}¸T¸FÐCÀTÓJÐJØ€Kó    c                 ó¶  • SR                  U Vs/ s H  oDR                  5       PM     sn5      nSR                  [        U5       Vs/ s H  of S[        X&   5       3PM     sn5      nUR	                  SS5      nUR	                  SS5      nUR	                  SS5      R	                  SS5      nU  S	U S	U 3nUb  XƒR                  5       -  nU$ s  snf s  snf )
NÚ_ÚcÚ.Ú_d_Ú'Ú_sq_Ú[Ú]Ú__)ÚjoinÚmangleÚsortedÚreprÚreplace)	r+   Úarg_tysÚ	constantsÚcaller_contextÚtyÚmangled_arg_namesÚiÚmangled_constantsÚrets	            r.   Ú	mangle_fnrH      sß   € àŸ™¹Ó!@º°"§)¡)¦+¹Ñ!@ÓAÐØŸ™ÄvÈiÔGXÓ!YÒGXÀ! C q¬¨i©lÓ);Ð(<Ó"=ÑGXÑ!YÓZÐØ)×1Ñ1°#°uÓ=ÐØ)×1Ñ1°#°vÓ>Ðà)×1Ñ1°#°sÓ;×CÑCÀCÈÓMÐØˆF�"Ð&Ð' rÐ*;Ð)<Ð
=€CØÑ!Ø×$Ñ$Ó&Ñ&ˆØ€Jùò "AùÚ!Ys   �CÁCÚoÚreturnc                 ó"   • [        U [        5      $ ©N)Ú
isinstancer   ©rI   s    r.   Ú_is_triton_valuerO   -   s   € Ü�aœÓ$Ð$r0   c                 ó"   • [        U [        5      $ rL   )rM   r   rN   s    r.   Ú_is_triton_tensorrQ   1   s   € Ü�aœÓ Ð r0   c                 óv   • U S L =(       d/    [        U [        [        R                  R                  [
        45      $ rL   )rM   r   r   ÚcoreÚdtyper   rN   s    r.   Ú_is_constexprrU   5   s)   € Ø�ˆ9×Tœ
 1¤y´(·-±-×2EÑ2EÄ{Ð&SÓTÐTr0   c                 óš   • [        U 5      =(       a:    U R                  R                  5       =(       a    U R                  R                  S:g  $ ©Nr$   )rQ   r,   Úis_blockÚnumelrN   s    r.   Ú_is_non_scalar_tensorrZ   9   s/   € Ü˜QÓ×M Q§V¡V§_¡_Ó%6×%L¸1¿6¹6¿<¹<È1Ñ;LÐMr0   c                 ó.   • [        U [        [        45      $ rL   )rM   Úlistr   rN   s    r.   Ú_is_list_liker]   =   s   € Ü�aœ$¤˜Ó'Ð'r0   c                 ó  • UR                   (       an  [        U5       H^  u  p4[        U5      (       a  M  [        U5      (       d  M)  [	        UR
                  U SUR                   SUR                  U    SU 35      e   g g )Nz	Function z= is marked noinline, but was called with non-scalar argument Ú:)ÚnoinlineÚ	enumeraterU   rZ   r'   ÚsrcÚ__name__Ú	arg_names)ÚnodeÚfnÚargsÚidxÚargs        r.   Ú_check_fn_argsrj   A   s�   € Ø	‡{‡{Ü! $ž‰HˆCÜ  ×%Ó%Ô*?À×*DÓ*DÜ2Ø—F‘F˜DØ §¡˜}Ð,iÐjl×jvÑjvÐwzÑj{Ði|Ð|}ð  Bð  ~Cð  Dóð ò (ð r0   c                 óö  • [        [        U 5      5      (       a  U R                  nOI[        U [        R
                  5      (       a  U R                  R                  nO S[        U 5       35       eU  Vs/ s H
  o1" U5      PM     nnU Vs/ s H  o3c  [        U5      OUPM     nnU Vs/ s H  o3R                  PM     nn[        R
                  " U[        R                  " XR5      5      $ s  snf s  snf s  snf )NzUnsupported type )	r#   r,   Ú_fieldsrM   r   r   Úfieldsr   Ú
tuple_type)Úvaluerf   rm   ÚvÚvalsÚtypess         r.   Ú_apply_to_tuple_valuesrs   K   sÄ   € Ü”T˜%“[×!Ñ!Ø—‘‰Ü	�Eœ8Ÿ>™>×	*Ñ	*Ø—‘×"Ñ"‰à7Ð)¬$¨u«+¨Ð7Ó7ˆuá Ó!š5�aˆBˆqŽE™5€DÐ!Ù6:Ó;²d°™IŒI�aŒL¨1Ò,±d€DÐ;Ù!Ó"šT˜�VŒV™T€EÐ"Ü�>Š>˜$¤× 3Ò 3°EÓ BÓCÐCùò "ùÚ;ùÚ"s   Á4C,ÂC1Â*C6Úvaluesc                 ó>   • / nU  H  nUR                  U5        M     U$ rL   )Ú_flatten_ir)rt   Úhandlesrp   s      r.   Úflatten_values_to_irrx   Y   s"   € Ø€GÛˆØ	�‰�gÖñ à€Nr0   rw   rr   c              #   ór   #   • SnU H  nUR                  X5      u  pBUv •  M     U[        U 5      :X  d   eg 7f©Nr   )Ú_unflatten_irÚlen)rw   rr   ÚcursorrC   ro   s        r.   Úunflatten_ir_valuesr~   `   s?   é € Ø€FÛˆØ×(Ñ(¨Ó9‰ˆØŒñ ð ”S˜“\Ó!Ð!Ñ!ùs   ‚57c                 óh   • / nU R                  U5        U R                  R                  US5      u  p#U$ rz   )rv   r,   r{   )Úvalrw   Úcloner2   s       r.   Ú_clone_triton_valuer‚   k   s0   € Ø€GØ‡O�O�GÔØ�x‰x×%Ñ% g¨qÓ1�H€EØ€Lr0   c                 ó�   • U R                  5        VVs0 s H#  u  pU[        U5      (       a  [        U5      OU_M%     snn$ s  snnf rL   )ÚitemsrO   r‚   )Úscoper+   r€   s      r.   Ú_clone_scoper†   r   sA   € Ø^c×^iÑ^iÔ^kÔlÒ^kÑQZÐQUˆDÔ.>¸s×.CÑ.CÔ% cÔ*ÈÒLÑ^kÒlÐlùÓls   ”*Ac                   ó&   • \ rS rSrS rS rS rSrg)Úenter_sub_regionév   c                 ó   • Xl         g rL   )Ú	generator)Úselfr‹   s     r.   Ú__init__Úenter_sub_region.__init__x   s   € Ø"�r0   c                 óˆ  • [        U R                  R                  5      U l        [        U R                  R                  5      U l        0 U R                  l        U R                  R                  R                  5       U l        U R                  R                  R                  5       U l
        U R                  U R                  4$ rL   )r†   r‹   ÚlscopeÚliveinsÚ
local_defsÚ	prev_defsÚbuilderÚget_insertion_blockÚinsert_blockÚget_insertion_pointÚinsert_point)rŒ   s    r.   Ú	__enter__Úenter_sub_region.__enter__{   s…   € ä# D§N¡N×$9Ñ$9Ó:ˆŒÜ% d§n¡n×&?Ñ&?Ó@ˆŒØ$&ˆ�‰Ô!Ø ŸN™N×2Ñ2×FÑFÓHˆÔØ ŸN™N×2Ñ2×FÑFÓHˆÔØ�|‰|˜T×.Ñ.Ð.Ð.r0   c                 óÎ   • U R                   R                  R                  U R                  5        U R                  U R                   l        U R                  U R                   l        g rL   )r‹   r”   Úrestore_insertion_pointr˜   r‘   r�   r“   r’   )rŒ   rg   Úkwargss      r.   Ú__exit__Úenter_sub_region.__exit__„   s@   € Ø�‰×Ñ×6Ñ6°t×7HÑ7HÔIØ $§¡ˆ�‰ÔØ$(§N¡Nˆ�‰Õ!r0   )r‹   r–   r˜   r‘   r“   N)rc   Ú
__module__Ú__qualname__Ú__firstlineno__r�   r™   rž   Ú__static_attributes__© r0   r.   rˆ   rˆ   v   s   † ò#ò/õ3r0   rˆ   c                   óÀ  • \ rS rSrS rS\4S jrS\4S jrS\4S jrS\	R                  S\4S jrS\	R                  S\4S	 jrS\	R                  S\4S
 jrS\	R                   S\4S jrS\	R$                  S\4S jrS\	R(                  S\4S jrS\	R,                  S\4S jrS\	R0                  S\4S jrS\	R4                  S\4S jrS\	R8                  S\4S jrSrg)ÚContainsReturnCheckeré‹   c                 ó   • Xl         g rL   ©Úgscope)rŒ   rª   s     r.   r�   ÚContainsReturnChecker.__init__�   s   € Ø�r0   rJ   c                 ó.   ^ • [        U 4S jU 5       5      $ )Nc              3   óF   >#   • U  H  nTR                  U5      v •  M     g 7frL   ©Úvisit)Ú.0ÚsrŒ   s     €r.   Ú	<genexpr>Ú5ContainsReturnChecker._visit_stmts.<locals>.<genexpr>‘   s   øé € Ð/ª$ Q�4—:‘:˜a—=�=ª$ùó   ƒ!)Úany)rŒ   Úbodys   ` r.   Ú_visit_stmtsÚ"ContainsReturnChecker._visit_stmts�   s   ø€ ÜÔ/©$Ó/Ó/Ð/r0   c                 ó   • g©NFr¤   )rŒ   rf   s     r.   Ú_visit_functionÚ%ContainsReturnChecker._visit_function“   s   € ð r0   c                 ót  • Sn[         R                  " U5       H›  u  p4[        U[        5      (       aF  U H>  n[        U[         R                  5      (       d  M$  U=(       d    U R                  U5      nM@     M`  [        U[         R                  5      (       d  M�  U=(       d    U R                  U5      nM�     U$ rº   )ÚastÚiter_fieldsrM   r\   ÚASTr¯   )rŒ   re   rG   r2   ro   Úitems         r.   Úgeneric_visitÚ#ContainsReturnChecker.generic_visit™   s„   € ØˆÜŸš¨Ö-‰HˆAÜ˜%¤×&Ñ&Û!�DÜ! $¬¯©×0Ó0Ø!×5 T§Z¡Z°Ó%5šó "ô ˜E¤3§7¡7×+Ó+Ø×.˜TŸZ™Z¨Ó.’ñ .ð ˆ
r0   re   c                 óf  • [        UR                  [        R                  5      (       an  UR                  R                  U R
                  ;   aI  U R
                  UR                  R                     n[        X!R                  5      nU R                  U5      $ gU R                  UR                  5      $ rº   )
rM   ro   r¾   ÚNameÚidrª   ÚgetattrÚattrr»   r¯   )rŒ   re   ro   rf   s       r.   Úvisit_AttributeÚ%ContainsReturnChecker.visit_Attribute¤   sx   € ô �d—j‘j¤#§(¡(×+Ñ+Ø�z‰z�}‰} §¡Ó+ØŸ™ D§J¡J§M¡MÑ2�Ü˜U§I¡IÓ.�Ø×+Ñ+¨BÓ/Ð/ØØ�z‰z˜$Ÿ*™*Ó%Ð%r0   c                 óÚ   • [        UR                  5      [        R                  L a  gUR                  U R
                  ;   a*  U R
                  UR                     nU R                  U5      $ grº   )r,   Úctxr¾   ÚStorerÆ   rª   r»   )rŒ   re   rf   s      r.   Ú
visit_NameÚ ContainsReturnChecker.visit_Name³   sO   € Ü�—‘‹>œSŸY™YÒ&ØØ�7‰7�d—k‘kÓ!Ø—‘˜TŸW™WÑ%ˆBØ×'Ñ'¨Ó+Ð+Ør0   c                 ó   • g©NTr¤   ©rŒ   re   s     r.   Úvisit_ReturnÚ"ContainsReturnChecker.visit_Return»   ó   € Ør0   c                 ó   • grº   r¤   rÒ   s     r.   Úvisit_AssignÚ"ContainsReturnChecker.visit_Assign¾   ó   € ð r0   c                 ó   • grº   r¤   rÒ   s     r.   Úvisit_AugAssignÚ%ContainsReturnChecker.visit_AugAssignÃ   rÙ   r0   c                 ó8   • U R                  UR                  5      $ rL   ©r·   r¶   rÒ   s     r.   Úvisit_ModuleÚ"ContainsReturnChecker.visit_ModuleÈ   ó   € Ø× Ñ  §¡Ó+Ð+r0   c                 ó8   • U R                  UR                  5      $ rL   rÞ   rÒ   s     r.   Úvisit_FunctionDefÚ'ContainsReturnChecker.visit_FunctionDefË   rá   r0   c                 ó¦   • U R                  UR                  5      nUR                  (       a$  U=(       d    U R                  UR                  5      nU$ rL   )r·   r¶   Úorelse)rŒ   re   rG   s      r.   Úvisit_IfÚContainsReturnChecker.visit_IfÎ   s=   € ð ×Ñ §	¡	Ó*ˆØ�;�;Ø×7˜×*Ñ*¨4¯;©;Ó7ˆCØˆ
r0   c                 ó|   • U R                  UR                  5      =(       d    U R                  UR                  5      $ rL   )r¯   r¶   ræ   rÒ   s     r.   Úvisit_IfExpÚ!ContainsReturnChecker.visit_IfExpÛ   s'   € Ø�z‰z˜$Ÿ)™)Ó$×?¨¯
©
°4·;±;Ó(?Ð?r0   c                 ó8   • U R                  UR                  5      $ rL   )r¯   ÚfuncrÒ   s     r.   Ú
visit_CallÚ ContainsReturnChecker.visit_CallÞ   s   € Ø�z‰z˜$Ÿ)™)Ó$Ð$r0   r©   N)rc   r    r¡   r¢   r�   Úboolr·   r»   rÂ   r¾   Ú	AttributerÉ   rÅ   rÎ   ÚReturnrÓ   ÚAssignr×   Ú	AugAssignrÛ   ÚModulerß   ÚFunctionDefrã   ÚIfrç   ÚIfExprê   ÚCallrî   r£   r¤   r0   r.   r¦   r¦   ‹   s  † òð0 Dô 0ð Tô ð	 Tô 	ð& C§M¡Mð &°dô &ð˜sŸx™xð ¨Dô ð §¡ð °ô ð §¡ð °ô ð
 C§M¡Mð °dô ð
, §¡ð ,°ô ,ð, c§o¡oð ,¸$ô ,ð˜SŸV™Vð ¨ô ð@ §	¡	ð @¨dô @ð%˜sŸx™xð %¨D÷ %r0   r¦   c                   óÌ   • \ rS rSrS rS\R                  S\\   S\\R                     4S jr
S\R                  S\\R                     4S jrS\R                  4S jrS	 rS
rg)ÚASTFunctionéâ   c                 ó4   • Xl         X l        X0l        X@l        g rL   )Ú	ret_typesÚ	arg_typesrA   Úattrs)rŒ   rþ   rÿ   rA   r   s        r.   r�   ÚASTFunction.__init__ä   s   € Ø"ŒØ"ŒØ"ŒØ�
r0   r”   rr   rJ   c                 óH   • / nU H  nUc  M  UR                  X5        M     U$ rL   )Ú_flatten_ir_types)rŒ   r”   rr   Úir_typesrC   s        r.   Úflatten_ir_typesÚASTFunction.flatten_ir_typesê   s.   € ØˆÛˆBØ‰zÙØ× Ñ  Ö3ñ ð ˆr0   c                 ó8   • U R                  XR                  5      $ rL   )r  rþ   )rŒ   r”   s     r.   Úreturn_types_irÚASTFunction.return_types_irò   s   € Ø×$Ñ$ W¯n©nÓ=Ð=r0   c                 ó
  ^ • U 4S jn[        [        T R                  U5      5      nU Vs/ s H  n[        T R                  U5      PM     nnT R	                  X5      nT R                  U5      nUR                  Xg5      $ s  snf )Nc                 ó8   >• U TR                   ;  =(       a    US L$ rL   ©rA   ©Úpathr2   rŒ   s     €r.   Ú<lambda>Ú'ASTFunction.serialize.<locals>.<lambda>ø   ó   ø€  ¨T¯^©^Ñ!;×!MÀÈÀÐ!Mr0   )r\   r    rÿ   r!   r  r  Úget_function_ty)rŒ   r”   Úis_valÚ	val_pathsr  rÿ   Úarg_types_irÚret_types_irs   `       r.   Ú	serializeÚASTFunction.serializeõ   sw   ø€ ô NˆÜœ t§~¡~°vÓ>Ó?ˆ	ÙIRÓSÊÀÔ& t§~¡~°tÖ<Éˆ	ÐSØ×,Ñ,¨WÓ@ˆØ×+Ñ+¨GÓ4ˆØ×&Ñ& |ÓBÐBùò Ts   « B c                 óx  ^ ^• U4S jmT" T R                   5      nU 4S jn[        [        T R                   U5      5      nSn[        UR	                  5       5       Vs/ s H  oaR                  U5      PM     nnU Hq  n[        T R                   U5      n	T R                  R                  U/ 5      n
U
 H  u  p¼UR                  X[U5        M     U	R                  Xu5      u  pÕ[        X(U5        Ms     T R                  nUR                  5        H%  u  p�[        X([        R                  " U5      5        M'     U$ s  snf )Nc                 óê   >• [        U [        [        [        R                  45      (       a.  [        R                  " U  Vs/ s H  nT" U5      PM     snU 5      $ [        R
                  " S 5      $ s  snf rL   )rM   r\   r   r   rn   r   )rC   ÚxÚmake_templates     €r.   r  Ú.ASTFunction.deserialize.<locals>.make_template  sY   ø€ Ü˜"œt¤U¬H×,?Ñ,?Ð@×AÑAÜ—~’~ÁÓ&DÂ¸A¡}°QÖ'7ÁÑ&DÀbÓIÐIÜ×%Ò% dÓ+Ð+ùò 'Es   Á A0c                 ó8   >• U TR                   ;  =(       a    US L$ rL   r  r  s     €r.   r  Ú)ASTFunction.deserialize.<locals>.<lambda>  r  r0   r   )rÿ   r\   r    ÚrangeÚget_num_argsrg   r!   r   ÚgetÚset_arg_attrr{   r"   rA   r„   r   r   )rŒ   rf   rq   r  r  r}   rE   rw   r  rC   Ú
attr_specsÚ	attr_nameÚattr_valr€   rA   r  s   `              @r.   ÚdeserializeÚASTFunction.deserializeÿ   s  ù€ õ	,ñ
 ˜TŸ^™^Ó,ˆÜMˆÜœ t§~¡~°vÓ>Ó?ˆ	àˆÜ',¨R¯_©_Ó->Ô'?Ó@Ò'? !—7‘7˜1–:Ñ'?ˆÐ@ÛˆDÜ" 4§>¡>°4Ó8ˆBàŸ™Ÿ™¨¨bÓ1ˆJÛ'1Ñ#�	Ø—‘ °8Ö<ñ (2ð ×*Ñ*¨7Ó;‰KˆCÜ˜d¨#Ö.ñ ð —N‘Nˆ	Ø"Ÿ™Ö*‰IˆDÜ˜d¬(×*<Ò*<¸SÓ*AÖBñ +àˆùò As   ÁD7)rÿ   r   rA   rþ   N)rc   r    r¡   r¢   r�   r   r”   r   r   r,   r  r  r  r'  r£   r¤   r0   r.   rû   rû   â   sj   † òð¨¯
©
ð ¸4À	¹?ð ÈtÐTV×T[ÑT[É}ô ð> r§z¡zð >°d¸2¿7¹7±mô >ðC §¡ô Cõr0   rû   T)Úfrozenc                   ó*   • \ rS rSr% \\S'   \\S'   Srg)ÚBoundJITMethodi  Ú__self__Ú__func__r¤   N)rc   r    r¡   r¢   r   Ú__annotations__r   r£   r¤   r0   r.   r+  r+    s   ‡ àÓØÖr0   r+  c                   óÖ  ^• \ rS rSr% SSSSSSSS.S\S\\   S\\   4S	 jjr\	\
\\\\\\4 V Vs0 s H  nUR                   U_M     snn r\\\4   \S
'   \R)                  S\R,                  R.                  4S\R,                  R0                  4S\R,                  R2                  445        S rS rS r\R<                  S 5       rS r S\S\!\"\#4   SS4S jr$S r%S r&\'" 5       4S\'\   4S jjr(S r)S r*S r+S\,RZ                  4S jr.S  r/S! r0S" r1S# r2S$ r3S% r4S& r5S' r6S( r7S) r8S* r9S+ r:S, r;S- r<\,Rz                  S.\,R|                  S/\,R~                  S0\,R€                  S1\,R‚                  S2\,R„                  S3\,R†                  S4\,Rˆ                  S5\,RŠ                  S6\,RŒ                  S7\,RŽ                  S8\,R�                  S90rI\\J\,R–                     \4   \S:'   S; rLS< rMS= rNS> rOS? rPS@ rQSA rRSB rS\,R¨                  SC\,Rª                  SD\,R¬                  SE\,R®                  SF\,R°                  SG\,R²                  SH0rZ\\J\,R¶                     \4   \SI'   SJ r\\,Rº                  SK\,R¼                  SL\,R¾                  SM\,RÀ                  SN0ra\\J\,RÄ                     \4   \SO'   SP rcSQ rdSR reSS rfST rgSU rhSV riSW rjSX rkS\l\\4   4SY jrmS\4SZ jrnSrS[\4S\ jjroS] rpS^ rqS_ rrS` rsS\,Rè                  4Sa jru\,Rì                  Sb\,Rî                  Sc0rx\\J\,Rò                     \4   \Sd'   Se rzSf r{Sg r|Sh r}Si r~U4Sj jrSk r€S\,GR                  SS4Sl jr‚Sm rƒSnSoK„Jr…  \R,                  GR                  \‚\R,                  GR                  \ƒ" \ˆ5      \…GR                  \‚\…GR                  \ƒ" \ˆ5      \\ƒ" \5      \	\ƒ" \	5      0r‰\\Š\‹\,GR                  /\4   4   \Sp'   SqrŒU=r�$ s  snn f )sÚCodeGeneratori"  NFr   )ÚmoduleÚ	is_kernelÚfunction_typesr`   rB   Ú	file_nameÚ
begin_lineÚjit_fnr3  r4  c                ó¼  • Xl         X�l        U	(       a9  SSKJn  [        R
                  " U5      U l        U" U R                  5      U l        O8SSKJ	n  [        R                  " U5      U l        U" U R                  5      U l        S U l        Xðl        US-
  U l        U R                  R                  UUS5        X`R                  l        XpR                  l        Uc  0 OUU R                  l        U
c  U R                  R%                  5       OU
U l        Uc  0 OUU l        X l        0 U l        UR/                  5        H�  u  nn[1        U[2        5      (       a+  UR5                  UR6                  U5      U R,                  U'   MF  [9        USS5      nUU;   a(  [9        UU   UR6                  5      U R,                  U'   M�  UU R,                  U'   M’     0 U l        XPl        U(       a"  XDR?                  S5      S-   S  n[A        US5      nX@l!        X°l"        S U l#        XÐl$        Xàl%        / U l&        S U l'        0 U l(        U RS                  5       U l*        S U l+        S	U l,        g )
Nr   )ÚGluonSemantic)ÚTritonSemanticr$   r    Ú r4   ÚfunctionF)-ÚcontextÚis_gluonÚ,triton.experimental.gluon.language._semanticr8  r   ÚGluonOpBuilderr”   ÚsemanticÚtriton.language.semanticr9  r   Úname_loc_as_prefixr4  r5  Úset_locÚoptionsÚcodegen_fnsÚ
module_mapÚcreate_moduler1  Úfunction_ret_typesÚ	prototyperª   r„   rM   r   r"  rc   rÇ   r�   r6  Úrfindr/   Úfunction_namer2  Úcur_noder`   rB   Ú	scf_stackÚret_typer’   Ú_define_name_lookupÚdereference_namerf   Úvisiting_arg_default_value)rŒ   r<  rI  rª   rK  r6  rD  rE  rF  r=  r1  r2  r3  r`   rB   r4  r5  r8  r9  Úkrp   Úmodule_names                         r.   r�   ÚCodeGenerator.__init__$  só  € ð ŒØ ŒÞÝRÜ#×2Ò2°7Ó;ˆDŒLÙ)¨$¯,©,Ó7ˆD�Må?ÜŸ:š: gÓ.ˆDŒLÙ*¨4¯<©<Ó8ˆDŒMà"&ˆÔØ"Œà$ q™.ˆŒØ�‰×Ñ˜Y¨
°AÔ6Ø&�‰Ôð $/�‰Ô Ø(2Ñ(:¡"À
ˆ�‰ÔØ6<±n�d—l‘l×0Ñ0Ô2È&ˆŒØ(6Ñ(>¡"ÀNˆÔØ"ŒàˆŒØ—L‘L–N‰DˆAˆqÜ˜!œZ×(Ñ(Ø!+§¡°·
±
¸AÓ!>�—‘˜A‘Ùä! ! \°2Ó6ˆKØ˜jÓ(Ü!(¨°KÑ)@À!Ç*Á*Ó!M�—‘˜A“à!"�—‘˜A“ñ #ð ˆŒØŒæØ)×*=Ñ*=¸cÓ*BÀQÑ*FÐ*GÐHˆMÜ5°mÀZÓPˆMØ*ÔØ"ŒØˆŒØ ŒØ,ÔØˆŒØˆŒð .0ˆŒØ6:×6NÑ6NÓ6PˆÔØˆŒð +0ˆÕ'r0   Úbuiltin_namespaceÚprintÚminÚmaxc                 óB   • [        U R                  R                  X5      $ rL   )r'   r6  rb   )rŒ   re   Úmessages      r.   Ú_unsupportedÚCodeGenerator._unsupportedm  s   € Ü+¨D¯K©K¯O©O¸TÓKÐKr0   c                 óz   • [        5       nU R                  R                  X5      nX2L a  g[        U5      (       a  gg)NFT)Úobjectrª   r"  rU   )rŒ   r+   Úabsent_markerr€   s       r.   Ú_is_constexpr_globalÚ"CodeGenerator._is_constexpr_globalp  s5   € Ü›ˆØ�k‰k�o‰o˜dÓ2ˆØÒØä˜×ÑØàr0   c                 óˆ   ^ ^^^• S[         4U 4S jjmS[         4U 4S jjm[        5       mS[         S[        4UUUU 4S jjnU$ )Nr+   c                 ó:   >• TR                   R                  X5      $ rL   )r�   r"  )r+   ÚabsentrŒ   s     €r.   Úlocal_lookupÚ7CodeGenerator._define_name_lookup.<locals>.local_lookup}  s   ø€ à—;‘;—?‘? 4Ó0Ð0r0   c                 ól  >• TR                   R                  X5      n[        X!L U TR                  ;   [	        U5      [
        L [        U[        5      [        USS5      [        USS5      [        USS5      R                  S5      [        USS5      R                  S5      [        U[        R                  5      [        U5      TR                  U 5      TR                  [        R                   R"                  /5      (       a  U$ [%        [&        R(                  " SU  S	35      R+                  S
S5      5      e)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µ   rU  r,   r   rM   r   rÇ   Ú
startswithr   rT   r#   r`  rQ  r   ÚcompilationÚallow_non_constexpr_globalsÚ	NameErrorÚtextwrapÚdedentr?   )r+   rd  r€   rŒ   s      €r.   Úglobal_lookupÚ8CodeGenerator._define_name_lookup.<locals>.global_lookup�  s  ø€ Ø—+‘+—/‘/ $Ó/ˆCô Ø�MØ˜D×2Ñ2Ñ2Ü˜“I¤Ð+Ü˜s¤KÓ0Ü˜CÐ!5°uÓ=Ü˜CÐ!7¸Ó?Ü˜C ¨rÓ2×=Ñ=Ð>OÓPÜ˜C ¨rÓ2×=Ñ=Ð>bÓcÜ˜s¤H§N¡NÓ3Ü! #Ó&Ø×-Ñ-¨dÓ3ð ×3Ñ3Ü×%Ñ%×AÑAð!÷ ñ ð$ �
ÜÜ—’ð %/Ø/3¨fð 51ð!4ó 5÷ 6=±W¸TÀ3Ó5GóIð Ir0   rJ   c                 ó„   >• TnTTTR                   R                  4 H  nU" X5      nX1Ld  M  Us  $    [        U  S35      e)Nz is not defined)rU  r"  ro  )r+   rd  Úlookup_functionro   r_  rr  re  rŒ   s       €€€€r.   Úname_lookupÚ6CodeGenerator._define_name_lookup.<locals>.name_lookup¤  sO   ø€ Ø"ˆFØ#/°À×@VÑ@V×@ZÑ@ZÓ#Z�Ù'¨Ó5�ØÔ&Ø ’Lñ $[ô ˜t˜f OÐ4Ó5Ð5r0   )Ústrr^  r   )rŒ   rv  r_  rr  re  s   ` @@@r.   rO  Ú!CodeGenerator._define_name_lookup{  sG   û€ ð	1œs÷ 	1ð	I¤÷ 	IôB ›ˆð	6œcð 	6¤c÷ 	6ò 	6ð Ðr0   c              #   ó.   #   • Xl         S v •  S U l         g 7frL   )rB  )rŒ   Úprefixs     r.   Ú_name_loc_prefixÚCodeGenerator._name_loc_prefix®  s   é € à"(ÔÛØ"&ˆÕùs   ‚c                 óž  • [        U[        R                  [        R                  45      (       a9  UR	                  U R
                  R                  X!R                  5       5      5        g [        U5      (       aU  / nUR                  U5        U H;  nUR	                  U R
                  R                  X$R                  5       5      5        M=     g g rL   )
rM   r   ro   Úblock_argumentrC  r”   Úcreate_name_locÚget_locrO   rv   )rŒ   r€   r+   rw   Úhandles        r.   Ú_maybe_set_loc_to_nameÚ$CodeGenerator._maybe_set_loc_to_name´  sŒ   € Ü�cœBŸH™H¤b×&7Ñ&7Ð8×9Ñ9Ø�K‰K˜Ÿ™×4Ñ4°T¿;¹;»=ÓIÕJÜ˜c×"Ñ"ØˆGØ�O‰O˜GÔ$Û!�Ø—‘˜tŸ|™|×;Ñ;¸DÇ.Á.ÓBRÓSÖTò "ð #r0   r+   ro   rJ   c                 ó<   • X R                   U'   X R                  U'   g)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+   ro   s      r.   Ú	set_valueÚCodeGenerator.set_value½  s   € ð "�‰�DÑØ %�‰˜Òr0   c                 óp   • U R                   R                  5       nU R                   R                  5       nX!4$ rL   )r”   r�  r—   )rŒ   ÚlocÚips      r.   Ú_get_insertion_point_and_locÚ*CodeGenerator._get_insertion_point_and_locÆ  s/   € ð �l‰l×"Ñ"Ó$ˆØ�\‰\×-Ñ-Ó/ˆØˆwˆr0   c                 óp   • U R                   R                  U5        U R                   R                  U5        g rL   )r”   rœ   rC  )rŒ   rŠ  r‰  s      r.   Ú_set_insertion_point_and_locÚ*CodeGenerator._set_insertion_point_and_locÎ  s&   € Ø�‰×,Ñ,¨RÔ0Ø�‰×Ñ˜SÕ!r0   Úignorec                 ó
  • U R                   R                  5       nU R                   R                  U5        U R                  R	                  U5        U R                  UR                  5        U R                  R                  5         UR                  5         / n/ n/ nUR                  5        Hµ  u  p‰Xƒ;   a  M  [        U	5      (       a  U R                  U   n
U R                  XŠU	5        [        U	/5      n[        U
/5      nX¼:w  a?  UR	                  U5        UR	                  U	R                  5        UR                  U5        M™  M›  X€R                   ;  a  M¬   SU S35       e   UR#                  5       U l        0 U l        XvU4$ )NúLoop carried variable z is not a triton value)r”   Úcreate_blockÚset_insertion_point_to_startrM  ÚappendÚvisit_compound_statementr¶   ÚpopÚeraser„   rO   r�   Ú_verify_loop_carried_variablerx   r,   Úextendr’   Úcopy)rŒ   re   r‘   r�  ÚblockÚinit_tysÚinit_handlesÚnamesr+   Úlive_valÚloop_valÚlive_handlesÚloop_handless                r.   Ú_find_carriesÚCodeGenerator._find_carriesÒ  sG  € à—‘×)Ñ)Ó+ˆØ�‰×1Ñ1°%Ô8à�‰×Ñ˜dÔ#Ø×%Ñ% d§i¡iÔ0Ø�‰×ÑÔØ�‰Œð
 ˆØˆØˆà%Ÿm™mžo‰NˆDØ‹~Ùä ×)Ñ)ØŸ;™; tÑ,�Ø×2Ñ2°4À8ÔLä3°X°JÓ?�Ü3°X°JÓ?�ØÓ/Ø—L‘L Ô&Ø—O‘O H§M¡MÔ2Ø ×'Ñ'¨Ö5ñ 0ð
 §?¡?Õ2ÐiÐ6LÈTÈFÐRhÐ4iÓiÐ2ñ .ð$ —l‘l“nˆŒØˆŒà HÐ,Ð,r0   c                 ó    • [        U5      (       d  U/nU H5  nU R                  U5        [        U[        R                  5      (       d  M5    g    g rL   )r]   r¯   rM   r¾   rò   )rŒ   ÚstmtsÚstmts      r.   r–  Ú&CodeGenerator.visit_compound_statementý  s@   € ä˜U×#Ñ#Ø�GˆEÛˆDØ�J‰J�tÔô ˜$¤§
¡
×+Ó+Ùò r0   c                 óB   • [         R                  R                  X5        g rL   ©r¾   ÚNodeVisitorrÂ   rÒ   s     r.   rß   ÚCodeGenerator.visit_Module  ó   € Ü�‰×%Ñ% dÕ1r0   c                 óÎ   • U R                  UR                  5      nUb   e[        R                  " UR                   Vs/ s H  o0R                  U5      PM     sn5      nU$ s  snf rL   )r¯   rÌ   r   r   Úelts)rŒ   re   rÌ   Úeltr°  s        r.   Ú
visit_ListÚCodeGenerator.visit_List  sP   € Ø�j‰j˜Ÿ™Ó"ˆØ‰{Ðˆ{Ü�~Š~¸$¿)º)ÓDº)°3Ÿz™z¨#ž¹)ÑDÓEˆØˆùò Es   ¿A"re   c                 óª  • [        UR                  5      S:w  a  [        S5      eUR                  S   nU R                  UR                  5      n[        U[        5      (       d  [        S5      e/ nU HS  nU R                  UR                  R                  U5        UR                  U R                  UR                  5      5        MU     [        U5      $ )Nr$   z'nested comprehensions are not supportedr   z'only tuple comprehensions are supported)r|   Ú
generatorsÚ
ValueErrorr¯   ÚiterrM   Útl_tupleÚNotImplementedErrorr†  ÚtargetrÆ   r•  r±  )rŒ   re   Úcompr·  ÚresultsrÁ   s         r.   Úvisit_ListCompÚCodeGenerator.visit_ListComp  s£   € Üˆt�‰Ó 1Ó$ÜÐFÓGÐGà�‰˜qÑ!ˆØ�z‰z˜$Ÿ)™)Ó$ˆÜ˜$¤×)Ñ)Ü%Ð&OÓPÐPàˆÛˆDØ�N‰N˜4Ÿ;™;Ÿ>™>¨4Ô0Ø�N‰N˜4Ÿ:™: d§h¡hÓ/Ö0ñ ô ˜Ó Ð r0   c                 ó8  ^ ^• T R                  UR                  5      n/ nUU 4S jmT" U5      nUc  [        R                  nOH[	        U[        R
                  R                  5      (       d   eUR                  U5        UR                  nT R                  R                  U5        T R                  c  UT l        O+T R                  U:w  a  [        ST R                   SU 35      eT R                  R                  5       nT R                  R                  U5        g )Nc                 óè   >• [        U [        R                  5      (       a  [        U T5      $ [        U [        R                  [
        [        45      (       a  TR                  R                  U 5      $ U $ rL   )	rM   r   r   rs   r   ÚintÚfloatr@  Ú	to_tensor)ro   ÚdecayrŒ   s    €€r.   rÄ  Ú)CodeGenerator.visit_Return.<locals>.decay%  sU   ø€ Ü˜%¤§¡×0Ñ0Ü-¨e°UÓ;Ð;Ü˜E¤H×$6Ñ$6¼¼UÐ#C×DÑDØ—}‘}×.Ñ.¨uÓ5Ð5ØˆLr0   zInconsistent return types: ú and )r¯   ro   r   ÚvoidrM   rS   r   rv   r,   r”   rG   rN  Ú	TypeErrorr“  Úset_insertion_point_to_end)rŒ   re   Ú	ret_valuerw   Úret_tyÚpost_ret_blockrÄ  s   `     @r.   rÓ   ÚCodeGenerator.visit_Return!  sà   ù€ Ø—J‘J˜tŸz™zÓ*ˆ	Øˆö	ñ ˜)Ó$ˆ	àÑÜ—]‘]‰Fä˜i¬¯©×)AÑ)A×BÑBÐBÐBØ×!Ñ! 'Ô*Ø—^‘^ˆFØ�‰×Ñ˜Ô!Ø�=‰=Ñ Ø"ˆD�MØ�]‰]˜fÓ$ÜÐ9¸$¿-¹-¸ÈÈfÈXÐVÓWÐWð Ÿ™×2Ñ2Ó4ˆØ�‰×/Ñ/°Õ?r0   c                 ó~	  • U R                  UR                  5      u  p#U R                  (       a  U R                  US5      e[	        UR                  R
                  S S S2   5       HÄ  u  pEUR                  R                  U* S-
     nUR                  nUR                  n[        R                  " U[        R                  " 5       S9n	Uc  [        R                  " U	/US9n
O[        R                  " X•US9n
 U R                  (       a   eSU l        U R                  U
5        SU l        MÆ     U R                  (       a  S	OS
nU R                  R!                  U R"                  5      nU R"                  R%                  U R&                  U R(                  XËU R*                  5      U l        U R&                  R-                  U R                  5        U R                  R/                  5       nU R                  R1                  U R                  5      nU R2                  b0  U R2                  R5                  U R                  U R"                  5        [7        X.5       H*  u  nnU R9                  UU5        U R;                  UU5        M,     U R"                  R=                  5       nU R"                  R?                  U5        U RA                  URB                  5        U R"                  R=                  5       RE                  5       (       a   eU RF                  b  U RF                  [H        RJ                  :X  a2  [H        RJ                  U l#        U R"                  RM                  / 5        GO[O        U RF                  [H        RP                  5      (       a&  U RF                  RR                  U R                  l*        OU RF                  /U R                  l*        U R                  RW                  U R                  R!                  U R"                  5      5        U R"                  RM                  U R                  RY                  U R"                  5       Vs/ s H  nU R"                  R[                  U5      PM      sn5        U R                  R]                  5         U(       a  U R"                  R_                  U5        g g ! SU l        f = fs  snf )Nz,nested function definition is not supported.éÿÿÿÿr$   )rÆ   rÌ   ©Útargetsro   )rº  ro   Ú
annotationTFÚpublicÚprivate)0r¯   rg   rf   r[  ra   ÚdefaultsrÒ  ri   r¾   rÅ   rÍ   ró   Ú	AnnAssignrQ  r2  rI  r  r”   Úget_or_insert_functionr1  rK  r`   Ú	push_backÚadd_entry_blockr'  rB   Úinitialize_calleeÚziprƒ  r†  r•   r”  r–  r¶   Úhas_terminatorrN  r   rÇ  rG   rM   rn   rr   rþ   Ú
reset_typer  Úcreate_poisonÚfinalizerÉ  )rŒ   re   rd   Úkwarg_namesrE   Údefault_valueÚarg_noderÒ  r+   Ú	st_targetÚ	init_nodeÚ
visibilityÚfn_tyÚentryÚ
arg_valuesÚarg_nameÚ	arg_valueÚ	insert_ptrC   s                      r.   rã   ÚCodeGenerator.visit_FunctionDef?  s^  € Ø!%§¡¨D¯I©IÓ!6Ñˆ	Ø�7�7Ø×#Ñ# DÐ*XÓYÐYä )¨$¯)©)×*<Ñ*<¹T¸r¸TÑ*BÖ CÑˆAØ—y‘y—~‘~ q b¨1¡fÑ-ˆHØ!×,Ñ,ˆJØ—<‘<ˆDÜŸš D¬c¯iªi«kÑ:ˆIØÑ!ÜŸJšJ°	¨{À-ÑP‘	äŸMšM°Ð\fÑg�	ð8Ø×:×:Ð:Ð:Ø26�Ô/Ø—
‘
˜9Ô%à27�Ö/ñ !Dð" "&§§‘X°Yˆ
Ø—‘×(Ñ(¨¯©Ó6ˆØ—,‘,×5Ñ5°d·k±kÀ4×CUÑCUÐW\Ðjn×jwÑjwÓxˆŒØ�‰×Ñ˜dŸg™gÔ&Ø—‘×'Ñ'Ó)ˆØ—^‘^×/Ñ/°·±Ó8ˆ
Ø×ÑÑ*Ø×Ñ×1Ñ1°$·'±'¸4¿<¹<ÔHä#& yÖ#=ÑˆH�iØ×'Ñ'¨	°8Ô<Ø�N‰N˜8 YÖ/ñ $>ð —L‘L×4Ñ4Ó6ˆ	Ø�‰×1Ñ1°%Ô8à×%Ñ% d§i¡iÔ0ð —<‘<×3Ñ3Ó5×DÑD×FÑFÐFÐFØ�=‰=Ñ  D§M¡M´X·]±]Ó$BÜ$ŸM™MˆDŒMØ�L‰L×Ñ˜RÖ ä˜$Ÿ-™-¬×)<Ñ)<×=Ñ=Ø+/¯=©=×+>Ñ+>�—‘Õ(à,0¯M©M¨?�—‘Ô(Ø�G‰G×Ñ˜tŸ~™~×7Ñ7¸¿¹ÓEÔFØ�L‰L×ÑÀtÇ~Á~×GeÑGeÐfj×frÑfrÔGsÓtÒGsÀ˜dŸl™l×8Ñ8¸Ö<ÑGsÑtÔuØ�‰×ÑÔæØ�L‰L×3Ñ3°IÕ>ð øðE 38�Õ/üò> us   Ã8+R.Ñ%R:Ò.	R7c                 ó�   • / nUR                    H  nX R                  U5      /-  nM     U R                  UR                  5      nX$4$ rL   )rg   r¯   Úkwarg)rŒ   re   rd   ri   rà  s        r.   Úvisit_argumentsÚCodeGenerator.visit_argumentsw  sC   € Øˆ	Ø—9”9ˆCØŸ*™* S›/Ð*Ñ*ŠIñ à—j‘j §¡Ó,ˆØÐ%Ð%r0   c                 óp  ^• [         R                  R                  U T5        [        U4S jU R                  R
                   5       5      nUR                  (       aP  UR                  (       d  UR                  (       a.  [        U R                  R                  TTR                   S35      eTR                  $ )Nc              3   ó^   >#   • U  H"  oR                   TR                  :X  d  M  Uv •  M$     g 7frL   )r+   ri   )r°   Úpre   s     €r.   r²   Ú*CodeGenerator.visit_arg.<locals>.<genexpr>€  s"   øé € ÐIÒ 2˜1·f±fÀÇÁÑ6H—Q‘QÒ 2ùs   ƒ-¤	-z‰ marked as constexpr and listed in do_not_specialize/do_not_specialize_on_alignment. Remove constexpr designation to skip specialization.)r¾   r¬  rÂ   Únextr6  ÚparamsÚis_constexprÚdo_not_specializeÚdo_not_specialize_on_alignmentr%   rb   ri   )rŒ   re   Úparams    ` r.   Ú	visit_argÚCodeGenerator.visit_arg~  s†   ø€ Ü�‰×%Ñ% d¨DÔ1ÜÔI §¡× 2Ò 2ÓIÓIˆØ×× 5×#:×#:¸e×>b×>bÜ"Ø—‘—‘ Ø—8‘8�*ð Gð GóHð Hð �x‰xˆr0   c                 ód  • U R                  UR                  5      nU R                  UR                  5      nU R                  UR                  5      nU[        :X  aE  X0R
                  ;   a  [        U S35      e[	        U5      nX@R
                  U'   U R
                  U   $ U R                  U5      $ )Nz4 is already defined. constexpr cannot be reassigned.)r¯   rÒ  rº  ro   r   r�   r¶  r×   )rŒ   re   rÒ  rº  ro   s        r.   Úvisit_AnnAssignÚCodeGenerator.visit_AnnAssignˆ  sŸ   € à—Z‘Z §¡Ó0ˆ
Ø—‘˜DŸK™KÓ(ˆØ—
‘
˜4Ÿ:™:Ó&ˆàœÓ"ØŸ™Ó$Ü  F 8ð ,Dð "Eó Fð Fä˜eÓ$ˆEØ"'�K‰K˜ÑØ—;‘;˜vÑ&Ð&à× Ñ  Ó&Ð&r0   c                 óJ  • [        UR                  [        R                  5      (       d   e[        U[        R                  5      (       a  U R                  X5      $ [        U[        R                  5      (       a=  [        UR                  5       H#  u  p1U R                  XR                  U   5        M%     g [        U[        R                  5      (       a  [        S5      e[        U[        R                  5      (       d   eU R                  U R                  U5      U5        g )Nz/Attribute assignment is not supported in triton)rM   rÌ   r¾   rÍ   Ú	SubscriptÚvisit_Subscript_Storer	   ra   r°  ÚassignTargetrt   rñ   r¹  rÅ   r†  r¯   )rŒ   rº  ro   rE   s       r.   r  ÚCodeGenerator.assignTarget˜  sÉ   € Ü˜&Ÿ*™*¤c§i¡i×0Ñ0Ð0Ð0Ü�fœcŸm™m×,Ñ,Ø×-Ñ-¨fÓ<Ð<Ü�fœcŸi™i×(Ñ(Ü& v§{¡{Ö3‘	�Ø×!Ñ! &¯,©,°q©/Ö:ñ 4àÜ�fœcŸm™m×,Ñ,Ü%Ð&WÓXÐXÜ˜&¤#§(¡(×+Ñ+Ð+Ð+Ø�‰�t—z‘z &Ó)¨5Õ1r0   c                 ó  ^ ^• UU 4S jm[        U[        R                  5      (       a  UR                  /OUR                  n[        U5      S:X  d   eUS   n[        U[        R                  5      (       aF  T R                  UR                  5         T" T R                  UR                  5      5      nS S S 5        O!T" T R                  UR                  5      5      nT R                  UW5        g ! , (       d  f       N!= f)Nc                 ó0  >• [        U [        R                  5      (       a  [        U T5      $ [        R                  [        R                  4n[        U 5      n U b;  [        U 5      (       d+  [        X5      (       d  TR                  R                  U 5      n U $ rL   )	rM   r   r   rs   rT   r   rO   r@  rÃ  )ro   Únative_nontensor_typesÚ_sanitize_valuerŒ   s     €€r.   r  Ú3CodeGenerator.visit_Assign.<locals>._sanitize_value§  ss   ø€ Ü˜%¤§¡×0Ñ0Ü-¨e°_ÓEÐEÜ&.§n¡n´h·n±nÐ%EÐ"Ü(¨Ó/ˆEØÑ Ü$ U×+Ñ+Ü˜u×=Ñ=ØŸ™×/Ñ/°Ó6�ØˆLr0   r$   r   )rM   r¾   rÖ  rº  rÑ  r|   rÅ   r|  rÆ   r¯   ro   r  )rŒ   re   rÑ  rº  rt   r  s   `    @r.   r×   ÚCodeGenerator.visit_Assign¥  sº   ù€ ö		ô $.¨d´C·M±M×#BÑ#B�4—;‘;‘-ÈÏÉˆÜ�7‹|˜qÓ Ð Ð Ø˜‘ˆÜ�fœcŸh™h×'Ñ'Ø×&Ñ& v§y¡yÕ1Ù(¨¯©°D·J±JÓ)?Ó@�÷ 2Ð1ñ % T§Z¡Z°·
±
Ó%;Ó<ˆFØ×Ñ˜& &Õ)÷	 2Õ1ús   Â"C1Ã1
C?c                 óÌ  • [         R                  " UR                  5      n[        R                  " 5       Ul        [        R                  " X!R                  UR                  5      n[        R                  " UR                  /US9nS H8  n[        X5      (       d  M  [        X5      n[        X5U5        [        XEU5        M:     U R                  U5        U R                  U5      $ )NrÐ  )ÚlinenoÚ
col_offsetÚ
end_linenoÚend_col_offset)r›  Údeepcopyrº  r¾   ÚLoadrÌ   ÚBinOpÚopro   ró   ÚhasattrrÇ   Úsetattrr¯   )rŒ   re   ÚlhsÚrhsÚassignr  Úys          r.   rÛ   ÚCodeGenerator.visit_AugAssign¼  sŸ   € Ü�mŠm˜DŸK™KÓ(ˆÜ—(’(“*ˆŒÜ�iŠi˜ŸW™W d§j¡jÓ1ˆÜ—’ T§[¡[ M¸Ñ=ˆÛIˆAÜ�t×ÓÜ˜DÓ$�Ü˜ Ô"Ü˜ 1Ö%ñ	 Jð
 	�
‰
�6ÔØ�z‰z˜#‹Ðr0   c                 óœ   • [        UR                  5      [        R                  L a  UR                  $ U R                  UR                  5      $ rL   )r,   rÌ   r¾   rÍ   rÆ   rP  rÒ   s     r.   rÎ   ÚCodeGenerator.visit_NameÉ  s4   € Ü�—‘‹>œSŸY™YÒ&Ø—7‘7ˆNØ×$Ñ$ T§W¡WÓ-Ð-r0   c                 óB   • [         R                  R                  X5        g rL   r«  rÒ   s     r.   Úvisit_StoreÚCodeGenerator.visit_StoreÎ  r®  r0   c                 óB   • [         R                  R                  X5        g rL   r«  rÒ   s     r.   Ú
visit_LoadÚCodeGenerator.visit_LoadÑ  r®  r0   c                 óŒ   • UR                    Vs/ s H  o R                  U5      PM     nn[        R                  " U5      $ s  snf rL   )r°  r¯   r   r   )rŒ   re   r  rg   s       r.   Úvisit_TupleÚCodeGenerator.visit_TupleÔ  s4   € Ø'+§y¢yÓ1¢y !—
‘
˜1–¡yˆÐ1Ü�~Š~˜dÓ#Ð#ùò 2s   �Ac                 óì  • [        U5      (       a  [        X25      " X@R                  S9$ [        U5      (       a1  [        R                  " SSU5      n[        XE5      " X0R                  S9$ [        U[        [        R                  45      (       d   [        U[        5      (       a  [        U5      n[        U[        5      (       a  [        X25      nOU R                  X25      nU R                  XU/0 5      $ )N©Ú	_semanticz__(.*)__z__r\1__)rQ   rÇ   r@  r)   ÚsubrM   r   r   r   Úget_AttributeÚcall_Function)rŒ   re   Úmethod_namer  r  Úreverse_method_namerf   s          r.   Ú_apply_binary_methodÚ"CodeGenerator._apply_binary_methodØ  s½   € ä˜S×!Ñ!Ü˜3Ô,¨S¿M¹MÑJÐJÜ˜S×!Ñ!Ü"$§&¢&¨°jÀ+Ó"NÐÜ˜3Ô4°SÇMÁMÑRÐRÜ˜#¤	¬8¯>©>Ð:×;Ñ;Ä
È3ÔPY×@ZÑ@ZÜ˜C“.ˆCÜ�cœ9×%Ñ%Ü˜Ó*‰Bà×#Ñ# CÓ5ˆBØ×!Ñ! $¨S¨E°2Ó6Ð6r0   c                 ó^  • U R                  UR                  5      nU R                  UR                  5      nU R                  R	                  [        UR                  5      5      nUc5  U R                  USR                  UR                  R                  5      5      eU R                  XX#5      $ )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_BinOpÚCodeGenerator.visit_BinOpç  s�   € Ø�j‰j˜Ÿ™Ó#ˆØ�j‰j˜Ÿ™Ó$ˆØ×2Ñ2×6Ñ6´t¸D¿G¹G³}ÓEˆØÑØ×#Ñ# DØ$^×$eÑ$eÐfj×fmÑfm×fvÑfvÓ$wóyð yà×(Ñ(¨¸CÓEÐEr0   Ú__add__Ú__sub__Ú__mul__Ú__truediv__Ú__floordiv__Ú__mod__Ú__pow__Ú
__lshift__Ú
__rshift__Ú__and__Ú__or__Ú__xor__r3  c                 ót  • U R                   R                  U5        U R                  UR                  5        U R                   R	                  5       nU R
                  R                  5       nU R                  R                  5       n0 nUR                  5       nUR                  (       a   U R                   R                  U5        UR                  5       U l        0 U l        U R                  UR                  5        U R
                  R                  5       nU R                   R	                  5       nU R                  R                  5       n/ n	UR                  5        H¹  u  p«[        U5      (       d  M  [        Xj   /5      n[        XŠ   /5      nXÍ:X  a  M:  U	R                  U
5        Xj   XZ'   XŠ   Xz'   US4US44 HV  u  pï[        Xê   5      [        U5      :H  nU(       a  Xê   R                  UR                  :X  a  MC   SU
 SU SU SXê    35       e   M»     [        UR                  5       UR                  5       -  5       Hp  n
X©;   a  M
  XZ   nUR                  nXz   nUR                  n[        U5      [        U5      :H  nU(       a  UU:X  d   SU
 SU S	U S
35       eU	R                  U
5        Mr     XWX4U	4$ )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”  r–  r¶   r•   r’   r›  r�   ræ   r„   rO   rx   r•  r,   r=   Úkeys)rŒ   re   r‘   Ú
then_blockÚ
else_blockÚ	then_defsÚ	then_valsÚ	else_defsÚ	else_valsrŸ  r+   ro   Úthen_handlesÚelse_handlesÚdefsÚ
block_nameÚ
type_equalÚthen_valÚthen_tyÚelse_valÚelse_tys                        r.   Úvisit_then_else_blocksÚ$CodeGenerator.visit_then_else_blocksÿ  s|  € à�‰×1Ñ1°*Ô=Ø×%Ñ% d§i¡iÔ0Ø—\‘\×5Ñ5Ó7ˆ
Ø—O‘O×(Ñ(Ó*ˆ	Ø—K‘K×$Ñ$Ó&ˆ	àˆ	Ø—L‘L“Nˆ	Ø�;�;Ø�L‰L×5Ñ5°jÔAØ!Ÿ,™,›.ˆDŒKØ ˆDŒOØ×)Ñ)¨$¯+©+Ô6ØŸ™×,Ñ,Ó.ˆIØŸ™×9Ñ9Ó;ˆJØŸ™×(Ñ(Ó*ˆIð ˆà"Ÿ=™=ž?‰KˆDä# E×*Ñ*ÙÜ/°±Ð0AÓBˆLÜ/°±Ð0AÓBˆLØÓ+ÙØ�L‰L˜ÔØ'™oˆI‰OØ'™oˆI‰Oà&/°Ð%8¸9ÀfÐ:MÓ$NÑ �Ü! $¡*Ó-´°e³Ñ<�
Þ! d¡j§o¡o¸¿¹Õ&Cð OØ)¨$¨¨}¸U¸Gð DØ)˜lÐ*AÀ$Á*ÀðOóOÐCó %Oñ +ô( ˜9Ÿ>™>Ó+¨i¯n©nÓ.>Ñ>Ö?ˆDØ‹}ÙØ ‘ˆHØ—m‘mˆGØ ‘ˆHØ—m‘mˆGÜ˜h›¬4°«>Ñ9ˆJÞ '¨WÓ"4ð .Ø& t fÐ,AÀ'Àð K#Ø#* )¨1ð.ó.Ð4ð �L‰L˜Öñ @ð  Z¸UÐBÐBr0   c                 ób  ^^• [        U 5       nUu  pEU R                  R                  5       nU R                  R                  5       nU R                  R                  U5        U R                  R	                  UR
                  Xg5        U R                  X$Xg5      u  mmpgnU R                  R                  5       n	U R                  R                  U5        UR                  5       (       a   U 5       e[        U4S jU 5       5      n
U R                  R                  Xš5        U R                  R                  U5        UR                  5       (       a   U 5       e[        U4S jU 5       5      nU R                  R                  X›5        [        U
5      [        U5      :X  d   e[        X«5       H;  u  pÍUR                  5       nXíR                  5       :X  d   eU	R                  U5        M=     S S S 5        U R                  R                  W	5        [        [        W
5      5       Vs/ s H  oùR!                  U5      PM     nnW Vs/ s H  nTU   R"                  PM     nn[%        UU5      n[        UU5       H  u  nnU R'                  UU5        M     g ! , (       d  f       N¯= fs  snf s  snf )Nc              3   ó.   >#   • U  H
  nTU   v •  M     g 7frL   r¤   ©r°   r+   rJ  s     €r.   r²   Ú3CodeGenerator.visit_if_top_level.<locals>.<genexpr>H  ó   øé € Ð/RÊEÀD°	¸$¶ÊEùó   ƒc              3   ó.   >#   • U  H
  nTU   v •  M     g 7frL   r¤   ©r°   r+   rL  s     €r.   r²   r\  M  r]  r^  )rˆ   r”   r“  rÉ  Úcreate_cond_branchr‚  rW  rÜ  rx   Úcreate_branchr|   rÛ  Úget_typeÚadd_argumentr”  r   ri   r,   r~   r†  )rŒ   Úcondre   Úsrr‘   Úip_blockrH  rI  rŸ  Úendif_blockrN  rO  Úthen_hÚelse_hrC   rE   Úres_handlesr+   rr   Ú
new_valuesÚ	new_valuerL  rJ  s                        @@r.   Úvisit_if_top_levelÚ CodeGenerator.visit_if_top_level8  s-  ù€ Ü˜dÔ# rØ "ÑˆGØŸ™×2Ñ2Ó4ˆJØŸ™×2Ñ2Ó4ˆJà�L‰L×3Ñ3°HÔ=Ø�L‰L×+Ñ+¨D¯K©K¸ÔPð ×+Ñ+¨D¸:ÓRñ @ˆI�y *¸%ð Ÿ,™,×3Ñ3Ó5ˆKà�L‰L×3Ñ3°JÔ?Ø!×0Ñ0×2Ñ2ÐC°z°lÓCÐ2Ü/Ô/RÉEÓ/RÓRˆLØ�L‰L×&Ñ& {ÔAà�L‰L×3Ñ3°JÔ?Ø!×0Ñ0×2Ñ2ÐC°z°lÓCÐ2Ü/Ô/RÉEÓ/RÓRˆLØ�L‰L×&Ñ& {ÔAÜ�|Ó$¬¨LÓ(9Ó9Ð9Ð9Ü"% lÖ"A‘�Ø—_‘_Ó&�ØŸ_™_Ó.Ó.Ð.Ð.Ø×(Ñ(¨Ö,ñ #B÷/ $ð: 	�‰×1Ñ1°+Ô>ä38¼¸\Ó9JÔ3KÓLÒ3K¨a—‘ qÖ)Ñ3KˆÐLÙ27Ó8²%¨$�˜4‘×%Ô%±%ˆÐ8Ü(¨°eÓ<ˆ
Ü" 5¨*Ö5‰OˆD�)Ø�N‰N˜4 Ö+ò  6÷E $Õ#üò> MùÚ8s   ŽGJÈ&J'ÉJ,Ê
J$c                 ó  ^^• [        U 5       nUu  pEU R                  5       u  pgU R                  R                  5       nUR                  (       a  U R                  R                  5       OS n	U R                  X$X‰5      u  mmp‰n
[        U4S jU
 5       5      n[        X«5       H  u  pÍU R                  XÜ5        M     U R                  Xg5        U R                  R                  U Vs/ s H  oîR                  5       PM     snUR                  S5      nUR                  UR                  5       5        U R                  R                  UR                  5       5        [!        U
5      S:”  a  U R                  R#                  U5        UR                  (       d  UR%                  5       n	OU	R                  UR%                  5       5        U R                  R                  UR%                  5       5        [!        U
5      S:”  aV  [        U4S jU
 5       5      n[        U
U5       H  u  pÍU R                  XÜ5        M     U R                  R#                  U5        S S S 5        ['        [!        W5      5       Vs/ s H  nWR)                  U5      PM     nnW
 Vs/ s H  nTU   R*                  PM     nn[-        UU5      n[        U
U5       H  u  nnU R/                  UU5        M     g s  snf ! , (       d  f       Nš= fs  snf s  snf )Nc              3   ó.   >#   • U  H
  nTU   v •  M     g 7frL   r¤   r[  s     €r.   r²   Ú-CodeGenerator.visit_if_scf.<locals>.<genexpr>h  r]  r^  Tr   c              3   ó.   >#   • U  H
  nTU   v •  M     g 7frL   r¤   r`  s     €r.   r²   rr  w  s   øé € Ð3VÒPUÈ°I¸d¶OÒPUùr^  )rˆ   r‹  r”   r“  ræ   rW  rx   rÛ  rƒ  rŽ  Úcreate_if_oprc  r‚  Úmerge_block_beforeÚget_then_blockrÉ  r|   Úcreate_yield_opÚget_else_blockr   Ú
get_resultr,   r~   r†  )rŒ   re  re   rf  r‘   r2   rŠ  Úlast_locrH  rI  rŸ  rN  r+   r€   ÚhÚif_oprO  rE   rk  rr   rl  rm  rL  rJ  s                         @@r.   Úvisit_if_scfÚCodeGenerator.visit_if_scf_  s[  ù€ Ü˜dÔ# rØ‰JˆGØ×<Ñ<Ó>‰LˆBØŸ™×2Ñ2Ó4ˆJØ8<¿¿˜Ÿ™×2Ñ2Ô4ÈˆJà×+Ñ+¨D¸:ÓRñ @ˆI�y *¸%ô 0Ô/RÉEÓ/RÓRˆLÜ  Ö5‘	�Ø×+Ñ+¨CÖ6ñ 6à×-Ñ-¨bÔ;Ø—L‘L×-Ñ-Á\Ó.RÂ\À¯z©z®|Á\Ñ.RÐTX×T_ÑT_ÐaeÓfˆEØ×)Ñ)¨%×*>Ñ*>Ó*@ÔAØ�L‰L×3Ñ3°E×4HÑ4HÓ4JÔKÜ�5‹z˜A‹~Ø—‘×,Ñ,¨\Ô:Ø—;—;Ø"×1Ñ1Ó3‘
à×-Ñ-¨e×.BÑ.BÓ.DÔEØ�L‰L×3Ñ3°E×4HÑ4HÓ4JÔKÜ�5‹z˜A‹~Ü3Ô3VÑPUÓ3VÓV�Ü!$ U¨LÖ!9‘I�DØ×/Ñ/°Ö:ñ ":à—‘×,Ñ,¨\Ô:÷5 $ô8 5:¼#¸lÓ:KÔ4LÓMÒ4L¨q�u×'Ñ'¨Ö*Ñ4LˆÐMÙ27Ó8²%¨$�˜4‘×%Ô%±%ˆÐ8Ü(¨°eÓ<ˆ
Ü" 5¨*Ö5‰OˆD�)Ø�N‰N˜4 Ö+ò  6ùò' /S÷ $Õ#üò8 NùÚ8s+   ŽCK(Ã'K#
Ä EK(É2K9ÊK>Ë#K(Ë(
K6c           	      ó  • U R                  UR                  5      n[        U5      (       Ga8  [        U5      (       a  U R	                  US5      eUR
                  R                  5       (       a_  [        R                  " S[        R                  " UR                  5      -  5        [        R                  R                  X R                  U S9nUR                  [        R                   U R                  S9n[#        U R$                  5      R                  U5      (       a5  U R&                  (       a  U R	                  US5      eU R)                  X!5        g U R+                  X!5        g [-        U5      n[        U5      [.        ;  aO  U R	                  USR1                  SR3                  S [.         5       5      [        U5      R4                  5      5      eU(       a  UR6                  OUR8                  nU R;                  U5        g )	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'  zMCannot have `return` statements inside `while` or `for` statements in triton.úO`if` conditionals can only accept values of type {{{}}}, not objects of type {}ú, c              3   ó8   #   • U  H  oR                   v •  M     g 7frL   ©rc   ©r°   r2   s     r.   r²   Ú)CodeGenerator.visit_If.<locals>.<genexpr>›  ó   é € Ð!GÒ6F°§*¦*Ò6Fùó   ‚)r¯   ÚtestrQ   rZ   r[  r,   rX   ÚwarningsÚwarnr¾   Úunparser   rS   Ú_unsplatr@  ÚtoÚint1r¦   rª   rM  rn  r}  r   Ú_condition_typesr4  r;   rc   r¶   ræ   r–  )rŒ   re   re  Úactive_blocks       r.   rç   ÚCodeGenerator.visit_If‚  s†  € Ø�z‰z˜$Ÿ)™)Ó$ˆä˜T×"Ò"Ü$ T×*Ñ*Ø×'Ñ'¨Ð.mÓnÐnØ�y‰y×!Ñ!×#Ñ#Ü—’ð BÜ—k’k $§)¡)Ó,ñ-ô.ô  —}‘}×-Ñ-¨d¿m¹mÐX\Ð-Ð]�Ø—7‘7œ8Ÿ=™=°D·M±M�7ÐBˆDÜ$ T§[¡[Ó1×7Ñ7¸×=Ñ=Ø—>—>Ø×+Ñ+ØÐmóoð oà×'Ñ'¨Õ3à×!Ñ! $Õ-ä'¨Ó-ˆDä�D‹zÔ!1Ó1Ø×'Ñ'ØÐk×rÑrØŸ	™	Ñ!GÕ6FÓ!GÓGÜ˜T›
×+Ñ+ó-ó.ð .ö
 )-˜4Ÿ9š9°$·+±+ˆLØ×)Ñ)¨,Õ7r0   c           	      óp  • U R                  UR                  5      n[        U5      (       GaP  UR                  [        R
                  U R                  S9n[        U 5         U R                  5       u  p4U R                  R                  5       nU R                  R                  U5        U R                  R                  U R                  UR                  5      5      nU R                  R                  5       nU R                  R                  5       nU R                  R                  U5        U R                  R                  U R                  UR                  5      5      nU R                  R                  5       nU R!                  X45        UR"                  UR"                  :X  d!   SUR"                   SUR"                   35       eUR"                  n	U	[        R$                  :w  a  U	R'                  U R                  5      /O/ n
U R                  R)                  X¢R*                  S5      nUR-                  UR/                  5       5        U
(       aO  U R                  R1                  UR/                  5       5        U R                  R3                  UR*                  /5        U R                  R1                  UR/                  5       5        UR-                  UR5                  5       5        U
(       aO  U R                  R1                  UR5                  5       5        U R                  R3                  UR*                  /5        U
(       a/  [        R6                  R9                  UR;                  S5      U	5      OS sS S S 5        $ [=        U5      n[#        U5      [>        ;  aO  U RA                  USRC                  SRE                  S [>         5       5      [#        U5      RF                  5      5      eU(       a  U R                  UR                  5      $ U R                  UR                  5      $ ! , (       d  f       g = f)	Nr'  zATernary expression with dynamic condition has inconsistent types rÆ  Tr   r�  r‚  c              3   ó8   #   • U  H  oR                   v •  M     g 7frL   r„  r…  s     r.   r²   Ú,CodeGenerator.visit_IfExp.<locals>.<genexpr>Ï  r‡  rˆ  )$r¯   r‰  rQ   rŽ  r   r�  r@  rˆ   r‹  r”   r“  r”  rÃ  r¶   r•   ræ   rŽ  r,   rÇ  Úto_irrt  r‚  ru  rv  rÉ  rw  rx  rS   r   ry  r   r�  r[  r4  r;   rc   )rŒ   re   re  rŠ  rz  rH  rS  rI  rU  rN  Úret_type_irr|  s               r.   rê   ÚCodeGenerator.visit_IfExp¡  s  € Ø�z‰z˜$Ÿ)™)Ó$ˆÜ˜T×"Ò"Ø—7‘7œ8Ÿ=™=°D·M±M�7ÐBˆDä! $Õ'Ø#×@Ñ@ÓB‘�à!Ÿ\™\×6Ñ6Ó8�
Ø—‘×9Ñ9¸*ÔEØŸ=™=×2Ñ2°4·:±:¸d¿i¹iÓ3HÓI�Ø!Ÿ\™\×=Ñ=Ó?�
à!Ÿ\™\×6Ñ6Ó8�
Ø—‘×9Ñ9¸*ÔEð  Ÿ=™=×2Ñ2°4·:±:¸d¿k¹kÓ3JÓK�Ø!Ÿ\™\×=Ñ=Ó?�
à×1Ñ1°"Ô?à—}‘}¨¯©Ó5ð |ØWÐX`×XeÑXeÐWfÐfkÐlt×lyÑlyÐkzÐ{ó|Ð5à#Ÿ=™=�à@HÌHÏMÉMÓ@Y˜xŸ~™~¨d¯l©lÓ;Ñ<Ð_a�ØŸ™×1Ñ1°+¿{¹{ÈDÓQ�Ø×-Ñ-¨e×.BÑ.BÓ.DÔEÞØ—L‘L×;Ñ;¸E×<PÑ<PÓ<RÔSØ—L‘L×0Ñ0°(·/±/Ð1BÔCà—‘×7Ñ7¸×8LÑ8LÓ8NÔOØ×-Ñ-¨e×.BÑ.BÓ.DÔEÞØ—L‘L×;Ñ;¸E×<PÑ<PÓ<RÔSØ—L‘L×0Ñ0°(·/±/Ð1BÔCÞNY”x—}‘}×+Ñ+¨E×,<Ñ,<¸QÓ,?ÀÔJÐ_c÷C (Ñ'ôF (¨Ó-ˆDô �D‹zÔ!1Ó1Ø×'Ñ'ØÐk×rÑrØŸ	™	Ñ!GÕ6FÓ!GÓGÜ˜T›
×+Ñ+ó-ó.ð .ö Ø—z‘z $§)¡)Ó,Ð,à—z‘z $§+¡+Ó.Ð.÷] (Õ'ús   Á LP'Ð'
P5c                 ó.  ^ • / nUR                    H™  nUR                  nT R                  UR                  5      nUR                   Vs/ s H  nT R                  U5      PM     nn[        U 4S jUR                   5       5      nU" UST R                  0UD6n	UR                  U	5        M›     [        X!R                   5       HP  u  p“U	R                  5       n
UR                  c  M$  T R                  UR                  5      nT R                  Xº5        MR     [        T R                  5      R                  U5      (       a  T R                  US5      eT R!                  UR"                  5        [%        U5       H  n	U	R'                  S S S 5        M     g s  snf )Nc              3   óF   >#   • U  H  nTR                  U5      v •  M     g 7frL   r®   )r°   ÚkwrŒ   s     €r.   r²   Ú+CodeGenerator.visit_With.<locals>.<genexpr>Þ  s   øé € Ð>²¨"�t—z‘z "—~�~²ùr´   r(  zCCannot have `return` statements inside `with` statements in triton )r„   Úcontext_exprr¯   rí   rg   ÚdictÚkeywordsr@  r•  rÛ  r™   Úoptional_varsr†  r¦   rª   r[  r–  r¶   Úreversedrž   )rŒ   re   Úcm_listrÁ   Úcallrf   ri   rg   ÚkwsÚcmÚresÚvar_names   `           r.   Ú
visit_WithÚCodeGenerator.visit_WithÖ  sA  ø€ ð ˆØ—J”JˆDØ×$Ñ$ˆDØ—‘˜DŸI™IÓ&ˆBØ/3¯yªyÓ9ªy¨�D—J‘J˜s–O©yˆDÐ9ÜÔ>°·²Ó>Ó>ˆCÙ�TÐ: T§]¡]Ð:°cÑ:ˆBØ�N‰N˜2Öñ ô ˜G§Z¡ZÖ0‰HˆBØ—,‘,“.ˆCØ×!Ñ!Ó-ØŸ:™: d×&8Ñ&8Ó9�Ø—‘˜xÖ-ñ	 1ô
 ! §¡Ó-×3Ñ3°D×9Ñ9Ø×#Ñ# DÐ*oÓpÐpØ×%Ñ% d§i¡iÔ0Ü˜7Ö#ˆBØ�K‰K˜˜d DÖ)ò $ùò :s   ÁFc                 ó   • g rL   r¤   rÒ   s     r.   Ú
visit_PassÚCodeGenerator.visit_Passì  s   € Ør0   c                 óø  • [        UR                  5      S:X  a  [        UR                  5      S:X  d  U R                  US5      eU R	                  UR
                  5      nU R	                  UR                  S   5      n[        U5      n[        U5      n[        UR                  S   5      [        R                  L a  [        XEL 5      $ [        UR                  S   5      [        R                  L a  [        XEL5      $ U R                  R                  [        UR                  S   5      5      nUc8  U R                  USR                  UR                  S   R                  5      5      eU R!                  XX#5      $ )Nr$   z1simultaneous multiple comparison is not supportedr   z<AST comparison operator '{}' is not (currently) implemented.)r|   ÚcomparatorsÚopsr[  r¯   r1  r   r,   r¾   ÚIsr   ÚIsNotÚ_method_name_for_comp_opr"  r4  rc   r.  )rŒ   re   r  r  Ú	lhs_valueÚ	rhs_valuer,  s          r.   Úvisit_CompareÚCodeGenerator.visit_Compareï  s:  € Ü�D×$Ñ$Ó%¨Ó*¬s°4·8±8«}ÀÓ/AØ×#Ñ# DÐ*]Ó^Ð^Ø�j‰j˜Ÿ™Ó#ˆØ�j‰j˜×)Ñ)¨!Ñ,Ó-ˆÜ(¨Ó-ˆ	Ü(¨Ó-ˆ	Ü�—‘˜‘Ó¤§¡Ò&Ü˜YÐ3Ó4Ð4Ü�—‘˜‘Ó¤§	¡	Ò)Ü˜YÐ7Ó8Ð8Ø×3Ñ3×7Ñ7¼¸T¿X¹XÀa¹[Ó8IÓJˆØÑØ×#Ñ#ØÐT×[Ñ[Ð\`×\dÑ\dÐefÑ\g×\pÑ\pÓqósð sà×(Ñ(¨¸CÓEÐEr0   Ú__eq__Ú__ne__Ú__lt__Ú__le__Ú__gt__Ú__ge__r²  c           
      ó  • U R                  UR                  5      nU R                  R                  [	        UR
                  5      5      nUc*  U R                  USUR
                  R                   S35      e[        U5      (       a  [        X#5      " U R                  S9$  [        X#5      " 5       $ ! [         aD    US:X  a  [        U(       + 5      s $ U R                  USU S[	        U5      R                   35      ef = f)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   rQ   rÇ   r@  ÚAttributeErrorr   )rŒ   re   r¿  rf   s       r.   Úvisit_UnaryOpÚCodeGenerator.visit_UnaryOp  sï   € Ø—*‘*˜TŸ\™\Ó*ˆØ×+Ñ+×/Ñ/´°T·W±W³Ó>ˆØ‰:Ø×#Ñ# DÐ,@ÀÇÁ×AQÑAQÐ@RÐRsÐ*tÓuÐuÜ˜W×%Ñ%Ü˜7Ô'°$·-±-Ñ@Ð@ð	tÜ˜7Ô'Ó)Ð)øÜó 	tØ�Y‹Ü  W¤Ó-Ò-Ø×#Ñ#ØÐ,¨R¨DÐ0YÔZ^Ð_fÓZg×ZpÑZpÐYqÐrótð tð	tús   Â!B1 Â1 C?Ã,C?Ú__neg__Ú__pos__r¾  Ú
__invert__rÀ  c           	      ó‚  • [        U5      (       d   SU S35       e[        U5      (       d   SU S35       e[        U5      [        U5      L d"   SU S[        U5       S[        U5       35       e[        U5      (       a@  UR                  UR                  :X  d%   SU SUR                   SUR                   S	35       eg g )
Nzcannot reassign constexpr z in the loopr’  z changed type, was z but is now zLoop-carried variable z has initial type z but is re-assigned to z: in loop! Please make sure that the type stays consistent.)rO   r,   rQ   )rŒ   r+   r¡  r   s       r.   r™  Ú+CodeGenerator._verify_loop_carried_variable  sà   € Ü ×)Ñ)ÐZÐ-GÈÀvÈ\Ð+ZÓZÐ)Ü ×)Ñ)ÐZÐ-GÈÀvÈ\Ð+ZÓZÐ)Ü�H‹~¤ h£Ò/ð 	lØ$ T FÐ*=¼dÀ8»nÐ=MÈ\ÔZ^Ð_gÓZhÐYiÐjó	lÐ/ä$ X×.Ñ.°(·-±-À8Ç=Á=Ó2Pð 	@Ø$ T FÐ*<¸X¿]¹]¸Oð L%Ø%-§]¡] Oð 4?ð@ó	@ÐPÐ2PÐ.r0   c                 óD  ^ • [        T 5       nUu  p4T R                  5       u  pVT R                  X5      u  pxn	U V
s/ s H  oªR                  5       PM     nn
T R	                  XV5        T R
                  R                  X¸5      nT R
                  R                  UR                  5       U5      nT R
                  R                  U5        [        [        U5      5       Vs/ s H  oíR                  U5      PM     nn[        Xù5      n[        UU5       H6  u  nnUT R                  U'   UT R                   U'   T R#                  UU5        M8     T R%                  UR&                  5      n[)        U[*        R,                  5      (       aG  UR.                  (       a*  UR1                  ST R
                  R3                  5       5        UR,                  nT R
                  R5                  U5        T R
                  R7                  UR8                  U5        T R
                  R                  UR;                  5       U5      nT R
                  R                  U5        [        [        U5      5       Vs/ s H  nUR                  U5      PM     nn[        UU	5      n[        UU5       H6  u  nnUT R                  U'   UT R                   U'   T R#                  UU5        M8     T R<                  R?                  U5        T RA                  URB                  5        T R<                  RE                  5         [G        U 4S jU 5       5      nT R
                  RI                  U5        S S S 5        [        [        W5      5       Vs/ s H  nWRK                  U5      PM     nn[        UW	5      n[        WU5       H6  u  nnUT R                  U'   UT R                   U'   T R#                  UU5        M8     URL                   H  n S5       e   g s  sn
f s  snf s  snf ! , (       d  f       N»= fs  snf )Núllvm.loop_annotationc              3   óB   >#   • U  H  nTR                   U   v •  M     g 7frL   ©r�   ©r°   r+   rŒ   s     €r.   r²   Ú,CodeGenerator.visit_While.<locals>.<genexpr>K  ó   øé € Ð0UÊuÀt°·±¸TÖ1BÊuùó   ƒzNot implemented)*rˆ   r‹  r¤  rc  rŽ  r”   Úcreate_while_opÚcreate_block_with_parentÚ
get_beforer”  r   r|   ri   r~   rÛ  r�   r’   rƒ  r¯   r‰  rM   r   Ú	conditionÚdisable_licmÚset_attrÚget_disable_loop_licm_attrrÉ  Úcreate_condition_opr‚  Ú	get_afterrM  r•  r–  r¶   r—  rx   rw  ry  ræ   r¾   r¬  rÂ   )rŒ   re   rf  r‘   r–   rŠ  rz  rŸ  rž  Úinit_fe_tysr{  r�  Úwhile_opÚbefore_blockrE   Ú
block_argsÚcondition_argsr+   r€   re  Úafter_blockÚbody_handlesÚ	body_argsÚyield_handlesÚresult_handlesÚresult_valsÚnew_defr¨  s   `                           r.   Úvisit_WhileÚCodeGenerator.visit_While!  s[  ø€ Ü˜dÔ# rØ$&Ñ!ˆGØ×<Ñ<Ó>‰LˆBà/3×/AÑ/AÀ$Ó/PÑ,ˆE á.:Ó;ªl¨Ÿ
™
ž©lˆHÐ;Ø×-Ñ-¨bÔ;Ø—|‘|×3Ñ3°HÓKˆHàŸ<™<×@Ñ@À×ATÑATÓAVÐX`ÓaˆLØ�L‰L×5Ñ5°lÔCÜ7<¼SÀÓ=NÔ7OÓPÒ7O°!×*Ñ*¨1Ö-Ñ7OˆJÐPÜ0°ÓIˆNÜ  ¨Ö7‘	��cØ$'�—‘˜DÑ!Ø(+�—‘ Ñ%Ø×+Ñ+¨C°Ö6ñ 8ð —:‘:˜dŸi™iÓ(ˆDÜ˜$¤× 2Ñ 2×3Ñ3Ø×$×$Ø×%Ñ%Ð&<¸d¿l¹l×>eÑ>eÓ>gÔhØ—~‘~�Ø�L‰L×3Ñ3°LÔAà�L‰L×,Ñ,¨T¯[©[¸*ÔEàŸ,™,×?Ñ?À×@RÑ@RÓ@TÐV^Ó_ˆKð �L‰L×5Ñ5°kÔBÜ8=¼cÀ,Ó>OÔ8PÓQÒ8P°1˜KŸO™O¨AÖ.Ñ8PˆLÐQÜ+¨L¸+ÓFˆIÜ  ¨	Ö2‘	��cØ$'�—‘˜DÑ!Ø(+�—‘ Ñ%Ø×+Ñ+¨C°Ö6ñ 3ð �N‰N×!Ñ! $Ô'Ø×)Ñ)¨$¯)©)Ô4Ø�N‰N×ÑÔ ä0Ô0UÉuÓ0UÓUˆMØ�L‰L×(Ñ(¨Ô7÷U $ôZ ;@ÄÀLÓ@QÔ:RÓSÒ:R°Q˜(×-Ñ-¨aÖ0Ñ:RˆÐSÜ)¨.¸+ÓFˆÜ  ¨Ö4‰MˆD�'Ø 'ˆD�K‰K˜ÑØ$+ˆD�O‰O˜DÑ!Ø×'Ñ'¨°Ö6ñ 5ð
 —K”KˆDØ+Ð+Ó+�5ò  ùò] <ùò Qùò& R÷? $Õ#üòZ Ts=   �/P¼O=ÁB	PÃPÃ8E0PÉ(PÊCPÍ5PÏ=PÐ
Pc                 ó(  • [        UR                  [        R                  5      (       d   eU R	                  UR
                  5      nU R	                  UR                  5      n[        U5      (       a  U R                  XR                  X#/0 5      $ X#   $ rL   )
rM   rÌ   r¾   r  r¯   ro   ÚslicerO   Úcall_MethodÚ__getitem__)rŒ   re   r  Úslicess       r.   Úvisit_Subscript_LoadÚ"CodeGenerator.visit_Subscript_LoadZ  so   € Ü˜$Ÿ(™(¤C§H¡H×-Ñ-Ð-Ð-Ø�j‰j˜Ÿ™Ó$ˆØ—‘˜DŸJ™JÓ'ˆÜ˜C× Ñ Ø×#Ñ# D¯/©/¸3ÀÈ"ÓMÐMØ‰{Ðr0   c                 ó   • [        S5      e)Nz&__setitem__ is not supported in triton)r¹  )rŒ   re   ro   s      r.   r  Ú#CodeGenerator.visit_Subscript_Storeb  s   € Ü!Ð"JÓKÐKr0   c                 ó$   • U R                  U5      $ rL   )rí  rÒ   s     r.   Úvisit_SubscriptÚCodeGenerator.visit_Subscripte  s   € Ø×(Ñ(¨Ó.Ð.r0   c                 ób   • UR                    Vs/ s H  o R                  U5      PM     sn$ s  snf rL   )Údimsr¯   )rŒ   re   Údims      r.   Úvisit_ExtSliceÚCodeGenerator.visit_ExtSliceh  s$   € Ø+/¯9ª9Ó5ª9 C—
‘
˜3–©9Ñ5Ð5ùÒ5s   �,c           	      ó&  ^ • T R                  UR                  R                  5      nUR                  R                   Vs/ s H  nT R                  U5      PM     nn[	        U 4S jUR                  R
                   5       5      nU[        R                  :X  aÕ  U" U0 UD6n[        UR                  R                  UR                  R                  UR                  R                  5      nU H}  n[        U5      T R                  UR                  R                   '   T R#                  UR$                  5        UR&                   H#  n	[(        R*                  R-                  T U	5        M%     M     g S n
S nSnSnSnSnU[        R                  L au  U" U0 UD6nUR                  nUR                  nUR                  nUR.                  n
UR0                  nUR2                  nUR4                  nUR6                  nUR8                  nOÃU[        L a¯  [;        U5      S:”  a  US   O$T R                  [(        R<                  " S5      5      n[;        U5      S:”  a  US   O'T R                  UR                  R                  S   5      n[;        U5      S:”  a  US   O$T R                  [(        R<                  " S5      5      nO[?        S5      eSn[A        U5      (       a,  UR                  S:  a  [        UR                  * 5      nSnUUnnT RB                  RE                  U5      nT RB                  RE                  U5      nT RB                  RE                  U5      nURF                  RI                  5       (       a>  URF                  RI                  5       (       a  URF                  RI                  5       (       d3  [K        SURF                   S	URF                   S	URF                   S
35      e[M        U5      (       a  [K        SURN                   35      e[M        U5      (       a  [K        SURN                   35      e[M        U5      (       a  [K        SURN                   35      eT RB                  RQ                  URF                  URF                  5      nT RB                  RQ                  UURF                  5      nURS                  T RT                  5      nURV                  [        RX                  RF                  RZ                  R\                  :H  nUR^                  nUR^                  nUR^                  nT RT                  Ra                  UUU5      nT RT                  Ra                  UUU5      nT RT                  Ra                  UUU5      nT RT                  Rc                  U5      nT Re                  UR                  R                   [        RX                  Rg                  UU5      5        [i        T 5       nUu  nnT Rk                  5       u  nnT Rm                  UUUR                  R                   1S9u  nnnT Ro                  UU5        T RT                  Rq                  UUUU5      n [s        U
5      b+  U Ru                  ST RT                  Rw                  U
5      5        [s        U5      b+  U Ru                  ST RT                  Rw                  U5      5        U(       a*  U Ru                  ST RT                  Ry                  5       5        U(       a*  U Ru                  ST RT                  Ry                  5       5        U(       a*  U Ru                  ST RT                  Ry                  5       5        U(       a*  U Ru                  ST RT                  R{                  5       5        T R|                  R                  U5        U R�                  S5      n!T RT                  Rƒ                  U!5        [        [;        U5      5       Vs/ s H  nU!R…                  US-   5      PM     n"n[‡        U"U5      n#[‰        UU#5       H*  u  n$n%T R‹                  U%U$5        T Re                  U$U%5        M,     T R#                  UR$                  5        T R|                  R�                  5         [�        U 4S jU 5       5      n&[;        U&5      S:”  a  T RT                  R‘                  U&5        U!R“                  5       n'U'R•                  5       S:X  d   S5       eT RT                  Rƒ                  U!5        U R—                  5       n(U(       a8  T RT                  R™                  UU(5      n(T RT                  R›                  U(U5      n(UR�                  U(5        T Re                  UR                  R                   [        RX                  Rg                  U(U5      5        T R‹                  U(UR                  R                   5        S S S 5        [        [;        W5      5       Vs/ s H  nW RŸ                  U5      PM     n)n[‡        U)W5      n*[‰        WU*5       H*  u  n$n%T Re                  U$U%5        T R‹                  U%U$5        M,     UR&                   H  n	 S5       e   g s  snf s  snf ! , (       d  f       Nª= fs  snf )Nc              3   óF   >#   • U  H  nTR                  U5      v •  M     g 7frL   r®   ©r°   ÚkeywordrŒ   s     €r.   r²   Ú*CodeGenerator.visit_For.<locals>.<genexpr>n  s   øé € ÐQÒ>P°7˜4Ÿ:™: g×.Ð.Ò>Pùr´   Fr$   r   r   zAOnly `range` and `static_range` iterators are currently supportedTz0For loop bounds and step must all be ints, are (r‚  rF  z&For lower bound must be a scalar, got z&For upper bound must be a scalar, got zFor step must be a scalar, got )r�  ztt.num_stagesztt.loop_unroll_factorztt.disallow_acc_multi_bufferz
tt.flattenztt.warp_specializerÊ  c              3   óB   >#   • U  H  nTR                   U   v •  M     g 7frL   rÌ  rÍ  s     €r.   r²   rý  ×  rÏ  rÐ  z7We use SCF, so the loop body should only have one blockz)Don't know what to do with else after for)Pr¯   r·  rí   rg   rž  rŸ  r   Ústatic_ranger   Ústartro   ÚendÚstepr   r�   rº  rÆ   r–  r¶   ræ   r¾   r¬  rÂ   Ú
num_stagesÚloop_unroll_factorÚdisallow_acc_multi_bufferÚflattenÚwarp_specializerÕ  r|   ÚConstantÚRuntimeErrorrU   r@  rÃ  rT   Úis_intrÈ  rZ   r,   Úinteger_promote_implr–  r”   Úint_signednessrS   Ú
SIGNEDNESSÚSIGNEDr‚  Úcreate_int_castrÞ  r†  r   rˆ   r‹  r¤  rŽ  Úcreate_for_opr   rÖ  Úget_int32_attrÚget_unit_attrr×  rM  r•  Úget_bodyr”  ri   r~   rÛ  rƒ  r—  rx   rw  Ú
get_parentÚsizeÚget_induction_varÚ
create_subÚ
create_addÚreplace_all_uses_withry  )+rŒ   re   ÚIteratorClassri   Ú	iter_argsÚiter_kwargsÚiteratorrÿ  rE   r¨  r  r  r  r  r  rÕ  ÚlbÚubr  Únegative_stepÚiv_typeÚ
iv_ir_typeÚiv_is_signedÚiv_placeholderrf  r‘   r–   rŠ  rz  rŸ  rž  r�  Úfor_opÚfor_op_bodyÚblock_handlesrÝ  r+   r€   râ  Úfor_op_regionÚivrã  Úresult_valuess+   `                                          r.   Ú	visit_ForÚCodeGenerator.visit_Fork  s4  ø€ ØŸ
™
 4§9¡9§>¡>Ó2ˆØ04·	±	·²Ó?²¨�T—Z‘Z –_±ˆ	Ð?ÜÔQ¸d¿i¹i×>PÒ>PÓQÓQˆØœH×1Ñ1Ó1Ù$ iÐ?°;Ñ?ˆHÜ  §¡×!5Ñ!5°x·|±|×7IÑ7IÈ8Ï=É=×K^ÑK^Ó_ˆLÛ!�Ü.7¸«l�—‘˜DŸK™KŸN™NÑ+Ø×-Ñ-¨d¯i©iÔ8Ø ŸKœK�DÜ—O‘O×1Ñ1°$¸Ö=ó (ñ "ð
 Øˆ
Ø!ÐØ$)Ð!ØˆØˆØˆØœHŸN™NÒ*Ù$ iÐ?°;Ñ?ˆHð —‘ˆBØ—‘ˆBØ—=‘=ˆDØ!×,Ñ,ˆJØ!)×!<Ñ!<ÐØ(0×(JÑ(JÐ%Ø×&Ñ&ˆGØ&×6Ñ6ˆOØ#×0Ñ0‰LØœeÒ#ô "% Y£°!Ó!3�˜1’¸¿¹ÄCÇLÂLÐQRÃOÓ9TˆBÜ!$ Y£°!Ó!3�˜1’¸¿¹ÀDÇIÁIÇNÁNÐSTÑDUÓ9VˆBÜ#& y£>°AÓ#5�9˜Q’<¸4¿:¹:ÄcÇlÂlÐSTÃoÓ;V‰DäÐbÓcÐcàˆÜ˜×Ñ 4§:¡:°£>Ü˜dŸj™j˜[Ó)ˆDØ ˆMØ˜�ˆBØ�]‰]×$Ñ$ RÓ(ˆØ�]‰]×$Ñ$ RÓ(ˆØ�}‰}×&Ñ& tÓ,ˆà�x‰x�‰× Ñ ¨¯©¯©×(9Ñ(9ÀÇÁ×ARÑAR×ATÑATÜÐNÈrÏxÉxÈjÐXZÐ[]×[cÑ[cÐZdÐdfÐgk×gqÑgqÐfrÐrsÐtÓuÐuÜ  ×$Ñ$ÜÐDÀRÇWÁWÀIÐNÓOÐOÜ  ×$Ñ$ÜÐDÀRÇWÁWÀIÐNÓOÐOÜ  ×&Ñ&ÜÐ=¸d¿i¹i¸[ÐIÓJÐJØ—-‘-×4Ñ4°R·X±X¸r¿x¹xÓHˆØ—-‘-×4Ñ4°W¸d¿j¹jÓIˆØ—]‘] 4§<¡<Ó0ˆ
Ø×-Ñ-´·±×1DÑ1D×1OÑ1O×1VÑ1VÑVˆà�Y‰YˆØ�Y‰YˆØ�{‰{ˆà�\‰\×)Ñ)¨"¨j¸,ÓGˆØ�\‰\×)Ñ)¨"¨j¸,ÓGˆØ�|‰|×+Ñ+¨D°*¸lÓKˆàŸ™×3Ñ3°JÓ?ˆØ�‰�t—{‘{—~‘~¤x§}¡}×';Ñ';¸NÈGÓ'TÔUä˜dÔ# rØ$&Ñ!ˆG�\Ø×<Ñ<Ó>‰LˆB�à,0×,>Ñ,>¸tÀWÐVZ×VaÑVa×VdÑVdÐUeÐ,>Ð,fÑ)ˆE�< ð ×-Ñ-¨b°(Ô;Ø—\‘\×/Ñ/°°B¸¸lÓKˆFÜ# JÓ/Ñ;Ø—‘ °·±×1LÑ1LÈZÓ1XÔYÜ#Ð$6Ó7ÑCØ—‘Ð 7¸¿¹×9TÑ9TÐUgÓ9hÔiÞ(Ø—‘Ð >ÀÇÁ×@ZÑ@ZÓ@\Ô]ÞØ—‘ ¨d¯l©l×.HÑ.HÓ.JÔKÞØ—‘Ð 4°d·l±l×6PÑ6PÓ6RÔSÞØ—‘Ð 6¸¿¹×8_Ñ8_Ó8aÔbà�N‰N×!Ñ! $Ô'Ø Ÿ/™/¨!Ó,ˆKØ�L‰L×5Ñ5°kÔBÜ=BÄ3À|ÓCTÔ=UÓVÒ=U¸˜[Ÿ_™_¨Q°©UÖ3Ñ=UˆMÐVÜ,¨]¸HÓEˆJÜ  ¨
Ö3‘	��cØ×+Ñ+¨C°Ô6Ø—‘˜t SÖ)ñ 4ð ×)Ñ)¨$¯)©)Ô4Ø�N‰N×ÑÔ Ü0Ô0UÉuÓ0UÓUˆMô �=Ó! AÓ%Ø—‘×,Ñ,¨]Ô;Ø'×2Ñ2Ó4ˆMØ ×%Ñ%Ó'¨1Ó,ÐgÐ.gÓgÐ,ð �L‰L×5Ñ5°kÔBØ×)Ñ)Ó+ˆBÞØ—\‘\×,Ñ,¨R°Ó4�Ø—\‘\×,Ñ,¨R°Ó4�Ø×0Ñ0°Ô4Ø�N‰N˜4Ÿ;™;Ÿ>™>¬8¯=©=×+?Ñ+?ÀÀGÓ+LÔMØ×'Ñ'¨¨D¯K©K¯N©NÔ;÷a $ôf 9>¼cÀ,Ó>OÔ8PÓQÒ8P°1˜&×+Ñ+¨AÖ.Ñ8PˆÐQÜ+¨N¸HÓEˆÜ˜U MÖ2‰IˆD�#Ø�N‰N˜4 Ô%Ø×'Ñ'¨¨TÖ2ñ 3ð —K”KˆDØEÐEÓE�5ò  ùòG @ùòF W÷3 $Õ#üòf Rs+   ¿i3×-Hi=ß/i8àGi=ç7jé8i=é=
jc                 óÒ   • U R                  UR                  5      nU R                  UR                  5      nU R                  UR                  5      n[        R
                  " X#U5      $ rL   )r¯   ÚlowerÚupperr  r   ré  )rŒ   re   r.  r/  r  s        r.   Úvisit_SliceÚCodeGenerator.visit_Sliceô  sI   € Ø—
‘
˜4Ÿ:™:Ó&ˆØ—
‘
˜4Ÿ:™:Ó&ˆØ�z‰z˜$Ÿ)™)Ó$ˆÜ�~Š~˜e¨DÓ1Ð1r0   c                 ó8   • U R                  UR                  5      $ rL   )r¯   ro   rÒ   s     r.   Úvisit_IndexÚCodeGenerator.visit_Indexú  s   € Ø�z‰z˜$Ÿ*™*Ó%Ð%r0   c                 óP   • UR                   U R                  UR                  5      4$ rL   )ri   r¯   ro   rÒ   s     r.   Úvisit_keywordÚCodeGenerator.visit_keywordý  s   € Ø�x‰x˜Ÿ™ D§J¡JÓ/Ð/Ð/r0   c                 óÜ   • U R                  UR                  5      nUR                  b  U R                  UR                  5      OSn[        R                  R                  X#U R                  S9$ )Nr:  r'  )r¯   r‰  Úmsgr   rS   Údevice_assertr@  )rŒ   re   r‰  r9  s       r.   Úvisit_AssertÚCodeGenerator.visit_Assert   sO   € Ø�z‰z˜$Ÿ)™)Ó$ˆØ&*§h¡hÑ&:ˆd�j‰j˜Ÿ™Ô"ÀˆÜ�}‰}×*Ñ*¨4ÀÇÁÐ*ÐNÐNr0   rf   c                 óà  • [         R                  " UR                  /UQ70 UD6nUR                   Vs/ s H  oRU   PM	     nn[	        U5       H\  u  pg[        U[        R                  [        [        [        [        45      (       d  M;  [        R                  R                  U5      X&'   M^     [        US 5      nU V	s0 s H  o™[        X)5      _M     nn	[        US 5      n
U
 V	s/ s H  n	[        X)5      PM     nn	U=(       d    U R                   n[#        [%        U5      U Vs/ s H  owR&                  PM     snX„5      nU R(                  R+                  U5      (       Gd\  [-        U5      u  pÞU Vs/ s H`  nUb4  [        U[        [        [        R                  R                  45      (       a  [        R                  R                  OUR&                  PMb     nn[/        / Xø[1        5       5      n[3        U R4                  UUR7                  5       U R(                  UXÀR8                  UR:                  XÞU R<                  R>                  U R<                  R@                  U R<                  RB                  UU RD                  S9n URG                  URI                  5       5        URZ                  nUU R8                  U'   OU R8                  U   nU R(                  R]                  U5      n[_        U5      nU R<                  Ra                  UU5      nU[        Rb                  :X  a  g [e        URg                  5       5       Vs/ s H  nURi                  U5      PM     nn[k        [m        UU/5      5      $ s  snf s  sn	f s  sn	f s  snf s  snf ! [J         aQ  n[L        RN                  RP                  (       a  e [S        U RT                  RV                  U RX                  S 5      UeS nAff = fs  snf )Nc                 ó   • [        U5      $ rL   ©rU   ©r2   r  s     r.   r  Ú0CodeGenerator.call_JitFunction.<locals>.<lambda>  s	   € ´MÀ!Ô4Dr0   c                 ó"   • [        U5      (       + $ rL   r?  r@  s     r.   r  rA    s   € ¼ÀqÓ9IÕ5Ir0   )r1  r6  rK  r3  r`   r4  r5  rD  rE  rF  rB   r=  )7ÚinspectÚgetcallargsrf   rd   ra   rM   r   rT   rÂ  rÁ  rð   r   rS   r   r    r!   rB   rH   r   r,   r1  Úhas_functionr   rû   rž  r0  r<  Úget_capture_scoperH  r`   r”   rD  rE  rF  r=  r¯   ÚparseÚ	Exceptionr   rm  Úfront_end_debuggingr%   r6  rb   rL  rN  Úget_functionrx   r£  rÇ  r   Úget_num_resultsry  rõ  r~   )rŒ   rf   rg   r�   rB   r+   rE   ri   Úargs_cstr  Ú	args_pathÚargs_valÚfn_namer4  r5  rÿ   rI  r‹   ÚeÚcallee_ret_typeÚsymbolÚcall_oprw   s                          r.   Úcall_JitFunctionÚCodeGenerator.call_JitFunction  s=  € Ü×"Ò" 2§5¡5Ð:¨4Ò:°6Ñ:ˆØ')§|¢|Ó4¢|˜t�T”
¡|ˆÐ4Ü –o‰FˆAÜ˜#¤§¡´´s¼DÄ+ÐN×OÓOÜ"Ÿ-™-×1Ñ1°#Ó6�“ñ &ô ! Ñ'DÓEˆÙDLÓMÂH¸DÔ+¨DÓ7Ò7ÁHˆÐMÜ! $Ñ(IÓJˆ	Ù>GÓHºi°dÔ% dÖ1¹iˆÐHà'×>¨4×+>Ñ+>ˆÜœM¨"Ó-ÁHÓ/MÂH¸S·´ÁHÑ/MÈxÓhˆà�{‰{×'Ñ'¨×0Ò0ä$8¸Ó$<Ñ!ˆIñ  óò  �Cð ,/©;¼*ÀSÜFJÌCÔQY×Q^ÑQ^×QdÑQdÐEe÷;gñ ;g”—‘×'Ò'Ølo×ltÑltòuáð ð ô
 $ B¨	¼T»VÓDˆIÜ% d§l¡l°I¸r×?SÑ?SÓ?UÐ^b×^iÑ^iÐrtØ4;×LcÑLcØ/1¯{©{ÀiØ.2¯l©l×.BÑ.BÐPT×P\ÑP\×PhÑPhØ15·±×1HÑ1HÐYgØ/3¯}©}ñ>ˆIðTØ—‘ §¡£
Ô+ð (×0Ñ0ˆOØ/>ˆD×#Ñ# GÒ,à"×5Ñ5°gÑ>ˆOØ—‘×)Ñ)¨'Ó2ˆÜ'¨Ó1ˆØ—,‘,×#Ñ# F¨HÓ5ˆØœhŸm™mÓ+ØÜ27¸×8OÑ8OÓ8QÔ2RÓSÒ2R¨Q�7×%Ñ% aÖ(Ñ2RˆÐSÜÔ'¨°/Ð1BÓCÓDÐDùò[ 5ùò
 NùâHùò 0Nùò
øô ó Tä×$Ñ$×8×8ØÜ& t§{¡{§¡¸¿¹ÀtÓLÐRSÐSûð	Tüò Ts=   ³M4Â?M9Ã'M>Ä&N
Å5A'NÊN ÍO+Î
O(ÎAO#Ï#O(c                 ó<  • [        U[        [        45      (       a(  UR                  SUR                  5        UR
                  n[        U[        5      (       a  [        XU5        U R                  X#U5      $ [        US5      (       a  [        UR                  5      (       d9  [        R                  R                  U5      (       d  [        U[        5      (       aÁ  [        5       n[        U[        5      (       a!  [         R"                  " UR$                  5      nO[         R"                  " U5      nSUR&                  ;   a  U R(                  US'   SUR&                  ;   a  XS'    U" U0 UDUD6n[        U[*        5      (       a  [        R*                  " U5      nU$ X R<                  R?                  5       ;   d+  [        US5      (       a*  [        UR                  5      (       d  [A        [B        U5      nU" U0 UD6nS n	[        U[D        R*                  [        R*                  45      (       a  [G        Xy5      $ U	" U5      $ ! [,         aP  n[.        R0                  R2                  (       a  e [5        U R6                  R8                  U[;        U5      5      UeS nAff = f)Nr   r,  r(  r€  c                 ó<   • [        U 5      (       a  U $ [        U 5      $ rL   )rO   r   )r  s    r.   Úwrap_constexprÚ3CodeGenerator.call_Function.<locals>.wrap_constexpr^  s   € Ü ×"Ñ"Ø�Ü˜Q“<Ðr0   )$rM   r+  r   Úinsertr,  r-  r   rj   rT  r  rO   r   rS   Ú
is_builtinr   rž  rC  Ú	signatureÚ__call__Ú
parametersr@  r   rH  r   rm  rI  r%   r6  rb   rx  rU  rt   Úmapr   Úbuiltinsrs   )
rŒ   re   rf   rg   r¤  Úextra_kwargsÚsigrG   rP  rX  s
             r.   r+  ÚCodeGenerator.call_Function6  s  € Ü�bœ>Ô+AÐB×CÑCØ�K‰K˜˜2Ÿ;™;Ô'Ø—‘ˆBÜ�bœ+×&Ñ&Ü˜4 TÔ*Ø×(Ñ(¨°3Ó7Ð7Ü�B˜
×#Ñ#Ô(8¸¿¹×(EÑ(EÌ(Ï-É-×JbÑJbÐce×JfÑJfÔjtØÔ%÷k'ñ k'ä›6ˆLä˜"Ô/×0Ñ0Ü×'Ò'¨¯©Ó4‘ä×'Ò'¨Ó+�Ø˜cŸn™nÓ,Ø,0¯M©M�˜[Ñ)Ø˜sŸ~™~Ó-Ø-1˜\Ñ*ðMÙ˜$Ð6 ,Ð6°#Ñ6�ä˜c¤5×)Ñ)Ü"Ÿ.š.¨Ó-�CØ�
ð ×'Ñ'×.Ñ.Ó0Ó0´W¸RÀ×5LÑ5LÔUeÐfh×fqÑfq×UrÑUrÜÔ+¨TÓ2ˆDÙ�$Ð˜#Ñˆò	 ô
 �cœHŸN™N¬H¯N©NÐ;×<Ñ<Ü)¨#Ó>Ð>Ù˜cÓ"Ð"øô- ó 	MÜ×$Ñ$×8×8Øô ' t§{¡{§¡¸¼cÀ!»fÓEÈ1ÐLûð	Mús   Å%6I É
JÉAJÊJc                 ót   • [        U[        5      (       a  UR                  SU5        U R                  XXE5      $ rz   )rM   r   rZ  r+  )rŒ   re   rf   Úfn_selfrg   r¤  s         r.   rê  ÚCodeGenerator.call_Methodg  s0   € Ü�bœ+×&Ñ&Ø�K‰K˜˜7Ô#Ø×!Ñ! $¨DÓ6Ð6r0   c                 óÔ  ^ • [        T R                  UR                  5      5      n[        U[        5      (       d'  T R
                  R                  U5      nUb	  U" T U5      $ [        USS5      nU(       aŒ  [        USS5      (       az  S[        R                  " UR                  5      -  /n[        U[        5      (       a  UR                  U5        [        T R                  R                  USR                  U5      5      e[!        U 4S jUR"                   5       5      n/ nUR$                   H¥  n[        U[        R&                  5      (       ac  T R                  UR(                  5      n[        U[*        R,                  R.                  5      (       d   eUR1                  UR2                  5        M…  UR                  T R                  U5      5        M§     T R5                  XXv5      $ )NÚ_must_use_resultFÚ
_is_unusedz#The result of %s is not being used.rk  c              3   óF   >#   • U  H  nTR                  U5      v •  M     g 7frL   r®   rû  s     €r.   r²   Ú+CodeGenerator.visit_Call.<locals>.<genexpr>z  s   øé € ÐD²m¨7�4—:‘:˜g×&Ð&²mùr´   )r   r¯   rí   rM   r+  Ú statically_implemented_functionsr"  rÇ   r¾   rŒ  rx  r•  r%   r6  rb   r;   rž  rŸ  rg   ÚStarredro   r   rS   r   rš  rt   r+  )	rŒ   re   rf   Ústatic_implementationÚmurÚerror_messager¤  rg   ri   s	   `        r.   rî   ÚCodeGenerator.visit_Calll  si  ø€ Ü! $§*¡*¨T¯Y©YÓ"7Ó8ˆÜ˜"œn×-Ñ-Ø$(×$IÑ$I×$MÑ$MÈbÓ$QÐ!Ø$Ñ0Ù,¨T°4Ó8Ð8ä�bÐ,¨eÓ4ˆÞ”7˜4 ¨u×5Ñ5ØBÄSÇ[Â[ÐQU×QZÑQZÓE[Ñ[Ð\ˆMÜ˜#œs×#Ñ#Ø×$Ñ$ SÔ)Ü" 4§;¡;§?¡?°D¸#¿(¹(À=Ó:QÓRÐRäÔD°d·m²mÓDÓDˆØˆØ—9”9ˆCÜ˜#œsŸ{™{×+Ñ+Ø—j‘j §¡Ó+�Ü! #¤x§}¡}×':Ñ':×;Ñ;Ð;Ð;Ø—‘˜CŸJ™JÖ'à—‘˜DŸJ™J s›OÖ,ñ ð ×!Ñ! $¨DÓ6Ð6r0   c                 ó,   • [        UR                  5      $ rL   )r   ro   rÒ   s     r.   Úvisit_ConstantÚCodeGenerator.visit_Constant†  s   € Ü˜Ÿ™Ó$Ð$r0   c           
      óÖ  • U R                   R                  [        UR                  5      5      nUc5  U R	                  USR                  UR                  R                  5      5      e/ nUR                   HÙ  nU R                  U5      n[        U5      (       d-  [        U5      nUSL a
  US:X  a  Us  $ USL a  US:X  a  Us  $ MO  MQ  UR                  R                  5       (       aX  [        USS 5      nUb  XpR                  -  n[        R                  " S[         U R"                  U[$        R&                  " U5      S9  UR)                  U5        MÛ     [+        U5      S	:X  a  UR)                  W5        [+        U5      S
:¼  aT  UR-                  5       nUR-                  5       n	U R/                  XX˜5      n
UR)                  U
5        [+        U5      S
:¼  a  MT  [+        U5      S:X  d   eUS	   $ )Nz9AST boolean operator '{}' is not (currently) implemented.FÚlogical_andTÚ
logical_orr  zeLogical 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[  r4  rc   rt   r¯   rQ   rð   rX   rÇ   r5  rŠ  Úwarn_explicitÚUserWarningr4  r¾   rŒ  r•  r|   r—  r.  )rŒ   re   r,  Únontrivial_valuesÚsubnodero   Úbvr  r  r  r¦  s              r.   Úvisit_BoolOpÚCodeGenerator.visit_BoolOp‰  sË  € Ø×3Ñ3×7Ñ7¼¸T¿W¹W»ÓFˆØÑØ×#Ñ#ØÐQ×XÑXÐY]×Y`ÑY`×YiÑYiÓjólð lð Ðà—{”{ˆGð —J‘J˜wÓ'ˆEÜ$ U×+Ñ+ä˜%“[�Ø˜%’K k°]Ó&Bà ’LØ˜$’J [°LÓ%@à ’Lñ &A‘Jð —:‘:×&Ñ&×(Ñ(Ü$ T¨8°TÓ:�FØÑ)Ø§/¡/Ñ1˜Ü×*Ò*ØÜ!,Ø!%§¡Ø%Ü"Ÿ{š{¨4Ó0òð "×(Ñ(¨Ö/ñ9 #ô< Ð Ó! QÓ&ð ×$Ñ$ UÔ+äÐ#Ó$¨Ó)Ø#×'Ñ'Ó)ˆCØ#×'Ñ'Ó)ˆCØ×+Ñ+¨D¸sÓHˆCØ×$Ñ$ SÔ)ô	 Ð#Ó$¨Õ)ô Ð$Ó%¨Ó*Ð*Ð*Ø  Ñ#Ð#r0   rv  rw  r{  c                 ó.  • [        U5      (       a"  US:X  a  U R                  R                  US5      $ [        U[        5      (       a  US;  a  UR
                  n[        X5      n[        U5      (       a   [        U[        5      (       a  [        X5      $ U$ )NÚT)r$   r   )ro   r,   )
rQ   r@  ÚpermuterM   r   ro   rÇ   rO   r   r+  )rŒ   r  rÈ   s      r.   r*  ÚCodeGenerator.get_Attribute¿  sy   € Ü˜S×!Ñ! d¨c£kØ—=‘=×(Ñ(¨¨fÓ5Ð5ä�cœ9×%Ñ%¨$Ð6GÓ*GØ—)‘)ˆCÜ�sÓ!ˆÜ˜C× Ñ ¤Z°´k×%BÑ%BÜ! #Ó,Ð,Øˆr0   c                 ó„  • U R                  UR                  5      n[        U[        5      (       av  UR                  =o0R
                  R                  ;   aQ  U R
                  R                  U   nUR                  U:X  a  O'UR                  =o0R
                  R                  ;   a  MQ  U R                  X!R                  5      $ rL   )	r¯   ro   rM   r   rc   r”   rF  r*  rÈ   )rŒ   re   r  r+   s       r.   rÉ   ÚCodeGenerator.visit_AttributeÊ  s�   € Ø�j‰j˜Ÿ™Ó$ˆÜ�cœ:×&Ñ&àŸ<™<Ð'�4¯L©L×,CÑ,CÓCØ—l‘l×-Ñ-¨dÑ3�Ø—<‘< 4Ó'Øð Ÿ<™<Ð'�4¯L©L×,CÑ,CÕCð ×!Ñ! #§y¡yÓ1Ð1r0   c                 ód   • SUR                   l        [        R                  R	                  X5        g rÑ   )ro   ri  r¾   r¬  rÂ   rÒ   s     r.   Ú
visit_ExprÚCodeGenerator.visit_ExprÔ  s    € Ø $ˆ�
‰
ÔÜ�‰×%Ñ% dÕ1r0   c                 ó   • g rL   r¤   rÒ   s     r.   Úvisit_NoneTypeÚCodeGenerator.visit_NoneTypeØ  rÕ   r0   c           
      ó�  • [        UR                  5      n[        U5       GH  u  p4[        U[        R
                  5      (       a  [        UR                  5      X#'   M>  [        U[        R                  5      (       a”  UR                  nU R                  UR                  5      n[        U5      (       d'  U R                  US[        [        U5      5      -   5      eUS:  a  SOS[        U5      -   S-   R                  UR                  5      X#'   Mñ  [!        SR                  [        U5      5      5      e   SR#                  U5      $ )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\   rt   ra   rM   r¾   r  rx  ro   ÚFormattedValueÚ
conversionr¯   rU   r[  r,   Úchrr4  ÚAssertionErrorr;   )rŒ   re   rt   rE   ro   Úconversion_codeÚ	evaluateds          r.   Úvisit_JoinedStrÚCodeGenerator.visit_JoinedStrÛ  s	  € Ü�d—k‘kÓ"ˆÜ! &×)‰HˆAÜ˜%¤§¡×.Ñ.Ü §¡Ó,�“	Ü˜E¤3×#5Ñ#5×6Ñ6Ø"'×"2Ñ"2�Ø ŸJ™J u§{¡{Ó3�	Ü$ Y×/Ñ/Ø×+Ñ+ØØxÜœd 9›oÓ.ñ/ó0ð 0ð &5°qÓ%8™T¸dÄSÈÓEYÑ>YÐ\_Ñ>_×gÑgÐhq×hwÑhwÓx�“	ä$Ð%a×%hÑ%hÔimÐnsÓitÓ%uÓvÐvñ *ð �w‰w�v‹Ðr0   c           	      ó^  >• Uc  g [         R                  " 5          [         R                  " S[        5        [         R                  " S[        5        U R
                  nU R                  R                  5       nXl        [        US5      (       aÛ  [        US5      (       aÊ  U R                  R                  U R                  U R                  UR                  -   UR                  5      nU R                  b@  U R                  R                  U R                  R!                  U R                  U5      5        OU R                  R                  U5        U R                  R                  5       n ["        TU ]I  U5      nU(       a!  X l        U R                  R                  U5        UsS S S 5        $ ! [&         a    e [(         aZ  n[*        R,                  R.                  (       a  e ['        U R0                  R2                  U R
                  [5        U5      5      S eS nAff = f! , (       d  f       g = f)Nr�  r  r  )rŠ  Úcatch_warningsÚsimplefilterÚDeprecationWarningÚPendingDeprecationWarningrL  r”   r�  r  Ú
create_locr4  r5  r  r  rB  rC  r€  Úsuperr¯   r%   rH  r   rm  rI  r6  rb   r>   )rŒ   re   Ú	last_noderz  Úhere_locrG   rP  Ú	__class__s          €r.   r¯   ÚCodeGenerator.visití  sš  ø€ Ø‰<ØÜ×$Ò$Õ&ô ×!Ò! (Ô,>Ô?Ü×!Ò! (Ô,EÔFØŸ™ˆIØ—|‘|×+Ñ+Ó-ˆHØ ŒMÜ�t˜X×&Ñ&¬7°4¸×+FÑ+FØŸ<™<×2Ñ2°4·>±>À4Ç?Á?ÐUY×U`ÑU`ÑC`Ðbf×bqÑbqÓr�Ø×*Ñ*Ñ6Ø—L‘L×(Ñ(¨¯©×)EÑ)EÀd×F]ÑF]Ð_gÓ)hÕià—L‘L×(Ñ(¨Ô2ØŸ<™<×/Ñ/Ó1�ð	ZÜ‘g‘m DÓ)�ö Ø )”Ø—‘×$Ñ$ XÔ.Ø÷= 'Ñ&øô" $ó ØÜó ZÜ×$Ñ$×8×8Øô ' t§{¡{§¡¸¿¹ÄtÈAÃwÓOÐUYÐYûðZú÷' 'Õ&ús1   ›EHÅ+F-Å:)HÆ-HÇAHÈHÈHÈ
H,c                 ój   • U R                  USR                  [        U5      R                  5      5      e)Nzunsupported AST node type: {})r[  r4  r,   rc   rÒ   s     r.   rÂ   ÚCodeGenerator.generic_visit  s,   € Ø×Ñ Ð&E×&LÑ&LÌTÐRVËZ×M`ÑM`Ó&aÓbÐbr0   c                 ó(  • [        UR                  5      nSUs=:  a  S::  a  O  O[        UR                  5      (       a  [        S5      e[	        U R                  UR                  S   5      5      n[        U[        5      (       d  [        S5      eU(       dR  US:X  a  SnO U R                  UR                  S   5      n[        U R                  R                  U[	        U5      5      eg ! [         a  nS[        U5      -   S-   n S nANKS nAff = f)	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Ÿ  rÈ  r   r¯   rM   rð   r¹  rH  r>   r&   r6  rb   )rŒ   re   Ú	arg_countÚpassedrZ  rP  s         r.   Úexecute_static_assertÚ#CodeGenerator.execute_static_assert  sé   € Ü˜Ÿ	™	“Nˆ	Ø�IÕ" Ö"¤s¨4¯=©=×'9Ñ'9ÜÐ[Ó\Ð\ä% d§j¡j°·±¸1±Ó&>Ó?ˆÜ˜&¤$×'Ñ'Ü%ð Dóð ö Ø˜A‹~Ø‘ðXØ"Ÿj™j¨¯©°1©Ó6�Gô .¨d¯k©k¯o©o¸tÔEYÐZaÓEbÓcÐcØøô	 !ó XØGÌ$ÈqË'ÑQÐTWÑW•GûðXús   Â#C, Ã,
DÃ6DÄDc                 ó8   ^ • S[         R                  4U 4S jjnU$ )Nre   c                 ó  >^ • U 4S jUR                    5        VVs0 s H  u  p#U[        U5      _M     nnnUR                   Vs/ s H  n[        T R                  U5      5      PM     nn[	        T" U0 UD65      $ s  snnf s  snf )Nc              3   óF   >#   • U  H  nTR                  U5      v •  M     g 7frL   r®   rû  s     €r.   r²   Ú=CodeGenerator.static_executor.<locals>.ret.<locals>.<genexpr>.  s   øé € Ð#UÂ}¸G D§J¡J¨w×$7Ð$7Â}ùr´   )rŸ  r   rg   r¯   r   )rŒ   re   r+   ro   r¤  ri   rg   Ú	python_fns   `      €r.   rG   Ú*CodeGenerator.static_executor.<locals>.ret+  s†   ù€ ô $VÀtÇ}Â}Ô#Uôâ#U‘K�Dð Ô*¨5Ó1Ò1Ù#Uð ñ ð FJÇYÂYÓOÂY¸cÔ(¨¯©°C«Ö9ÁYˆDÐOÜ™Y¨Ð4°Ñ4Ó5Ð5ùóùò Ps   œA<Á$B)r¾   rù   )r°  rG   s   ` r.   Ústatic_executorÚCodeGenerator.static_executor)  s   ø€ ð	6œCŸH™H÷ 	6ð ˆ
r0   r   )r   rl  )r5  r”   rB   r<  rL  rP  r4  rf   rK  rH  rª   r=  r2  r6  r’   r�   r1  rB  r`   rI  rN  rM  r@  rQ  rL   )Žrc   r    r¡   r¢   r   r   r   rx  r�   r|   r\   r   rÂ  rÁ  rM   rÇ   r  rU  r   r.  Úupdater   rS   Údevice_printÚbuiltin_minÚbuiltin_maxr[  r`  rO  Ú
contextlibÚcontextmanagerr|  rƒ  r   r   r   r†  r‹  rŽ  Úsetr¤  r–  rß   r²  r¾   ÚListCompr½  rÓ   rã   rï  rû  rþ  r  r×   rÛ   rÎ   r  r!  r$  r.  r5  ÚAddÚSubÚMultÚDivÚFloorDivÚModÚPowÚLShiftÚRShiftÚBitAndÚBitOrÚBitXorr3  r
   ÚoperatorrW  rn  r}  rç   rê   r¨  r«  rµ  ÚEqÚNotEqÚLtÚLtEÚGtÚGtEr²  ÚcmpoprÂ  ÚUSubÚUAddÚNotÚInvertrÀ  Úunaryopr™  ræ  rí  r  rò  r÷  r+  r0  r3  r	   r6  r;  rT  r+  rê  rî   rs  ÚBoolOpr�  ÚAndÚOrr{  Úboolopr*  rÉ   rŠ  r�  r—  r¯   rÂ   rù   rª  r²  Úexperimental.gluonÚttglÚstatic_assertÚstatic_printrV  rl  r^  r   r£   Ú__classcell__)r°   r2   r¢  s   00@r.   r0  r0  "  s¥  ø‡ ð /3¸eÐfjØ°ÐQUÐbcò=0È+ð =0ØU]Ð^bÑUcð=0àAIÈ#Áõ=0ðB �t˜U E¨3°
¸GÀWÑMô)âMˆAð 	
�
‰
�AŠÙMò)Ð�t˜C ˜H‘~ó ð ×ÑØ	�(—-‘-×,Ñ,Ð-Ø	�—‘×)Ñ)Ð*Ø	�—‘×)Ñ)Ð*ðô òLò	ò1ðf ×Ññ'ó ð'ò
Uð&˜cð &¨%°
¸IÐ0EÑ*Fð &È4ô &òò"ñ ?B»eñ &-°3°s±8õ &-òV	ò2òð! 3§<¡<ô !ò @ò<6?òp&òò'ò 2ò*ò.ò.ò
2ò2ò$ò7òFð 	�‰�Ø�‰�Ø�‰�)Ø�‰�Ø�‰�nØ�‰�Ø�‰�Ø�
‰
�LØ�
‰
�LØ�
‰
�IØ�	‰	�8Ø�
‰
�Ið>Ð˜T $ s§|¡|Ñ"4°cÐ"9Ñ:ó ò7Còr$,òN!,òF8ò>3/òj*ò,òFð$ 	�‰�˜#Ÿ)™) X¨s¯v©v°xÀÇÁÈ(ÐTW×TZÑTZÐ\dÐfi×fmÑfmÐowð<Ð˜d 4¨¯	©	¡?°CÐ#7Ñ8ó òtð  	�‰�)˜SŸX™X y°#·'±'¸9ÀcÇjÁjÐR^ð?Ð˜t D¨¯©Ñ$5°sÐ$:Ñ;ó ò@ò76òròLò/ò6òG6òR2ò&ð0 U¨3°¨8¡_ô 0ðO Cô Oñ
/E ;õ /Eòb/#òb7ò
7ò4%ð2$ §¡ô 2$ðh >A¿W¹WÀmÐUX×U[ÑU[Ð]iÐ<jÐ˜d 4¨¯
©
Ñ#3°SÐ#8Ñ9Ójò	ò2ò2òòõ$!òFcð¨#¯(ª(ð °tô ò,
õ 6à�‰×#Ò#Ð%:Ø�‰×"Ò"¡O°EÓ$:Ø×ÒÐ1Ø×Ò™?¨5Ó1Ø‰_˜SÓ!Ø‰_˜SÓ!ðQÐ$ d¨6°8¸S¿XºX¸JÈ¸OÑ3LÐ+LÑ&M÷ ñ ùóg&)s   ±O%r0  c                 óì  ^• S /[        U R                  5      -  nUR                  R                  5        H.  u  p‰U R                  R	                  U5      n
[        U	S 5      Xz'   M0     U4S jmUR                  R                  5        H  u  p¼T" U[        U5      S S S2   U5        M      [        / XqR                  UR                  5      n[        U 5      u  pïSSKJn  [        S UR                  5      nU Vs0 s H#  nU R                  US      UR                  U   _M%     nnUR                  nU" SSS/5      " UU5      n[        X-U R                  5       U R!                  U5      U S	XïUXEX`R#                  5       S
9nUR%                  U R'                  5       5        UR(                  nX&l        UR-                  5       (       d+  U R#                  5       (       d  [/        U5        [1        S5      eU$ s  snf )Nc                 óú   >• UR                  5       n[        U5      S:X  aP  [        U [        5      (       a  [	        U5      R
                  X'   g [	        U5      R
                  U R                  U'   g T" X   X5        g rz   )r—  r|   rM   r\   r   r,   rr   )ÚargumentÚindicesro   ÚindexÚapply_constexpr_typess       €r.   rã  Ú*ast_to_ttir.<locals>.apply_constexpr_typesG  s^   ø€ Ø—‘“ˆÜˆw‹<˜1ÓÜ˜(¤D×)Ñ)Ü"+¨EÓ"2×"7Ñ"7�’ä(1°%Ó(8×(=Ñ(=�—‘˜uÒ%á! (¡/°7ÕBr0   rÏ  r   )Ú
namedtuplec                 ó   • [        U 5      S:H  $ rW   )r|   )rp   s    r.   r  Úast_to_ttir.<locals>.<lambda>X  s   € œc !›f¨škr0   ÚSpecializationProxyrA   r\  T)rª   rK  r6  r2  r4  r5  rD  rE  rF  r1  r=  z error encountered during parsing)r|   rd   r\  r„   râ  r   rA   r\   rû   r   r   Úcollectionsrå  Úfilterr0  rF  r>   r=  r¯   rG  r1  r<  ÚverifyrV  r	  )rf   rb   r<  rD  rE  rF  r1  rÿ   rR  rp   rh   r  ro   rI  r4  r5  rå  ÚleavesrE   rA   r\  Úproxyr‹   rã  s                          @r.   Úast_to_ttirrî  @  s°  ø€ Ø�œ˜RŸ\™\Ó*Ñ*€Ià—‘×#Ñ#Ö%‰ˆØ�l‰l× Ñ  Ó#ˆÜ" 1 dÓ+ˆ	‹ñ &õCð —}‘}×*Ñ*Ö,‰ˆÙ˜i¬¨d«±D°b°DÑ)9¸5ÖAñ -ô ˜B 	¯=©=¸#¿)¹)ÓD€IÜ0°Ó4Ñ€Iå&ÜÑ)¨3¯=©=Ó9€FÙ?EÓFºv¸!�—‘˜a ™dÑ# S§]¡]°1Ñ%5Ò5¹v€IÐFØ—‘€IÙÐ,¨{¸KÐ.HÔIÈ)ÐU^Ó_€EÜ˜g¸×9MÑ9MÓ9OÐ_a×_fÑ_fÐglÓ_mØ%'°4À9ÐmtØ*5ÐU[×fqÑfqÓfsñu€Ið ‡O�O�B—H‘H“JÔØ×Ñ€Fà„NØ�=‰=�?‰?Ø�{‰{�}‰}Ü�&ŒMÜÐ=Ó>Ð>Ø€Mùò Gs   Ã8*G1rL   )Nr¾   r`  r¸  r›  rC  r)   rŠ  rp  Údataclassesr   rr   r   Útypingr   r   r   r   r	   r
   r   r   r   r:  r   r   Ú_C.libtritonr   r   r   r   r   r   r¸  Úlanguage.corer   r   r   Úruntime.jitr   r   r   r   r   r   Ú_utilsr    r!   r"   r#   Úerrorsr%   r&   r'   r/   rH   rð   rO   rQ   rU   rZ   r]   rj   rs   rx   ro   r~   rÁ  r,   r�  r‚   r†   rˆ   r¬  r¦   rû   r+  r0  rî  r¤   r0   r.   Ú<module>rö     s|  ðÛ 
Û Û Û Û Û 	Û Û Ý !Ý ß T× TÕ Tç ß 'ß FÓ Fß GÑ G÷ C÷  Cß WÓ Wç aÑ aòòð%˜ð % ô %ð!˜ð ! ô !ðU�Sð U˜Tô UðN˜Sð N Tô Nð(�Sð (˜Tô (òòDð ¨*Ñ!5ô ð"  b§h¡h¡ð "¸¸Y¹ô "ð ˜#™t D›zÐ*Ð òòm÷3ñ 3ô*T%˜CŸO™Oô T%÷n7ñ 7ñt �$Ñ÷ð ó ðô
[�C—O‘Oô [õ|('r0   