Ë
    ÃÓ^jÖd  ã                  óî  — d dl m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	m
Z
 e
rd dlZd dlmZ ddlmZ ddlmZmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZm Z   ejB                  e"«      Z#ejH                  dd„«       Z%ejH                  dd„«       Z&ejN                   G d„ d«      «       Z(dd„Z)dd„Z*dd„Z+	 	 	 	 	 	 dd„Z,	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z-	 	 	 	 	 	 	 	 dd„Z.	 	 	 	 	 	 dd„Z/y) é    )ÚannotationsN)ÚAnyÚTYPE_CHECKING)ÚCallableé   )ÚInstructionTranslatorBase)Úcreate_copyÚcreate_dup_topÚcreate_instructionÚcreate_swapÚInstructionÚ	unique_id)Ú	PyCodegen)Úunimplemented)ÚGraphCompileReasonÚStackLocalsMetadata)ÚNullVariableÚUnknownVariablec                 óB  — t         j                  dk  rt        dt         j                  › �«      ‚d	d„} t        j                  | «      D �cg c]  }|j
                  ‘Œ }}t        |«      dz
  |ddd…   j                  d«      z
  }|j                  d«      }||| S c c}w )
zNGet the bytecode instructions that precede BUILD_LIST in a list comprehension.©é   é   z9comprehension bytecode prefix requires Python 3.12+, got c                 ó>   — t        d«      D � cg c]  } | ‘Œ c} S c c} w ©Nr   ©Úrange©Úis    úr/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_dynamo/comprehension_graph_break.pyÚfnz._get_comprehension_bytecode_prefix.<locals>.fn-   ó   € Ü  ›8Ö$�a’Ò$Ð$ùÒ$ó   Ž	r   NéÿÿÿÿÚLOAD_FAST_AND_CLEARÚ
BUILD_LIST©Úreturnz	list[int])ÚsysÚversion_infoÚAssertionErrorÚdisÚget_instructionsÚopnameÚlenÚindex)r    ÚinstÚinstsÚ	start_idxÚend_idxs        r   Ú"_get_comprehension_bytecode_prefixr4   $   sŸ   € ô ×Ñ˜'Ò!ÜØGÌ×HXÑHXÐGYÐZó
ð 	
ó%ô &)×%9Ñ%9¸"Ó%=Ö>˜TˆT�[‹[Ð>€EÐ>ä�E“
˜Q‘ ¡t¨ t¡×!2Ñ!2Ð3HÓ!IÑI€IØ�k‰k˜,Ó'€Gà�˜7Ð#Ð#ùò ?s   ÁBc                 ó  — t         j                  dk  rt        dt         j                  › �«      ‚dd„} dd„}dd„}dd„}dd„} || «      } ||«      } ||«      } ||«      }|d   |d	   d
œ|d   |d	   d
œ|d   |d	   d
œ|d   g d
œdœS )a—  Discover bytecode patterns for comprehension result handling.

    Analyzes sample functions to extract the opcode sequences that appear
    after END_FOR for each result disposition (stored, discarded, returned, consumed).

    Returns patterns with:
        - pre_store_ops: opcodes between END_FOR and first STORE_FAST
        - post_store_op: first opcode after all STORE_FASTs (for disambiguation)
    r   z8comprehension result patterns require Python 3.12+, got c                 ó@   — t        d«      D � cg c]  } | ‘Œ }} |S c c} w r   r   )r   Úresults     r   Ú	fn_storedz5_get_comprehension_result_patterns.<locals>.fn_storedH   s#   € Ü" 1›XÖ&˜’!Ð&ˆÐ&Øˆùò 'ó   Ž	c                 ó@   — t        d«      D � cg c]  } | ‘Œ c}  yc c} w r   r   r   s    r   Úfn_discardedz8_get_comprehension_result_patterns.<locals>.fn_discardedL   s   € Ü˜!“HÖˆqŠÓØùò 	r9   c                 ó>   — t        d«      D � cg c]  } | ‘Œ c} S c c} w r   r   r   s    r   Úfn_returnedz7_get_comprehension_result_patterns.<locals>.fn_returnedP   r!   r"   c                 óP   — t        t        d«      D � cg c]  } | ‘Œ c} «      S c c} w r   )Úsumr   r   s    r   Úfn_consumedz7_get_comprehension_result_patterns.<locals>.fn_consumedS   s   € Üœu Q›xÖ(˜!’AÒ(Ó)Ð)ùÒ(s   “	#c                ó¶  — t        t        j                  | j                  «      «      d   d   }g }d}t        j                  | «      D ]e  }|r|j
                  r nU|j                  }|sŒ"|j                  |k(  sŒ2|xs t        |j
                  «      }|j                  |j                  «       Œg ||j                  d«      dz   d }d}g }|t        |«      k  r8||   dk7  r0|j                  ||   «       |dz  }|t        |«      k  r	||   dk7  rŒ0|t        |«      k  r$||   dk(  r|dz  }|t        |«      k  r	||   dk(  rŒ||t        |«      k  r||   fS dfS )zCExtract (pre_store_ops, post_store_op) from comprehension bytecode.r   FÚEND_FORNr   Ú
