Ë
    g^(hâ_  ã                   óF  — 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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ZdZdZd	Zd
ZdZdZdZdZdZdZd„ Z dd„Z!d„ Z" ejF                  d¬«       G d„ d«      «       Z$ejF                   G d„ d«      «       Z%d„ Z&d„ Z' G d„ d«      Z(y)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)ÚAnyÚcastÚOptionalé   )	Úbytecode_from_templateÚcreate_call_functionÚcreate_instructionÚcreate_jump_absoluteÚcreate_load_constÚInstructionÚoverwrite_instructionÚtransform_code_objectÚ	unique_id)ÚExactWeakKeyDictionaryé   é   é   é   é    é@   é€   é   i   Útorch_dynamo_resume_inc                 óÀ   — 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	   )Úinstss    ú\/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_dynamo/resume_execution.pyÚ_initial_push_nullr(   6   sN   € Ü
×Ñ˜7Ò"Ø�‰Ô'¨Ó4Ô5Ü×Ñ˜gÒ%Ø�L‰LÔ+¨F¸Ô:Õ;ð &ð #ó    c                 ó®  — 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©Úvarname_mapÚPOP_TOPc              3   óf   K  — | ])  \  }}|j                   d k(  r|j                  dk(  r||f–— Œ+ y­w)Ú	LOAD_FASTÚdummyN©ÚopnameÚargval)Ú.0ÚiÚinsts      r'   ú	<genexpr>z5_bytecode_from_template_with_split.<locals>.<genexpr>I   s7   è ø€ ò 	
á��4Ø�{‰{˜kÒ)¨d¯k©k¸WÒ.Dð �ŒIñ	
ùs   ‚/1)NNÚNOPr   )	r   r%   r	   Úexn_tab_entryÚdepthÚnextÚ	enumerater   r2   )ÚtemplateÚstack_indexr,   Útemplate_coder6   Ú	dummy_idxÚ
dummy_insts          r'   Ú"_bytecode_from_template_with_splitrB   >   sú   € Ü*¨8ÀÔM€MØ×ÑÔ+¨IÓ6Ô7ð ò 4ˆØ×ÓØ×Ñ×$Ò$¨Ñ3Ö$ð4ô
 !ñ	
ä$ ]Ó3ô	
ð
 	óÑ€Iˆzð Ð Ð Ð ô ˜*Ô'9¸%Ó'@Ð&AÔBð ˜ Q™Ñ'×.Ñ.°)Ò;Ð;Ð;Ü˜-¨	°A©Ñ6Ô9KÈEÓ9RÐ8SÔTà˜˜9 q™=Ð)¨=¸ÀQ¹¸Ð+IÐIÐIr)   c                 ó@   — 	 |  y #  t         j                  |«       ‚ xY w©N)Ú$__import_torch_dot__dynamo_dot_utilsÚset_torch_function_mode_stack)r0   Ústack_var_names     r'   Ú_try_except_tf_mode_templaterH   \   s'   € ðÚøðÜ,×JÑJØô	
