Ë
    P/æjïK  ã                   ó2  — 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mZmZm	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mZ ddl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) ejT                   G d„ d«      «       Z+ G d„ d«      Z,y)é    N)ÚCounterÚDictÚListÚOptionalé   )Úutils)	Úadd_push_nullÚadd_push_null_call_function_exÚcreate_call_functionÚcreate_call_methodÚcreate_dup_topÚcreate_instructionÚcreate_load_methodÚcreate_rot_nÚInstruction)Úunimplemented)Ú
AttrSourceÚSource)Úis_safe_constantÚrot_n_helper)ÚVariableTracker)ÚNNModuleVariable)ÚNumpyNdarrayVariableÚSymNodeVariableÚTensorVariableÚUnspecializedPythonVariable)ÚTensorWithTFOverrideVariablec                   ó"   — e Zd ZU eed<   eed<   y)ÚGraphOutputEntryÚindexÚvariableN)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__r   © ó    úX/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/_dynamo/codegen.pyr   r   %   s   … àƒJØÔr(   r   c                   óô  — e Zd ZdZ	 	 	 	 d5deej                  j                     dee   ddfd„Z	ddœd	„Z
d
„ Zd„ Zd6d„Zd7d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdee   fd„Zdefd„Zdefd„Zdefd„Zd6defd„Zdefd„Zdefd„ZeZ d„ Z!d„ Z"defd„Z#d „ Z$d!„ Z%defd"„Z&d#„ Z'd8d$„Z(d%„ Z)d&„ Z*d'„ Z+d(e,d)e-fd*„Z.d+„ Z/d,„ Z0	 d8d-ed.e1jd                  d)e-fd/„Z3defd0„Z4d-eddfd1„Z5d9d2„Z6dee   fd3„Z7defd4„Z8y):Ú	PyCodegenz<
    Helper class uses for constructing Python bytecode
    NÚrootÚgraph_output_varÚreturnc                 ó†  — || _         d | _        t        j                  «       | _        i | _        g | _        |xs i | _        || _        || _	        | j                  j                  j                  | _        | j                  j                  | _        | j                  j                  j                  | _        d| _        d| _        y )NFT)r,   Útop_of_stackÚcollectionsr   ÚusesÚgraph_outputsÚ_outputÚtempvarsÚtxr-   ÚoutputÚcode_optionsÚcell_and_freevarsÚnew_varÚ mutable_side_effects_from_sourceÚvalue_from_source)Úselfr6   r,   r-   r5   s        r)   Ú__init__zPyCodegen.__init__0   s™   € ð ˆŒ	Ø7;ˆÔÜ.9×.AÑ.AÓ.CˆŒ	Ø:<ˆÔØ*,ˆŒØ š BˆŒØˆŒØ 0ˆÔØ ŸG™GŸN™N×7Ñ7ˆÔØ!%§¡×!:Ñ!:ˆÔØ—w‘w—~‘~×-Ñ-ˆŒØ05ˆÔ-Ø'+ˆÕr(   T)r<   c                óÒ   — | j                   }d| _         | j                  }| xj                  |z  c_        	 | j                  |«       || _         || _        y # || _         || _        w xY w)NT)r;   r<   Úforeach)r=   Ústack_valuesr<   ÚpriorÚprevs        r)   Úrestore_stackzPyCodegen.restore_stackE   sg   € Ø×5Ñ5ˆØ04ˆÔ-Ø×%Ñ%ˆØ×ÒÐ"3Ñ3Õð	*Ø�L‰L˜Ô&à49ˆDÔ1Ø%)ˆDÕ"øð 5:ˆDÔ1Ø%)ˆDÕ"ús   ¶A ÁA&c                 óp   — | j                   j                  «       D �cg c]  }|j                  ‘Œ c}S c c}w ©N)r3   Úvaluesr!   )r=   Úxs     r)   Úgraph_output_varszPyCodegen.graph_output_varsP   s)   € Ø$(×$6Ñ$6×$=Ñ$=Ó$?Ö@˜q�—
