Ë
    6^(hÉò  ã                   óJ  — 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
mZmZmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZmZmZ ddlmZmZmZmZ dd	l m!Z! dd
l"m#Z# ddl$m%Z%m&Z&m'Z' ddl(m)Z)m*Z*m+Z+ d„ Z,d„ Z-d„ Z.de
de/fd„Z0de
de/fd„Z1de
de/fd„Z2de
de/fd„Z3de
de/fd„Z4d„ Z5d„ Z6d„ Z7dee   fd„Z8deejr                     dee   fd„Z:e/e; e<d«      hZ= G d „ d!«      Z> G d"„ d#e j~                  «      Z@ G d$„ d%«      ZA G d&„ d'e j~                  «      ZBd(„ ZCy))é    N)Ú
ModuleType)	ÚAnyÚCallableÚDictÚOptionalÚTupleÚTypeÚUnionÚIterableÚListé   )Úlanguage)Úir)Ú	constexprÚsemanticÚ	str_to_tyÚtensor)Ú_unwrap_if_constexprÚnv_tma_desc_typeÚ
base_valueÚ	base_type)Úget_jit_fn_file_line)ÚJITFunction)Úfind_paths_ifÚget_iterable_pathÚset_iterable_pathé   )Ú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/skyplay_api_hub/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                 ó®  — | j                  «       r/ddj                  t        t        | j                  «      «      z   dz   S | j                  «       rdt        | j                  «      z   S | j                  «       rOt        j                  j                  j                  }| j                  |k(  rdnd}|t        | j                  «      z   S | j                  «       rt        | «      S | j!                  «       rFt        | j"                  «      }dj                  t        t        | j$                  «      «      }|› d|› d�S | j'                  «       ryt)        d| › �«      ‚)	NÚTÚ_ÚPÚiÚuÚSÚVúUnsupported type )Úis_tupleÚjoinÚmapÚ	mangle_tyÚtypesÚis_ptrÚ
element_tyÚis_intr   ÚdtypeÚ
SIGNEDNESSÚSIGNEDÚint_signednessÚstrÚint_bitwidthÚis_floatingÚis_blockÚscalarÚshapeÚis_voidÚ	TypeError)Útyr=   ÚprefixÚeltrD   s        r'   r6   r6      s  € Ø	‡{�{„}Ø�S—X‘Xœc¤)¨R¯X©XÓ6Ó7Ñ7¸#Ñ=Ð=Ø	‡y�y„{Ø”Y˜rŸ}™}Ó-Ñ-Ð-Ø	‡y�y„{Ü—‘×*Ñ*×1Ñ1ˆØ×)Ñ)¨VÒ3‘¸ˆØœ˜BŸO™OÓ,Ñ,Ð,Ø	‡~�~ÔÜ�2‹wˆØ	‡{�{„}Ü˜Ÿ	™	Ó"ˆØ—‘œœS "§(¡(Ó+Ó,ˆØ��a˜�w˜aÐ Ð Ø	‡z�z„|ØÜ
Ð'¨ tÐ,Ó
-Ð-r)   c                 ó|  — dj                  |D �cg c]  }t        |«      ‘Œ c}«      }dj                  t        |«      D �cg c]  }|› dt        ||   «      › �‘Œ c}«      }|j	                  dd«      }|j	                  dd«      }|j	                  dd«      j	                  dd«      }| › d	|› d	|› �}|S c c}w c c}w )
Nr,   Úcú.Ú_d_ú'Ú_sq_ú[ú]Ú__)r4   r6   ÚsortedÚreprÚreplace)r$   Úarg_tysÚ	constantsrG   Úmangled_arg_namesr.   Úmangled_constantsÚrets           r'   Ú	mangle_fnr[   2   sÂ   € àŸ™¸'Ö!B°B¤)¨B¥-Ò!BÓCÐØŸ™ÄvÈiÓGXÖ!YÀ! Q C q¬¨i¸©lÓ);Ð(<Ò"=Ò!YÓZÐØ)×1Ñ1°#°uÓ=ÐØ)×1Ñ1°#°vÓ>Ðà)×1Ñ1°#°sÓ;×CÑCÀCÈÓMÐØˆF�"Ð&Ð' rÐ*;Ð)<Ð
=€CØ€Jùò "CùÚ!Ys   �B4ÁB9ÚoÚreturnc                 ó"   — t        | t        «      S ©N)Ú
isinstancer   ©r\   s    r'   Ú_is_triton_valuerb   >   s   € Ü�aœÓ$Ð$r)   c                 ó"   — t        | t        «      S r_   )r`   r   ra   s    r'   Ú_is_triton_tensorrd   B   s   € Ü�aœÓ Ð r)   c                 ób   — | d u xs* t        | t        t        j                  j                  f«      S r_   )r`   r   r   Úcorer;   ra   s    r'   Ú_is_constexprrg   F   s'   € Ø�ˆ9ÒGœ
 1¤y´(·-±-×2EÑ2EÐ&FÓGÐGr)   c                 óˆ   — t        | «      xr6 | j                  j                  «        xs | j                  j                  dk(  S ©Nr   )rd   r%   rB   Únumelra   s    r'   Ú_is_triton_scalarrk   J   s2   € Ü˜QÓÒP¨¯©¯©Ó):Ð%:Ò%O¸a¿f¹f¿l¹lÈaÑ>OÐPr)   c                 ó.   — t        | t        t        f«      S r_   )r`   ÚlistÚtuplera   s    r'   Ú_is_list_likero   N   s   € Ü�aœ$¤˜Ó'Ð'r)   c                 óà   — |j                   rbt        |«      D ]S  \  }}t        |«      rŒt        |«      rŒt	        |j
                  | d|j                  › d|j                  |   › d|› �«      ‚ y y )Nz	Function z= is marked noinline, but was called with non-scalar argument ú:)ÚnoinlineÚ	enumeraterg   rk   r    ÚsrcÚ__name__Ú	arg_names)ÚnodeÚfnÚargsÚidxÚargs        r'   Ú_check_fn_argsr|   R   s‚   € Ø	‡{‚{Ü! $›ò 	‰HˆC�Ü  Õ%Ô.?ÀÕ.DÜ2Ø—F‘F˜DØ §¡˜}Ð,iÐjl×jvÑjvÐwzÑj{Ði|Ð|}ð  Bð  ~Cð  Dóð ñ	ð r)   c                 ób   — t        | t        «      xr t        | t        «      xr t	        | d«      S )NÚ_fields)r`   r%   Ú
issubclassrn   Úhasattr)Úvals    r'   Ú_is_namedtupler‚   \   s'   € Ü�cœ4Ó ÒW¤Z°´UÓ%;ÒWÄÈÈYÓ@WÐWr)   c                 ó�  — t        t        | «      «      r| j                  }nDt        | t        j
                  «      r| j                  j                  }nJ dt        | «      › �«       ‚| D �cg c]
  } ||«      ‘Œ }}|D �cg c]  }|j                  ‘Œ }}t	        j
                  |t	        j                  ||«      «      S c c}w c c}w )Nr2   )r‚   r%   r~   r`   r   rn   ÚfieldsÚ
tuple_type)Úvaluerx   r„   ÚvÚvalsr7   s         r'   Ú_apply_to_tuple_valuesr‰   `   sž   € Ü”d˜5“kÔ"Ø—‘‰Ü	�Eœ8Ÿ>™>Ô	*Ø—‘×"Ñ"‰à7Ð)¬$¨u«+¨Ð7Ó7ˆuà Ö!�a‰Bˆq�EÐ!€DÐ!Ø!Ö"˜ˆQ�V‹VÐ"€EÐ"Ü�>‰>˜$¤× 3Ñ 3°E¸6Ó BÓCÐCùò "ùÚ"s   Á*B>Á?CÚvaluesc                 ó:   — g }| D ]  }|j                  |«       Œ |S r_   )Ú_flatten_ir)rŠ   Úhandlesr‡   s      r'   Úflatten_values_to_irrŽ   m   s'   € Ø€GØò ˆØ	�‰�gÕðà€Nr)   r�   r7   c              #   óp   K  — d}|D ]  }|j                  | |«      \  }}|–— Œ |t        | «      k(  sJ ‚y ­w)Nr   )Ú_unflatten_irÚlen)r�   r7   ÚcursorrG   r†   s        r'   Úunflatten_ir_valuesr“   t   sI   è ø€ Ø€FØò ˆØ×(Ñ(¨°&Ó9‰ˆˆvØ‹ðð ”S˜“\Ò!Ð!Ñ!ùs   ‚46c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)Úenter_sub_regionc                 ó   — || _         y r_   )Ú	generator)Úselfr—   s     r'   Ú__init__zenter_sub_region.__init__�   s	   € Ø"ˆ�r)   c                 óœ  — | j                   j                  j                  «       | _        | j                   j                  j                  «       | _        i | j                   _        | j                   j                  j                  «       | _        | j                   j                  j                  «       | _
        | j                  | j                  fS r_   )r—   ÚlscopeÚcopyÚliveinsÚ
local_defsÚ	prev_defsÚbuilderÚget_insertion_blockÚinsert_blockÚget_insertion_pointÚinsert_point)r˜   s    r'   Ú	__enter__zenter_sub_region.__enter__„   s�   € à—~‘~×,Ñ,×1Ñ1Ó3ˆŒØŸ™×2Ñ2×7Ñ7Ó9ˆŒØ$&ˆ�‰Ô!Ø Ÿ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 r_   )r—   r    Úrestore_insertion_pointr¤   r�   r›   rŸ   rž   )r˜   ry   Úkwargss      r'   Ú__exit__zenter_sub_region.__exit__�   s@   € Ø�‰×Ñ×6Ñ6°t×7HÑ7HÔIØ $§¡ˆ�‰ÔØ$(§N¡Nˆ�‰Õ!r)   N)ru   Ú
__module__Ú__qualname__r™   r¥   r©   © r)   r'   r•   r•      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 r_   )Úgscope)r˜   r°   s     r'   r™   zContainsReturnChecker.__init__–   s	   € Øˆ�r)   r]   c                 ó,   ‡ — t        ˆ fd„|D «       «      S )Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr_   ©Ú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                 ó¤   — t        |t        «      r@|j                  s4|j                  «       }t	        | j
                  «      j                  |«      S y©NF)r`   r   rr   Úparser®   r°   r´   )r˜   rx   Úfn_nodes      r'   Ú_visit_functionz%ContainsReturnChecker._visit_functionœ   s:   € ä�bœ+Ô&¨r¯{ª{Ø—h‘h“jˆGÜ(¨¯©Ó5×;Ñ;¸GÓDÐDØ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_fieldsr`   rm   ÚASTr´   )r˜   rw   rZ   r,   r†   Ú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)   rw   c                 óZ  — t        |j                  t        j                  «      rm|j                  j                  | j
                  v rJ| j
                  |j                  j                     }t        ||j                  «      }| j                  |«      S y| j                  |j                  «      S r½   )
