Ë
    L²jSy  ã                   ó  — d Z ddlZddlZddlZddlZddlmZmZ ddlm	Z	 ddl
mZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ dZd	Zd
ZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'de(e   ddfd„Z)	 d-dedef   de*de+e,ef   dz  de-e(e   e(e   f   fd„Z.dededdfd„Z/ ej`                  d¬ «       G d!„ d"«      «       Z1ej`                   G d#„ d$«      «       Z2d%ee   d&ee   d'eeege3f   de(e   fd(„Z4d)e-edf   de(e   fd*„Z5 G d+„ d,«      Z6y).aÐ  
This module provides functionality for resuming Python execution at specific points in code,
primarily used by PyTorch Dynamo for control flow handling and optimization. It implements
bytecode transformation and execution state management to enable:

- Resuming execution at arbitrary points in Python bytecode
- Managing context managers and their state across execution boundaries
- Transforming and generating new code objects with preserved execution state
- Supporting Python 3.11+ exception handling and block management
- Restoring torch function mode stacks and other execution context

The module is critical for PyTorch Dynamo's ability to optimize code while preserving
Python semantics and execution state.
é    N)ÚCallableÚIterable)ÚAbstractContextManager)ÚAnyÚcasté   )Úadd_push_nullÚbytecode_from_templateÚcreate_binary_subscrÚcreate_call_functionÚcreate_call_function_exÚcreate_instructionÚcreate_jump_absoluteÚcreate_load_constÚInstructionÚoverwrite_instructionÚtransform_code_objectÚ	unique_id)ÚExactWeakKeyDictionaryé   é   é   é   é    é@   é€   é   i   Útorch_dynamo_resume_inÚ__is_tracing_resume_prologueÚinstsÚreturnc                 óÀ   — t         j                  dk\  rK| j                  t        d«      «       t         j                  dk  r| j                  t        dd¬«      «       y y y )N©é   é   Ú	PUSH_NULL)r$   é   ÚSWAPr   ©Úarg)ÚsysÚversion_infoÚappendr   )r    s    ú]/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/_dynamo/resume_execution.pyÚ_initial_push_nullr/   ;   sN   € Ü
×Ñ˜7Ò"Ø�‰Ô'¨Ó4Ô5Ü×Ñ˜gÒ%Ø�L‰LÔ+¨F¸Ô:Õ;ð &ð #ó    Útemplate.Ústack_indexÚvarname_mapc                 ó²  — t        | |¬«      }|j                  t        d«      «       |D ].  }|j                  sŒ|j                  xj                  |z  c_        Œ0 t        d„ t        |«      D «       d«      \  }}|�|€J ‚t        |t        d«      g«       ||dz      j                  dk(  sJ ‚t        ||dz      t        d«      g«       |d |dz    ||dz   d  fS )N©r3   ÚPOP_TOPc              3   ód   K  — | ](  \  }}|j                   d v r|j                  dk(  r||f–— Œ* y­w)©Ú	LOAD_FASTÚLOAD_FAST_BORROWÚdummyN©ÚopnameÚargval)Ú.0ÚiÚinsts      r.   ú	<genexpr>z5_bytecode_from_template_with_split.<locals>.<genexpr>R   s9   è ø€ ò 	
á��4Ø�{‰{Ð?Ñ?Ø—‘˜wÒ&ð �ŒIñ	
ùs   ‚.0)NNÚNOPr   )	r
   r-   r   Úexn_tab_entryÚdepthÚnextÚ	enumerater   r=   )r1   r2   r3   Útemplate_coderA   Ú	dummy_idxÚ
dummy_insts          r.   Ú"_bytecode_from_template_with_splitrK   C   s  € ô
 +¨8ÀÔM€MØ×ÑÔ+¨IÓ6Ô7ð ò 4ˆØ×ÓØ×Ñ×$Ò$¨Ñ3Ö$ð4ô
 !ñ	
ä$ ]Ó3ô	
ð 	óÑ€Iˆzð Ð  ZÐ%;Ð;Ð;ô ˜*Ô'9¸%Ó'@Ð&AÔBð ˜ Q™Ñ'×.Ñ.°)Ò;Ð;Ð;Ü˜-¨	°A©Ñ6Ô9KÈEÓ9RÐ8SÔTà˜˜9 q™=Ð)¨=¸ÀQ¹¸Ð+IÐIÐIr0   r;   Ústack_var_namec                 ó@   — 	 |  y #  t         j                  |«       ‚ xY w©N)Ú$__import_torch_dot__dynamo_dot_utilsÚset_torch_function_mode_stack)r;   rL   s     r.   Ú_try_except_tf_mode_templaterQ   f   s'   € ð
ÚøðÜ,×JÑJØô	
ð 	ús   ‚ …T)Úfrozenc            	       óÄ   — e Zd ZU eed<   dZeedf   dz  ed<   dee	ef   de
e   de
e   fd„Zdee	ef   de
e   de
e   fd	„Zdee	ef   de
e   dee
e   edz  f   fd
„Zy)ÚReenterWithr2   N.Útarget_valuesÚcode_optionsÚcleanupr!   c                 ón   — ddl m} t        t        | j                  d |«       i¬«      \  }}||z   |dd |S )z–
        Codegen based off of:
        try:
            (rest)
        except:
            (restore previous tf mode stack)
            raise
        r   )Úget_prev_stack_var_namerL   r5   N)Úvariables.torch_functionrY   rK   rQ   r2   )ÚselfrV   rW   rY   Úsetup_try_exceptÚepilogues         r.   Útry_except_torch_function_modez*ReenterWith.try_except_torch_function_modey   sF   € õ 	Fä%GÜ(Ø×ÑØ)Ñ+BÓ+DÐEô&