“
Ò@Ð@ùÒ@s   �3c                 ó>   — |j                  | «      }|�
J d|› �«       ‚y )Nzreconstruct!=None )Úreconstruct)r=   ÚvalueÚress      r)   Úcall_reconstructzPyCodegen.call_reconstructS   s)   € Ø×Ñ Ó%ˆØˆ{Ð8Ð0°°Ð8Ó8‰{r(   c                 óœ  — t        | j                  «      }t        j                  dk  r| j	                  «         |«        | j                  |d }| j                  |d…= |r%| j                  j                  t        |«      «       n$| j                  j                  t        |«      «       t        j                  dk\  r| j	                  «        yy)a˜  
        `gen_fn` generates instructions via PyCodegen methods
        that push a single callable to the stack.

        `add_push_null` pushes a NULL to the stack before or after the
        instructions generated by `gen_fn`, depending on Python version.

        Will attempt to use the NULL push bit for instructions
        with such bits (LOAD_GLOBAL 3.11+, LOAD_ATTR 3.12+, LOAD_SUPER_ATTR).
        ©é   é   N)Úlenr4   ÚsysÚversion_infoÚ	clear_tosÚextendr
   r	   )r=   Úgen_fnÚcall_function_exÚold_lenÚadded_instss        r)   r	   zPyCodegen.add_push_nullW   sž   € ô �d—l‘lÓ#ˆÜ×Ñ˜gÒ%ð �N‰NÔÙŒà—l‘l 7 8Ð,ˆØ�L‰L˜™Ð"ÙØ�L‰L×ÑÔ >¸{Ó KÕLà�L‰L×Ñ¤¨kÓ :Ô;Ü×Ñ˜wÒ&à�N‰NÕð 'r(   c                 óÔ  ‡ ‡‡‡	— t        |t        «      r"‰ j                  |«       ‰ j                  «        yt        |t        «      sJ ‚‰ j
                  Š	‰ j                  Š‰ j                  |u r|r‰	j                  t        «       «       y‰ j                  r9ddlm} t        |j                  |«      r ‰ |j                  j                  «       y|r³|j                  rW|j                  ‰ j                  v r?‰	j                  ‰ j!                  ‰ j                  |j                     «      «       |‰ _        y‰ j                  j#                  |«      �5‰	j                  ‰ j!                  ‰ j                  |   «      «       |‰ _        y|j                  �1|r/‰ j$                  r#‰ j                  |j                  «       |‰ _        y|j'                  «       rOt)        |j+                  «       «      r6‰	j                  ‰ j-                  |j+                  «       «      «       |‰ _        yt        |t.        «      r¡‰ j1                  |«      Š‰ j3                  ˆ fd„«       ‰ j5                  ‰‰   j6                  «       ‰	j                  ‰ j9                  |j;                  ‰ j<                  «      d¬«      «       ‰	j?                  tA        dd«      «       |‰ _        yt        |tB        «      r“|jE                  «       tF        k(  r|‰ j<                  jH                  sf‰ j1                  |jK                  ‰ j<                  «      «      Šˆˆˆ	ˆ fd	„}‰ j3                  |«       ‰	j?                  tA        d
d«      «       |‰ _        yt        |tL        tB        tN        tP        f«      rô‰ j1                  |«      Št        |tP        «      rU‰ j3                  ˆ fd„«       ‰ j5                  ‰‰   j6                  «       ‰	j?                  tA        dd«      «       |‰ _        yt        |tN        «      rH|jR                  r<ˆˆˆ	ˆ fd„}‰ j3                  |«       ‰	j?                  tA        d
d«      «       |‰ _        y‰ j5                  ‰‰   j6                  «       |‰ _        yt        |tT        «      r¿|jV                  jY                  d«      }|d
   ‰ jZ                  d   v r)‰	j                  ‰ j!                  |d
   «      «       |dd }n8‰ j\                  €J ‚‰	j                  ‰ j_                  ‰ j\                  «      «       |D ]"  }‰	j                  ‰ ja                  |«      «       Œ$ |‰ _        y‰ jb                  |xx   dz  cc<   	 ‰ j                  |«       |rB|‰ j                  v r4‰ j
                  j                  t        «       «       ‰ ji                  |«       |‰ _        y# td        $ r tg        d|› �«       Y Œew xY w)z:Generate code such that top-of-stack (TOS) is set to valueNr   )ÚMutableSideEffectsc                  óD   •— ‰ j                  t        j                  d«      S )NÚto_subclass©Úload_import_fromr   r"   ©r=   s   €r)   ú<lambda>z$PyCodegen.__call__.<locals>.<lambda>¢   s   ø€ ˜×-Ñ-¬e¯n©n¸mÓL€ r(   T©Úaddé   Fc                  ó‚   •— ‰j                  ‰ ‰   j                  «       ‰j                  ‰j                  d«      «       y ©NÚitem©Úload_graph_outputr    ÚappendÚcreate_load_attr©r3   Úgraph_outputs_keyr7   r=   s   €€€€r)   rX   z"PyCodegen.__call__.<locals>.gen_fn¹   s4   ø€ Ø×&Ñ& }Ð5FÑ'G×'MÑ'MÔNØ—‘˜d×3Ñ3°FÓ;Õ<r(   r   c                  óD   •— ‰ j                  t        j                  d«      S )NÚto_numpy_helperr`   rb   s   €r)   rc   z$PyCodegen.__call__.<locals>.<lambda>Ì   s   ø€ ˜D×1Ñ1´%·.±.ÐBSÓT€ r(   c                  ó‚   •— ‰j                  ‰ ‰   j                  «       ‰j                  ‰j                  d«      «       y rh   rj   rn   s   €€€€r)   rX   z"PyCodegen.__call__.<locals>.gen_fnÒ   s4   ø€ Ø×*Ñ*¨=Ð9JÑ+K×+QÑ+QÔRØ—M‘M $×"7Ñ"7¸Ó"?Õ@r(   ú.Úco_varnameszreconstruct: )5Ú