STORE_FAST)Úlistr+   ÚfindlinestartsÚ__code__r,   Ústarts_lineÚ	positionsÚlinenoÚboolÚappendr-   r/   r.   )	r    Útarget_liner1   ÚstartedÚinstrÚposÚopsÚidxÚpre_store_opss	            r   Úextract_patternz;_get_comprehension_result_patterns.<locals>.extract_patternV   s_  € äœ3×-Ñ-¨b¯k©kÓ:Ó;¸AÑ>¸qÑAˆØˆØˆÜ×)Ñ)¨"Ó-ò 	+ˆEÙ˜5×,Ò,ÙØ—/‘/ˆCÚ�s—z‘z [Ó0Ø!Ò<¤T¨%×*;Ñ*;Ó%<�Ø—‘˜UŸ\™\Õ*ð	+ð �E—K‘K 	Ó*¨QÑ.Ð0Ð1ˆØˆàˆØ”C˜“HŠn  S¡¨\Ò!9Ø× Ñ   S¡Ô*Ø�1‰HˆCð ”C˜“HŠn  S¡¨\Ó!9ð ”C˜“HŠn  S¡¨\Ò!9Ø�1‰HˆCð ”C˜“HŠn  S¡¨\Ó!9ð ¨#´°C³ª.˜c #™hÐBÐB¸dÐBÐBó    r   r   )rR   Úpost_store_op)ÚstoredÚ	discardedÚreturnedÚconsumedr&   )r'   Úint)r    zCallable[..., Any]r'   ztuple[list[str], str | None])r(   r)   r*   )	r8   r;   r=   r@   rS   rV   rW   rX   rY   s	            r   Ú"_get_comprehension_result_patternsr[   8   s½   € ô ×Ñ˜'Ò!ÜØFÄs×GWÑGWÐFXÐYó
ð 	
óóó%ó*óCñ4 ˜YÓ'€FÙ Ó-€IÙ˜{Ó+€HÙ˜{Ó+€Hð %+¨1¡IÀÀqÁ	ÑJØ'0°¡|ÀiÐPQÁlÑSØ&.¨q¡kÀHÈQÁKÑPØ&.¨q¡kÀBÑGñ	ð rT   c                  óN   — e Zd ZU dZded<   ded<   ded<   ded	<   ded
<   ded<   y)ÚComprehensionAnalysisa9  Metadata about a comprehension's bytecode structure.

    Attributes:
        end_ip: Instruction pointer after all comprehension bytecode
        result_var: Name of result variable, or None if result stays on stack
        result_on_stack: True if result stays on stack (discarded, returned, or in expression)
        iterator_vars: Variables from LOAD_FAST_AND_CLEAR (need restoration)
        walrus_vars: Variables assigned via walrus operator (:=) inside comprehension
        captured_vars: Variables read from outer scope via LOAD_FAST inside comprehension
    rZ   Úend_ipz
str | NoneÚ
result_varrJ   Úresult_on_stackú	list[str]Úiterator_varsÚwalrus_varsÚcaptured_varsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© rT   r   r]   r]   }   s,   … ñ	ð ƒKØÓØÓØÓØÓØÔrT   r]   c                ó8  — t         j                  dk  rt        dt         j                  › �«      ‚| j                  €t        d«      ‚| j                  dz
  }t	        «       }| j
                  |t        |«      z
  | D �cg c]  }|j                  ‘Œ }}||k(  S c c}w )z¹Detect if we're at the start of a list/dict comprehension in 3.12+.

    In Python 3.12+, comprehensions are inlined with a bytecode pattern that
    precedes BUILD_LIST/BUILD_MAP.
    r   z9comprehension start detection requires Python 3.12+, got ú$instruction_pointer must not be Noner   )r(   r)   r*   Úinstruction_pointerr4   Úinstructionsr.   r-   )ÚtxÚipÚpatternr0   Úprefixs        r   Ú_is_comprehension_startrs   ’   sž   € ô ×Ñ˜'Ò!ÜØGÌ×HXÑHXÐGYÐZó
