Ë
    1²jK ã                   óž  — 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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/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=e>fd„Z?d„ Z@dee$   fd„ZAdeej„                     dee%   fd„ZCe7eD eEd«      h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)Úapply_with_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/html/ia-enhanced/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}«      }|j                  dd«      }|j                  dd«      j                  dd«      }| › d|› �}|�||j                  «       z  }|S c c}w )NÚ_ú'Ú_sq_ú[ú]Ú__)ÚjoinÚmangleÚreplace)r*   Úarg_tysÚcaller_contextÚtyÚmangled_argsÚrets         r-   Ú	mangle_fnr?       s…   € à—8‘8°7Ö;¨R˜RŸY™Y�[Ò;Ó<€LØ×'Ñ'¨¨VÓ4€Là×'Ñ'¨¨SÓ1×9Ñ9¸#¸sÓC€LØˆF�"�\�NÐ
#€CØÐ!Øˆ~×$Ñ$Ó&Ñ&ˆØ€Jùò <s   �B ÚoÚreturnc                 ó"   — t        | t        «      S ©N)Ú
isinstancer   ©r@   s    r-   Ú_is_triton_valuerF   ,   s   € Ü�aœÓ$Ð$r/   c                 ó"   — t        | t        «      S rC   )rD   r   rE   s    r-   Ú_is_triton_tensorrH   0   s   € Ü�aœÓ Ð r/   c                 ól   — | d u xs/ t        | t        t        j                  j                  t
        f«      S rC   )rD   r   r   ÚcoreÚdtyper   rE   s    r-   Ú_is_constexprrL   4   s)   € Ø�ˆ9ÒTœ
 1¤y´(·-±-×2EÑ2EÄ{Ð&SÓTÐTr/   c                 ó†   — t        | «      xr5 | j                  j                  «       xr | j                  j                  dk7  S ©Nr#   )rH   r+   Úis_blockÚnumelrE   s    r-   Ú_is_non_scalar_tensorrQ   8   s/   € Ü˜QÓÒM Q§V¡V§_¡_Ó%6Ò%L¸1¿6¹6¿<¹<È1Ñ;LÐMr/   c                 ó.   — t        | t        t        f«      S rC   )rD   Úlistr   rE   s    r-   Ú_is_list_likerT   <   s   € Ü�aœ$¤˜Ó'Ð'r/   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Ú	enumeraterL   rQ   r&   ÚsrcÚ__name__Ú	arg_names)ÚnodeÚfnÚargsÚidxÚargs        r-   Ú_check_fn_argsra   @   s‚   € Ø	‡{‚{Ü! $›ò 	‰HˆC�Ü  Õ%Ô*?ÀÕ*DÜ2Ø—F‘F˜DØ §¡˜}Ð,iÐjl×jvÑjvÐwzÑj{Ði|Ð|}ð  Bð  ~Cð  Dóð ñ	ð r/   c                 ó"   — | s | |«       «      ‚y rC   © )ÚcondÚmsg_fnÚcategorys      r-   Ú_checkrg   J   s   € ÙÙ‘v“xÓ Ð ð r/   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+   Ú_fieldsrD   r   r   Úfieldsr   Ú
tuple_type)Úvaluer]   rj   ÚvÚvalsÚtypess         r-   Ú_apply_to_tuple_valuesrp   O   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 rC   )Ú_flatten_ir)rq   Úhandlesrm   s      r-   Úflatten_values_to_irru   ]   s'   € Ø€GØò ˆØ	�‰�gÕðà€Nr/   rt   ro   c              #   óp   K  — d}|D ]  }|j                  | |«      \  }}|–— Œ |t        | «      k(  sJ ‚y ­w©Nr   )Ú_unflatten_irÚlen)rt   ro   Úcursorr<   rl   s        r-   Úunflatten_ir_valuesr{   d   sI   è ø€ Ø€FØò ˆØ×(Ñ(¨°&Ó9‰ˆˆvØ‹ðð ”S˜“\Ò!Ð!Ñ!ùs   ‚46c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)Úenter_sub_regionc                 ó   — || _         y rC   )Ú	generator)Úselfr   s     r-   Ú__init__zenter_sub_region.__init__q   s	   € Ø"ˆ�r/   c                 óˆ  — t        | j                  j                  «      | _        t        | j                  j                  «      | _        i | j                  _        | j                  j                  j                  «       | _        | j                  j                  j                  «       | _
        | j                  | j                  fS rC   )Údictr   Ú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__t   s…   € ä˜DŸN™N×1Ñ1Ó2ˆŒÜ˜dŸn™n×7Ñ7Ó8ˆŒØ$&ˆ�‰Ô!Ø ŸN™N×2Ñ2×FÑFÓHˆÔØ ŸN™N×2Ñ2×FÑFÓHˆÔØ�|‰|˜T×.Ñ.Ð.Ð.r/   c                 óÎ   — | j                   j                  j                  | j                  «       | j                  | j                   _        | j                  | j                   _        y rC   )r   rˆ   Úrestore_insertion_pointrŒ   r…   r„   r‡   r†   )r€   r^   Úkwargss      r-   Ú__exit__zenter_sub_region.__exit__}   s@   € Ø�‰×Ñ×6Ñ6°t×7HÑ7HÔIØ $§¡ˆ�‰ÔØ$(§N¡Nˆ�‰Õ!r/   N)rZ   Ú
__module__Ú__qualname__r�   r�   r‘   rc   r/   r-   r}   r}   o   s   „ ò#ò/ó3r/   r}   c                   óž  — e Zd Zd„ Zdefd„Zdefd„Zdefd„Zdej                  defd„Z
dej                  defd„Zdej                  defd	„Zdej                  defd
„Zdej"                  defd„Zdej&                  defd„Zdej*                  defd„Zdej.                  defd„Zdej2                  defd„Zdej6                  defd„Zy)ÚContainsReturnCheckerc                 ó   — || _         y rC   )Úgscope)r€   r—   s     r-   r�   zContainsReturnChecker.__init__†   s	   € Øˆ�r/   rA   c                 ó,   ‡ — t        ˆ fd„|D «       «      S )Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrC   ©Ú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   ø€ ÜÓ/¨$Ô/Ó/Ð/r/   c                  ó   — y©NFrc   )r€   r]   s     r-   Ú_visit_functionz%ContainsReturnChecker._visit_functionŒ   s   € ð r/   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_fieldsrD   rS   ÚASTr›   )r€   r\   r>   r1   rl   Ú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¨Ó.‘ð	/ð ˆ
r/   r\   c                 óZ  — t        |j                  t        j                  «      rm|j                  j                  | j
                  v rJ| j
                  |j                  j                     }t        ||j                  «      }| j                  |«      S y| j                  |j                  «      S r¤   )
rD   rl   r§   ÚNameÚidr—   ÚgetattrÚattrr¥   r›   )r€   r\   rl   r]   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˜$Ÿ*™*Ó%Ð%r/   c                 óÔ   — t        |j                  «      t        j                  u ry|j                  | j
                  v r*| j
                  |j                     }| j                  |«      S yr¤   )r+   Úctxr§   ÚStorer®   r—   r¥   )r€   r\   r]   s      r-   Ú