isinstancer   rN   rV   r   r4   r3   r0   rl   r   r;   Úside_effectsr]   Úmutable_localÚsourcer5   Úcreate_loadÚgetr<   Úis_python_constantr   Úas_python_constantÚcreate_load_constr   Úadd_graph_outputr	   rk   r    Úcreate_load_globalÚglobal_mangled_class_namer6   rW   r   r   Úpython_typeÚfloatÚexportÚ	as_tensorr   r   r   Úneed_unwrapr   Ú
module_keyÚsplitr8   r,   Úcreate_load_outputrm   r2   ÚNotImplementedErrorr   Ú	add_cache)
r=   rL   Úallow_cacher]   rX   ÚpartsÚpartr3   ro   r7   s
   `      @@@r)   Ú__call__zPyCodegen.__call__t   s  û€ ä�eœVÔ$Ø×!Ñ! %Ô(Ø�N‰NÔØä˜%¤Ô1Ð1Ð1Ø—‘ˆØ×*Ñ*ˆà×Ñ Ñ%©+Ø�M‰Mœ.Ó*Ô+Øà×0Ò0õ
 9ä˜%×-Ñ-Ð/AÔBÙ�U×(Ñ(×/Ñ/Ô0ØáØ×"Ò" u×':Ñ':¸d¿m¹mÑ'KØ—‘˜d×.Ñ.¨t¯}©}¸U×=PÑ=PÑ/QÓRÔSØ$)�Ô!ØØ�}‰}× Ñ  Ó'Ð3Ø—‘˜d×.Ñ.¨t¯}©}¸UÑ/CÓDÔEØ$)�Ô!Øà�<‰<Ð#©¸×8NÒ8NØ×!Ñ! %§,¡,Ô/ðj "ˆÕði ×%Ñ%Ô'Ô,<Ø×$Ñ$Ó&ô-
ð �M‰M˜$×0Ñ0°×1IÑ1IÓ1KÓLÔMðb "ˆÕôa ˜Ô;Ô<Ø $× 5Ñ 5°eÓ <Ðà×ÑÛLôð ×"Ñ" =Ð1BÑ#C×#IÑ#IÔJØ�M‰MØ×'Ñ'Ø×3Ñ3°D·G±GÓ<À$ð (ó ôð
 �M‰MÔ.¨q°%Ó8Ô9ðH "ˆÕôE �uœoÔ.Ø×!Ñ!Ó#¤uÒ,Ø—G‘G—N’Nð !%× 5Ñ 5°e·o±oÀdÇgÁgÓ6NÓ OÐ÷=ð ×Ñ˜vÔ&Ø�M‰MÔ.¨q°%Ó8Ô9ð` "ˆÕô_ ØäÜÜ+Ü$ð	ô
