Ë
    ÛéñiY ã                   óœ  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	 d dl
mZ d dlmZmZmZmZmZmZmZmZmZ ddlmZmZ ddlmZmZ ddlmZmZmZmZ  dd	l!m"Z"m#Z#m$Z$ dd
l%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3m4Z4 d„ Z5d„ Z6dede7fd„Z8dede7fd„Z9dede7fd„Z:dede7fd„Z;dede7fd„Z<d„ Z=d„ Z>dee#   fd„Z?deej€                     dee$   fd„ZAe7eB eCd«      hZDd„ ZEd„ ZF G d „ d!«      ZG G d"„ d#e j�                  «      ZI G d$„ d%«      ZJ e	d&¬'«       G d(„ d)«      «       ZK G d*„ d+e j�                  «      ZLd-d,„ZMy).é    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                 óZ   — d}t        j                  || «      st        d|› d| › �| «      ‚| S )Nz^[a-zA-Z_][a-zA-Z0-9_]*$zinvalid z identifier: )ÚreÚmatchr%   )ÚnameÚtypeÚpatterns      ú`/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/triton/compiler/code_generator.pyÚcheck_identifier_legalityr/      s4   € Ø)€GÜ�8‰8�G˜TÔ"Ü ¨$¨¨}¸T¸FÐCÀTÓJÐJØ€Kó    c                 ó°  — dj                  |D �cg c]  }|j                  «       ‘Œ c}«      }dj                  t        |«      D �cg c]  }|› dt        ||   «      › �‘Œ c}«      }|j	                  dd«      }|j	                  dd«      }|j	                  dd«      j	                  dd«      }| › d	|› d	|› �}|�||j                  «       z  }|S c c}w c c}w )
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À! Q C q¬¨i¸©lÓ);Ð(<Ò"=Ò!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                 ó"   — t        | t        «      S ©N)Ú
isinstancer   ©rI   s    r.   Ú_is_triton_valuerO   -   s   € Ü�aœÓ$Ð$r0   c                 ó"   — t        | t        «      S rL   )rM   r   rN   s    r.   Ú_is_triton_tensorrQ   1   s   € Ü�aœÓ Ð r0   c                 ól   — | d u xs/ t        | t        t        j                  j                  t
        f«      S rL   )rM   r   r   ÚcoreÚdtyper   rN   s    r.   Ú_is_constexprrU   5   s)   € Ø�ˆ9ÒTœ
 1¤y´(·-±-×2EÑ2EÄ{Ð&SÓTÐTr0   c                 ó†   — t        | «      xr5 | j                  j                  «       xr | j                  j                  dk7  S ©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                 ó.   — t        | t        t        f«      S rL   )rM   Úlistr   rN   s    r.   Ú_is_list_liker]   =   s   € Ü�aœ$¤˜Ó'Ð'r0   c                 óà   — |j                   rbt        |«      D ]S  \  }}t        |«      rŒt        |«      sŒt	        |j
                  | d|j                  › d|j                  |   › d|› �«      ‚ y y )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Ü2Ø—F‘F˜DØ §¡˜}Ð,iÐjl×jvÑjvÐwzÑj{Ði|Ð|}ð  Bð  ~Cð  Dóð ñ	ð r0   c                 óÒ  — t        t        | «      «      r| j                  }nDt        | t        j
                  «      r| j                  j                  }nJ dt        | «      › �«       ‚| D �cg c]
  } ||«      ‘Œ }}|D �cg c]  }|€t        |«      n|‘Œ }}|D �cg c]  }|j                  ‘Œ }}t	        j
                  |t	        j                  ||«      «      S c c}w c c}w c c}w )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à Ö!�a‰Bˆq�EÐ!€DÐ!Ø6:Ö;°˜A˜IŒI�aŒL¨1Ñ,Ð;€DÐ;Ø!Ö"˜ˆQ�V‹VÐ"€EÐ"Ü�>‰>˜$¤× 3Ñ 3°E¸6Ó BÓCÐCùò "ùÚ;ùÚ"s   Á*CÁ?CÂC$Úvaluesc                 ó:   — g }| D ]  }|j                  |«       Œ |S rL   )Ú_flatten_ir)rt   Úhandlesrp   s      r.   Úflatten_values_to_irrx   Y   s'   € Ø€GØò ˆØ	�‰�gÕðà€Nr0   rw   rr   c              #   óp   K  — d}|D ]  }|j                  | |«      \  }}|–— Œ |t        | «      k(  sJ ‚y ­w©Nr   )Ú_unflatten_irÚlen)rw   rr   ÚcursorrC   ro   s        r.   Úunflatten_ir_valuesr~   `   sI   è ø€ Ø€FØò ˆØ×(Ñ(¨°&Ó9‰ˆˆvØ‹ðð ”S˜“\Ò!Ð!Ñ!ùs   ‚46c                 ój   — g }| j                  |«       | j                  j                  |d«      \  }}|S rz   )rv   r,   r{   )Úvalrw   Úcloner2   s       r.   Ú_clone_triton_valuer‚   k   s2   € Ø€GØ‡O�O�GÔØ�x‰x×%Ñ% g¨qÓ1�H€Eˆ1Ø€Lr0   c                 ó‚   — | j                  «       D ��ci c]  \  }}|t        |«      rt        |«      n|“Œ  c}}S c c}}w rL   )ÚitemsrO   r‚   )Úscoper+   r€   s      r.   Ú_clone_scoper†   r   s;   € Ø^c×^iÑ^iÓ^k×lÑQZÐQUÐWZˆDÔ.>¸sÔ.CÔ% cÔ*ÈÑLÓlÐlùÓls   ”#;c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)Úenter_sub_regionc                 ó   — || _         y rL   )Ú	generator)ÚselfrŠ   s     r.   Ú__init__zenter_sub_region.__init__x   s	   € Ø"ˆ�r0   c                 óˆ  — t        | j                  j                  «      | _        t        | j                  j                  «      | _        i | j                  _        | j                  j                  j                  «       | _        | j                  j                  j                  «       | _
        | j                  | j                  fS rL   )r†   rŠ   ÚlscopeÚliveinsÚ
local_defsÚ	prev_defsÚbuilderÚget_insertion_blockÚinsert_blockÚget_insertion_pointÚinsert_point)r‹   s    r.   Ú	__enter__zenter_sub_region.__enter__{   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                 óÎ   — | j                   j                  j                  | j                  «       | j                  | j                   _        | j                  | j                   _        y rL   )rŠ   r’   Úrestore_insertion_pointr–   r�   rŽ   r‘   r�   )r‹   rg   Úkwargss      r.   Ú__exit__zenter_sub_region.__exit__„   s@   € Ø�‰×Ñ×6Ñ6°t×7HÑ7HÔIØ $§¡ˆ�‰ÔØ$(§N¡Nˆ�‰Õ!r0   N)rc   Ú
__module__Ú__qualname__rŒ   r—   r›   © r0   r.   rˆ   rˆ   v   s   „ ò#ò/ó3r0   rˆ   c                   óž  — e Zd Zd„ Zdefd„Zdefd„Zdefd„Zdej                  defd„Z
dej                  defd„Zdej                  defd	„Zdej                  defd
„Zdej"                  defd„Zdej&                  defd„Zdej*                  defd„Zdej.                  defd„Zdej2                  defd„Zdej6                  defd„Zy)ÚContainsReturnCheckerc                 ó   — || _         y rL   )Úgscope)r‹   r¢   s     r.   rŒ   zContainsReturnChecker.__init__�   s	   € Øˆ�r0   rJ   c                 ó,   ‡ — t        ˆ fd„|D «       «      S )Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrL   ©Úvisit)Ú.0Úsr‹   s     €r.   ú	<genexpr>z5ContainsReturnChecker._visit_stmts.<locals>.<genexpr>‘   s   øè ø€ Ò/ Q�4—:‘:˜a—=Ñ/ùó   ƒ)Úany)r‹   Úbodys   ` r.   Ú_visit_stmtsz"ContainsReturnChecker._visit_stmts�   s   ø€ ÜÓ/¨$Ô/Ó/Ð/r0   c                  ó   — y©NFrž   )r‹   rf   s     r.   Ú_visit_functionz%ContainsReturnChecker._visit_function“   s   € ð r0   c                 ó4  — d}t        j                  |«      D ]}  \  }}t        |t        «      r8|D ]2  }t        |t         j                  «      sŒ|xs | j                  |«      }Œ4 ŒNt        |t         j                  «      sŒi|xs | j                  |«      }Œ |S r¯   )ÚastÚiter_fieldsrM   r\   ÚASTr¦   )r‹   re   rG   r2   ro   Úitems         r.   Úgeneric_visitz#ContainsReturnChecker.generic_visit™   s‡   € ØˆÜŸ™¨Ó-ò 	/‰HˆAˆuÜ˜%¤Ô&Ø!ò 6�DÜ! $¬¯©Õ0Ø!Ò5 T§Z¡Z°Ó%5™ñ6ô ˜E¤3§7¡7Õ+ØÒ.˜TŸZ™Z¨Ó.‘ð	/ð ˆ
r0   re   c                 óZ  — t        |j                  t        j                  «      rm|j                  j                  | j
                  v rJ| j
                  |j                  j                     }t        ||j                  «      }| j                  |«      S y| j                  |j                  «      S r¯   )
rM   ro   r²   ÚNameÚidr¢   ÚgetattrÚattrr°   r¦   )r‹   re   ro   rf   s       r.   Úvisit_Attributez%ContainsReturnChecker.visit_Attribute¤   sw   € ô �d—j‘j¤#§(¡(Ô+Ø�z‰z�}‰} §¡Ñ+ØŸ™ D§J¡J§M¡MÑ2�Ü˜U D§I¡IÓ.�Ø×+Ñ+¨BÓ/Ð/ØØ�z‰z˜$Ÿ*™*Ó%Ð%r0   c                 óÔ   — t        |j                  «      t        j                  u ry|j                  | j
                  v r*| j
                  |j                     }| j                  |«      S yr¯   )r,   Úctxr²   ÚStorer¹   r¢   r°   )r‹   re   rf   s      r.   Ú
visit_Namez ContainsReturnChecker.visit_Name³   sO   € Ü�—‘‹>œSŸY™YÑ&ØØ�7‰7�d—k‘kÑ!Ø—‘˜TŸW™WÑ%ˆBØ×'Ñ'¨Ó+Ð+Ør0   c                  ó   — y©NTrž   ©r‹   re   s     r.   Úvisit_Returnz"ContainsReturnChecker.visit_Return»   ó   € Ør0   c                  ó   — yr¯   rž   rÃ   s     r.   Úvisit_Assignz"ContainsReturnChecker.visit_Assign¾   ó   € ð r0   c                  ó   — yr¯   rž   rÃ   s     r.   Úvisit_AugAssignz%ContainsReturnChecker.visit_AugAssignÃ   rÈ   r0   c                 ó8   — | j                  |j                  «      S rL   ©r­   r¬   rÃ   s     r.   Úvisit_Modulez"ContainsReturnChecker.visit_ModuleÈ   ó   € Ø× Ñ  §¡Ó+Ð+r0   c                 ó8   — | j                  |j                  «      S rL   rÌ   rÃ   s     r.   Úvisit_FunctionDefz'ContainsReturnChecker.visit_FunctionDefË   rÎ   r0   c                 ó’   — | j                  |j                  «      }|j                  r|xs | j                  |j                  «      }|S rL   )r­   r¬   Úorelse)r‹   re   rG   s      r.   Úvisit_IfzContainsReturnChecker.visit_IfÎ   s=   € ð ×Ñ §	¡	Ó*ˆØ�;Š;ØÒ7˜×*Ñ*¨4¯;©;Ó7ˆCØˆ
r0   c                 ór   — | j                  |j                  «      xs | j                  |j                  «      S rL   )r¦   r¬   rÒ   rÃ   s     r.   Úvisit_IfExpz!ContainsReturnChecker.visit_IfExpÛ   s'   € Ø�z‰z˜$Ÿ)™)Ó$Ò?¨¯
©
°4·;±;Ó(?Ð?r0   c                 ó8   — | j                  |j                  «      S rL   )r¦   ÚfuncrÃ   s     r.   Ú
visit_Callz ContainsReturnChecker.visit_CallÞ   s   € Ø�z‰z˜$Ÿ)™)Ó$Ð$r0   N)rc   rœ   r�   rŒ   Úboolr­   r°   r¶   r²   Ú	Attributer¼   r¸   rÀ   ÚReturnrÄ   ÚAssignrÇ   Ú	AugAssignrÊ   ÚModulerÍ   ÚFunctionDefrÐ   ÚIfrÓ   ÚIfExprÕ   ÚCallrØ   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                   ó¾   — e Zd Zd„ Zdej
                  dee   deej                     fd„Z	dej
                  deej                     fd„Z
dej
                  fd„Zd„ Zy	)