Ñ"Ð˜(ð
  Ñ'ˆ‘ˆ
àÐr0   c                 ó
  — g }| j                   r"| j                   D �cg c]  }t        |«      ‘Œ }}t        d| j                  › �«      }||d   vr|dxx   |fz  cc<   dD ]  }||d   vsŒ|dxx   |fz  cc<   Œ g }t	        |«       |j                  g |¢t        t        |«      d«      ¢t        d|¬«      ‘«       dt        t           d	t        d
dfd„}t        || j                  d|i¬«      \  }	}
|
|z   |dd ||	z   S c c}w )z™
        Codegen based off of:
        load args
        enter context
        try:
            (rest)
        finally:
            exit context
        Ú___context_manager_Úco_varnames©Ú	__enter__Ú__exit__Úco_namesFÚ
STORE_FAST©r>   Úctxr;   r!   Nc                 ó€   — | j                  «        	 | | j                  d d d «       y # | j                  d d d «       w xY wrN   rb   ©rh   r;   s     r.   Ú	_templatez*ReenterWith.try_finally.<locals>._template³   s4   € Ø�M‰MŒOð/Ùà—‘˜T 4¨Õ.ø�—‘˜T 4¨Õ.ús   ’( ¨=r5   )rU   r   r   r2   r/   Úextendr   Úlenr   r   r   rK   )r[   rV   rW   Ú	load_argsÚvalÚctx_nameÚnameÚ
create_ctxrk   Úsetup_try_finallyr]   s              r.   Útry_finallyzReenterWith.try_finally‘   sL  € ð ˆ	Ø×ÒØ;?×;MÑ;MÖN°CÔ*¨3Õ/ÐNˆIÐNÜÐ2°4×3CÑ3CÐ2DÐEÓFˆØ˜<¨Ñ6Ñ6Ø˜Ó'¨H¨;Ñ6Ó'Ø-ò 	4ˆDØ˜<¨
Ñ3Ò3Ø˜ZÓ(¨T¨GÑ3Ô(ð	4ð )+ˆ
Ü˜:Ô&Ø×ÑðØðä%¤c¨)£n°eÓ<ðô # <¸ÔAðô	
ð	/Ô1´#Ñ6ð 	/¼sð 	/Àtó 	/ô 'IØ�t×'Ñ'°e¸XÐ5Fô'
Ñ#Ð˜8ð  Ñ'ˆ‘ˆ
ØÐ-Ñ-Ð-ùò; Os   �D c                 ó  — g }| j                   r"| j                   D �cg c]  }t        |«      ‘Œ }}g }t        j                  dk  rt	        |«       |j                  g |¢t        t        |«      d«      ¢«       dt        t           dt        ddfd„}t        || j                  «      \  }}||z   |dd t        d„ |D «       d«      }	|	€J ‚t        |	t        d	«      g«       d
„ |D «       }
t        |
d«      }t        |
d«      �J ‚||z   |fS c c}w )zR
        Codegen based off of:
        with ctx(args):
            (rest)
        )r$   é   Frh   r;   r!   Nc                 ó6   — | 5  | d d d «       y # 1 sw Y   y xY wrN   © rj   s     r.   rk   z'ReenterWith.__call__.<locals>._templateÙ   s   € Øñ Ù÷÷ ñ ús   ƒ�c              3   óZ   K  — | ]#  }|j                   d v r|j                  dk(  r|–— Œ% y­w)r8   rh   Nr<   ©r?   rA   s     r.   rB   z'ReenterWith.__call__.<locals>.<genexpr>ã   s1   è ø€ ò àØ—;‘;Ð"CÑCØ—K‘K 5Ò(ô ñùs   ‚)+rC   c              3   ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­w)ÚPUSH_EXC_INFON)r=   rz   s     r.   rB   z'ReenterWith.__call__.<locals>.<genexpr>ð   s    è ø€ ò 