ð 	
ð 
×ÑÐ%ÜÐCÓDÐDØ	×	Ñ	 !Ñ	#€Bä0Ó2€GØ&(§o¡o°b¼3¸w»<Ñ6GÈ"Ð&MÖN˜dˆd�k‹kÐN€FÐNà�WÑÐùò Os   Á=Bc                ót  — t         j                  dk  rt        dt         j                  › �«      ‚| j                  €t        d«      ‚d}t	        | j                  t        | j                  «      «      D ]D  }| j                  |   }|j                  dk(  r|dz  }Œ'|j                  dk(  sŒ7|dz  }|dk(  sŒB|c S  y)	zPFind the instruction pointer of the outermost END_FOR for current comprehension.r   z8comprehension END_FOR search requires Python 3.12+, got rl   r   ÚFOR_ITERr   rB   r#   )r(   r)   r*   rm   r   r.   rn   r-   )ro   Únesting_depthÚ	search_ipr0   s       r   Ú_find_comprehension_end_for_iprx   §   s¿   € ä
×Ñ˜'Ò!ÜØFÄs×GWÑGWÐFXÐYó
ð 	
ð 
×ÑÐ%ÜÐCÓDÐDà€MÜ˜2×1Ñ1´3°r·±Ó3GÓHò !ˆ	Ø�‰˜yÑ)ˆØ�;‰;˜*Ò$Ø˜QÑ‰MØ�[‰[˜IÓ%Ø˜QÑˆMØ Ó!Ø Ò ð!ð rT   c                óZ  ‡ ‡‡‡— t         j                  dk  rt        dt         j                  › �«      ‚‰ j                  €t        d«      ‚t	        «       Š‰ j                  dz
  }g }g }g }t        «       }|dz
  }|dk\  r[‰ j                  |   }|j                  dk(  r"|j                  d|j                  «       |dz  }n|j                  dv r|dz  }nn|dk\  rŒ[|j                  |«       t        ‰ «      }|d	k(  rt        d
ddg ¬«       t        ˆ fd„t        ||«      D «       «      }	t        |	dz   |«      D �]+  }
‰ j                  |
   }|j                  dk(  rn|j                  dk(  r_|
dz   |k  rW‰ j                  |
dz      }|j                  dk(  r6|j                  }||vr&||vr"|j!                  |«       |j#                  |«       |j                  dk(  r|j#                  |j                  «       Œ»|j                  j%                  d«      sŒ×t'        |j                  t(        «      r|j                  n|j                  f}|D ]  }||vsŒ||vsŒ|j!                  |«       Œ �Œ. g Š|dz   }|t+        ‰ j                  «      k  r~‰ j                  |   j                  dk7  rb‰j!                  ‰ j                  |   j                  «       |dz  }|t+        ‰ j                  «      k  r‰ j                  |   j                  dk7  rŒb|}|t+        ‰ j                  «      k  rV‰ j                  |   j                  dk(  r:|dz  }|t+        ‰ j                  «      k  r‰ j                  |   j                  dk(  rŒ:|t+        ‰ j                  «      k  r‰ j                  |   j                  ndŠd ˆˆˆfd„}d} |d«      r‰ j                  |   j                  }d}nI |d«      rd}d}‰d   d   r|dz   n|}n- |d«      s‰‰d   d   k(  rd}d}nt        dd‰› d‰› �dg ¬«       t-        |||||¬«      S )!zDAnalyze comprehension bytecode to determine result handling pattern.r   z2comprehension analysis requires Python 3.12+, got Nrl   r   r   r$   )ÚSWAPÚGET_ITERr#   z)Comprehension analysis failed: No END_FORÚ z=Could not find END_FOR instruction in comprehension bytecode.)Úgb_typeÚcontextÚexplanationÚhintsc              3  óZ   •K  — | ]"  }‰j                   |   j                  d k(  r|–— Œ$ y­w)ru   N)rn   r-   )Ú.0r   ro   s     €r   ú	<genexpr>z)_analyze_comprehension.<locals>.<genexpr>ä   s0   øè ø€ ò àØ�?‰?˜1Ñ×$Ñ$¨
Ò2ô 	
ñùs   ƒ(+ÚCOPYrC   Ú	LOAD_FASTc                óB   •— ‰|    }‰|d   k(  xr ‰|d   k(  xs |d    S )NrR   rU   rj   )ÚnameÚpatÚpatternsrU   rR   s     €€€r   Úmatchesz'_analyze_comprehension.<locals>.matches  s=   ø€ Ø�t‰nˆØ  OÑ 4Ñ4ò 
Ø˜S Ñ1Ñ1ÒM¸¸_Ñ9MÐ5Mð	
rT   rV   FrW   rU   rX   rY   rR   Tz)Comprehension analysis failed: No matcheszpre_store_ops=z, post_store_op=z8Comprehension does not match any known bytecode pattern.)r^   r_   r`   rb   rc   rd   )r‡   Ústrr'   rJ   )r(   r)   r*   rm   r[   Úsetrn   r-   ÚinsertÚargvalÚupdaterx   r   Únextr   ÚargrK   ÚaddÚ
startswithÚ
isinstanceÚtupler.   r]   )ro   Ústart_iprb   rc   rd   Údefined_insideÚiter_scan_ipr0   Ú
end_for_ipÚfor_iter_ipÚbody_ipÚ	next_instÚvar_nameÚ	var_namesÚscan_ipÚstore_fast_iprŠ   r_   r`   r‰   rU   rR   s   `                  @@@r   Ú_analyze_comprehensionr¡   ¼   s6  û€ ä
×Ñ˜'Ò!ÜØ@Ä×AQÑAQÐ@RÐSó
ð 	
ð 
×ÑÐ%ÜÐCÓDÐDä1Ó3€HØ×%Ñ%¨Ñ)€Hà!€MØ€KØ!€MÜ"›u€Nð ˜a‘<€LØ
˜!Ò
Ø�‰˜|Ñ,ˆØ�;‰;Ð/Ò/Ø× Ñ   D§K¡KÔ0Ø˜AÑ‰LØ�[‰[Ð0Ñ0Ø˜AÑ‰Làð ˜!Ó
ð ×Ñ˜-Ô(ä/°Ó3€JØ�RÒÜØ?ØØWØõ		
ô ó ä�x Ó,ôó €Kô ˜ q™¨*Ó5ó 3ˆØ�‰˜wÑ'ˆð �;‰;˜&Ò  T§X¡X°¢]°wÀ±{ÀZÒ7OØŸ™¨°!©Ñ4ˆIØ×Ñ <Ò/Ø$×+Ñ+�Ø =Ñ0°XÀ[Ñ5PØ×&Ñ& xÔ0Ø"×&Ñ& xÔ0ð �;‰;˜,Ò&Ø×Ñ˜tŸ{™{Õ+ð �[‰[×#Ñ# KÕ0ä)¨$¯+©+´uÔ=�—’ÀDÇKÁKÀ>ð ð &ò 3�Ø >Ò1°hÀmÒ6SØ!×(Ñ(¨Õ2ò3ð+3ð4  "€MØ˜1‰n€Gà”#�b—o‘oÓ&Ò&Ø�O‰O˜GÑ$×+Ñ+¨|Ò;à×Ñ˜RŸ_™_¨WÑ5×<Ñ<Ô=Ø�1‰ˆð	 	”#�b—o‘oÓ&Ò&Ø�O‰O˜GÑ$×+Ñ+¨|Ó;ð
 €Mð 	”#�b—o‘oÓ&Ò&Ø�O‰O˜GÑ$×+Ñ+¨|Ò;à�1‰ˆð 	”#�b—o‘oÓ&Ò&Ø�O‰O˜GÑ$×+Ñ+¨|Ó;ð
 ,3´S¸¿¹Ó5IÒ+Iˆ�‰˜Ñ ×'Ò'Ètð ÷
ð "€JÙˆxÔØ—_‘_ ]Ñ3×:Ñ:ˆ
Ø‰Ù	�Ô	Øˆ
ØˆØ!)¨+Ñ!6°Ò!G�'˜A’+ÈW‰Ù	�Ô	 °¸*Ñ1EÀoÑ1VÒ VØˆ
Ø‰äØ?Ø$ ] OÐ3CÀMÀ?ÐSØRØõ		
ô !ØØà'Ø#ØØ#ôð rT   c           	     óä  — t         j                  dk  rt        dt         j                  › �«      ‚| j                  €t        d«      ‚| j                  dz
  }t	        | «      }dt        |j                  «      z   }t        d| j                  «       g«      }t        j                  d«       | j                  j                  | ||¬«      }t        |«      D �cg c]8  }t        | j                  t        | j                  «      |z
  |z      t         «      ‘Œ: }}| j#                  |«       |d	   }	t%        | j                  j&                  «      }
t)        d
„ |D «       «      }t        | j                  «      t        |	j*                  «      z
  }|
j-                  g t/        ||z   dz   «      ¢|
j1                  d	«      ‘|
j3                  «       ‘«       t5        t        |«      «      D ]^  }|
j-                  t7        d«      «       ||   r |
j-                  |
j9                  «       «       ŒB|
j-                  t;        dd¬«      g«       Œ` |
j-                  t;        d«      g«       t=        | ||||||	«      \  }}|
j-                  g t/        |dz   «      ¢|
j1                  d	«      ‘|
j3                  «       ‘t;        dd¬«      ‘t/        |dz   «      ¢|
j1                  d	«      ‘|
j3                  «       ‘t;        dd¬«      ‘«       | j?                  |g|g|
«       |d	kD  r•|dz   dz   }|
j-                  g t/        |«      ¢|
j1                  d	«      ‘|
j3                  «       ‘tA        «       ‘|
j1                  | «      ‘|
j1                  d«      ‘t;        dd¬«      ‘t;        d«      ‘t;        d«      ‘«       |jB                  |jD                  r|jD                  gng z   }i }|D ]\  }tG        «       | jH                  |<   ||	jJ                  v r|	jJ                  |   ||<   Œ;t        |	jJ                  «      |	jJ                  |<   Œ^ |dz   }|jB                  �r1|
j-                  g t/        |«      ¢|
j1                  d	«      ‘|
j3                  «       ‘«       tM        |jB                  «      D ]¢  \  }}|
j-                  g t/        d«      ¢|
j1                  |dz   «      ‘|
j3                  «       ‘«       ||v r<|
j-                  g t/        d«      ¢|
j1                  ||   «      ‘t;        d«      ‘«       Œ†|
j-                  t;        dd¬«      g«       Œ¤ |
j-                  t;        d«      |
j1                  d	«      |
j3                  «       g«       |jN                  r| jQ                  tG        «       «       nà|jD                  r¹|
j-                  g t/        |«      ¢|
j1                  d	«      ‘|
j3                  «       ‘«       |jD                  |v r9|
j-                  |
j1                  ||jD                     «      t;        d«      g«       nP|
j-                  g t7        d«      ¢t;        dd¬«      ‘t;        d«      ‘«       n|
j-                  t;        d«      g«       | j                  jS                  |
jU                  «       «       | jV                  |jX                     }| j                  jS                  | j[                  ||«      «       d| _        yc c}w )zæHandle list/dict comprehension graph break.

    Builds a synthetic function wrapping the comprehension bytecode,
    calls it via codegen_call_resume, then chains into the resume
    function for the post-comprehension code.
    r   z5comprehension graph break requires Python 3.12+, got Nrl   r   Úcomprehension_graph_breakzcomprehension triggered compile)ÚreasonÚ
