§
    C�’j£g  ã                  óž  — 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j!        e"¦  «        Z#ej$        d,d„¦   «         Z%ej$        d-d„¦   «         Z&ej'         G d„ d¦  «        ¦   «         Z(d.d„Z)d/d„Z*d0d„Z+d1d„Z,d2d'„Z-d3d*„Z.d4d+„Z/dS )5é    )ÚannotationsN)ÚAnyÚTYPE_CHECKING)ÚCallableé   )ÚInstructionTranslatorBase)Úcreate_copyÚcreate_dup_topÚcreate_instructionÚcreate_swapÚInstructionÚ	unique_id)Ú	PyCodegen)Úunimplemented)ÚGraphCompileReasonÚStackLocalsMetadata)ÚNullVariableÚUnknownVariableÚreturnú	list[str]c                 ó>  — t           j        dk     rt          dt           j        › �¦  «        ‚dd„} d„ t          j        | ¦  «        D ¦   «         }t          |¦  «        dz
  |ddd	…                              d
¦  «        z
  }|                     d¦  «        }|||…         S )zNGet the bytecode instructions that precede BUILD_LIST in a list comprehension.©é   é   z9comprehension bytecode prefix requires Python 3.12+, got r   ú	list[int]c                 ó4   — d„ t          d¦  «        D ¦   «         S )Nc                ó   — g | ]}|‘ŒS © r   ©Ú.0Úis     úUC:\Projects\DSCons\.venv\Lib\site-packages\torch\_dynamo\comprehension_graph_break.pyú
<listcomp>zB_get_comprehension_bytecode_prefix.<locals>.fn.<locals>.<listcomp>.   ó   € Ð$Ð$Ð$�a�Ð$Ð$Ð$ó    r   ©Úranger   r%   r"   Úfnz._get_comprehension_bytecode_prefix.<locals>.fn-   ó   € Ø$Ð$�5 ™8œ8Ð$Ñ$Ô$Ð$r%   c                ó   — g | ]	}|j         ‘Œ
S r   ©Úopname©r    Úinsts     r"   r#   z6_get_comprehension_bytecode_prefix.<locals>.<listcomp>0   s   € Ð>Ð>Ð>˜TˆTŒ[Ð>Ð>Ð>r%   r   NéÿÿÿÿÚLOAD_FAST_AND_CLEARÚ
BUILD_LIST©r   r   )ÚsysÚversion_infoÚAssertionErrorÚdisÚget_instructionsÚlenÚindex)r(   ÚinstsÚ	start_idxÚend_idxs       r"   Ú"_get_comprehension_bytecode_prefixr=   $   s´   € õ Ô˜'Ò!Ð!ÝØZÍÔHXÐZÐZñ
ô 
ð 	
ð%ð %ð %ð %ð ?Ð>¥SÔ%9¸"Ñ%=Ô%=Ð>Ñ>Ô>€Eå�E‘
”
˜Q‘  t t¨ t¤×!2Ò!2Ð3HÑ!IÔ!IÑI€IØ�kŠk˜,Ñ'Ô'€Gà�˜7Ð"Ô#Ð#r%   údict[str, dict[str, Any]]c                 óT  — 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 r   r   c                 ó8   — d„ t          d¦  «        D ¦   «         } | S )Nc                ó   — g | ]}|‘ŒS r   r   r   s     r"   r#   zI_get_comprehension_result_patterns.<locals>.fn_stored.<locals>.<listcomp>I   s   € Ð&Ð&Ð&˜�!Ð&Ð&Ð&r%   r   r&   )Úresults    r"   Ú	fn_storedz5_get_comprehension_result_patterns.<locals>.fn_storedH   s    € Ø&Ð&�U 1™XœXÐ&Ñ&Ô&ˆØˆr%   Úintc                 ó8   — d„ t          d¦  «        D ¦   «          dS )Nc                ó   — g | ]}|‘ŒS r   r   r   s     r"   r#   zL_get_comprehension_result_patterns.<locals>.fn_discarded.<locals>.<listcomp>M   s   € ÐÐÐˆqˆÐÐÐr%   r   r&   r   r%   r"   Úfn_discardedz8_get_comprehension_result_patterns.<locals>.fn_discardedL   s!   € ØÐ•E˜!‘H”HÐÑÔÐØˆqr%   c                 ó4   — d„ t          d¦  «        D ¦   «         S )Nc                ó   — g | ]}|‘ŒS r   r   r   s     r"   r#   zK_get_comprehension_result_patterns.<locals>.fn_returned.<locals>.<listcomp>Q   r$   r%   r   r&   r   r%   r"   Úfn_returnedz7_get_comprehension_result_patterns.<locals>.fn_returnedP   r)   r%   c                 óN   — t          d„ t          d¦  «        D ¦   «         ¦  «        S )Nc                ó   — g | ]}|‘ŒS r   r   r   s     r"   r#   zK_get_comprehension_result_patterns.<locals>.fn_consumed.<locals>.<listcomp>T   s   € Ð(Ð(Ð(˜!�AÐ(Ð(Ð(r%   r   )Úsumr'   r   r%   r"   Úfn_consumedz7_get_comprehension_result_patterns.<locals>.fn_consumedS   s%   € ÝÐ(Ð(�u Q™xœxÐ(Ñ(Ô(Ñ)Ô)Ð)r%   r(   úCallable[..., Any]útuple[list[str], str | None]c                ó  — t          t          j        | j        ¦  «        ¦  «        d         d         }g }d}t          j        | ¦  «        D ]Q}|r	|j        r nE|j        }|r;|j        |k    r0|pt          |j        ¦  «        }| 	                    |j
        ¦  «         ŒR||                     d¦  «        dz   d…         }d}g }|t          |¦  «        k     rK||         dk    r?| 	                    ||         ¦  «         |dz  }|t          |¦  «        k     r||         dk    °?|t          |¦  «        k     r0||         dk    r$|dz  }|t          |¦  «        k     r||         dk    °$||t          |¦  «        k     r||         ndfS )zCExtract (pre_store_ops, post_store_op) from comprehension bytecode.r   FÚEND_FORNr   Ú