Ø¨¯©¸Ó)GŒDñ
ùs   ‚—)rU   r   r+   r,   r/   rl   r   rm   r   r   rK   r2   rF   r   r   )r[   rV   rW   rn   ro   rr   rk   Ú
setup_withr]   Úload_fast_ctx_instÚpush_exc_info_genÚpush_exc_info_insts               r.   Ú__call__zReenterWith.__call__À   sR  € ð ˆ	Ø×ÒØ;?×;MÑ;MÖN°CÔ*¨3Õ/ÐNˆIÐNà(*ˆ
ä×Ñ˜gÒ%Ü˜zÔ*Ø×ÑðØðä%¤c¨)£n°eÓ<ðô	
ð	Ô1´#Ñ6ð 	¼sð 	Àtó 	ô  BØ�t×'Ñ'ó 
Ñˆ
�Hð  Ñ'ˆ‘ˆ
ä!ñà&ôð ó
Ðð "Ð-Ð-Ð-äÐ0Ô3EÀeÓ3LÐ2MÔNñ
Ø%ô
Ðô "Ð"3°TÓ:ÐäÐ% tÓ,Ð4Ð4Ð4à˜JÑ&Ð(:Ð:Ð:ùòW Os   �D
)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__rU   Útupler   ÚdictÚstrÚlistr   r^   rt   r�   rx   r0   r.   rT   rT   t   s¼   … àÓØ,0€M�5˜˜c˜‘? TÑ)Ó0ð Ø   c ™Nð Ø59¸+Ñ5Fð à	ˆkÑ	ó ð0-.Ø   c ™Nð-.Ø59¸+Ñ5Fð-.à	ˆkÑ	ó-.ð^7;Ø   c ™Nð7;Ø59¸+Ñ5Fð7;à	ˆt�KÑ  +°Ñ"4Ð4Ñ	5ô7;r0   rT   c                   óæ   — e Zd ZU ej                  ed<    ej                  e¬«      Z	ee
   ed<    ej                  e¬«      Zee   ed<    ej                  e¬«      Zeeeef   eeef   f   ed<   y)ÚResumeFunctionMetadataÚcode)Údefault_factoryÚinstructionsÚ prefix_block_target_offset_remapÚblock_target_offset_remapN)r‚   rƒ   r„   ÚtypesÚCodeTyper†   ÚdataclassesÚfieldrŠ   r�   r   r�   r…   rˆ   r‘   r‡   rx   r0   r.   rŒ   rŒ   ú   s„   … à
�.‰.ÓØ&7 k×&7Ñ&7ÈÔ&M€L�$�{Ñ#ÓMð 3D°+×2CÑ2CØô3Ð$ d¨3¡ió ð
 	ˆ×Ñ¨$Ô/ð ˜t E¨#¨s¨(¡O°T¸#¸s¸(±^Ð$CÑDô r0   rŒ   Úl1Úl2Úcondc                 ó´   — t        |«      }g }	 t        |«      }| D ](  } |||«      sŒ|j                  |«       t        |«      }Œ* 	 |S # t        $ r Y |S w xY w)z®
    Two-pointer conditional filter.
    e.g. _filter_iter(insts, sorted_offsets, lambda i, o: i.offset == o)
    returns the instructions with offsets in sorted_offsets
    )ÚiterrF   r-   ÚStopIteration)r–   r—   r˜   ÚitÚresÚcurro   s          r.   Ú_filter_iterrŸ     sl   € ô 
ˆb‹€BØ€CðÜ�2‹hˆØò 	ˆCÙ�C˜�~Ø—
‘
˜3”Ü˜2“h‘ñ	ð €Jøô ò ØØ€Jðús   �A
 ©A
 Á
	AÁAÚtupc                 ó˜   — g }t        |«       |j                  d„ | D «       «       |j                  t        t        | «      d«      «       |S )Nc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrN   )r   )r?   ro   s     r.   rB   z'_load_tuple_and_call.<locals>.<genexpr>&  s   è ø€ Ò7¨CÔ" 3×'Ñ7ùs   ‚F)r/   rl   r   rm   )r    r    s     r.   Ú_load_tuple_and_callr£   #  s>   € Ø!€EÜ�uÔØ	‡L�LÑ7°3Ô7Ô7Ø	‡L�LÔ%¤c¨#£h°Ó6Ô7Ø€Lr0   c            !       ó  — e Zd Z e«       Z e«       Zedej                  de	de	de
dej                  f
d„«       Zedej                  de	de	de	dee	d	f   d
e	deed	f   deed	f   deed	f   dedeee	ee
d	f   f   d	f   deeeee
d	f   f   d	f   dee	d	f   deej                     dedej                  f d„«       Zedeee
f   dee   fd„«       Zedej                  de	de	de	dee	d	f   de
dej                  fd„«       Zy)ÚContinueExecutionCacher�   ÚlinenoÚinit_offsetÚkeyr!   c                 óâ   — || j                   vri | j                   |<   t        |«      }|| j                   |   vr% | j                  |||g|¢­Ž | j                   |   |<   | j                   |   |   S rN   )Úcacher‡   Úgenerate)Úclsr�   r¦   r§   r¨   s        r.   ÚlookupzContinueExecutionCache.lookup/  so   € ð �s—y‘yÑ Ø ˆC�I‰I�d‰OÜ�C‹jˆØ�c—i‘i ‘oÑ%Ø#/ 3§<¡<°°f¸kÐ#PÈCÒ#PˆC�I‰I�d‰O˜CÑ Ø�y‰y˜‰˜sÑ#Ð#r0   Úresume_offsetÚsetup_fn_target_offsets.ÚnstackÚargnamesÚargnames_nullÚ	setup_fnsÚhandle_inactive_ctxÚstack_ctx_varsÚargnames_ctx_varsÚ
null_idxesÚnested_code_objsÚpop_nested_resume_resultc                 óü  ‡ ‡‡‡‡‡‡‡	‡
‡‡‡‡‡‡‡— ‰€J ‚|j                   t        t        z  t        z  t        z  z  rJ ‚|j                   t
        z  sJ ‚|t        j                  v r‰ j                  |‰|‰‰‰‰‰‰	‰