ð !%× 5Ñ 5°eÓ <Ðä˜%Ô!5Ô6Ø×"Ñ"ÛTôð ×&Ñ& }Ð5FÑ'G×'MÑ'MÔNØ—‘Ô2°1°eÓ<Ô=ð> "ˆÕô= ˜EÔ#>Ô?ÀE×DUÒDU÷Að ×"Ñ" 6Ô*Ø—‘Ô2°1°eÓ<Ô=ð. "ˆÕð+ ×&Ñ& }Ð5FÑ'G×'MÑ'MÔNð* "ˆÕô) ˜Ô/Ô0Ø×$Ñ$×*Ñ*¨3Ó/ˆEØ�Q‰x˜4×,Ñ,¨]Ñ;Ñ;Ø—‘˜d×.Ñ.¨u°Q©xÓ8Ô9Ø˜a˜b˜	‘à—y‘yÐ,Ð,Ð,Ø—‘˜d×5Ñ5°d·i±iÓ@ÔAØò ;�Ø—‘˜d×3Ñ3°DÓ9Õ:ð;ð "ˆÕð �I‰I�eÓ Ñ!Óð7Ø×%Ñ% eÔ,ñ ˜u¨¯©Ñ5Ø—‘×#Ñ#¤NÓ$4Ô5Ø—‘˜uÔ%à!ˆÕøô 'ò 7Ü ¨e¨WÐ5Ö6ð7ús   Õ0W ×W'×&W'c                 ó¬   — t        |j                  «       «      }|| j                  vr,t        t	        | j                  «      |«      | j                  |<   |S rF   )ÚidÚas_proxyr3   r   rS   )r=   rL   ro   s      r)   r~   zPyCodegen.add_graph_outputð   sP   € Ü˜uŸ~™~Ó/Ó0ÐØ D×$6Ñ$6Ñ6Ü4DÜ�D×&Ñ&Ó'¨ó5ˆD×ÑÐ0Ñ1ð !Ð r(   c                 óä   — | j                   }|j                  | j                  | j                  «      «       |j                  | j	                  |«      «       |j                  t        d«      «       y )NÚBINARY_SUBSCR)r4   rl   ry   r-   Ú_create_load_constr   )r=   r    r7   s      r)   rk   zPyCodegen.load_graph_outputø   sQ   € Ø—‘ˆØ�‰�d×&Ñ& t×'<Ñ'<Ó=Ô>Ø�‰�d×-Ñ-¨eÓ4Ô5Ø�‰Ô(¨Ó9Õ:r(   c                 óà   — | j                  «       }|| j                  |<   |j                  r|| j                  |j                  <   | j                  j	                  | j                  |«      «       y rF   )r:   r5   rw   r4   rl   Úcreate_store)r=   rL   Úvars      r)   rŠ   zPyCodegen.add_cacheþ   sU   € Ø�l‰l‹nˆØ"ˆ�‰�eÑØ×ÒØ14ˆD�M‰M˜%×-Ñ-Ñ.Ø�‰×Ñ˜D×-Ñ-¨cÓ2Õ3r(   c                 ó"   — |D ]
  } | |«       Œ y rF   r'   )r=   ÚitemsÚis      r)   r@   zPyCodegen.foreach  s   € Øò 	ˆAÙ��Gñ	r(   c                 óÎ   — t        j                  dd|«      }| j                  j                  }||v rt	        ||   «      t	        |«      k(  sJ ‚|||<   | j                  |d¬«      gS )zStore value in a new globalz[^a-zA-Z0-9_]+Ú_Trd   )ÚreÚsubr6   Ú	f_globalsr�   r   )r=   ÚnamerL   rŸ   s       r)   Úsetup_globally_cachedzPyCodegen.setup_globally_cached	  si   € ä�v‰vÐ'¨¨dÓ3ˆØ—G‘G×%Ñ%ˆ	Ø�9ÑÜ�i ‘oÓ&¬"¨U«)Ò3Ð3Ð3à#ˆI�d‰OØ×'Ñ'¨°$Ð'Ó7Ð8Ð8r(   c                 ó   — d | _         y rF   )r0   rb   s    r)   rV   zPyCodegen.clear_tos  s
   € Ø ˆÕr(   c                 ó~   — t        |t        «      sJ ‚| j                  j                  |«       | j	                  «        y rF   )ru   r   r4   rl   rV   )r=   Úinsts     r)   Úappend_outputzPyCodegen.append_output  s.   € Ü˜$¤Ô,Ð,Ð,Ø�‰×Ñ˜DÔ!Ø�‰Õr(   c                 ó‚   — t        d„ |D «       «      sJ ‚| j                  j                  |«       | j                  «        y )Nc              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wrF   )ru   r   )Ú.0rH   s     r)   ú	<genexpr>z*PyCodegen.extend_output.<locals>.<genexpr>  s   è ø€ Ò=°!”:˜a¤×-Ñ=ùs   ‚)Úallr4   rW   rV   )r=   Úinstss     r)   Úextend_outputzPyCodegen.extend_output  s2   € ÜÑ=°uÔ=Ô=Ð=Ð=Ø�‰×Ñ˜EÔ"Ø�‰Õr(   c                 ó   — | j                   S rF   )r4   rb   s    r)   Úget_instructionszPyCodegen.get_instructions   s   € Ø�|‰|Ðr(   c                 ó�   — || j                  «       v rt        d|¬«      S || j                  d   v s