visit_Namez ContainsReturnChecker.visit_Name¬   sO   € Ü�—‘‹>œSŸY™YÑ&ØØ�7‰7�d—k‘kÑ!Ø—‘˜TŸW™WÑ%ˆBØ×'Ñ'¨Ó+Ð+Ør/   c                  ó   — y©NTrc   ©r€   r\   s     r-   Úvisit_Returnz"ContainsReturnChecker.visit_Return´   ó   € Ør/   c                  ó   — yr¤   rc   r¸   s     r-   Úvisit_Assignz"ContainsReturnChecker.visit_Assign·   ó   € ð r/   c                  ó   — yr¤   rc   r¸   s     r-   Úvisit_AugAssignz%ContainsReturnChecker.visit_AugAssign¼   r½   r/   c                 ó8   — | j                  |j                  «      S rC   ©r¢   r¡   r¸   s     r-   Úvisit_Modulez"ContainsReturnChecker.visit_ModuleÁ   ó   € Ø× Ñ  §¡Ó+Ð+r/   c                 ó8   — | j                  |j                  «      S rC   rÁ   r¸   s     r-   Úvisit_FunctionDefz'ContainsReturnChecker.visit_FunctionDefÄ   rÃ   r/   c                 ó’   — | j                  |j                  «      }|j                  r|xs | j                  |j                  «      }|S rC   )r¢   r¡   Úorelse)r€   r\   r>   s      r-   Úvisit_IfzContainsReturnChecker.visit_IfÇ   s=   € ð ×Ñ §	¡	Ó*ˆØ�;Š;ØÒ7˜×*Ñ*¨4¯;©;Ó7ˆCØˆ
r/   c                 ór   — | j                  |j                  «      xs | j                  |j                  «      S rC   )r›   r¡   rÇ   r¸   s     r-   Úvisit_IfExpz!ContainsReturnChecker.visit_IfExpÔ   s'   € Ø�z‰z˜$Ÿ)™)Ó$Ò?¨¯
©
°4·;±;Ó(?Ð?r/   c                 ó8   — | j                  |j                  «      S rC   )r›   Úfuncr¸   s     r-   Ú
visit_Callz ContainsReturnChecker.visit_Call×   s   € Ø�z‰z˜$Ÿ)™)Ó$Ð$r/   N)rZ   r’   r“   r�   Úboolr¢   r¥   r«   r§   Ú	Attributer±   r­   rµ   ÚReturnr¹   ÚAssignr¼   Ú	AugAssignr¿   ÚModulerÂ   ÚFunctionDefrÅ   ÚIfrÈ   ÚIfExprÊ   ÚCallrÍ   rc   r/   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ô %r/   r•   c                   ó¾   — e Zd Zd„ Zdej
                  dee   deej                     fd„Z	dej
                  deej                     fd„Z
dej
                  fd„Zd„ Zy	)
ÚASTFunctionc                 ó.   — || _         || _        || _        y rC   )Ú	ret_typesÚ	arg_typesÚattrs)r€   rÛ   rÜ   rÝ   s       r-   r�   zASTFunction.__init__Ý   s   € Ø"ˆŒØ"ˆŒØˆ�
r/   rˆ   ro   rA   c                 óB   — g }|D ]  }|€Œ|j                  ||«       Œ |S rC   )Ú_flatten_ir_types)r€   rˆ   ro   Úir_typesr<   s        r-   Úflatten_ir_typeszASTFunction.flatten_ir_typesâ   s5   € ØˆØò 	4ˆBØˆzØØ× Ñ  ¨(Õ3ð	4ð ˆr/   c                 ó:   — | j                  || j                  «      S rC   )rá   rÛ   )r€   rˆ   s     r-   Úreturn_types_irzASTFunction.return_types_irê   s   € Ø×$Ñ$ W¨d¯n©nÓ=Ð=r/   c                 ó€   — | j                  || j                  «      }| j                  |«      }|j                  ||«      S rC   )rá   rÜ   rã   Úget_function_ty)r€   rˆ   Úarg_types_irÚret_types_irs       r-   Ú	serializezASTFunction.serializeí   s;   € à×,Ñ,¨W°d·n±nÓEˆØ×+Ñ+¨GÓ4ˆØ×&Ñ& |°\ÓBÐBr/   c                 óø   ‡ ‡‡‡‡‡— ˆfd„Š ‰‰ j                   «      Št        ‰j                  «       «      D �cg c]  }‰j                  |«      ‘Œ c}ŠdŠˆˆˆˆ ˆfd„}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 rC   )rD   rS   r   r   rk   r   )r<   Ú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&r   c                 ó¼   •— ‰	j                   j                  | g «      }|D ]  \  }}‰j                  ‰||«       Œ |j                  ‰‰«      \  }Št	        ‰
| |«       y rC   )rÝ   ÚgetÚset_arg_attrrx   r!   )Úpathr<   Ú
attr_specsÚ	attr_nameÚattr_valÚvalrz   r]   rt   r€   rn   s         €€€€€r-   Úbuild_valuez,ASTFunction.deserialize.<locals>.build_valueþ   sa   ø€ ð Ÿ™Ÿ™¨¨bÓ1ˆJØ'1ò =Ñ#�	˜8Ø—‘ ¨	°8Õ<ð=ð ×*Ñ*¨7°FÓ;‰KˆC�Ü˜d D¨#Õ.r/   )rÜ   ÚrangeÚget_num_argsr^   r    )r€   r]   Úirõ   rz   rt   rì   rn   s   ``  @@@@r-   ÚdeserializezASTFunction.deserializeó   sf   ý€ ô	,ñ
 ˜TŸ^™^Ó,ˆÜ',¨R¯_©_Ó->Ó'?Ö@ !�2—7‘7˜1•:Ò@ˆØˆ÷	/ð 	/ô 	˜Ÿ™¨Ô4Øˆùò As   ¹A7N)rZ   r’   r“   r�   r   rˆ   r   r   r+   rá   rã   rè   rù   rc   r/   r-   rÙ   rÙ   Û   sj   „ òð
¨¯
©
ð ¸4À	¹?ð ÈtÐTV×T[ÑT[É}ó ð> r§z¡zð >°d¸2¿7¹7±mó >ðC §¡ó Cór/   rÙ   T)Úfrozenc                   ó"   — e Zd ZU eed<   eed<   y)ÚBoundJITMethodÚ__self__Ú__func__N)rZ   r’   r“   r   Ú__annotations__r   rc   r/   r-   rü   rü     s   … àÓØÔr/   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;d-„ Z<d.„ Z=d/„ Z>e+j~                  d0e+j€                  d1e+j‚                  d2e+j„                  d3e+j†                  d4e+jˆ                  d5e+jŠ                  d6e+jŒ                  d7e+jŽ                  d8e+j�                  d9e+j’                  d:e+j”                  d;iZKeeLe+jš                     ef   ed<<   d=„ ZNd>„ ZOd?„ ZPd@„ ZQdA„ ZRdB„ ZSdC„ ZTdD„ ZUe+j¬                  dEe+j®                  dFe+j°                  dGe+j²                  dHe+j´                  dIe+j¶                  dJiZ\eeLe+jº                     ef   edK<   dL„ Z^e+j¾                  dMe+jÀ                  dNe+jÂ                  dOe+jÄ                  dPiZceeLe+jÈ                     ef   edQ<   dR„ ZedS„ ZfdT„ ZgdU„ ZhdV„ ZidW„ ZjdX„ ZkdY„ ZldZ„ Zmdeneef   fd[„Zodefd\„Zpdsd]efd^„Zqd_„ Zrd`„ Zsda„ Ztdb„ Zude+jì                  fdc„Zwe+jð                  dde+jò                  deiZzeeLe+jö                     ef   edf<   dg„ Z|dh„ Z}di„ Z~dj„ Zdk„ Z€ˆfdl„Z�dm„ Z‚de+�j                  ddfdn„Z„do„ Z…dpdql†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dr<   ˆxZŽS c c}} w )tÚCodeGeneratorNFr   )ÚmoduleÚ	is_kernelÚfunction_typesrW   r;   Ú	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|| _        || _        g | _        g | _        i | _        |j3                  «       D ]†  \  }}t5        |t6        «      r*|j9                  |j:                  |«      | j0                  |<   Œ@t=        |dd«      }||v r't=        ||   |j:                  «      | j0                  |<   Œx|| j0                  |<   Œˆ i | _        || _         |r#||jC                  d«      dz   d  }tE        |d«      }|| _#        || _$        d | _%        || _&        || _'        g | _(        d | _)        i | _*        | jW                  «       | _,        d | _-        d	| _.        y )
Nr   )ÚGluonSemantic)ÚTritonSemanticr#   r’   Ú ú.Ú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Ú	prototypeÚreturn_valsÚ
return_ipsr—   ÚitemsrD   r   rî   rZ   r¯   r„   r  Úrfindr.   Úfunction_namer  Úcur_noderW   r;   Ú	scf_stackÚret_typer†   Ú_define_name_lookupÚdereference_namer]   Úvisiting_arg_default_value)r€   r  r  r—   r   r  r  r  r  r  r  r  r  rW   r;   r  r  r	  r
  Úkrm   Ú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ˆÔØ"ˆŒà46ˆÔØ?AˆŒàˆŒØ—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ˆÕ'r/   Úbuiltin_namespaceÚprintÚminÚmaxc                 óD   — t        | j                  j                  ||«      S rC   )r&   r  rY   )r€   r\   Úmessages      r-   Ú_unsupportedzCodeGenerator._unsupported`  s   € Ü+¨D¯K©K¯O©O¸TÀ7ÓKÐKr/   c                 ór   — t        «       }| j                  j                  ||«      }||u ryt        |«      ryy)NFT)Úobjectr—   rî   rL   )r€   r*   Úabsent_markerrô   s       r-   Ú_is_constexpr_globalz"CodeGenerator._is_constexpr_globalc  s6   € Ü›ˆØ�k‰k�o‰o˜d MÓ2ˆØ�-ÑØä˜ÔØàr/   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 rC   )r„   rî   )r*   Úabsentr€   s     €r-   Úlocal_lookupz7CodeGenerator._define_name_lookup.<locals>.local_lookupp  s   ø€ à—;‘;—?‘? 4¨Ó0Ð0r/   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    r)  r+   r   rD   r   r¯   Ú