‰‰‰‰‰«      S t        j                  dk\  Št        |«      Šdt        t           dt        t        t         f   dd fˆˆˆˆ ˆ
ˆˆˆˆˆˆˆˆˆˆ	ˆfd„}t#        ||«      \  }}‰t        j                  |<   |S )Nr#   r�   rV   r!   c           
      ó®  •‡— t        j                  | «      ‰#_        ddgŠ‰t        ‰%«      D �cg c]  }d|› �‘Œ	 c}z  Š‰j	                  ˆfd„‰D «       «       t        |d   xs g «      t        |d   xs g «      z   }t        t        |«      «      }t        › d|d   › d	‰"› �|d<   ‰!rV|d
   j                  dd¬«      }t        |«      dk(  r	|d   |d
<   n)t        |«      dk(  sJ ‚|\  }}|› dt        › d|› d	‰"› �|d
<   ‰"|d<   d|d<   ||d<   t        ‰«      |d<   d|d<   d|d<   t        ‰‰D �cg c]	  }|‰vsŒ|‘Œ c}z   |d   D �cg c]	  }|‰vsŒ|‘Œ c}z   t        gz   «      |d<   |d   t        t        z   z  |d<   t        ˆ(fd„| D «       «      }g }	‰!rC|r%|	j                  t        dt        |«      ¬«      «       |	j                  t        dd¬«      «       |	j	                  t        dd¬«      t        dt        ¬«      g«       g }
‰*D �ci c]  }|j                   |“Œ }}t#        ‰*«      D ��ci c]  \  }}|j                   ‰)|   “Œ }}}| D �ci c]  }|j$                  |“Œ }}i }d}d}t'        ‰+«      }t        ‰%t        ‰&«      z   «      D ]ë  }|t        ‰&«      k  r(‰&|   |k(  r |	j                  t        d«      «       |dz  }nG|	j                  t        d d|› �¬«      «       ‰ r!||v r|	j	                  t)        ||   «      «       |dz  }||v sŒ…|j+                  |«      } |||
«      \  }}|	j	                  |«       ‰!sŒ¶|j+                  |«      }||   }‰#j,                  j                  |«       |||<   Œí ‰!r#t/        t1        ‰#j,                  «      «      ‰#_        |rJ ‚‰ r\‰D ]W  \  }}|	j                  t        d |¬«      «       |	j	                  t)        |«      «       |	j                  t        d|¬«      «       ŒY ‰rIt2        j4                  d!k\  sJ ‚‰D ]/  }|‰vsJ ‚|	j	                  t        d«      t        d|¬«      g«       Œ1 ‰$�r@|	j	                  g t7        t        d d¬«      t        dd"¬«      t9        «       g«      ¢t        d d¬«      ‘t        dd"¬«      ‘t        d#«      ‘t        d d¬«      ‘t        d d¬«      ‘t        d$d¬«      ‘t        d d¬«      ‘t        dd"¬«      ‘t9        «       ‘t        d%d¬«      ‘t        d d¬«      ‘t        dd"¬«      ‘t        d#«      ‘t        d&d¬«      ‘t        d&d¬«      ‘t        dd'¬«      ‘t        dt        ¬«      ‘t;        d'd'«      ¢«       ‰'rH|	j                  t        d(«      «       n-|	j	                  t        dd'¬«      t        dt        ¬«      g«       |	j                  t=        |«      «       | D ]?  }|j$                  |j$                  k(  r n$d |_        t2        j4                  d)k\  sŒ9d |_         ŒA |
r1|	j	                  |
«       |	j	                  ‰jC                  |«      «       |rY‰!sJ ‚| D ]P  }|jD                  sŒ|jD                  jF                  |v sŒ)||jD                  jF                     |jD                  _#        ŒR |	| z   | d d  y c c}w c c}w c c}w c c}w c c}}w c c}w )*NÚ__nested_resume_fnsÚ__nested_frame_valuesÚ___stackc              3   ó,   •K  — | ]  }|‰vsŒ|–— Œ y ­wrN   rx   )r?   ÚvÚargss     €r.   rB   zBContinueExecutionCache.generate.<locals>.update.<locals>.<genexpr>u  s   øè ø€ Ò=˜a¨q¸ª}œÑ=ùs   ƒ	�Úco_cellvarsÚco_freevarsÚ_Úco_nameÚ_at_Úco_qualnameú.r   )Úmaxsplitr   Úco_firstlinenorx   Úco_argcountr   Úco_posonlyargcountÚco_kwonlyargcountra   Úco_flagsc              3   óB   •K  — | ]  }|j                   ‰k(  sŒ|–— Œ y ­wrN   ©Úoffset)r?   r@   r®   s     €r.   rB   zBContinueExecutionCache.generate.<locals>.update.<locals>.<genexpr>–  s   øè ø€ ÒO °Q·X±XÀÓ5Nœ!ÑOùó   ƒ˜ÚCOPY_FREE_VARSr)   ÚRESUMEÚ
LOAD_CONSTTrg   rf   r&   r9   )r$   é   éÿÿÿÿÚDELETE_SUBSCRÚ
BUILD_LISTÚLIST_EXTENDÚDELETE_FASTFr6   r#   )$ÚcopyÚdeepcopyr�   Úrangerl   r‡   ÚsortedÚTORCH_DYNAMO_RESUME_IN_PREFIXÚrsplitrm   Ú"IS_TRACING_RESUME_PROLOGUE_VARNAMEÚ
CO_VARARGSÚCO_VARKEYWORDSrF   r-   r   r2   rG   rÑ   rˆ   r£   Úpopr�   rŠ   Úreversedr+   r,   r	   r   r   r   Ústarts_lineÚ	positionsÚunreachable_codesrD   Útarget),r�   rV   r@   ÚfreevarsÚqualified_pathÚmodule_namerÅ   rÀ   rê   ÚprefixrW   ÚfnÚhooksÚhook_target_offsetsrA   Úoffset_to_instÚold_hook_target_remapÚstack_iÚnull_iÚstack_ctx_vars_dÚhookÚ
hook_instsÚ
exn_targetÚhook_target_offsetÚold_hook_targetrq   ÚvalsrÁ   r±   r¶   r²   r¬   r´   Úis_py311_plusr¦   Úmetar¸   r°   r·   r¹   r®   r¯   r³   rµ   s,                              @€€€€€€€€€€€€€€€€r.   Úupdatez/ContinueExecutionCache.generate.<locals>.updaten  sÅ  ù€ ô !%§¡¨lÓ ;ˆDÔà)Ð+BÐCˆDØ¬U°6«]Ö;¨�x ˜s’^Ò;Ñ;ˆDØ�K‰KÓ= 8Ô=Ô=Ü˜\¨-Ñ8Ò>¸BÓ?Ä%Ø˜]Ñ+Ò1¨róCñ ˆHô œV HÓ-Ó.ˆHä0Ð1°°<À	Ñ3JÐ2KÈ4ÐPVÈxÐXð ˜Ñ#ñ Ø!-¨mÑ!<×!CÑ!CÀCÐRSÐ!CÓ!T�Ü�~Ó&¨!Ò+Ø2>¸yÑ2I�L Ò/ä˜~Ó.°!Ò3Ð3Ð3Ø+9Ñ(�K à&˜- qÔ)FÐ(GÀqÈÈ	ÐQUÐV\ÐU]Ð^ð ! Ñ/ð .4ˆLÐ)Ñ*Ø*,ˆL˜Ñ'Ø*2ˆL˜Ñ'Ü*-¨d«)ˆL˜Ñ'Ø12ˆLÐ-Ñ.Ø01ˆLÐ,Ñ-Ü*/ØØ+Ö=˜¨q¸ª}’1Ò=ñ>à*¨=Ñ9ÖK˜¸QÀdº]’1ÒKñLô 6Ð6ñ7ó+ˆL˜Ñ'ð (4°JÑ'?Üœ^Ñ+ðCñ (ˆL˜Ñ$ô ÓO \ÔOÓOˆFàˆFÙÙØ—M‘MÜ*Ð+;ÄÀXÃÔOôð —‘Ô0°¸qÔAÔBð
 �M‰Mä& |¸DÔAÜ&Ø$Ô-Oôðôð *,ˆGØ2;Ö<¨B�R—^‘^ RÑ'Ð<ˆEÐ<ô ' yÓ1÷#á�A�rð —‘Ð 7¸Ñ :Ñ:ð#Ðñ #ð =IÖI°D˜dŸk™k¨4Ñ/ÐIˆNÐIð %'Ð!ØˆGØˆFÜ# NÓ3ÐÜ˜6¤C¨