ð 	ús   ‚ …T)Úfrozenc                   ó`   — e Zd ZU eed<   dZeeedf      ed<   de	e
   fd„Zde	e
   fd„Zd„ Zy)	ÚReenterWithr>   N.Útarget_valuesÚcleanupc                 ó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_namerG   r+   N)Úvariables.torch_functionrO   rB   rH   r>   )ÚselfÚcode_optionsrM   rO   Úsetup_try_exceptÚepilogues         r'   Útry_except_torch_function_modez*ReenterWith.try_except_torch_function_moden   sF   € õ 	Fä%GÜ(Ø×ÑØ)Ñ+BÓ+DÐEô&
Ñ"Ð˜(ð
  Ñ'ˆ‘ˆ
àÐr)   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        || 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©r3   c                 ó€   — | j                  «        	 | | j                  d d d «       y # | j                  d d d «       w xY wrD   rY   ©Úctxr0   s     r'   Ú	_templatez*ReenterWith.try_finally.<locals>._template£   s4   € Ø�M‰MŒOð/Ùà—‘˜T 4¨Õ.ø�—‘˜T 4¨Õ.ús   ’( ¨=ra   r+   N)
rL   r   r   r>   r(   Úextendr   Úlenr	   rB   )rQ   rR   rM   Ú	load_argsÚvalÚctx_nameÚnameÚ
create_ctxrb   Úsetup_try_finallyrT   s              r'   Útry_finallyzReenterWith.try_finally„   s1  € ð ˆ	Ø×ÒØ;?×;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ðô	
ò	/ô 'IØ�t×'Ñ'°e¸XÐ5Fô'
Ñ#Ð˜8ð  Ñ'ˆ‘ˆ
ØÐ-Ñ-Ð-ùò; Os   �C*c                 óÌ  — g }| j                   r"| j                   D �cg c]  }t        |«      ‘Œ }}g }t        |«       |j                  g |¢t	        t        |«      d«      ¢«       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)
        Fc                 ó6   — | 5  | d d d «       y # 1 sw Y   y xY wrD   © r`   s     r'   rb   z'ReenterWith.__call__.<locals>._templateÄ   s   € Øñ Ù÷÷ ñ ús   ƒ�Nc              3   ó\   K  — | ]$  }|j                   d k(  r|j                  dk(  r|–— Œ& y­w)r/   ra   Nr1   ©r4   r6   s     r'   r7   z'ReenterWith.__call__.<locals>.<genexpr>Î   s/   è ø€ ò àØ—;‘; +Ò-°$·+±+ÀÒ2Fô ñùs   ‚*,r8   c              3   ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­w)ÚPUSH_EXC_INFON)r2   rp   s     r'   r7   z'ReenterWith.__call__.<locals>.<genexpr>Ú   s    è ø€ ò 
Ø¨¯©¸Ó)GŒDñ
ùs   ‚—)rL   r   r(   rc   r   rd   rB   r>   r;   r   r	   )rQ   rR   rM   re   rf   ri   rb   Ú
setup_withrT   Úload_fast_ctx_instÚpush_exc_info_genÚpush_exc_info_insts               r'   Ú__call__zReenterWith.__call__°   s)  € ð ˆ	Ø×ÒØ;?×;MÑ;MÖN°CÔ*¨3Õ/ÐNˆIÐNà(*ˆ
Ü˜:Ô&Ø×ÑðØðä%¤c¨)£n°eÓ<ðô	
ò	ô  BØ�t×'Ñ'ó 
Ñˆ
�Hð  Ñ'ˆ‘ˆ
ä!ñà&ôð
 ó
Ðð "Ð-Ð-Ð-äÐ0Ô3EÀeÓ3LÐ2MÔNñ
Ø%ô
Ðô "Ð"3°TÓ:ÐäÐ% tÓ,Ð4Ð4Ð4à˜JÑ&Ð(:Ð:Ð:ùòQ Os   �C!)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__rL   r   Útupler   Úlistr   rU   rk   rw   rn   r)   r'   rK   rK   i   sG   … àÓØ/3€M�8˜E # s (™OÑ,Ó3ð ÀDÈÑDUó  ð,*.°°kÑ1Bó *.óX1;r)   rK   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<   dZeeeef      ed<   y)ÚResumeFunctionMetadataÚcode)Údefault_factoryÚinstructionsÚ prefix_block_target_offset_remapNÚblock_target_offset_remap)rx   ry   rz   ÚtypesÚCodeTyper|   ÚdataclassesÚfieldr~   rƒ   r   r„   r{   r…   r   Údictrn   r)   r'   r€   r€   ä   sf   … à
�.‰.ÓØ&7 k×&7Ñ&7ÈÔ&M€L�$�{Ñ#ÓMð 3D°+×2CÑ2CØô3Ð$ d¨3¡ió ð ;?Ð˜x¨¨S°#¨X©Ñ7Ô>r)   r€   c                 ó´   — 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
    )Úiterr;   r%   ÚStopIteration)Úl1Úl2ÚcondÚitÚresÚcurrf   s          r'   Ú_filter_iterr”   ô   sl   € ô 