STORE_FAST)Úlistr6   ÚfindlinestartsÚ__code__r7   Ústarts_lineÚ	positionsÚlinenoÚboolÚappendr,   r9   r8   )	r(   Útarget_liner:   ÚstartedÚinstrÚposÚopsÚidxÚpre_store_opss	            r"   Úextract_patternz;_get_comprehension_result_patterns.<locals>.extract_patternV   s˜  € å�3Ô-¨b¬kÑ:Ô:Ñ;Ô;¸AÔ>¸qÔAˆØˆØˆÝÔ)¨"Ñ-Ô-ð 	+ð 	+ˆEØð ˜5Ô,ð Ø�Ø”/ˆCØð +�s”z [Ò0Ð0Ø!Ð<¥T¨%Ô*;Ñ%<Ô%<�Ø—’˜Uœ\Ñ*Ô*Ð*øà�E—K’K 	Ñ*Ô*¨QÑ.Ð0Ð0Ô1ˆØˆàˆØ•C˜‘H”HŠnˆn  S¤¨\Ò!9Ð!9Ø× Ò   S¤Ñ*Ô*Ð*Ø�1‰HˆCð •C˜‘H”HŠnˆn  S¤¨\Ò!9Ð!9ð •C˜‘H”HŠnˆn  S¤¨\Ò!9Ð!9Ø�1‰HˆCð •C˜‘H”HŠnˆn  S¤¨\Ò!9Ð!9ð ¨#µ°C±´ª.¨.˜c #œh˜h¸dÐBÐBr%   r   r   )rb   Úpost_store_op)ÚstoredÚ	discardedÚreturnedÚconsumedr2   )r   rD   )r(   rO   r   rP   )r3   r4   r5   )	rC   rG   rJ   rN   rc   re   rf   rg   rh   s	            r"   Ú"_get_comprehension_result_patternsri   8   s2  € õ Ô˜'Ò!Ð!ÝØYÅsÔGWÐYÐYñ
ô 
ð 	
ðð ð ð ðð ð ð ð%ð %ð %ð %ð*ð *ð *ð *ðCð Cð Cð Cð4 ˆ_˜YÑ'Ô'€FØ� Ñ-Ô-€IØˆ˜{Ñ+Ô+€HØˆ˜{Ñ+Ô+€Hð %+¨1¤IÀÀqÄ	ÐJÐJØ'0°¤|ÀiÐPQÄlÐSÐSØ&.¨q¤kÀHÈQÄKÐPÐPØ&.¨q¤kÀBÐGÐGð	ð ð r%   c                  óP   — 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<   dS )Ú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
    rD   Úend_ipz
str | NoneÚ
result_varrZ   Úresult_on_stackr   Úiterator_varsÚwalrus_varsÚcaptured_varsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r   r%   r"   rk   rk   }   sc   € € € € € € ð	ð 	ð €K€K�KØÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑÐÐr%   rk   Útxr   rZ   c                ó  — t           j        dk     rt          dt           j        › �¦  «        ‚| j        €t          d¦  «        ‚| j        dz
  }t	          ¦   «         }d„ | j        |t          |¦  «        z
  |…         D ¦   «         }||k    S )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 Nú$instruction_pointer must not be Noner   c                ó   — g | ]	}|j         ‘Œ