stack_popsr   c              3  ó&   K  — | ]	  }|rŒd –— Œ y­w)r   Nrj   )r‚   Úms     r   rƒ   z4_handle_comprehension_graph_break.<locals>.<genexpr>k  s   è ø€ ÒA˜aºqœÑAùs   ‚Šé   ÚLIST_APPEND©r‘   ÚPOP_TOPr%   ÚBUILD_SLICEÚDELETE_SUBSCRÚSTORE_SUBSCR).r(   r)   r*   rm   r¡   r.   rb   r   Úframe_summaryÚlogÚdebugÚoutputÚcompile_subgraphr   r”   Ústackr   Úpopnr   Úroot_txr?   Ústack_null_idxesÚextend_outputr	   Úcreate_load_constÚcreate_binary_subscrÚreversedr   Úpop_nullr   Ú_build_comprehension_fnÚcodegen_call_resumer
   rc   r_   r   Úsymbolic_localsÚlocals_namesÚ	enumerater`   ÚpushÚadd_output_instructionsr,   rn   r^   Úcreate_call_resume_at)ro   r0   r–   Úanalysisr¥   r¤   Úall_stack_locals_metadatar   Ústack_pops_null_maskÚmetaÚcgÚnonnull_countÚlive_stack_depthÚnew_codeÚfn_nameÚframe_values_posÚvars_to_passÚexisting_varsr�   Úfv_depthÚjÚ
walrus_varÚresume_insts                          r   Ú!_handle_comprehension_graph_breakrÕ   ?  sT  € ô ×Ñ˜'Ò!ÜØCÄC×DTÑDTÐCUÐVó
ð 	
ð 
×ÑÐ%ÜÐCÓDÐDà×%Ñ%¨Ñ)€HÜ% bÓ)€HØ”S˜×/Ñ/Ó0Ñ0€JÜÐ ;¸b×>NÑ>NÓ>PÐ=QÓR€FÜ‡I�IÐ/Ô0ð !#§	¡	× :Ñ :Ø
ØØð !;ó !Ðô �zÓ"öàô 	�2—8‘8œC §¡›M¨JÑ6¸Ñ:Ñ;¼\ÕJðÐð ð
 ‡G�GˆJÔØ$ QÑ'€DÜ	�2—9‘9×$Ñ$Ó	%€Bô ÑAÐ#7ÔAÓA€Mô ˜2Ÿ8™8“}¤s¨4×+@Ñ+@Ó'AÑAÐð ×Ñð	
äÐ)¨JÑ6¸Ñ:Ó;ð	
ð × Ñ  Ó#ð	
ð ×#Ñ#Ó%ð		
ôô ”e˜JÓ'Ó(ò IˆØ
×Ñœ Q›Ô(Ø Ò"Ø×Ñ˜RŸ[™[›]Õ+à×ÑÔ0°ÀAÔFÐGÕHðIð ×ÑÔ(¨Ó3Ð4Ô5ô
 0Ø
ØØØØØØóÑ€Hˆgð ×Ñð		
ÜÐ)¨AÑ-Ó.ð		
à× Ñ  Ó#ð		
ð ×#Ñ#Ó%ð		
ô ˜|°Ô3ð			
ô
 Ð)¨AÑ-Ó.ð		
ð × Ñ  Ó#ð		
ð ×#Ñ#Ó%ð		
ô ˜|°Ô3ð		
ôð  ×Ñ˜H˜:¨ y°"Ô5ð
 �qÒØ+¨aÑ/°!Ñ3ÐØ
×ÑðÜÐ-Ó.ðà×$Ñ$ QÓ'ðð ×'Ñ'Ó)ðô
 Ó ðð ×$Ñ$ m ^Ó4ðð ×$Ñ$ TÓ*ðô # =°aÔ8ðô # ?Ó3ðô # 9Ó-ðô	
ð& ×'Ñ'Ø!)×!4Ò!4ˆ×	Ñ	Ñ¸"ñ€Lð %'€MØ ò AˆÜ'6Ó'8ˆ×Ñ˜8Ñ$Ø�t×(Ñ(Ñ(Ø&*×&7Ñ&7¸Ñ&AˆM˜(Ò#ä*-¨d×.?Ñ.?Ó*@ˆD×Ñ˜hÒ'ðAð   !Ñ#€Hð ×Óà
×ÑðÜ˜XÓ&ðà×$Ñ$ QÓ'ðð ×'Ñ'Ó)ðô	
ô ' x×';Ñ';Ó<ò 	M‰MˆAˆzØ×ÑðÜ  “^ðà×(Ñ(¨¨Q©Ó/ðð ×+Ñ+Ó-ðôð ˜]Ñ*à× Ñ ðÜ$ Q›ðà×,Ñ,¨]¸:Ñ-FÓGðô +¨>Ó:ðõð × Ñ Ô"4°]ÈÔ"JÐ!KÕLð'	Mð* 	×Ñä" 9Ó-à×$Ñ$ QÓ'Ø×'Ñ'Ó)ð	ô	
ð ×ÒØ
�‰”Ó!Õ"Ø	×	Ò	Ø
×ÑðÜ˜XÓ&ðà×$Ñ$ QÓ'ðð ×'Ñ'Ó)ðô	
ð ×Ñ -Ñ/Ø×Ñà×(Ñ(¨°x×7JÑ7JÑ)KÓLÜ& ~Ó6ðõð ×ÑðÜ  “^ðä& }¸!Ô<ðô ' yÓ1ðõð 	×ÑÔ,¨YÓ7Ð8Ô9ð ‡I�I×%Ñ% b×&9Ñ&9Ó&;Ô<ð —/‘/ (§/¡/Ñ2€KØ‡I�I×%Ñ%Ø
× Ñ  Ð.GÓHôð "€BÕùòs   Ã=[-c                óv  ‡ ‡‡‡‡‡‡‡‡‡‡‡‡— ddl m} ddlm} ddlmŠmŠ t        ˆ fd„|j                  D «       «      }	ddgt        |	«      z   t        ‰«      D �
cg c]  }
d|
› �‘Œ	 c}
z   Št        t        t        ‰ j                  j                  xs g «      t        ‰ j                  j                  xs g «      z   «      «      Š‰ j                  �‰ j                  n‰ j                  j                   Št#        d	‰ j                  j$                  › d
‰› �«      Š‰j&                  ‰j(                  z   ‰j*                  r‰j*                  gng z   ‰j,                  z   Šdˆˆˆˆˆˆˆˆˆˆˆˆˆ fd„} |‰ j                  |«      \  }} ||«       ‰ j.                  j1                  ‰|‰ j2                  «       |‰fS c c}
w )aŠ  Build a synthetic function wrapping comprehension bytecode.

    Uses the same calling convention as resume functions created by
    create_resume / ContinueExecutionCache.generate: the first two args
    are __nested_resume_fns and __nested_frame_values (ignored here),
    followed by stack items and live locals.

    Returns (code, name) where name is the global name for the function.
    r   )Útransform_code_object)Ú	skip_code)Ú
CO_VARARGSÚCO_VARKEYWORDSc              3  óH   •K  — | ]  }|‰j                  «       vsŒ|–— Œ y ­w©N)Úcell_and_freevars)r‚   Úkro   s     €r   rƒ   z*_build_comprehension_fn.<locals>.<genexpr>9  s!   øè ø€ ÒU˜1°Q¸b×>RÑ>RÓ>TÒ5T”QÑUùs   ƒ"›"Ú__nested_resume_fnsÚ__nested_frame_valuesÚ___stackÚ__comprehension_Ú_at_c           	     óB  •— ‰|d<   t         j                  dk\  r‰|d<   ‰|d<   d|d<   ‰|d<   t        ‰«      |d<   d	|d
<   d	|d<   t        ‰‰D �cg c]	  }|‰vsŒ|‘Œ c}z   «      |d<   |d   ‰	‰
z   z  |d<   g }‰r%|j	                  t        dt        ‰«      ¬«      «       |j	                  t        dd	¬«      «       ‰dz
  }t        ‰«      D ]F  }‰|   r|j	                  t        d«      «       Œ#|j	                  t        dd|› �¬«      «       |dz  }ŒH t        ‰‰‰j                  «      }g }‰j                  sO‰j                  r'|j	                  t        d‰j                  ¬«      «       n|j	                  t        dd ¬«      «       ‰j                  r_‰j                  D ]  }|j	                  t        d|¬«      «       Œ  |j	                  t        ddt        ‰j                  «      z   ¬«      «       |j	                  t        d«      «       ||z   |z   | d d  y c c}w )NÚco_name)r   é   Úco_qualnameÚco_firstlinenorj   Úco_cellvarsÚco_freevarsÚco_argcountr   Úco_posonlyargcountÚco_kwonlyargcountÚco_varnamesÚco_flagsÚCOPY_FREE_VARSrª   ÚRESUMEr   Ú	PUSH_NULLr…   rá   )rŽ   Ú
LOAD_CONSTÚBUILD_TUPLEÚRETURN_VALUE)r(   r)   r.   r•   rK   r   r   Ú_copy_comprehension_bytecoder^   r`   r_   rc   )rn   Úcode_optionsÚvrr   Ú	nonnull_ir   Ú
comp_instsÚepiloguer�   rÙ   rÚ   rÅ   ÚargsÚcomprehension_body_varsrÍ   ÚfreevarsrI   rÊ   r¥   rÇ   r–   ro   s            €€€€€€€€€€€€€r   r�   z'_build_comprehension_fn.<locals>.updateN  s8  ø€ Ø")ˆ�YÑÜ×Ñ˜wÒ&Ø*1ˆL˜Ñ'Ø)/ˆÐ%Ñ&Ø&(ˆ�]Ñ#Ø&.ˆ�]Ñ#Ü&)¨$£iˆ�]Ñ#Ø-.ˆÐ)Ñ*Ø,-ˆÐ(Ñ)Ü&+ØÐ6ÖH˜!¸!À4º-’AÒHÑHó'
ˆ�]Ñ#ð $0°
Ñ#;Ø˜Ñ'ð?
ñ $
ˆ�ZÑ ð %'ˆÙØ�M‰MÔ,Ð-=Ä3ÀxÃ=ÔQÔRØ�‰Ô(¨°qÔ9Ô:ð " AÑ%ˆ	Ü�zÓ"ò 	ˆAØ# AÒ&Ø—‘Ô0°Ó=Õ>à—‘Ü& {¸XÀiÀ[Ð;QÔRôð ˜Q‘‘	ð	ô 2°"°hÀÇÁÓPˆ
ð ')ˆØ×'Ò'Ø×"Ò"Ø—‘Ü& {¸8×;NÑ;NÔOõð —‘Ô 2°<ÈÔ MÔNØ×ÒØ$×0Ñ0ò R�Ø—‘Ô 2°;ÀxÔ PÕQðRà�O‰OÜ"Ø!ØœC × 4Ñ 4Ó5Ñ5ôôð 	�‰Ô*¨>Ó:Ô;à  :Ñ-°Ñ8ˆ‘Q‰ùòa Is   Á	H
ÁH
)rn   úlist[Instruction]r÷   zdict[str, Any]r'   ÚNone)Úbytecode_transformationr×   Ú
eval_framerØ   Úresume_executionrÙ   rÚ   r•   rÀ   rD   r   ÚsortedÚf_coderé   rê   rI   rè   r   rå   rb   rc   r_   rd   r²   Úinstall_resume_function_globalÚ	f_globals)ro   rÅ   r–   r¥   rÇ   rÊ   rÈ   r×   rØ   Úargnamesr   r�   rÌ   Ú_rÙ   rÚ   rü   rý   rÍ   rþ   rI   s   ``````        @@@@@@@r   r½   r½      s‰  ÿü€ õ$ ?Ý%ß<ô
 ÓU × 1Ñ 1ÔUÓU€Hà	Ð 7Ð8Ü