ÚASTFunctionc                 ó<   — || _         || _        || _        || _        y rL   )Ú	ret_typesÚ	arg_typesrA   Úattrs)r‹   ræ   rç   rA   rè   s        r.   rŒ   zASTFunction.__init__ä   s   € Ø"ˆŒØ"ˆŒØ"ˆŒØˆ�
r0   r’   rr   rJ   c                 óB   — g }|D ]  }|€Œ|j                  ||«       Œ |S rL   )Ú_flatten_ir_types)r‹   r’   rr   Úir_typesrC   s        r.   Úflatten_ir_typeszASTFunction.flatten_ir_typesê   s5   € ØˆØò 	4ˆBØˆzØØ× Ñ  ¨(Õ3ð	4ð ˆr0   c                 ó:   — | j                  || j                  «      S rL   )rì   ræ   )r‹   r’   s     r.   Úreturn_types_irzASTFunction.return_types_irò   s   € Ø×$Ñ$ W¨d¯n©nÓ=Ð=r0   c                 ó  ‡ — ˆ fd„}t        t        ‰ j                  |«      «      }|D �cg c]  }t        ‰ j                  |«      ‘Œ }}‰ j	                  ||«      }‰ j                  |«      }|j                  ||«      S c c}w )Nc                 ó,   •— | ‰j                   vxr |d uS rL   ©rA   ©Úpathr2   r‹   s     €r.   ú<lambda>z'ASTFunction.serialize.<locals>.<lambda>ø   ó   ø€  ¨T¯^©^Ð!;Ò!MÀÈÀ€ r0   )r\   r    rç   r!   rì   rî   Úget_function_ty)r‹   r’   Úis_valÚ	val_pathsró   rç   Úarg_types_irÚret_types_irs   `       r.   Ú	serializezASTFunction.serializeõ   sz   ø€ ó NˆÜœ t§~¡~°vÓ>Ó?ˆ	ØIRÖSÀÔ& t§~¡~°tÕ<ÐSˆ	ÐSØ×,Ñ,¨W°iÓ@ˆØ×+Ñ+¨GÓ4ˆØ×&Ñ& |°\ÓBÐBùò Ts   ªA>c                 óp  ‡ ‡— ˆfd„Š ‰‰ j                   «      }ˆ fd„}t        t        ‰ j                   |«      «      }d}t        |j	                  «       «      D �cg c]  }|j                  |«      ‘Œ }}|D ]s  }t        ‰ j                   |«      }	‰ j                  j                  |g «      }
|
D ]  \  }}|j                  |||«       Œ |	j                  ||«      \  }}t        |||«       Œu ‰ j                  }|j                  «       D ]%  \  }}t        ||t        j                  |«      «       Œ' |S c c}w )Nc                 óÖ   •— t        | t        t        t        j                  f«      r*t        j                  | D �cg c]
  } ‰|«      ‘Œ c}| «      S t        j
                  d «      S c c}w rL   )rM   r\   r   r   rn   r   )rC   ÚxÚmake_templates     €r.   rÿ   z.ASTFunction.deserialize.<locals>.make_template  sR   ø€ Ü˜"œt¤U¬H×,?Ñ,?Ð@ÔAÜ—~‘~ÀÖ&D¸A¡}°QÕ'7Ò&DÀbÓIÐIÜ×%Ñ% dÓ+Ð+ùò 'Es   ºA&c                 ó,   •— | ‰j                   vxr |d uS rL   rñ   rò   s     €r.   rô   z)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.   ÚdeserializezASTFunction.deserializeÿ   s"  ù€ ô	,ñ
 ˜TŸ^™^Ó,ˆÛMˆÜœ t§~¡~°vÓ>Ó?ˆ	àˆÜ',¨R¯_©_Ó->Ó'?Ö@ !�2—7‘7˜1•:Ð@ˆÐ@Øò 	/ˆDÜ" 4§>¡>°4Ó8ˆBàŸ™Ÿ™¨¨bÓ1ˆJØ'1ò =Ñ#�	˜8Ø—‘ ¨	°8Õ<ð=ð ×*Ñ*¨7°FÓ;‰KˆC�Ü˜d D¨#Õ.ð	/ð —N‘Nˆ	Ø"Ÿ™Ó*ò 	C‰IˆD�#Ü˜d D¬(×*<Ñ*<¸SÓ*AÕBð	Càˆùò As   ÁD3N)rc   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                   ó"   — e Zd ZU eed<   eed<   y)ÚBoundJITMethodÚ__self__Ú__func__N)rc   rœ   r�   r   Ú__annotations__r   rž   r0   r.   r  r    s   … àÓØÔr0   r  c                   ó®  ‡— e Zd ZU ddddddddœdedee   dee   fd„Zee	e
eeeeefD � �ci c]  }|j                   |“Œ c}} Zeeef   ed	<   ej'                  d
ej*                  j,                  fdej*                  j.                  fdej*                  j0                  ff«       d„ Zd„ Zd„ Zej:                  d„ «       Zd„ Zdede e!e"f   ddfd„Z#d„ Z$d„ Z% e&«       fde&e   fd„Z'd„ Z(d„ Z)d„ Z*de+jX                  fd„Z-d„ Z.d „ Z/d!„ Z0d"„ Z1d#„ Z2d$„ Z3d%„ Z4d&„ Z5d'„ Z6d(„ Z7d)„ Z8d*„ Z9d+„ Z:d,„ Z;e+jx                  d-e+jz                  d.e+j|                  d/e+j~                  d0e+j€                  d1e+j‚                  d2e+j„                  d3e+j†                  d4e+jˆ                  d5e+jŠ                  d6e+jŒ                  d7e+jŽ                  d8iZHeeIe+j”                     ef   ed9<   d:„ ZKd;„ ZLd<„ ZMd=„ ZNd>„ ZOd?„ ZPd@„ ZQdA„ ZRe+j¦                  dBe+j¨                  dCe+jª                  dDe+j¬                  dEe+j®                  dFe+j°                  dGiZYeeIe+j´                     ef   edH<   dI„ Z[e+j¸                  dJe+jº                  dKe+j¼                  dLe+j¾                  dMiZ`eeIe+jÂ                     ef   edN<   dO„ ZbdP„ ZcdQ„ ZddR„ ZedS„ ZfdT„ ZgdU„ ZhdV„ ZidW„ Zjdekeef   fdX„ZldefdY„ZmdpdZefd[„Znd\„ Zod]„ Zpd^„ Zqd_„ Zrde+jæ                  fd`„Zte+jê                  dae+jì                  dbiZweeIe+jð                     ef   edc<   dd„ Zyde„ Zzdf„ Z{dg„ Z|dh„ Z}ˆfdi„Z~dj„ Zde+�j                   ddfdk„Z�dl„ Z‚dmdnlƒmZ„ ej*                  �j
                  e�ej*                  �j                   e‚e‡«      e„�j
                  e�e„�j                   e‚e‡«      e e‚e«      e e‚e«      iZˆee‰eŠe+�j                   gef   f   edo<   ˆxZ‹S c c}} w )qÚCodeGeneratorNFr   )ÚmoduleÚ	is_kernelÚfunction_typesr`   rB   Ú	file_nameÚ
begin_lineÚjit_fnr  r  c                ó   — || _         |	| _        |	r8ddlm} t	        j
                  |«      | _         || j                  «      | _        n7ddlm	} t        j                  |«      | _         || j                  «      | _        d | _        || _        |dz
  | _        | j                  j                  ||d«       || j                  _        || j                  _        |€i n|| j                  _        |
€| j                  j%                  «       n|
| _        |€i n|| _        || _        i | _        |j/                  «       D ]†  \  }}t1        |t2        «      r*|j5                  |j6                  |«      | j,                  |<   Œ@t9        |dd«      }||v r't9        ||   |j6                  «      | j,                  |<   Œx|| j,                  |<   Œˆ i | _        || _        |r#||j?                  d«      dz   d  }tA        |d«      }|| _!        || _"        d | _#        || _$        || _%        g | _&        d | _'        i | _(        | jS                  «       | _*        d | _+        d	| _,        y )
Nr   )ÚGluonSemantic)ÚTritonSemanticr$   rœ   Ú r4   ÚfunctionF)-ÚcontextÚis_gluonÚ,triton.experimental.gluon.language._semanticr  r   ÚGluonOpBuilderr’   ÚsemanticÚtriton.language.semanticr  r   Úname_loc_as_prefixr  r  Úset_locÚoptionsÚcodegen_fnsÚ
module_mapÚcreate_moduler  Úfunction_ret_typesÚ	prototyper¢   r„   rM   r   r  rc   rº   rŽ   r  Úrfindr/   Úfunction_namer  Úcur_noder`   rB   Ú	scf_stackÚret_typer�   Ú_define_name_lookupÚdereference_namerf   Úvisiting_arg_default_value)r‹   r  r)  r¢   r+  r  r$  r%  r&  r  r  r  r  r`   rB   r  r  r  r  Úkrp   Úmodule_names                         r.   rŒ   z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                 óD   — t        | j                  j                  ||«      S rL   )r'   r  rb   )r‹   re   Úmessages      r.   Ú_unsupportedzCodeGenerator._unsupportedm  s   € Ü+¨D¯K©K¯O©O¸TÀ7ÓKÐKr0   c                 ór   — t        «       }| j                  j                  ||«      }||u ryt        |«      ryy)NFT)Úobjectr¢   r  rU   )r‹   r+   Úabsent_markerr€   s       r.   Ú_is_constexpr_globalz"CodeGenerator._is_constexpr_globalp  s6   € Ü›ˆØ�k‰k�o‰o˜d MÓ2ˆØ�-ÑØä˜ÔØàr0   c                 ó|   ‡ ‡‡‡— dt         fˆ fd„Šdt         fˆ fd„Št        «       Šdt         dt        fˆˆˆˆ fd„}|S )Nr+   c                 ó<   •— ‰j                   j                  | |«      S rL   )rŽ   r  )r+   Úabsentr‹   s     €r.   Úlocal_lookupz7CodeGenerator._define_name_lookup.<locals>.local_lookup}  s   ø€ à—;‘;—?‘? 4¨Ó0Ð0r0   c                 ób  •— ‰j                   j                  | |«      }t        ||u | ‰j                  v t	        |«      t
        u t        |t        «      t        |dd«      t        |dd«      t        |dd«      j                  d«      t        |dd«      j                  d«      t        |t        j                  «      t        |«      ‰j                  | «      ‰j                  t        j                   j"                  g«      r|S t%        t'        j(                  d| › d	�«      j+                  d
d«      «      ‚)NÚ__triton_builtin__FÚ__triton_aggregate__rœ   r  ztriton.languagez"triton.experimental.gluon.languagez.                Cannot access global variable aà   from within @jit'ed
                function. Triton kernels can only access global variables that
                are instanstiated as constexpr (`x = triton.language.constexpr(42)`). Note that this is different from
                annotating a variable as constexpr (`x: triton.language.constexpr = 42`), which is not supported.  Alternatively, set the
                envvar TRITON_ALLOW_NON_CONSTEXPR_GLOBALS=1, but we do not
                promise to support this forever.ú
ú )r¢   r  r«   r4  r,   r   rM   r   rº   Ú
startswithr   rT   r#   r>  r1  r   ÚcompilationÚallow_non_constexpr_globalsÚ	NameErrorÚtextwrapÚdedentr?   )r+   rA  r€   r‹   s      €r.   Úglobal_lookupz8CodeGenerator._define_name_lookup.<locals>.global_lookup�  s  ø€ Ø—+‘+—/‘/ $¨Ó/ˆCô Ø˜6�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                 ó‚   •— ‰}‰‰‰j                   j                  fD ]  } || |«      }||usŒ|c S  t        | › d�«      ‚)Nz is not defined)r4  r  rK  )r+   rA  Úlookup_functionro   r=  rN  rB  r‹   s       €€€€r.   Úname_lookupz6CodeGenerator._define_name_lookup.<locals>.name_lookup¤  sW   ø€ Ø"ˆFØ#/°À×@VÑ@V×@ZÑ@ZÐ#Zò !�Ù'¨¨fÓ5�Ø Ò&Ø ’Lð!ô ˜t˜f OÐ4Ó5Ð5r0   )Ústrr<  r   )r‹   rQ  r=  rN  rB  s   ` @@@r.   r/  z!CodeGenerator._define_name_lookup{  sG   û€ ð	1œsõ 	1ð	I¤õ 	IôB ›ˆð	6œcð 	6¤c÷ 	6ð 	6ð Ðr0   c              #   ó0   K  — || _         d –— d | _         y ­wrL   )r"  )r‹   Úprefixs     r.   Ú_name_loc_prefixzCodeGenerator._name_loc_prefix®  s   è ø€ à"(ˆÔÛØ"&ˆÕùs   ‚c                 óŠ  — t        |t        j                  t        j                  f«      r:|j	                  | j
                  j                  ||j                  «       «      «       y t        |«      rTg }|j                  |«       |D ];  }|j	                  | j
                  j                  ||j                  «       «      «       Œ= y y rL   )