r`   r†   rÂ   ÚNameÚidr°   ÚgetattrÚattrrÀ   r´   )r˜   rw   r†   rx   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˜   rw   rx   s      r'   Ú
visit_Namez ContainsReturnChecker.visit_Name½   sO   € Ü�—‘‹>œSŸY™YÑ&ØØ�7‰7�d—k‘kÑ!Ø—‘˜TŸW™WÑ%ˆBØ×'Ñ'¨Ó+Ð+Ør)   c                  ó   — y)NTr¬   ©r˜   rw   s     r'   Úvisit_Returnz"ContainsReturnChecker.visit_ReturnÅ   ó   € Ør)   c                  ó   — yr½   r¬   rÒ   s     r'   Úvisit_Assignz"ContainsReturnChecker.visit_AssignÈ   ó   € ð r)   c                  ó   — yr½   r¬   rÒ   s     r'   Úvisit_AugAssignz%ContainsReturnChecker.visit_AugAssignÍ   r×   r)   c                 ó8   — | j                  |j                  «      S r_   ©r»   rº   rÒ   s     r'   Úvisit_Modulez"ContainsReturnChecker.visit_ModuleÒ   ó   € Ø× Ñ  §¡Ó+Ð+r)   c                 ó8   — | j                  |j                  «      S r_   rÛ   rÒ   s     r'   Úvisit_FunctionDefz'ContainsReturnChecker.visit_FunctionDefÕ   rÝ   r)   c                 ó’   — | j                  |j                  «      }|j                  r|xs | j                  |j                  «      }|S r_   )r»   rº   Úorelse)r˜   rw   rZ   s      r'   Úvisit_IfzContainsReturnChecker.visit_IfØ   s=   € ð ×Ñ §	¡	Ó*ˆØ�;Š;ØÒ7˜×*Ñ*¨4¯;©;Ó7ˆCØˆ
r)   c                 ór   — | j                  |j                  «      xs | j                  |j                  «      S r_   )r´   rº   rá   rÒ   s     r'   Úvisit_IfExpz!ContainsReturnChecker.visit_IfExpå   s'   € Ø�z‰z˜$Ÿ)™)Ó$Ò?¨¯
©
°4·;±;Ó(?Ð?r)   c                 ó8   — | j                  |j                  «      S r_   )r´   ÚfuncrÒ   s     r'   Ú
visit_Callz ContainsReturnChecker.visit_Callè   s   € Ø�z‰z˜$Ÿ)™)Ó$Ð$r)   N)ru   rª   r«   r™   Úboolr»   rÀ   rÆ   rÂ   Ú	AttributerÌ   rÈ   rÐ   ÚReturnrÓ   ÚAssignrÖ   Ú	AugAssignrÙ   ÚModulerÜ   ÚFunctionDefrß   ÚIfrâ   ÚIfExprä   ÚCallrç   r¬   r)   r'   r®   r®   ”   s  „ òð0 Dó 0ð 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                   óX   — e Zd Zd„ Zdej
                  fd„Zdej
                  fd„Zd„ Zy)ÚASTFunctionc                 ó<   — || _         || _        || _        || _        y r_   )Ú	ret_typesÚ	arg_typesrW   Úattrs)r˜   rõ   rö   rW   r÷   s        r'   r™   zASTFunction.__init__î   s   € Ø"ˆŒØ"ˆŒØ"ˆŒØˆ�
r)   r    c                 óº   — g }| j                   D ]I  }|€Œ|j                  |«      }t        |t        «      r|j	                  |«       Œ9|j                  |«       ŒK |S r_   )rõ   Úto_irr`   rm   ÚextendÚappend)r˜   r    rõ   Úret_tyÚir_tys        r'   Úreturn_types_irzASTFunction.return_types_irô   s^   € Øˆ	Ø—n‘nò 	(ˆFØˆ~ØØ—L‘L Ó)ˆEÜ˜%¤Ô&Ø× Ñ  Õ'à× Ñ  Õ'ð	(ð Ðr)   c                 ó   ‡ — ˆ fd„}t        t        ‰ j                  |«      «      }|D �cg c]'  }t        ‰ j                  |«      j	                  |«      ‘Œ) }}‰ j                  |«      }|j                  ||«      S c c}w )Nc                 ó,   •— | ‰j                   vxr |d uS r_   ©rW   ©Úpathr,   r˜   s     €r'   ú<lambda>z'ASTFunction.serialize.<locals>.<lambda>  ó   ø€  ¨T¯^©^Ð!;Ò!MÀÈÀ€ r)   )rm   r   rö   r   rù   rþ   Úget_function_ty)r˜   r    Úis_valÚ	val_pathsr  rö   rõ   s   `      r'   Ú	serializezASTFunction.serialize   st   ø€ ó NˆÜœ t§~¡~°vÓ>Ó?ˆ	ØXaÖbÐPTÔ& t§~¡~°tÓ<×BÑBÀ7ÕKÐbˆ	ÐbØ×(Ñ(¨Ó1ˆ	Ø×&Ñ& y°)Ó<Ð<ùò cs   ª,A;c           
      óú  ‡ ‡— ˆfd„Š ‰‰ j                   «      }ˆ fd„}t        t        ‰ j                   |«      «      }‰ j                  j	                  «       D ]6  \  }}|D ],  \  }}||v sŒ|j                  |j                  |«      ||«       Œ. Œ8 t        |«      D ]?  \  }	}
t        ‰ j                   |
«      }t        |t        «      sŒ-|j                  |	dd«       ŒA t        |«      D ]K  \  }	}
t        ‰ j                   |
«      }t        ||
t        j                  |j                  |	«      |«      «       ŒM ‰ j                  }|j	                  «       D ]%  \  }
}t        ||
t        j                   |«      «       Œ' |S )Nc                 óÖ   •— t        | t        t        t        j                  f«      r*t        j                  | D �cg c]
  } ‰|«      ‘Œ c}| «      S t        j
                  d «      S c c}w r_   )r`   rm   rn   r   r…   r   )rG   ÚxÚmake_templates     €r'   r  z.ASTFunction.deserialize.<locals>.make_template  sR   ø€ Ü˜"œt¤U¬H×,?Ñ,?Ð@ÔAÜ—~‘~ÀÖ&D¸A¡}°QÕ'7Ò&DÀbÓIÐIÜ×%Ñ% dÓ+Ð+ùò 'Es   ºA&c                 ó,   •— | ‰j                   vxr |d uS r_   r  r  s     €r'   r  z)ASTFunction.deserialize.<locals>.<lambda>  r  r)   ztt.nv_tma_descr   )rö   rm   r   r÷   ÚitemsÚset_arg_attrÚindexrs   r   r`   r   r   r   r   ry   rW   r   )r˜   rx   rˆ   r  r  Ú	attr_pathÚ
attr_specsÚ	attr_nameÚattr_valr.   r  rG   rW   r�   r  s   `             @r'   ÚdeserializezASTFunction.deserialize	  s`  ù€ ô	,ñ
 ˜TŸ^™^Ó,ˆÛMˆÜœ t§~¡~°vÓ>Ó?ˆ	à%)§Z¡Z×%5Ñ%5Ó%7ò 	UÑ!ˆI�zØ'1ò UÑ#�	˜8Ø 	Ò)Ø—O‘O I§O¡O°IÓ$>À	È8ÕTñUð	Uô ! Ó+ò 	8‰GˆAˆtÜ" 4§>¡>°4Ó8ˆBÜ˜"Ô.Õ/Ø—‘ Ð#3°QÕ7ð	8ô
 ! Ó+ò 	K‰GˆAˆtÜ" 4§>¡>°4Ó8ˆBÜ˜d D¬(¯/©/¸"¿'¹'À!»*ÀbÓ*IÕJð	Kð —N‘Nˆ	Ø"Ÿ™Ó*ò 	C‰IˆD�#Ü˜d D¬(×*<Ñ*<¸SÓ*AÕBð	Càˆr)   N)	ru   rª   r«   r™   r   r    rþ   r	  r  r¬   r)   r'   ró   ró   ì   s,   „ òð
 r§z¡zó 
ð= §¡ó =ór)   ró   c                   ó¬  ‡— e Zd ZU 	 	 dcdedee   dee   fd„Z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,                  fd	ej.                  ff«       d
„ Zd„ Zd„ Zdedeeef   ddfd„Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$defd„Z%d„ Z&d„ Z'd„ Z(d„ Z)d„ Z*d„ Z+d„ Z,d„ Z-d „ Z.d!„ Z/d"„ Z0d#„ Z1d$„ Z2e3jh                  d%e3jj                  d&e3jl                  d'e3jn                  d(e3jp                  d)e3jr                  d*e3jt                  d+e3jv                  d,e3jx                  d-e3jz                  d.e3j|                  d/e3j~                  d0iZ@eeAe3j„                     ef   ed1<   d2„ ZCd3„ ZDd4„ ZEd5„ ZFd6„ ZGd7„ ZHd8„ ZIe3j”                  d9e3j–                  d:e3j˜                  d;e3jš                  d<e3jœ                  d=e3jž                  d>iZPeeAe3j¢                     ef   ed?<   d@„ ZRe3j¦                  dAe3j¨                  dBe3jª                  dCe3j¬                  dDiZWeeAe3j°                     ef   edE<   dF„ ZYdG„ ZZdH„ Z[dI„ Z\dJ„ Z]dK„ Z^dL„ Z_dM„ Z`dN„ Zadebeef   fdO„ZcdefdP„ZddQefdR„ZedS„ ZfdT„ ZgdUe3jÐ                  fdV„Zie3jÔ                  dWe3jÖ                  dXiZleeAe3jÚ                     ef   edY<   dZ„ Znd[„ Zod\„ Zpd]„ Zqˆfd^„Zrd_„ ZsdUe3jè                  ddfd`„Zuda„ Zvej(                  jî                  euej(                  jð                   evey«      e eve«      e eve«      iZzee{e|e3jè                  gef   f   edb<   ˆxZ}S c c}} w )dÚCodeGeneratorNÚjit_fnÚfunction_typesÚ	file_namec                 óš  — || _         t        j                  |«      | _        || _        |dz
  | _        | j                  j                  ||d«       || j                  _        || j                  _        |€i n|| j                  _        |	€| j                  j                  «       n|	| _
        |€i n|| _        || _        i | _        |j                  «       D ]†  \  }}t        |t         «      r*|j#                  |j$                  |«      | j                  |<   Œ@t'        |dd«      }||v r't'        ||   |j$                  «      | j                  |<   Œx|| j                  |<   Œˆ i | _        || _        |