£OÑ3Ó4ò L�ØœC 
›OÒ+°
¸6Ñ0BÀaÒ0GØ—M‘MÔ"4°[Ó"AÔBØ˜a‘K‘Fà—M‘MÜ*¨;ÀÈ'ÈÐ?SÔTôñ +¨wÐ:JÑ/Jð Ÿ™Ô&:Ð;KÈGÑ;TÓ&UÔVØ˜q‘L�Gà˜’:Ø Ÿ9™9 Q›<�DÙ-1°,ÀÓ-HÑ*�J 
Ø—M‘M *Ô-Ú$Ø-@×-DÑ-DÀQÓ-GÐ*Ø*8Ð9KÑ*L˜Ø×=Ñ=×DÑDÐEWÔXØAKÐ-¨oÒ>ð-Lñ0 ô 9=Ü˜T×BÑBÓCó9�Ô5ñ Ð�9ñ #Ø"3ò Q‘J�D˜$Ø—M‘MÔ"4°[ÈÔ"NÔOØ—M‘MÔ"6°tÓ"<Ô=Ø—M‘MÔ"4°\È$Ô"OÕPðQñ Ü×'Ñ'¨7Ò2Ð2Ð2Ø&ò �AØ D™=Ð(˜=Ø—M‘Mä.¨{Ó;Ü.¨|ÀAÔFðõðò  Ø—‘ð.ä&ä 2Ø$/Ð8Mô!"ô !3°<ÈÔ KÜ 4Ó 6ðóð.ô +¨;Ð?TÔUð.ô +¨<ÀÔCð.ô +¨?Ó;ð.ô  +¨;Ð?TÔUð!.ô" +¨;Ð?VÔWð#.ô$ +¨<¸QÔ?ð%.ô( +¨;Ð?VÔWð).ô* +¨<ÀÔCð+.ô, -Ó.ð-.ô8 +¨=¸aÔ@ð9.ô< +¨;Ð?VÔWð=.ô> +¨<ÀÔCð?.ô@ +¨?Ó;ðA.ôD +¨=ÐAVÔWðE.ôF +Ø)Ð2IôðG.ôP +¨<ÀÔFðQ.ôR +Ø(Ô1SôðS.ôZ 1°¸Ó>ð[.ô0ñb ,à—M‘MÔ"4°YÓ"?Õ@ð —‘ä*¨<ÀÔFÜ*Ø(Ô1Sôðôð �M‰MÔ.¨vÓ6Ô7ð
 %ò *�Ø—;‘; &§-¡-Ò/ÙØ#'�Ô Ü×#Ñ# wÓ.Ø%)�D•Nð*ñ Ø—‘˜gÔ&Ø—‘˜c×3Ñ3°LÓAÔBñ %á$Ð$�}Ø(ò �Dà×*Ó*Ø ×.Ñ.×5Ñ5Ð9NÒNà4IØ ×.Ñ.×5Ñ5ñ5˜×*Ñ*Õ1ðð % |Ñ3ˆL™‰Oùòs <ùò6 >ùÚKùò: =ùó#ùò Js/   ¯Z8Ä0	Z=