rM   r   ro   Úblock_argumentr#  r’   Úcreate_name_locÚget_locrO   rv   )r‹   r€   r+   rw   Úhandles        r.   Ú_maybe_set_loc_to_namez$CodeGenerator._maybe_set_loc_to_name´  s‘   € Ü�cœBŸH™H¤b×&7Ñ&7Ð8Ô9Ø�K‰K˜Ÿ™×4Ñ4°T¸3¿;¹;»=ÓIÕJÜ˜cÔ"ØˆGØ�O‰O˜GÔ$Ø!ò U�Ø—‘˜tŸ|™|×;Ñ;¸DÀ&Ç.Á.ÓBRÓSÕTñUð #r0   r+   ro   rJ   c                 ó@   — || j                   |<   || j                  |<   y)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_valuezCodeGenerator.set_value½  s    € ð "ˆ�‰�DÑØ %ˆ�‰˜Òr0   c                 ór   — | j                   j                  «       }| j                   j                  «       }||fS rL   )r’   rY  r•   )r‹   ÚlocÚips      r.   Ú_get_insertion_point_and_locz*CodeGenerator._get_insertion_point_and_locÆ  s1   € ð �l‰l×"Ñ"Ó$ˆØ�\‰\×-Ñ-Ó/ˆØ�3ˆwˆr0   c                 óp   — | j                   j                  |«       | j                   j                  |«       y rL   )r’   r™   r#  )r‹   r`  r_  s      r.   Ú_set_insertion_point_and_locz*CodeGenerator._set_insertion_point_and_locÎ  s&   € Ø�‰×,Ñ,¨RÔ0Ø�‰×Ñ˜SÕ!r0   Úignorec                 óø  — | j                   j                  «       }| j                   j                  |«       | j                  j	                  |«       | j                  |j                  «       | j                  j                  «        |j                  «        g }g }g }|j                  «       D ]¬  \  }}	||v rŒt        |	«      r~| j                  |   }
| j                  ||
|	«       t        |	g«      }t        |
g«      }||k7  sŒV|j	                  |«       |j	                  |	j                  «       |j                  |«       Œ”|| j                   vrŒ£J d|› d�«       ‚ |j#                  «       | _        i | _        |||fS )NúLoop carried variable z is not a triton value)r’   Úcreate_blockÚset_insertion_point_to_startr-  ÚappendÚvisit_compound_statementr¬   ÚpopÚeraser„   rO   rŽ   Ú_verify_loop_carried_variablerx   r,   Úextendr�   Úcopy)r‹   re   r�   rd  ÚblockÚinit_tysÚinit_handlesÚnamesr+   Úlive_valÚloop_valÚlive_handlesÚloop_handless                r.   Ú_find_carrieszCodeGenerator._find_carriesÒ  sP  € à—‘×)Ñ)Ó+ˆØ�‰×1Ñ1°%Ô8à�‰×Ñ˜dÔ#Ø×%Ñ% d§i¡iÔ0Ø�‰×ÑÔØ�‰Œð
 ˆØˆØˆà%Ÿm™m›oò 	j‰NˆD�(Ø�v‰~Øä Ô)ØŸ;™; tÑ,�Ø×2Ñ2°4¸À8ÔLä3°X°JÓ?�Ü3°X°JÓ?�Ø <Ó/Ø—L‘L Ô&Ø—O‘O H§M¡MÔ2Ø ×'Ñ'¨Õ5à 4§?¡?Ò2ÐiÐ6LÈTÈFÐRhÐ4iÓiÐ2ð	jð$ —l‘l“nˆŒØˆŒà�l HÐ,Ð,r0   c                 óˆ   — t        |«      s|g}|D ]/  }| j                  |«       t        |t        j                  «      sŒ/ y  y rL   )r]   r¦   rM   r²   rÛ   )r‹   ÚstmtsÚstmts      r.   rj  z&CodeGenerator.visit_compound_statementý  s?   € ä˜UÔ#Ø�GˆEØò 	ˆDØ�J‰J�tÔô ˜$¤§
¡
Õ+Ùñ	r0   c                 óD   — t         j                  j                  | |«       y rL   ©r²   ÚNodeVisitorr¶   rÃ   s     r.   rÍ   zCodeGenerator.visit_Module  ó   € Ü�‰×%Ñ% d¨DÕ1r0   c                 óÆ   — | j                  |j                  «      }|�J ‚t        j                  |j                  D �cg c]  }| j                  |«      ‘Œ c}«      }|S c c}w rL   )r¦   r¾   r   r   Úelts)r‹   re   r¾   Úeltr�  s        r.   Ú
visit_ListzCodeGenerator.visit_List  sN   € Ø�j‰j˜Ÿ™Ó"ˆØˆ{Ðˆ{Ü�~‰~¸$¿)¹)ÖD°3˜tŸz™z¨#�ÒDÓEˆØˆùò Es   ½Are   c                 óš  — t        |j                  «      dk7  rt        d«      ‚|j                  d   }| j                  |j                  «      }t        |t        «      st        d«      ‚g }|D ]R  }| j                  |j                  j                  |«       |j                  | j                  |j                  «      «       ŒT t        |«      S )Nr$   z'nested comprehensions are not supportedr   z'only tuple comprehensions are supported)r|   Ú
generatorsÚ
ValueErrorr¦   ÚiterrM   Útl_tupleÚNotImplementedErrorr]  Útargetr¹   ri  r‚  )r‹   re   Úcompr‡  Úresultsrµ   s         r.   Úvisit_ListCompzCodeGenerator.visit_ListComp  s¥   € Üˆt�‰Ó 1Ò$ÜÐFÓGÐGà�‰˜qÑ!ˆØ�z‰z˜$Ÿ)™)Ó$ˆÜ˜$¤Ô)Ü%Ð&OÓPÐPàˆØò 	1ˆDØ�N‰N˜4Ÿ;™;Ÿ>™>¨4Ô0Ø�N‰N˜4Ÿ:™: d§h¡hÓ/Õ0ð	1ô ˜Ó Ð r0   c                 ó&  ‡ ‡— ‰ j                  |j                  «      }g }ˆˆ fd„Š ‰|«      }|€t        j                  }nCt	        |t        j
                  j                  «      sJ ‚|j                  |«       |j                  }‰ j                  j                  |«       ‰ j                  €|‰ _        n*‰ j                  |k7  rt        d‰ j                  › d|› �«      ‚‰ j                  j                  «       }‰ j                  j                  |«       y )Nc                 óÔ   •— t        | t        j                  «      rt        | ‰«      S t        | t        j                  t
        t        f«      r‰j                  j                  | «      S | S rL   )	rM   r   r   rs   r   ÚintÚfloatr   Ú	to_tensor)ro   Údecayr‹   s    €€r.   r“  z)CodeGenerator.visit_Return.<locals>.decay%  sO   ø€ Ü˜%¤§¡Ô0Ü-¨e°UÓ;Ð;Ü˜E¤H×$6Ñ$6¼¼UÐ#CÔDØ—}‘}×.Ñ.¨uÓ5Ð5ØˆLr0   zInconsistent return types: ú and )r¦   ro   r   ÚvoidrM   rS   r   rv   r,   r’   rG   r.  Ú	TypeErrorrg  Úset_insertion_point_to_end)r‹   re   Ú	ret_valuerw   Úret_tyÚpost_ret_blockr“  s   `     @r.   rÄ   zCodeGenerator.visit_Return!  sÝ   ù€ Ø—J‘J˜tŸz™zÓ*ˆ	Øˆõ	ñ ˜)Ó$ˆ	àÐÜ—]‘]‰Fä˜i¬¯©×)AÑ)AÔBÐBÐBØ×!Ñ! 'Ô*Ø—^‘^ˆFØ�‰×Ñ˜Ô!Ø�=‰=Ð Ø"ˆD�MØ�]‰]˜fÒ$ÜÐ9¸$¿-¹-¸ÈÈfÈXÐVÓWÐWð Ÿ™×2Ñ2Ó4ˆØ�‰×/Ñ/°Õ?r0   c                 ó@	  — | j                  |j                  «      \  }}| j                  r| j                  |d«      ‚t	        |j                  j
                  d d d…   «      D ]Ä  \  }}|j                  j                  | dz
     }|j                  }|j                  }t        j                  |t        j                  «       ¬«      }	|€t        j                  |	g|¬«      }
nt        j                  |	||¬«      }
	 | j                  rJ ‚d| _        | j                  |
«       d| _        ŒÆ | j                  rd	nd
}| j                  j!                  | j"                  «      }| j"                  j%                  | j&                  | j(                  ||| j*                  «      | _        | j&                  j-                  | j                  «       | j                  j/                  «       }| j                  j1                  | j                  «      }| j2                  �0| j2                  j5                  | j                  | j"                  «       t7        ||«      D ])  \  }}| j9                  ||«       | j;                  ||«       Œ+ | j"                  j=                  «       }| j"                  j?                  |«       | jA                  |jB                  «       | j"                  j=                  «       jE                  «       rJ ‚| jF                  �| jF                  tH        jJ                  k(  r2tH        jJ                  | _#        | j"                  jM                  g «       �n	tO        | jF                  tH        jP                  «      r&| jF                  jR                  | j                  _*        n| jF                  g| j                  _*        | j                  jW                  | j                  j!                  | j"                  «      «       | j"                  jM                  | j                  jY                  | j"                  «      D �cg c]  }| j"                  j[                  |«      ‘Œ c}«       | j                  j]                  «        |r| j"                  j_                  |«       y y # d| _        w xY wc c}w )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Ü   Ú	AnnAssignr1  r  r)  rû   r’   Úget_or_insert_functionr  r+  r`   Ú	push_backÚadd_entry_blockr  rB   Úinitialize_calleeÚzipr[  r]  r“   rh  rj  r¬   Úhas_terminatorr.  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Ð   zCodeGenerator.visit_FunctionDef?  sf  € Ø!%§¡¨D¯I©IÓ!6Ñˆ	�;Ø�7Š7Ø×#Ñ# DÐ*XÓYÐYä )¨$¯)©)×*<Ñ*<¹T¸r¸TÑ*BÓ Cò 	8Ñˆ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�Õ/ð	8ð" "&§¢‘X°Yˆ
Ø—‘×(Ñ(¨¯©Ó6ˆØ—,‘,×5Ñ5°d·k±kÀ4×CUÑCUÐW\Ð^hÐjn×jwÑjwÓxˆŒØ�‰×Ñ˜dŸg™gÔ&Ø—‘×'Ñ'Ó)ˆØ—^‘^×/Ñ/°·±Ó8ˆ
Ø×ÑÐ*Ø×Ñ×1Ñ1°$·'±'¸4¿<¹<ÔHä#& y°*Ó#=ò 	0ÑˆH�iØ×'Ñ'¨	°8Ô<Ø�N‰N˜8 YÕ/ð	0ð —L‘L×4Ñ4Ó6ˆ	Ø�‰×1Ñ1°%Ô8à×%Ñ% d§i¡iÔ0ð —<‘<×3Ñ3Ó5×DÑDÔ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À˜dŸl™l×8Ñ8¸Õ<ÒtÔuØ�‰×ÑÔáØ�L‰L×3Ñ3°IÕ>ð øðE 38�Õ/üò> us   Ã:&RÐ-"RÒ	Rc                 ó�   — g }|j                   D ]  }|| j                  |«      gz  }Œ | j                  |j                  «      }||fS rL   )rg   r¦   Úkwarg)r‹   re   rd   ri   r­  s        r.   Úvisit_argumentszCodeGenerator.visit_argumentsw  sL   € Øˆ	Ø—9‘9ò 	+ˆCØ˜$Ÿ*™* S›/Ð*Ñ*‰Ið	+à—j‘j §¡Ó,ˆØ˜+Ð%Ð%r0   c                 óP  ‡— t         j                  j                  | ‰«       t        ˆfd„| j                  j
                  D «       «      }|j                  rF|j                  s|j                  r.t        | j                  j                  ‰‰j                  › d�«      ‚‰j                  S )Nc              3   óV   •K  — | ]   }|j                   ‰j                  k(  sŒ|–— Œ" y ­wrL   )r+   ri   )r§   Úpre   s     €r.   r©   z*CodeGenerator.visit_arg.<locals>.<genexpr>€  s    øè ø€ ÒI˜1°a·f±fÀÇÁÓ6H”QÑIù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¶   Únextr  ÚparamsÚis_constexprÚdo_not_specializeÚdo_not_specialize_on_alignmentr%   rb   ri   )r‹   re   Úparams    ` r.   Ú	visit_argz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                 ób  — | j                  |j                  «      }| j                  |j                  «      }| j                  |j                  «      }|t        k(  rE|| j
                  v rt        |› d�«      ‚t	        |«      }|| j
                  |<   | j
                  |   S | j                  |«      S )Nz4 is already defined. constexpr cannot be reassigned.)r¦   rŸ  rŠ  ro   r   rŽ   r†  rÇ   )r‹   re   rŸ  rŠ  ro   s        r.   Úvisit_AnnAssignzCodeGenerator.visit_AnnAssignˆ  s£   € à—Z‘Z §¡Ó0ˆ