rt-        |d«      }|| _        |
| _        d | _        || _        g | _        d | _        i | _        | j=                  «       | _        d | _         d| _!        y )Nr   r   rª   Ú ÚfunctionF)"Úcontextr   r    r  Ú
begin_lineÚset_locÚoptionsÚcodegen_fnsÚ
module_mapÚcreate_moduleÚmoduleÚfunction_ret_typesÚ	prototyper°   r  r`   r   Úgetru   rÊ   r›   r  r(   Úfunction_nameÚ	is_kernelÚcur_noderr   Ú	scf_stackÚret_typerž   Ú_define_name_lookupÚdereference_namerx   Úvisiting_arg_default_value)r˜   r  r(  r°   r*  r  r"  r#  r$  r&  r+  r  rr   r  r   Úkr‡   Úmodule_names                     r'   r™   zCodeGenerator.__init__)  sž  € ð ˆŒÜ—z‘z 'Ó*ˆŒØ"ˆŒà$ q™.ˆŒØ�‰×Ñ˜Y¨
°AÔ6Ø&ˆ�‰Ôð $/ˆ�‰Ô Ø(2Ð(:¡"À
ˆ�‰ÔØ6<°n�d—l‘l×0Ñ0Ô2È&ˆŒØ(6Ð(>¡"ÀNˆÔØ"ˆŒàˆŒØ—L‘L“Nò 		#‰DˆAˆqÜ˜!œZÔ(Ø!+§¡°·
±
¸AÓ!>�—‘˜A‘Øä! ! \°2Ó6ˆKØ˜jÑ(Ü!(¨°KÑ)@À!Ç*Á*Ó!M�—‘˜A’à!"�—‘˜A’ð		#ð ˆŒØˆŒáÜ5°mÀZÓPˆMØ*ˆÔØ"ˆŒØˆŒØ ˆŒØˆŒØˆŒð .0ˆŒØ6:×6NÑ6NÓ6PˆÔØˆŒð +0ˆÕ'r)   Úbuiltin_namespaceÚprintÚminÚmaxc                 óD   — t        | j                  j                  ||«      S r_   )r    r  rt   )r˜   rw   Úmessages      r'   Ú_unsupportedzCodeGenerator._unsupportedc  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)  rg   )r˜   r$   Úabsent_markerr�   s       r'   Ú_is_constexpr_globalz"CodeGenerator._is_constexpr_globalf  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 r_   )r›   r)  )r$   Úabsentr˜   s     €r'   Úlocal_lookupz7CodeGenerator._define_name_lookup.<locals>.local_lookups  s   ø€ à—;‘;—?‘? 4¨Ó0Ð0r)   c                 ó&  •— ‰j                   j                  | |«      }t        ||u | ‰j                  v t	        |«      t
        u t        |t        «      t        |dd«      t        |dd«      j                  d«      t        |t        j                  «      t        |«      ‰j                  | «      ‰j                  t        j                   j                  dd«      dk(  g«      r|S t#        t%        j&                  d	| › d
�«      j)                  dd«      «      ‚)NÚ__triton_builtin__Frª   r  ztriton.languageÚ"TRITON_ALLOW_NON_CONSTEXPR_GLOBALSÚ0Ú1z.                Cannot access global variable aà   from within @jit'ed
                function. Triton kernels can only access global variables that
                are instanstiated as constexpr (`x = triton.language.constexpr(42)`). Note that this is different from
                annotating a variable as constexpr (`x: triton.language.constexpr = 42`), which is not supported.  Alternatively, set the
                envvar TRITON_ALLOW_NON_CONSTEXPR_GLOBALS=1, but we do not
                promise to support this forever.ú
ú )r°   r)  r¹   r4  r%   r   r`   r   rÊ   Ú
startswithr   r;   r‚   r>  r1  ÚosÚenvironÚ	NameErrorÚtextwrapÚdedentrU   )r$   rA  r�   r˜   s      €r'   Úglobal_lookupz8CodeGenerator._define_name_lookup.<locals>.global_lookupw  s  ø€ Ø—+‘+—/‘/ $¨Ó/ˆCô Ø˜6�M 4¨4×+AÑ+AÐ#AÜ˜“I¤Ð+Ü˜s¤KÓ0Ü˜CÐ!5°uÓ=Ü˜C ¨rÓ2×=Ñ=Ð>OÓPÜ˜s¤H§N¡NÓ3Ü" 3Ó'Ø×-Ñ-¨dÓ3ð ×3Ñ3Ü—J‘J—N‘NÐ#GÈÓMÐQTÑTðô ð �
ÜÜ—‘ð %/Ø/3¨fð 51ð!4ó 5÷ 6=±W¸TÀ3Ó5GóIð Ir)   r]   c                 ó‚   •— ‰}‰‰‰j                   j                  fD ]  } || |«      }||usŒ|c S  t        | › d�«      ‚)Nz is not defined)r4  r)  rM  )r$   rA  Úlookup_functionr†   r=  rP  rB  r˜   s       €€€€r'   Úname_lookupz6CodeGenerator._define_name_lookup.<locals>.name_lookup—  sW   ø€ Ø"ˆFØ#/°À×@VÑ@V×@ZÑ@ZÐ#Zò !�Ù'¨¨fÓ5�Ø Ò&Ø ’Lð!ô ˜t˜f OÐ4Ó5Ð5r)   )r?   r<  r   )r˜   rS  r=  rP  rB  s   ` @@@r'   r/  z!CodeGenerator._define_name_lookupq  sF   û€ ð	1œsõ 	1ð	I¤õ 	Iô< ›ˆð	6œcð 	6¤c÷ 	6ð 	6ð Ðr)   r$   r†   r]   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$   r†   s      r'   Ú	set_valuezCodeGenerator.set_value¡  s    € ð "ˆ�‰�DÑØ %ˆ�‰˜Òr)   c                 ór   — | j                   j                  «       }| j                   j                  «       }||fS r_   )r    Úget_locr£   )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 r_   )r    r§   r!  )r˜   rY  rX  s      r'   Ú_set_insertion_point_and_locz*CodeGenerator._set_insertion_point_and_loc²  s&   € Ø�‰×,Ñ,¨RÔ0Ø�‰×Ñ˜SÕ!r)   c                 óˆ   — t        |«      s|g}|D ]/  }| j                  |«       t        |t        j                  «      sŒ/ y  y r_   )ro   r´   r`   rÂ   rê   )r˜   ÚstmtsÚstmts      r'   Úvisit_compound_statementz&CodeGenerator.visit_compound_statement¹  s?   € ä˜UÔ#Ø�GˆEØò 	ˆDØ�J‰J�tÔô ˜$¤§
¡
Õ+Ùñ	r)   c                 óD   — t         j                  j                  | |«       y r_   ©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 r_   )r´   rÎ   r   rn   Úelts)r˜   rw   rÎ   rI   rf  s        r'   Ú
visit_ListzCodeGenerator.visit_ListÇ  sN   € Ø�j‰j˜Ÿ™Ó"ˆØˆ{Ðˆ{Ü�~‰~¸$¿)¹)ÖD°3˜tŸz™z¨#�ÒDÓEˆØˆùò Es   ½Ac                 ó&  ‡ ‡— ‰ j                  |j                  «      }g }ˆˆ fd„Š ‰|«      }|€t        j                  }nCt	        |t        j
                  j                  «      sJ ‚|j                  |«       |j                  }‰ j                  j                  |«       ‰ j                  €|‰ _        n*‰ j                  |k7  rt        d‰ j                  › d|› �«      ‚‰ j                  j                  «       }‰ j                  j                  |«       y )Nc                 óÞ   •— t        | t        j                  «      rt        | ‰«      S t        | t        j                  t
        t        f«      r t        j                  | ‰j                  «      S | S r_   )
r`   r   rn   r‰   r   ÚintÚfloatr   Ú	to_tensorr    )r†   Údecayr˜   s    €€r'   rm  z)CodeGenerator.visit_Return.<locals>.decayÒ  sQ   ø€ Ü˜%¤§¡Ô0Ü-¨e°UÓ;Ð;Ü˜E¤H×$6Ñ$6¼¼UÐ#CÔDÜ×)Ñ)¨%°·±Ó>Ð>ØˆLr)   zInconsistent return types: ú and )r´   r†   r   Úvoidr`   rf   r   rŒ   r%   r    rZ   r.  rF   Úcreate_blockÚset_insertion_point_to_end)r˜   rw   Ú	ret_valuer�   rü   Úpost_ret_blockrm  s   `     @r'   rÓ   zCodeGenerator.visit_ReturnÎ  sÝ   ù€ Ø—J‘J˜tŸz™zÓ*ˆ	Øˆõ	ñ ˜)Ó$ˆ	àÐÜ—]‘]‰Fä˜i¬¯©×)AÑ)AÔBÐBÐBØ×!Ñ! 'Ô*Ø—^‘^ˆFØ�‰×Ñ˜Ô!Ø�=‰=Ð Ø"ˆD�MØ�]‰]˜fÒ$ÜÐ9¸$¿-¹-¸ÈÈfÈXÐVÓWÐWð Ÿ™×2Ñ2Ó4ˆØ�‰×/Ñ/°Õ?r)   c                 óœ   — | j                  |j                  «      }t        |t        j                  j
                  «      sJ ‚|j                  S r_   )r´   r†   r`   r   rf   rn   rŠ   )r˜   rw   ry   s      r'   Úvisit_StarredzCodeGenerator.visit_Starredì  s8   € Ø�z‰z˜$Ÿ*™*Ó%ˆÜ˜$¤§¡× 3Ñ 3Ô4Ð4Ð4Ø�{‰{Ðr)   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                  «      }t3        ||«      D ]  \  }}| j5                  ||«       Œ | j"                  j7                  «       }| j"                  j9                  |«       | j;                  |j<                  «       | j"                  j7                  «       j?                  «       rJ ‚| j@                  �| j@                  tB        jD                  k(  r2tB        jD                  | _         | j"                  jG                  g «       �n	tI        | j@                  tB        jJ                  «      r&| j@                  jL                  | j                  _'        n| j@                  g| j                  _'        | j                  jQ                  | j                  j!                  | j"                  «      «       | j"                  jG                  | j                  jS                  | j"                  «      D �cg c]  }| j"                  jU                  |«      ‘Œ c}«       | j                  jW                  «        |r| j"                  jY                  |«       y y # d| _        w xY wc c}w )Nz,nested function definition is not supported.éÿÿÿÿr   ©rÉ   rÎ   ©Útargetsr†   )Útargetr†   Ú