S r   r+   r-   s     r"   r#   z+_is_comprehension_start.<locals>.<listcomp>¢   s   € ÐNÐNÐN˜dˆdŒkÐNÐNÐNr%   )r3   r4   r5   Úinstruction_pointerr=   Úinstructionsr8   )rw   ÚipÚpatternÚprefixs       r"   Ú_is_comprehension_startr€   ’   s™   € õ Ô˜'Ò!Ð!ÝØZÍÔHXÐZÐZñ
ô 
ð 	
ð 
ÔÐ%ÝÐCÑDÔDÐDØ	Ô	 !Ñ	#€Bå0Ñ2Ô2€GØNÐN b¤o°b½3¸w¹<¼<Ñ6GÈ"Ð6LÔ&MÐNÑNÔN€Fà�WÒÐr%   rD   c                óR  — t           j        dk     rt          dt           j        › �¦  «        ‚| j        €t          d¦  «        ‚d}t	          | j        t          | j        ¦  «        ¦  «        D ]:}| j        |         }|j        dk    r|dz  }Œ |j        dk    r|dz  }|dk    r|c S Œ;d	S )
zPFind the instruction pointer of the outermost END_FOR for current comprehension.r   z8comprehension END_FOR search requires Python 3.12+, got Nry   r   ÚFOR_ITERr   rR   r/   )r3   r4   r5   r{   r'   r8   r|   r,   )rw   Únesting_depthÚ	search_ipr.   s       r"   Ú_find_comprehension_end_for_ipr…   §   sÎ   € å
Ô˜'Ò!Ð!ÝØYÅsÔGWÐYÐYñ
ô 
ð 	
ð 
ÔÐ%ÝÐCÑDÔDÐDà€MÝ˜2Ô1µ3°r´Ñ3GÔ3GÑHÔHð !ð !ˆ	ØŒ˜yÔ)ˆØŒ;˜*Ò$Ð$Ø˜QÑˆMˆMØŒ[˜IÒ%Ð%Ø˜QÑˆMØ Ò!Ð!Ø Ð Ð Ð øØˆ2r%   c                ó"  ‡ ‡‡‡— t           j        dk     rt          dt           j        › �¦  «        ‚‰ j        €t          d¦  «        ‚t	          ¦   «         Š‰ j        dz
  }g }g }g }t          ¦   «         }|dz
  }|dk    rO‰ j        |         }|j        dk    r!|                     d|j	        ¦  «         |dz  }n|j        dv r|dz  }nn|dk    °O| 
                    |¦  «         t          ‰ ¦  «        }|d	k    rt          d
ddg ¬¦  «         t          ˆ fd„t          ||¦  «        D ¦   «         ¦  «        }	t          |	dz   |¦  «        D �]}
‰ j        |
         }|j        dk    rh|j        dk    r]|