Ø—‘˜DŸK™KÓ(ˆØ—
‘
˜4Ÿ:™:Ó&ˆàœÒ"Ø˜Ÿ™Ñ$Ü  F 8ð ,Dð "Eó Fð Fä˜eÓ$ˆEØ"'ˆD�K‰K˜ÑØ—;‘;˜vÑ&Ð&à× Ñ  Ó&Ð&r0   c                 ó  — t        |j                  t        j                  «      sJ ‚t        |t        j                  «      r| j                  ||«      S t        |t        j                  «      r=t        |j                  «      D ]$  \  }}| j                  ||j                  |   «       Œ& y t        |t        j                  «      rt        d«      ‚t        |t        j                  «      sJ ‚| j                  | j                  |«      |«       y )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Ë  zCodeGenerator.assignTarget˜  sÅ   € Ü˜&Ÿ*™*¤c§i¡iÔ0Ð0Ð0Ü�fœcŸm™mÔ,Ø×-Ñ-¨f°eÓ<Ð<Ü�fœcŸi™iÔ(Ü& v§{¡{Ó3ò ;‘	��6Ø×!Ñ! &¨%¯,©,°q©/Õ:ð;àÜ�fœcŸm™mÔ,Ü%Ð&WÓXÐXÜ˜&¤#§(¡(Ô+Ð+Ð+Ø�‰�t—z‘z &Ó)¨5Õ1r0   c                 óâ  ‡ ‡— ˆˆ fd„Št        |t        j                  «      r|j                  gn|j                  }t        |«      dk(  sJ ‚|d   }t        |t        j                  «      rF‰ j                  |j                  «      5   ‰‰ j                  |j                  «      «      }d d d «       n! ‰‰ j                  |j                  «      «      }‰ j                  |«       y # 1 sw Y   ŒxY w)Nc                 ó  •— t        | t        j                  «      rt        | ‰«      S t        j                  t        j                  f}t        | «      } | �2t        | «      s't        | |«      s‰j                  j                  | «      } | S rL   )	rM   r   r   rs   rT   r   rO   r   r’  )ro   Únative_nontensor_typesÚ_sanitize_valuer‹   s     €€r.   rÏ  z3CodeGenerator.visit_Assign.<locals>._sanitize_value§  sm   ø€ Ü˜%¤§¡Ô0Ü-¨e°_ÓEÐEÜ&.§n¡n´h·n±nÐ%EÐ"Ü(¨Ó/ˆEØÐ Ü$ UÔ+Ü˜uÐ&<Ô=ØŸ™×/Ñ/°Ó6�ØˆLr0   r$   r   )rM   r²   r£  rŠ  rž  r|   r¸   rU  r¹   r¦   ro   rË  )r‹   re   rž  rŠ  rt   rÏ  s   `    @r.   rÇ   zCodeGenerator.visit_Assign¥  sÂ   ù€ õ		ô $.¨d´C·M±MÔ#B�4—;‘;‘-ÈÏÉˆÜ�7‹|˜qÒ Ð Ð Ø˜‘ˆÜ�fœcŸh™hÔ'Ø×&Ñ& v§y¡yÓ1ñ AÙ(¨¯©°D·J±JÓ)?Ó@�÷Að Añ % T§Z¡Z°·
±
Ó%;Ó<ˆFØ×Ñ˜& &Õ)÷	Að Aús   Â"C%Ã%C.c                 óÄ  — t        j                  |j                  «      }t        j                  «       |_        t        j                  ||j                  |j                  «      }t        j                  |j                  g|¬«      }dD ]5  }t        ||«      sŒt        ||«      }t        |||«       t        |||«       Œ7 | j                  |«       | j                  |«      S )Nr�  )ÚlinenoÚ
col_offsetÚ
end_linenoÚend_col_offset)ro  ÚdeepcopyrŠ  r²   ÚLoadr¾   ÚBinOpÚopro   rÜ   Úhasattrrº   Úsetattrr¦   )r‹   re   ÚlhsÚrhsÚassignrþ   Úys          r.   rÊ   zCodeGenerator.visit_AugAssign¼  sª   € Ü�m‰m˜DŸK™KÓ(ˆÜ—(‘(“*ˆŒÜ�i‰i˜˜TŸW™W d§j¡jÓ1ˆÜ—‘ T§[¡[ M¸Ô=ˆØIò 	&ˆAÜ�t˜QÕÜ˜D !Ó$�Ü˜˜Q Ô"Ü˜  1Õ%ð		&ð
 	�
‰
�6ÔØ�z‰z˜#‹Ðr0   c                 óš   — t        |j                  «      t        j                  u r|j                  S | j                  |j                  «      S rL   )r,   r¾   r²   r¿   r¹   r0  rÃ   s     r.   rÀ   zCodeGenerator.visit_NameÉ  s4   € Ü�—‘‹>œSŸY™YÑ&Ø—7‘7ˆNØ×$Ñ$ T§W¡WÓ-Ð-r0   c                 óD   — t         j                  j                  | |«       y rL   r}  rÃ   s     r.   Úvisit_StorezCodeGenerator.visit_StoreÎ  r  r0   c                 óD   — t         j                  j                  | |«       y rL   r}  rÃ   s     r.   Ú
visit_LoadzCodeGenerator.visit_LoadÑ  r  r0   c                 ó†   — |j                   D �cg c]  }| j                  |«      ‘Œ }}t        j                  |«      S c c}w rL   )r�  r¦   r   r   )r‹   re   rþ   rg   s       r.   Úvisit_TuplezCodeGenerator.visit_TupleÔ  s5   € Ø'+§y¡yÖ1 !�—
‘
˜1•Ð1ˆÐ1Ü�~‰~˜dÓ#Ð#ùò 2s   �>c                 óÒ  — t        |«      r t        ||«      || j                  ¬«      S t        |«      r5t        j                  dd|«      } t        ||«      || j                  ¬«      S t        |t        t        j                  f«      st        |t        «      rt        |«      }t        |t        «      rt        ||«      }n| j                  ||«      }| j                  |||gi «      S )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_methodz"CodeGenerator._apply_binary_methodØ  sÁ   € ä˜SÔ!Ø,”7˜3 Ó,¨S¸D¿M¹MÔJÐJÜ˜SÔ!Ü"$§&¡&¨°jÀ+Ó"NÐØ4”7˜3Ð 3Ó4°SÀDÇMÁMÔRÐRÜ˜#¤	¬8¯>©>Ð:Ô;Ä
È3ÔPYÔ@ZÜ˜C“.ˆCÜ�cœ9Ô%Ü˜˜kÓ*‰Bà×#Ñ# C¨Ó5ˆBØ×!Ñ! $¨¨S¨E°2Ó6Ð6r0   c                 ó`  — | j                  |j                  «      }| j                  |j                  «      }| j                  j	                  t        |j                  «      «      }|€5| j                  |dj                  |j                  j                  «      «      ‚| j                  ||||«      S )Nz8AST binary operator '{}' is not (currently) implemented.)r¦   ÚleftÚrightÚ_method_name_for_bin_opr  r,   rØ  r:  Úformatrc   rî  )r‹   re   rÛ  rÜ  rì  s        r.   Úvisit_BinOpzCodeGenerator.visit_BinOpç  s“   € Ø�j‰j˜Ÿ™Ó#ˆØ�j‰j˜Ÿ™Ó$ˆØ×2Ñ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__rò  c                 óR  — | j                   j                  |«       | j                  |j                  «       | j                   j	                  «       }| j
                  j                  «       }| j                  j                  «       }i }|j                  «       }|j                  r | j                   j                  |«       |j                  «       | _        i | _        | j                  |j                  «       | j
                  j                  «       }| j                   j	                  «       }| j                  j                  «       }g }	|j                  «       D ]´  \  }
}t        |«      sŒt        ||
   g«      }t        ||
   g«      }||k(  rŒ6|	j                  |
«       ||
   ||
<   ||
   ||
<   |df|dffD ]S  \  }}t        ||
   «      t        |«      k(  }|r||
   j                  |j                  k(  rŒ?J d|
› d|› d|› d||
   › �«       ‚ Œ¶ t        |j                  «       |j                  «       z  «      D ]i  }
|
|	v rŒ||
   }|j                  }||
   }|j                  }t        |«      t        |«      k(  }|r||k(  sJ d|
› d|› d	|› d
�«       ‚|	j                  |
«       Œk |||||	fS )NÚthenÚelsezinitial value for `z` is of type z
, but the z block redefines it as zMismatched type for z between then block (z) and else block (ú))r’   rh  rj  r¬   r“   r�   ro  rŽ   rÒ   r„   rO   rx   ri  r,   r=   Úkeys)r‹   re   r�   Ú
then_blockÚ
else_blockÚ	then_defsÚ	then_valsÚ	else_defsÚ	else_valsrs  r+   ro   Úthen_handlesÚelse_handlesÚdefsÚ
block_nameÚ
type_equalÚthen_valÚthen_tyÚelse_valÚelse_tys                        r.   Úvisit_then_else_blocksz$CodeGenerator.visit_then_else_blocksÿ  s¬  € à�‰×1Ñ1°*Ô=Ø×%Ñ% d§i¡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ð ˆà"Ÿ=™=›?ò 	O‰KˆD�%ä# EÔ*ØÜ/°¸4±Ð0AÓBˆLÜ/°¸4±Ð0AÓBˆLØ˜|Ò+ØØ�L‰L˜ÔØ'¨™oˆI�d‰OØ'¨™oˆI�d‰Oà&/°Ð%8¸9ÀfÐ:MÐ$Nò OÑ ��jÜ! $ t¡*Ó-´°e³Ñ<�
Ù! d¨4¡j§o¡o¸¿¹Ó&Cð OØ)¨$¨¨}¸U¸Gð DØ)˜lÐ*AÀ$ÀtÁ*ÀðOóOÐCñOð	Oô( ˜9Ÿ>™>Ó+¨i¯n©nÓ.>Ñ>Ó?ò 	ˆDØ�u‰}ØØ  ‘ˆ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                 ó@  ‡‡— t        | «      5 }|\  }}| j                  j                  «       }| j                  j                  «       }| j                  j                  |«       | j                  j	                  |j
                  ||«       | j                  ||||«      \  ŠŠ}}}| j                  j                  «       }	| j                  j                  |«       |j                  «       rJ |› «       ‚t        ˆfd„|D «       «      }
| j                  j                  |	|
«       | j                  j                  |«       |j                  «       rJ |› «       ‚t        ˆfd„|D «       «      }| j                  j                  |	|«       t        |
«      t        |«      k(  sJ ‚t        |
|«      D ];  \  }}|j                  «       }||j                  «       k(  sJ ‚|	j                  |«       Œ= 	 d d d «       | j                  j                  	«       t        t        
«      «      D �cg c]  }|	j!                  |«      ‘Œ }}D �cg c]  }‰|   j"                  ‘Œ }}t%        ||«      }t        ||«      D ]  \  }}| j'                  ||«       Œ y # 1 sw Y   Œ£xY wc c}w c c}w )Nc              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wrL   rž   ©r§   r+   r  s     €r.   r©   z3CodeGenerator.visit_if_top_level.<locals>.<genexpr>H  ó   øè ø€ Ò/RÀD°	¸$µÑ/Rùó   ƒc              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wrL   rž   ©r§   r+   r
  s     €r.   r©   z3CodeGenerator.visit_if_top_level.<locals>.<genexpr>M  r  r  )rˆ   r’   rg  r—  Úcreate_cond_branchrZ  r  r©  rx   Úcreate_branchr|   r¨  Úget_typeÚadd_argumentrh  r  ri   r,   r~   r]  )r‹   Úcondre   Úsrr�   Úip_blockr  r  rs  Úendif_blockr  r  Úthen_hÚelse_hrC   rE   Úres_handlesr+   rr   Ú
new_valuesÚ	new_valuer
  r  s                        @@r.   Úvisit_if_top_levelz CodeGenerator.visit_if_top_level8  sI  ù€ Ü˜dÓ#ð 	- rØ "ÑˆG�XØŸ™×2Ñ2Ó4ˆJØŸ™×2Ñ2Ó4ˆJà�L‰L×3Ñ3°HÔ=Ø�L‰L×+Ñ+¨D¯K©K¸ÀZÔPð ×+Ñ+¨D°'¸:ÀzÓRñ @ˆI�y *¨j¸%ð Ÿ,™,×3Ñ3Ó5ˆKà�L‰L×3Ñ3°JÔ?Ø!×0Ñ0Ô2ÐC°z°lÓCÐ2Ü/Ó/RÈEÔ/RÓRˆLØ�L‰L×&Ñ& {°LÔAà�L‰L×3Ñ3°JÔ?Ø!×0Ñ0Ô2ÐC°z°lÓCÐ2Ü/Ó/RÈEÔ/RÓRˆLØ�L‰L×&Ñ& {°LÔAÜ�|Ó$¬¨LÓ(9Ò9Ð9Ð9Ü"% l°LÓ"Aò -‘�˜Ø—_‘_Ó&�Ø˜VŸ_™_Ó.Ò.Ð.Ð.Ø×(Ñ(¨Õ,ñ-÷/	-ð: 	�‰×1Ñ1°+Ô>ä38¼¸\Ó9JÓ3KÖL¨a�{—‘ qÕ)ÐLˆÐLØ27Ö8¨$�˜4‘×%Ó%Ð8ˆÐ8Ü(¨°eÓ<ˆ