annotationTFÚpublicÚprivate)-r´   ry   rx   r:  rs   Údefaultsr|  r{   rÂ   rÈ   rÏ   rë   Ú	AnnAssignr1  r+  r(  r	  r    Úget_or_insert_functionr&  r*  rr   Ú	push_backÚadd_entry_blockr  ÚziprU  r¡   Úset_insertion_point_to_startr`  rº   Úhas_terminatorr.  r   ro  rZ   r`   r…   r7   rõ   Ú
reset_typerþ   Úcreate_poisonÚfinalizerq  )r˜   rw   rv   Úkwarg_namesr.   Údefault_valueÚarg_noder|  r$   Ú	st_targetÚ	init_nodeÚ
visibilityÚfn_tyÚentryÚ
arg_valuesÚarg_nameÚ	arg_valueÚ	insert_ptrG   s                      r'   rß   zCodeGenerator.visit_FunctionDefñ  s)  € Ø!%§¡¨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ˆ
ä#& y°*Ó#=ò 	0ÑˆH�iØ�N‰N˜8 YÕ/ð	0à—L‘L×4Ñ4Ó6ˆ	Ø�‰×1Ñ1°%Ô8à×%Ñ% d§i¡iÔ0ð —<‘<×3Ñ3Ó5×DÑDÔFÐFÐFØ�=‰=Ð  D§M¡M´X·]±]Ò$BÜ$ŸM™MˆDŒMØ�L‰L×Ñ˜RÖ ä˜$Ÿ-™-¬×)<Ñ)<Ô=Ø+/¯=©=×+>Ñ+>�—‘Õ(à,0¯M©M¨?�—‘Ô(Ø�G‰G×Ñ˜tŸ~™~×7Ñ7¸¿¹ÓEÔFØ�L‰L×ÑÀtÇ~Á~×GeÑGeÐfj×frÑfrÓGsÖtÀ˜dŸl™l×8Ñ8¸Õ<ÒtÔuØ�‰×ÑÔáØ�L‰L×3Ñ3°IÕ>ð øð? 38�Õ/üò8 us   Ã:&QÏ"QÑ	Q
c                 ó�   — g }|j                   D ]  }|| j                  |«      gz  }Œ | j                  |j                  «      }||fS r_   )ry   r´   Úkwarg)r˜   rw   rv   r{   rŠ  s        r'   Úvisit_argumentszCodeGenerator.visit_arguments&  sL   € Øˆ	Ø—9‘9ò 	+ˆCØ˜$Ÿ*™* S›/Ð*Ñ*‰Ið	+à—j‘j §¡Ó,ˆØ˜+Ð%Ð%r)   c                 óZ   — t         j                  j                  | |«       |j                  S r_   )rÂ   rc  rÆ   r{   rÒ   s     r'   Ú	visit_argzCodeGenerator.visit_arg-  s   € Ü�‰×%Ñ% d¨DÔ1Ø�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{  r†   r   r›   Ú
ValueErrorrÖ   )r˜   rw   r|  r{  r†   s        r'   Úvisit_AnnAssignzCodeGenerator.visit_AnnAssign1  s£   € à—Z‘Z §¡Ó0ˆ
Ø—‘˜DŸK™KÓ(ˆØ—
‘
˜4Ÿ:™:Ó&ˆàœÒ"Ø˜Ÿ™Ñ$Ü  F 8ð ,Dð "Eó Fð Fä˜eÓ$ˆEØ"'ˆD�K‰K˜ÑØ—;‘;˜vÑ&Ð&à× Ñ  Ó&Ð&r)   c                 ó6  — t        |t        j                  «      r7|j                  j                  j
                  dk(  sJ ‚| j                  ||«      S t        |t        j                  «      rq|j                  j                  j
                  dk(  sJ ‚t        |j                  «      D ]3  \  }}| j                  | j                  |«      |j                  |   «       Œ5 y t        |t        j                  «      sJ ‚| j                  | j                  |«      |«       y ©NrÏ   )r`   rÂ   Ú	SubscriptrÎ   Ú	__class__ru   Úvisit_Subscript_Storer   rs   rf  rU  r´   rŠ   rÈ   )r˜   r{  r†   r.   r$   s        r'   ÚassignTargetzCodeGenerator.assignTargetA  sØ   € Ü�fœcŸm™mÔ,Ø—:‘:×'Ñ'×0Ñ0°GÒ;Ð;Ð;Ø×-Ñ-¨f°eÓ<Ð<Ü�fœcŸi™iÔ(Ø—:‘:×'Ñ'×0Ñ0°GÒ;Ð;Ð;Ü$ V§[¡[Ó1ò B‘��4Ø—‘˜tŸz™z¨$Ó/°·±¸a±ÕAðBàÜ˜&¤#§(¡(Ô+Ð+Ð+Ø�‰�t—z‘z &Ó)¨5Õ1r)   c                 ó  ‡ ‡— ˆˆ fd„Š ‰‰ j                  |j                  «      «      }t        |t        j                  «      r|j
                  gn|j                  }t        |«      dk(  sJ ‚‰ j                  |d   |«       y )Nc                 ó  •— t        | t        j                  «      rt        | ‰«      S t        j                  t        j                  f}t        | «      } | �7t        | «      s,t        | |«      s t        j                  | ‰j                  «      } | S r_   )
r`   r   rn   r‰   r;   r   rb   r   rl  r    )r†   Únative_nontensor_typesÚ_sanitize_valuer˜   s     €€r'   r§  z3CodeGenerator.visit_Assign.<locals>._sanitize_valueO  so   ø€ Ü˜%¤§¡Ô0Ü-¨e°_ÓEÐEÜ&.§n¡n´h·n±nÐ%EÐ"Ü(¨Ó/ˆEØÐ Ü$ UÔ+Ü˜uÐ&<Ô=Ü ×*Ñ*¨5°$·,±,Ó?�ØˆLr)   r   r   )	r´   r†   r`   rÂ   r€  r{  rz  r‘   r£  )r˜   rw   rŠ   rz  r§  s   `   @r'   rÖ   zCodeGenerator.visit_AssignM  se   ù€ õ		ñ ! §¡¨D¯J©JÓ!7Ó8ˆÜ#-¨d´C·M±MÔ#B�4—;‘;‘-ÈÏÉˆÜ�7‹|˜qÒ Ð Ð Ø×Ñ˜' !™* fÕ-r)   c                 ó^  — |j                   j                  }t        j                  |t        j                  «       ¬«      }t        j
                  ||j                  |j                  «      }t        j                  |j                   g|¬«      }| j                  |«       | j                  |«      S )Nrx  ry  )r{  rÉ   rÂ   rÈ   ÚLoadÚBinOpÚopr†   rë   r´   r0  )r˜   rw   r$   ÚlhsÚrhsÚassigns         r'   rÙ   zCodeGenerator.visit_AugAssign_  sr   € Ø�{‰{�~‰~ˆÜ�h‰h˜$¤C§H¡H£JÔ/ˆÜ�i‰i˜˜TŸW™W d§j¡jÓ1ˆÜ—‘ T§[¡[ M¸Ô=ˆØ�
‰
�6ÔØ×$Ñ$ TÓ*Ð*r)   c                 óš   — t        |j                  «      t        j                  u r|j                  S | j                  |j                  «      S r_   )r%   rÎ   rÂ   rÏ   rÉ   r0  rÒ   s     r'   rÐ   zCodeGenerator.visit_Nameg  s4   € Ü�—‘‹>œSŸY™YÑ&Ø—7‘7ˆNØ×$Ñ$ T§W¡WÓ-Ð-r)   c                 óD   — t         j                  j                  | |«       y r_   rb  rÒ   s     r'   Úvisit_StorezCodeGenerator.visit_Storel  rd  r)   c                 óD   — t         j                  j                  | |«       y r_   rb  rÒ   s     r'   Ú
visit_LoadzCodeGenerator.visit_Loado  rd  r)   c                 ó†   — |j                   D �cg c]  }| j                  |«      ‘Œ }}t        j                  |«      S c c}w r_   )rf  r´   r   rn   )r˜   rw   r  ry   s       r'   Úvisit_TuplezCodeGenerator.visit_Tupler  s5   € Ø'+§y¡yÖ1 !�—
‘
˜1•Ð1ˆÐ1Ü�~‰~˜dÓ#Ð#ùò 2s   �>c                 óø   — t        |«      r t        ||«      || j                  ¬«      S t        |«      r5t        j                  dd|«      } t        ||«      || j                  ¬«      S  t        ||«      |«      S )N©Ú_builderz__(.*)__z__r\1__)rd   rÊ   r    r"   Úsub)r˜   Úmethod_namer¬  r­  Úreverse_method_names        r'   Ú_apply_binary_methodz"CodeGenerator._apply_binary_methodv  sn   € ä˜SÔ!Ø,”7˜3 Ó,¨S¸4¿<¹<ÔHÐHÜ˜SÔ!Ü"$§&¡&¨°jÀ+Ó"NÐØ4”7˜3Ð 3Ó4°SÀ4Ç<Á<ÔPÐPØ(Œw�s˜KÓ(¨Ó-Ð-r)   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:  Úformatru   r¼  ©r˜   rw   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¸3Ó?Ð?r)   Ú__add__Ú__sub__Ú__mul__Ú__truediv__Ú__floordiv__Ú__mod__Ú__pow__Ú
__lshift__Ú
__rshift__Ú__and__Ú__or__Ú__xor__rÀ  c                 ó˜  — | j                   j                  |«       | j                  |j                  «       | j                   j	                  «       }| j
                  j                  «       }i }|j                  r†| j                   j                  |«       |j                  «       | _        i | _        | j                  |j                  «       | j
                  j                  «       }| j                   j	                  «       }g }|D ]©  }|df|dffD ]a  \  }	}
||	v sŒt        |	|   «      t        ||   «      k(  }|r |	|   j                  ||   j                  k(  rŒJJ d|› d||   › d|
› d|	|   › �«       ‚ ||v s||v r|j                  |«       ||v r||vr||   ||<   ||v sŒ�||vsŒ¢||   ||<   Œ« 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ž   rœ   rá   r›   r%   rû   rS   Úkeys)r˜   rw   r�   Ú
then_blockÚ
else_blockÚ	then_defsÚ	else_defsÚnamesr$   ÚdefsÚ
block_nameÚ
type_equalÚthen_valÚthen_tyÚelse_valÚelse_tys                   r'   Úvisit_then_else_blocksz$CodeGenerator.visit_then_else_blocks—  s~  € à�‰×1Ñ1°*Ô=Ø×%Ñ% d§i¡iÔ0Ø—\‘\×5Ñ5Ó7ˆ
Ø—O‘O×(Ñ(Ó*ˆ	àˆ	Ø�;Š;Ø�L‰L×5Ñ5°jÔAØ!Ÿ,™,›.ˆDŒKØ ˆDŒOØ×)Ñ)¨$¯+©+Ô6ØŸ™×,Ñ,Ó.ˆIØŸ™×9Ñ9Ó;ˆJð ˆàò 	0ˆDà&/°Ð%8¸9ÀfÐ:MÐ$Nò SÑ ��jØ˜4’<Ü!% d¨4¡jÓ!1´T¸'À$¹-Ó5HÑ!H�JÙ%¨$¨t©*¯/©/¸WÀT¹]×=OÑ=OÓ*Oð SØ-¨d¨V°=ÀÈÁÀð P#Ø#- ,Ð.EÀdÈ4ÁjÀ\ðSóSÐOðSð �yÑ  D¨IÑ$5Ø—‘˜TÔ"à�yÑ  T°Ñ%:Ø")¨$¡-�	˜$‘à�yÒ  T°Ò%:Ø")¨$¡-�	˜$’ð	0ô$ ˜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r_   r¬   ©rµ   r$   r×  s     €r'   r·   z3CodeGenerator.visit_if_top_level.<locals>.<genexpr>Û  ó   øè ø€ Ò/RÀD°	¸$µÑ/Rùó   ƒc              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wr_   r¬   ©rµ   r$   rØ  s     €r'   r·   z3CodeGenerator.visit_if_top_level.<locals>.<genexpr>à  rå  ræ  )r•   r    rp  rq  Úcreate_cond_branchÚhandlerá  r†  rŽ   Úcreate_branchr‘   r„  Úget_typeÚadd_argumentr…  Úranger{   r%   r“   rU  )r˜   Úcondrw   Úsrr�   Úip_blockrÕ  rÖ  rÙ  Úendif_blockÚthen_handlesÚelse_handlesÚthen_hÚelse_hrG   r.   Úres_handlesr$   r7   Ú
new_valuesÚ	new_valuerØ  r×  s                        @@r'   Úvisit_if_top_levelz CodeGenerator.visit_if_top_levelË  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                 óB  ‡‡— t        | «      5 }|\  }}| j                  «       \  }}| j                  j                  «       }|j                  r| j                  j                  «       nd }	| j                  ||||	«      \  ŠŠ}}	}
t        ˆfd„|
D «       «      }| 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  r/t        ˆfd„|
D «       «      }| 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r_   r¬   rä  s     €r'   r·   z-CodeGenerator.visit_if_scf.<locals>.<genexpr>û  rå  ræ  Tr   c              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wr_   r¬   rè  s     €r'   r·   z-CodeGenerator.visit_if_scf.<locals>.<genexpr>  s   øè ø€ Ò3VÈ°I¸dµOÑ3Vùræ  )r•   rZ  r    rp  rá   rá  rŽ   r\  Úcreate_if_oprì  rê  Úmerge_block_beforeÚget_then_blockrq  r‘   Úcreate_yield_opÚget_else_blockrî  Ú
get_resultr%   r“   r„  rU  )r˜   rï  rw   rð  r�   r,   rY  Úlast_locrÕ  rÖ  rÙ  ró  ÚhÚif_oprô  r.   r÷  r$   r7   rø  rù  rØ  r×  s                        @@r'   Úvisit_if_scfzCodeGenerator.visit_if_scfò  s-  ù€ Ü˜dÓ#ð 	; rØ‰JˆG�QØ×<Ñ<Ó>‰LˆB�ØŸ™×2Ñ2Ó4ˆJØ8<¿º˜Ÿ™×2Ñ2Ô4ÈˆJà×+Ñ+¨D°'¸:ÀzÓRñ @ˆI�y *¨j¸%ô 0Ó/RÈEÔ/RÓRˆLØ×-Ñ-¨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�Ø—‘×,Ñ,¨\Ô:÷-	;ô0 5:¼#¸lÓ:KÓ4LÖM¨q�u×'Ñ'¨Õ*ÐMˆÐMØ27Ö8¨$�˜4‘×%Ó%Ð8ˆÐ8Ü(¨°eÓ<ˆ
Ü" 5¨*Ó5ò 	,‰OˆD�)Ø�N‰N˜4 Õ+ñ	,ùò# /S÷	;ð 	;üò0 NùÚ8s+   ŽB4JÃJ
ÃD&JÈJÈ;JÊJÊJc           	      ó¦  — | j                  |j                  «      }t        |«      r•|j                  t        j
                  | j                  ¬«      }t        | j                  «      j                  |«      }|r1| j                  r| j                  |d«      ‚| j                  ||«       y | j                  ||«       y t        |«      }t        |«      t        vrO| j                  |dj!                  dj#                  d„ t        D «       «      t        |«      j$                  «      «      ‚|r|j&                  n|j(                  }| j+                  |«       y )Nr·  zÔCannot have `return` statements inside `while` or `for` statements in triton (note that this also applies to `return` statements that are inside functions transitively called from within `while`/`for` statements)úO`if` conditionals can only accept values of type {{{}}}, not objects of type {}ú, c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr_   ©ru   ©rµ   r,   s     r'   r·   z)CodeGenerator.visit_If.<locals>.<genexpr>&  ó   è ø€ Ò!G° !§*¥*Ñ!Gùó   ‚)r´   Útestrd   Útor   Úint1r    r®   r°   r-  r:  rú  r  r   r%   Ú_condition_typesrÁ  r4   ru   rº   rá   r`  )r˜   rw   rï  Úcontains_returnÚactive_blocks        r'   râ   zCodeGenerator.visit_If  s  € Ø�z‰z˜$Ÿ)™)Ó$ˆä˜TÔ"Ø—7‘7œ8Ÿ=™=°4·<±<�7Ó@ˆDÜ3°D·K±KÓ@×FÑFÀtÓLˆOÙØ—>’>Ø×+Ñ+Øð TóUð Uð ×'Ñ'¨¨dÕ3à×!Ñ! $¨Õ-ä'¨Ó-ˆDä�D‹zÔ!1Ñ1Ø×'Ñ'ØÐk×rÑrØŸ	™	Ñ!GÔ6FÔ!GÓGÜ˜T›