ˆb‹€BØ€CðÜ�2‹hˆØò 	ˆCÙ�C˜�~Ø—
‘
˜3”Ü˜2“h‘ñ	ð €Jøô ò ØØ€Jðús   �A
 ©A
 Á
	AÁAc                 ó˜   — g }t        |«       |j                  d„ | D «       «       |j                  t        t        | «      d«      «       |S )Nc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrD   )r   )r4   rf   s     r'   r7   z'_load_tuple_and_call.<locals>.<genexpr>
  s   è ø€ Ò7¨CÔ" 3×'Ñ7ùs   ‚F)r(   rc   r   rd   )Útupr&   s     r'   Ú_load_tuple_and_callr˜     s>   € Ø!€EÜ�uÔØ	‡L�LÑ7°3Ô7Ô7Ø	‡L�LÔ%¤c¨#£h°Ó6Ô7Ø€Lr)   c                   ó,  — e Zd Z e«       Z e«       Zed„ «       Z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	e	ee	e   f   df   d
e	e	e
e	e   f   df   de	edf   dej                  fd„«       Zedee   fd„«       Zedede	edf   fd„«       Zy)ÚContinueExecutionCachec                 óà   — || j                   vri | j                   |<   t        |«      }|| j                   |   vr$ | j                  ||g|¢­Ž | j                   |   |<   | j                   |   |   S rD   )Úcacher}   Úgenerate)Úclsr�   ÚlinenoÚkeys       r'   ÚlookupzContinueExecutionCache.lookup  sk   € à�s—y‘yÑ Ø ˆC�I‰I�d‰OÜ�C‹jˆØ�c—i‘i ‘oÑ%Ø#/ 3§<¡<°°fÐ#C¸sÒ#CˆC�I‰I�d‰O˜CÑ Ø�y‰y˜‰˜sÑ#Ð#r)   ÚoffsetÚsetup_fn_target_offsets.ÚnstackÚargnamesÚargnames_nullÚ	setup_fnsÚstack_ctx_varsÚargnames_ctx_varsÚ
null_idxesÚreturnc                 óÞ  ‡ ‡‡‡‡‡‡‡‡	‡
‡‡‡— ‰€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   fˆˆ
ˆˆ ˆˆˆˆˆˆˆˆˆ	fd„}t#        ||«      }‰t        j                  |<   |S )Nr   rƒ   rR   c                 ór
  •‡— t        j                  | «      ‰"_        t        ‰#«      D �cg c]  }d|› �‘Œ	 c}Š‰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r||vr|‘Œ c}z   «      |d<   |d   t        t        z   z  |d<   t        ˆ%fd„| D «       «      }g }	‰ rC|r%|	j                  t        dt        |«      ¬«      «       |	j                  t        dd¬«      «       g }