dz   |k     rT‰ j        |
dz            }|j        dk    r9|j	        }||vr.||vr*|                     |¦  «         |                     |¦  «         |j        dk    r|                     |j	        ¦  «         Œ©|j                             d¦  «        rKt'          |j	        t(          ¦  «        r|j	        n|j	        f}|D ]}||vr||vr|                     |¦  «         Œ �Œg Š|dz   }|t+          ‰ j        ¦  «        k     rn‰ j        |         j        dk    rX‰                     ‰ j        |         j        ¦  «         |dz  }|t+          ‰ j        ¦  «        k     r‰ j        |         j        dk    °X|}|t+          ‰ j        ¦  «        k     rI‰ j        |         j        dk    r3|dz  }|t+          ‰ j        ¦  «        k     r‰ j        |         j        dk    °3|t+          ‰ j        ¦  «        k     r‰ j        |         j        ndŠd$ˆˆˆfd„}d} |d¦  «        r‰ j        |         j	        }d}n` |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 Nry   r   r   r0   )Ú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  óH   •K  — | ]}‰j         |         j        d k    ¯|V — ŒdS )r‚   N)r|   r,   )r    r!   rw   s     €r"   ú	<genexpr>z)_analyze_comprehension.<locals>.<genexpr>ä   sD   øè è € ð ð àØŒ?˜1ÔÔ$¨
Ò2Ð2ð 	
à2Ð2Ð2Ð2ðð r%   ÚCOPYrS   Ú	LOAD_FASTÚnameÚstrr   rZ   c                óV   •— ‰|          }‰|d         k    o‰|d         k    p|d          S )Nrb   rd   r   )r’   ÚpatÚpatternsrd   rb   s     €€€r"   Úmatchesz'_analyze_comprehension.<locals>.matches  s=   ø€ Ø�tŒnˆØ  OÔ 4Ò4ð 
Ø˜S Ô1Ò1ÐM¸¸_Ô9MÐ5Mð	
r%   re   Frf   rd   rg   rh   rb   Tz)Comprehension analysis failed: No matcheszpre_store_ops=z, post_store_op=z8Comprehension does not match any known bytecode pattern.)rl   rm   rn   ro   rp   rq   )r’   r“   r   rZ   )r3   r4   r5   r{   ri   Úsetr|   r,   ÚinsertÚargvalÚupdater…   r   Únextr'   Úargr[   ÚaddÚ
startswithÚ
isinstanceÚtupler8   rk   )rw   Ústart_ipro   rp   rq   Údefined_insideÚiter_scan_ipr.   Ú
end_for_ipÚfor_iter_ipÚbody_ipÚ	next_instÚvar_nameÚ	var_namesÚscan_ipÚstore_fast_ipr—   rm   rn   r–   rd   rb   s   `                  @@@r"   Ú_analyze_comprehensionr­   ¼   s'  øøøø€ å
Ô˜'Ò!Ð!ÝØSÅÔAQÐSÐSñ
ô 
ð 	
ð 
ÔÐ%ÝÐCÑDÔDÐDå1Ñ3Ô3€HØÔ%¨Ñ)€Hà!€MØ€KØ!€MÝ"™uœu€Nð ˜a‘<€LØ
˜!Ò
Ð
ØŒ˜|Ô,ˆØŒ;Ð/Ò/Ð/Ø× Ò   D¤KÑ0Ô0Ð0Ø˜AÑˆLˆLØŒ[Ð0Ð0Ð0Ø˜AÑˆLˆLàð ˜!Ò
Ð
ð ×Ò˜-Ñ(Ô(Ð(å/°Ñ3Ô3€JØ�RÒÐÝØ?ØØWØð		
ñ 	
ô 	
ð 	
õ ð ð ð ð å�x Ñ,Ô,ðñ ô ñ ô €Kõ ˜ q™¨*Ñ5Ô5ð 3ñ 3ˆØŒ˜wÔ'ˆð Œ;˜&Ò Ð  T¤X°¢] ]°wÀ±{ÀZÒ7OÐ7OØœ¨°!©Ô4ˆIØÔ <Ò/Ð/Ø$Ô+�Ø =Ð0Ð0°XÀ[Ð5PÐ5PØ×&Ò& xÑ0Ô0Ð0Ø"×&Ò& xÑ0Ô0Ð0ð Œ;˜,Ò&Ð&Ø×Ò˜tœ{Ñ+Ô+Ð+Ð+ð Œ[×#Ò# KÑ0Ô0ð 	3å)¨$¬+µuÑ=Ô=ÐQ�”�ÀDÄKÀ>ð ð &ð 3ð 3�Ø >Ð1Ð1°hÀmÐ6SÐ6SØ!×(Ò(¨Ñ2Ô2Ð2øùð  "€MØ˜1‰n€Gà•#�b”oÑ&Ô&Ò&Ð&ØŒO˜GÔ$Ô+¨|Ò;Ð;à×Ò˜Rœ_¨WÔ5Ô<Ñ=Ô=Ð=Ø�1‰ˆð	 	•#�b”oÑ&Ô&Ò&Ð&ØŒO˜GÔ$Ô+¨|Ò;Ð;ð
 €Mð 	•#�b”oÑ&Ô&Ò&Ð&ØŒO˜GÔ$Ô+¨|Ò;Ð;à�1‰ˆð 	•#�b”oÑ&Ô&Ò&Ð&ØŒO˜GÔ$Ô+¨|Ò;Ð;ð
 ,3µS¸¼Ñ5IÔ5IÒ+IÐ+IˆŒ˜Ô Ô'Ð'Ètð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð "€JØ€wˆxÑÔð 
Ø”_ ]Ô3Ô:ˆ
ØˆˆØ	ˆ�Ñ	Ô	ð 
Øˆ
ØˆØ!)¨+Ô!6°Ô!GÐT�'˜A‘+�+ÈWˆˆØ	ˆ�Ñ	Ô	ð 	
 °¸*Ô1EÀoÔ1VÒ VÐ VØˆ
ØˆˆåØ?ØS ]ÐSÐSÀMÐSÐSØRØð		
ñ 	
ô 	
ð 	
õ !ØØà'Ø#ØØ#ðñ ô ð r%   r.   r   ÚNonec           	     óR  ‡ ‡— t           j        dk     rt          dt           j        › �¦  «        ‚‰ j        €t          d¦  «        ‚‰ j        dz
  }t	          ‰ ¦  «        }dt          |j        ¦  «        z   Št          d‰                      ¦   «         g¦  «        }t           
                    d¦  «         ‰ j                             ‰ |‰¬¦  «        }ˆˆ fd	„t          ‰¦  «        D ¦   «         }‰                      ‰¦  «         |d
         }t          ‰ j        j        ¦  «        }t#          d„ |D ¦   «         ¦  «        }	t          ‰ j        ¦  «        t          |j        ¦  «        z
  }
|                     g t+          |
‰z   dz   ¦  «        ¢|                     d
¦  «        ‘|                     ¦   «         ‘¦  «         t1          t          ‰¦  «        ¦  «        D ]y}|                     t3          d¦  «        ¦  «         ||         r(|                     |                     ¦   «         ¦  «         ŒT|                     t7          dd¬¦  «        g¦  «         Œz|                     t7          d¦  «        g¦  «         t9          ‰ ||‰||	|¦  «        \  }}|                     g t+          |
dz   ¦  «        ¢|                     d
¦  «        ‘|                     ¦   «         ‘t7          dd¬¦  «        ‘t+          |
dz   ¦  «        ¢|                     d
¦  «        ‘|                     ¦   «         ‘t7          dd¬¦  «        ‘¦  «         ‰                      |g|g|¦  «         |	d
k    r½|
dz   dz   }|                     g t+          |¦  «        ¢|                     d
¦  «        ‘|                     ¦   «         ‘t=          ¦   «         ‘|                     |	 ¦  «        ‘|                     d¦  «        ‘t7          dd¬¦  «        ‘t7          d¦  «        ‘t7          d¦  «        ‘¦  «         |j        |j         r|j         gng z   }i }|D ]N}tC          ¦   «         ‰ j"        |<   ||j#        v r|j#        |         ||<   Œ2t          |j#        ¦  «        |j#        |<   ŒO|
dz   }|j        �ry|                     g t+          |¦  «        ¢|                     d
¦  «        ‘|                     ¦   «         ‘¦  «         tI          |j        ¦  «        D ]Í\  }}|                     g t+          d¦  «        ¢|                     |dz   ¦  «        ‘|                     ¦   «         ‘¦  «         ||v rO|                     g t+          d¦  «        ¢|                     ||         ¦  «        ‘t7          d¦  «        ‘¦  «         Œ¨|                     t7          dd¬¦  «        g¦  «         ŒÎ|                     t7          d¦  «        |                     d
¦  «        |                     ¦   «         g¦  «         |j%        r#‰  &                    tC          ¦   «         ¦  «         �n|j         rÞ|                     g t+          |¦  «        ¢|                     d
¦  «        ‘|                     ¦   «         ‘¦  «         |j         |v rC|                     |                     ||j                  ¦  «        t7          d¦  «        g¦  «         nh|                     g t3          d¦  «        ¢t7          dd¬¦  «        ‘t7          d¦  «        ‘¦  «         n#|                     t7          d¦  «        g¦  «         ‰ j         '                    | (                    ¦   «         ¦  «         ‰ j)        |j*                 }‰ j         '                    ‰  +                    ||¦  «        ¦  «         d‰ _        dS )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 Nry   r   Úcomprehension_graph_breakzcomprehension triggered compile)ÚreasonÚ
stack_popsc                ó€   •— g | ]:}t          ‰j        t          ‰j        ¦  «        ‰z
  |z            t          ¦  «        ‘Œ;S r   )r    Ústackr8   r   )r    r!   r²   rw   s     €€r"   r#   z5_handle_comprehension_graph_break.<locals>.<listcomp>^  sL   ø€ ð ð ð àõ 	�2”8�C ¤™MœM¨JÑ6¸Ñ:Ô;½\ÑJÔJðð ð r%   r   c              3  ó   K  — | ]}|°d V — Œ	dS )r   Nr   )r    Úms     r"   r�   z4_handle_comprehension_graph_break.<locals>.<genexpr>k  s'   è è € ÐAÐA˜a¸qÐA˜ÐAÐAÐAÐAÐAÐAr%   é   ÚLIST_APPEND©r�   ÚPOP_TOPr1   ÚBUILD_SLICEÚDELETE_SUBSCRÚSTORE_SUBSCR),r3   r4   r5   r{   r­   r8   ro   r   Úframe_summaryÚlogÚdebugÚoutputÚcompile_subgraphr'   Úpopnr   Úroot_txrM   r´   Ústack_null_idxesÚextend_outputr	   Úcreate_load_constÚcreate_binary_subscrÚreversedr   Úpop_nullr   Ú_build_comprehension_fnÚcodegen_call_resumer
   rp   rm   r   Úsymbolic_localsÚlocals_namesÚ	enumeratern   ÚpushÚadd_output_instructionsr7   r|   rl   Úcreate_call_resume_at)rw   r.   r¢   Úanalysisr±   Úall_stack_locals_metadataÚstack_pops_null_maskÚmetaÚcgÚnonnull_countÚlive_stack_depthr!   Únew_codeÚfn_nameÚframe_values_posÚvars_to_passÚexisting_varsr©   Úfv_depthÚjÚ
walrus_varÚresume_instr²   s   `                     @r"   Ú!_handle_comprehension_graph_breakrã   ?  sÎ  øø€ õ Ô˜'Ò!Ð!ÝØVÅCÔDTÐVÐVñ
ô 
ð 	
ð 
ÔÐ%ÝÐCÑDÔDÐDàÔ%¨Ñ)€HÝ% bÑ)Ô)€HØ•S˜Ô/Ñ0Ô0Ñ0€JÝÐ ;¸b×>NÒ>NÑ>PÔ>PÐ=QÑRÔR€FÝ‡I‚IÐ/Ñ0Ô0Ð0ð !#¤	× :Ò :Ø
ØØð !;ñ !ô !Ððð ð ð ð å�zÑ"Ô"ðñ ô Ðð
 ‡G‚GˆJÑÔÐØ$ QÔ'€DÝ	�2”9Ô$Ñ	%Ô	%€Bõ ÐAÐAÐ#7ÐAÑAÔAÑAÔA€Mõ ˜2œ8‘}”}¥s¨4Ô+@Ñ'AÔ'AÑAÐð ×Òð	