×+Ñ+ó-ó.ð .ñ
 )-˜4Ÿ9š9°$·+±+ˆLØ×)Ñ)¨,Õ7r)   c           	      óL  — | j                  |j                  «      }t        |«      �rO|j                  t        j
                  | j                  ¬«      }t        | «      5  | j                  «       \  }}| j                  j                  «       }| j                  j                  |«       t        j                  | j                  |j                  «      | j                  «      }| j                  j                  «       }| j                  j                  «       }| j                  j                  |«       t        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 rn  Tr   r	  r
  c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr_   r  r  s     r'   r·   z,CodeGenerator.visit_IfExp.<locals>.<genexpr>Z  r  r  )$r´   r  rd   r  r   r  r    r•   rZ  rp  r…  r   rl  rº   r¡   rá   r\  r%   ro  rù   rþ  rê  rÿ  r   rq  r  r  rf   r   r  r   r  r:  rÁ  r4   ru   )r˜   rw   rï  rY  r  rÕ  rÝ  rÖ  rß  r.  Úret_type_irr  s               r'   rä   zCodeGenerator.visit_IfExp,  s#  € Ø�z‰z˜$Ÿ)™)Ó$ˆÜ˜TÕ"Ø—7‘7œ8Ÿ=™=°4·<±<�7Ó@ˆDä! $Ó'ñ !dØ#×@Ñ@ÓB‘��Hà!Ÿ\™\×6Ñ6Ó8�
Ø—‘×9Ñ9¸*ÔEÜ#×-Ñ-¨d¯j©j¸¿¹Ó.CÀTÇ\Á\ÓR�Ø!Ÿ\™\×=Ñ=Ó?�
à!Ÿ\™\×6Ñ6Ó8�
Ø—‘×9Ñ9¸*ÔEô $×-Ñ-¨d¯j©j¸¿¹Ó.EÀtÇ|Á|ÓT�Ø!Ÿ\™\×=Ñ=Ó?�
à×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                  ó   — y r_   r¬   rÒ   s     r'   Ú
visit_PasszCodeGenerator.visit_Passa  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.)r‘   ÚcomparatorsÚopsr:  r´   r¾  r   r%   rÂ   ÚIsr   ÚIsNotÚ_method_name_for_comp_opr)  rÁ  ru   r¼  )r˜   rw   r¬  r­  Ú	lhs_valueÚ	rhs_valuerº  s          r'   Úvisit_ComparezCodeGenerator.visit_Compared  s@  € Ü�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¸3Ó?Ð?r)   Ú__eq__Ú__ne__Ú__lt__Ú__le__Ú__gt__Ú__ge__r   c           
      óÐ  — | j                  |j                  «      }| j                  j                  t	        |j
                  «      «      }|€*| j                  |d|j
                  j                  › d�«      ‚t        |«      r t        ||«      | j                  ¬«      S 	  t        ||«      «       S # t        $ r, | j                  |d|› dt	        |«      j                  › �«      ‚w xY w)NzAST unary operator 'z!' is not (currently) implemented.r·  z)' is not (currently) implemented on type )r´   ÚoperandÚ_method_name_for_unary_opr)  r%   r«  r:  ru   rd   rÊ   r    ÚAttributeError)r˜   rw   r+  rx   s       r'   Úvisit_UnaryOpzCodeGenerator.visit_UnaryOpy  sà   € Ø—*‘*˜TŸ\™\Ó*ˆØ×+Ñ+×/Ñ/´°T·W±W³Ó>ˆØˆ:Ø×#Ñ# DÐ,@ÀÇÁ×AQÑAQÐ@RÐRsÐ*tÓuÐuÜ˜WÔ%Ø'”7˜7 BÓ'°·±Ô>Ð>ð	tØ'”7˜7 BÓ'Ó)Ð)øÜò 	tØ×#Ñ#ØÐ,¨R¨DÐ0YÔZ^Ð_fÓZg×ZpÑZpÐYqÐrótð tð	tús   ÂB0 Â05C%Ú__neg__Ú__pos__Ú__not__Ú
__invert__r,  c                 ó2  — t        |«      sJ d|› d�«       ‚t        |«      sJ d|› d�«       ‚t        |«      t        |«      u sJ d|› d�«       ‚t        |«      r?|j                  |j                  k(  s%J d|› d|j                  › d|j                  › d	�«       ‚y y )
Nzcannot reassign constxpr z in the loopzcannot reasign constexpr zLoop carried variable z changed typezLoop-carried variable z has initial type z but is re-assigned to z: in loop! Please make sure that the type stays consistent.)rb   r%   rd   )r˜   r$   Úloop_valÚlive_vals       r'   Ú_verify_loop_carried_variablez+CodeGenerator._verify_loop_carried_variableŠ  s¹   € Ü Ô)ÐYÐ-FÀtÀfÈLÐ+YÓYÐ)Ü Ô)ÐYÐ-FÀtÀfÈLÐ+YÓYÐ)Ü�H‹~¤ h£Ñ/Ð]Ð3IÈ$ÈÈ}Ð1]Ó]Ð/Ü$ XÔ.°(·-±-À8Ç=Á=Ò2Pð 	@Ø$ T FÐ*<¸X¿]¹]¸Oð L%Ø%-§]¡] Oð 4?ð@ó	@ÐPÐ2PÐ.r)   c                 ó$	  — t        | «      5 }|\  }}| j                  «       \  }}| j                  j                  «       }| j                  j	                  |«       | j
                  j                  |«       | j                  |j                  «       | j
                  j                  «        | j                  }|j                  «        g }	g }
|D ]F  }||v sŒ||   }||   }| j                  |||«       |	j                  |«       |
j                  |«       ŒH t        |
«      }|D �cg c]  }|j                  «       ‘Œ }}|
D �cg c]  }|j                  ‘Œ }}| j!                  ||«       | j                  j#                  ||«      }| j                  j%                  |j'                  «       |«      }| j                  j	                  |«       t)        t+        |«      «      D �cg c]  }|j-                  |«      ‘Œ }}t/        ||«      }t1        |	|«      D ]#  \  }}|| j2                  |<   || j                  |<   Œ% | j5                  |j6                  «      }| j                  j9                  |«       | j                  j;                  |j<                  |«       | j                  j%                  |j?                  «       |«      }| j                  j	                  |«       t)        t+        |«      «      D �cg c]  }|j-                  |«      ‘Œ }}t/        ||«      }t1        |	|«      D ]#  \  }}|| j2                  |<   || j                  |<   Œ% | j
                  j                  |«       | j                  |j                  «       | j
                  j                  «        | j                  }g }|D ]  }||v sŒ||   jA                  |«       Œ | j                  jC                  |«       d d d «       t)        t+        «      «      D �cg c]  }jE                  |«      ‘Œ }}t/        |«      }t1        	|«      D ]#  \  }} | | j2                  |<   | | j                  |<   Œ% |jF                  D ]  }!J d«       ‚ y c c}w c c}w c c}w c c}w # 1 sw Y   Œ£xY wc c}w )NzNot implemented)'r•   rZ  r    rp  r…  r-  rû   r`  rº   Úpoprž   Úeraser6  rŽ   rì  r%   r\  Úcreate_while_opÚcreate_block_with_parentÚ
get_beforerî  r‘   r{   r“   r„  r›   r´   r  rq  Úcreate_condition_oprê  Ú	get_afterrŒ   r  r  rá   rÂ   rc  rÆ   )"r˜   rw   rð  r�   r¢   rY  r  ÚdummyÚ	loop_defsrÙ  Ú	init_argsr$   r4  r5  Úinit_handlesr  Úinit_tysÚaÚinit_fe_tysÚwhile_opÚbefore_blockr.   Ú
block_argsÚcondition_argsr�   rï  Úafter_blockÚbody_handlesÚ	body_argsÚyieldsÚresult_handlesÚresult_valsÚnew_defr_  s"                                     r'   Úvisit_WhilezCodeGenerator.visit_While“  s  € Ü˜dÓ#ð @	1 rØ$&Ñ!ˆG�\Ø×<Ñ<Ó>‰LˆB�ð —L‘L×-Ñ-Ó/ˆEØ�L‰L×5Ñ5°eÔ<Ø�N‰N×!Ñ! $Ô'Ø×)Ñ)¨$¯)©)Ô4Ø�N‰N×ÑÔ ØŸ™ˆIØ�K‰KŒMð ˆEØˆIØ!ò 	/�Ø˜7’?à(¨™�HØ& t™}�HØ×6Ñ6°t¸XÀxÔPð —L‘L Ô&Ø×$Ñ$ XÕ.ð	/ô 0°	Ó:ˆLØ.:Ö;¨˜Ÿ
™
�Ð;ˆHÐ;Ø+4Ö5 a˜1Ÿ6›6Ð5ˆKÐ5Ø×-Ñ-¨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ò ,‘	��cØ$'�—‘˜DÑ!Ø(+�—‘ Ò%ð,ð —:‘:˜dŸi™iÓ(ˆDØ�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ò ,‘	��cØ$'�—‘˜DÑ!Ø(+�—‘ Ò%ð,ð �N‰N×!Ñ! $Ô'Ø×)Ñ)¨$¯)©)Ô4Ø�N‰N×ÑÔ ØŸ™ˆIØˆFØ!ò 8�Ø˜7’?Ø˜d‘O×/Ñ/°Õ7ð8ð �L‰L×(Ñ(¨Ô0÷A@	1ôF ;@ÄÀLÓ@QÓ:RÖS°Q˜(×-Ñ-¨aÕ0ÐSˆÐSÜ)¨.¸+ÓFˆÜ  ¨Ó4ò 	,‰MˆD�'Ø 'ˆD�K‰K˜ÑØ$+ˆD�O‰O˜DÒ!ð	,ð —K‘Kò 	6ˆDØ+Ð+Ó+�5ñ	6ùòY <ùÚ5ùò Qùò R÷e@	1ð @	1üòF TsX   ŒCRÃARÄ$Q-Ä;RÅQ2ÅBRÇQ7Ç7C7RË.Q<ÌB'RÎ.1RÏ=RÑ-RÒR
c                 ó  — |j                   j                  j                  dk(  sJ ‚| j                  |j                  «      }| j                  |j
                  «      }t        |«      r|j                  || j                  ¬«      S ||   S )Nr©  r·  )	rÎ   r¡  ru   r´   r†   Úslicerd   Ú__getitem__r    )r˜   rw   r¬  Úslicess       r'   Úvisit_Subscript_Loadz"CodeGenerator.visit_Subscript_Loadá  sm   € Ø�x‰x×!Ñ!×*Ñ*¨fÒ4Ð4Ð4Ø�j‰j˜Ÿ™Ó$ˆØ—‘˜DŸJ™JÓ'ˆÜ˜SÔ!Ø—?‘? 6°D·L±L�?ÓAÐAØ�6‰{Ðr)   c                 ó  — |j                   j                  j                  dk(  sJ ‚| j                  |j                  «      }| j                  |j
                  «      }t        |t        j                  «      sJ ‚|j                  ||«       y rŸ  )