startswithr   rK   r"   r3  r&  r   ÚcompilationÚallow_non_constexpr_globalsÚ	NameErrorÚtextwrapÚdedentr9   )r*   r6  rô   r€   s      €r-   Úglobal_lookupz8CodeGenerator._define_name_lookup.<locals>.global_lookupt  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r/   rA   c                 ó‚   •— ‰}‰‰‰j                   j                  fD ]  } || |«      }||usŒ|c S  t        | › d�«      ‚)Nz is not defined)r)  rî   r@  )r*   r6  Úlookup_functionrl   r2  rC  r7  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Ð5r/   )Ústrr1  r   )r€   rF  r2  rC  r7  s   ` @@@r-   r$  z!CodeGenerator._define_name_lookupn  sG   û€ ð	1œsõ 	1ð	I¤õ 	IôB ›ˆð	6œcð 	6¤c÷ 	6ð 	6ð Ðr/   c              #   ó0   K  — || _         d –— d | _         y ­wrC   )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 rC   )
rD   r   rl   Úblock_argumentr  rˆ   Úcreate_name_locÚget_locrF   rs   )r€   rô   r*   rt   Ú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ð #r/   r*   rl   rA   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*   rl   s      r-   Ú	set_valuezCodeGenerator.set_value°  s    € ð "ˆ�‰�DÑØ %ˆ�‰˜Òr/   c                 ór   — | j                   j                  «       }| j                   j                  «       }||fS rC   )rˆ   rN  r‹   )r€   ÚlocÚips      r-   Ú_get_insertion_point_and_locz*CodeGenerator._get_insertion_point_and_loc¹  s1   € ð �l‰l×"Ñ"Ó$ˆØ�\‰\×-Ñ-Ó/ˆØ�3ˆwˆr/   c                 óp   — | j                   j                  |«       | j                   j                  |«       y rC   )rˆ   r�   r  )r€   rU  rT  s      r-   Ú_set_insertion_point_and_locz*CodeGenerator._set_insertion_point_and_locÁ  s&   € Ø�‰×,Ñ,¨RÔ0Ø�‰×Ñ˜SÕ!r/   Ú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  rF   r„   Ú_verify_loop_carried_variableru   r+   Úextendr†   Úcopy)r€   r\   r…   rY  Ú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Ð,Ð,r/   c                 óˆ   — t        |«      s|g}|D ]/  }| j                  |«       t        |t        j                  «      sŒ/ y  y rC   )rT   r›   rD   r§   rÐ   )r€   ÚstmtsÚstmts      r-   r_  z&CodeGenerator.visit_compound_statementð  s?   € ä˜UÔ#Ø�GˆEØò 	ˆDØ�J‰J�tÔô ˜$¤§
¡
Õ+Ùñ	r/   c                 óD   — t         j                  j                  | |«       y rC   ©r§   ÚNodeVisitorr«   r¸   s     r-   rÂ   zCodeGenerator.visit_Moduleû  ó   € Ü�‰×%Ñ% d¨DÕ1r/   c                 óÆ   — | j                  |j                  «      }|�J ‚t        j                  |j                  D �cg c]  }| j                  |«      ‘Œ c}«      }|S c c}w rC   )r›   r³   r   r   Úelts)r€   r\   r³   Úeltrv  s        r-   Ú
visit_ListzCodeGenerator.visit_Listþ  sN   € Ø�j‰j˜Ÿ™Ó"ˆØˆ{Ðˆ{Ü�~‰~¸$¿)¹)ÖD°3˜tŸz™z¨#�ÒDÓEˆØˆùò Es   ½Ar\   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)ry   Ú
generatorsÚ
ValueErrorr›   ÚiterrD   Útl_tupleÚNotImplementedErrorrR  Útargetr®   r^  rw  )r€   r\   Ú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ô ˜Ó Ð r/   c                 óZ  — | j                  |j                  «      }|€t        j                  d «      }| j                  j                  |«       | j                  j                  | j                  «       «       | j                  j                  «       }| j                  j                  |«       y rC   )r›   rl   r   r   r  r^  r  rV  rˆ   r\  Úset_insertion_point_to_end)r€   r\   Ú	ret_valueÚpost_ret_blocks       r-   r¹   zCodeGenerator.visit_Return  s   € Ø—J‘J˜tŸz™zÓ*ˆ	ØÐÜ ×*Ñ*¨4Ó0ˆIØ×Ñ×Ñ 	Ô*Ø�‰×Ñ˜t×@Ñ@ÓBÔCð Ÿ™×2Ñ2Ó4ˆØ�‰×/Ñ/°Õ?r/   c                 ó`  ‡ ‡‡‡‡— t        ‰ j                  «      t        ‰ j                  «      k(  sJ ‚‰ j                  st        j                  d «      S t        j
                  Šˆfd„Šˆˆˆ ˆfd„Š‰ j                  D �cg c]  }|j                  ‘Œ c}Št        j                  ‰‰«      S c c}w )Nc                 ó*   •— d| › d|› d�}|d‰› �z  }|S )NzReturn type mismatch: ú and z. zNote all return types were: rc   )ÚaÚbÚerrÚreturn_typess      €r-   Ú	error_msgz3CodeGenerator.decide_return_type.<locals>.error_msg'  s.   ø€ Ø*¨1¨#¨U°1°#°RÐ8ˆCØÐ1°,°Ð@Ñ@ˆCØˆJr/   c           
      óÈ  •‡ ‡— t        ‰ ‰j                  «      rŽt        t        ‰‰j                  «      ˆ ˆˆfd„«       t        ‰ j                  ‰j                  k(  ˆ ˆˆfd„«       ‰j                  t	        ‰ ‰«      D ��cg c]  \  }} ‰||«      ‘Œ c}}‰ j                  ¬«      S t        ‰ ‰j
                  «      r>‰ ‰k(  r‰ S ‰j                  j                  ‰ «      Š ‰j                  j                  ‰«      ŠnLt        ‰‰j
                  «      r6‰j                  j                  ‰ «      Š ‰j                  j                  ‰«      Št        ‰ ‰k(  ˆ ˆˆfd„«       ‰ S c c}}w )Nc                  ó   •—  ‰‰ ‰«      S rC   rc   ©rŠ  r‹  rŽ  s   €€€r-   ú<lambda>zGCodeGenerator.decide_return_type.<locals>.common_type.<locals>.<lambda>.  s   ø€ ¹YÀqÈ!»_€ r/   c                  ó   •—  ‰‰ ‰«      S rC   rc   r‘  s   €€€r-   r’  zGCodeGenerator.decide_return_type.<locals>.common_type.<locals>.<lambda>/  s   ø€ ±Y¸qÀ!³_€ r/   )rj   c                  ó   •—  ‰‰ ‰«      S rC   rc   r‘  s   €€€r-   r’  zGCodeGenerator.decide_return_type.<locals>.common_type.<locals>.<lambda>9  s   ø€ ¡9¨Q°£?€ r/   )rD   rk   rg   rj   ÚzipÚconstexpr_typer  Úto_tensor_type)rŠ  r‹  ÚaiÚbiÚcommon_typerŽ  r€   Útls   ``  €€€€r-   rš  z5CodeGenerator.decide_return_type.<locals>.common_type,  s  ú€ Ü˜!˜RŸ]™]Ô+Ü”z ! R§]¡]Ó3Õ5LÔMÜ�q—x‘x 1§8¡8Ñ+Õ-DÔEØ—}‘}ÌÈAÈqË	×%R¹f¸bÀ"¡k°"°bÕ&9Ó%RÐ[\×[cÑ[c�}ÓdÐdÜ˜!˜R×.Ñ.Ô/Ø˜’6Ø�HØ—M‘M×0Ñ0°Ó3�Ø—M‘M×0Ñ0°Ó3‘Ü˜A˜r×0Ñ0Ô1Ø—M‘M×0Ñ0°Ó3�Ø—M‘M×0Ñ0°Ó3�Ü�1˜‘6Õ2Ô3ØˆHùó &Ss   ÂE
)	ry   r  r  r   r–  rJ   r+   Ú	functoolsÚreduce)r€   rë   rš  rŽ  r�  r›  s   ` @@@@r-   Údecide_return_typez CodeGenerator.decide_return_type   s†   ü€ Ü�4×#Ñ#Ó$¬¨D¯O©OÓ(<Ò<Ð<Ð<Ø×ÒÜ×*Ñ*¨4Ó0Ð0ä�]‰]ˆô	÷
	ð  )-×(8Ñ(8Ö9 1˜Ÿ›Ò9ˆÜ×Ñ ¨\Ó:Ð:ùò :s   Á?B+c           
      óv  ‡‡— ‰j                   ‰k(  r‰S t        j                  }t        ‰|j                  «      rkt        ‰|j
                  «      sJ ‚|j	                  t        ‰j                  ‰j                  «      D ��cg c]  \  }}| j                  ||«      ‘Œ c}}‰«      S t        ‰|j                  «      r[t        ‰|j                  «      rt        ‰j                   ‰k(  ˆˆfd„«       ‰S | j                  j                  ‰j                  ‰«      S t        ‰j                   ‰k(  ˆˆfd„«       ‰S c c}}w )Nc                  ó(   •— d‰j                   › d‰ › �S ©NzReturn type mismatch r‰  ©r+   ©r<   rl   s   €€r-   r’  z'CodeGenerator.cast_to.<locals>.<lambda>L  s   ø€ Ð3HÈÏÉÈÐTYÐZ\ÐY]Ð1^€ r/   c                  ó(   •— d‰j                   › d‰ › �S r¡  r¢  r£  s   €€r-   r’  z'CodeGenerator.cast_to.<locals>.<lambda>O  s   ø€ Ð+@ÀÇÁÀÈEÐRTÐQUÐ)V€ r/   )r+   r   rJ   rD   r   rk   r•  rq   ro   Úcast_tor   r–  rg   r  Úscalar_constantrl   )r€   rl   r<   r›  rm   Úts    ``   r-   r¥  zCodeGenerator.cast_to?  sò   ù€ Ø�:‰:˜ÒØˆLä�]‰]ˆÜ�e˜RŸX™XÔ&Ü˜b "§-¡-Ô0Ð0Ð0Ø—8‘8Ü03°E·L±LÀ"Ç(Á(Ó0K×L©¨¨1�—‘˜a Õ#ÓLØóð ô �e˜RŸ\™\Ô*Ü˜"˜b×/Ñ/Ô0Ü�u—z‘z RÑ'Ô)^Ô_Ø�Ø—=‘=×0Ñ0°·±¸bÓAÐAÜˆu�z‰z˜RÑÔ!VÔWØˆùó Ms   Â D5
c                 óŒ  — | j                  «       }| j                  «       \  }}t        | j                  «      t        | j                  «      k(  sJ ‚t        | j                  | j                  «      D ]w  \  }} | j                  |Ž  | j                  j                  «       j                  «       rJ ‚| j                  ||«      }t        |g«      }| j                  j                  |«       Œy | j                  ||«       || _        | j                  j                  «       j                  «       rJ ‚t        | j                  t        j                   «      r/t#        | j                  j$                  «      | j&                  _        n| j                  g| j&                  _        | j*                  j-                  | j&                  j/                  | j                  «      «       | j                  j                  | j&                  j1                  | j                  «      D �cg c]  }| j                  j3                  |«      ‘Œ c}«       y c c}w rC   )rž  rV  ry   r  r  r•  rX  rˆ   r‰   Úhas_terminatorr¥  ru   r>   r#  rD   r   rk   rS   ro   r  rÛ   r]   Ú
reset_typerè   rã   Úcreate_poison)r€   Úreturn_typerU  rT  r>   Úret_ipÚret_handlesr<   s           r-   Úhandle_returnszCodeGenerator.handle_returnsR  s¨  € Ø×-Ñ-Ó/ˆØ×3Ñ3Ó5‰ˆˆCä�4×#Ñ#Ó$¬¨D¯O©OÓ(<Ò<Ð<Ð<Ü˜t×/Ñ/°·±ÓAò 	*‰KˆC�Ø-ˆD×-Ñ-¨vÑ6Ø—|‘|×7Ñ7Ó9×HÑHÔJÐJÐJØ—,‘,˜s KÓ0ˆCÜ.°¨uÓ5ˆKØ�L‰L×Ñ˜[Õ)ð	*ð 	×)Ñ)¨"¨cÔ2Ø#ˆŒØ—<‘<×3Ñ3Ó5×DÑDÔFÐFÐFÜ�d—m‘m¤X×%8Ñ%8Ô9Ü'+¨D¯M©M×,?Ñ,?Ó'@ˆD�N‰NÕ$à(,¯© ˆD�N‰NÔ$Ø�‰×Ñ˜4Ÿ>™>×3Ñ3°D·L±LÓAÔBØ�‰×ÑÀ4Ç>Á>×CaÑCaÐbf×bnÑbnÓCoÖp¸R˜$Ÿ,™,×4Ñ4°RÕ8ÒpÕqùÒps   È"I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                  «       | jE                  «        |r| j"                  jG                  |«       y y # d| _        w xY w)Nz,nested function definition is not supported.éÿÿÿÿr#   )r®   r³   ©Útargetsrl   )r  rl   Ú
annotationTFÚpublicÚprivate)$r›   r^   r]   r/  rX   Údefaultsr´  r`   r§   r­   r´   rÑ   Ú	AnnAssignr&  r  r  rè   rˆ   Úget_or_insert_functionr  r   rW   Ú	push_backÚadd_entry_blockrù   r;   Úinitialize_calleer•  rP  rR  r‰   r]  r_  r¡   r¯  r„  )r€   r\   r[   Úkwarg_namesrø   Údefault_valueÚarg_noder´  r*   Ú	st_targetÚ	init_nodeÚ
visibilityÚfn_tyÚentryÚ
arg_valuesÚarg_nameÚ	arg_valueÚ	insert_pts                     r-   rÅ   zCodeGenerator.visit_FunctionDefh  sd  € Ø!%§¡¨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ð 	×ÑÔáØ�L‰L×3Ñ3°IÕ>ð øð/ 38�Õ/ús   Ã:&K7Ë7	L c                 ó�   — g }|j                   D ]  }|| j                  |«      gz  }Œ | j                  |j                  «      }||fS rC   )r^   r›   Úkwarg)r€   r\   r[   r`   r½  s        r-   Úvisit_argumentszCodeGenerator.visit_arguments•  sL   € Øˆ	Ø—9‘9ò 	+ˆCØ˜$Ÿ*™* S›/Ð*Ñ*‰Ið	+à—j‘j §¡Ó,ˆØ˜+Ð%Ð%r/   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rC   )r*   r`   )rœ   Úpr\   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§   rs  r«   Únextr  ÚparamsÚis_constexprÚdo_not_specializeÚdo_not_specialize_on_alignmentr$   rY   r`   )r€   r\   Ú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ˆr/   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  rl   r   r„   r{  r¼   )r€   r\   r´  r  rl   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Ñ&Ð&à× Ñ  Ó&Ð&r/   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)rD   r³   r§   r´   Ú	SubscriptÚvisit_Subscript_Storer	   rX   rv  ÚassignTargetrq   rÏ   r~  r­   rR  r›   )r€   r  rl   rø   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Õ1r/   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 rC   )	rD   r   r   rp   rK   r   rF   r  Ú	to_tensor)rl   Ú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�ØˆLr/   r#   r   )rD   r§   r¸  r  r³  ry   r­   rJ  r®   r›   rl   rÛ  )r€   r\   r³  r  rq   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)rd  Údeepcopyr  r§   ÚLoadr³   ÚBinOpÚoprl   rÑ   Úhasattrr¯   Úsetattrr›   )r€   r\   Ú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˜#‹Ðr/   c                 óš   — t        |j                  «      t        j                  u r|j                  S | j                  |j                  «      S rC   )r+   r³   r§   r´   r®   r%  r¸   s     r-   rµ   zCodeGenerator.visit_Nameç  s4   € Ü�—‘‹>œSŸY™YÑ&Ø—7‘7ˆNØ×$Ñ$ T§W¡WÓ-Ð-r/   c                 óD   — t         j                  j                  | |«       y rC   rr  r¸   s     r-   Úvisit_StorezCodeGenerator.visit_Storeì  rt  r/   c                 óD   — t         j                  j                  | |«       y rC   rr  r¸   s     r-   Ú
visit_LoadzCodeGenerator.visit_Loadï  rt  r/   c                 ó†   — |j                   D �cg c]  }| j                  |«      ‘Œ }}t        j                  |«      S c c}w rC   )rv  r›   r   r   )r€   r\   rë   r^   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__)rH   r¯   r  r(   ÚsubrD   r   r   r   Úget_AttributeÚcall_Function)r€   r\   Úmethod_namerì  rí  Úreverse_method_namer]   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Ð6r/   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/  ÚformatrZ   rÿ  )r€   r\   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ÐEr/   Ú__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ˆ   r]  r_  r¡   r‰   r†   rd  r„   rÇ   r  rF   ru   r^  r+   ÚsortedÚkeys)r€   r\   r…   Ú
then_blockÚ
else_blockÚ	then_defsÚ	then_valsÚ	else_defsÚ	else_valsrh  r*   rl   Ú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ÐBr/   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rC   rc   ©rœ   r*   r  s     €r-   rž   z3CodeGenerator.visit_if_top_level.<locals>.<genexpr>f  ó   øè ø€ Ò/RÀD°	¸$µÑ/Rùó   ƒc              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wrC   rc   ©rœ   r*   r  s     €r-   rž   z3CodeGenerator.visit_if_top_level.<locals>.<genexpr>k  r+  r,  )r}   rˆ   r\  r„  Úcreate_cond_branchrO  r'  r©  ru   Úcreate_branchry   r•  Úget_typeÚadd_argumentr]  rö   r`   r+   r{   rR  )r€   rd   r\   Úsrr…   Úip_blockr  r  rh  Úendif_blockr  r  Úthen_hÚelse_hr<   rø   Úres_handlesr*   ro   Ú
new_valuesÚ	new_valuer  r  s                        @@r-   Úvisit_if_top_levelz CodeGenerator.visit_if_top_levelV  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rC   rc   r*  s     €r-   rž   z-CodeGenerator.visit_if_scf.<locals>.<genexpr>†  r+  r,  Tr   c              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wrC   rc   r.  s     €r-   rž   z-CodeGenerator.visit_if_scf.<locals>.<genexpr>•  s   øè ø€ Ò3VÈ°I¸dµOÑ3Vùr,  )r}   rV  rˆ   r\  rÇ   r'  ru   r•  rP  rX  Úcreate_if_opr1  rO  Úmerge_block_beforeÚget_then_blockr„  ry   Úcreate_yield_opÚget_else_blockrö   Ú
get_resultr+   r{   rR  )r€   rd   r\   r3  r…   r1   rU  Úlast_locr  r  rh  r  r*   rô   ÚhÚif_opr  rø   r8  ro   r9  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rC   ©rZ   ©rœ   r1   s     r-   rž   z)CodeGenerator.visit_If.<locals>.<genexpr>¹  ó   è ø€ Ò!G° !§*¥*Ñ!Gùó   ‚)r›   ÚtestrH   rQ   r/  r+   rO   ÚwarningsÚwarnr§   Úunparser   rJ   Ú_unsplatr  ÚtoÚint1r•   r—   r"  r;  rH  r   Ú_condition_typesr  r7   rZ   r¡   rÇ   r_  )r€   r\   rd   Ú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Ø×)Ñ)¨,Õ7r/   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   rK  rL  c              3   ó4   K  — | ]  }|j                   –— Œ y ­wrC   rN  rO  s     r-   rž   z,CodeGenerator.visit_IfExp.<locals>.<genexpr>í  rP  rQ  )$r›   rR  rH   rW  r   rX  r  r}   rV  rˆ   r\  r]  rÞ  r¡   r‰   rÇ   rX  r+   ÚvoidÚto_irr?  rO  r@  rA  r„  rB  rC  rJ   r   rD  r   rY  r/  r  r7   rZ   )r€   r\   rd   rU  rE  r  r#  r  r%  r#  Úret_type_irrG  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rC   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Ì   r^   rƒ   Úkeywordsr  r^  r•  r�   Úoptional_varsrR  r•   r—   r/  r_  r¡   Úreversedr‘   )r€   r\   Úcm_listrª   Úcallr]   r`   r^   Ú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 rC   rc   r¸   s     r-   Ú
visit_PasszCodeGenerator.visit_Pass
  s   € Ør/   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.)ry   ÚcomparatorsÚopsr/  r›   r  r   r+   r§   ÚIsr   ÚIsNotÚ_method_name_for_comp_oprî   r  rZ   rÿ  )r€   r\   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ÐEr/   Ú__eq__Ú__ne__Ú__lt__Ú__le__Ú__gt__Ú__ge__ru  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/  rZ   rH   r¯   r  ÚAttributeErrorr   )r€   r\   r�  r]   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__r€  Ú