åÐ)¨JÑ6¸Ñ:Ñ;Ô;ð	
ð × Ò  Ñ#Ô#ð	
ð ×#Ò#Ñ%Ô%ð		
ñô ð õ •e˜JÑ'Ô'Ñ(Ô(ð Ið IˆØ
×Ò� Q™œÑ(Ô(Ð(Ø Ô"ð 	IØ×Ò˜RŸ[š[™]œ]Ñ+Ô+Ð+Ð+à×ÒÕ0°ÀAÐFÑFÔFÐGÑHÔHÐHÐHØ×ÒÕ(¨Ñ3Ô3Ð4Ñ5Ô5Ð5õ
 0Ø
ØØØØØØñô Ñ€Hˆgð ×Òð		
ÝÐ)¨AÑ-Ñ.Ô.ð		
à× Ò  Ñ#Ô#ð		
ð ×#Ò#Ñ%Ô%ð		
õ ˜|°Ð3Ñ3Ô3ð			
õ
 Ð)¨AÑ-Ñ.Ô.ð		
ð × Ò  Ñ#Ô#ð		
ð ×#Ò#Ñ%Ô%ð		
õ ˜|°Ð3Ñ3Ô3ð		
ñô ð ð  ×Ò˜H˜:¨ y°"Ñ5Ô5Ð5ð
 �qÒÐØ+¨aÑ/°!Ñ3ÐØ
×ÒðÝÐ-Ñ.Ô.ðà×$Ò$ QÑ'Ô'ðð ×'Ò'Ñ)Ô)ðõ
 Ñ Ô ðð ×$Ò$ m ^Ñ4Ô4ðð ×$Ò$ TÑ*Ô*ðõ # =°aÐ8Ñ8Ô8ðõ # ?Ñ3Ô3ðõ # 9Ñ-Ô-ðñ	
ô 	
ð 	
ð& Ô'Ø!)Ô!4Ð<ˆÔ	ÐÐ¸"ñ€Lð %'€MØ ð Að AˆÝ'6Ñ'8Ô'8ˆÔ˜8Ñ$Ø�tÔ(Ð(Ð(Ø&*Ô&7¸Ô&AˆM˜(Ñ#Ð#å*-¨dÔ.?Ñ*@Ô*@ˆDÔ˜hÑ'Ð'à !Ñ#€Hð Ôñ &
à
×ÒðÝ˜XÑ&Ô&ðà×$Ò$ QÑ'Ô'ðð ×'Ò'Ñ)Ô)ðñ	
ô 	
ð 	
õ ' xÔ';Ñ<Ô<ð 	Mð 	M‰MˆAˆzØ×ÒðÝ  ‘^”^ðà×(Ò(¨¨Q©Ñ/Ô/ðð ×+Ò+Ñ-Ô-ðñô ð ð ˜]Ð*Ð*à× Ò ðÝ$ Q™œðà×,Ò,¨]¸:Ô-FÑGÔGðõ +¨>Ñ:Ô:ðñô ð ð ð × Ò Õ"4°]ÈÐ"JÑ"JÔ"JÐ!KÑLÔLÐLÐLà
×Òå" 9Ñ-Ô-à×$Ò$ QÑ'Ô'Ø×'Ò'Ñ)Ô)ð	ñ	
ô 	
ð 	
ð Ôð :Ø
�Š•Ñ!Ô!Ñ"Ô"Ð"Ñ"Ø	Ô	ð :Ø
×ÒðÝ˜XÑ&Ô&ðà×$Ò$ QÑ'Ô'ðð ×'Ò'Ñ)Ô)ðñ	
ô 	
ð 	
ð Ô -Ð/Ð/Ø×Òà×(Ò(¨°xÔ7JÔ)KÑLÔLÝ& ~Ñ6Ô6ðñô ð ð ð ×ÒðÝ  ‘^”^ðå& }¸!Ð<Ñ<Ô<ðõ ' yÑ1Ô1ðñô ð ð ð 	×ÒÕ,¨YÑ7Ô7Ð8Ñ9Ô9Ð9ð „I×%Ò% b×&9Ò&9Ñ&;Ô&;Ñ<Ô<Ð<ð ”/ (¤/Ô2€KØ„I×%Ò%Ø
× Ò  Ð.GÑHÔHñô ð ð "€BÔÐÐr%   rÓ   r¢   r²   rÕ   ú
list[bool]rØ   rÖ   r   útuple[types.CodeType, str]c                óò  ‡ ‡‡‡‡‡‡‡‡‡‡‡‡— ddl m} ddlm} ddlmŠmŠ t          ˆ fd„|j        D ¦   «         ¦  «        }	ddgt          |	¦  «        z   d„ t          ‰¦  «        D ¦   «         z   Št          t          t          ‰ j        j        pg ¦  «        t          ‰ j        j        p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                             ‰|‰ j        ¦  «         |‰fS )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  — | ]}|‰                      ¦   «         v¯|V — Œd S ©N)Úcell_and_freevars)r    Úkrw   s     €r"   r�   z*_build_comprehension_fn.<locals>.<genexpr>9  s9   øè è € ÐUÐU˜1°Q¸b×>RÒ>RÑ>TÔ>TÐ5TÐ5T�QÐ5TÐ5TÐ5TÐ5TÐUÐUr%   Ú__nested_resume_fnsÚ__nested_frame_valuesc                ó   — g | ]}d |› �‘ŒS )Ú___stackr   r   s     r"   r#   z+_build_comprehension_fn.<locals>.<listcomp>=  s   € Ð
8Ð
8Ð
8˜aˆ>�aˆ>ˆ>Ð
8Ð
8Ð
8r%   NÚ__comprehension_Ú_at_r|   úlist[Instruction]Úcode_optionsúdict[str, Any]r   r®   c           	     ó¨  •— ‰|d<   t           j        dk    r‰|d<   ‰|d<   d|d<   ‰|d<   t          ‰¦  «        |d<   d	|d
<   d	|d<   t          ‰ˆfd„‰D ¦   «         z   ¦  «        |d<   |d         ‰‰	z   z  |d<   g }‰r1|                     t          dt          ‰¦  «        ¬¦  «        ¦  «         |                     t          dd	¬¦  «        ¦  «         ‰dz
  }t          ‰¦  «        D ]Y}‰|         r#|                     t          d¦  «        ¦  «         Œ-|                     t          dd|› �¬¦  «        ¦  «         |dz  }ŒZt          ‰‰‰