rÎ   r¡  ru   r´   r†   rS  r`   r   rn   Ú__setitem__)r˜   rw   r†   r¬  rU  s        r'   r¢  z#CodeGenerator.visit_Subscript_Storeé  sf   € Ø�x‰x×!Ñ!×*Ñ*¨gÒ5Ð5Ð5Ø�j‰j˜Ÿ™Ó$ˆØ—‘˜DŸJ™JÓ'ˆÜ˜#œxŸ~™~Ô.Ð.Ð.Ø�‰˜ Õ&r)   c                 ó$   — | j                  |«      S r_   )rV  rÒ   s     r'   Úvisit_SubscriptzCodeGenerator.visit_Subscriptð  s   € Ø×(Ñ(¨Ó.Ð.r)   c                 ó^   — |j                   D �cg c]  }| j                  |«      ‘Œ c}S c c}w r_   )Údimsr´   )r˜   rw   Údims      r'   Úvisit_ExtSlicezCodeGenerator.visit_ExtSliceó  s"   € Ø+/¯9©9Ö5 C�—
‘
˜3•Ò5Ð5ùÒ5s   �*c           	      óz  ‡ — ‰ 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}|t        j                  u r] ||i |¤Ž}|j                  }|j                  }|j                  }|j.                  }
|j0                  }|j2                  }|j4                  }n½|t        u rªt7        |«      dkD  r|d   n#‰ j                  t)        j8                  d«      «      }t7        |«      dkD  r|d   n'‰ j                  |j                  j                  d   «      }t7        |«      dkD  r|d   n#‰ j                  t)        j8                  d«      «      }nt;        d«      ‚d}t=        |«      r+|j                  dk  rt        |j                   «      }d}||}}t?        j@                  |‰ jB                  «      }t?        j@                  |‰ jB                  «      }t?        j@                  |‰ jB                  «      }|jD                  jG                  «       r4|jD                  jG                  «       r|jD                  jG                  «       s3tI        d|jD                  › d	|jD                  › d	|jD                  › d
�«      ‚t?        jJ                  |jD                  |jD                  «      }t?        jJ                  ||jD                  «      }|jM                  ‰ jB                  «      }|jN                  t        jP                  jD                  jR                  jT                  k(  }|jV                  }|jV                  }|jV                  }‰ jB                  jY                  |||«      }‰ jB                  jY                  |||«      }‰ jB                  jY                  |||«      }‰ jB                  j[                  |«      }‰ j]                  |j                  j                   t        jP                  j_                  ||«      «       ta        ‰ «      5 }|\  }}‰ jc                  «       \  }}‰ jB                  je                  «       }‰ jB                  jg                  |«       ‰ jh                  jk                  |«       ‰ j#                  |j$                  «       ‰ jh                  jm                  «        |jo                  «        g }g }g }‰ jp                  D ]a  }||v sŒ‰ jp                  |   } ||   }!‰ js                  || |!«       |jk                  |«       |jk                  |!«       |jk                  | «       Œc ‰ ju                  ||«       tw        |«      }"|D �#cg c]  }#|#jx                  ‘Œ }$}#‰ jB                  j{                  ||||"«      }%t}        |
«      �+|%j                  d‰ jB                  j�                  |
«      «       t}        |«      �+|%j                  d‰ jB                  j�                  |«      «       |r*|%j                  d‰ jB                  jƒ                  «       «       |r*|%j                  d‰ jB                  jƒ                  «       «       ‰ jh                  jk                  |«       |%j…                  d«      }&‰ jB                  jg                  |&«       |j‡                  «       ‰ _        i ‰ _8        t        t7        |"«      «      D �cg c]  }|&j‰                  |dz   «      ‘Œ }'}t‹        |'|$«      }(t�        ||(«      D ]  \  }})‰ j]                  ||)«       Œ ‰ j#                  |j$                  «       ‰ jh                  jm                  «        g }‰ jp                  D ]W  }||v sŒ‰ jp                  |   }*t�        |*t        «      r t?        j@                  |*‰ jB                  «      }*|jk                  |*«       ŒY t7        |«      dkD  r&tw        |«      }+‰ jB                  j‘                  |+«       |&j“                  «       },|,j•                  «       dk(  sJ d«       ‚‰ jB                  jg                  |&«       |%j—                  «       }|r8‰ jB                  j™                  ||«      }‰ jB                  j›                  ||«      }‰ j                  |j                  j                      jV                  j�                  |«       ‰ j]                  |j                  j                   t        jP                  j_                  ||«      «       d d d «       t        t7        "«      «      D �cg c]  }%jŸ                  |«      ‘Œ }-}t‹        |-$«      }.t�        |.«      D ]  \  }})‰ j]                  ||)«       Œ |j&                  D ]  }	J d«       ‚ y c c}w c c}#w c c}w # 1 sw Y   Œ’xY wc c}w )Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr_   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 (r
  rÓ  ztt.num_stagesztt.loop_unroll_factorztt.disallow_acc_multi_bufferz
tt.flattenz7We use SCF, so the loop body should only have one blockz)Don't know what to do with else after for)Pr´   Úiterræ   ry   ÚdictÚkeywordsr   Ústatic_rangerî  Ústartr†   ÚendÚstepr   r›   r{  rÉ   r`  rº   rá   rÂ   rc  rÆ   Ú
num_stagesÚloop_unroll_factorÚdisallow_acc_multi_bufferÚflattenr‘   ÚNumÚRuntimeErrorrg   r   rl  r    r;   r:   rF   Úinteger_promote_implrù   r>   rf   r<   r=   rê  Úcreate_int_castrˆ  rU  r   r•   rZ  rp  r…  r-  rû   r8  r9  rž   r6  r\  rŽ   r%   Úcreate_for_opr   Úset_attrÚget_int32_attrÚget_unit_attrÚget_bodyrœ   r{   r“   r„  r`   r  Ú
get_parentÚsizeÚget_induction_varÚ
create_subÚ
create_addÚreplace_all_uses_withr  )/r˜   rw   ÚIteratorClassr{   Ú	iter_argsÚiter_kwargsÚiteratorrf  r.   r_  rj  rk  rl  rm  ÚlbÚubri  Únegative_stepÚiv_typeÚ
iv_ir_typeÚiv_is_signedÚivrð  r�   r¢   rY  r  ÚblockrA  rM  rÙ  r$   r4  r5  rB  r‡   rC  Úfor_opÚfor_op_bodyÚblock_handlesrH  r�   ÚlocalÚyield_handlesÚfor_op_regionrN  Úresult_valuess/   `                                              r'   Ú	visit_ForzCodeGenerator.visit_Forö  s™  ø€ ØŸ
™
 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ØœeÑ#ô "% Y£°!Ò!3�˜1’¸¿¹ÄCÇGÁGÈAÃJÓ9OˆBÜ!$ Y£°!Ò!3�˜1’¸¿¹ÀDÇIÁIÇNÁNÐSTÑDUÓ9VˆBÜ#& y£>°AÒ#5�9˜Q’<¸4¿:¹:ÄcÇgÁgÈaÃjÓ;Q‰DäÐbÓcÐcàˆÜ˜Ô 4§:¡:°¢>Ü˜dŸj™j˜[Ó)ˆDØ ˆMØ˜�ˆBÜ×Ñ  D§L¡LÓ1ˆÜ×Ñ  D§L¡LÓ1ˆÜ×!Ñ! $¨¯©Ó5ˆà�x‰x�‰Ô ¨¯©¯©Ô(9ÀÇÁ×ARÑARÔATÜÐNÈrÏxÉxÈjÐXZÐ[]×[cÑ[cÐZdÐdfÐgk×gqÑgqÐfrÐrsÐtÓuÐuÜ×/Ñ/°·±¸"¿(¹(ÓCˆÜ×/Ñ/°¸¿¹ÓDˆØ—]‘] 4§<¡<Ó0ˆ
Ø×-Ñ-´·±×1DÑ1D×1OÑ1O×1VÑ1VÑVˆà�Y‰YˆØ�Y‰YˆØ�{‰{ˆà�\‰\×)Ñ)¨"¨j¸,ÓGˆØ�\‰\×)Ñ)¨"¨j¸,ÓGˆØ�|‰|×+Ñ+¨D°*¸lÓKˆà�\‰\×'Ñ'¨
Ó3ˆØ�‰�t—{‘{—~‘~¤x§}¡}×';Ñ';¸BÀÓ'HÔIä˜dÓ#ð L	N rØ$&Ñ!ˆG�\Ø×<Ñ<Ó>‰LˆB�ð —L‘L×-Ñ-Ó/ˆEØ�L‰L×5Ñ5°eÔ<à�N‰N×!Ñ! $Ô'Ø×)Ñ)¨$¯)©)Ô4Ø�N‰N×ÑÔ Ø�K‰KŒMð ˆIØˆFØˆEØŸ™ò ,�Ø˜7’?Ø#Ÿ™¨tÑ4�HØ& t™}�HØ×6Ñ6°t¸XÀxÔPà—L‘L Ô&Ø×$Ñ$ XÔ.Ø—M‘M (Õ+ð,ð ×-Ñ-¨b°(Ô;Ü/°	Ó:ˆLØ(1Ö2 1˜Ÿ›Ð2ˆHÐ2Ø—\‘\×/Ñ/°°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à�N‰N×!Ñ! $Ô'Ø Ÿ/™/¨!Ó,ˆKØ�L‰L×5Ñ5°kÔBà!Ÿ,™,›.ˆDŒKØ ˆDŒOÜ=BÄ3À|ÓCTÓ=UÖV¸˜[Ÿ_™_¨Q°©UÕ3ÐVˆMÐVÜ,¨]¸HÓEˆJÜ  ¨
Ó3ò *‘	��cØ—‘˜t SÕ)ð*à×)Ñ)¨$¯)©)Ô4Ø�N‰N×ÑÔ ØˆFØŸ™ò )�Ø˜7’?Ø ŸO™O¨DÑ1�EÜ! %¬Ô3Ü (× 2Ñ 2°5¸$¿,¹,Ó G˜Ø—M‘M %Õ(ð)ô �6‹{˜QŠÜ 4°VÓ <�Ø—‘×,Ñ,¨]Ô;Ø'×2Ñ2Ó4ˆMØ ×%Ñ%Ó'¨1Ò,ÐgÐ.gÓgÐ,ð �L‰L×5Ñ5°kÔBØ×)Ñ)Ó+ˆBÙØ—\‘\×,Ñ,¨R°Ó4�Ø—\‘\×,Ñ,¨R°Ó4�Ø�K‰K˜Ÿ™Ÿ™Ñ'×.Ñ.×DÑDÀRÔHØ�N‰N˜4Ÿ;™;Ÿ>™>¬8¯=©=×+?Ñ+?ÀÀGÓ+LÔM÷YL	Nô^ 9>¼cÀ,Ó>OÓ8PÖQ°1˜&×+Ñ+¨AÕ.ÐQˆÐQÜ+¨N¸HÓEˆÜ˜U MÓ2ò 	&‰IˆD�#Ø�N‰N˜4 Õ%ð	&ð —K‘Kò 	6ˆDØEÐEÓE�5ñ	6ùòi @ùò~ 3ùò" W÷aL	Nð L	Nüò^ RsF   ¿jÔ7Cj,×?A=j,Ù<j"ÚEj,ß,j'àA>j,âFj,è9j8ê"
j,ê,j5c                 óÒ   — | j                  |j                  «      }| j                  |j                  «      }| j                  |j                  «      }t	        j
                  |||«      S r_   )r´   ÚlowerÚupperri  r   rS  )r˜   rw   r’  r“  ri  s        r'   Úvisit_SlicezCodeGenerator.visit_Slice�  sK   € Ø—