J |› d�«       ‚t        d|¬«      S )NÚ
LOAD_DEREF©Úargvalrt   z missingÚ	LOAD_FAST©r9   r   r8   ©r=   r    s     r)   ry   zPyCodegen.create_load#  sR   € Ø�4×)Ñ)Ó+Ñ+Ü% l¸4Ô@Ð@Ø�t×(Ñ(¨Ñ7Ñ7ÐJ¸D¸6ÀÐ9JÓJÐ7Ü! +°dÔ;Ð;r(   c                 ór   — || j                  «       v sJ ‚t        j                  dk\  rdnd}t        ||¬«      S )NrP   r³   ÚLOAD_CLOSUREr±   )r9   rT   rU   r   )r=   r    Ú	inst_names      r)   Úcreate_load_closurezPyCodegen.create_load_closure)  s:   € Ø�t×-Ñ-Ó/Ñ/Ð/Ð/Ü#&×#3Ñ#3°wÒ#>‘KÀNˆ	Ü! )°DÔ9Ð9r(   c                 ó€   — || j                  «       v rt        d|¬«      S || j                  d   v sJ ‚t        d|¬«      S )NÚSTORE_DEREFr±   rt   Ú
STORE_FASTr´   rµ   s     r)   r–   zPyCodegen.create_store.  sF   € Ø�4×)Ñ)Ó+Ñ+Ü% m¸DÔAÐAØ�t×(Ñ(¨Ñ7Ñ7Ð7Ð7Ü! ,°tÔ<Ð<r(   c                 ó    — |r%| j                   j                  j                  |«       || j                  d   v s
J |› d�«       ‚t	        d|¬«      S )NÚco_namesz not in co_namesÚLOAD_GLOBALr±   )r6   r7   Úupdate_co_namesr8   r   )r=   r    re   s      r)   r   zPyCodegen.create_load_global4  sN   € ÙØ�G‰G�N‰N×*Ñ*¨4Ô0Ø�t×(Ñ(¨Ñ4Ñ4ÐO¸¸Ð>NÐ6OÓOÐ4Ü! -¸Ô=Ð=r(   c                 óN   — t        |«      s
J d|› �«       ‚| j                  |«      S )Nzunsafe constant )r   r”   ©r=   rL   s     r)   r}   zPyCodegen.create_load_const:  s.   € Ü Ô&ÐBÐ*:¸5¸'Ð(BÓBÐ&Ø×&Ñ& uÓ-Ð-r(   c                 ó   — t        d|¬«      S )NÚ
LOAD_CONSTr±   ©r   rÂ   s     r)   r”   zPyCodegen._create_load_const>  s   € Ü! ,°uÔ=Ð=r(   c                 ó‚   — | j                   j                  j                  |«       | j                  t	        |«      «       y rF   )r6   r7   rÀ   r¥   r   rµ   s     r)   Úload_methodzPyCodegen.load_methodC  s,   € Ø�‰�‰×&Ñ& tÔ,Ø×ÑÔ-¨dÓ3Õ4r(   c                 ó8   — | j                  t        |«      «       y rF   )r¬   r   )r=   Únargss     r)   Úcall_methodzPyCodegen.call_methodG  s   € Ø×ÑÔ-¨eÓ4Õ5r(   c                 ón   — || j                   d   vr| j                   dxx   |fz  cc<   t        d|¬«      S )Nr¾   Ú	LOAD_ATTRr±   ©r8   r   rµ   s     r)   rm   zPyCodegen.create_load_attrJ  s:   € Ø�t×(Ñ(¨Ñ4Ñ4Ø×Ñ˜jÓ)¨d¨WÑ4Ó)Ü! +°dÔ;Ð;r(   c                 óD   — | j                  | j                  |«      «       y rF   )r¥   rm   rµ   s     r)   Ú	load_attrzPyCodegen.load_attrO  s   € Ø×Ñ˜4×0Ñ0°Ó6Õ7r(   c                 óh   — |j                  d«      D �cg c]  }| j                  |«      ‘Œ c}S c c}w )Nrs   )r‡   rm   )r=   Únamesr    s      r)   Úcreate_load_attrszPyCodegen.create_load_attrsR  s*   € Ø8=¿¹ÀCÓ8HÖI°�×%Ñ% dÕ+ÒIÐIùÒIs   ”/c                 ón   — || j                   d   vr| j                   dxx   |fz  cc<   t        d|¬«      S )Nr¾   Ú
STORE_ATTRr±   rÍ   rµ   s     r)   Úcreate_store_attrzPyCodegen.create_store_attrU  s:   € Ø�t×(Ñ(¨Ñ4Ñ4Ø×Ñ˜jÓ)¨d¨WÑ4Ó)Ü! ,°tÔ<Ð<r(   c                 óD   — | j                  | j                  |«      «       y rF   )r¥   rÕ   rµ   s     r)   Ú
store_attrzPyCodegen.store_attrZ  s   € Ø×Ñ˜4×1Ñ1°$Ó7Õ8r(   c                 óx  — g }|r~t         j                  dk\  rk|j                  t        | j	                  |d¬«      «      «       |dkD  r9|j                  g | j                  |dz   «      ¢| j                  |dz   «      ¢«       |S |j                  | j	                  |d¬«      g| j                  |dz   «      ¢«       |S )z6Load the global fn_name on the stack num_on_stack down©rQ   é   Trd   r   rf   r   )rT   rU   rW   r	   r   Úrot_n)r=   Úfn_nameÚ	push_nullÚnum_on_stackr7   s        r)   Úload_function_namezPyCodegen.load_function_name]  sÇ   € àˆÙœ×)Ñ)¨WÒ4Ø�M‰Mœ-¨×(?Ñ(?ÀÈTÐ(?Ó(RÓSÔTØ˜aÒØ—‘ðØŸ™ L°1Ñ$4Ó5ðàŸ™ L°1Ñ$4Ó5ðôð ˆð �M‰Mà×+Ñ+¨G¸Ð+Ó>ðà—Z‘Z ¨qÑ 0Ó1ðôð ˆr(   c                 óÐ   — 	 t        |«      S # t        $ rO t        d|¬«      | j                  t	        |«      «      gt        d«      ¢t        dd¬«      ‘t        d|¬«      ‘cY S w xY w)NÚBUILD_TUPLE©Úargrf   ÚCALL_FUNCTION_EXr   ÚUNPACK_SEQUENCE)r   ÚAttributeErrorr   r”   r   )r=   Úns     r)   rÛ   zPyCodegen.rot_nr  sz   € ð
	Ü “?Ð"øÜò 	ô # =°aÔ8Ø×'Ñ'¬°Q«Ó8ðô ˜a“ðô #Ð#5¸1Ô=ð	ô
 #Ð#4¸!Ô<ðò ð	ús   ‚
 �AA%Á$A%c                 óÆ   — t         j                  dk\  sJ ‚| j                  d„ «      gt         j                  dk\  rt        dd¬«      fnd¢t	        dd	«      ¢t        d
«      ‘S )NrÙ   c                   ó   — y rF   r'   r'   r(   r)   rc   z$PyCodegen.pop_null.<locals>.<lambda>„  s   � r(   rP   ÚSWAPrf   râ   r'   r   FÚPOP_TOP)rT   rU   r”   r   r   rb   s    r)   Úpop_nullzPyCodegen.pop_null  sw   € ô ×Ñ 7Ò*Ð*Ð*à×#Ñ#¡LÓ1ð

ô
 ×#Ñ# wÒ.ô $ F°Ô2Ñ4àð

ô " ! UÓ+ð

ô ˜yÓ)ð

ð 
	
r(   c                 ó8   — | j                  t        d«      «       y )Nrë   )r¥   r   rb   s    r)   Úpop_topzPyCodegen.pop_top�  s   € Ø×ÑÔ-¨iÓ8Õ9r(   rÉ   rÝ   c                 ó<   — | j                  t        ||¬«      «       y )N)rÝ   )r¬   r   )r=   rÉ   rÝ   s      r)   Úcall_functionzPyCodegen.call_function’  s   € Ø×ÑÔ/°ÀÔKÕLr(   c                 ó6   — | j                  t        «       «       y rF   )r¥   r   rb   s    r)   Údup_topzPyCodegen.dup_top•  s   € Ø×Ñœ>Ó+Õ,r(   c                 óD   — | j                  | j                  |«      «       y rF   )r¥   r–   )r=   Úvarnames     r)   ÚstorezPyCodegen.store˜  s   € Ø×Ñ˜4×,Ñ,¨WÓ5Õ6r(   rÜ   Úcodec                 ó¦  ‡ ‡‡‡‡— ‰j                   Š‰sJ ‚‰ j                  Šˆˆˆˆˆ fd„}|rkt        j                  dk\  rX‰ j	                  |«       ‰j                  ‰ j                  |dz   «      «       ‰j                  ‰ j                  |dz   «      «       n* |«        ‰j                  ‰ j                  |dz   «      «       ‰ j                  «        y )Nc                  ó@  •— ‰D ]I  } | ‰j                  «       v sJ ‚t        j                  dk\  rdnd}‰j                  t	        || ¬«      «       ŒK ‰j                  t	        dt        ‰«      ¬«      «       ‰j                  ‰j                  ‰«      «       t        j                  dk  r ‰j                  ‰j                  ‰«      «       t        j                  dk\  r(‰j                  t	        d«      t	        d	d
¬«      g«       y ‰j                  t	        dd
¬«      «       y )NrP   r³   r·   r±   rá   râ   rÙ   ÚMAKE_FUNCTIONÚSET_FUNCTION_ATTRIBUTEé   )r9   rT   rU   rl   r   rS   r}   rW   )r—   r¸   rö   rÜ   Úfreevarsr7   r=   s     €€€€€r)   rX   z4PyCodegen.make_function_with_closure.<locals>.gen_fn¢  sö   ø€ Øò I�Ø˜d×4Ñ4Ó6Ñ6Ð6Ð6ä#&×#3Ñ#3°wÒ#>‘KÀNð ð —‘Ô0°À3ÔGÕHðIð �M‰MÔ,¨]ÄÀHÃÔNÔOØ�M‰M˜$×0Ñ0°Ó6Ô7Ü×Ñ 'Ò)Ø—‘˜d×4Ñ4°WÓ=Ô>Ü×Ñ 7Ò*Ø—‘ä*¨?Ó;Ü*Ð+CÈÔNðõð —‘Ô0°ÀdÔKÕLr(   rÙ   rf   r   )Úco_freevarsr4   rT   rU   r	   rW   rÛ   rV   )r=   rÜ   rö   rÝ   rÞ   rX   rü   r7   s   ```   @@r)   Úmake_function_with_closurez$PyCodegen.make_function_with_closure›  s©   ü€ ð ×#Ñ#ˆÙˆˆxØ—‘ˆ÷	Mð 	Mñ* œ×)Ñ)¨WÒ4Ø×Ñ˜vÔ&Ø�M‰M˜$Ÿ*™* \°AÑ%5Ó6Ô7Ø�M‰M˜$Ÿ*™* \°AÑ%5Ó6Õ7áŒHØ�M‰M˜$Ÿ*™* \°AÑ%5Ó6Ô7Ø�‰Õr(   c                 óR  — | j                   j                  }|j                  }t        j                  dd|j
                  «      }|j                  |d«      |u r| j                  |d¬«      S d|› �}| j                   j                  j                  ||«      }| j                  |d¬«      S )zT
        Generate a LOAD_GLOBAL instruction to fetch a given python module.
        z^.*[.]Ú NTrd   Ú