__invert__r‚  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 loopr[  z changed type, was z but is now zLoop-carried variable z has initial type z but is re-assigned to z: in loop! Please make sure that the type stays consistent.)rF   r+   rH   )r€   r*   rj  ri  s       r-   rb  z+CodeGenerator._verify_loop_carried_variable5  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Ð.r/   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rC   ©r„   ©rœ   r*   r€   s     €r-   rž   z,CodeGenerator.visit_While.<locals>.<genexpr>i  ó   øè ø€ Ò0UÀt°·±¸TÕ1BÑ0Uùó   ƒzNot implemented)*r}   rV  rm  r1  rX  rˆ   Úcreate_while_opÚcreate_block_with_parentÚ
get_beforer]  rö   ry   r`   r{   r•  r„   r†   rP  r›   rR  rD   r   Ú	conditionÚdisable_licmÚset_attrÚget_disable_loop_licm_attrr„  Úcreate_condition_oprO  Ú	get_afterr"  r^  r_  r¡   r`  ru   rB  rD  rÇ   r§   rs  r«   )r€   r\   r3  r…   rŠ   rU  rE  rh  rg  Úinit_fe_tysrF  rf  Úwhile_opÚbefore_blockrø   Ú
block_argsÚcondition_argsr*   rô   rd   Úafter_blockÚbody_handlesÚ	body_argsÚyield_handlesÚresult_handlesÚresult_valsÚnew_defrp  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 rC   )
rD   r³   r§   rç  r›   rl   ÚslicerF   Úcall_MethodÚ__getitem__)r€   r\   rì  Úslicess       r-   Úvisit_Subscript_Loadz"CodeGenerator.visit_Subscript_Loadx  so   € Ü˜$Ÿ(™(¤C§H¡HÔ-Ð-Ð-Ø�j‰j˜Ÿ™Ó$ˆØ—‘˜DŸJ™JÓ'ˆÜ˜CÔ Ø×#Ñ# D¨#¯/©/¸3ÀÀÈ"ÓMÐMØ�6‰{Ðr/   c                 ó   — t        d«      ‚)Nz&__setitem__ is not supported in triton)r~  )r€   r\   rl   s      r-   rÚ  z#CodeGenerator.visit_Subscript_Store€  s   € Ü!Ð"JÓKÐKr/   c                 ó$   — | j                  |«      S rC   )r«  r¸   s     r-   Úvisit_SubscriptzCodeGenerator.visit_Subscriptƒ  s   € Ø×(Ñ(¨Ó.Ð.r/   c                 ó^   — |j                   D �cg c]  }| j                  |«      ‘Œ c}S c c}w rC   )Údimsr›   )r€   r\   Údims      r-   Úvisit_ExtSlicezCodeGenerator.visit_ExtSlice†  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rC   rš   ©rœ   Úkeywordr€   s     €r-   rž   z*CodeGenerator.visit_For.<locals>.<genexpr>Œ  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 (rL  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 )rY  ztt.num_stagesztt.loop_unroll_factorztt.disallow_acc_multi_bufferz
tt.flattenztt.warp_specializerŠ  c              3   ó<   •K  — | ]  }‰j                   |   –— Œ y ­wrC   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Ì   r^   rƒ   rd  r   Ústatic_rangerö   Ústartrl   ÚendÚstepr   r„   r  r®   r_  r¡   rÇ   r§   rs  r«   Ú
num_stagesÚloop_unroll_factorÚdisallow_acc_multi_bufferÚflattenÚwarp_specializer”  ry   ÚConstantÚRuntimeErrorrL   r  rÞ  rK   Úis_intÚ	TypeErrorrQ   r+   Úinteger_promote_implr^  rˆ   Úint_signednessrJ   Ú
SIGNEDNESSÚSIGNEDrO  Úcreate_int_castr«  rR  r   r}   rV  rm  rX  Úcreate_for_opr   r•  Úget_int32_attrÚget_unit_attrr–  r"  r^  Úget_bodyr]  r`   r{   r•  rP  r`  ru   rB  Ú
get_parentÚsizeÚget_induction_varÚ
create_subÚ
create_addÚreplace_all_uses_withrD  )+r€   r\   ÚIteratorClassr`   Ú	iter_argsÚiter_kwargsÚiteratorr¸  rø   rp  r¼  r½  r¾  r¿  rÀ  r”  ÚlbÚubr»  Únegative_stepÚiv_typeÚ
iv_ir_typeÚiv_is_signedÚiv_placeholderr3  r…   rŠ   rU  rE  rh  rg  rf  Úfor_opÚfor_op_bodyÚblock_handlesrœ  r*   rô   r¡  Úfor_op_regionÚivr¢  Úresult_valuess+   `                                          r-   Ú	visit_ForzCodeGenerator.visit_For‰  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 rC   )r›   ÚlowerÚupperr»  r   r§  )r€   r\   rç  rè  r»  s        r-   Úvisit_SlicezCodeGenerator.visit_Slice  sK   € Ø—
‘
˜4Ÿ:™:Ó&ˆØ—
‘
˜4Ÿ:™:Ó&ˆØ�z‰z˜$Ÿ)™)Ó$ˆÜ�~‰~˜e U¨DÓ1Ð1r/   c                 ó8   — | j                  |j                  «      S rC   )r›   rl   r¸   s     r-   Úvisit_IndexzCodeGenerator.visit_Index  s   € Ø�z‰z˜$Ÿ*™*Ó%Ð%r/   c                 óP   — |j                   | j                  |j                  «      fS rC   )r`   r›   rl   r¸   s     r-   Úvisit_keywordzCodeGenerator.visit_keyword  s   € Ø�x‰x˜Ÿ™ D§J¡JÓ/Ð/Ð/r/   c                 óâ   — | j                  |j                  «      }|j                  �| j                  |j                  «      nd}t        j                  j                  ||| j                  ¬«      S )Nr  rø  )r›   rR  Úmsgr   rJ   Údevice_assertr  )r€   r\   rR  rï  s       r-   Úvisit_AssertzCodeGenerator.visit_Assert  sQ   € Ø�z‰z˜$Ÿ)™)Ó$ˆØ&*§h¡hÐ&:ˆd�j‰j˜Ÿ™Ô"ÀˆÜ�}‰}×*Ñ*¨4°ÀÇÁÐ*ÓNÐNr/   r]   c                 óú  —  |j                   j                  |i |¤Ž}|j                  «        |j                  }|j                  D �cg c]  }||   ‘Œ	 }}t        |«      D ]H  \  }}t        |t        «      rt        |t        «      sŒ't        j                  j                  |«      ||<   ŒJ |xs | j                  }|D �cg c]  }|j                  ‘Œ }	}t        t        |«      |	|«      }
| j                   j#                  |
«      sõt%        |«      \  }}t'        g |	t)        «       «      }t+        | j,                  ||j/                  «       | j                   ||
| j0                  |j2                  ||| j4                  j6                  | j4                  j8                  | j4                  j:                  || j<                  ¬«      }	 |j?                  |jA                  «       «       |jR                  }|| j0                  |
<   n| j0                  |
   }| j                   jU                  |
«      }tW        |«      }| j4                  jY                  ||«      }t[        |j]                  «       «      D �cg c]  }|j_                  |«      ‘Œ }}ta        tc        ||g«      «      S c c}w c c}w # tB        $ rL}tD        jF                  jH                  r‚ tK        | jL                  jN                  | jP                  d «      |‚d }~ww xY wc c}w )N)r  r  r   r  rW   r  r  r  r  r  r;   r  )2Ú	signatureÚbindÚapply_defaultsÚ	argumentsr[   rX   rD   r   r   r   rJ   r   r;   r+   r?   r   r  Úhas_functionr   rÙ   rƒ   r  r  Úget_capture_scoper  rW   rˆ   r  r  r  r  r›   ÚparseÚ	Exceptionr   r>  Úfront_end_debuggingr$   r  rY   r!  r#  Úget_functionru   rh  rö   Úget_num_resultsrD  rÏ  r{   )r€   r]   r^   r�   r;   Ú
bound_argsr*   rø   r`   rÜ   Úfn_namer  r  r  r   ÚeÚcallee_ret_typeÚsymbolÚargs_valÚcall_oprt   s                        r-   Úcall_JitFunctionzCodeGenerator.call_JitFunction#  s€  € Ø&�R—\‘\×&Ñ&¨Ð7°Ñ7ˆ
Ø×!Ñ!Ô#Ø×#Ñ#ˆØ')§|¡|Ö4˜t��T“
Ð4ˆÐ4Ü “oò 	7‰FˆAˆsÜ˜c¤:Ô.´*¸SÄ+Õ2NÜ"Ÿ-™-×1Ñ1°#Ó6��Q’ð	7ð (Ò>¨4×+>Ñ+>ˆØ)-Ö. #�S—X“XÐ.ˆ	Ð.ÜœM¨"Ó-¨y¸.ÓIˆà�{‰{×'Ñ'¨Ô0ä$8¸Ó$<Ñ!ˆI�zÜ# B¨	´4³6Ó:ˆ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ˆÜ'¨Ó-ˆØ—,‘,×#Ñ# F¨HÓ5ˆÜ27¸×8OÑ8OÓ8QÓ2RÖS¨Q�7×%Ñ% aÕ(ÐSˆÐSÜÔ'¨°/Ð1BÓCÓDÐDùòG 5ùò /øô ò Tä×$Ñ$×8Ò8ØÜ& t§{¡{§¡¸¿¹ÀtÓLÐRSÐSûð	Tüò Ts+   ÁJÂ?JÆ?J  É&K8Ê 	K5Ê)AK0Ë0K5c                 óØ  — t        |t        t        f«      r(|j                  d|j                  «       |j
                  }t        |dd«      }|r�t        |dd«      rtdt        j                  |j                  «      z  g}t        |t        «      r|j                  |«       t        | j                  j                  |dj                  |«      «      ‚t        |t         «      r t#        |||«       | j%                  |||«      S t'        |d«      rt)        |j                  «      s/t*        j,                  j/                  |«      st        |t0        «      r°t3        «       }t        |dd «      }t        |t0        «      r| j4                  |d	<   nG|€t7        j8                  |«      }d	|j:                  v r| j4                  |d	<   d