Ä:Z=
Å		[
Å[
È[È4[É[)rÎ   ÚCO_GENERATORÚCO_COROUTINEÚCO_ITERABLE_COROUTINEÚCO_ASYNC_GENERATORÚCO_OPTIMIZEDr¥   Úgenerated_code_metadataÚ&generate_based_on_original_code_objectr+   r,   rŒ   rŠ   r   rˆ   r‰   r   r   )r¬   r�   r¦   r§   r®   r¯   r°   r±   r²   r³   r´   rµ   r¶   r·   r¸   r¹   rÿ   Únew_coderÄ   rý   rþ   s   ` ` ````````````   @@r.   r«   zContinueExecutionCache.generate:  s  ÿÿ€ ð0 Ð(Ð(Ð(à�M‰MÜœlÑ*Ô-BÑBÔEWÑWòYð	
ð 
ð �}‰}œ|Ò+Ð+Ð+ØÔ)×AÑAÑAØ×=Ñ=ØØØØØ'ØØØØØ#ØØ!ØØ Ø(óð ô$ ×(Ñ(¨GÑ3ˆÜ% dÓ+ˆð_	4Üœ{Ñ+ð_	4Ü;?ÄÄSÀ¹>ð_	4à÷_	4÷ _	4ô _	4ôB ,¨D°&Ó9‰ˆ�!ØCGÔ×6Ñ6°xÑ@Øˆr0   rV   c                 ó2   — t        d«      t        dd¬«      gS )zACodegen a `raise None` to make analysis work for unreachable codeNÚRAISE_VARARGSr   r)   )r   r   )rV   s    r.   ré   z(ContinueExecutionCache.unreachable_codesS  s    € ô ˜dÓ#Ü˜°AÔ6ð
ð 	
r0   rÁ   c                 óÚ  ‡‡‡‡‡— t         j                  ‰   Šdt        dt        fˆˆfd„} ||«      } ||«      }	|	dkD  sJ d«       ‚t        j                  dk\  rn||	fŠ‰‰j
                  vrGi xŠ‰j
                  ‰<   dt        t           dt        t        t        f   dd	fˆˆˆfd
„}
t        ‰|
«       t        ˆˆfd„‰D «       «      Št        j                  ‰j                  |||	‰g|¢­Ž S )a>  
        This handles the case of generating a resume into code generated
        to resume something else.  We want to always generate starting
        from the original code object so that if control flow paths
        converge we only generated 1 resume function (rather than 2^n
        resume functions).
        Ú