___module_)	r6   r7   Úglobal_scoper�   rž   r"   rz   r   Úinstall_global_by_id)r=   Úmodr7   r  r    ÚprefixÚglobal_names          r)   Úcreate_load_python_modulez#PyCodegen.create_load_python_moduleÀ  s™   € ð —‘—‘ˆØ×*Ñ*ˆÜ�v‰v�i  S§\¡\Ó2ˆØ×Ñ˜D $Ó'¨3Ñ.Ø×*Ñ*¨4°TÐ*Ó:Ð:Ø˜d˜VÐ$ˆØ—g‘g—n‘n×9Ñ9¸&À#ÓFˆØ×&Ñ& {¸Ð&Ó=Ð=r(   c                 óš  ‡ — ‰ j                  ‰ j                  |d«      «       ‰ j                  j                  j                  }|D ]`  }|j
                  rA‰ j                  ˆ fd„«       ‰ j                  |«       ‰ j                  t        dd«      «       ŒP‰ j                  |«       Œb ‰ j                  t        t        |«      d«      «       y)z2Call the generated code function stored in fn_nameTc                  ón   •— ‰ j                  ‰ j                  t        «      ‰ j                  d«      g«      S )Nr„   )r¬   r  Útorchrm   rb   s   €r)   rc   z4PyCodegen.make_call_generated_code.<locals>.<lambda>Õ  s3   ø€ ˜D×.Ñ.à ×:Ñ:¼5ÓAØ ×1Ñ1°+Ó>ðó€ r(   r   FN)