|j:                  v r| |d
<   	  ||i |¤|¤Ž}	t        |	t<        «      rt+        j<                  |	«      }	|	S || jF                  jI                  «       v s!t'        |d«      r%t)        |j                  «      stK        tL        |«      } ||i |¤Ž}	d„ }t        |	tN        j<                  t*        j<                  f«      rtQ        |	|«      S  ||	«      S # t>        $ rK}
t@        jB                  jD                  r‚ t        | j                  j                  |t        |
«      «      |
‚d }
~
ww xY w)Nr   Ú_must_use_resultFÚ
_is_unusedz#The result of %s is not being used.r<  rý   ró  rù  rJ  c                 ó2   — t        | «      r| S t        | «      S rC   )rF   r   )rë   s    r-   Úwrap_constexprz3CodeGenerator.call_Function.<locals>.wrap_constexpr~  s   € Ü Ô"Ø�Ü˜Q“<Ðr/   ))rD   rü   r   Úinsertrý   rþ   r¯   r§   rU  rÌ   rG  r^  r$   r  rY   r7   r   ra   r  rê  rF   r   rJ   Ú
is_builtinr   rƒ   r  Úinspectró  Ú
parametersr   rú  r   r>  rû  r)  rq   Úmapr   Úbuiltinsrp   )r€   r\   r]   r^   ri  ÚmurÚerror_messageÚextra_kwargsÚsigr>   r   r
  s               r-   rü  zCodeGenerator.call_FunctionL  ss  € Ü�bœ>Ô+AÐBÔCØ�K‰K˜˜2Ÿ;™;Ô'Ø—‘ˆBä�bÐ,¨eÓ4ˆÙ”7˜4 ¨uÔ5ØBÄSÇ[Á[ÐQU×QZÑQZÓE[Ñ[Ð\ˆMÜ˜#œsÔ#Ø×$Ñ$ SÔ)Ü" 4§;¡;§?¡?°D¸#¿(¹(À=Ó:QÓRÐRä�bœ+Ô&Ü˜4  TÔ*Ø×(Ñ(¨¨T°3Ó7Ð7Ü�B˜