Ü" 5¨*Ó5ò 	,‰OˆD�)Ø�N‰N˜4 Õ+ñ	,÷E	-ð 	-üò> MùÚ8s   ŽGJ
È!JÈ?JÊ
Jc                 óÚ  ‡‡— t        | «      5 }|\  }}| j                  «       \  }}| j                  j                  «       }|j                  r| j                  j                  «       nd }	| j                  ||||	«      \  ŠŠ}}	}
t        ˆfd„|
D «       «      }t        |
|«      D ]  \  }}| j                  ||«       Œ | j                  ||«       | j                  j                  |D �cg c]  }|j                  «       ‘Œ c}|j                  d«      }|j                  |j                  «       «       | j                  j                  |j                  «       «       t!        |
«      dkD  r| j                  j#                  |«       |j                  s|j%                  «       }	n|	j                  |j%                  «       «       | j                  j                  |j%                  «       «       t!        |
«      dkD  rUt        ˆfd„|
D «       «      }t        |
|«      D ]  \  }}| j                  ||«       Œ | j                  j#                  |«       d d d «       t'        t!        «      «      D �cg c]  }j)                  |«      ‘Œ }}
D �cg c]  }‰|   j*                  ‘Œ }}t-        ||«      }t        |
|«      D ]  \  }}| j/                  ||«       Œ y c c}w # 1 sw Y   Œ�xY wc c}w c c}w )Nc              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wrL   rž   r  s     €r.   r©   z-CodeGenerator.visit_if_scf.<locals>.<genexpr>h  r  r  Tr   c              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wrL   rž   r  s     €r.   r©   z-CodeGenerator.visit_if_scf.<locals>.<genexpr>w  s   øè ø€ Ò3VÈ°I¸dµOÑ3Vùr  )rˆ   ra  r’   rg  rÒ   r  rx   r¨  r[  rc  Úcreate_if_opr  rZ  Úmerge_block_beforeÚget_then_blockr—  r|   Úcreate_yield_opÚget_else_blockr  Ú
get_resultr,   r~   r]  )r‹   r!  re   r"  r�   r2   r`  Úlast_locr  r  rs  r  r+   r€   ÚhÚif_opr  rE   r'  rr   r(  r)  r
  r  s                         @@r.   Úvisit_if_scfzCodeGenerator.visit_if_scf_  s�  ù€ Ü˜dÓ#ð 	; rØ‰JˆG�QØ×<Ñ<Ó>‰LˆB�ØŸ™×2Ñ2Ó4ˆJØ8<¿º˜Ÿ™×2Ñ2Ô4ÈˆJà×+Ñ+¨D°'¸:ÀzÓRñ @ˆI�y *¨j¸%ô 0Ó/RÈEÔ/RÓRˆLÜ  ¨Ó5ò 7‘	��cØ×+Ñ+¨C°Õ6ð7à×-Ñ-¨b°(Ô;Ø—L‘L×-Ñ-À\Ö.RÀ¨q¯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˜#Ø×/Ñ/°°TÕ:ð;à—‘×,Ñ,¨\Ô:÷5	;ô8 5:¼#¸lÓ:KÓ4LÖM¨q�u×'Ñ'¨Õ*ÐMˆÐMØ27Ö8¨$�˜4‘×%Ó%Ð8ˆÐ8Ü(¨°eÓ<ˆ
Ü" 5¨*Ó5ò 	,‰OˆD�)Ø�N‰N˜4 Õ+ñ	,ùò' /S÷	;ð 	;üò8 NùÚ8s+   ŽCKÃ(K
Ã?EKÉ)K#ÊK(ËKËK c           	      óÔ  — | j                  |j                  «      }t        |«      �r+t        |«      r| j	                  |d«      ‚|j
                  j                  «       rat        j                  dt        j                  |j                  «      z  «       t        j                  j                  || j                  | ¬«      }|j                  t        j                   | j                  ¬«      }t#        | j$                  «      j                  |«      r1| j&                  r| j	                  |d«      ‚| j)                  ||«       y | j+                  ||«       y t-        |«      }t        |«      t.        vrO| j	                  |dj1                  dj3                  d„ t.        D «       «      t        |«      j4                  «      «      ‚|r|j6                  n|j8                  }| j;                  |«       y )	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   ó4   K  — | ]  }|j                   –— Œ y ­wrL   ©rc   ©r§   r2   s     r.   r©   z)CodeGenerator.visit_If.<locals>.<genexpr>›  ó   è ø€ Ò!G° !§*¥*Ñ!Gùó   ‚)r¦   ÚtestrQ   rZ   r:  r,   rX   ÚwarningsÚwarnr²   Úunparser   rS   Ú_unsplatr   ÚtoÚint1r    r¢   r-  r*  r7  r   Ú_condition_typesró  r;   rc   r¬   rÒ   rj  )r‹   re   r!  Úactive_blocks       r.   rÓ   zCodeGenerator.visit_If‚  s€  € Ø�z‰z˜$Ÿ)™)Ó$ˆä˜TÕ"Ü$ TÔ*Ø×'Ñ'¨Ð.mÓnÐnØ�y‰y×!Ñ!Ô#Ü—‘ð BÜ—k‘k $§)¡)Ó,ñ-ô.ô  —}‘}×-Ñ-¨d¸d¿m¹mÐX\Ð-Ó]�Ø—7‘7œ8Ÿ=™=°D·M±M�7ÓBˆDÜ$ T§[¡[Ó1×7Ñ7¸Ô=Ø—>’>Ø×+Ñ+ØÐmóoð oà×'Ñ'¨¨dÕ3à×!Ñ! $¨Õ-ä'¨Ó-ˆDä�D‹zÔ!1Ñ1Ø×'Ñ'ØÐk×rÑrØŸ	™	Ñ!GÔ6FÔ!GÓGÜ˜T›
×+Ñ+ó-ó.ð .ñ
 )-˜4Ÿ9š9°$·+±+ˆLØ×)Ñ)¨,Õ7r0   c           	      ó8  — | j                  |j                  «      }t        |«      �rE|j                  t        j
                  | j                  ¬«      }t        | «      5  | j                  «       \  }}| j                  j                  «       }| j                  j                  |«       | j                  j                  | j                  |j                  «      «      }| j                  j                  «       }| j                  j                  «       }| j                  j                  |«       | j                  j                  | j                  |j                  «      «      }| j                  j                  «       }| j!                  ||«       |j"                  |j"                  k(  s!J d|j"                  › d|j"                  › �«       ‚|j"                  }	|	t        j$                  k7  r|	j'                  | j                  «      gng }
| j                  j)                  |
|j*                  d«      }|j-                  |j/                  «       «       |
rO| j                  j1                  |j/                  «       «       | j                  j3                  |j*                  g«       | j                  j1                  |j/                  «       «       |j-                  |j5                  «       «       |
rO| j                  j1                  |j5                  «       «       | j                  j3                  |j*                  g«       |
r/t        j6                  j9                  |j;                  d«      |	«      nd cd d d «       S t=        |«      }t#        |«      t>        vrO| jA                  |djC                  djE                  d„ t>        D «       «      t#        |«      jF                  «      «      ‚|r| j                  |j                  «      S | j                  |j                  «      S # 1 sw Y   y xY w)	Nrç  zATernary expression with dynamic condition has inconsistent types r”  Tr   r:  r;  c              3   ó4   K  — | ]  }|j                   –— Œ y ­wrL   r=  r>  s     r.   r©   z,CodeGenerator.visit_IfExp.<locals>.<genexpr>Ï  r?  r@  )$r¦   rA  rQ   rF  r   rG  r   rˆ   ra  r’   rg  rh  r’  r¬   r“   rÒ   rc  r,   r•  Úto_irr.  rZ  r/  r0  r—  r1  r2  rS   r   r3  r   rH  r:  ró  r;   rc   )r‹   re   r!  r`  r4  r  r  r  r  r.  Úret_type_irr6  s               r.   rÕ   zCodeGenerator.visit_IfExp¡  s  € Ø�z‰z˜$Ÿ)™)Ó$ˆÜ˜TÕ"Ø—7‘7œ8Ÿ=™=°D·M±M�7ÓBˆDä! $Ó'ñ !dØ#×@Ñ@ÓB‘��Hà!Ÿ\™\×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°"°hÔ?à—}‘}¨¯©Ò5ð |ØWÐX`×XeÑXeÐWfÐfkÐlt×lyÑlyÐkzÐ{ó|Ð5à#Ÿ=™=�à@HÌHÏMÉMÒ@Y˜xŸ~™~¨d¯l©lÓ;Ñ<Ð_a�ØŸ™×1Ñ1°+¸t¿{¹{È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!dñ !dôF (¨Ó-ˆDô �D‹zÔ!1Ñ1Ø×'Ñ'ØÐk×rÑrØŸ	™	Ñ!GÔ6FÔ!GÓGÜ˜T›
×+Ñ+ó-ó.ð .ñ Ø—z‘z $§)¡)Ó,Ð,à—z‘z $§+¡+Ó.Ð.÷]!dð !dús   ÁLPÐPc                 ó  ‡ — g }|j                   D ]”  }|j                  }‰ j                  |j                  «      }|j                  D �cg c]  }‰ j                  |«      ‘Œ }}t        ˆ fd„|j                  D «       «      } ||d‰ j                  i|¤Ž}	|j                  |	«       Œ– t        ||j                   «      D ]O  \  }	}|	j                  «       }
|j                  €Œ#‰ j                  |j                  «      }‰ j                  ||
«       ŒQ t        ‰ j                  «      j                  |«      r‰ j                  |d«      ‚‰ j!                  |j"                  «       t%        |«      D ]  }	|	j'                  d d d «       Œ y c c}w )Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrL   r¥   )r§   Úkwr‹   s     €r.   r©   z+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   ri  r¨  r—   Úoptional_varsr]  r    r¢   r:  rj  r¬   Úreversedr›   )r‹   re   Úcm_listrµ   Úcallrf   ri   rg   ÚkwsÚcmÚresÚvar_names   `           r.   Ú
visit_WithzCodeGenerator.visit_WithÖ  sR  ø€ ð ˆØ—J‘Jò 	ˆDØ×$Ñ$ˆDØ—‘˜DŸI™IÓ&ˆBØ/3¯y©yÖ9¨�D—J‘J˜s•OÐ9ˆDÐ9ÜÓ>°·±Ô>Ó>ˆCÙ�TÐ: T§]¡]Ð:°cÑ:ˆBØ�N‰N˜2Õð	ô ˜G T§Z¡ZÓ0ò 	.‰HˆB�Ø—,‘,“.ˆCØ×!Ñ!Ñ-ØŸ:™: d×&8Ñ&8Ó9�Ø—‘˜x¨Õ-ð		.ô
 ! §¡Ó-×3Ñ3°DÔ9Ø×#Ñ# DÐ*oÓpÐpØ×%Ñ% d§i¡iÔ0Ü˜7Ó#ò 	*ˆBØ�K‰K˜˜d DÕ)ñ	*ùò :s   ÁFc                  ó   — y rL   rž   rÃ   s     r.   Ú
visit_PasszCodeGenerator.visit_Passì  s   € Ør0   c                 óö  — t        |j                  «      dk(  rt        |j                  «      dk(  s| j                  |d«      ‚| j	                  |j
                  «      }| j	                  |j                  d   «      }t        |«      }t        |«      }t        |j                  d   «      t        j                  u rt        ||u «      S t        |j                  d   «      t        j                  u rt        ||u«      S | j                  j                  t        |j                  d   «      «      }|€8| j                  |dj                  |j                  d   j                  «      «      ‚| j!                  ||||«      S )Nr$   z1simultaneous multiple comparison is not supportedr   z<AST comparison operator '{}' is not (currently) implemented.)r|   ÚcomparatorsÚopsr:  r¦   rð  r   r,   r²   ÚIsr   ÚIsNotÚ_method_name_for_comp_opr  ró  rc   rî  )r‹   re   rÛ  rÜ  Ú	lhs_valueÚ	rhs_valuerì  s          r.   Úvisit_ComparezCodeGenerator.visit_Compareï  sB  € Ü�D×$Ñ$Ó%¨Ò*¬s°4·8±8«}ÀÒ/AØ×#Ñ# DÐ*]Ó^Ð^Ø�j‰j˜Ÿ™Ó#ˆØ�j‰j˜×)Ñ)¨!Ñ,Ó-ˆÜ(¨Ó-ˆ	Ü(¨Ó-ˆ	Ü�—‘˜‘Ó¤§¡Ñ&Ü˜Y¨)Ð3Ó4Ð4Ü�—‘˜‘Ó¤§	¡	Ñ)Ü˜Y¨iÐ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__rd  c           
      óö  — | j                  |j                  «      }| j                  j                  t	        |j
                  «      «      }|€*| j                  |d|j
                  j                  › d�«      ‚t        |«      r t        ||«      | j                  ¬«      S 	  t        ||«      «       S # t        $ r? |dk(  rt        | «      cY S | j                  |d|› dt	        |«      j                  › �«      ‚w xY w)NzAST unary operator 'z!' is not (currently) implemented.rç  Ú__not__z)' is not (currently) implemented on type )r¦   ÚoperandÚ_method_name_for_unary_opr  r,   rØ  r:  rc   rQ   rº   r   ÚAttributeErrorr   )r‹   re   rp  rf   s       r.   Úvisit_UnaryOpzCodeGenerator.visit_UnaryOp  sô   € Ø—*‘*˜TŸ\™\Ó*ˆØ×+Ñ+×/Ñ/´°T·W±W³Ó>ˆØˆ:Ø×#Ñ# DÐ,@ÀÇÁ×AQÑAQÐ@RÐRsÐ*tÓuÐuÜ˜WÔ%Ø'”7˜7 BÓ'°$·-±-Ô@Ð@ð	tØ'”7˜7 BÓ'Ó)Ð)øÜò 	tØ�YŠÜ  W Ó-Ò-Ø×#Ñ#ØÐ,¨R¨DÐ0YÔZ^Ð_fÓZg×ZpÑZpÐYqÐrótð tð	tús   ÂB0 Â0C8Ã,C8Ú__neg__Ú__pos__ro  Ú