r¬   rß   r6   r7   Ú	graphargsÚpass_arg_as_tensorr	   rN   r   rS   )r=   rÜ   r  rã   s   `   r)   Úmake_call_generated_codez"PyCodegen.make_call_generated_codeÍ  s¬   ø€ à×Ñ˜4×2Ñ2°7¸DÓAÔBà—G‘G—N‘N×,Ñ,ˆ	Øò 	+ˆCØ×%Ò%Ø×"Ñ"óôð ×%Ñ% cÔ*Ø×"Ñ"Ô#7¸¸5Ó#AÕBà×%Ñ% cÕ*ð	+ð 	×ÑÔ/´°I³ÀÓFÕGr(   c                 óZ   —  | t        | j                  j                  |«      |«      «       y rF   )r   r6   Úimport_source)r=   Úmodule_nameÚobject_names      r)   ra   zPyCodegen.load_import_fromã  s    € ÙŒZ˜Ÿ™×-Ñ-¨kÓ:¸KÓHÕIr(   c                 óê  — t         j                  dk\  rSt        ||«      }|d   j                  dk(  sJ ‚|j	                  d| j                  |«      «       t        d|¬«      |d<   |S t         j                  dk\  r]t        ||«      }t         j                  dk\  rd}d}nd}d	}||   j                  |k(  sJ ‚t        d
|¬«      }|j	                  ||«       |S | j                  |«      t        d|¬«      gS )NrP   éÿÿÿÿÚCALLÚCALL_KWrâ   rÙ   )rQ   é   éþÿÿÿÚPRECALLÚKW_NAMESr±   ÚCALL_FUNCTION_KW)rT   rU   r   ÚopnameÚinsertr}   r   )r=   rÉ   Úkw_namesrÝ   r7   ÚidxÚexpected_instÚkw_names_insts           r)   Úcreate_call_function_kwz!PyCodegen.create_call_function_kwæ  sø   € Ü×Ñ˜wÒ&Ü)¨%°Ó;ˆFØ˜"‘:×$Ñ$¨Ò.Ð.Ð.Ø�M‰M˜"˜d×4Ñ4°XÓ>Ô?Ü+¨I¸5ÔAˆF�2‰JØˆMÜ×Ñ Ò(Ü)¨%°Ó;ˆFÜ×Ñ 7Ò*Ø�Ø &‘à�Ø )�Ø˜#‘;×%Ñ%¨Ò6Ð6Ð6Ü.¨zÀ(ÔKˆMØ�M‰M˜#˜}Ô-ØˆMà×"Ñ" 8Ó,ÜÐ1°uÔ=ð
ð 	
r(   c                 ó   — t        d|¬«      S )NÚDELETE_FASTr±   rÅ   rÂ   s     r)   Úcreate_deletezPyCodegen.create_deleteþ  s   € Ü! -¸Ô>Ð>r(   )NNNN)F)T)r   )r.   N)9r"   r#   r$   Ú__doc__r   r
  ÚnnÚModuleÚstrr>   rD   rI   rN   r	   rŽ   r~   rk   rŠ   r@   r¡   rV   r¥   r¬   r   r   r®   ry   r¹   r–   r   r}   r”   rˆ   rÇ   rÊ   rm   rÏ   rÒ   rÕ   r×   rß   rÛ   rì   rî   r%   Úboolrð   rò   rõ   ÚtypesÚCodeTyperþ   r  r  ra   r!  r$  r'   r(   r)   r+   r+   +   sÉ  „ ñð Ø*.Ø*.Øñ,ð �u—x‘x—‘Ñ'ð,ð # 3™-ð	,ð 
ó,ð* @Dô 	*òAò9óó:z"òx!ò;ò4òò9ò!òò
ð
 $ {Ñ"3ó ð< ;ó <ð:¨;ó :ð
= Kó =ñ>°[ó >ð.¨+ó .ð>¨;ó >ð ,Ðò5ò6ð<¨ó <ò
8òJð=¨ó =ò
9óò*ò
ò :ðM 3ð M°4ó Mò-ò7ð QRñ#Øð#Ø"'§.¡.ð#Ø=Aó#ðJ>°ó >ðH°ð H¸ó Hó,Jð
ÀTÈ+ÑEVó 
ð0? kô ?r(   r+   )-r1   Údataclassesr�   rT   r*  Útypingr   r   r   r   Útorch.nnr
  r   r   Úbytecode_transformationr	   r
   r   r   r   r   r   r   r   Úexcr   rx   r   r   r   r   Úvariables.baser   Úvariables.nn_moduler   Úvariables.tensorr   r   r   r   Úvariables.torch_functionr   Ú	dataclassr   r+   r'   r(   r)   ú<module>r6     s{   ðã Û Û 	Û 
Û ß 0Ó 0ã å ÷
÷ 
õ 
õ ß &ß 1Ý +Ý 1÷ó õ Cð ×Ñ÷ð ó ð÷
T?ò T?r(   