Ô#Ô(8¸¿¹Ô(EÌ(Ï-É-×JbÑJbÐceÔJfÔjtØÔ%ôk'ä›6ˆLä˜"˜k¨4Ó0ˆCÜ˜"Ô/Ô0Ø,0¯M©M�˜[Ò)à�;Ü!×+Ñ+¨BÓ/�CØ #§.¡.Ñ0Ø04·±�L Ñ-Ø 3§>¡>Ñ1Ø15�L Ñ.ð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   Ç0J Ê	K)ÊAK$Ë$K)c                 ón   — t        |t        «      r|j                  d|«       | j                  ||||«      S rw   )rD   r   r  rü  )r€   r\   r]   Úfn_selfr^   ri  s         r-   r¨  zCodeGenerator.call_Method‡  s1   € Ü�bœ+Ô&Ø�K‰K˜˜7Ô#Ø×!Ñ! $¨¨D°#Ó6Ð6r/   c                 óp  ‡ — t        ‰ j                  |j                  «      «      }t        |t        «      s&‰ j
                  j                  |«      }|�	 |‰ |«      S t        ˆ fd„|j                  D «       «      }g }|j                  D ]™  }t        |t        j                  «      r]‰ j                  |j                  «      }t        |t        j                  j                  «      sJ ‚|j!                  |j"                  «       Œz|j%                  ‰ j                  |«      «       Œ› ‰ j'                  ||||«      S )Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrC   rš   rµ  s     €r-   rž   z+CodeGenerator.visit_Call.<locals>.<genexpr>“  s   øè ø€ ÒD¨7�4—:‘:˜g×&ÑDùrŸ   )r   r›   rÌ   rD   rü   Ú statically_implemented_functionsrî   rƒ   rd  r^   r§   ÚStarredrl   r   rJ   r   rc  rq   r^  rü  )r€   r\   r]   Ústatic_implementationri  r^   r`   s   `      r-   rÍ   zCodeGenerator.visit_CallŒ  sñ   ø€ Ü! $§*¡*¨T¯Y©YÓ"7Ó8ˆÜ˜"œnÔ-Ø$(×$IÑ$I×$MÑ$MÈbÓ$QÐ!Ø$Ð0Ù,¨T°4Ó8Ð8äÓD°d·m±mÔDÓDˆØˆØ—9‘9ò 	-ˆCÜ˜#œsŸ{™{Ô+Ø—j‘j §¡Ó+�Ü! #¤x§}¡}×':Ñ':Ô;Ð;Ð;Ø—‘˜CŸJ™JÕ'à—‘˜DŸJ™J s›OÕ,ð	-ð ×!Ñ! $¨¨D°#Ó6Ð6r/   c                 ó,   — t        |j                  «      S rC   )r   rl   r¸   s     r-   Úvisit_ConstantzCodeGenerator.visit_ConstantŸ  s   € Ü˜Ÿ™Ó$Ð$r/   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)rf   Úfilenamerâ  Úsourcer   r   r#   )Ú_method_name_for_bool_oprî   r+   ré  r/  r  rZ   rq   r›   rH   rÎ   rO   r¯   r  rS  Úwarn_explicitÚUserWarningr  r§   rU  r^  ry   r`  rÿ  )r€   r\   rý  Únontrivial_valuesÚsubnoderl   Úbvrâ  rí  rì  rk  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Ô)ô	 Ð#Ó$¨Ó)ô Ð$Ó%¨Ò*Ð*Ð*Ø  Ñ#Ð#r/   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   )rl   r+   )