‘
˜4Ÿ:™:Ó&ˆØ—
‘
˜4Ÿ:™:Ó&ˆØ�z‰z˜$Ÿ)™)Ó$ˆÜ�~‰~˜e U¨DÓ1Ð1r)   c                 ó8   — | j                  |j                  «      S r_   )r´   r†   rÒ   s     r'   Úvisit_IndexzCodeGenerator.visit_Index–  s   € Ø�z‰z˜$Ÿ*™*Ó%Ð%r)   c                 óP   — |j                   | j                  |j                  «      fS r_   )r{   r´   r†   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´   r  Úmsgr   rf   Údevice_assertr    )r˜   rw   r  rš  s       r'   Úvisit_AssertzCodeGenerator.visit_Assertœ  sQ   € Ø�z‰z˜$Ÿ)™)Ó$ˆØ&*§h¡hÐ&:ˆd�j‰j˜Ÿ™Ô"ÀˆÜ�}‰}×*Ñ*¨4°¸t¿|¹|Ð*ÓLÐLr)   rx   c                 óN  — t        j                  |j                  g|¢­i |¤Ž}|j                  D �cg c]  }||   ‘Œ	 }}t	        |«      D ]W  \  }}t        |t        j                  t        t        t        t        f«      sŒ6t        j                  j                  |«      ||<   ŒY t        |d„ «      }|D �ci c]  }|t        ||«      “Œ }}t        |d„ «      }	|	D �cg c]  }t        ||«      ‘Œ }
}t!        |j"                  |
D �cg c]  }|j$                  ‘Œ c}|«      }| j&                  j)                  |«      �sL|j*                  }t-        |«      \  }}|D �cg c]Y  }|�/t        |t        t        t        j                  j                  f«      rt        j                  j                  n|j$                  ‘Œ[ }}t/        g ||t1        «       «      }t3        | j4                  ||| j&                  ||| j6                  |j8                  ||| j:                  j<                  | j:                  j>                  | j:                  j@                  ¬«      }	 |jC                  |jE                  «       «       |jP                  }|| j6                  |<   n| j6                  |   }| j&                  jS                  |«      }|
D �cg c]  }|jT                  ‘Œ }
}| j:                  jW                  ||
«      }|t        jX                  k(  ry t[        |j]                  «       «      D �cg c]  }|j_                  |«      ‘Œ }}ta        tc        ||g«      «      S c c}w c c}w c c}w c c}w c c}w # tF        $ r1}tI        | jJ                  jL                  | jN                  d «      |‚d }~ww xY wc c}w c c}w )Nc                 ó   — t        |«      S r_   ©rg   ©r,   r  s     r'   r  z0CodeGenerator.call_JitFunction.<locals>.<lambda>§  s   € ´MÀ!Ó4D€ r)   c                 ó   — t        |«       S r_   rŸ  r   s     r'   r  z0CodeGenerator.call_JitFunction.<locals>.<lambda>©  s   € ¼ÀqÓ9IÐ5I€ r)   )
r&  r  r*  r  rr   r  r   r"  r#  r$  )2ÚinspectÚgetcallargsrx   rv   rs   r`   r   r;   rk  rj  rè   r   rf   r   r   r   r[   ru   r%   r&  Úhas_functionÚ__globals__r   ró   rd  r  r  r'  rr   r    r"  r#  r$  r´   r¾   Ú	Exceptionr   r  rt   r,  r.  Úget_functionrê  Úcallro  rî  Úget_num_resultsr  Únextr“   )r˜   rx   ry   r¨   r$   r.   r{   Úargs_cstr  Ú	args_pathÚargs_valÚfn_namer°   r  r   rö   r(  r—   ÚeÚcallee_ret_typeÚsymbolÚcall_opr�   s                          r'   Úcall_JitFunctionzCodeGenerator.call_JitFunction¡  s   € Ü×"Ñ" 2§5¡5Ð:¨4Ò:°6Ñ:ˆØ')§|¡|Ö4˜t��T“
Ð4ˆÐ4Ü “oò 	7‰FˆAˆsÜ˜#¤§¡´´s¼DÄ+ÐNÕOÜ"Ÿ-™-×1Ñ1°#Ó6��Q’ð	7ô ! Ñ'DÓEˆØDLÖM¸D�DÔ+¨D°$Ó7Ñ7ÐMˆÐMÜ! $Ñ(IÓJˆ	Ø>GÖH°dÔ% d¨DÕ1ÐHˆÐHä˜BŸK™K¸hÖ)G°s¨#¯(«(Ò)GÈÓRˆà�{‰{×'Ñ'¨Õ0Ø—^‘^ˆFä$8¸Ó$<Ñ!ˆI�zð  öð ð ,/¨;¼*ÀSÜFJÌCÔQY×Q^ÑQ^×QdÑQdÐEeô;g”—‘×'Ò'Ølo×ltÑltñuðˆIð ô
 $ B¨	°8¼T»VÓDˆIÜ% d§l¡l°I¸vÈdÏkÉkÐbdØ4;ÈD×LcÑLcØ/1¯{©{ÀiÐ\fØ.2¯l©l×.BÑ.BÐPT×P\ÑP\×PhÑPhØ15·±×1HÑ1Hô	JˆIð
TØ—‘ §¡£
Ô+ð
 (×0Ñ0ˆOØ/>ˆD×#Ñ# GÒ,à"×5Ñ5°gÑ>ˆOØ—‘×)Ñ)¨'Ó2ˆØ*2Ö3 3�C—J“JÐ3ˆÐ3Ø—,‘,×#Ñ# F¨HÓ5ˆØœhŸm™mÒ+ØÜ27¸×8OÑ8OÓ8QÓ2RÖS¨Q�7×%Ñ% aÕ(ÐSˆÐSÜÔ'¨°/Ð1BÓCÓDÐDùòU 5ùò
 NùâHùâ)Gùòøô ò Tä& t§{¡{§¡¸¿¹ÀtÓLÐRSÐSûðTüò 4ùò TsB   ²MÂ6MÃMÄM
ÅAMÉM  Ê7NÌN"Í 	NÍ),NÎNc                 óP  ‡ — t        ‰ j                  |j                  «      «      }‰ j                  j	                  |«      }|�	 |‰ |«      S t        ˆ fd„|j                  D «       «      }|j                  D �cg c]  }‰ j                  |«      ‘Œ }}t        t        j                  j                  d„ |D «       «      «      }t        |t        «      r t        |||«       ‰ j                  |||«      S t!        |d«      rt#        |j$                  «      st&        j(                  j+                  |«      rhd‰ j,                  i}t/        j0                  |«      }d|j2                  v r‰ |d<   	  ||i |¤|¤Ž}	t        |	t4        «      rt'        j4                  |	«      }	|	S |‰ j>                  jA                  «       v rtC        t         |«      } ||i |¤Ž}	tE        tG        |	«      «      rtI        |	d„ «      S |	S c c}w # t6        $ r'}
t9        ‰ j:                  j<                  |d «      |
‚d }
~
ww xY w)Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr_   r³   ra  s     €r'   r·   z+CodeGenerator.visit_Call.<locals>.<genexpr>Õ  s   øè ø€ ÒD¨7�4—:‘:˜g×&ÑDùr¸   c              3   óF   K  — | ]  }t        |t        «      r|n|g–— Œ y ­wr_   )r`   rm   )rµ   r  s     r'   r·   z+CodeGenerator.visit_Call.<locals>.<genexpr>×  s#   è ø€ Ò1bÐXY´zÀ!ÄTÔ7J±!ÐQRÐPSÓ2SÑ1bùs   ‚!Ú__self__r¸  Ú
_generatorc                 ó   — | S r_   r¬   )r  s    r'   r  z*CodeGenerator.visit_Call.<locals>.<lambda>ò  s   € °Q€ r)   )%r   r´   ræ   Ú statically_implemented_functionsr)  rd  re  ry   rm   Ú	itertoolsÚchainÚfrom_iterabler`   r   r|   r³  r€   rb   r·  r   rf   Ú
is_builtinr    r¢  Ú	signatureÚ
parametersrn   r¦  r   r  rt   r4  rŠ   r5   r‚   r%   r‰   )r˜   rw   rx   Ústatic_implementationÚkwsr{   ry   Úextra_kwargsÚsigrZ   r¯  s   `          r'   rç   zCodeGenerator.visit_CallÏ  sÝ  ø€ Ü! $§*¡*¨T¯Y©YÓ"7Ó8ˆØ $× EÑ E× IÑ IÈ"Ó MÐØ Ð,Ù(¨¨tÓ4Ð4äÓD°d·m±mÔDÓDˆØ+/¯9©9Ö5 C�—
‘
˜3•Ð5ˆÐ5Ü”I—O‘O×1Ñ1Ñ1bÐ]aÔ1bÓbÓcˆÜ�bœ+Ô&Ü˜4  TÔ*Ø×(Ñ(¨¨T°3Ó7Ð7Ü�B˜
Ô#Ô(8¸¿¹Ô(EÌ(Ï-É-×JbÑJbÐceÔJfØ&¨¯©Ð5ˆLÜ×#Ñ# BÓ'ˆCØ˜sŸ~™~Ñ-Ø-1�˜\Ñ*ðKÙ˜$Ð6 ,Ð6°#Ñ6�ä˜c¤5Ô)Ü"Ÿ.™.¨Ó-�CØ�
ð �×'Ñ'×.Ñ.Ó0Ñ0ÜÔ+¨TÓ2ˆDÙ�$Ð˜#ÑˆÜ;IÌ$ÈsË)Ô;TÔ% c©;Ó7Ð]ÐZ]Ð]ùò9 6øô  ò Kô ' t§{¡{§¡¸¸dÓCÈÐJûðKús   Á8G0Å(0G5 Ç5	H%Ç>"H È H%c                 ó,   — t        |j                  «      S r_   )r   r†   rÒ   s     r'   Úvisit_ConstantzCodeGenerator.visit_Constantô  s   € Ü˜Ÿ™Ó$Ð$r)   rw   c                 ó¾  — t        |j                  «      dk7  r| j                  |d«      ‚| j                  |j                  d   «      }| j                  |j                  d   «      }| j                  j                  t        |j                  «      «      }|€5| j                  |dj                  |j                  j                  «      «      ‚| j                  |||«      S )Nr   z^chained boolean operators (A or B or C) are not supported; use parentheses to split the chain.r   r   z9AST boolean operator '{}' is not (currently) implemented.)r‘   rŠ   r:  r´   Ú_method_name_for_bool_opr)  r%   r«  rÁ  ru   r¼  rÂ  s        r'   Úvisit_BoolOpzCodeGenerator.visit_BoolOp÷  sÆ   € Üˆt�{‰{Ó˜qÒ Ø×#Ñ#ØÐvóxð xà�j‰j˜Ÿ™ Q™Ó(ˆØ�j‰j˜Ÿ™ Q™Ó(ˆØ×3Ñ3×7Ñ7¼¸T¿W¹W»ÓFˆØÐØ×#Ñ#ØÐQ×XÑXÐY]×Y`ÑY`×YiÑYiÓjólð là×(Ñ(¨°c¸3Ó?Ð?r)   Úlogical_andÚ
logical_orrÈ  c                 óÜ   — | j                  |j                  «      }t        |«      r1|j                  dk(  r"t	        j
                  |d| j                  ¬«      S t        ||j                  «      S )Nr+   )r   r   )r    )r´   r†   rd   rË   r   Úpermuter    rÊ   )r˜   rw   r¬  s      r'   rÌ   zCodeGenerator.visit_Attribute  sQ   € Ø�j‰j˜Ÿ™Ó$ˆÜ˜SÔ! d§i¡i°3Ò&6Ü×#Ñ# C¨¸¿¹ÔFÐFÜ�s˜DŸI™IÓ&Ð&r)   c                 óD   — t         j                  j                  | |«       y r_   rb  rÒ   s     r'   Ú
visit_ExprzCodeGenerator.visit_Expr  rd  r)   c                  ó   — y r_   r¬   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  )rm   rŠ   rs   r`   rÂ   ÚConstantr?   r†   ÚFormattedValueÚ
conversionr´   rg   r:  r%   ÚchrrÁ  ÚAssertionErrorr4   )r˜   rw   rŠ   r.   r†   Ú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           	      ó  •— |€y t        j                  «       5  t        j                  dt        «       t        j                  dt        «       | j
                  }| j                  j                  «       }|| _        t        |d«      rnt        |d«      rb| j                  j                  | j                  | j                  |j                  z   |j                  «       | j                  j                  «       }	 t        ‰| �=  |«      }|r"|| _        | j                  j                  |«       |cd d d «       S # t         $ r ‚ t"        $ r:}t!        | j$                  j&                  | j
                  t)        |«      «      d ‚d }~ww xY w# 1 sw Y   y xY w)NÚignoreÚlinenoÚ