cur_offsetr!   c                 ó|   •‡ ‡— dŠdt         t           dt        t        t        f   dd fˆ ˆˆfd„}t        ‰|«       ‰S )Nr×   r�   rV   r!   c           	      ó0  •‡— ˆfd„| D «       \  Št        ˆfd„t        t        | «      t        ‰j                  «      «      D «       «      }|sy t	        |«      dk(  sJ ‚|d   }‰j
                  |j
                  k(  sJ ‚|j                  €J ‚|j                  Šy )Nc              3   óB   •K  — | ]  }|j                   ‰k(  sŒ|–— Œ y ­wrN   rÐ   )r?   r@   r  s     €r.   rB   zŽContinueExecutionCache.generate_based_on_original_code_object.<locals>.find_orig_offset.<locals>.find_orig_offset_transform.<locals>.<genexpr>x  s   øè ø€ ÒO 1¸¿¹ÀJÓ8NœQÑOùrÒ   c              3   ó0   •K  — | ]  \  }}|‰u r|–— Œ y ­wrN   rx   )r?   Úi1Úi2rê   s      €r.   rB   zŽContinueExecutionCache.generate_based_on_original_code_object.<locals>.find_orig_offset.<locals>.find_orig_offset_transform.<locals>.<genexpr>z  s&   øè ø€ ò )á˜˜Bð ˜V‘|ô	 ñ)ùs   ƒr   r   )r‡   Úzipræ   r�   rm   ÚopcoderÑ   )r�   rV   Únew_target_tupleÚ