j        ¦  «        }g }‰
j	        sU‰
j
        r*|                     t          d‰
j
        ¬¦  «        ¦  «         n$|                     t          dd ¬¦  «        ¦  «         ‰
j        rg‰
j        D ]&}|                     t          d|¬¦  «        ¦  «         Œ'|                     t          ddt          ‰
j        ¦  «        z   ¬¦  «        ¦  «         |                     t          d¦  «        ¦  «         ||z   |z   | d d …<   d S )NÚco_name)r   é   Úco_qualnameÚco_firstlinenor   Úco_cellvarsÚco_freevarsÚco_argcountr   Úco_posonlyargcountÚco_kwonlyargcountc                ó   •— g | ]}|‰v¯|‘Œ	S r   r   )r    ÚvÚargss     €r"   r#   z;_build_comprehension_fn.<locals>.update.<locals>.<listcomp>Y  s   ø€ ÐHÐHÐH˜!¸!À4¸-¸-�A¸-¸-¸-r%   Úco_varnamesÚco_flagsÚCOPY_FREE_VARSr¹   ÚRESUMEr   Ú	PUSH_NULLr‘   rò   )rš   Ú
LOAD_CONSTÚBUILD_TUPLEÚRETURN_VALUE)r3   r4   r8   r¡   r[   r   r'   Ú_copy_comprehension_bytecoderl   rn   rm   rp   )r|   rö   r   Ú	nonnull_ir!   Ú
comp_instsÚepiloguer©   ré   rê   rÓ   r  Úcomprehension_body_varsrÛ   ÚfreevarsrY   rØ   r²   rÕ   r¢   rw   s           €€€€€€€€€€€€€r"   r›   z'_build_comprehension_fn.<locals>.updateN  sÚ  ø€ Ø")ˆ�YÑÝÔ˜wÒ&Ð&Ø*1ˆL˜Ñ'Ø)/ˆÐ%Ñ&Ø&(ˆ�]Ñ#Ø&.ˆ�]Ñ#Ý&)¨$¡i¤iˆ�]Ñ#Ø-.ˆÐ)Ñ*Ø,-ˆÐ(Ñ)Ý&+ØÐHÐHÐHÐHÐ6ÐHÑHÔHÑHñ'
ô '
ˆ�]Ñ#ð $0°
Ô#;Ø˜Ñ'ð?
ñ $
ˆ�ZÑ ð %'ˆØð 	SØ�MŠMÕ,Ð-=Å3ÀxÁ=Ä=ÐQÑQÔQÑRÔRÐRØ�ŠÕ(¨°qÐ9Ñ9Ô9Ñ:Ô:Ð:ð " AÑ%ˆ	Ý�zÑ"Ô"ð 	ð 	ˆAØ# AÔ&ð Ø—’Õ0°Ñ=Ô=Ñ>Ô>Ð>Ð>à—’Ý& {Ð;QÀiÐ;QÐ;QÐRÑRÔRñô ð ð ˜Q‘�	�	å1°"°hÀÄÑPÔPˆ
ð ')ˆØÔ'ð 	OØÔ"ð OØ—’Ý& {¸8Ô;NÐOÑOÔOñô ð ð ð —’Õ 2°<ÈÐ MÑ MÔ MÑNÔNÐNØÔð 	Ø$Ô0ð Rð R�Ø—’Õ 2°;ÀxÐ PÑ PÔ PÑQÔQÐQÐQØ�OŠOÝ"Ø!Ø�C Ô 4Ñ5Ô5Ñ5ðñ ô ñô ð ð 	�ŠÕ*¨>Ñ:Ô:Ñ;Ô;Ð;à  :Ñ-°Ñ8ˆ�Q�Q�Q‰ˆˆr%   )r|   rõ   rö   r÷   r   r®   )Úbytecode_transformationrç   Ú
eval_framerè   Úresume_executionré   rê   r¡   rÎ   rT   r'   ÚsortedÚf_coderý   rþ   rY   rü   r   rù   ro   rp   rm   rq   rÁ   Úinstall_resume_function_globalÚ	f_globals)rw   rÓ   r¢   r²   rÕ   rØ   rÖ   rç   rè   Úargnamesr›   rÚ   Ú_ré   rê   r  r  rÛ   r  rY   s   ``````       @@@@@@@r"   rË   rË      s  øøøøøøøøøøøøø€ ð$ ?Ð>Ð>Ð>Ð>Ð>Ø%Ð%Ð%Ð%Ð%Ð%Ø<Ð<Ð<Ð<Ð<Ð<Ð<Ð<õ
 ÐUÐUÐUÐU Ô 1ÐUÑUÔUÑUÔU€Hà	Ð 7Ð8Ý