col_offset)ÚwarningsÚcatch_warningsÚsimplefilterÚDeprecationWarningÚPendingDeprecationWarningr,  r    rW  r€   r!  r  r   rÞ  rß  Úsuperr´   r   r¦  r  rt   rT   )r˜   rw   Ú	last_noder  rZ   r¯  r¡  s         €r'   r´   zCodeGenerator.visit#  sB  ø€ Øˆ<ØÜ×$Ñ$Ó&ñ 	ô ×!Ñ! (Ô,>Ô?Ü×!Ñ! (Ô,EÔFØŸ™ˆIØ—|‘|×+Ñ+Ó-ˆHØ ˆDŒMÜ�t˜XÔ&¬7°4¸Ô+FØ—‘×$Ñ$ T§^¡^°T·_±_ÀtÇ{Á{Ñ5RÐTX×TcÑTcÔdØŸ<™<×/Ñ/Ó1�ðZÜ‘g‘m DÓ)�ñ Ø )�”Ø—‘×$Ñ$ XÔ.Ø÷1	ñ 	øô $ò ØÜò Zô ' t§{¡{§¡¸¿¹ÄtÈAÃwÓOÐUYÐYûðZú÷	ð 	ús0   ™CFÃ6D4Ä%FÄ4F Å5E;Å;F Æ FÆFc                 ój   — | j                  |dj                  t        |«      j                  «      «      ‚)Nzunsupported AST node type: {})r:  rÁ  r%   ru   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: ú>)r‘   ry   re  rF   r   r´   r`   rè   ÚNotImplementedErrorr¦  rT   r   r  rt   )r˜   rw   Ú	arg_countÚpassedr9  r¯  s         r'   Úexecute_static_assertz#CodeGenerator.execute_static_assertC  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 )Nrw   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r_   r³   ra  s     €r'   r·   z=CodeGenerator.static_executor.<locals>.ret.<locals>.<genexpr>^  s   øè ø€ Ò#U¸G D§J¡J¨w×$7Ñ#Uùr¸   )re  r   ry   r´   r   )r˜   rw   r$   r†   rÂ  r{   ry   Ú	python_fns   `      €r'   rZ   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ñ   )rñ  rZ   s   ` r'   Ústatic_executorzCodeGenerator.static_executorY  s   ø€ ð	6œCŸH™Hõ 	6ð ˆ
r)   rº  )NFNFNr   )~ru   rª   r«   r   r   r   r?   r™   r‘   rm   rî  rk  rj  r`   rÊ   r4  r   Ú__annotations__Úupdater   rf   Údevice_printÚminimumÚmaximumr:  r>  r/  r
   r   r   rU  rZ  r\  r`  rÜ   rg  rÓ   ru  rß   r˜  rš  r�  r£  rÖ   rÙ   rÐ   r±  r³  rµ  r¼  rÃ  rÂ   ÚAddÚSubÚMultÚDivÚFloorDivÚModÚPowÚLShiftÚRShiftÚBitAndÚBitOrÚBitXorrÀ  r	   Úoperatorrá  rú  r  râ   rä   r  r#  ÚEqÚNotEqÚLtÚLtEÚGtÚGtEr   Úcmpopr.  ÚUSubÚUAddÚNotÚInvertr,  Úunaryopr6  rQ  rV  r¢  rZ  r^  r�  r”  r–  r   r˜  rœ  r³  rç   rÆ  ÚBoolOprÉ  ÚAndÚOrrÈ  ÚbooloprÌ   rÏ  rÑ  rÛ  r´   rÆ   rñ   rí  rò  Ústatic_assertÚstatic_printr5  rº  r<  r   Ú__classcell__)rµ   r,   r¡  s   00@r'   r  r  '  s  ø… ð `eØ=>ñ10È+ð 10Ø?GÈ¹~ð10à$ S™Mó10ðf BEÀdÈEÐSXÐZ]Ð_iÐkrÐ@s×(t¸1¨¯©°Q©Ó(tÐ�t˜C ˜H‘~ÓtØ×ÑØ	�(—-‘-×,Ñ,Ð-Ø	�× Ñ Ð!Ø	�× Ñ Ð!ðô òLò	ò.ð`&˜cð &¨%°
¸IÐ0EÑ*Fð &È4ó &òò"ò	ò2òò@ð< Só ò
3?òj&òò'ò 
2ò.ò$+ò.ò
2ò2ò$ò.ò@ð 	�‰�Ø�‰�Ø�‰�)Ø�‰�Ø�‰�nØ�‰�Ø�‰�Ø�
‰
�LØ�
‰
�LØ�
‰
�IØ�	‰	�8Ø�
‰
�Ið>Ð˜T $ s§|¡|Ñ"4°cÐ"9Ñ:ó ò2Còh$,òN,ò>8ò63/òjò@ð$ 	�‰�˜#Ÿ)™) 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Ð$:Ñ;ó ò@òL6ò\ò'ò/ò6òX6òt2ò&ð0 U¨3°¨8¡_ó 0ðM Có Mð
,E ;ó ,Eò\#^òJ%ð
@ §¡ó 
@ð >A¿W¹WÀmÐUX×U[ÑU[Ð]iÐ<jÐ˜d 4¨¯
©
Ñ#3°SÐ#8Ñ9Ójò'ò2òòô$ò:cð¨#¯(©(ð °tó ò,
ð 	�‰×#Ñ#Ð%:Ø�‰×"Ñ"¡O°EÓ$:Ø‰_˜SÓ!Ø‰_˜SÓ!ð	QÐ$ d¨6°8¸S¿X¹X¸JÈ¸OÑ3LÐ+LÑ&M÷ ùóS  )us   ¦Mr  c                 ó€  — t        t        t        |j                  j	                  «       «      «      }t        g ||j                  |j                  «      }t        | «      \  }}	ddl	m
}
 t        d„ |j                  «      }|D �ci c]"  }| j                  |d      |j                  |   “Œ$ }}|j                  }  |
dddg«      ||«      }t        ||| j                  j                  «       | j!                  |«      | d||	|||¬«      }|j#                  | j%                  «       «       |j&                  }||_        |S c c}w )	Nr   )Ú
namedtuplec                 ó   — t        | «      dk(  S ri   )r‘   )r‡   s    r'   r  zast_to_ttir.<locals>.<lambda>s  s   € œc !›f¨™k€ r)   ÚSpecializationProxyrW   r¿  T)	r°   r*  r  r+  r  r   r"  r#  r$  )rm   r5   r   r¿  rŠ   ró   rW   r÷   r   Úcollectionsr  Úfilterrv   r  r¥  rœ   rT   r´   r¾   r&  r  )rx   rt   r  r"  r#  r$  rö   r(  r  r   r  Úleavesr.   rW   r¿  Úproxyr—   rZ   s                     r'   Úast_to_ttirr   m  s  € Ü”Sœ C§M¡M×$8Ñ$8Ó$:Ó;Ó<€IÜ˜B 	¨3¯=©=¸#¿)¹)ÓD€IÜ0°Ó4Ñ€Iˆzå&ÜÑ)¨3¯=©=Ó9€FØ?EÖF¸!�—‘˜a ™dÑ# S§]¡]°1Ñ%5Ñ5ÐF€IÐFØ—‘€IØI‰JÐ,¨{¸KÐ.HÓIÈ)ÐU^Ó_€EÜ˜g y¸¿¹×9LÑ9LÓ9NÐ^`×^eÑ^eÐfkÓ^lÐuwØ(,¸	ÈjÐbiØ*5À*ôN€Ið ‡O�O�B—H‘H“JÔØ
×
Ñ
€Cà€C„KØ€Jùò Gs   Â'D;)DrÂ   r¢  r"   rà  rK  rN  r»  r7   r   Útypingr   r   r   r   r   r	   r
   r   r   r  r   Ú_C.libtritonr   r   r   r   r   Úlanguage.corer   r   r   r   Úruntime.jitr   Úruntimer   Ú_utilsr   r   r   Úerrorsr   r   r    r(   r6   r[   rè   rb   rd   rg   rk   ro   r|   r‚   r‰   rŽ   r†   r“   rj  r%   r  r•   rc  r®   ró   r  r   r¬   r)   r'   ú<module>r(     sR  ðÛ 
Û Û 	Û Û 	Û Û Ý ß T× TÕ Tå Ý ß =Ó =ß YÓ YÝ .å !ß HÑ Hç aÑ aòò.ò(	ð%˜ð % ó %ð!˜ð ! ó !ðH�Sð H˜Tó HðQ˜ð Q ó Qð(�Sð (˜Tó (òòXò
Dð ¨*Ñ!5ó ð"  b§h¡h¡ð "¸¸Y¹ó "ð ˜#™t D›zÐ*Ð ÷3ñ 3ô*U%˜CŸO™Oô U%÷p8ñ 8ôvC�C—O‘Oô CóL"r)   