rH   r  ÚpermuterD   r   rl   r¯   rF   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Ó,Ð,Øˆr/   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 rC   )	r›   rl   rD   r   rZ   rˆ   r  rû  r°   )r€   r\   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Ð1r/   c                 óf   — d|j                   _        t        j                  j	                  | |«       y r·   )rl   r  r§   rs  r«   r¸   s     r-   Ú
visit_ExprzCodeGenerator.visit_Exprí  s"   € Ø $ˆ�
‰
ÔÜ�‰×%Ñ% d¨DÕ1r/   c                  ó   — y rC   rc   r¸   s     r-   Úvisit_NoneTypezCodeGenerator.visit_NoneTypeñ  rº   r/   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  )rS   rq   rX   rD   r§   rÁ  rG  rl   ÚFormattedValueÚ
conversionr›   rL   r/  r+   Úchrr  ÚAssertionErrorr7   )r€   r\   rq   rø   rl   Ú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‹Ðr/   c                 óf  •— |€y | 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        ‰| �5  |«      }|r"|| _         | j                  j                  |«       |S # t        $ r ‚ t        $ rU}t         j"                  j$                  r‚ t        | j&                  j(                  | j                   t+        |«      «      d ‚d }~ww xY w)Nrâ  rã  )r!  rˆ   rN  rê  Ú
create_locr  r  râ  rã  r  r  rM  Úsuperr›   r$   rú  r   r>  rû  r  rY   Úrepr)r€   r\   Ú	last_noderE  Úhere_locr>   r   Ú	__class__s          €r-   r›   zCodeGenerator.visit  sY  ø€ Øˆ<ØØ—M‘Mˆ	Ø—<‘<×'Ñ'Ó)ˆØˆŒÜ�4˜Ô"¤w¨t°\Ô'BØ—|‘|×.Ñ.¨t¯~©~¸t¿¹ÐQU×Q\ÑQ\Ñ?\Ð^b×^mÑ^mÓnˆHØ×&Ñ&Ð2Ø—‘×$Ñ$ T§\¡\×%AÑ%AÀ$×BYÑBYÐ[cÓ%dÕeà—‘×$Ñ$ XÔ.Ø—|‘|×+Ñ+Ó-ˆHð		VÜ‘'‘- Ó%ˆCñ Ø%ˆDŒMØ�L‰L× Ñ  Ô*Øˆ
øô  ò 	ØÜò 	VÜ× Ñ ×4Ò4Øô # 4§;¡;§?¡?°D·M±MÄ4ÈÃ7ÓKÐQUÐUûð	Vús   ÄE	 Å	F0ÅAF+Æ+F0c                 ój   — | j                  |dj                  t        |«      j                  «      «      ‚)Nzunsupported AST node type: {})r/  r  r+   rZ   r¸   s     r-   r«   zCodeGenerator.generic_visit$  s,   € Ø×Ñ Ð&E×&LÑ&LÌTÐRVËZ×M`ÑM`Ó&aÓbÐbr/   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: ú>)ry   r^   rd  rÄ  r   r›   rD   rÎ   r~  rú  r>  r%   r  rY   )r€   r\   Ú	arg_countÚpassedr.  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 )Nr\   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rC   rš   rµ  s     €r-   rž   z=CodeGenerator.static_executor.<locals>.ret.<locals>.<genexpr>B  s   øè ø€ Ò#U¸G D§J¡J¨w×$7Ñ#UùrŸ   )rd  r   r^   r›   r   )r€   r\   r*   rl   ri  r`   r^   Ú	python_fns   `      €r-   r>   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×   )rK  r>   s   ` r-   Ústatic_executorzCodeGenerator.static_executor=  s   ø€ ð	6œCŸH™Hõ 	6ð ˆ
r/   r   )r   r  rC   )�rZ   r’   r“   r   r   r   rG  r�   ry   rS   rö   ÚfloatÚintrD   r¯   rê  r)  r   rÿ   Úupdater   rJ   Údevice_printÚbuiltin_minÚbuiltin_maxr/  r3  r$  Ú
contextlibÚcontextmanagerrJ  rP  r   r   r   rR  rV  rX  Úsetrm  r_  rÂ   rx  r§   ÚListCompr‚  r¹   rž  r¥  r¯  rÅ   rË  rÕ  r×  rÛ  r¼   r¿   rµ   rò  rô  rö  rÿ  r  ÚAddÚSubÚMultÚDivÚFloorDivÚModÚPowÚLShiftÚRShiftÚBitAndÚBitOrÚBitXorr  r
   Úoperatorr'  r;  rH  rÈ   rÊ   rm  ro  rx  ÚEqÚNotEqÚLtÚLtEÚGtÚGtEru  Úcmpopr„  ÚUSubÚUAddÚNotÚInvertr‚  Úunaryoprb  r¥  r«  rÚ  r®  r²  rå  ré  rë  r	   rí  rñ  r  rü  r¨  rÍ   r  ÚBoolOpr)  ÚAndÚOrr#  Úbooloprû  r±   r/  r1  r:  r›   r«   r×   rG  rL  Úexperimental.gluonÚttglÚstatic_assertÚstatic_printr*  r  r1  r   Ú__classcell__)rœ   r1   rA  s   00@r-   r  r    s®  ø… ð /3¸eÐfjØ°ÐQUÐbcò@0È+ð @0ØU]Ð^bÑUcð@0àAIÈ#Áó@0ðH �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§<¡<ó !ò 