__invert__rq  c           	      ó`  — t        |«      sJ d|› d�«       ‚t        |«      sJ d|› d�«       ‚t        |«      t        |«      u s"J d|› dt        |«      › dt        |«      › �«       ‚t        |«      r?|j                  |j                  k(  s%J d|› d|j                  › d|j                  › d	�«       ‚y y )
Nzcannot reassign constexpr z in the looprf  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+   ru  rt  s       r.   rm  z+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                 ó  ‡ — t        ‰ «      5 }|\  }}‰ j                  «       \  }}‰ j                  ||«      \  }}}	|D �
cg c]  }
|
j                  «       ‘Œ }}
‰ j	                  ||«       ‰ j
                  j                  ||«      }‰ j
                  j                  |j                  «       |«      }‰ j
                  j                  |«       t        t        |«      «      D �cg c]  }|j                  |«      ‘Œ }}t        ||	«      }t        ||«      D ]5  \  }}|‰ j                  |<   |‰ j                   |<   ‰ j#                  ||«       Œ7 ‰ j%                  |j&                  «      }t)        |t*        j,                  «      rB|j.                  r*|j1                  d‰ j
                  j3                  «       «       |j,                  }‰ j
                  j5                  |«       ‰ j
                  j7                  |j8                  |«       ‰ j
                  j                  |j;                  «       |«      }‰ j
                  j                  |«       t        t        |«      «      D �cg c]  }|j                  |«      ‘Œ }}t        ||	«      }t        ||«      D ]5  \  }}|‰ j                  |<   |‰ j                   |<   ‰ j#                  ||«       Œ7 ‰ j<                  j?                  |«       ‰ jA                  |jB                  «       ‰ j<                  jE                  «        tG        ˆ fd„|D «       «      }‰ j
                  jI                  |«       d d d «       t        t        «      «      D �cg c]  }jK                  |«      ‘Œ }}t        |	«      }t        |«      D ]5  \  }}|‰ j                  |<   |‰ j                   |<   ‰ j#                  ||«       Œ7 |jL                  D ]  }J d«       ‚ y c c}
w c c}w c c}w # 1 sw Y   Œ°xY wc c}w )Núllvm.loop_annotationc              3   ó<   •K  — | ]  }‰j                   |   –— Œ y ­wrL   ©rŽ   ©r§   r+   r‹   s     €r.   r©   z,CodeGenerator.visit_While.<locals>.<genexpr>K  ó   øè ø€ Ò0UÀt°·±¸TÕ1BÑ0Uùó   ƒzNot implemented)*rˆ   ra  rx  r  rc  r’   Úcreate_while_opÚcreate_block_with_parentÚ
get_beforerh  r  r|   ri   r~   r¨  rŽ   r�   r[  r¦   rA  rM   r   Ú	conditionÚdisable_licmÚset_attrÚget_disable_loop_licm_attrr—  Úcreate_condition_oprZ  Ú	get_afterr-  ri  rj  r¬   rk  rx   r1  r3  rÒ   r²   r~  r¶   )r‹   re   r"  r�   r”   r`  r4  rs  rr  Úinit_fe_tysr5  rq  Úwhile_opÚbefore_blockrE   Ú
block_argsÚcondition_argsr+   r€   r!  Úafter_blockÚbody_handlesÚ	body_argsÚyield_handlesÚresult_handlesÚresult_valsÚnew_defr{  s   `                           r.   Úvisit_WhilezCodeGenerator.visit_While!  s{  ø€ Ü˜dÓ#ð *	8 rØ$&Ñ!ˆG�\Ø×<Ñ<Ó>‰LˆB�à/3×/AÑ/AÀ$ÈÓ/PÑ,ˆE�< à.:Ö;¨˜Ÿ
™
�Ð;ˆHÐ;Ø×-Ñ-¨b°(Ô;Ø—|‘|×3Ñ3°H¸lÓKˆHàŸ<™<×@Ñ@À×ATÑATÓAVÐX`ÓaˆLØ�L‰L×5Ñ5°lÔCÜ7<¼SÀÓ=NÓ7OÖP°!˜,×*Ñ*¨1Õ-ÐPˆJÐPÜ0°¸[ÓIˆNÜ  ¨Ó7ò 7‘	��cØ$'�—‘˜DÑ!Ø(+�—‘ Ñ%Ø×+Ñ+¨C°Õ6ð7ð —:‘:˜dŸi™iÓ(ˆDÜ˜$¤× 2Ñ 2Ô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°1˜KŸO™O¨AÕ.ÐQˆLÐQÜ+¨L¸+ÓFˆIÜ  ¨	Ó2ò 7‘	��cØ$'�—‘˜DÑ!Ø(+�—‘ Ñ%Ø×+Ñ+¨C°Õ6ð7ð �N‰N×!Ñ! $Ô'Ø×)Ñ)¨$¯)©)Ô4Ø�N‰N×ÑÔ ä0Ó0UÈuÔ0UÓUˆMØ�L‰L×(Ñ(¨Ô7÷U*	8ôZ ;@ÄÀLÓ@QÓ:RÖS°Q˜(×-Ñ-¨aÕ0ÐSˆÐSÜ)¨.¸+ÓFˆÜ  ¨Ó4ò 	7‰MˆD�'Ø 'ˆD�K‰K˜ÑØ$+ˆD�O‰O˜DÑ!Ø×'Ñ'¨°Õ6ð	7ð
 —K‘Kò 	6ˆDØ+Ð+Ó+�5ñ	6ùò] <ùò Qùò& R÷?*	8ð *	8üòZ Ts>   �3O7Á O(ÁBO7Ã"O-Ã:E%O7ÉO2É7CO7Í&PÏ(O7Ï7P c                 ó  — t        |j                  t        j                  «      sJ ‚| j	                  |j
                  «      }| j	                  |j                  «      }t        |«      r | j                  ||j                  ||gi «      S ||   S rL   )
rM   r¾   r²   rÖ  r¦   ro   ÚslicerO   Úcall_MethodÚ__getitem__)r‹   re   rÛ  Úslicess       r.   Úvisit_Subscript_Loadz"CodeGenerator.visit_Subscript_LoadZ  so   € Ü˜$Ÿ(™(¤C§H¡HÔ-Ð-Ð-Ø�j‰j˜Ÿ™Ó$ˆØ—‘˜DŸJ™JÓ'ˆÜ˜CÔ Ø×#Ñ# D¨#¯/©/¸3ÀÀÈ"ÓMÐMØ�6‰{Ðr0   c                 ó   — t        d«      ‚)Nz&__setitem__ is not supported in triton)r‰  )r‹   re   ro   s      r.   rÊ  z#CodeGenerator.visit_Subscript_Storeb  s   € Ü!Ð"JÓKÐKr0   c                 ó$   — | j                  |«      S rL   )rš  rÃ   s     r.   Úvisit_SubscriptzCodeGenerator.visit_Subscripte  s   € Ø×(Ñ(¨Ó.Ð.r0   c                 ó^   — |j                   D �cg c]  }| j                  |«      ‘Œ c}S c c}w rL   )Údimsr¦   )r‹   re   Údims      r.   Úvisit_ExtSlicezCodeGenerator.visit_ExtSliceh  s"   € Ø+/¯9©9Ö5 C�—
‘
˜3•Ò5Ð5ùÒ5s   �*c           	      óh  ‡ — ‰ j                  |j                  j                  «      }|j                  j                  D �cg c]  }‰ j                  |«      ‘Œ }}t	        ˆ fd„|j                  j
                  D «       «      }|t        j                  k(  rÑ ||i |¤Ž}t        |j                  j                  |j                  j                  |j                  j                  «      }|D ]z  }t        |«      ‰ j                  |j                  j                   <   ‰ j#                  |j$                  «       |j&                  D ]"  }	t(        j*                  j-                  ‰ |	«       Œ$ Œ| y d }
d }d}d}d}d}|t        j                  u ru ||i |¤Ž}|j                  }|j                  }|j                  }|j.                  }
|j0                  }|j2                  }|j4                  }|j6                  }|j8                  }n½|t        u rªt;        |«      dkD  r|d   n#‰ j                  t)        j<                  d«      «      }t;        |«      dkD  r|d   n'‰ j                  |j                  j                  d   «      }t;        |«      dkD  r|d   n#‰ j                  t)        j<                  d«      «      }nt?        d«      ‚d}tA        |«      r+|j                  dk  rt        |j                   «      }d}||}}‰ jB                  jE                  |«      }‰ jB                  jE                  |«      }‰ jB                  jE                  |«      }|jF                  jI                  «       r4|jF                  jI                  «       r|jF                  jI                  «       s3tK        d|jF                  › d	|jF                  › d	|jF                  › d
�«      ‚tM        |«      rtK        d|jN                  › �«      ‚tM        |«      rtK        d|jN                  › �«      ‚tM        |«      rtK        d|jN                  › �«      ‚‰ jB                  jQ                  |jF                  |jF                  «      }‰ jB                  jQ                  ||jF                  «      }|jS                  ‰ jT                  «      }|jV                  t        jX                  jF                  jZ                  j\                  k(  }|j^                  }|j^                  }|j^                  }‰ jT                  ja                  |||«      }‰ jT                  ja                  |||«      }‰ jT                  ja                  |||«      }‰ jT                  jc                  |«      }‰ je                  |j                  j                   t        jX                  jg                  ||«      «       ti        ‰ «      5 }|\  }}‰ jk                  «       \  }}‰ jm                  |||j                  j                   h¬«      \  }}}‰ jo                  ||«       ‰ jT                  jq                  ||||«      } ts        |
«      �+| ju                  d‰ jT                  jw                  |
«      «       ts        |«      �+| ju                  d‰ jT                  jw                  |«      «       |r*| ju                  d‰ jT                  jy                  «       «       |r*| ju                  d‰ jT                  jy                  «       «       |r*| ju                  d‰ jT                  jy                  «       «       |r*| ju                  d‰ jT                  j{                  «       «       ‰ j|                  j                  |«       | j�                  d«      }!‰ jT                  jƒ                  |!«       t        t;        |«      «      D �cg c]  }|!j…                  |dz   «      ‘Œ }"}t‡        |"|«      }#t‰        ||#«      D ])  \  }$}%‰ j‹                  |%|$«       ‰ je                  |$|%«       Œ+ ‰ j#                  |j$                  «       ‰ j|                  j�                  «        t�        ˆ fd„|D «       «      }&t;        |&«      dkD  r‰ jT                  j‘                  |&«       |!j“                  «       }'|'j•                  «       dk(  sJ d«       ‚‰ jT                  jƒ                  |!«       | j—                  «       }(|r8‰ jT                  j™                  ||(«      }(‰ jT                  j›                  |(|«      }(|j�                  |(«       ‰ je                  |j                  j                   t        jX                  jg                  |(|«      «       ‰ j‹                  |(|j                  j                   «       d d d «       t        t;        «      «      D �cg c]  } jŸ                  |«      ‘Œ })}t‡        |)«      }*t‰        |*«      D ])  \  }$}%‰ je                  |$|%«       ‰ j‹                  |%|$«       Œ+ |j&                  D ]  }	J d«       ‚ y c c}w c c}w # 1 sw Y   ŒŸxY wc c}w )Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrL   r¥   ©r§   Úkeywordr‹   s     €r.   r©   z*CodeGenerator.visit_For.<locals>.<genexpr>n  s   øè ø€ ÒQ°7˜4Ÿ:™: g×.ÑQùrª   Fr$   r   r   zAOnly `range` and `static_range` iterators are currently supportedTz0For loop bounds and step must all be ints, are (r;  r  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 )rd  ztt.num_stagesztt.loop_unroll_factorztt.disallow_acc_multi_bufferz
tt.flattenztt.warp_specializery  c              3   ó<   •K  — | ]  }‰j                   |   –— Œ y ­wrL   r{  r|  s     €r.   r©   z*CodeGenerator.visit_For.<locals>.<genexpr>×  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   rR  rS  r   Ústatic_ranger  Ústartro   ÚendÚstepr   rŽ   rŠ  r¹   rj  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_implrL  r’   Úint_signednessrS   Ú
SIGNEDNESSÚSIGNEDrZ  Úcreate_int_castr«  r]  r   rˆ   ra  rx  rc  Úcreate_for_opr   r„  Úget_int32_attrÚget_unit_attrr…  r-  ri  Úget_bodyrh  ri   r~   r¨  r[  rk  rx   r1  Ú
get_parentÚsizeÚget_induction_varÚ
create_subÚ
create_addÚreplace_all_uses_withr3  )+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_placeholderr"  r�   r”   r`  r4  rs  rr  rq  Úfor_opÚfor_op_bodyÚblock_handlesr‹  r+   r€   r�  Úfor_op_regionÚivr‘  Úresult_valuess+   `                                          r.   Ú	visit_ForzCodeGenerator.visit_Fork  s8  ø€ ØŸ
™
 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ÀÇÁ×ARÑARÔ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Ó#ð 0	< 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¸˜[Ÿ_™_¨Q°©UÕ3ÐVˆMÐVÜ,¨]¸HÓEˆJÜ  ¨
Ó3ò *‘	��cØ×+Ñ+¨C°Ô6Ø—‘˜t SÕ)ð*ð ×)Ñ)¨$¯)©)Ô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0	<ôf 9>¼cÀ,Ó>OÓ8PÖQ°1˜&×+Ñ+¨AÕ.ÐQˆÐQÜ+¨N¸HÓEˆÜ˜U MÓ2ò 	3‰IˆD�#Ø�N‰N˜4 Ô%Ø×'Ñ'¨¨TÕ2ð	3ð —K‘Kò 	6ˆDØEÐEÓE�5ñ	6ùòG @ùòF W÷30	<ð 0	<üòf Rs+   ¿hÖ9G/h#Þ(hßGh#æ#h/èh#è#h,c                 óÒ   — | j                  |j                  «      }| j                  |j                  «      }| j                  |j                  «      }t	        j
                  |||«      S rL   )r¦   ÚlowerÚupperrª  r   r–  )r‹   re   rÕ  rÖ  rª  s        r.   Úvisit_SlicezCodeGenerator.visit_Sliceô  sK   € Ø—