ˆx‹.ñ	ä#(¨Ó#7Ö
8˜aˆX�a�SŠ>Ò
8ñ	9ð 	ô ÜŒt�B—I‘I×)Ñ)Ò/¨RÓ0´4¸¿	¹	×8MÑ8MÒ8SÐQSÓ3TÑTÓUó€Hð Ÿ)™)Ð/ˆR�YŠY°R·Y±Y×5MÑ5M€FÜÐ*¨2¯9©9×+<Ñ+<Ð*=¸TÀ&ÀÐJÓK€Gð 	×ÑØ
×
Ñ
ñ	à$,×$7Ò$7ˆH×ÑÑ ¸Rñ	Að ×
 Ñ
 ñ	!ð ÷;9÷ ;9ñ ;9ñz (¨¯	©	°6Ó:�K€HˆaÙˆhÔð ‡I�I×,Ñ,¨W°hÀÇÁÔMà�WÐÐùòi 9s   ÁF6c                ó   — i }g }t        ||«      D ]C  }| j                  |   }t        j                  |«      }d|_        |||<   |j	                  |«       ŒE |D ]2  }|j
                  €Œ|j
                  |v sŒ||j
                     |_        Œ4 |S )z@Copy comprehension bytecode instructions, updating jump targets.N)r   rn   ÚcopyÚexn_tab_entryrK   Útarget)ro   r–   r^   Úinst_mapÚcopied_instsrp   Úoriginal_instÚcopied_insts           r   rö   rö   ”  s¥   € ð 02€HØ&(€Lä�H˜fÓ%ò )ˆØŸ™¨Ñ+ˆÜ—i‘i Ó.ˆØ$(ˆÔ!Ø"-ˆ�ÑØ×Ñ˜KÕ(ð)ð $ò >ˆØ×ÑÑ)¨k×.@Ñ.@ÀHÒ.LØ!)¨+×*<Ñ*<Ñ!=ˆKÕð>ð ÐrT   c                ó¸  — t         j                  dk\  r|j                  dk(  syt        | «      syt	        d„ | j
                  D «       «      xr^ | j                   xrO | j                   xr@ | j                   xr1 | j                   xr" | j                  j                  j                  du }|r| j                  �| j                  «       }|rD| j                  dk(  r5| j                  «       }|j!                  | «      rt#        | |«       y|| _        t'        | «      }|dk  rt)        d«      ‚| j*                  j-                  |«       | xj                  dz  c_        y)	z­
    Handle comprehension start for Python 3.12+ BUILD_LIST/BUILD_MAP with argval 0.
    Returns True if a graph break was triggered and the caller should return early.
    r   r   Fc              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wrÜ   )Úcan_restore)r‚   Úbs     r   rƒ   z8maybe_setup_comprehension_speculation.<locals>.<genexpr>·  s   è ø€ Ò4 ˆA�M‰M�OÑ4ùs   ‚NTz(failed to find END_FOR for comprehensionr   )r(   r)   rŽ   rs   ÚallÚblock_stackÚ	one_graphÚerror_on_graph_breakÚis_tracing_resume_prologueÚactive_generic_context_managersr²   Úcurrent_tracerÚparentÚ#_can_speculate_comprehension_nestedÚ_comprehension_depthÚ	speculateÚfailedrÕ   Úcurrent_speculationrx   r*   Ú_comprehension_end_for_ipsr’   )ro   r0   Úcan_speculateÚspeculationr™   s        r   Ú%maybe_setup_comprehension_speculationr&  ©  sH  € ô ×Ñ Ò'¨D¯K©K¸1Ò,<Øä" 2Ô&Øô 	Ñ4 R§^¡^Ô4Ó4ò 	4Ø—‘Ðò	4à×'Ñ'Ð'ò	4ð ×-Ñ-Ð-ò	4ð ×2Ñ2Ð2ò		4ð
 �I‰I×$Ñ$×+Ñ+¨tÐ3ð ñ ˜Ÿ™Ð.Ø×>Ñ>Ó@ˆá˜×0Ñ0°AÒ5Ø—l‘l“nˆØ×Ñ˜bÔ!Ü-¨b°$Ô7ØØ!,ˆÔÜ/°Ó3€JØ�A‚~ÜÐGÓHÐHØ×!Ñ!×%Ñ% jÔ1Ø×Ò˜qÑ ÕØrT   )r'   ra   )r'   zdict[str, dict[str, Any]])ro   r   r'   rJ   )ro   r   r'   rZ   )ro   r   r'   r]   )ro   r   r0   r   r'   r   )ro   r   rÅ   r]   r–   rZ   r¥   rZ   rÇ   z