@ò;ò>ò&rò,+?òZ&òò'ò 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òR9#òv7ò
7ò&%ð2$ §¡ó 2$ðh >A¿W¹WÀmÐUX×U[ÑU[Ð]iÐ<jÐ˜d 4¨¯
©
Ñ#3°SÐ#8Ñ9Ójò	ò2ò2òòô$ò<cð¨#¯(ª(ð °tó ò,
õ 6à�‰×#Ò#Ð%:Ø�‰×"Ò"¡O°EÓ$:Ø×ÒÐ1Ø×Ò™?¨5Ó1Ø‰_˜SÓ!Ø‰_˜SÓ!ðQÐ$ d¨6°8¸S¿XºX¸JÈ¸OÑ3LÐ+LÑ&M÷ ùói')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                  «      }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 rw   )r`  ry   rD   rS   r   r+   ro   )ÚargumentÚindicesrl   ÚindexÚapply_constexpr_typess       €r-   r~  z*ast_to_ttir.<locals>.apply_constexpr_types[  sa   ø€ Ø—‘“ˆÜˆw‹<˜1ÒÜ˜(¤DÔ)Ü"+¨EÓ"2×"7Ñ"7�˜’ä(1°%Ó(8×(=Ñ(=�—‘˜uÒ%á! (¨5¡/°7¸EÕBr/   r±  r   )Ú
namedtuplec                 ó   — t        | «      dk(  S rN   )ry   )rm   s    r-   r’  zast_to_ttir.<locals>.<lambda>l  s   € œc !›f¨™k€ r/   ÚSpecializationProxyÚ	constantsró  T)r—   r   r  r  r  r  r  r  r  r  r  z error encountered during parsing)ry   r[   ró  r  r}  r   r‚  rS   rÙ   rÝ   r   Úcollectionsr  Úfilterr  rø  r>  r  r›   rù  r  r  Úverifyr*  rÂ  )r]   rY   r  r  r  r  r  rÜ   r'  rm   r_   rð   rl   r  r  r  r  Úleavesrø   r‚  ró  Úproxyr   r~  s                          @r-   Úast_to_ttirrˆ  T  sÉ  ø€ Ø�œ˜RŸ\™\Ó*Ñ*€Ià—‘×#Ñ#Ó%ò ,‰ˆˆ1Ø�l‰l× Ñ  Ó#ˆÜ" 1 dÓ+ˆ	�#Šð,ôCð —}‘}×*Ñ*Ó,ò B‰ˆˆeÙ˜i¬¨d«±D°b°DÑ)9¸5ÕAðBô ˜B 	¨3¯9©9Ó5€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   Ã-'G!rC   )Nr§   r  rS  rd  rœ  r  r(   rS  rA  Údataclassesr   ro   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"   Úerrorsr$   r%   r&   r.   r?   rÎ   rF   rH   rL   rQ   rT   ra   rÄ  rg   rp   ru   rl   r{   rN  r+   rY  r}   rs  r•   rÙ   rü   r  rˆ  rc   r/   r-   ú<module>r�     s~  ðÛ 
Û Û Û Û Û Û 	Û Û Ý !Ý ß T× TÕ Tç ß 'ß FÓ Fß GÑ G÷ C÷  Cß FÑ Fç aÑ aòò	ð%˜ð % ó %ð!˜ð ! ó !ðU�Sð U˜Tó UðN˜Sð N Tó Nð(�Sð (˜Tó (òð #,ó !ò
Dð ¨*Ñ!5ó ð"  b§h¡h¡ð "¸¸Y¹ó "ð ˜#™t D›zÐ*Ð ÷3ñ 3ô*T%˜CŸO™Oô T%÷n.ñ .ñb �$Ô÷ð ó ðô
�C—O‘Oô ôD*'r/   