‰'D �ci c]  }|j                  |“Œ }}t!        ‰'«      D ��ci c]  \  }}|j                  ‰&|   “Œ }}}| D �ci c]  }|j"                  |“Œ }}i }d}t%        ‰(«      }t        ‰#«      D �]  }|t        ‰$«      k  rD‰$|   ||z   k(  r9|	j                  t        d«      «       |d
z  }|t        ‰$«      k  r‰$|   ||z   k(  rŒ9|	j                  t        dd|› �¬«      «       ||v rf|j'                  |«      } |||
«      \  }}|	j	                  |«       ‰ r6|j'                  |«      }||   }‰"j(                  j                  |«       |||<   ||z   }||v sŒé|	j	                  t+        ||   «      «       �Œ ‰ r#t-        t/        ‰"j(                  «      «      ‰"_        |rJ ‚‰D ]W  \  }}|	j                  t        d|¬«      «       |	j	                  t+        |«      «       |	j                  t        d|¬«      «       ŒY ‰rIt0        j2                  dk\  sJ ‚‰D ]/  }|‰vsJ ‚|	j	                  t        d«      t        d|¬«      g«       Œ1 |	j                  t5        |«      «       | D ]?  }|j"                  |j"                  k(  r n$d |_        t0        j2                  dk\  sŒ9d |_        ŒA |
r1|	j	                  |
«       |	j	                  ‰j;                  |«      «       |rY‰ sJ ‚| D ]P  }|j<                  sŒ|j<                  j>                  |v sŒ)||j<                  j>                     |j<                  _        ŒR |	| z   | d d  y c c}w c c}w c c}w c c}w c c}}w c c}w )NÚ___stackc              3   ó,   •K  — | ]  }|‰vsŒ|–— Œ y ­wrD   rn   )r4   ÚvÚargss     €r'   r7   zBContinueExecutionCache.generate.<locals>.update.<locals>.<genexpr>G  s   øè ø€ Ò=˜a¨q¸ª}œÑ=ùs   ƒ	�Úco_cellvarsÚco_freevarsÚ_Úco_nameÚ_at_Úco_qualnameú.r   )Úmaxsplitr   Úco_firstlinenorn   Úco_argcountr   Úco_posonlyargcountÚco_kwonlyargcountrX   Úco_flagsc              3   óB   •K  — | ]  }|j                   ‰k(  sŒ|–— Œ y ­wrD   ©r¢   ©r4   r5   r¢   s     €r'   r7   zBContinueExecutionCache.generate.<locals>.update.<locals>.<genexpr>k  s   øè ø€ ÒH °Q·X±XÀÓ5Gœ!ÑHùó   ƒ˜ÚCOPY_FREE_VARSr!   ÚRESUMEr   r/   r^   r]   )r   é   r   ) ÚcopyÚdeepcopyrƒ   Úrangerc   r}   ÚsortedÚTORCH_DYNAMO_RESUME_IN_PREFIXÚrsplitrd   Ú
CO_VARARGSÚCO_VARKEYWORDSr;   r%   r	   r>   r<   r¢   rŠ   Úpopr„   r˜   r~   Úreversedr#   r$   r
   Ústarts_lineÚ	positionsÚunreachable_codesr9   Útarget))rƒ   rR   r5   ÚfreevarsÚqualified_pathÚmodule_namerµ   r°   rÓ   ÚprefixrM   ÚfnÚhooksÚhook_target_offsetsr6   Úoffset_to_instÚold_hook_target_remapÚnull_idxes_iÚstack_ctx_vars_dÚhookÚ