list[bool]rÊ   rZ   rÈ   r   r'   ztuple[types.CodeType, str])ro   r   r–   rZ   r^   rZ   r'   rÿ   )ro   r   r0   r   r'   rJ   )0Ú
__future__r   r  Údataclassesr+   Ú	functoolsÚloggingr(   Útypingr   r   ÚtypesÚcollections.abcr   Úsymbolic_convertr   r  r	   r
   r   r   r   r   Úcodegenr   Úexcr   Úoutput_graphr   r   Úvariables.miscr   r   Ú	getLoggerre   r°   Úcacher4   r[   Ú	dataclassr]   rs   rx   r¡   rÕ   r½   rö   r&  rj   rT   r   ú<module>r6     sy  ðÝ "ã Û Û 
Û Û Û 
ß %ñ Ûå(å;÷÷ õ Ý ß Aß 9ð €g×Ñ˜Ó!€ð ‡�ò$ó ð$ð& ‡�òAó ðAðH ×Ñ÷ð ó ðó(ó*ó*@ðF^"Ø!ð^"Ø)4ð^"à	ó^"ðBqØ!ðqà#ðqð ðqð ð	qð
 %ðqð ðqð ðqð  óqðhØ!ðØ-0ðØ:=ðàóð*$Ø!ð$Ø)4ð$à	ô$rT   