‘
˜4Ÿ:™:Ó&ˆØ—
‘
˜4Ÿ:™:Ó&ˆØ�z‰z˜$Ÿ)™)Ó$ˆÜ�~‰~˜e U¨DÓ1Ð1r0   c                 ó8   — | j                  |j                  «      S rL   )r¦   ro   rÃ   s     r.   Úvisit_IndexzCodeGenerator.visit_Indexú  s   € Ø�z‰z˜$Ÿ*™*Ó%Ð%r0   c                 óP   — |j                   | j                  |j                  «      fS rL   )ri   r¦   ro   rÃ   s     r.   Úvisit_keywordzCodeGenerator.visit_keywordý  s   € Ø�x‰x˜Ÿ™ D§J¡JÓ/Ð/Ð/r0   c                 óâ   — | j                  |j                  «      }|j                  �| j                  |j                  «      nd}t        j                  j                  ||| j                  ¬«      S )Nr  rç  )r¦   rA  Úmsgr   rS   Údevice_assertr   )r‹   re   rA  rÝ  s       r.   Úvisit_AssertzCodeGenerator.visit_Assert   sQ   € Ø�z‰z˜$Ÿ)™)Ó$ˆØ&*§h¡hÐ&:ˆd�j‰j˜Ÿ™Ô"ÀˆÜ�}‰}×*Ñ*¨4°ÀÇÁÐ*ÓNÐNr0   rf   c                 óš  — t        j                  |j                  g|¢­i |¤Ž}|j                  D �cg c]  }||   ‘Œ	 }}t	        |«      D ]W  \  }}t        |t        j                  t        t        t        t        f«      sŒ6t        j                  j                  |«      ||<   ŒY t        |d„ «      }|D �	ci c]  }	|	t        ||	«      “Œ }}	t        |d„ «      }
|
D �	cg c]  }	t        ||	«      ‘Œ }}	|xs | j                   }t#        t%        |«      |D �cg c]  }|j&                  ‘Œ c}||«      }| j(                  j+                  |«      �sZt-        |«      \  }}|D �cg c]Y  }|�/t        |t        t        t        j                  j                  f«      rt        j                  j                  n|j&                  ‘Œ[ }}t/        g ||t1        «       «      }t3        | j4                  ||j7                  «       | j(                  ||| j8                  |j:                  ||| j<                  j>                  | j<                  j@                  | j<                  jB                  || jD                  ¬«      }	 |jG                  |jI                  «       «       |jZ                  }|| j8                  |<   n| j8                  |   }| j(                  j]                  |«      }t_        |«      }| j<                  ja                  ||«      }|t        jb                  k(  ry te        |jg                  «       «      D �cg c]  }|ji                  |«      ‘Œ }}tk        tm        ||g«      «      S c c}w c c}	w c c}	w c c}w c c}w # tJ        $ rL}tL        jN                  jP                  r‚ tS        | jT                  jV                  | jX                  d «      |‚d }~ww xY wc c}w )Nc                 ó   — t        |«      S rL   ©rU   ©r2   rþ   s     r.   rô   z0CodeGenerator.call_JitFunction.<locals>.<lambda>  s   € ´MÀ!Ó4D€ r0   c                 ó   — t        |«       S rL   râ  rã  s     r.   rô   z0CodeGenerator.call_JitFunction.<locals>.<lambda>  s   € ¼ÀqÓ9IÐ5I€ r0   )r  r  r+  r  r`   r  r  r$  r%  r&  rB   r  )7ÚinspectÚgetcallargsrf   rd   ra   rM   r   rT   r‘  r�  rÙ   r   rS   r   r    r!   rB   rH   r   r,   r  Úhas_functionr   rä   rR  r  r  Úget_capture_scoper(  r`   r’   r$  r%  r&  r  r¦   ÚparseÚ	Exceptionr   rI  Úfront_end_debuggingr%   r  rb   r,  r.  Úget_functionrx   rW  r•  r  Úget_num_resultsr3  r¿  r~   )r‹   rf   rg   rš   rB   r+   rE   ri   Úargs_cstró   Ú	args_pathÚargs_valÚfn_namer  r  rç   r)  rŠ   ÚeÚcallee_ret_typeÚsymbolÚcall_oprw   s                          r.   Úcall_JitFunctionzCodeGenerator.call_JitFunction  sC  € Ü×"Ñ" 2§5¡5Ð:¨4Ò:°6Ñ:ˆØ')§|¡|Ö4˜t��T“
Ð4ˆÐ4Ü “oò 	7‰FˆAˆsÜ˜#¤§¡´´s¼DÄ+ÐNÕOÜ"Ÿ-™-×1Ñ1°#Ó6��Q’ð	7ô ! Ñ'DÓEˆØDLÖM¸D�DÔ+¨D°$Ó7Ñ7ÐMˆÐMÜ! $Ñ(IÓJˆ	Ø>GÖH°dÔ% d¨DÕ1ÐHˆÐHà'Ò>¨4×+>Ñ+>ˆÜœM¨"Ó-ÀHÖ/M¸S°·³Ò/MÈxÐYgÓhˆà�{‰{×'Ñ'¨Õ0ä$8¸Ó$<Ñ!ˆI�zð  öð ð ,/¨;¼*ÀSÜFJÌCÔQY×Q^ÑQ^×QdÑQdÐEeô;g”—‘×'Ò'Ølo×ltÑltñuðˆIð ô
 $ B¨	°8¼T»VÓDˆIÜ% d§l¡l°I¸r×?SÑ?SÓ?UÐ^b×^iÑ^iÐrtØ4;ÈD×LcÑLcØ/1¯{©{ÀiÐ\fØ.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¨Q�7×%Ñ% aÕ(ÐSˆÐSÜÔ'¨°/Ð1BÓCÓDÐDùò[ 5ùò
 NùâHùò 0Nùò
øô ò Tä×$Ñ$×8Ò8ØÜ& t§{¡{§¡¸¿¹ÀtÓLÐRSÐSûð	Tüò Ts=   ²MÂ6MÃM!ÄM&
ÅAM+É,M0 Ì'OÍ0	OÍ9AO Ï Oc                 óº  — t        |t        t        f«      r(|j                  d|j                  «       |j
                  }t        |t        «      r t        |||«       | j                  |||«      S t        |d«      rt        |j                  «      s/t        j                  j                  |«      st        |t        «      r±t        «       }t        |t        «      r t!        j"                  |j$                  «      }nt!        j"                  |«      }d|j&                  v r| j(                  |d<   d|j&                  v r| |d<   	  ||i |¤|¤Ž}t        |t*        «      rt        j*                  |«      }|S || j<                  j?                  «       v s!t        |d«      r%t        |j                  «      stA        tB        |«      } ||i |¤Ž}d„ }	t        |tD        j*                  t        j*                  f«      rtG        ||	«      S  |	|«      S # t,        $ rK}t.        j0                  j2                  r‚ t5        | j6                  j8                  |t;        |«      «      |‚d }~ww xY w)Nr   r  rè  r9  c                 ó2   — t        | «      r| S t        | «      S rL   )rO   r   )rþ   s    r.   Úwrap_constexprz3CodeGenerator.call_Function.<locals>.wrap_constexpr^  s   € Ü Ô"Ø�Ü˜Q“<Ðr0   )$rM   r  r   Úinsertr  r  r   rj   rö  rÙ  rO   r   rS   Ú
is_builtinr   rR  rå  Ú	signatureÚ__call__Ú
parametersr   r   rê  r   rI  rë  r%   r  rb   rR  r4  rt   Úmapr   Úbuiltinsrs   )
r‹   re   rf   rg   rX  Úextra_kwargsÚsigrG   rò  rù  s
             r.   rë  zCodeGenerator.call_Function6  sô  € Ü�bœ>Ô+AÐBÔCØ�K‰K˜˜2Ÿ;™;Ô'Ø—‘ˆBÜ�bœ+Ô&Ü˜4  TÔ*Ø×(Ñ(¨¨T°3Ó7Ð7Ü�B˜
Ô#Ô(8¸¿¹Ô(EÌ(Ï-É-×JbÑJbÐceÔJfÔjtØÔ%ôk'ä›6ˆLä˜"Ô/Ô0Ü×'Ñ'¨¯©Ó4‘ä×'Ñ'¨Ó+�Ø˜cŸn™nÑ,Ø,0¯M©M�˜[Ñ)Ø˜sŸ~™~Ñ-Ø-1�˜\Ñ*ðMÙ˜$Ð6 ,Ð6°#Ñ6�ä˜c¤5Ô)Ü"Ÿ.™.¨Ó-�CØ�
ð �×'Ñ'×.Ñ.Ó0Ñ0´W¸RÀÔ5LÔUeÐfh×fqÑfqÔUrÜÔ+¨TÓ2ˆDÙ�$Ð˜#Ñˆò	 ô
 �cœHŸN™N¬H¯N©NÐ;Ô<Ü)¨#¨~Ó>Ð>Ù˜cÓ"Ð"øô- ò 	MÜ×$Ñ$×8Ò8Øô ' t§{¡{§¡¸¼cÀ!»fÓEÈ1ÐLûð	Mús   Ä?0H È	IÈAIÉIc                 ón   — t        |t        «      r|j                  d|«       | j                  ||||«      S rz   )rM   r   rú  rë  )r‹   re   rf   Úfn_selfrg   rX  s         r.   r—  zCodeGenerator.call_Methodg  s1   € Ü�bœ+Ô&Ø�K‰K˜˜7Ô#Ø×!Ñ! $¨¨D°#Ó6Ð6r0   c                 ó�  ‡ — t        ‰ j                  |j                  «      «      }t        |t        «      s&‰ j
                  j                  |«      }|�	 |‰ |«      S t        |dd«      }|r�t        |dd«      rtdt        j                  |j                  «      z  g}t        |t        «      r|j                  |«       t        ‰ j                  j                  |dj                  |«      «      ‚t!        ˆ fd„|j"                  D «       «      }g }|j$                  D ]™  }t        |t        j&                  «      r]‰ j                  |j(                  «      }t        |t*        j,                  j.                  «      sJ ‚|j1                  |j2                  «       Œz|j                  ‰ j                  |«      «       Œ› ‰ j5                  ||||«      S )NÚ_must_use_resultFÚ
_is_unusedz#The result of %s is not being used.rG  c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrL   r¥   r¤  s     €r.   r©   z+CodeGenerator.visit_Call.<locals>.<genexpr>z  s   øè ø€ ÒD¨7�4—:‘:˜g×&ÑDùrª   )r   r¦   r×   rM   r  Ú statically_implemented_functionsr  rº   r²   rD  rR  ri  r%   r  rb   r;   rR  rS  rg   ÚStarredro   r   rS   r   rn  rt   rë  )	r‹   re   rf   Ústatic_implementationÚmurÚerror_messagerX  rg   ri   s	   `        r.   rØ   zCodeGenerator.visit_Calll  sc  ø€ Ü! $§*¡*¨T¯Y©YÓ"7Ó8ˆÜ˜"œnÔ-Ø$(×$IÑ$I×$MÑ$MÈbÓ$QÐ!Ø$Ð0Ù,¨T°4Ó8Ð8ä�bÐ,¨eÓ4ˆÙ”7˜4 ¨uÔ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                 ó,   — t        |j                  «      S rL   )r   ro   rÃ   s     r.   Úvisit_ConstantzCodeGenerator.visit_Constant†  s   € Ü˜Ÿ™Ó$Ð$r0   c           
      ó¬  — | j                   j                  t        |j                  «      «      }|€5| j	                  |dj                  |j                  j                  «      «      ‚g }|j                  D ]É  }| j                  |«      }t        |«      s't        |«      }|du r	|dk(  r|c S |du sŒ<|dk(  sŒB|c S |j                  j                  «       rYt        |dd «      }|�|| j                  z  }t        j                  dt         | j"                  |t%        j&                  |«      ¬«       |j)                  |«       ŒË t+        |«      d	k(  r|j)                  «       t+        |«      d
k\  rT|j-                  «       }|j-                  «       }	| j/                  |||	|«      }
|j)                  |
«       t+        |«      d
k\  rŒTt+        |«      dk(  sJ ‚|d	   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:  ró  rc   rt   r¦   rQ   rÙ   rX   rº   r  rB  Úwarn_explicitÚUserWarningr  r²   rD  ri  r|   rk  rî  )r‹   re   rì  Únontrivial_valuesÚsubnodero   ÚbvrÑ  rÜ  rÛ  rZ  s              r.   Úvisit_BoolOpzCodeGenerator.visit_BoolOp‰  sÈ  € Ø×3Ñ3×7Ñ7¼¸T¿W¹W»ÓFˆØÐØ×#Ñ#ØÐQ×XÑXÐY]×Y`ÑY`×YiÑYiÓjólð lð Ðà—{‘{ò 	0ˆGð —J‘J˜wÓ'ˆEÜ$ UÔ+ä˜%“[�Ø˜%‘K k°]Ò&Bà ’LØ˜$’J [°LÓ%@à ’Lð —:‘:×&Ñ&Ô(Ü$ T¨8°TÓ:�FØÐ)Ø $§/¡/Ñ1˜Ü×*Ñ*ØÜ!,Ø!%§¡Ø%Ü"Ÿ{™{¨4Ó0õð "×(Ñ(¨Õ/ð9	0ô< Ð Ó! QÒ&ð ×$Ñ$ UÔ+äÐ#Ó$¨Ò)Ø#×'Ñ'Ó)ˆCØ#×'Ñ'Ó)ˆCØ×+Ñ+¨D°+¸sÀCÓHˆCØ×$Ñ$ SÔ)ô	 Ð#Ó$¨Ó)ô Ð$Ó%¨Ò*Ð*Ð*Ø  Ñ#Ð#r0   r  r  r  c                 ó  — t        |«      r!|dk(  r| j                  j                  |d«      S t        |t        «      r|dvr|j
                  }t        ||«      }t        |«      rt        |t        «      rt        ||«      S |S )NÚT)r$   r   )ro   r,   )