hook_instsÚ
exn_targetÚhook_target_offsetÚold_hook_targetÚreal_irh   Úvalsr±   r¥   r©   r¦   rž   Úis_py311_plusrŸ   Úmetar¤   rª   r¢   r£   r§   r¨   s)                              @€€€€€€€€€€€€€r'   Úupdatez/ContinueExecutionCache.generate.<locals>.updateC  sÍ  ù€ Ü $§¡¨lÓ ;ˆDÔä,1°&«MÖ: q�h˜q˜c’NÒ:ˆ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Ò=ñ>ð *¨-Ñ8öàØ ‘}¨°(Ñ):ò òñó+ˆL˜Ñ'ð (4°JÑ'?Üœ^Ñ+ðCñ (ˆL˜Ñ$ô ÓH \ÔHÓHˆFàˆFÙÙØ—M‘MÜ*Ð+;ÄÀXÃÔOôð —‘Ô0°¸qÔAÔBà)+ˆGØ2;Ö<¨B�R—^‘^ RÑ'Ð<ˆEÐ<ô ' yÓ1÷#á�A�rð —‘Ð 7¸Ñ :Ñ:ð#Ðñ #ð =IÖI°D˜dŸk™k¨4Ñ/ÐIˆNÐIà$&Ð!ØˆLÜ# NÓ3ÐÜ˜6“]ó R�à ¤3 z£?Ò2Ø" <Ñ0°A¸Ñ4DÒDà—M‘MÔ"4°[Ó"AÔBØ  AÑ%�Lð	 !¤3 z£?Ò2Ø" <Ñ0°A¸Ñ4DÓDð —‘Ô0°ÀxÐPQÈsÀ^ÔTÔUØ˜‘:Ø Ÿ9™9 Q›<�DÙ-1°,ÀÓ-HÑ*�J 
Ø—M‘M *Ô-Ù$Ø-@×-DÑ-DÀQÓ-GÐ*Ø*8Ð9KÑ*L˜Ø×=Ñ=×DÑDÐEWÔXØAKÐ-¨oÑ>Ø˜\Ñ)�ØÐ-Ò-ð —M‘MÔ"6Ð7GÈÑ7OÓ"PÖQð+Rñ. ô 9=Ü˜T×BÑBÓCó9�Ô5ñ Ð�9ð 0ò M‘
��dØ—‘Ô0°ÀTÔJÔKØ—‘Ô2°4Ó8Ô9Ø—‘Ô0°ÀdÔKÕLðMñ Ü×'Ñ'¨7Ò2Ð2Ð2Ø&ò �AØ D™=Ð(˜=Ø—M‘Mä.¨{Ó;Ü.¨|ÀAÔFðõðð �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ùòU ;ùò6 >ùòùò( =ùó#ùò Js)   ªTÄ)	T
Ä3T
ÅT$
ÇT)Ç;T.ÈT4)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Š   Ústrr   r   )rž   r�   rŸ   r¢   r£   r¤   r¥   r¦   r§   r¨   r©   rª   rè   Únew_coderæ   rç   s   ` ``````````  @@r'   r�   zContinueExecutionCache.generate  s  ÿü€ ð Ð!Ð!Ð!à�M‰MÜœlÑ*Ô-BÑBÔEWÑWòYð	
ð 
ð �}‰}œ|Ò+Ð+Ð+ØÔ)×AÑAÑAØ×=Ñ=ØØØØ'ØØØØØØ!Øóð ô ×(Ñ(¨GÑ3ˆÜ% dÓ+ˆðM	4¤¤kÑ!2ð M	4Ä$ÄsÌCÀxÁ.÷ M	4÷ M	4ñ M	4ô^ )¨¨vÓ6ˆØCGÔ×6Ñ6°xÑ@Øˆr)   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	   )rR   s    r'   rÒ   z(ContinueExecutionCache.unreachable_codesÖ  s    € ô ˜dÓ#Ü˜°AÔ6ð
ð 	
r)   c                 óÄ  ‡‡‡‡	‡
— t         j                  |   Š	dŠ
dt        t           dt        t
        t        f   fˆ	ˆ
ˆfd„}t        ||«       t        j                  dk\  r]‰	j                  s=i xŠ‰	_
        dt        t           dt        t
        t        f   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).
        Nrƒ   rR   c                 óÖ   •‡— ˆfd„| D «       \  Šˆfd„t        t        | «      t        ‰j                  «      «      D «       \  }‰j                  |j                  k(  sJ ‚|j                  Šy )Nc              3   óB   •K  — | ]  }|j                   ‰k(  sŒ|–— Œ y ­wrD   rÀ   rÁ   s     €r'   r7   ziContinueExecutionCache.generate_based_on_original_code_object.<locals>.find_new_offset.<locals>.<genexpr>ó  s   øè ø€ ÒG˜q°A·H±HÀÓ4FœÑGùrÂ   c              3   ó0   •K  — | ]  \  }}|‰u r|–— Œ y ­wrD   rn   )r4   Úi1Úi2rÓ   s      €r'   r7   ziContinueExecutionCache.generate_based_on_original_code_object.<locals>.find_new_offset.<locals>.<genexpr>õ  s$   øè ø€ ò á�B˜Ø˜‘<ô ñùs   ƒ)ÚziprÏ   rƒ   Úopcoder¢   )rƒ   rR   Ú
new_targetrÓ   rç   Ú
new_offsetr¢   s      @€€€r'   Úfind_new_offsetzVContinueExecutionCache.generate_based_on_original_code_object.<locals>.find_new_offsetï  s_   ù€ ó H LÔG‰IˆVóä!¤(¨<Ó"8¼(À4×CTÑCTÓ:UÓVô‰MˆZð
 —=‘= J×$5Ñ$5Ò5Ð5Ð5Ø#×*Ñ*‰Jr)   r   c                 óf  •‡
— 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        ‰j                  «      «      |d„ «      }t	        ||«      D ]!  \  }}	|d   j                  ‰|	j                  <   Œ# y )Nrr   éÿÿÿÿc              3   ó.   •K  — | ]  }|‰kD  sŒ	|–— Œ y ­wrD   rn   )r4   ÚnÚold_start_offsets     €r'   r7   zmContinueExecutionCache.generate_based_on_original_code_object.<locals>.remap_block_offsets.<locals>.<genexpr>#  s   øè ø€ ò .Ø¸aÐBRÓ>Rœñ.ùs   ƒ
Žc                 ó    — | j                   |k(  S rD   rÀ   )r6   Úos     r'   ú<lambda>zlContinueExecutionCache.generate_based_on_original_code_object.<locals>.remap_block_offsets.<locals>.<lambda>'  s   € ÈÏÉÐWXÑHX€ r)   c                 ó   — | d   |u S )Nr   rn   )Úv1Úv2s     r'   r  zlContinueExecutionCache.generate_based_on_original_code_object.<locals>.remap_block_offsets.<locals>.<lambda>,  s   €  r¨!¡u° {€ r)   r   )rd   r„   r2   r%   rú   r   r{   r¢   rÉ   r”   rÏ   rƒ   )rƒ   rR   Úprefix_blocksr6   r  Úold_inst_offsetsÚtargetsÚnew_targetsÚnewÚoldr  r…   rç   r£   s             @€€€r'   Úremap_block_offsetszZContinueExecutionCache.generate_based_on_original_code_object.<locals>.remap_block_offsets  sI  ù€ ð 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ô #/ÜœH \Ó2´H¸T×=NÑ=NÓ4OÓPØÙ2ó#�Kô
 %(¨°WÓ$=ò N™˜˜SØ@CÀAÁÇÁÐ1°#·*±*Ò=ñNr)   c              3   ó<   •K  — | ]  }‰j                   |   –— Œ y ­wrD   )r…   )r4   r  rç   s     €r'   r7   zPContinueExecutionCache.generate_based_on_original_code_object.<locals>.<genexpr>4  s!   øè ø€ ò ,Ø67�×.Ñ.¨qÕ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…   rç   rý   s      ``   @@@r'   rï   z=ContinueExecutionCache.generate_based_on_original_code_objectÞ  sì   ü€ ô (>×'UÑ'UØñ(
ˆð ˆ
ð	+Üœ{Ñ+ð	+Ü;?ÄÄSÀ¹>÷	+ô 	˜d OÔ4ä×Ñ˜wÒ&ð
 ×1Ò1ØMOÐOÐ)¨DÔ,Jð(NÜ"&¤{Ñ"3ð(NÜCGÌÌSÈÁ>÷(NôT & dÐ,?Ô@ô ',ó ,Ø;Rô,ó 'Ð#ô &×,Ñ,Ø�I‰I�v˜zÐ+Bð
ØEIò
ð 	
r)   N)rx   ry   rz   r   rœ   rî   Úclassmethodr¡   r{   r}   rð   rK   r   r†   r‡   r�   Ústaticmethodr~   r   rÒ   rï   rn   r)   r'   rš   rš     sV  „ Ù"Ó$€EÙ4Ó6Ðàñ$ó ð$ð ðwð ð	wð
 "' s¨C x¡ðwð ðwð ˜˜S˜‘/ðwð ˜S #˜X‘ðwð ˜ cÐ)Ñ*ðwð ˜e C¨¨s© OÑ4°cÐ9Ñ:ðwð !  s¨E°#©J Ñ!7¸Ð!<Ñ=ðwð ˜#˜s˜(‘Oðwð 
�‰òwó ðwðr ð
¨4°Ñ+<ò 
ó ð
ð ðZ
Ø#&ðZ
ØAFÀsÈCÀxÁòZ
ó ñZ
r)   rš   rD   ))Ú__doc__rÆ   rˆ   r#   r†   Útypingr   r   r   Úbytecode_transformationr   r   r	   r
   r   r   r   r   r   Úutilsr   rí   ÚCO_NEWLOCALSrÌ   rÍ   Ú	CO_NESTEDré   Ú	CO_NOFREErê   rë   rì   rÊ   r(   rB   rH   Ú	dataclassrK   r€   r”   r˜   rš   rn   r)   r'   ú<module>r     sæ   ðñó Û Û 
Û ß &Ñ &÷
÷ 
õ 
õ *ð €Ø€Ø€
Ø€Ø€	Ø€Ø€	Ø€ØÐ ØÐ ð !9Ð ò<óJò<
ð €×Ñ˜dÔ#÷w;ð w;ó $ðw;ðt ×Ñ÷?ð ?ó ð?òò&÷j
ñ j
ðZ	Hr)   