ˆx‰.Œ.ñ	à
8Ð
8¥5¨Ñ#7Ô#7Ð
8Ñ
8Ô
8ñ	9ð 	õ Ý�t�B”IÔ)Ð/¨RÑ0Ô0µ4¸¼	Ô8MÐ8SÐQSÑ3TÔ3TÑTÑUÔUñô €Hð œ)Ð/ˆRŒYˆY°R´YÔ5M€FÝÐJ¨2¬9Ô+<ÐJÐJÀ&ÐJÐJÑKÔK€Gð 	ÔØ
Ô
ñ	à$,Ô$7Ð?ˆHÔÐ Ð ¸Rñ	Að Ô
 ñ	!ð ð;9ð ;9ð ;9ð ;9ð ;9ð ;9ð ;9ð ;9ð ;9ð ;9ð ;9ð ;9ð ;9ð ;9ð ;9ð ;9ð ;9ð ;9ðz (Ð'¨¬	°6Ñ:Ô:�K€HˆaØ€IˆhÑÔÐð „I×,Ò,¨W°hÀÄÑMÔMÐMà�WÐÐr%   rl   rõ   c                ó  — i }g }t          ||¦  «        D ]D}| j        |         }t          j        |¦  «        }d|_        |||<   |                     |¦  «         ŒE|D ]$}|j        �|j        |v r||j                 |_        Œ%|S )z@Copy comprehension bytecode instructions, updating jump targets.N)r'   r|   ÚcopyÚexn_tab_entryr[   Útarget)rw   r¢   rl   Úinst_mapÚcopied_instsr}   Úoriginal_instÚcopied_insts           r"   r  r  ”  s§   € ð 02€HØ&(€Lå�H˜fÑ%Ô%ð )ð )ˆØœ¨Ô+ˆÝ”i Ñ.Ô.ˆØ$(ˆÔ!Ø"-ˆ�ÑØ×Ò˜KÑ(Ô(Ð(Ð(à#ð >ð >ˆØÔÐ)¨kÔ.@ÀHÐ.LÐ.LØ!)¨+Ô*<Ô!=ˆKÔøàÐr%   c                óx  — t           j        dk    r|j        dk    sdS t          | ¦  «        sdS t	          d„ | j        D ¦   «         ¦  «        o2| j         o*| j         o"| j         o| j	         o| j
        j        j        du }|r| j        �|                      ¦   «         }|rM| j        dk    rB|                      ¦   «         }|                     | ¦  «        rt#          | |¦  «         dS || _        t'          | ¦  «        }|dk     rt)          d¦  «        ‚| j                             |¦  «         | xj        dz  c_        dS )	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  — | ]}|                      ¦   «         V — Œd S rì   )Úcan_restore)r    Úbs     r"   r�   z8maybe_setup_comprehension_speculation.<locals>.<genexpr>·  s*   è è € Ð4Ð4 ˆA�MŠM‰OŒOÐ4Ð4Ð4Ð4Ð4Ð4r%   NTz(failed to find END_FOR for comprehensionr   )r3   r4   rš   r€   Ú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_speculationr…   r5   Ú_comprehension_end_for_ipsrž   )rw   r.   Úcan_speculateÚspeculationr¥   s        r"   Ú%maybe_setup_comprehension_speculationr8  ©  sz  € õ Ô Ò'Ð'¨D¬K¸1Ò,<Ð,<Øˆuå" 2Ñ&Ô&ð Øˆuõ 	Ð4Ð4 R¤^Ð4Ñ4Ô4Ñ4Ô4ð 	4Ø”Ðð	4àÔ'Ð'ð	4ð Ô-Ð-ð	4ð Ô2Ð2ð		4ð
 ŒIÔ$Ô+¨tÐ3ð ð ð A˜œÐ.Ø×>Ò>Ñ@Ô@ˆàð -˜Ô0°AÒ5Ð5Ø—l’l‘n”nˆØ×Ò˜bÑ!Ô!ð 	Ý-¨b°$Ñ7Ô7Ð7Ø�4Ø!,ˆÔÝ/°Ñ3Ô3€JØ�A‚~€~ÝÐGÑHÔHÐHØÔ!×%Ò% jÑ1Ô1Ð1ØÐÔ˜qÑ ÐÔØˆ5r%   )r   r   )r   r>   )rw   r   r   rZ   )rw   r   r   rD   )rw   r   r   rk   )rw   r   r.   r   r   r®   )rw   r   rÓ   rk   r¢   rD   r²   rD   rÕ   rä   rØ   rD   rÖ   r   r   rå   )rw   r   r¢   rD   rl   rD   r   rõ   )rw   r   r.   r   r   rZ   )0Ú
__future__r   r  Údataclassesr6   Ú	functoolsÚloggingr3   Útypingr   r   ÚtypesÚcollections.abcr   Úsymbolic_convertr   r  r	   r
   r   r   r   r   Úcodegenr   Úexcr   Úoutput_graphr   r   Úvariables.miscr   r   Ú	getLoggerrr   r¿   Úcacher=   ri   Ú	dataclassrk   r€   r…   r­   rã   rË   r  r8  r   r%   r"   ú<module>rH     s‚  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø 
€
€
€
Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %ð ð <Ø€L€L€Là(Ð(Ð(Ð(Ð(Ð(à;Ð;Ð;Ð;Ð;Ð;ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9ð €gÔ˜Ñ!Ô!€ð „ð$ð $ð $ñ „ð$ð& „ðAð Að Añ „ðAðH Ôðð ð ð ð ñ ô ñ Ôðð(ð ð ð ð*ð ð ð ð*@ð @ð @ð @ðF^"ð ^"ð ^"ð ^"ðBqð qð qð qðhð ð ð ð*$ð $ð $ð $ð $ð $r%   