rQ   r   ÚpermuterM   r   ro   rº   rO   r   r  )r‹   rÛ  r»   s      r.   rê  zCodeGenerator.get_Attribute¿  sq   € Ü˜SÔ! d¨c¢kØ—=‘=×(Ñ(¨¨fÓ5Ð5ä�cœ9Ô%¨$Ð6GÑ*GØ—)‘)ˆCÜ�s˜DÓ!ˆÜ˜CÔ ¤Z°´kÔ%BÜ! # tÓ,Ð,Øˆr0   c                 ót  — | j                  |j                  «      }t        |t        «      rr|j                  x}| j
                  j                  v rN| j
                  j                  |   }|j                  |k(  rn%|j                  x}| j
                  j                  v rŒN| j                  ||j                  «      S rL   )	r¦   ro   rM   r   rc   r’   r&  rê  r»   )r‹   re   rÛ  r+   s       r.   r¼   zCodeGenerator.visit_AttributeÊ  s’   € Ø�j‰j˜Ÿ™Ó$ˆÜ�cœ:Ô&àŸ<™<Ð'�4¨D¯L©L×,CÑ,CÑCØ—l‘l×-Ñ-¨dÑ3�Ø—<‘< 4Ò'Øð Ÿ<™<Ð'�4¨D¯L©L×,CÑ,CÒCð ×!Ñ! # t§y¡yÓ1Ð1r0   c                 óf   — d|j                   _        t        j                  j	                  | |«       y rÂ   )ro   r  r²   r~  r¶   rÃ   s     r.   Ú
visit_ExprzCodeGenerator.visit_ExprÔ  s"   € Ø $ˆ�
‰
ÔÜ�‰×%Ñ% d¨DÕ1r0   c                  ó   — y rL   rž   rÃ   s     r.   Úvisit_NoneTypezCodeGenerator.visit_NoneTypeØ  rÅ   r0   c           
      óp  — t        |j                  «      }t        |«      D �]  \  }}t        |t        j
                  «      rt        |j                  «      ||<   Œ:t        |t        j                  «      rŽ|j                  }| j                  |j                  «      }t        |«      s'| j                  |dt        t        |«      «      z   «      ‚|dk  rdndt        |«      z   dz   j                  |j                  «      ||<   Œât!        dj                  t        |«      «      «      ‚ dj#                  |«      S )Nz^Cannot evaluate f-string containing non-constexpr conversion values, found conversion of type r   z{}z{!ú}z:encountered unexpected node of type {} in a JoinedStr noder  )r\   rt   ra   rM   r²   r°  rR  ro   ÚFormattedValueÚ
conversionr¦   rU   r:  r,   Úchrró  ÚAssertionErrorr;   )r‹   re   rt   rE   ro   Úconversion_codeÚ	evaluateds          r.   Úvisit_JoinedStrzCodeGenerator.visit_JoinedStrÛ  s  € Ü�d—k‘kÓ"ˆÜ! &Ó)ó 	w‰HˆAˆuÜ˜%¤§¡Ô.Ü §¡Ó,��q’	Ü˜E¤3×#5Ñ#5Ô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��q’	ä$Ð%a×%hÑ%hÔimÐnsÓitÓ%uÓvÐvð	wð �w‰w�v‹Ðr0   c           	      ó"  •— |€y t        j                  «       5  t        j                  dt        «       t        j                  dt        «       | j
                  }| j                  j                  «       }|| _        t        |d«      rÕt        |d«      rÉ| j                  j                  | j                  | j                  |j                  z   |j                  «      }| j                  �@| j                  j                  | j                  j!                  | j                  |«      «       n| j                  j                  |«       | j                  j                  «       }	 t"        ‰| �I  |«      }|r"|| _        | j                  j                  |«       |cd d d «       S # t&        $ r ‚ t(        $ rU}t*        j,                  j.                  r‚ t'        | j0                  j2                  | j
                  t5        |«      «      d ‚d }~ww xY w# 1 sw Y   y xY w)Nrd  rÑ  rÒ  )rB  Úcatch_warningsÚsimplefilterÚDeprecationWarningÚPendingDeprecationWarningr,  r’   rY  rÙ  Ú
create_locr  r  rÑ  rÒ  r"  r#  rX  Úsuperr¦   r%   rê  r   rI  rë  r  rb   r>   )r‹   re   Ú	last_noder4  Úhere_locrG   rò  Ú	__class__s          €r.   r¦   zCodeGenerator.visití  s¡  ø€ Øˆ<ØÜ×$Ñ$Ó&ñ 	ô ×!Ñ! (Ô,>Ô?Ü×!Ñ! (Ô,EÔFØŸ™ˆIØ—|‘|×+Ñ+Ó-ˆHØ ˆDŒMÜ�t˜XÔ&¬7°4¸Ô+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G=Ç=HÈHÈHc                 ój   — | j                  |dj                  t        |«      j                  «      «      ‚)Nzunsupported AST node type: {})r:  ró  r,   rc   rÃ   s     r.   r¶   zCodeGenerator.generic_visit  s,   € Ø×Ñ Ð&E×&LÑ&LÌTÐRVËZ×M`ÑM`Ó&aÓbÐbr0   c                 ó  — t        |j                  «      }d|cxk  rdk  r"n t        d«      ‚t        |j                  «      rt        d«      ‚t	        | j                  |j                  d   «      «      }t        |t        «      st        d«      ‚|sQ|dk(  rd}n	 | j                  |j                  d   «      }t        | j                  j                  |t	        |«      «      ‚y # t        $ r}dt        |«      z   dz   }Y d }~ŒJd }~ww xY w)	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   rS  r–  r   r¦   rM   rÙ   r‰  rê  r>   r&   r  rb   )r‹   re   Ú	arg_countÚpassedr9  rò  s         r.   Úexecute_static_assertz#CodeGenerator.execute_static_assert  sò   € Ü˜Ÿ	™	“Nˆ	Ø�IÔ" Ô"ÜÐ[Ó\Ð\ô (+¨4¯=©=Ô'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Ã-DÄDc                 ó4   ‡ — dt         j                  fˆ fd„}|S )Nre   c                 ó  •‡ — ˆ fd„|j                   D «       D ��ci c]  \  }}|t        |«      “Œ }}}|j                  D �cg c]  }t        ‰ j                  |«      «      ‘Œ }}t	         ‰|i |¤Ž«      S c c}}w c c}w )Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrL   r¥   r¤  s     €r.   r©   z=CodeGenerator.static_executor.<locals>.ret.<locals>.<genexpr>.  s   øè ø€ Ò#U¸G D§J¡J¨w×$7Ñ#Uùrª   )rS  r   rg   r¦   r   )r‹   re   r+   ro   rX  ri   rg   Ú	python_fns   `      €r.   rG   z*CodeGenerator.static_executor.<locals>.ret+  s„   ù€ ó $VÀtÇ}Á}Ô#U÷á�D˜%ð Ô*¨5Ó1Ñ1ðˆCñ ð FJÇYÁYÖO¸cÔ(¨¯©°C«Õ9ÐOˆDÐOÜ™Y¨Ð4°Ñ4Ó5Ð5ùóùò Ps   ›A6Á!A<)r²   râ   )rA  rG   s   ` r.   Ústatic_executorzCodeGenerator.static_executor)  s   ø€ ð	6œCŸH™Hõ 	6ð ˆ
r0   r   )r   r	  rL   )Œrc   rœ   r�   r   r   r   rR  rŒ   r|   r\   r  r‘  r�  rM   rº   rÙ  r4  r   r  Úupdater   rS   Údevice_printÚbuiltin_minÚbuiltin_maxr:  r>  r/  Ú
contextlibÚcontextmanagerrU  r[  r   r   r   r]  ra  rc  Úsetrx  rj  rÍ   rƒ  r²   ÚListCompr�  rÄ   rÐ   r»  rÅ  rÇ  rË  rÇ   rÊ   rÀ   rá  rã  rå  rî  rô  ÚAddÚSubÚMultÚDivÚFloorDivÚModÚPowÚLShiftÚRShiftÚBitAndÚBitOrÚBitXorrò  r
   Úoperatorr  r*  r7  rÓ   rÕ   r\  r^  rg  ÚEqÚNotEqÚLtÚLtEÚGtÚGtErd  Úcmpoprs  ÚUSubÚUAddÚNotÚInvertrq  Úunaryoprm  r”  rš  rÊ  r�  r¡  rÓ  r×  rÙ  r	   rÛ  rß  rö  rë  r—  rØ   r  ÚBoolOpr  ÚAndÚOrr  Úbooloprê  r¼   r"  r$  r-  r¦   r¶   râ   r=  rB  Úexperimental.gluonÚttglÚstatic_assertÚstatic_printr5  r	  r<  r   Ú__classcell__)r§   r2   r7  s   00@r.   r  r  "  s›  ø… ð /3¸eÐfjØ°ÐQUÐbcò=0È+ð =0ØU]Ð^bÑUcð=0àAIÈ#Áó=0ðB �t˜U E¨3°
¸GÀWÐM÷)àð 	
�
‰
�A‰ó)Ð�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r  c                 óâ  ‡— d gt        | j                  «      z  }|j                  j                  «       D ]/  \  }}	| j                  j	                  |«      }
t        |	d «      ||
<   Œ1 ˆfd„Š|j                  j                  «       D ]  \  }} ‰|t        |«      d d d…   |«       Œ  t        g ||j                  |j                  «      }t        | «      \  }}ddlm} t        d„ |j                  «      }|D �ci c]"  }| j                  |d      |j                  |   “Œ$ }}|j                  }  |dddg«      ||«      }t        ||| j                  «       | j!                  |«      | d	||||||| j#                  «       ¬
«      }|j%                  | j'                  «       «       |j(                  }||_        |j-                  «       s&| j#                  «       st/        |«       t1        d«      ‚|S c c}w )Nc                 óô   •— |j                  «       }t        |«      dk(  rLt        | t        «      rt	        |«      j
                  | |<   y t	        |«      j
                  | j                  |<   y  ‰| |   ||«       y rz   )rk  r|   rM   r\   r   r,   rr   )ÚargumentÚindicesro   ÚindexÚapply_constexpr_typess       €r.   rr  z*ast_to_ttir.<locals>.apply_constexpr_typesG  sa   ø€ Ø—‘“ˆÜˆw‹<˜1ÒÜ˜(¤DÔ)Ü"+¨EÓ"2×"7Ñ"7�˜’ä(1°%Ó(8×(=Ñ(=�—‘˜uÒ%á! (¨5¡/°7¸EÕBr0   rœ  r   )Ú
namedtuplec                 ó   — t        | «      dk(  S rW   )r|   )rp   s    r.   rô   zast_to_ttir.<locals>.<lambda>X  s   € œc !›f¨™k€ r0   ÚSpecializationProxyrA   rü  T)r¢   r+  r  r  r  r  r$  r%  r&  r  r  z error encountered during parsing)r|   rd   rü  r„   rq  r   rA   r\   rä   rè   r   Úcollectionsrs  Úfilterr  rè  r>   r  r¦   ré  r  r  Úverifyr5  r±  )rf   rb   r  r$  r%  r&  r  rç   r2  rp   rh   ró   ro   r)  r  r  rs  ÚleavesrE   rA   rü  ÚproxyrŠ   rr  s                          @r.   Úast_to_ttirr{  @  sÏ  ø€ Ø�œ˜RŸ\™\Ó*Ñ*€Ià—‘×#Ñ#Ó%ò ,‰ˆˆ1Ø�l‰l× Ñ  Ó#ˆÜ" 1 dÓ+ˆ	�#Šð,ôCð —}‘}×*Ñ*Ó,ò B‰ˆˆeÙ˜i¬¨d«±D°b°DÑ)9¸5ÕAðBô ˜B 	¨3¯=©=¸#¿)¹)ÓD€IÜ0°Ó4Ñ€Iˆzå&ÜÑ)¨3¯=©=Ó9€FØ?EÖF¸!�—‘˜a ™dÑ# S§]¡]°1Ñ%5Ñ5ÐF€IÐFØ—‘€IØI‰JÐ,¨{¸KÐ.HÓIÈ)ÐU^Ó_€EÜ˜g y¸×9MÑ9MÓ9OÐ_a×_fÑ_fÐglÓ_mØ%'°4À9ÐYcÐmtØ*5À*ÐU[Ðfh×fqÑfqÓfsôu€Ið ‡O�O�B—H‘H“JÔØ×Ñ€Fà€F„NØ�=‰=Œ?Ø�{‰{Œ}Ü�&ŒMÜÐ=Ó>Ð>Ø€Mùò Gs   Ã8'G,rL   )Nr²   r   rG  ro  rå  r)   rB  rL  Ú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,   rH  r‚   r†   rˆ   r~  r    rä   r  r  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   