new_targetrê   r  rþ   Úorig_offsets       @€€€r.   Úfind_orig_offset_transformz{ContinueExecutionCache.generate_based_on_original_code_object.<locals>.find_orig_offset.<locals>.find_orig_offset_transformt  s¡   ù€ ó P¨ÔO‘	�ä#(ó )ä"%Ü  Ó.´¸×9JÑ9JÓ0Kó#ô)ó $Ð ñ (ð äÐ+Ó,°Ò1Ð1Ð1Ø-¨aÑ0�
à—}‘}¨
×(9Ñ(9Ò9Ð9Ð9Ø!×(Ñ(Ð4Ð4Ð4Ø(×/Ñ/‘r0   )rŠ   r   rˆ   r‰   r   r   )r  r  r  r�   rþ   s   ` @€€r.   Úfind_orig_offsetzWContinueExecutionCache.generate_based_on_original_code_object.<locals>.find_orig_offsetq  sE   ú€ ØˆKð0Ü"¤;Ñ/ð0Ü?CÄCÌÀH¹~ð0à÷0ô6 " $Ð(BÔCØÐr0   r×   z>resume instruction not found in original code - this is a bug.r#   r�   rV   Nc           
      óŠ  •‡
— g }| D ]F  }t        |«      t        ‰j                  «      k(  r n#|j                  dk(  sŒ6|j                  |«       ŒH t	        |‰j                  «      D ]"  \  }}|‰t        t        |j                  «      <   Œ$ |rt        t        |d   j                  «      ndŠ
t        ˆ
fd„‰D «       «      }t        | |d„ «      }t        t        t	        t        | «      t        ‰j                  «      «      t        |«      d„ «      «      }t	        ||«      D ]!  \  }}	|d   j                  ‰|	j                  <   Œ# y )Nr|   r×   c              3   ó.   •K  — | ]  }|‰kD  sŒ	|–— Œ y ­wrN   rx   )r?   ÚnÚcur_start_offsets     €r.   rB   zmContinueExecutionCache.generate_based_on_original_code_object.<locals>.remap_block_offsets.<locals>.<genexpr>Ì  s   øè ø€ ò .Ø¸aÐBRÓ>Rœñ.ùs   ƒ
Žc                 ó    — | j                   |k(  S rN   rÐ   )rA   Úos     r.   ú<lambda>zlContinueExecutionCache.generate_based_on_original_code_object.<locals>.remap_block_offsets.<locals>.<lambda>Ð  s   € ÈÏÉÐWXÑHX€ r0   c                 ó   — | d   |u S )Nr   rx   )Úv1Úv2s     r.   r  zlContinueExecutionCache.generate_based_on_original_code_object.<locals>.remap_block_offsets.<locals>.<lambda>Ù  s   € ¨2¨a©5°B¨;€ r0   r   )rm   r�   r=   r-   r  r   r…   rÑ   rß   rŸ   ræ   r�   )r�   rV   Úprefix_blocksrA   r  Úcur_inst_offsetsÚtargetsÚorig_targetsÚorigrž   r  r‘   rþ   r¯   s             @€€€r.   Úremap_block_offsetszZContinueExecutionCache.generate_based_on_original_code_object.<locals>.remap_block_offsets¬  sX  ù€ ð 8:�MØ ,ò 
7˜ô
 ˜}Ó-´Ø ×AÑAó2ò ñ "ØŸ;™;¨/Ó9Ø)×0Ñ0°Õ6ð
7ô $'Ø% t×'LÑ'Ló$ò N™˜˜að MNÐ1´$´s¸D¿K¹KÓ2HÒIðNñ @MœœS -°Ñ"3×":Ñ":Ô;ÐRTð %ô (.ó .Ø#:ô.ó (Ð$ô +Ø$Ð&6Ñ8Xó�Gô $,Ü$Ü¤¨Ó 6¼À×ARÑARÓ8SÓTÜ$ WÓ-Ù6óó$�Lô &)¨°wÓ%?ò O™	˜˜cØ@DÀQÁÇÁÐ1°#·*±*Ò=ñOr0   c              3   óB   •K  — | ]  }‰j                   ‰   |   –— Œ y ­wrN   )r‘   )r?   r  rþ   Ú
offset_keys     €€r.   rB   zPContinueExecutionCache.generate_based_on_original_code_object.<locals>.<genexpr>ã  s)   øè ø€ ò ,àð ×.Ñ.¨zÑ:¸1Õ=ñ,ùs   ƒ)r¥   r  r…   r+   r,   r‘   rŠ   r   rˆ   r‰   r   r   r‡   r­   r�   )r¬   r�   r¦   r§   r®   r¯   rÁ   r  Úorig_init_offsetÚorig_resume_offsetr(  r‘   rþ   r*  s    `   `     @@@r.   r  z=ContinueExecutionCache.generate_based_on_original_code_object[  s0  ü€ ô$ (>×'UÑ'UØñ(
ˆð	¬ð 	´ö 	ñB ,¨KÓ8Ðñ .¨mÓ<ÐØ! BÒ&ð 	
ØLó	
Ð&ô ×Ñ˜wÒ&ð
 +Ð,>Ð?ˆJð  ×!?Ñ!?Ñ?ð ðÐ)¨D×,JÑ,JØñ-ð
1OÜ"&¤{Ñ"3ð1OÜCGÌÌSÈÁ>ð1Oà÷1Oôf & dÐ,?Ô@ô ',ô ,à0ô,ó 'Ð#ô &×,Ñ,Ø�I‰IØØØØ#ð
ð ò
ð 	
r0   N)r‚   rƒ   r„   r   rª   r  Úclassmethodr’   r“   r…   r   r­   r‡   r‰   rT   Úboolr«   Ústaticmethodrˆ   rŠ   r   ré   r  rx   r0   r.   r¥   r¥   +  s-  „ Ù"Ó$€EÙ4Ó6Ðàð$Ø—>‘>ð$Ø+.ð$Ø=@ð$ØHKð$à	�‰ò$ó ð$ð ðVà�n‰nðVð ðVð ð	Vð
 ðVð "' s¨C x¡ðVð ðVð ˜˜S˜‘/ðVð ˜S #˜X‘ðVð ˜ cÐ)Ñ*ðVð "ðVð ˜e C¨¨s°C¨x©Ð$8Ñ9¸3Ð>Ñ?ðVð !  s¨E°#°s°(©OÐ';Ñ!<¸cÐ!AÑBðVð ˜#˜s˜(‘OðVð"   §¡Ñ/ð#Vð* #'ð+Vð, 
�‰ò-Vó ðVðp ð
¨¨S°#¨X©ð 
¸4ÀÑ;Lò 
ó ð
ð ðR
à�n‰nðR
ð ðR
ð ð	R
ð
 ðR
ð "' s¨C x¡ðR
ð ðR
ð 
�‰òR
ó ñR
r0   r¥   rN   )7Ú__doc__rÜ   r”   r+   r’   Úcollections.abcr   r   Ú
contextlibr   Útypingr   r   Úbytecode_transformationr	   r
   r   r   r   r   r   r   r   r   r   r   Úutilsr   r  ÚCO_NEWLOCALSrã   rä   Ú	CO_NESTEDr   Ú	CO_NOFREEr  r  r  rà   râ   rŠ   r/   r…   rˆ   r‰   r‡   rK   rQ   Ú	dataclassrT   rŒ   r.  rŸ   r£   r¥   rx   r0   r.   ú<module>r:     sÆ  ðñó Û Û 
Û ß .Ý -ß ÷÷ ÷ ó õ *ð €Ø€Ø€
Ø€Ø€	Ø€Ø€	Ø€ØÐ ØÐ ð !9Ð Ø%CÐ "ð<˜d ;Ñ/ð <°Dó <ð *.ñ JØ�s˜C�xÑ ð Jàð Jð �c˜3�h‘ $Ñ&ð Jð ˆ4�Ñ˜d ;Ñ/Ð/Ñ0ó	 JðF¨ð ¸Sð ÀTó ð €×Ñ˜dÔ#÷B;ð B;ó $ðB;ðJ ×Ñ÷ð ó ðð"Ø�‰ðà�‰ðð �C˜�:˜tÐ#Ñ
$ðð 
ˆ#�Yó	ð.˜e C¨ H™oð °$°{Ñ2Có ÷C
ò C
r0   