+
    –°³j~¶ ã            	      ó  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RIHt ^ RIHtHtHtHtHtHt ^ RIHt ^ RIHtH t H!t!H"t" ^ RI#H$t$H%t% ^ RI&t&^ RI't&^ RI(t&^ RI)H*u H+t, ^ R	I-H.t. ^ R
I/H0t0 ^ RI1H2t2 ^ RI3H4t4H5t5H6t6 ^ RI7H8t8 ^ RI9H:t:H;t; ^ RI<H=t= ^ RI>H?t?H@t@ ^ RIAHBtB ^ RICHDtD ^ RIEHFtF ^RIGHHtI ^RIJHKtKHLtL ^RIMHNtN ^RIOHPtPHQtQ ^RIRHStS ^RITHHtH ^RIUHVtV ^RIWHXtX ]
P²                  ! ]Z4      t[]&P¸                  Pº                  t]]&P¸                  P¼                  t^]t_]_]&P¤                  PÀ                  ,          ta]PÄ                  PÇ                  RR4      tdRseR]fR&   RsgR]fR &   R! R" lth ! R# R$]!4      ti ! R% R&]!4      tj ! R' R(]!4      tk]"! R)4      tl]&P¤                  PÚ                  PÜ                  ]o,          tp ! R* R+4      tq]q! 4       trRãR, R- lltsR. R/ lttR0 R1 ltu ! R2 R34      tv ! R4 R5]w4      tx]v]x,          tyR6 R7 ltz ! R8 R94      t{ ! R: R;]4      t| ! R< R=]|4      t} ! R> R?]|4      t~R@ RA ltRB RC lt€RD RE lt�RF RG lt‚RH RI ltƒ ! RJ RK]|4      t„ ! RL RM]|4      t… ! RN RO]|4      t† ! RP RQ]|4      t‡]ˆ]RR3,          t‰ ! RS RT]‡4      tŠ ! RU RV]Š4      t‹ ! RW RX]Š4      tŒ ! RY RZ]Š4      t� ! R[ R\]‡4      tŽ ! R] R^]Ž4      t� ! R_ R`]Ž4      t� ! Ra Rb]Ž4      t‘ ! Rc Rd]|4      t’ ! Re Rf]|4      t“ ! Rg Rh]|4      t” ! Ri Rj4      t• ! Rk Rl]!4      t–]EP.                   ! Rm Rn4      4       t˜]EP.                   ! Ro Rp]˜4      4       t™]EP.                   ! Rq Rr]˜4      4       tš]EP.                   ! Rs Rt]˜4      4       t›Ru Rv ltœRw Rx lt�]EP.                  ! RyRz7       ! R{ R|4      4       tžR} R~ ltŸR R€ lt R� R‚ lt¡RäRƒ R„ llt¢R… R† lt£RåRˆ R‰ llt¤]œRRæRR‡R]V3RŠ R‹ llt¥]F! 4       t¦RŒ]fR�&   RŽ R� lt§]! ]¨4      EPR                  R�,          R‘,          tª]EP.                   ! R’ R“4      4       t«. t¬R”]fR•&   ]œRRæR‡]V3R– R— llt­]IEP\                  ! R‡R˜7      RRæ]V3R™ Rš ll4       t¯RçR› Rœ llt°]œ3R�R‡RžRyRŸRR R/R¡ R¢ lllt±]œ3R�R‡/R£ R¤ lllt²R¥ R¦ lt³]EPh                  ! R§4      tµR¨ R© lt¶Rª R« lt·R¬ R­ lt¸R® R¯ lt¹R° R± ltºR² R³ lt»]EP.                  ! RyRz7       ! R´ Rµ4      4       t¼]EP.                   ! R¶ R·4      4       t½]EP|                  RäR¸ R¹ ll4       t¿Rº R» ltÀR¼ R½ ltÁR¾ R¿ ltÂRÀ RÁ ltÃRÂ RÃ ltÄRÄ RÅ ltÅ ! RÆ RÇ4      tÆRÈ RÉ ltÇRèRÊ RË lltÈ]&EP’                  ! 4       RÌRyRÍ]V/RÎ RÏ ll4       tÊ]&EP–                  ! 4       RÍ]V/RÐ RÑ ll4       tÌRÒ RÓ ltÍRÔ RÕ ltÎRÖ R× ltÏRØ RÙ ltÐRÚ RÛ ltÑ]F! 4       tÒRŒ]fRÜ&   RäRÝ RÞ lltÓRß Rà ltÔRá Râ ltÕR# )éa4  
# Inductor Pattern Matcher

The pattern matcher enables search/replace within an FX graph.

The main entrypoint to the pattern matcher is register_replacement(). Given a
search function and a replacement function this will register a replacement with
a pass (such as torch._inductor.fx_passes.joint_graph.patterns).

Internally the pattern matcher represents patterns as a graph (a DAG). Creating
new patterns manually as a graph is cumbersome and error-prone so the standard
way to create patterns (using register_replacement()) is to provide a search
function and a replacement function which is traced and converted into a graph.

Because the search functions are built somewhat generic (they tend to ignore
tensor sizes, for example) register_replacement() allows you to specify an
`extra_check` function which performs additional checks to verify that the
matched pattern fully matches before returning it.

## Precompiled Patterns

New patterns are added using register_replacement(). Patterns added in this way
can have a compile-time overhead because they need to be traced before
use. Patterns can be precompiled and added using gen_register_replacement()
instead. To do this you call gen_register_replacement() instead of
register_replacement(). The arguments are the same except for an additional
unique name which is used as a lookup key.

## Internals

The match DAG is represented by a graph of `PatternExpr` nodes. Each PatternExpr
implements a `_match` method which returns either a `Match` object for a
successful match or a `FailedMatch` object for a failure to match.
)ÚannotationsN)ÚABCÚabstractmethod)Údefaultdict)ÚCallableÚ
CollectionÚ	GeneratorÚIterableÚMappingÚSequence)ÚPath)ÚAnyÚNoReturnÚProtocolÚTypeVar)ÚSelfÚTypeIs)Úenable_python_dispatcher)Úcounters)Úis_integer_dtype)Úis_fake_tensorÚmaybe_get_fake_constantÚunset_fake_temporarily)Úmake_fx)Úguard_or_falseÚstatically_known_true)Ú	_get_attr)Úimmutable_dictÚimmutable_list)ÚGraphTransformObserver)Úpreserve_node_meta)Ú
OrderedSet©Úconfig)Úaot_functionÚmake_boxed_func)Údefault_partition)Ú
FakeTensorÚFakeTensorMode)ÚTransformer)Úselect_decomp_table)Ú%fallback_node_due_to_unsupported_typeÚ#TORCHINDUCTOR_PATTERN_MATCH_BACKENDÚinductorzbool | OrderedSet[str] | NoneÚ_debug_nodes_cacheú
str | NoneÚ_debug_nodes_env_value_cachec               ó    € V ^8„  d   QhRRRR/# )é   Ú	node_nameÚstrÚreturnÚbool© )Úformats   "Ú`/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/_inductor/pattern_matcher.pyÚ__annotate__r:   f   s   € ÷ $ñ $ #ð $¨$ñ $ó    c                óT   € R  R lpV! 4       p\        V\        4      '       d   V# W9   # )c               ó   € V ^8„  d   QhRR/# )r2   r5   úbool | OrderedSet[str]r7   )r8   s   "r9   r:   Ú(_should_debug_node.<locals>.__annotate__g   s   € ÷ "ñ "Ð4ñ "r;   c                 ó’   € R  R lp \         P                  P                  R4      pV\        8w  g	   \        f   V ! V4      sVs\        # )c               ó    € V ^8„  d   QhRRRR/# )r2   Ú	env_valuer/   r5   r>   r7   )r8   s   "r9   r:   ÚB_should_debug_node.<locals>._get_debug_nodes.<locals>.__annotate__j   s   € ÷ 	4ñ 	4 zð 	4Ð6Lñ 	4r;   c                ó\   € V '       g   R # V R8X  d   R# \        V P                  R4      4      # )FÚallTÚ,)r!   Úsplit)rB   s   &r9   Úparse_debug_envÚE_should_debug_node.<locals>._get_debug_nodes.<locals>.parse_debug_envj   s'   € ßÙØ˜EÔ!ÙÜ˜iŸo™o¨cÓ2Ó3Ð3r;   Ú!TORCHINDUCTOR_PATTERN_MATCH_DEBUG)ÚosÚenvironÚgetr0   r.   )rH   Úcurrent_envs     r9   Ú_get_debug_nodesÚ,_should_debug_node.<locals>._get_debug_nodesg   sD   € õ	4ô —j‘j—n‘nÐ%HÓIˆð Ô6Ô6Ô:LÒ:TÙ!0°Ó!=ÐØ+6Ð(ä!Ð!r;   )Ú
isinstancer6   )r3   rO   Údebug_nodess   &  r9   Ú_should_debug_noderS   f   s-   € õ"ñ& #Ó$€KÜ�+œt×$Ò$ØÐØÑ#Ð#r;   c                  ó.   € ] tR t^€t$ R]R&   R R ltRtR# )ÚSearchFnr4   Ú__name__c               ó$   € V ^8„  d   QhRRRRRR/# ©r2   Úargsr   Úkwargsr5   r7   )r8   s   "r9   r:   ÚSearchFn.__annotate__ƒ   ó   € ×=Ñ=˜cÐ=¨SÐ=°SÑ=r;   c                	ó   € R # ©Nr7   ©ÚselfrY   rZ   s   &*,r9   Ú__call__ÚSearchFn.__call__ƒ   ó   € ¹#r;   r7   N)rV   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__ra   Ú__static_attributes__r7   r;   r9   rU   rU   €   s   ‡ ØƒMç=Ñ=r;   rU   c                  ó"   € ] tR t^†tR R ltRtR# )Ú	ReplaceFnc               ó$   € V ^8„  d   QhRRRRRR/# rX   r7   )r8   s   "r9   r:   ÚReplaceFn.__annotate__‡   r\   r;   c                	ó   € R # r^   r7   r_   s   &*,r9   ra   ÚReplaceFn.__call__‡   rc   r;   r7   N©rV   rd   re   rf   ra   rh   r7   r;   r9   rj   rj   †   s   † ß=Ñ=r;   rj   c                  ó"   € ] tR t^ŠtR R ltRtR# )ÚTraceFnc               ó(   € V ^8„  d   QhRRRRRRRR/# )r2   ÚfnzSearchFn | ReplaceFnrY   r   rZ   r5   útorch.fx.GraphModuler7   )r8   s   "r9   r:   ÚTraceFn.__annotate__‹   s,   € ÷ #ñ #Ø&ð#Ø/2ð#Ø>Að#à	ñ#r;   c                	ó   € R # r^   r7   )r`   rs   rY   rZ   s   &&*,r9   ra   ÚTraceFn.__call__‹   s   € á"r;   r7   Nro   r7   r;   r9   rq   rq   Š   s   † ÷#ñ #r;   rq   ÚTc                  ó"   € ] tR t^–tR R ltRtR# )ÚMultiplec               ó   € V ^8„  d   QhRR/# ©r2   r5   ÚNoner7   )r8   s   "r9   r:   ÚMultiple.__annotate__—   s   € ÷ @ñ @˜$ñ @r;   c                	óR   € R \        4       9   d   V \        Jd   \        R4      hR# R# )ÚMULTIPLEzMultiple is not a singletonN)Úglobalsr€   ÚAssertionError©r`   s   &r9   Ú__init__ÚMultiple.__init__—   s'   € àœ›Ô" t´8Ó';Ü Ð!>Ó?Ð?ñ (<Ñ"r;   r7   N)rV   rd   re   rf   r„   rh   r7   r;   r9   rz   rz   –   s   † ÷@ñ @r;   rz   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r2   Únew_metaúdict[str, Any]Úold_nodeútorch.fx.NodeÚ	pass_namer4   r5   r}   r7   )r8   s   "r9   r:   r:   ¡   s,   € ÷ ?ñ ?Øð?Ø(5ð?ØBEð?à	ñ?r;   c                ó¦  € ^ RI HpHp \        P                  ! 4       ^8X  dx   V P                  R. 4      P                  4       pVP                  V! WVP                  4      4       V P                  R VP                  P                  4        4       4       WPR&   M0V P                  R VP                  P                  4        4       4       RVP                  9   d   VP                  R,          V R&   RV 9  d(   RVP                  9   d   VP                  R,          V R&   RV 9  d,   RVP                  9   d   VP                  R,          V R&   R# R# R# )	é    )Ú
NodeSourceÚNodeSourceActionÚ	from_nodec              3  ó‚   "  € T F5  w  rV\         P                  P                  P                  9   g   K0  W3x € K7  	  R # 5ir^   ©ÚtorchÚfxÚproxyÚ_COPY_META_FIELDS©Ú.0ÚkÚvs   &  r9   Ú	<genexpr>Ú!_transfer_meta.<locals>.<genexpr>«   ó3   é € ð 
á-‘�Ø”E—H‘H—N‘N×4Ñ4Ñ4ô ˆQ�FÛ-ùó   ‚-?´?c              3  ó‚   "  € T F5  w  rV\         P                  P                  P                  9   g   K0  W3x € K7  	  R # 5ir^   r’   r—   s   &  r9   r›   rœ   ²   r�   rž   Ústack_traceÚvalÚtensor_metaN)Útorch.fx.tracebackrŽ   r�   r#   Ú#effective_provenance_tracking_levelrM   ÚcopyÚappendÚREPLACEÚupdateÚmetaÚitems)r‡   r‰   r‹   rŽ   r�   Únew_from_nodes   &&&   r9   Ú_transfer_metar¬   ¡   s  € ÷ @ô ×1Ò1Ó3°qÔ8Ø Ÿ™ [°"Ó5×:Ñ:Ó<ˆØ×Ñ™Z¨Ð=M×=UÑ=UÓVÔWØ�‰ñ 
à Ÿ™×+Ñ+Ô-ó
ô 	
ð
 !.�Òà�‰ñ 
à Ÿ™×+Ñ+Ô-ó
ô 	
ð
 ˜Ÿ™Ô%Ø"*§-¡-°Õ">ˆ�Ñð �HÔ ¨(¯-©-Ô!7Ø"Ÿ-™-¨Õ.ˆ�‰Ø˜HÔ$¨¸(¿-¹-Ô)GØ"*§-¡-°Õ">ˆ�Óñ *HÑ$r;   c               ó    € V ^8„  d   QhRRRR/# )r2   ÚnodesúSequence[torch.fx.Node]r5   rˆ   r7   )r8   s   "r9   r:   r:   Â   s   € ÷ ñ Ð"9ð ¸nñ r;   c                ó¢  aaa€ V '       g   / # V ^ ,          P                   P                  R/ 4      P                  R^ 4      oV ^ ,          P                   P                  R/ 4      P                  R4      oV ^ ,          P                   P                  R/ 4      P                  R4      o\        ;QJ d(    VVV3R lV R,           4       F  '       g   K   RM	  RM! VVV3R lV R,           4       4      '       d   / # / pS^ 8w  g;   \        ;QJ d    R	 V  4       F  '       g   K   RM	  RM! R	 V  4       4      '       d   SVR&   Se   SVR&   SVR&   V# )
r�   ÚcustomÚstreamÚmempoolÚmempool_devicec              3  ó2  <"  € T FŒ  pVP                   P                  R / 4      P                  R^ 4      VP                   P                  R / 4      P                  R4      VP                   P                  R / 4      P                  R4      3SSS38g  x € KŽ  	  R# 5i©r±   r²   r³   r´   N©r©   rM   )r˜   Únoder³   r´   r²   s   & €€€r9   r›   Ú)_common_custom_context.<locals>.<genexpr>É   s‰   øé € ð ñ ˆDð �I‰I�M‰M˜( BÓ'×+Ñ+¨H°aÓ8Ø�I‰I�M‰M˜( BÓ'×+Ñ+¨IÓ6Ø�I‰I�M‰M˜( BÓ'×+Ñ+Ð,<Ó=ð	
ð
 �G˜^Ð,ö	-ó ùs   ƒBBºé   NNTFc              3  ó`   "  € T F$  pR VP                   P                  R/ 4      9   x € K&  	  R# 5i)r²   r±   Nr·   )r˜   r¸   s   & r9   r›   r¹   Õ   s$   é € ÐTÉeÀd˜( d§i¡i§m¡m°H¸bÓ&AÖAËeùs   ‚,.)r©   rM   Úany)r®   Úcontextr³   r´   r²   s   & @@@r9   Ú_common_custom_contextr¿   Â   s  ú€ ßØˆ	à�1�X�]‰]×Ñ˜x¨Ó,×0Ñ0°¸1Ó=€FØ�A�h�m‰m×Ñ ¨"Ó-×1Ñ1°)Ó<€GØ˜1•X—]‘]×&Ñ& x°Ó4×8Ñ8Ð9IÓJ€Nß
ƒsö ð ˜"–Ió‡s‡s‚sö ð ˜"–Ió÷ ò ð ˆ	à €GØ�„{—c“cÑTÉeÓT—c—c’cÑTÉeÓT×TÒTØ"ˆ�ÑØÒØ$ˆ�	ÑØ$2ˆÐ Ñ!Ø€Nr;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   r‡   rˆ   Úcustom_contextr5   r}   r7   )r8   s   "r9   r:   r:   Ý   s$   € ÷ 
&ñ 
&Øð
&Ø.<ð
&à	ñ
&r;   c                ó’   € V'       g   R # V P                  R/ 4      pVP                  4        F  w  r4VP                  W44       K  	  R # )Nr±   )Ú
setdefaultrª   )r‡   rÁ   r±   ÚkeyÚvalues   &&   r9   Ú_merge_custom_contextrÆ   Ý   s?   € ÷ ÙØ× Ñ  ¨2Ó.€FØ$×*Ñ*Ö,‰
ˆØ×Ñ˜#Ö%ó -r;   c                  óø   a € ] tR t^êt$ RtR]R&   R]R&   R]R&   R]R	&   R
]R&   R]R&   R]R&   R%R V 3R lllt]R R l4       tR R lt	R R lt
R R ltR R ltR R ltR R ltR  R! ltR&R" R# lltR$tV ;t# )'ÚMatchao  
Represents a successfully matched pattern.

The `Match` object is returned to represent a successfully matched
pattern. Included in the Match are the pattern that was matched, the graph
nodes matched, and any args that were used during the matching.

The args and kwargs are specific to the type of pattern that was matched and
provide hints about what was matched.
ÚPatternExprÚpatternú	list[Any]rY   rˆ   rZ   úlist[torch.fx.Node]r®   z'dict[_TargetExpr, torch.fx.node.Target]ÚtargetsÚMatchContextÚctxztorch.fx.GraphModule | NoneÚreplacement_graphc          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r2   rÏ   rÎ   rÊ   rÉ   rY   zSequence[Any] | NonerZ   údict[str, Any] | Noner5   r}   r7   )r8   s   "r9   r:   ÚMatch.__annotate__þ   s<   € ÷ &ñ &àð&ð ð&ð #ð	&ð
 &ð&ð 
ñ&r;   c                	ó¼   <€ \         SV `  4        W n        \        T;'       g    . 4      V n        T;'       g    / V n        . V n        / V n        Wn        R V n	        R # r^   )
Úsuperr„   rÊ   ÚlistrY   rZ   r®   rÍ   rÏ   rÐ   )r`   rÏ   rÊ   rY   rZ   Ú	__class__s   &&&&&€r9   r„   ÚMatch.__init__þ   sO   ø€ ô 	‰ÑÔØŒä˜Ÿ˜ Ó$ˆŒ	Ø—l�l ˆŒàˆŒ
àˆŒØŒØ!%ˆÖr;   c               ó   € V ^8„  d   QhRR/# )r2   r5   útorch.fx.Graphr7   )r8   s   "r9   r:   rÓ     s   € ÷ ñ �~ñ r;   c                	ó.   € V P                   P                  # r^   )rÏ   Úgraphrƒ   s   &r9   rÜ   ÚMatch.graph  s   € à�x‰x�~‰~Ðr;   c               ó    € V ^8„  d   QhRRRR/# )r2   ÚotherrÈ   r5   r}   r7   )r8   s   "r9   r:   rÓ     s   € ÷ +ñ +˜Eð + dñ +r;   c                	ó`  € V P                   '       dˆ   \        V P                   P                  4       4      \        VP                   P                  4       4      ,           F8  pV P                   V,          VP                   V,          8w  g   K.  \        R V4      h	  V P                  P                  VP                  4       V P                  P                  VP                  4       V P                   P                  VP                   4       V P                  P                  VP                  4       R# )zkwarg mismatch: {}N)	rZ   r!   ÚkeysÚFailedMatchrY   Úextendr®   r¨   rÍ   )r`   rß   rÄ   s   && r9   rã   ÚMatch.extend  sÄ   € Ø�;�;ˆ;Ü! $§+¡+×"2Ñ"2Ó"4Ó5¼
À5Ç<Á<×CTÑCTÓCVÓ8W×WÐW�Ø—;‘;˜sÕ# u§|¡|°CÕ'8Ö8Ü%Ð&:¸CÓ@Ð@ñ Xð 	�	‰	×Ñ˜Ÿ™Ô$Ø�
‰
×Ñ˜%Ÿ+™+Ô&Ø�‰×Ñ˜5Ÿ<™<Ô(Ø�‰×Ñ˜EŸM™MÖ*r;   c               ó   € V ^8„  d   QhRR/# )r2   r5   rÈ   r7   )r8   s   "r9   r:   rÓ     s   € ÷ ñ ˜ñ r;   c                	ór   € V P                   '       d   \        V P                   4      .V n         V # . V n         V # r^   )rY   Útuplerƒ   s   &r9   ÚbundleÚMatch.bundle  s0   € à*.¯)¯)¨)”U˜4Ÿ9™9Ó%Ð&ˆŒ	Øˆð :<ˆŒ	Øˆr;   c               ó   € V ^8„  d   QhRR/# ©r2   r5   r4   r7   )r8   s   "r9   r:   rÓ   $  s   € ÷ 9ñ 9˜#ñ 9r;   c                	ó<   € R V P                    RV P                   R2# )zMatch(..., ú, Ú)©rY   rZ   rƒ   s   &r9   Ú__repr__ÚMatch.__repr__$  s   € Ø˜TŸY™Y˜K r¨$¯+©+¨°aÐ8Ð8r;   c               ó   € V ^8„  d   QhRR/# r|   r7   )r8   s   "r9   r:   rÓ   '  s   € ÷ $ñ $˜Tñ $r;   c                	óÈ   € V P                   p\        V P                  4       F<  pVP                  '       d   K  VP                  '       d   K+  VP                  V4       K>  	  R # r^   )rÜ   Úreversedr®   Ú_erasedÚusersÚ
erase_node)r`   rÜ   Úns   &  r9   Úerase_nodesÚMatch.erase_nodes'  s=   € Ø—
‘
ˆÜ˜$Ÿ*™*Ö%ˆAØ—9—9’9 Q§W§W¢WØ× Ñ  Ö#ó &r;   c               ó   € V ^8„  d   QhRR/# )r2   r5   zlist[torch.fx.Node | None]r7   )r8   s   "r9   r:   rÓ   -  s   € ÷ 
ñ 
Ð8ñ 
r;   c                	óš   € V P                   P                   Uu. uF&  pVe   V P                   P                  V,          MR NK(  	  up# u upi r^   )rÏ   ÚoutputsÚpattern_to_node)r`   Úps   & r9   Úoutput_nodesÚMatch.output_nodes-  sK   € ð —X‘X×%Ò%ó
á%�ð -.ªMˆT�X‰X×%Ñ% aÖ(¸tÒCÙ%ñ
ð 	
ùò 
s   ™,Ac               ó   € V ^8„  d   QhRR/# )r2   r5   rŠ   r7   )r8   s   "r9   r:   rÓ   3  s   € ÷ 9ñ 9˜]ñ 9r;   c                	óB   € \        R  V P                  4        4       4      # )c              3  ó8   "  € T F  q'       g   K  Vx € K  	  R # 5ir^   r7   )r˜   rÿ   s   & r9   r›   Ú$Match.output_node.<locals>.<genexpr>4  s   é € Ð8Ñ2˜!³a—A’AÓ2ùs   ‚	�
)Únextr   rƒ   s   &r9   Úoutput_nodeÚMatch.output_node3  s   € ÜÑ8˜t×0Ñ0Ô2Ó8Ó8Ð8r;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   rÐ   rÚ   rY   úSequence[Any]r5   rÌ   r7   )r8   s   "r9   r:   rÓ   6  s$   € ÷ 
ñ 
Ø!/ð
Ø7Dð
à	ñ
r;   c                	óV   € \         P                  W P                  P                  W4      # r^   )ÚReplacementPatternEntryÚreplace_with_graphrÏ   rÜ   )r`   rÐ   rY   s   &&&r9   r  ÚMatch.replace_with_graph6  s%   € ô '×9Ñ9Ø—(‘(—.‘.Ð"3ó
ð 	
r;   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r2   Úreplacement_fnrj   rY   r
  Útrace_fnzTraceFn | NoneÚrun_functional_passesr6   r5   rÌ   r7   )r8   s   "r9   r:   rÓ   =  sC   € ÷ |ñ |à!ð|ð ð|ð !ð	|ð
  $ð|ð 
ñ|r;   c           	     óÊ  aa€ ^ RI HpHp \        VP                  V4      '       d   VP                  f   VP                  M\
        P                  ! 4       pR R lpT;_uu_ 4        Vf   \        P                  ! \        VR7      pV! V P                  4      '       Ed–   / oV P                  ^ ,          P                  R,          w  rš/ V
Cp
\        V P                  4      V P                  rËR V3R llp\        P                   P"                  P%                  WÛV3Wš34       \        P&                  P)                  VV3R	 l4      pV! W4      p\        P&                  P)                  VR
 4      pV! Wþ4      p\+        VP,                  P                  4      \+        VP,                  P                  4      8w  d   \/        R4      h\1        VP,                  P                  VP,                  P                  4       F9  w  ppRVP                  9   g   K  VP                  R,          VP                  R&   K;  	  M†\        P&                  P)                  VR 4      p\        P2                  P                   P5                  V4      oSe1   V3R lp\        P&                  P6                  P9                  VV4      pV! W4      p\+        V P                  4      ^8X  dG   VP,                  P                   F,  p\;        VP                  V P                  ^ ,          RR7       K.  	  \<        P?                  V V P@                  P,                  VV4      uuRRR4       #   + '       g   i     R# ; i)záReplace with a graph generated by tracing the replacement_fn.

Args:
    run_functional_passes (bool). If we should run passes that
        assume functional IR (like DCE, remove_noop_ops), on the
        replacement graph.

)ÚNullHandlerÚVNc               ó    € V ^8„  d   QhRRRR/# )r2   r®   rÌ   r5   r6   r7   )r8   s   "r9   r:   Ú.Match.replace_by_example.<locals>.__annotate__T  s   € ÷ 	ñ 	Ð5Hð 	ÈTñ 	r;   c                ó  € \        V 4      ^8w  d   R# V ^ ,          pRVP                  9  d   R# VP                  \        \        P
                  P                  P                  \        P
                  P                  P                  .4      9   # )r»   FÚeager_input_vals)	Úlenr©   Útargetr!   r“   ÚopsÚhigher_orderÚauto_functionalizedÚauto_functionalized_v2)r®   r¸   s   & r9   Ú!should_propagate_eager_input_valsÚCMatch.replace_by_example.<locals>.should_propagate_eager_input_valsT  sk   € Ü�5‹z˜QŒÙØ˜•8ˆDØ!¨¯©Ô2ÙØ—;‘;¤*ä—I‘I×*Ñ*×>Ñ>Ü—I‘I×*Ñ*×AÑAðó#ñ ð r;   )r  r  c               ó$   € V ^8„  d   QhRRRRRR/# )r2   r¸   rŠ   r¡   r   r5   r}   r7   )r8   s   "r9   r:   r  v  s!   € ÷ 0ñ 0 ð 0°Sð 0¸Tñ 0r;   c                ój   <€ \        V \        P                  P                  4      '       d   VSV &   R # R # r^   )rQ   r“   r”   ÚNode)r¸   r¡   Únode_to_vals   &&€r9   ÚrecordÚ(Match.replace_by_example.<locals>.recordv  s'   ø€ Ü! $¬¯©¯©×6Ò6Ø,/˜ DÓ)ñ 7r;   c                ó   <€ SV ,          # r^   r7   )Úargr%  s   &€r9   Ú<lambda>Ú*Match.replace_by_example.<locals>.<lambda>~  s
   ø€ À+ÈcÖBRr;   c                ó(   € V P                   R ,          # )r¡   ©r©   ©r)  s   &r9   r*  r+  „  s   € À#Ç(Á(È5Æ/r;   z7graph node count mismatch between eager and replacementc                óp   € R V P                   9   d   V P                   R ,          # V P                   R,          # ©r¡   Úexample_valuer-  r.  s   &r9   r*  r+  œ  s1   € Ø §¡Ô(ð !$§¡¨¥ð !3àŸ™ /Õ2ð!3r;   c                óT   <€ \        V 4      '       d   Se   SP                  V 4      # V # r^   )r   Úfrom_tensor)ÚitÚ	fake_modes   &€r9   Ú_convert_to_fake_modeÚ7Match.replace_by_example.<locals>._convert_to_fake_mode£  s)   ø€ Ü)¨"×-Ò-°)Ò2GØ#,×#8Ñ#8¸Ó#<Ð<Ø!˜	r;   Úreplace_by_example©r‡   r‰   r‹   )!Útorch._inductor.virtualizedr  r  rQ   r5  Ú
contextlibÚnullcontextÚ	functoolsÚpartialÚfwd_onlyr®   r©   rç   rY   rZ   r“   ÚutilsÚ_pytreeÚtree_mapr”   Úmap_argr  rÜ   r‚   ÚzipÚ_dynamoÚdetect_fake_moder¸   Úmap_aggregater¬   r  r  rÏ   )r`   r  rY   r  r  r  r  r¾   r   Ú	fake_argsÚfake_kwargsÚ
match_argsÚmatch_kwargsr&  Úexample_valsÚgraph_with_eager_valsÚreplacementr‰   Únew_noder6  rø   r5  r%  s   &&&&&                @@r9   r8  ÚMatch.replace_by_example=  s·  ù€ ÷ 	?ô ˜qŸ{™{¨K×8Ò8¸Q¿[¹[Ò=Pð �KŠKä×'Ò'Ó)ð 	õ	÷ ŠWØÒÜ$×,Ò,ÜÐ4Iô�ñ 1°·±×<Ó<ð !�à)-¯©°A­×);Ñ);Ð<NÕ)OÑ&�	Ø- ˜o�Ü+0°·±Ó+;¸T¿[¹[˜L÷0ð 0ô —‘×#Ñ#×,Ñ,Ø¨Ð6¸Ð8Pôô  %Ÿx™x×/Ñ/°Ô6RÓS�ñ )1°Ó(NÐ%ô  %Ÿx™x×/Ñ/°Ñ6QÓR�á&Ð'<ÓK�ô
 Ð,×2Ñ2×8Ñ8Ó9¼SØ×%Ñ%×+Ñ+ó>ô ô )ØQóð ô +.Ø)×/Ñ/×5Ñ5°{×7HÑ7H×7NÑ7Nö+Ñ&�H˜hð *¨X¯]©]Ö:Ø<D¿M¹MØ.õ=˜Ÿ™Ð&8Ó9ò	+ô  %Ÿx™x×/Ñ/Øñ3ó �ô "ŸM™M×/Ñ/×@Ñ@ÀÓN�	ØÒ(õ"ô
 $)§8¡8§=¡=×#>Ñ#>Ø$Ð&;ó$�Lñ ' ~ÓD�Ü�4—:‘:‹ !Ô#Ø$×*Ñ*×0Ô0�AÜ"Ø!"§¡Ø!%§¡¨A¥Ø"6÷ñ 1ô +×=Ñ=ØØ—‘—‘ØØó	÷e �W�W‹Wús   Á&9MÂ E+MÈD6MÍM"	)rY   rÏ   rZ   r®   rÊ   rÐ   rÍ   ©NN)NT)rV   rd   re   rf   Ú__doc__rg   r„   ÚpropertyrÜ   rã   rè   rð   rù   r   r  r  r8  rh   Ú__classcell__©r×   s   @r9   rÈ   rÈ   ê   s€   ø‡ ñ	ð ÓØ
ƒOØÓØÓØ4Ó4Ø	ÓØ2Ó2÷&ò &ð& ôó ðõ+õõ
9õ$õ
õ9õ
÷|õ |r;   rÈ   c                  óJ   € ] tR tRt$ RtR]R&   R R ltR R ltR	 R
 ltRt	R# )râ   i¼  zs
Represents a unsuccessful match.

The `FailedMatch` object is returned to represent a failure to match a
pattern.
r4   Úformat_stringc               ó(   € V ^8„  d   QhRRRRRRRR/# )r2   rW  r4   rY   r   rZ   r5   r}   r7   )r8   s   "r9   r:   ÚFailedMatch.__annotate__Æ  s(   € ÷ 	ñ 	 cð 	°#ð 	Àð 	Èñ 	r;   c                	óf   € Wn         \        V4      ^È8”  d   \        RV 24      hW n        W0n        R# )éÈ   zUFormat string too long - use lazy construction of strings instead. Format string is
 N)rW  r  ÚRuntimeErrorrY   rZ   )r`   rW  rY   rZ   s   &&*,r9   r„   ÚFailedMatch.__init__Æ  s<   € Ø*Ôô ˆ}Ó Ô#ÜØhÐivÐhwÐxóð ð Œ	ØŽr;   c               ó   € V ^8„  d   QhRR/# rë   r7   )r8   s   "r9   r:   rY  Ñ  s   € ÷ Dñ D˜ñ Dr;   c                	ób   € V P                   P                  ! V P                  / V P                  B # r^   )rW  r8   rY   rZ   rƒ   s   &r9   Ú__str__ÚFailedMatch.__str__Ñ  s&   € Ø×!Ñ!×(Ò(¨$¯)©)ÐC°t·{±{ÑCÐCr;   c               ó   € V ^8„  d   QhRR/# ©r2   r5   r6   r7   )r8   s   "r9   r:   rY  Ô  s   € ÷ ñ ˜$ñ r;   c                	ó   € R # ©Fr7   rƒ   s   &r9   Ú__bool__ÚFailedMatch.__bool__Ô  ó   € Ùr;   )rY   rW  rZ   N)
rV   rd   re   rf   rR  rg   r„   r`  rf  rh   r7   r;   r9   râ   râ   ¼  s$   ‡ ñð Óõ	õD÷ñ r;   râ   c               ó    € V ^8„  d   QhRRRR/# )r2   ÚmÚMatchResultr5   zTypeIs[Match]r7   )r8   s   "r9   r:   r:   Û  s   € ÷ ñ �ð  ñ r;   c                ó   € \        V 4      # )zp
TypeIs cannot act on `self`. Thus this function exists to let mypy
recognize FailedMatch.__bool__ as a TypeIs.
)r6   )rj  s   &r9   Úis_matchrm  Û  s   € ô
 �‹7€Nr;   c                  ól   € ] tR tRt$ RtR]R&   R]R&   R]R&   R	]R
&   RR R lltR R ltR R ltRt	R# )rÎ   iã  z;
Internal state needed while running PatternExpr._match().
úlist[PatternExpr | None]rý   z'dict[PatternExpr, torch.fx.Node | None]rþ   rÚ   rÜ   zlist[NodeOrConstant]Úexclusive_node_setNc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r2   rý   ro  rþ   z'dict[PatternExpr, torch.fx.Node] | NonerÜ   rÚ   r5   r}   r7   )r8   s   "r9   r:   ÚMatchContext.__annotate__í  s3   € ÷ 
%ñ 
%à)ð
%ð Að
%ð
 ð
%ð 
ñ
%r;   c               	óX   € Wn         Vf   / M
\        V4      V n        W0n        . V n        R # r^   )rý   Údictrþ   rÜ   rp  )r`   rý   rþ   rÜ   s   &&&$r9   r„   ÚMatchContext.__init__í  s*   € ð ŒØ%4Ò%<™rÄ$ÀÓBWˆÔØŒ
Ø"$ˆÖr;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   rÊ   rÉ   r¸   ÚNodeOrConstantr5   rk  r7   )r8   s   "r9   r:   rr  ù  s!   € ÷ ñ ˜[ð °ð À;ñ r;   c                ó  € WP                   9   d/   V P                   V,          V8X  d   \        W4      # \        R4      # VP                  W 4      pWP                   9   d   \	        R4      hV'       d   TMRV P                   V&   V# )z)wrapper to check reused nodes in patternszrepeated pattern differsz*pattern already present in pattern_to_nodeN)rþ   rÈ   râ   Ú_matchr‚   )r`   rÊ   r¸   rj  s   &&& r9   ÚmatchÚMatchContext.matchù  sw   € à×*Ñ*Ô*Ø×#Ñ# GÕ,°Ô4Ü˜TÓ+Ð+ä"Ð#=Ó>Ð>Ø�N‰N˜4Ó&ˆØ×*Ñ*Ô*Ü Ð!MÓNÐNß01©°tˆ×Ñ˜WÑ%Øˆr;   c               ó   € V ^8„  d   QhRR/# )r2   r5   z dict[PatternExpr, torch.fx.Node]r7   )r8   s   "r9   r:   rr    s   € ÷ 
ñ 
Ð,Lñ 
r;   c                	ó¦   € V P                   P                  4        UUu/ uF%  w  rVP                  4       '       g   K  Vf   K#  WbK'  	  upp# u uppi r^   )rþ   rª   Úhas_multiple_users)r`   rÊ   r¸   s   &  r9   Úfilter_multi_user_patternsÚ'MatchContext.filter_multi_user_patterns  sR   € ð "&×!5Ñ!5×!;Ñ!;Ô!=ô
á!=‘�Ø×)Ñ)×+ô à04ô ˆGŠMÙ!=ò
ð 	
ùó 
s   žA½AÁA)rp  rÜ   rý   rþ   r^   )
rV   rd   re   rf   rR  rg   r„   rz  r  rh   r7   r;   r9   rÎ   rÎ   ã  s5   ‡ ñð &Ó%Ø<Ó<ØÓØ,Ó,÷
%õ÷
ñ 
r;   rÎ   c                  ól   € ] tR tRtRt]R R l4       tR R ltR R ltR	 R
 lt	R R lt
R R ltRtR# )rÉ   i  z#
Base class for types of patterns.
c               ó$   € V ^8„  d   QhRRRRRR/# ©r2   r¸   rŠ   rÏ   rÎ   r5   rk  r7   )r8   s   "r9   r:   ÚPatternExpr.__annotate__  s   € ×PÑP˜=ÐP¨|ÐPÀÑPr;   c                	ó   € R # r^   r7   ©r`   r¸   rÏ   s   &&&r9   ry  ÚPatternExpr._match  s   € ÙMPr;   c               ó    € V ^8„  d   QhRRRR/# ©r2   r¸   rŠ   r5   rk  r7   )r8   s   "r9   r:   r„    ó   € ÷ ñ ˜-ð ¨Kñ r;   c                	ó†   €  \        V .VP                  R 7      P                  W4      #   \         d   pTu Rp?# Rp?ii ; i©©rÜ   N)rÎ   rÜ   rz  râ   ©r`   r¸   Úes   && r9   rz  ÚPatternExpr.match  s:   € ð	Ü  ¨d¯j©jÔ9×?Ñ?ÀÓKÐKøÜô 	Ø�Hûð	ús   ‚&) ©A ´;µA »A c               ó   € V ^8„  d   QhRR/# rc  r7   )r8   s   "r9   r:   r„    s   € ÷ ñ  Dñ r;   c                	ó   € R # re  r7   rƒ   s   &r9   r~  ÚPatternExpr.has_multiple_users  rh  r;   c               ó   € V ^8„  d   QhRR/# rë   r7   )r8   s   "r9   r:   r„    s   € ÷ .ñ .˜#ñ .r;   c                	ó<   € V P                   P                  R ,           # )z())r×   rV   rƒ   s   &r9   rð   ÚPatternExpr.__repr__  s   € Ø�~‰~×&Ñ&¨Õ-Ð-r;   c               ó$   € V ^8„  d   QhRRRRRR/# ©r2   rÏ   rÎ   ÚsearchedúOrderedSet[torch.fx.Node]r5   z+Generator[torch.fx.Node | None, None, None]r7   )r8   s   "r9   r:   r„  "  s$   € ÷ ,ñ ,Øð,Ø+Dð,à	4ñ,r;   c              #  	ó\   "  € WP                   9   d   VP                   V ,          x € R # R # 5ir^   )rþ   ©r`   rÏ   r™  s   &&&r9   Úfind_anchor_nodesÚPatternExpr.find_anchor_nodes"  s)   é € ð ×&Ñ&Ô&Ø×%Ñ% dÕ+Ô+ñ 'ùs   ‚*,c               ó    € V ^8„  d   QhRRRR/# ©r2   rß   r   r5   r6   r7   )r8   s   "r9   r:   r„  (  s   € ÷ 1ñ 1 ð 1¨ñ 1r;   c                ó,   € \        WP                  4      # )z 
Compare two `PatternExpr`s and return true if they are the
same. Note this is NOT matching a pattern - it is comparing the pattern
structures (for debugging).
)rQ   r×   )r`   rß   s   &&r9   Ú
pattern_eqÚPatternExpr.pattern_eq(  s   € ô ˜%§¡Ó0Ð0r;   r7   N)rV   rd   re   rf   rR  r   ry  rz  r~  rð   r�  r¢  rh   r7   r;   r9   rÉ   rÉ     s5   † ñð ÜPó ØPõõõ.õ,÷1ñ 1r;   rÉ   c                  ó&   € ] tR tRtRtR R ltRtR# )ÚArgi1  zb
Capture an arg which will become an input to the handler.  Args are
passed in depth first order.
c               ó$   € V ^8„  d   QhRRRRRR/# ©r2   r¸   rw  rÏ   rÎ   r5   rk  r7   )r8   s   "r9   r:   ÚArg.__annotate__7  s!   € ÷ -ñ -˜>ð -°ð -Àñ -r;   c                	ó   € \        W V.R 7      # ))rY   ©rÈ   r†  s   &&&r9   ry  Ú
Arg._match7  s   € Ü�S d VÔ,Ð,r;   r7   N©rV   rd   re   rf   rR  ry  rh   r7   r;   r9   r¥  r¥  1  s   † ñ÷
-ñ -r;   r¥  c                  ó>   € ] tR tRtRtR R ltR R ltR R ltR	tR
# )ÚIgnoredi;  z,
Match an arg, but don't pass it to handler
c               ó$   € V ^8„  d   QhRRRRRR/# r§  r7   )r8   s   "r9   r:   ÚIgnored.__annotate__@  s!   € ÷  ñ  ˜>ð  °ð  Àñ  r;   c                	ó   € \        W 4      # r^   rª  r†  s   &&&r9   ry  ÚIgnored._match@  s   € Ü�SÓÐr;   c               ó   € V ^8„  d   QhRR/# rë   r7   )r8   s   "r9   r:   r°  C  s   € ÷ ñ ˜#ñ r;   c                	ó   € R # )Ú*r7   rƒ   s   &r9   rð   ÚIgnored.__repr__C  s   € Ùr;   c               ó    € V ^8„  d   QhRRRR/# ©r2   ÚppÚPatternPrettyPrinterr5   r4   r7   )r8   s   "r9   r:   r°  F  s   € ÷ ñ Ð3ð ¸ñ r;   c                	ó   € R # )z	Ignored()r7   )r`   r¹  s   &&r9   Úpretty_printÚIgnored.pretty_printF  s   € Ùr;   r7   N)	rV   rd   re   rf   rR  ry  rð   r¼  rh   r7   r;   r9   r®  r®  ;  s   † ñõ õ÷ñ r;   r®  c               ó    € V ^8„  d   QhRRRR/# )r2   rÅ   útorch.Tensorr5   ztorch.Tensor | Noner7   )r8   s   "r9   r:   r:   J  s   € ÷ ñ  \ð Ð6Iñ r;   c                ó>   € \        V 4      '       d   \        V 4      # V # r^   )r   r   )rÅ   s   &r9   Ú_get_fake_tensor_constantrÁ  J  s   € Ü�e×ÒÜ& uÓ-Ð-Ø€Lr;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   Úar¿  Úbr5   r6   r7   )r8   s   "r9   r:   r:   P  s!   € ÷ 	ñ 	˜Lð 	¨\ð 	¸dñ 	r;   c                ó   € \         P                  ! W4      '       d   R # V P                  P                  '       dI   \	        V P
                  VP
                  4      ;'       d!    \	        V P                  VP                  4      # V P                  P                  '       d`   \        W8H  \         P                  ! V 4      \         P                  ! V4      ,          ,          P                  4       P                  4       4      # R# )TF)r“   ÚequalÚdtypeÚ
is_complexÚ_tensor_values_equalÚrealÚimagÚis_floating_pointr6   ÚisnanrE   Úitem©rÃ  rÄ  s   &&r9   rÉ  rÉ  P  s¨   € Ü‡{‚{�1×ÒÙØ‡w�w××ÐÜ# A§F¡F¨A¯F©FÓ3÷ 
ð 
Ô8LØ�F‰F�A—F‘Fó9
ð 	
ð 	‡w�w× × Ð Ü�a‘f¤§¢¨Q£´%·+²+¸a³.Õ!@ÕA×FÑFÓH×MÑMÓOÓPÐPÙr;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   rÃ  r   rÄ  r5   r6   r7   )r8   s   "r9   r:   r:   \  s!   € ÷ 9ñ 9˜cð 9 cð 9¨dñ 9r;   c                óR  € \        V \        P                  4      '       g"   \        V\        P                  4      '       Ed|   \        V \        P                  4      '       d!   \        V\        P                  4      '       g   R # V P                  VP                  8w  gm   V P                  VP                  8w  gR   V P
                  VP
                  8w  g7   V P                  VP                  8w  g   V P                  VP                  8w  d   R # V P                  \        P                  8X  dI   V P                  4       VP                  4       8w  g$   V P                  4       VP                  4       8w  d   R # \        V 4      p\        V4      pVe   Vf   R #  \        4       ;_uu_ 4        \        W#4      uuRRR4       #  W8H  p\        T\"        4      '       d   T# R #   + '       g   i     L/; i  \        \        \         3 d     R # i ; i  \        \        \         3 d     R # i ; i)FN)rQ   r“   ÚTensorrÇ  ÚshapeÚdeviceÚlayoutÚrequires_gradÚstridedÚstrideÚstorage_offsetrÁ  r   rÉ  r\  Ú	TypeErrorÚ
ValueErrorr6   )rÃ  rÄ  Ú
a_constantÚ
b_constantÚresults   &&   r9   Ú_constant_values_equalrß  \  sz  € Ü�!”U—\‘\×"Ò"¤j°´E·L±L×&AÓ&AÜ˜!œUŸ\™\×*Ò*´*¸QÄÇÁ×2MÒ2MÙà�G‰G�q—w‘wÔØ�w‰w˜!Ÿ'™'Ô!Ø�x‰x˜1Ÿ8™8Ô#Ø�x‰x˜1Ÿ8™8Ô#Ø�‰ !§/¡/Ô1áØ�8‰8”u—}‘}Ô$Ø�H‰H‹J˜!Ÿ(™(›*Ô$¨×(8Ñ(8Ó(:¸a×>NÑ>NÓ>PÔ(PáÜ.¨qÓ1ˆ
Ü.¨qÓ1ˆ
ØÒ Ò!3Ùð	Ü'×)Õ)Ü+¨JÓC÷ *Ò)ð
Ø‘ˆô   ¬×-Ò-ˆ6Ð8°5Ð8÷ *×)ûäœi¬Ð4ô 	Úð	ûô
 œ)¤ZÐ0ô ÚðúsB   ÆG/ Æ'GÆ2
G/ Æ>H ÇG,	Ç'G/ Ç,G/ Ç/H	ÈH	ÈH&È%H&c               ó    € V ^8„  d   QhRRRR/# )r2   rÅ   r   r5   r4   r7   )r8   s   "r9   r:   r:   }  s   € ÷ ñ  ð ¨ñ r;   c                óh  € \        V \        4      '       dF   \        P                  ! V 4      '       d   R # \        P                  ! V 4      '       d   V ^ 8”  d   R# R# \        V \
        4      '       d0   R\        V P                  4       R\        V P                  4       R2# \        V \        4      '       d$   RRP                  \        \        V 4      4       R2# \        V \        4      '       d:   \        V 4      ^8X  d   RMR	pR
RP                  \        \        V 4      4       V R2# \        V 4      # )zfloat('nan')zfloat('inf')z-float('inf')zcomplex(rí   rî   Ú[Ú]rF   Ú Ú()rQ   ÚfloatÚmathrÍ  ÚisinfÚcomplexÚ_python_constant_reprrÊ  rË  rÖ   ÚjoinÚmaprç   r  Úrepr)rÅ   Útrailing_commas   & r9   rê  rê  }  sú   € Ü�%œ×ÒÜ�:Š:�e×ÒÙ!Ü�:Š:�e×ÒØ%*¨Q¤Y�>ÐC°OÐCÜ�%œ×!Ò!ØÔ/°·
±
Ó;Ð<¸BÔ?TÐUZ×U_ÑU_Ó?`Ð>aÐabÐcÐcÜ�%œ×ÒØ�4—9‘9œSÔ!6¸Ó>Ó?Ð@ÀÐBÐBÜ�%œ×ÒÜ # E£
¨a¤™°RˆØ�4—9‘9œSÔ!6¸Ó>Ó?Ð@ÀÐ@PÐPQÐRÐRÜ�‹;Ðr;   c               ó    € V ^8„  d   QhRRRR/# )r2   rÅ   r¿  r5   r4   r7   )r8   s   "r9   r:   r:   �  s   € ÷ .ñ . ð .°#ñ .r;   c                ó~  € V P                   \        P                  8w  d   \        R V P                    24      hV P                  pV P
                  p\        V 4      '       d   \        V 4      pVf   \        R4      hTpMT pV P                  '       d   \        R4      hV P                  4       '       d   V P                  4       ^ 8w  d   \        R4      h\        4       ;_uu_ 4        VP
                  P                  R8w  d    VP                  4       P                  4       pMVP                  4       pVP                  4       pRRR4       \!        X4      .pVP#                  RV 24       VP                  R8w  d   VP#                  R\%        V4      : 24       RR	P'                  V4       R
2#   + '       g   i     Lt; i)z-NYI: serializing get_attr tensor with layout Nz%NYI: serializing fake get_attr tensorz*NYI: serializing tensor that requires gradz/NYI: serializing non-contiguous get_attr tensorÚcpuzdtype=zdevice=ztorch.tensor(rí   rî   )rÕ  r“   r×  ÚNotImplementedErrorrÇ  rÔ  r   r   rÖ  Úis_contiguousrÙ  r   ÚtypeÚdetachrñ  Útolistrê  r¦   r4   rë  )rÅ   rÇ  rÔ  ÚconstantÚ
data_valueÚ	cpu_valueÚ
value_listrY   s   &       r9   Ú_tensor_constant_reprrû  �  sp  € Ø‡|�|”u—}‘}Ô$Ü!Ø;¸E¿L¹L¸>ÐJó
ð 	
ð �K‰K€EØ�\‰\€FÜ�e×ÒÜ*¨5Ó1ˆØÒÜ%Ð&MÓNÐNØ‰
àˆ
Ø××ÐÜ!Ð"NÓOÐOØ×Ñ× Ò  E×$8Ñ$8Ó$:¸aÔ$?Ü!Ð"SÓTÐTÜ	×	!Õ	!Ø×Ñ×!Ñ! UÔ*Ø"×)Ñ)Ó+×/Ñ/Ó1‰Ià"×)Ñ)Ó+ˆIØ×%Ñ%Ó'ˆ
÷ 
"ô " *Ó-Ð.€DØ‡K�K�&˜˜Ð Ô!Ø‡{�{�eÔØ�‰�gœc &›k™_Ð-Ô.Ø˜4Ÿ9™9 T›?Ð+¨1Ð-Ð-÷ 
"×	!ús   Ã%AF,Æ,F<	c                  óx   a € ] tR tRtRtRR V 3R llltR R ltR R ltR	 R
 ltR R lt	R V 3R llt
RtV ;t# )ÚGetAttri­  z~
Match a get_attr node by comparing the attribute value instead of the target
name, which is local to the traced GraphModule.
c               ó$   € V ^8„  d   QhRRRRRR/# )r2   rÅ   r   rö   úMultiple | intr5   r}   r7   )r8   s   "r9   r:   ÚGetAttr.__annotate__³  s!   € ÷ ñ ˜cð ¨.ð Àñ r;   c                	ó<   <€ \         SV `  4        Wn        W n        R # r^   )rÕ   r„   rÅ   rö   )r`   rÅ   rö   r×   s   &&&€r9   r„   ÚGetAttr.__init__³  s   ø€ Ü‰ÑÔØŒ
ØŽ
r;   c               ó   € V ^8„  d   QhRR/# rë   r7   )r8   s   "r9   r:   r   ¸  s   € ÷ Iñ I˜#ñ Ir;   c                	óÈ   € V P                   \        J d   R pM#V P                   ^8w  d   RV P                    2pMRpV P                  P                   RV P                  : V R2# )ú
, MULTIPLErí   rä  rå  rî   )rö   r€   r×   rV   rÅ   ©r`   Úcomma_userss   & r9   rð   ÚGetAttr.__repr__¸  sY   € Ø�:‰:œÓ!Ø&‰KØ�Z‰Z˜1Œ_Ø˜tŸz™z˜lÐ+‰KàˆKØ—.‘.×)Ñ)Ð*¨!¨D¯J©J©>¸+¸ÀaÐHÐHr;   c               ó   € V ^8„  d   QhRR/# rc  r7   )r8   s   "r9   r:   r   Á  ó   € ÷ Bñ B Dñ Br;   c                	ód   € \        V P                  \        4      ;'       g    V P                  ^8„  # ©r»   ©rQ   rö   rz   rƒ   s   &r9   r~  ÚGetAttr.has_multiple_usersÁ  ó#   € Ü˜$Ÿ*™*¤hÓ/×AÐA°4·:±:À±>ÐAr;   c               ó$   € V ^8„  d   QhRRRRRR/# r§  r7   )r8   s   "r9   r:   r   Ä  s!   € ÷ ñ ˜>ð °ð Àñ r;   c                	óô  € \        V\        P                  P                  4      '       d   VP                  R 8w  d   \        RW4      # WP                  9  dE   V P                  \        Jd1   \        VP                  4      V P                  8w  d   \        RV 4      # VP                  P                  f   \        RV4      # \        VP                  \        4      '       g   \        RVP                  4      # \        VP                  P                  VP                  4      p\        V P                   V4      '       g   \        RW0P                   4      # \#        W 4      pVP$                  P'                  V4       V# )Úget_attrz&get_attr_mismatch: node={}, pattern={}úmultiple_users {}z"get_attr without owning module: {}zget_attr target is not str: {}zget_attr_value: {} != {})rQ   r“   r”   r$  Úoprâ   rý   rö   r€   r  rÜ   Úowning_moduler  r4   r   rß  rÅ   rÈ   r®   r¦   )r`   r¸   rÏ   rÅ   rj  s   &&&  r9   ry  ÚGetAttr._matchÄ  s  € Ü˜$¤§¡§¡×.Ò.°$·'±'¸ZÔ2GÜÐGÈÓTÐTàŸ™Ô#Ø—
‘
¤(Ó*Ü�D—J‘J“ 4§:¡:Ô-äÐ2°DÓ9Ð9Ø�:‰:×#Ñ#Ò+ÜÐCÀTÓJÐJÜ˜$Ÿ+™+¤s×+Ò+ÜÐ?ÀÇÁÓMÐMÜ˜$Ÿ*™*×2Ñ2°D·K±KÓ@ˆÜ% d§j¡j°%×8Ò8ÜÐ9¸5Ç*Á*ÓMÐMÜ�#ÓˆØ	�‰�‰�tÔØˆr;   c               ó    € V ^8„  d   QhRRRR/# r¸  r7   )r8   s   "r9   r:   r   Ø  s   € ÷ ?ñ ?Ð3ð ?¸ñ ?r;   c                	óF  € VP                  V P                  4      .pV P                  \        J d   VP	                  R 4       M5V P                  ^8w  d%   VP	                  \        V P                  4      4       V P                  P                   RRP                  V4       R2# )r€   rå  rí   rî   )	r¼  rÅ   rö   r€   r¦   r4   r×   rV   rë  )r`   r¹  rY   s   && r9   r¼  ÚGetAttr.pretty_printØ  su   € Ø—‘ §
¡
Ó+Ð,ˆØ�:‰:œÓ!Ø�K‰K˜
Õ#Ø�Z‰Z˜1Œ_Ø�K‰Kœ˜DŸJ™J›Ô(Ø—.‘.×)Ñ)Ð*¨!¨D¯I©I°d«OÐ+<¸AÐ>Ð>r;   c               ó    € V ^8„  d   QhRRRR/# r   r7   )r8   s   "r9   r:   r   à  ó   € ÷ 
ñ 
 ð 
¨ñ 
r;   c                	óê   <€ \         P                  ! \        V4      p\        SV `  V4      ;'       dB    \        V P                  VP                  4      ;'       d    V P                  VP                  8H  # r^   )ÚtypingÚcastr   rÕ   r¢  rß  rÅ   rö   ©r`   rß   r×   s   &&€r9   r¢  ÚGetAttr.pattern_eqà  s[   ø€ Ü—’œD %Ó(ˆä‰GÑ˜uÓ%÷ *ð *Ü& t§z¡z°5·;±;Ó?÷*ð *à—
‘
˜eŸk™kÑ)ð	
r;   )rö   rÅ   r  )rV   rd   re   rf   rR  r„   rð   r~  ry  r¼  r¢  rh   rT  rU  s   @r9   rý  rý  ­  s2   ø† ñ÷
ò õ
IõBõõ(?÷
ö 
r;   rý  c                  ó\   a € ] tR tRtRtR V 3R lltR R ltR R ltR	 V 3R
 lltRt	V ;t
# )Ú
KeywordArgié  ú<
Capture a kwarg which will become an input to the handler.
c               ó    € V ^8„  d   QhRRRR/# ©r2   Únamer4   r5   r}   r7   )r8   s   "r9   r:   ÚKeywordArg.__annotate__î  ó   € ÷ ñ ˜Sð  Tñ r;   c                	ó0   <€ \         SV `  4        Wn        R # r^   ©rÕ   r„   r&  ©r`   r&  r×   s   &&€r9   r„   ÚKeywordArg.__init__î  ó   ø€ Ü‰ÑÔØŽ	r;   c               ó   € V ^8„  d   QhRR/# rë   r7   )r8   s   "r9   r:   r'  ò  s   € ÷ ,ñ ,˜#ñ ,r;   c                	ó$   € R V P                   : R2# )zKeywordArg(rî   ©r&  rƒ   s   &r9   rð   ÚKeywordArg.__repr__ò  s   € Ø˜TŸY™Y™M¨Ð+Ð+r;   c               ó$   € V ^8„  d   QhRRRRRR/# r§  r7   )r8   s   "r9   r:   r'  õ  s!   € ÷ :ñ :˜>ð :°ð :Àñ :r;   c                	ó4   € \        W V P                  V/R 7      # )©rZ   )rÈ   r&  r†  s   &&&r9   ry  ÚKeywordArg._matchõ  s   € Ü�S¨¯	©	°4Ð'8Ô9Ð9r;   c               ó    € V ^8„  d   QhRRRR/# r   r7   )r8   s   "r9   r:   r'  ø  ó   € ÷ Eñ E ð E¨ñ Er;   c                	óš   <€ \         P                  ! \        V4      p\        SV `  V4      ;'       d    V P
                  VP
                  8H  # r^   ©r  r  r   rÕ   r¢  r&  r  s   &&€r9   r¢  ÚKeywordArg.pattern_eqø  ó8   ø€ Ü—’œD %Ó(ˆÜ‰wÑ! %Ó(×DÐD¨T¯Y©Y¸%¿*¹*Ñ-DÐDr;   r0  ©rV   rd   re   rf   rR  r„   rð   ry  r¢  rh   rT  rU  s   @r9   r"  r"  é  s(   ø† ñ÷ð õ,õ:÷Eö Er;   r"  c                  óh   a € ] tR tRt$ RtR]R&   R V 3R lltR R ltR	 R
 ltR V 3R llt	Rt
V ;t# )ÚExclusiveKeywordArgiý  r#  r4   r&  c               ó    € V ^8„  d   QhRRRR/# r%  r7   )r8   s   "r9   r:   Ú ExclusiveKeywordArg.__annotate__  r(  r;   c                	ó0   <€ \         SV `  4        Wn        R # r^   r*  r+  s   &&€r9   r„   ÚExclusiveKeywordArg.__init__  r-  r;   c               ó   € V ^8„  d   QhRR/# rë   r7   )r8   s   "r9   r:   r@    s   € ÷ 5ñ 5˜#ñ 5r;   c                	ó$   € R V P                   : R2# )zExclusiveKeywordArg(rî   r0  rƒ   s   &r9   rð   ÚExclusiveKeywordArg.__repr__  s   € Ø% d§i¡i¡]°!Ð4Ð4r;   c               ó$   € V ^8„  d   QhRRRRRR/# r§  r7   )r8   s   "r9   r:   r@    s!   € ÷ :ñ :˜>ð :°ð :Àñ :r;   c                	ó    € WP                   9   d   \        R 4      # VP                   P                  V4       \        W V P                  V/R7      # )zexclusive arg appears twicer4  )rp  râ   r¦   rÈ   r&  r†  s   &&&r9   ry  ÚExclusiveKeywordArg._match  sD   € Ø×)Ñ)Ô)ÜÐ<Ó=Ð=à×Ñ×%Ñ% dÔ+Ü�S¨¯	©	°4Ð'8Ô9Ð9r;   c               ó    € V ^8„  d   QhRRRR/# r   r7   )r8   s   "r9   r:   r@    r7  r;   c                	óš   <€ \         P                  ! \        V4      p\        SV `  V4      ;'       d    V P
                  VP
                  8H  # r^   r9  r  s   &&€r9   r¢  ÚExclusiveKeywordArg.pattern_eq  r;  r;   r0  )rV   rd   re   rf   rR  rg   r„   rð   ry  r¢  rh   rT  rU  s   @r9   r>  r>  ý  s/   ø‡ ñð ƒI÷ð õ5õ:÷Eö Er;   r>  c                  óÆ   a € ] tR tRt$ RtR]R&   R]R&   RR V 3R lllt]]R	 R
 l4       4       t	R R lt
R R ltR R ltR R ltR R ltR R ltR V 3R lltRtV ;t# )Ú_TargetExpri  z/
Base class for filtering match by node.target
zlist[FnsType]ÚfnszOrderedSet[FnsType]Úfns_setc               ó$   € V ^8„  d   QhRRRRRR/# )r2   rN  zFnsType | Sequence[FnsType]rö   rÿ  r5   r}   r7   )r8   s   "r9   r:   Ú_TargetExpr.__annotate__  s$   € ÷ ñ Ø.ðØ7Eðà	ñr;   c                	ón  <€ \         SV `  4        \        V4      '       g   \        V\        4      '       d   V.M
\        V4      pV FN  p\        V\        P                  P                  4      '       g   K/  VP                  VP                  4       4       KP  	  Wn        \        V4      V n        W n        R # r^   )rÕ   r„   ÚcallablerQ   r4   rÖ   r“   Ú_opsÚOpOverloadPacketrã   Úop_overloadsrN  r!   rO  rö   )r`   rN  rö   rs   r×   s   &&& €r9   r„   Ú_TargetExpr.__init__  s|   ø€ ô 	‰ÑÔÜ —}’}¬
°3¼×(<Ò(<ˆs‰eÄ$ÀsÃ)ˆÛˆBÜ˜"œeŸj™j×9Ñ9×:Ô:Ø—
‘
˜2Ÿ?™?Ó,Ö-ñ ð ŒÜ! #“ˆŒØŽ
r;   c               ó   € V ^8„  d   QhRR/# rë   r7   )r8   s   "r9   r:   rQ  .  s   € ×Ñ�CÑr;   c                	ó   € R # r^   r7   rƒ   s   &r9   r  Ú_TargetExpr.op,  s   € ár;   c               ó   € V ^8„  d   QhRR/# rë   r7   )r8   s   "r9   r:   rQ  0  s   € ÷ ñ ˜#ñ r;   c                	ó
  € V P                   ^ ,          p\        V\        4      '       g   VP                  p\	        V P                   4      ^8”  d   RV R2# V P                   ^ ,          \        \        VR4      J d   RV 2# V P                   ^ ,          \        \        VR4      J d   RV 2# \        V P                   ^ ,          \        P                  P                  4      '       d   \        V P                   ^ ,          4      # V# )r�   râ  z, ...]Nútorch.z	operator.)
rN  rQ   r4   rV   r  Úgetattrr“   ÚoperatorrT  Ú
OpOverload)r`   Ú
first_reprs   & r9   Úfns_reprÚ_TargetExpr.fns_repr0  sÊ   € Ø—X‘X˜a•[ˆ
Ü˜*¤c×*Ò*Ø#×,Ñ,ˆJäˆt�x‰x‹=˜1ÔØ�z�l &Ð)Ð)Ø�X‰X�a�[œG¤E¨:°tÓ<Ó<Ø˜J˜<Ð(Ð(Ø�X‰X�a�[œG¤H¨j¸$Ó?Ó?Ø˜z˜lÐ+Ð+Ü˜Ÿ™ �¤U§Z¡Z×%:Ñ%:×;Ò;Ü�t—x‘x •{Ó#Ð#àÐr;   c               ó   € V ^8„  d   QhRR/# rë   r7   )r8   s   "r9   r:   rQ  @  s   € ÷ Lñ L˜#ñ Lr;   c                	óÐ   € V P                   \        J d   R pM$V P                   ^8w  d   RV P                    R2pMRpV P                  P                   RV P	                  4        V R2# )r  rí   rî   rä  rå  )rö   r€   r×   rV   rb  r  s   & r9   rð   Ú_TargetExpr.__repr__@  s^   € Ø�:‰:œÓ!Ø&‰KØ�Z‰Z˜1Œ_Ø˜tŸz™z˜l¨!Ð,‰KàˆKØ—.‘.×)Ñ)Ð*¨!¨D¯M©M«OÐ+<¸[¸MÈÐKÐKr;   c               ó   € V ^8„  d   QhRR/# rc  r7   )r8   s   "r9   r:   rQ  I  r
  r;   c                	ód   € \        V P                  \        4      ;'       g    V P                  ^8„  # r  r  rƒ   s   &r9   r~  Ú_TargetExpr.has_multiple_usersI  r  r;   c               ó$   € V ^8„  d   QhRRRRRR/# r˜  r7   )r8   s   "r9   r:   rQ  L  s$   € ÷ "ñ "Øð"Ø+Dð"à	4ñ"r;   c                	ó   € \         hr^   ©rò  rœ  s   &&&r9   r�  Ú_TargetExpr.find_anchor_nodesL  s
   € ô "Ð!r;   c               ó    € V ^8„  d   QhRRRR/# ©r2   r¸   rŠ   r5   r6   r7   )r8   s   "r9   r:   rQ  Q  s   € ÷ 
ñ 
˜}ð 
°ñ 
r;   c                	óÌ   € \        V\        P                  P                  4      ;'       d:    VP                  V P                  8H  ;'       d    \        V4      V P                  9   # r^   )rQ   r“   r”   r$  r  Úextract_targetrO  )r`   r¸   s   &&r9   Ú
_match_fnsÚ_TargetExpr._match_fnsQ  sN   € ä�tœUŸX™XŸ]™]Ó+÷ 5ð 5Ø—‘˜4Ÿ7™7Ñ"÷5ð 5ä˜tÓ$¨¯©Ñ4ð	
r;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   r¸   rŠ   rÏ   rÎ   r5   r6   r7   )r8   s   "r9   r:   rQ  X  s!   € ÷ 
ñ 
 ð 
°\ð 
Àdñ 
r;   c                	ó¦   € WP                   9   ;'       g=    V P                  \        J ;'       g#    \        VP                  4      V P                  8H  # r^   )rý   rö   r€   r  r†  s   &&&r9   Ú_match_usersÚ_TargetExpr._match_usersX  sE   € à—K‘KÑ÷ -ð -Ø�z‰zœXÐ%÷-ð -ä�4—:‘:‹ $§*¡*Ñ,ð	
r;   c               ó    € V ^8„  d   QhRRRR/# r   r7   )r8   s   "r9   r:   rQ  _  s   € ÷ 
ñ 
 ð 
¨ñ 
r;   c                	ó  <€ \         P                  ! \        V4      p\        SV `  V4      ;'       d\    V P
                  VP
                  8H  ;'       d;    V P                  VP                  8H  ;'       d    V P                  VP                  8H  # r^   )r  r  r   rÕ   r¢  r  rN  rö   r  s   &&€r9   r¢  Ú_TargetExpr.pattern_eq_  su   ø€ Ü—’œD %Ó(ˆä‰GÑ˜uÓ%÷ *ð *Ø—‘˜5Ÿ8™8Ñ#÷*ð *à—‘˜EŸI™IÑ%÷*ð *ð —
‘
˜eŸk™kÑ)ð		
r;   )rN  rO  rö   r  )rV   rd   re   rf   rR  rg   r„   rS  r   r  rb  rð   r~  r�  rr  rv  r¢  rh   rT  rU  s   @r9   rM  rM    sb   ø‡ ñð 
ÓØ Ó ÷ò ð ØÜó ó àõõ LõBõ"õ

õ
÷
ö 
r;   rM  .c                  ó¨   a € ] tR tRtRtR^/R V 3R lllt]R R l4       t]R R	 l4       tR
 R lt	R R lt
R R ltR R ltR V 3R lltRtV ;t# )Ú_TargetArgsExpril  z=
Base class for filtering match by node.{target,args,kwargs}
Ú_usersc          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r2   rN  z*torch.fx.node.Target | str | Sequence[Any]rY   r   r}  zint | MultiplerZ   r5   r}   r7   )r8   s   "r9   r:   Ú_TargetArgsExpr.__annotate__q  sC   € ÷ Eñ Eà7ðEð ðEð ð	Eð
 ðEð 
ñEr;   c               	óþ  <€ \         SV `  W4       \        V4      V n        \	        V4      V n        \        ;QJ d>    R  \        P                  ! W4P                  4       4       4       F  '       g   K   RM3	  RM/! R  \        P                  ! W4P                  4       4       4       4      '       d   V P                  V n        MV P                  V n        V P                  V P                  V P
                  4      V n        R# )c              3  óX   "  € T F   p\        V\        \        \        34      x € K"  	  R # 5ir^   )rQ   rt  rÖ   rç   ©r˜   Úxs   & r9   r›   Ú+_TargetArgsExpr.__init__.<locals>.<genexpr>{  s(   é € ð 
á;�ô �qœ4¤¤uÐ-×.Ð.Û;ùs   ‚(*TFN)rÕ   r„   rç   rY   rt  rZ   r½   Ú	itertoolsÚchainÚvaluesÚpytree_flattenÚflattenÚsimple_flattenÚflat_args_kwargs)r`   rN  r}  rY   rZ   r×   s   &&$*,€r9   r„   Ú_TargetArgsExpr.__init__q  s¬   ø€ ô 	‰Ñ˜Ô%Ü˜$“KˆŒ	Ü˜6“lˆŒß‹3ñ 
ä—_’_ T¯=©=«?Ô;ó
�3�3Š3ñ 
ä—_’_ T¯=©=«?Ô;ó
÷ 
ò 
ð  ×.Ñ.ˆD�Là×.Ñ.ˆDŒLØ $§¡¨T¯Y©Y¸¿¹Ó DˆÖr;   c               ó$   € V ^8„  d   QhRRRRRR/# ©r2   rY   r
  rZ   zMapping[Any, Any]r5   z3tuple[Sequence[Any], _SimpleSpec | pytree.TreeSpec]r7   )r8   s   "r9   r:   r  …  s$   € ÷ ñ ØðØ%6ðà	<ñr;   c                	ól   € . V OVP                  4       O5p\        V 4      .VP                  4       O5pW#3# r^   )r‡  r  rá   )rY   rZ   r‡  Úspecs   &&  r9   rŠ  Ú_TargetArgsExpr.simple_flatten„  s8   € ð +�4Ð*˜&Ÿ-™-›/Ñ*ˆÜ�D“	Ð*˜FŸK™K›MÑ*ˆØˆ|Ðr;   c               ó$   € V ^8„  d   QhRRRRRR/# rŽ  r7   )r8   s   "r9   r:   r  �  s$   € ÷ ñ ØðØ%6ðà	<ñr;   c                	óÌ   aa€ \         \        \        \        \        \        /oR  VV3R llo\
        P                  ! SW3V3R lR7      p\
        P                  ! V4      w  r4W43# )c               ó    € V ^8„  d   QhRRRR/# )r2   rƒ  r   r5   r7   )r8   s   "r9   r:   Ú4_TargetArgsExpr.pytree_flatten.<locals>.__annotate__–  s   € ÷ 		ñ 		˜Cð 		 Cñ 		r;   c                óŽ   <€ \        V 4      pSP                  V4      pVe$   \        P                  ! SV! V 4      V3R lR7      # V # )Nc                ó    <€ \        V 4      S9   # r^   ©rô  ©rƒ  Útype_mappings   &€r9   r*  ÚF_TargetArgsExpr.pytree_flatten.<locals>.convert_type.<locals>.<lambda>�  s   ø€ ¤d¨1£g°Ò&=r;   ©Úis_leaf)rô  rM   ÚpytreerB  )rƒ  ÚclsÚ
convert_fnÚconvert_typerš  s   &  €€r9   r¡  Ú4_TargetArgsExpr.pytree_flatten.<locals>.convert_type–  sG   ø€ Ü�q“'ˆCØ%×)Ñ)¨#Ó.ˆJØÒ%Ü—’Ø Ù˜q“MÜ=ôð ð
 ˆHr;   c                ó    <€ \        V 4      S9   # r^   r˜  r™  s   &€r9   r*  Ú0_TargetArgsExpr.pytree_flatten.<locals>.<lambda>¤  s   ø€ œd 1›g¨Ò5r;   rœ  )r   rç   rÖ   r   rt  rž  rB  Útree_flatten)rY   rZ   Únormalized_args_treeÚflatr�  r¡  rš  s   &&   @@r9   rˆ  Ú_TargetArgsExpr.pytree_flattenŒ  s^   ù€ ô
 œEÜ”%ÜœDð*
ˆ÷		ñ 		ô  &ŸšØØˆNÜ5ô 
Ðô
 ×(Ò(Ð)=Ó>‰
ˆØˆzÐr;   c               ó   € V ^8„  d   QhRR/# rë   r7   )r8   s   "r9   r:   r  ©  s   € ÷ 
?ñ 
?˜#ñ 
?r;   c                	óÊ  € V P                  4       .\        \        V P                  4      OV P                  P                  4        UUu. uF  w  rV R V 2NK  	  uppOpV P                  \        J d   VP                  R4       M/V P                  ^8w  d   VP                  RV P                   24       V P                  P                   RRP                  V4       R2# u uppi )Ú=ú_users=MULTIPLEú_users=rå  rí   rî   )rb  rì  rí  rY   rZ   rª   rö   r€   r¦   r×   rV   rë  )r`   r™   rš   rY   s   &   r9   rð   Ú_TargetArgsExpr.__repr__©  sÂ   € à�M‰M‹Oð
ä”�t—y‘yÓ!ð
ð &*§[¡[×%6Ñ%6Ô%8Ô9Ñ%8™T˜Q���1�Q�C‹jÑ%8Ò9ð
ˆð
 �:‰:œÓ!Ø�K‰KÐ)Õ*Ø�Z‰Z˜1Œ_Ø�K‰K˜' $§*¡* Ð.Ô/Ø—.‘.×)Ñ)Ð*¨!¨D¯I©I°d«OÐ+<¸AÐ>Ð>ùó :s   ÁCc               ó    € V ^8„  d   QhRRRR/# r¸  r7   )r8   s   "r9   r:   r  µ  s   € ÷ Eñ EÐ3ð E¸ñ Er;   c           
     	óæ  a€ V P                  4       .V3R  lV P                   4       OV P                  P                  4        UUu. uF  w  r#V RSP	                  V4       2NK  	  uppOpV P
                  \        J d   VP                  R4       M/V P
                  ^8w  d   VP                  RV P
                   24       RpV P                  P                   RVP                  V4       R2# u uppi )c              3  óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir^   ©r¼  )r˜   rƒ  r¹  s   & €r9   r›   Ú/_TargetArgsExpr.pretty_print.<locals>.<genexpr>¸  s   øé € Ð4©) Qˆb�o‰o˜a× Ð «)ùs   ƒ!r«  r¬  r­  rí   rå  rî   )rb  rY   rZ   rª   r¼  rö   r€   r¦   r×   rV   rë  )r`   r¹  r™   rš   rY   Ú
joiner_strs   &f    r9   r¼  Ú_TargetArgsExpr.pretty_printµ  sÓ   ø€ à�M‰M‹Oð
ä4¨$¯)ª)Ó4ð
ð 7;·k±k×6GÑ6GÔ6IÔJÑ6I©d¨a���1�R—_‘_ QÓ'Ð(Ó)Ñ6IÒJð
ˆð
 �:‰:œÓ!Ø�K‰KÐ)Õ*Ø�Z‰Z˜1Œ_Ø�K‰K˜' $§*¡* Ð.Ô/àˆ
Ø—.‘.×)Ñ)Ð*¨!¨J¯O©O¸DÓ,AÐ+BÀ!ÐDÐDùó Ks   Á!C-c               ó$   € V ^8„  d   QhRRRRRR/# rƒ  r7   )r8   s   "r9   r:   r  Ã  s!   € ÷ 8ñ 8˜=ð 8¨|ð 8Àñ 8r;   c                	ó"  € V P                  V4      '       d.   \        VP                  4      \        V P                  4      8w  d   \        R W4      # V P	                  W4      '       g   \        RV 4      # VP                  pVP
                  p\        V4      \        V P
                  4      8  dó   ^ RIHp \        VP                  4      '       g   \        RVP                   24      hV! VP                  VP                  VP
                  4      pVf   \        R W4      # Vw  r4\        V4      \        V P                  4      8X  dO   \        V4      \        V P
                  4      8¼  d,   V Uu/ uF  qwV P
                  9   g   K  WtV,          bK   	  ppM6\        R W4      # V Uu/ uF  qwV P
                  9   g   K  WtV,          bK   	  ppV P                  W44      w  r‰V P                  w  r«W›8w  d   \        RW›4      # \        V4      \        V
4      8w  d   \        R4      h\        W 4      p\        W¨4       F•  w  rÞ\        V\         4      '       d:   VP#                  WÞ4      p\%        V4      '       g   Vu # VP'                  V4       KT  \        V\(        P*                  P,                  4      '       g	   Wí8w  g   K†  \        RVVVR7      u # 	  VP.                  P1                  V4       VP                  VP2                  V &   V# u upi u upi )z&function_mismatch: node={}, pattern={}r  )Únormalize_functionú#expected callable node.target, got zargs_structure {} {}z)node_items and self_items length mismatchz#constant_args: {} {!r}!={pattern!r})rÊ   )rr  r  rY   râ   rv  rZ   Útorch.fx.operator_schemasr¸  rS  r  r‚   r‰  r‹  rÈ   rD  rQ   rÉ   rz  rm  rã   r“   r”   r$  r®   r¦   rÍ   )r`   r¸   rÏ   Ú_argsÚ_kwargsr¸  Únormalized_args_and_kwargsÚiÚ
node_itemsÚ	node_specÚ
self_itemsÚ	self_specrj  rÊ   Ú
child_nodeÚchild_matchs   &&&             r9   ry  Ú_TargetArgsExpr._matchÃ  sx  € Ø�‰˜t×$Ò$¬¨D¯I©I«¼#¸d¿i¹i».Ô(HÜÐGÈÓTÐTà× Ñ  ×+Ò+ÜÐ2°DÓ9Ð9à—	‘	ˆØ—+‘+ˆÜˆw‹<œ#˜dŸk™kÓ*Ô*ÝDä˜DŸK™K×(Ò(Ü$Ø9¸$¿+¹+¸ÐGóð ñ *<Ø—‘˜TŸY™Y¨¯©ó*Ð&ð *Ò1Ü"Ð#KÈTÓXÐXà!;‘�Ü�u“:¤ T§Y¡Y£Ô/´C¸³LÄCÈÏÉÓDTÔ4TÙ6=ÓR±g°ÀdÇkÁkÑAQœ}˜q¨!¥*š}±g�GÐR�Gä&Ø@À$óð ñ /6ÓJ©g¨¸d¿k¹kÑ9I”}�q !�*’}©gˆGÐJà $§¡¨UÓ <Ñˆ
Ø $× 5Ñ 5Ñˆ
ØÔ!ÜÐ5°yÓLÐLÜˆz‹?œc *›oÔ-Ü Ð!LÓMÐMä�#ÓˆÜ#& zÖ#>ÑˆGÜ˜'¤;×/Ò/Ø!Ÿi™i¨Ó<�Ü ×,Ò,Ø&Ò&Ø—‘˜Ö%Ü˜J¬¯©¯©×6Ò6¸*Ö:OÜ"Ø9ØØØ#ô	ò ñ $?ð 	
�‰�‰�tÔØŸ+™+ˆ�	‰	�$‰Øˆùò? Sùò Ks   Å.LÆLÆ%LÆ<Lc               ó$   € V ^8„  d   QhRRRRRR/# r˜  r7   )r8   s   "r9   r:   r  ý  s$   € ÷ 3ñ 3Øð3Ø+Dð3à	4ñ3r;   c              #  óÚ  "  € WP                   9   d   VP                   V ,          x € R# V P                  ^ ,           F¨  p\        V\        4      '       g   K  VP	                  W4       Fx  p\        V\
        P                  P                  4      '       g   K/  VP                   F9  pWR9  g   K  V P                  V4      '       g   K$  Vx € VP                  V4       K;  	  Kz  	  Kª  	  R# 5i)zö
This is used when we are matching a pattern with multiple outputs.
There is a partial match (stored in ctx) and we want to walk
this pattern to find a connection to an already-matched node.

Yields candidate nodes that `self._match` might like.
N)rþ   r‹  rQ   rÉ   r�  r“   r”   r$  rö   rr  Úadd)r`   rÏ   r™  rÊ   Ú
other_noder¸   s   &&&   r9   r�  Ú!_TargetArgsExpr.find_anchor_nodesý  s°   é € ð ×&Ñ&Ô&Ø×%Ñ% dÕ+Ò+Ùà×,Ñ,¨Q×/Ð/ˆGÜ˜'¤;×/Ô/Ø")×";Ñ";¸CÖ"J�JÜ% j´%·(±(·-±-×@Ò@Ù Ø *× 0Ô 0˜ØÖ/Ø#Ÿ™¨t×4Ô4Ø&*¢
Ø (§¡¨TÖ 2ó	 !1ó #Kó 0ùs   ‚AC+ÁAC+Â/C+Ã#C+c               ó    € V ^8„  d   QhRRRR/# r   r7   )r8   s   "r9   r:   r    ó   € ÷ 	
ñ 	
 ð 	
¨ñ 	
r;   c                	óÞ  <€ \         P                  ! \        V4      p\        SV `  V4      ;'       d¼    V P
                  ^,          VP
                  ^,          8H  ;'       d�    \        ;QJ dH    R \        V P
                  ^ ,          VP
                  ^ ,          4       4       F  '       d   K   R# 	  R# ! R \        V P
                  ^ ,          VP
                  ^ ,          4       4       4      # )r»   c              3  ó|   "  € T F2  w  r\        V\        4      '       d   VP                  V4      MW8H  x € K4  	  R # 5ir^   ©rQ   rÉ   r¢  ©r˜   rÃ  rÄ  s   &  r9   r›   Ú-_TargetArgsExpr.pattern_eq.<locals>.<genexpr>  s4   é € ð áT‘D�Aô $.¨a´×#=Ò#=�—‘˜Q”À1Á6ÔIÛTùó   ‚:<FT)r  r  r   rÕ   r¢  r‹  rE   rD  r  s   &&€r9   r¢  Ú_TargetArgsExpr.pattern_eq  sÏ   ø€ Ü—’œD %Ó(ˆä‰GÑ˜uÓ%÷ ð Ø×%Ñ% aÕ(¨E×,BÑ,BÀ1Õ,EÑE÷ð ç“ñ ä × 5Ñ 5°aÕ 8¸%×:PÑ:PÐQRÕ:SÔTó—”ð	
ò ð	
ð ñ ä × 5Ñ 5°aÕ 8¸%×:PÑ:PÐQRÕ:SÔTóó ð	
r;   )rY   r‹  r‰  rZ   )rV   rd   re   rf   rR  r„   ÚstaticmethodrŠ  rˆ  rð   r¼  ry  r�  r¢  rh   rT  rU  s   @r9   r|  r|  l  sg   ø† ñðEð "#÷	Eò Eð& ôó ðð ôó ðõ8
?õEõ8õt3÷2	
ö 	
r;   r|  c                  ó   € ] tR tRtRtRtRtR# )ÚCallFunctioni"  zJ
Matches a call_function node in the FX graphs: `fns[i](*args, **kwargs)`
Úcall_functionr7   N©rV   rd   re   rf   rR  r  rh   r7   r;   r9   rÖ  rÖ  "  s   † ñð 
„Br;   rÖ  c                  ó   € ] tR tRtRtRtRtR# )Ú
CallMethodi*  zO
Matches a call_method node in the FX graphs: `fns[i].method(*args, **kwargs)`
Úcall_methodr7   NrØ  r7   r;   r9   rÚ  rÚ  *  ó   † ñð 
„Br;   rÚ  c                  ó   € ] tR tRtRtRtRtR# )Ú
CallModulei2  zH
Matches a call_module node in the FX graphs: `module(*args, **kwargs)`
Úcall_moduler7   NrØ  r7   r;   r9   rÞ  rÞ  2  rÜ  r;   rÞ  c                  ó&   € ] tR tRtRtR R ltRtR# )Ú_TargetExprVarArgsi:  zS
Matches a call_function node with any arguments which are passed into the pattern
c               ó$   € V ^8„  d   QhRRRRRR/# rƒ  r7   )r8   s   "r9   r:   Ú_TargetExprVarArgs.__annotate__?  s!   € ÷ ñ ˜=ð ¨|ð Àñ r;   c                	ó   € V P                  V4      '       g   \        R 4      # V P                  W4      '       g   \        R4      # \        W 4      pVP                  P                  V4       VP                  VP                  V &   VP                  P                  VP                  4       VP                  P                  VP                  4       V# )Úfunction_mismatchÚmultiple_users)rr  râ   rv  rÈ   r®   r¦   r  rÍ   rY   rã   rZ   r¨   )r`   r¸   rÏ   rj  s   &&& r9   ry  Ú_TargetExprVarArgs._match?  s’   € Ø�‰˜t×$Ò$ÜÐ2Ó3Ð3à× Ñ  ×+Ò+ÜÐ/Ó0Ð0ä�#ÓˆØ	�‰�‰�tÔØŸ+™+ˆ�	‰	�$‰Ø	�‰�‰�d—i‘iÔ Ø	�‰�‰˜Ÿ™Ô$Øˆr;   r7   Nr¬  r7   r;   r9   rá  rá  :  s   † ñ÷ñ r;   rá  c                  ó   € ] tR tRtRtRtR# )ÚCallFunctionVarArgsiN  r×  r7   N©rV   rd   re   rf   r  rh   r7   r;   r9   ré  ré  N  s   † Ø	„Br;   ré  c                  ó   € ] tR tRtRtRtR# )ÚCallMethodVarArgsiR  rÛ  r7   Nrê  r7   r;   r9   rì  rì  R  ó   † Ø	„Br;   rì  c                  ó   € ] tR tRtRtRtR# )ÚCallModuleVarArgsiV  rß  r7   Nrê  r7   r;   r9   rï  rï  V  rí  r;   rï  c                  ó`   a € ] tR tRtRtRR V 3R llltR R ltR R ltR	 V 3R
 lltRt	V ;t
# )ÚListOfiZ  z
Matches a repeated pattern
c               ó$   € V ^8„  d   QhRRRRRR/# )r2   rÊ   rÉ   r>  r6   r5   r}   r7   )r8   s   "r9   r:   ÚListOf.__annotate___  s!   € ÷ ñ  ð °dð Àtñ r;   c                	ó–   <€ \         SV `  4        \        V\        4      '       g   \	        R \        V4       24      hWn        W n        R# )zexpected PatternExpr, got N)rÕ   r„   rQ   rÉ   r‚   rô  rÊ   r>  )r`   rÊ   r>  r×   s   &&&€r9   r„   ÚListOf.__init___  s<   ø€ Ü‰ÑÔÜ˜'¤;×/Ò/Ü Ð#=¼dÀ7»m¸_Ð!MÓNÐNØŒØŽr;   c               ó   € V ^8„  d   QhRR/# rë   r7   )r8   s   "r9   r:   ró  f  ó   € ÷ <ñ <˜#ñ <r;   c                	óN   € V P                   P                   R V P                   R2# ©rå  rî   )r×   rV   rÊ   rƒ   s   &r9   rð   ÚListOf.__repr__f  ó$   € Ø—.‘.×)Ñ)Ð*¨!¨D¯L©L¨>¸Ð;Ð;r;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   r¸   rÌ   rÏ   rÎ   r5   rk  r7   )r8   s   "r9   r:   ró  i  s"   € ÷ ñ Ð.ð °\ð Àkñ r;   c                	óZ  € \        V\        \        34      '       d   \        V4      ^ 8X  d   \	        R4      # \        W 4      pVP                  4       pRp\        V4       F¦  w  rg\        VP                  WGP                  R7      pVP                  V P                  V4      p	VP                  4       p\        V	4      '       g#   V P                  '       g   \	        RWi4      u # K…  RpVP                  V	P!                  4       4       K¨  	  V'       g   \	        R4      # VP!                  4       # )r�   Únon_listFr�  zlist[{}]: {}Tzlist: no_match)rQ   rÖ   rç   r  râ   rÈ   r  Ú	enumeraterÎ   rý   rÜ   rz  rÊ   rm  r>  rã   rè   )
r`   r¸   rÏ   rj  rþ   Úmatchedr¾  rÃ  Ú	child_ctxrÄ  s
   &&&       r9   ry  ÚListOf._matchi  sï   € Ü˜$¤¤u ×.Ò.´#°d³)¸q´.Ü˜zÓ*Ð*Ü�#Óˆð ×8Ñ8Ó:ˆØˆÜ& tž_‰MˆAÜ$Ø—‘˜_×4DÑ4DôˆIð $Ÿ/™/¨$¯,©,¸
ÓCˆKØ'×BÑBÓDˆOÜ˜K×(Ò(Ø—|—|�|Ü& ~°qÓFÒFÙØˆGØ�H‰H�[×'Ñ'Ó)Ö*ñ -÷ ÜÐ/Ó0Ð0Ø�x‰x‹zÐr;   c               ó    € V ^8„  d   QhRRRR/# r   r7   )r8   s   "r9   r:   ró  �  r  r;   c                	óô   <€ \         P                  ! \        V4      p\        SV `  V4      ;'       dG    V P
                  P	                  VP
                  4      ;'       d    V P                  VP                  8H  # r^   )r  r  r   rÕ   r¢  rÊ   r>  r  s   &&€r9   r¢  ÚListOf.pattern_eq�  s_   ø€ Ü—’œD %Ó(ˆä‰GÑ˜uÓ%÷ .ð .Ø—‘×'Ñ'¨¯©Ó6÷.ð .à—‘ §¡Ñ-ð	
r;   )r>  rÊ   re  r<  rU  s   @r9   rñ  rñ  Z  s&   ø† ñ÷ò õ<õ÷0
ö 
r;   rñ  c                  óž   a € ] tR tRt$ R]R&   R V 3R llt]R R l4       tR R	 ltR
 R lt	R R lt
R R ltR R ltR V 3R lltRtV ;t# )ÚMultiOutputPatterniŠ  ro  rý   c               ó    € V ^8„  d   QhRRRR/# )r2   rý   zSequence[PatternExpr | None]r5   r}   r7   )r8   s   "r9   r:   ÚMultiOutputPattern.__annotate__�  s   € ÷  ñ  Ð <ð  Àñ  r;   c                	ót  <€ \         SV `  4        \        V^ ,          \        4      '       g   \	        R\        V^ ,          4       24      h\        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       g   \	        V4      h\        V4      V n        V^ ,          P                  V n	        R# )r�   zexpected _TargetExpr, got c              3  óX   "  € T F   qR J ;'       g    \        V\        4      x € K"  	  R # 5ir^   )rQ   rÉ   r‚  s   & r9   r›   Ú.MultiOutputPattern.__init__.<locals>.<genexpr>‘  s$   é € ÐLÁG¸q˜�9×:Ð:¤
¨1¬kÓ :Ô:ÃGùs   ‚*‘*FTN)
rÕ   r„   rQ   rM  r‚   rô  rE   rÖ   rý   r  )r`   rý   r×   s   &&€r9   r„   ÚMultiOutputPattern.__init__�  s‚   ø€ Ü‰ÑÔÜ˜' !�*¤k×2Ò2Ü Ð#=¼dÀ7È1Å:Ó>NÐ=OÐ!PÓQÐQß‹sÑLÁGÓL�s�sŠsÑLÁGÓL×LÒLÜ  Ó)Ð)Ü˜G“}ˆŒØ˜!•*—-‘-ˆŽr;   c               ó   € V ^8„  d   QhRR/# )r2   r5   z(Callable[..., Any] | str | Sequence[Any]r7   )r8   s   "r9   r:   r	  —  s   € ÷ ñ Ð=ñ r;   c                	ór   € \         P                  ! \        V P                  ^ ,          4      pVP                  # ©r�   )r  r  rM  rý   rN  )r`   Úoutputs   & r9   rN  ÚMultiOutputPattern.fns–  s&   € ô —’œ[¨$¯,©,°q­/Ó:ˆØ�z‰zÐr;   c               ó   € V ^8„  d   QhRR/# rë   r7   )r8   s   "r9   r:   r	  œ  r÷  r;   c                	óN   € V P                   P                   R V P                   R2# rù  )r×   rV   rý   rƒ   s   &r9   rð   ÚMultiOutputPattern.__repr__œ  rû  r;   c               ó    € V ^8„  d   QhRRRR/# r¸  r7   )r8   s   "r9   r:   r	  Ÿ  s   € ÷ ñ Ð3ð ¸ñ r;   c                	óÊ   € V P                    Uu. uF  q!P                  V4      NK  	  ppR R 2pV P                  P                   RVP	                  V4       2pV R2pV# u upi )z,
z  z([z
]))rý   r¼  r×   rV   rë  )r`   r¹  rƒ  rY   r´  Ústr_outs   &&    r9   r¼  ÚMultiOutputPattern.pretty_printŸ  sg   € Ø,0¯LªLÓ9©L q—‘ Ö"©LˆÐ9Ø˜4˜&�\ˆ
Ø—^‘^×,Ñ,Ð-¨R°
·±ÀÓ0EÐ/FÐGˆØ�I˜TÐ"ˆØˆùò	 :s   �A c               ó$   € V ^8„  d   QhRRRRRR/# rƒ  r7   )r8   s   "r9   r:   r	  ¦  s!   € ÷ ñ ˜=ð ¨|ð Àñ r;   c                	óT  € \         P                  ! \        V P                  ^ ,          4      pVP	                  W14      p\        V4      '       g   V# V P                  R,           F@  pVf   K	  V P                  WR4      p\        V4      '       g   Vu # VP                  V4       KB  	  V# )r�   rº   )r  r  rM  rý   rz  rm  Ú_match_from_anchorsrã   )r`   r¸   rÏ   r  rj  rÊ   rÄ  s   &&&    r9   ry  ÚMultiOutputPattern._match¦  sˆ   € Ü—’œ[¨$¯,©,°q­/Ó:ˆØ�I‰I�fÓ#ˆÜ˜�{Š{ØˆHà—|‘| B×'Ð'ˆGØŠÙØ×2Ñ2°7Ó@ˆKÜ˜K×(Ò(Ø"Ò"Ø�H‰H�[Ö!ñ (ð ˆr;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   rÊ   rÉ   rÏ   rÎ   r5   rk  r7   )r8   s   "r9   r:   r	  ¶  s$   € ÷ ñ Ø"ðØ)5ðà	ñr;   c                	óô   € \        VP                  4      p\        R 4      pVP                  V\	        4       4       F9  pVP                  W4      p\        V4      '       d   Vu # \        V4      Vn        K;  	  V# )zno anchor found)rt  rþ   râ   r�  r!   rz  rm  )r`   rÊ   rÏ   Úpriorrj  r¸   s   &&&   r9   r  Ú&MultiOutputPattern._match_from_anchors¶  sh   € ô �S×(Ñ(Ó)ˆÜ$Ð%6Ó7ˆØ×-Ñ-¨c´:³<Ö@ˆDØ—	‘	˜'Ó(ˆAÜ˜�{Š{Ø’ä"& u£+ˆCÖñ Að ˆr;   c               ó    € V ^8„  d   QhRRRR/# r‰  r7   )r8   s   "r9   r:   r	  Ã  rŠ  r;   c                	ó˜   €  \        V P                  VP                  R 7      P                  W4      #   \         d   pTu Rp?# Rp?ii ; irŒ  )rÎ   rý   rÜ   rz  râ   rŽ  s   && r9   rz  ÚMultiOutputPattern.matchÃ  s<   € ð	Ü §¡°D·J±JÔ?×EÑEÀdÓQÐQøÜô 	Ø�Hûð	ús   ‚/2 ²A	½A¾A	ÁA	c               ó    € V ^8„  d   QhRRRR/# r   r7   )r8   s   "r9   r:   r	  É  rÌ  r;   c                	ó®  <€ \         P                  ! \        V4      p\        SV `  V4      ;'       d¤    \        V P                  4      \        VP                  4      8H  ;'       dq    \        ;QJ d:    R  \        V P                  VP                  4       4       F  '       d   K   R# 	  R# ! R  \        V P                  VP                  4       4       4      # )c              3  ó|   "  € T F2  w  r\        V\        4      '       d   VP                  V4      MW8H  x € K4  	  R # 5ir^   rÏ  rÐ  s   &  r9   r›   Ú0MultiOutputPattern.pattern_eq.<locals>.<genexpr>Î  s4   é € ð á<‘D�Aô $.¨a´×#=Ò#=�—‘˜Q”À1Á6ÔIÛ<ùrÒ  FT)	r  r  r   rÕ   r¢  r  rý   rE   rD  r  s   &&€r9   r¢  ÚMultiOutputPattern.pattern_eqÉ  s­   ø€ Ü—’œD %Ó(ˆä‰GÑ˜uÓ%÷ ð Ü�D—L‘LÓ!¤S¨¯©Ó%7Ñ7÷ð ç“ñ ä §¡¨e¯m©mÔ<ó—”ð	
ò ð	
ð ñ ä §¡¨e¯m©mÔ<óó ð	
r;   )r  rý   )rV   rd   re   rf   rg   r„   rS  rN  rð   r¼  ry  r  rz  r¢  rh   rT  rU  s   @r9   r  r  Š  sJ   ø‡ Ø%Ó%÷ ð  ð ôó ðõ
<õõõ õ÷	
ö 	
r;   r  c                  óf   a € ] tR tRtRtR V 3R llt]R R l4       tR R ltR	 V 3R
 llt	Rt
V ;t# )ÚRepeatedExpriÕ  zh
Checks for a repeated pattern. Useful for repeated operations after a node such as `split` or `unbind`
c               ó    € V ^8„  d   QhRRRR/# )r2   Úinner_patternrM  r5   r}   r7   )r8   s   "r9   r:   ÚRepeatedExpr.__annotate__Ú  s   € ÷ #ñ # kð #°dñ #r;   c                	óR   <€ \         SV `  4        Wn        VP                  V n        R # r^   )rÕ   r„   r-  r  )r`   r-  r×   s   &&€r9   r„   ÚRepeatedExpr.__init__Ú  s!   ø€ Ü‰ÑÔØ*ÔØ×"Ñ"ˆŽr;   c               ó   € V ^8„  d   QhRR/# )r2   r5   zSequence[FnsType]r7   )r8   s   "r9   r:   r.  à  s   € ÷ &ñ &Ð&ñ &r;   c                	ó.   € V P                   P                  # r^   )r-  rN  rƒ   s   &r9   rN  ÚRepeatedExpr.fnsß  s   € à×!Ñ!×%Ñ%Ð%r;   c               ó$   € V ^8„  d   QhRRRRRR/# rƒ  r7   )r8   s   "r9   r:   r.  ã  s!   € ÷ ñ ˜=ð ¨|ð Àñ r;   c                	ó¸  € VP                  V P                  V4      p\        V4      '       g   V# VP                  P	                  V P                  4       V P                  P                  V\        V.4      4       F[  p\        V .VP                  R 7      P                  V P                  V4      p\        V4      '       g   Vu # VP                  V4       K]  	  V# )r�  )
rz  r-  rm  rþ   Úpopr�  r!   rÎ   rÜ   rã   )r`   r¸   rÏ   rj  Úanchor_nodeÚanchor_ms   &&&   r9   ry  ÚRepeatedExpr._matchã  s»   € Ø�I‰I�d×(Ñ(¨$Ó/ˆÜ˜�{Š{ØˆHØ×Ñ×ÑØ×Ñô	
ð  ×-Ñ-×?Ñ?Ø”˜T˜FÓ#ö
ˆKô $ T F°$·*±*Ô=×CÑCØ×"Ñ" KóˆHô ˜H×%Ò%Ø’Ø�H‰H�XÖñ
ð ˆr;   c               ó    € V ^8„  d   QhRRRR/# r   r7   )r8   s   "r9   r:   r.  ö  s   € ÷ 
ñ 
 ð 
¨ñ 
r;   c                	ó²   <€ \         P                  ! \        V4      p\        SV `  V4      ;'       d&    V P
                  P	                  VP
                  4      # r^   )r  r  r   rÕ   r¢  r-  r  s   &&€r9   r¢  ÚRepeatedExpr.pattern_eqö  sK   ø€ Ü—’œD %Ó(ˆÜ‰wÑ! %Ó(÷ 
ð 
¨T×-?Ñ-?×-JÑ-JØ×Ñó.
ð 	
r;   )r-  r  )rV   rd   re   rf   rR  r„   rS  rN  ry  r¢  rh   rT  rU  s   @r9   r+  r+  Õ  s5   ø† ñ÷#ð #ð
 ô&ó ð&õ÷&
ö 
r;   r+  c                  óv   € ] tR tRtRtR R lt]]P                  RR R ll4       4       t	R R lt
R	 R
 ltRtR# )rº  iý  zˆ
Serializes Patterns to executable python.
XXX: currently only used and tested for fuse attention patterns. May not cover
all patterns.
c               ó   € V ^8„  d   QhRR/# r|   r7   )r8   s   "r9   r:   Ú!PatternPrettyPrinter.__annotate__  s   € ÷ ;ñ ;˜$ñ ;r;   c                	ó|   € \         P                  P                  P                  4       V n        / V n        / V n        R # r^   )r“   r”   rÜ   Ú
_NamespaceÚ	namespaceÚmemoized_objs_namesÚmemoized_objs_pprƒ   s   &r9   r„   ÚPatternPrettyPrinter.__init__  s*   € ÜŸ™Ÿ™×2Ñ2Ó4ˆŒØ;=ˆÔ Ø8:ˆÖr;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   ÚobjrÉ   Úoutput_namer4   r5   r7   )r8   s   "r9   r:   r?    s!   € ÷ !ñ !�ð !¨3ð !¸cñ !r;   c                óP  € \        4       p\        V R4      '       g   \        R4      hV P                  VR7      pVP                   Uu. uF,  pVP                  V,           RVP
                  V,           2NK.  	  ppVP                  V RV 24       RP                  V4      # u upi )zE
Serializes obj to python code with obj written out to `output_name`
r¼  zobj has no pretty_print method)r¹  z = Ú
)rº  Úhasattrr‚   r¼  rC  rD  r¦   rë  )rG  rH  r¹  Úout_strrÄ   r  s   &&    r9   ÚrunÚPatternPrettyPrinter.run	  s°   € ô "Ó#ˆÜ�s˜N×+Ò+Ü Ð!AÓBÐBØ×"Ñ" bÐ"Ó)ˆð ×-Ò-ó
á-�ð ×%Ñ% cÕ*Ð+¨3¨r×/BÑ/BÀ3Õ/GÐ.HÓIÙ-ð 	ð 
ð
 	�‰˜˜ S¨¨	Ð2Ô3à�y‰y˜Ó Ð ùò
s   Á2B#c               ó    € V ^8„  d   QhRRRR/# )r2   rG  r   r5   r4   r7   )r8   s   "r9   r:   r?    s   € ÷ ñ  ð ¨ñ r;   c                	óL  € \        V\        4      '       d7   V P                  P                  V4      ;p'       d   V# V P	                  V4      # \        V\
        P                  4      '       d   \        V4      # \        VR 4      '       d   VP                  V 4      # \        V4      # r²  )rQ   r|  rC  rM   Úmemoizer“   rÒ  rû  rK  r¼  rí  )r`   rG  Úmemoized_names   && r9   r¼  Ú!PatternPrettyPrinter.pretty_print  s„   € Ü�cœ?×+Ò+Ø $× 8Ñ 8× <Ñ <¸SÓ AÐAˆ}ÖAØ$Ð$à—|‘| CÓ(Ð(Ü�cœ5Ÿ<™<×(Ò(Ü(¨Ó-Ð-Ü�3˜×'Ò'Ø×#Ñ# DÓ)Ð)ä�C‹yÐr;   c               ó    € V ^8„  d   QhRRRR/# )r2   rG  r|  r5   r4   r7   )r8   s   "r9   r:   r?  +  s   € ÷ 	ñ 	˜?ð 	¨sñ 	r;   c                	óî   € VP                  V 4      pVP                  4       pR F  pVP                  VR4      pK  	  V P                  P	                  VR4      pWPP
                  V&   W P                  V&   V# )úaten.rä  N)rV  r]  zprims.)r¼  rb  ÚreplacerB  Úcreate_namerC  rD  )r`   rG  Úobj_strÚobj_nameÚprefixÚtmp_names   &&    r9   rQ  ÚPatternPrettyPrinter.memoize+  sr   € Ø×"Ñ" 4Ó(ˆØ—<‘<“>ˆÛ3ˆFØ×'Ñ'¨°Ó3ŠHñ 4ð —>‘>×-Ñ-¨h¸Ó=ˆØ(0× Ñ  Ñ%Ø%,×Ñ˜cÑ"Øˆr;   )rC  rD  rB  N)r  )rV   rd   re   rf   rR  r„   rÔ  r=  ÚcacherM  r¼  rQ  rh   r7   r;   r9   rº  rº  ý  s;   † ñõ;ð
 Ø‡_�_ö!ó ó ð!õ&÷	ñ 	r;   rº  c                  ó"   € ] tR tRtR R ltRtR# )Ú_PassDictsTypei7  c               ó    € V ^8„  d   QhRRRR/# )r2   r™   ú tuple[str, torch.fx.node.Target]r5   úlist[PatternEntry]r7   )r8   s   "r9   r:   Ú_PassDictsType.__annotate__8  s   € ÷ !ñ !Ø1ð!à	ñ!r;   c                	ó   € R # r^   r7   )r`   r™   s   &&r9   Ú__getitem__Ú_PassDictsType.__getitem__8  s   € á r;   r7   N)rV   rd   re   rf   rf  rh   r7   r;   r9   r`  r`  7  s   † ÷!ñ !r;   r`  c                  óH   € ] tR tRt$ R]R&   R]R&   R R ltRR	 R
 lltRtR# )ÚPatternEntryi=  rÉ   rÊ   úCallable[[Match], bool]Úextra_checkc               ó(   € V ^8„  d   QhRRRRRRRR/# ©	r2   rz  rÈ   rÜ   rÚ   r¸   rŠ   r5   r}   r7   )r8   s   "r9   r:   ÚPatternEntry.__annotate__B  s)   € ÷ "ñ "˜5ð "¨ð "¸}ð "ÐQUñ "r;   c                	ó   € \         hr^   rl  ©r`   rz  rÜ   r¸   s   &&&&r9   ÚapplyÚPatternEntry.applyB  s   € Ü!Ð!r;   Nc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r2   Ú
pass_dictsú)_PassDictsType | Sequence[_PassDictsType]r  ztorch.fx.node.Target | NoneÚprependr6   r5   r}   r7   )r8   s   "r9   r:   rn  E  s2   € ÷ :ñ :à=ð:ð ,ð:ð ð	:ð
 
ñ:r;   c                	ó˜  € VfZ   \        V P                  R4      '       g   \        R4      hV P                  P                   F  pV P	                  WVR7       K  	  R # \        V\        \        34      '       d�   \        V P                  R4      '       g   \        R4      hV'       d1   WP                  P                  V3,          P                  ^ V 4       R # WP                  P                  V3,          P                  V 4       R # \        P                  ! \        \        ,          V4      pV F  pV P	                  WRVR7       K  	  R # )NrN  zpattern has no fns attribute©rv  r  zpattern has no op attribute)rK  rÊ   r‚   rN  ÚregisterrQ   rt  ÚPatternMatcherPassr  Úinsertr¦   r  r  r   r`  )r`   rt  r  rv  rs   rƒ  s   &&&&  r9   ry  ÚPatternEntry.registerE  sê   € ð Š>Ü˜4Ÿ<™<¨×/Ò/Ü$Ð%CÓDÐDØ—l‘l×&Ô&�Ø—‘˜j°g�Ö>ó 'ä˜
¤TÔ+=Ð$>×?Ò?Ü˜4Ÿ<™<¨×.Ò.Ü$Ð%BÓCÐCßØŸL™LŸO™O¨VÐ4Õ5×<Ñ<¸QÀÖEàŸL™LŸO™O¨VÐ4Õ5×<Ñ<¸TÖBäŸš¤X¬nÕ%=¸zÓJˆJÛ�Ø—‘˜a°�Ö9ó  r;   r7   )NF)rV   rd   re   rf   rg   rq  ry  rh   r7   r;   r9   ri  ri  =  s   ‡ àÓØ(Ó(õ"÷:ó :r;   ri  c                  ó.   € ] tR tRt$ R]R&   R R ltRtR# )ÚLoweringPatternEntryi]  úCallable[..., Any]Úhandlerc               ó(   € V ^8„  d   QhRRRRRRRR/# rm  r7   )r8   s   "r9   r:   Ú!LoweringPatternEntry.__annotate__a  s)   € ÷ ñ ˜5ð ¨ð ¸}ð ÐQUñ r;   c                	ó  € \         P                  ! V P                  4      ! \         P                  ! V P                  V4      4      pVP	                  V4      ;_uu_ 4        VP                  V\        VP                  4      VP                  4      p\        VP                  V4       VP                  V4       R R R 4       VP                  R,          VJd   \        R4      hVP                  4        R #   + '       g   i     LD; i)Nz#expected match.nodes[-1] to be nodeéÿÿÿÿ)r=  Úwrapsr€  r>  Úinserting_beforer×  rç   rY   rZ   r¬   r©   Úreplace_all_uses_withr®   r‚   rù   )r`   rz  rÜ   r¸   r€  rN  s   &&&&  r9   rq  ÚLoweringPatternEntry.applya  s³   € Ü—/’/ $§,¡,Ô/´	×0AÒ0AÀ$Ç,Á,ÐPUÓ0VÓWˆØ×#Ñ# D×)Õ)Ø×-Ñ-¨g´u¸U¿Z¹ZÓ7HÈ%Ï,É,ÓWˆKÜ˜;×+Ñ+¨TÔ2Ø×&Ñ& {Ô3÷ *ð �;‰;�r�? $Ó&Ü Ð!FÓGÐGØ×ÑÖ÷ *×)ús   ÁAC3Ã3D	r7   N)rV   rd   re   rf   rg   rq  rh   r7   r;   r9   r~  r~  ]  s   ‡ àÓ÷ñ r;   r~  c                  ó2   € ] tR tRt$ RtR]R&   R R ltRtR# )	ÚGraphPatternEntryil  z0
A pattern that runs a function on the FX graph
r  r€  c               ó(   € V ^8„  d   QhRRRRRRRR/# rm  r7   )r8   s   "r9   r:   ÚGraphPatternEntry.__annotate__t  s)   € ÷ =ñ =˜5ð =¨ð =¸}ð =ÐQUñ =r;   c                	óÆ   € VP                  V4      ;_uu_ 4        V P                  ! V.VP                  O5/ VP                  B  R R R 4       R #   + '       g   i     R # ; ir^   )r†  r€  rY   rZ   rp  s   &&&&r9   rq  ÚGraphPatternEntry.applyt  s@   € Ø×#Ñ# D×)Õ)Ø�LŠL˜Ð< §¡Ò<¨u¯|©|Ò<÷ *×)×)Ò)ús   š+AÁA 	r7   N)rV   rd   re   rf   rR  rg   rq  rh   r7   r;   r9   rŠ  rŠ  l  s   ‡ ñð  Ó÷=ñ =r;   rŠ  c                  óZ   € ] tR tRt$ RtR]R&   RtR]R&   ]RR R	 ll4       tR
 R lt	Rt
R# )r  iy  z'
The replacement pattern for the graph
zCallable[..., list[Any]]Únormalize_argsNr/   Úpattern_namec               ó0   € V ^8„  d   QhRRRRRRRRR	R
RR/# )r2   rz  rÈ   rÜ   rÚ   rÐ   z%torch.fx.Graph | torch.fx.GraphModulerY   r¯   r‹   r/   r5   rÌ   r7   )r8   s   "r9   r:   Ú$ReplacementPatternEntry.__annotate__ƒ  sU   € ÷ qNñ qNØðqNàðqNð AðqNð &ð	qNð
 ðqNð 
ñqNr;   c           
     ó\  aaaaaaaa€ . o\        V P                  4      o ! VVVV3R lR\        P                  P                  4      pV P                  4       p\        V4      ^8X  d   V^ ,          pM¶V^ ,          '       g   \        R4      h\        V^ ,          P                  P                  4      pV U	u. uFB  p	\        V	\        P                  P                  4      '       g   K/  VP                  V	4      V	3NKD  	  p
p	\        V
\        P                  ! ^ 4      R7      ^,          pR R loSP!                  V4      ;_uu_ 4        \        V\        P                  P"                  4      '       g   \        R\%        V4       24      hV! V4      P&                  ! S!  p\        V\        P                  P                  4      '       d   V.pR R	 loR
 VVVVVVV3R llo\        V4      \        V4      8X  d   \)        Wk4       F  w  rÍS! WÍ4       K  	  M7\        V4      ^8w  d   \        R\        V4       24      hS! V^ ,          V4       RRR4       V P+                  4        \-        S4       Fv  pVP.                  '       d   K  VP1                  4       '       d   K/  \        VP2                  \        P4                  P6                  4      '       d   Ke  SP9                  V4       Kx  	  S Uu. uF  qîP:                  '       d   K  VNK  	  up# u up	i   + '       g   i     LÏ; iu upi )zD
Inserts the replacement graph into the toplevel graph at the match
c                  óD   <a € ] tR tRtRtRtRtR V VVVV3R lltRtV ;t	# )Ú<ReplacementPatternEntry.replace_with_graph.<locals>.Replaceri‘  Nc               ó    € V ^8„  d   QhRRRR/# ©r2   r¸   rŠ   r5   r   r7   )r8   s   "r9   r:   ÚIReplacementPatternEntry.replace_with_graph.<locals>.Replacer.__annotate__–  s   € ÷ ;?ñ ;? ]ð ;?°sñ ;?r;   c                	óz  <€ VP                   R9   d   \        SV `	  V4      # VP                  pV P	                  V4      w  r4VP                   R8X  d®   \        V4      '       g   \        RV 24      hSP                  W#V4      pSP                  V4       \        VP                  TS;'       g    RR7       \        VP                  S4       RVP                  9   d!   VP                  R,          VP                  R&   V# VP                   R8X  Ed   ^ RIHp \        SV `9  W#V4      p\        V\         P"                  P$                  4      '       g   \'        RV R	V R
24      hSP(                  f   \        R4      hRpSP(                  P+                  4        F  w  ršWzJ g   K  T	p M	  Vf^   \        V\,        4      '       g   \        R\/        V4       24      hV! SP(                  V4      w  r¸SP(                  P1                  W‡4       SP                  V4      pSP                  V4       V# \'        RV 24      h)Úplaceholderr×  zexpected callable target, got rä  r9  r  r  )Úunique_graph_name_with_rootzNYI: replacement_graph.z is not a graph module. Got Ú.Nzgraph.owning_module is Nonezexpected str target, got z
unhandled )r›  r  )r  rÕ   Úrun_noder  Úfetch_args_kwargs_from_envrS  r‚   r×  r¦   r¬   r©   rÆ   Útorch._higher_order_ops.utilsrœ  r  rQ   r“   r”   ÚGraphModulerò  r  Únamed_modulesr4   rô  Úregister_module)r`   r¸   r  rY   rZ   rÞ  rœ  Úsub_gmÚ
graph_namerø   ÚmodÚ_Úgetattr_noder×   Úadded_replacement_nodesrÁ   rÜ   r‹   s   &&           €€€€€r9   rž  ÚEReplacementPatternEntry.replace_with_graph.<locals>.Replacer.run_node–  s  ø€ Ø—7‘7Ð7Ô7Ü ™7Ñ+¨DÓ1Ð1ØŸ™�Ø#×>Ñ>¸tÓD‘�Ø—7‘7˜oÔ-Ü# F×+Ò+Ü,Ð/MÈfÈXÐ-VÓWÐWØ"×0Ñ0°¸vÓF�FØ+×2Ñ2°6Ô:Ü"Ø!'§¡Ø!%Ø"+§/ /¨rõô
 *¨&¯+©+°~ÔFð
 *¨T¯Y©YÔ6Ø:>¿)¹)ÐDVÕ:W˜Ÿ™Ð$6Ñ7Ø!�MØ—7‘7˜jÕ(õô #™WÑ-¨f¸FÓC�FÜ% f¬e¯h©h×.BÑ.B×CÒCÜ1Ø5°f°XÐ=YÐZ`ÐYaÐabÐcóð ð ×*Ñ*Ò2Ü,Ð-JÓKÐKØ!%�JØ"'×"5Ñ"5×"CÑ"CÖ"E™˜Ø!�=Ø)*˜JÙ!ñ #Fð "Ò)Ü)¨&´#×6Ò6Ü"0Ø";¼DÀ»L¸>Ð Jó#ð ñ )Dà!×/Ñ/Ø"ó)™˜ð ×+Ñ+×;Ñ;¸JÔOà#(§>¡>°*Ó#=�LØ+×2Ñ2°<Ô@Ø'Ð'ä)¨J°t°fÐ*=Ó>Ð>r;   r7   )
rV   rd   re   rf   rÛ  rß  r  rž  rh   rT  )r×   r©  rÁ   rÜ   r‹   s   @€€€€r9   ÚReplacerr–  ‘  s!   ù† ØˆKØˆKØˆH÷;?÷ ;?ò ;?r;   r«  zoutput_nodes[0] is falsy)rÄ   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r2   r¸   rŠ   Útag_namer4   Ú	tag_valueÚinput_stopsrš  r5   r}   r7   )r8   s   "r9   r:   Ú@ReplacementPatternEntry.replace_with_graph.<locals>.__annotate__â  s:   € ÷ 	6ñ 	6Øð	6àð	6ð ð	6ð 3ð		6ð
 ñ	6r;   c                óP  € V .p\         \        P                  P                  ,          ! 4       pV'       dq   VP	                  4       pWe9  g   K   Wc9  g   K(  \        VR 4      '       g   K<  VP                  V4       W&P                  V&   VP                  VP                  4       Kx  R# )r©   N)
r!   r“   r”   r$  r6  rK  rÈ  r©   rã   Úall_input_nodes)r¸   r­  r®  r¯  ÚqueueÚvisitedr)  s   &&&&   r9   Úpercolate_tagsÚBReplacementPatternEntry.replace_with_graph.<locals>.percolate_tagsâ  sv   € ð �FˆEÜ ¤§¡§¡Ö/Ó1ˆGçØ—i‘i“k�àÖ&ØÖ.Ü  V×,Ô,à—K‘K Ô$Ø)2—H‘H˜XÑ&Ø—L‘L ×!4Ñ!4Ö5ñ r;   úexpected GraphModule, got c               ó    € V ^8„  d   QhRRRR/# r˜  r7   )r8   s   "r9   r:   r°  ÿ  s   € ÷ $ñ $ Mð $°cñ $r;   c                ó  € V P                   R 8w  d   R# V P                  \        P                  8w  d   R# \	        V P
                  4      ^8w  d"   \        R\	        V P
                  4       24      hV P
                  ^,          # )r×  Nzexpected 2 args, got )r  r  r_  Úgetitemr  rY   r‚   ©r¸   s   &r9   Úmaybe_getitemÚAReplacementPatternEntry.replace_with_graph.<locals>.maybe_getitemÿ  s`   € Ø—7‘7˜oÔ-ÙØ—;‘;¤(×"2Ñ"2Ô2ÙÜ�t—y‘y“> QÔ&Ü(Ð+@ÄÀTÇYÁYÃÐ@PÐ)QÓRÐRØ—y‘y •|Ð#r;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   Úoldztorch.fx.Node | NoneÚnewz.torch.fx.Node | Sequence[torch.fx.Node] | Noner5   r}   r7   )r8   s   "r9   r:   r°    s+   € ÷ T&ñ T&Ø)ðT&àCðT&ð ñT&r;   c           	     óè  <€ R  V	3R llpV f   Ve   \        R4      hR# \        V \        P                  P                  4      '       g   \        R\        V 4       24      hVfA   V P                  RVR7       \        V P                  4      ^ 8X  d   SP                  V 4       R# \        V\        P                  P                  4      '       d¹   \        VP                  T S;'       g    RR7       \        P                  ! S
4      w  r4R F9  pWPP                  9   g   K  S! WV P                  V,          \        V4      4       K;  	  V P                  WR7       \        V P                  4      ^ 8X  d   SP                  V 4       R# \        V P                  P!                  4       4      pV F1  pS! V4      pVf   V P                  V4       K"  S! WqV,          4       K3  	  SP                  V 4       R# )	c               ó    € V ^8„  d   QhRRRR/# ro  r7   )r8   s   "r9   r:   ÚQReplacementPatternEntry.replace_with_graph.<locals>.replace.<locals>.__annotate__  s   € ÷ ?ñ ?¸Mð ?Èdñ ?r;   c                ó   <€ V S9  # r^   r7   )r¸   r©  s   &€r9   Ú!filter_nodes_in_newly_added_nodesÚfReplacementPatternEntry.replace_with_graph.<locals>.replace.<locals>.filter_nodes_in_newly_added_nodes  s   ø€ ð  Ð'>Ñ>Ð>r;   Nz(expected new to be None when old is Nonezexpected torch.fx.Node, got )Údelete_user_cbrä  ©r‹   )Ú	recomputeÚac_graph_idr±   )r‚   rQ   r“   r”   r$  rô  r‡  r  rö   r÷   r¬   r©   rž  r¥  r!   rÖ   rá   )r¿  rÀ  rÅ  Úargs_setr§  r­  Úold_usesÚuserÚidxr©  rY   rÜ   r¼  r‹   rµ  rW  s   &&       €€€€€€€r9   rW  Ú;ReplacementPatternEntry.replace_with_graph.<locals>.replace  s   ø€ ÷?ð ?ð
 ’;Ø’Ü,Ð-WÓXÐXÙÜ! #¤u§x¡x§}¡}×5Ò5Ü(Ð+GÌÈSË	À{Ð)SÓTÐTØ’;Ø×-Ñ-ØØ'Hð .ô ô ˜3Ÿ9™9“~¨Ô*Ø×(Ñ(¨Ô-ÙÜ˜c¤5§8¡8§=¡=×1Ò1Ü" 3§8¡8¨S¸I¿O¸OÈÕLô
 #)×"5Ò"5°dÓ";‘K�Hó %K˜Ø#§x¡xÖ/Ù*Ø #¨s¯x©x¸Õ/AÄ:ÈhÓCWöñ %Kð ×-Ñ-Øð .ô ô ˜3Ÿ9™9“~¨Ô*Ø×(Ñ(¨Ô-Ùô:   §	¡	§¡Ó 0Ó1�Û$�DÙ'¨Ó-�CØ’{ð ×1Ñ1°#Ö6á ¨#¥hÖ/ñ %ð × Ñ  Ö%r;   zexpected 1 output node, got N)r¿   r®   r“   r”   ÚInterpreterr   r  r‚   rÖ   rÜ   rQ   r$  ÚindexÚminr_  Ú
itemgetterr†  r¡  rô  rM  rD  rù   rô   rö   Ú	is_impurer  rT  ÚHigherOrderOperatorr÷   rõ   )rz  rÜ   rÐ   rY   r‹   r«  r   Ú	last_noder®   rø   ÚindicesrN  r¿  rÀ  r¸   r©  rÁ   r¼  rµ  rW  s   &f&ff          @@@@@r9   r  Ú*ReplacementPatternEntry.replace_with_graph‚  s…  ÿ€ ð 8:ÐÜ/°·±Ó<ˆ÷@	?ò @	?”u—x‘x×+Ñ+ô @	?ðD ×)Ñ)Ó+ˆäˆ|Ó Ô!Ø$ Q�‰Ià —?”?Ü$Ð%?Ó@Ð@Ü˜ a�×.Ñ.×4Ñ4Ó5ˆEñ &óá%�AÜ˜a¤§¡§¡×/ô $�—‘˜Q“ Ó#Ù%ð ð ô
 ˜G¬×)<Ò)<¸QÓ)?Ô@ÀÕCˆIõ	6ð( ×#Ñ# I×.Õ.ÜÐ/´·±×1EÑ1E×FÒFÜ$Ø0´Ð6GÓ1HÐ0IÐJóð ñ #Ð#4Ó5×9Ò9¸4Ñ@ˆKÜ˜+¤u§x¡x§}¡}×5Ò5Ø*˜m�õ$÷T&ö T&ôl �<Ó ¤C¨Ó$4Ô4Ü # LÖ >‘H�CÙ˜CÖ%ò !?ô �|Ó$¨Ô)Ü(Ø6´s¸<Ó7HÐ6IÐJóð ñ ˜ Q�¨Ô5÷a /ðd 	×ÑÔô Ð4Ö5ˆDà—J—J’JØŸ™×(Ô(Ü" 4§;¡;´·
±
×0NÑ0N×OÔOà× Ñ  Ö&ñ 6ñ "9ÓMÑ!8˜ÇÅ—�Ñ!8ÑMÐMùòs÷6 /×.üò| Ns%   Â7,LÃ(LÅDLË0L)ÌL)ÌL&	c               ó(   € V ^8„  d   QhRRRRRRRR/# rm  r7   )r8   s   "r9   r:   r“  v  s)   € ÷ 	
ñ 	
˜5ð 	
¨ð 	
¸}ð 	
ÐQUñ 	
r;   c           
     	óè   € VP                   f   \        R4      hT P                  TTVP                   V P                  ! VP                  / VP
                  B V P                  ;'       g    RR7       R # )Nzmatch.replacement_graph is Noner  rÈ  )rÐ   r‚   r  r�  rY   rZ   r‘  rp  s   &&&&r9   rq  ÚReplacementPatternEntry.applyv  si   € Ø×"Ñ"Ò*Ü Ð!BÓCÐCØ×ÑØØØ×#Ñ#Ø×Ò §¡Ð<¨u¯|©|Ñ<Ø×'Ñ'×?Ð?Ð+?ð 	 ö 	
r;   r7   r^   )rV   rd   re   rf   rR  rg   r‘  rÔ  r  rq  rh   r7   r;   r9   r  r  y  s:   ‡ ñð -Ó,Ø#€L�*Ó#àöqNó ðqN÷f	
ñ 	
r;   r  c               ó    € V ^8„  d   QhRRRR/# ©r2   rz  rÈ   r5   r6   r7   )r8   s   "r9   r:   r:   ‚  s   € ÷ ñ ˜ð  $ñ r;   c                ó   € R # ©Tr7   )rz  s   &r9   Ú_return_truerà  ‚  s   € Ùr;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   Ú	search_fnr  r�  r\  r5   r}   r7   )r8   s   "r9   r:   r:   †  s"   € ÷ ñ Ð!3ð ¸ð Èñ r;   c                óH   € \         P                  R V P                  V4       R# )z@Replacement pattern %s failed to apply due to shape mismatch: %sN)ÚlogÚinforV   )râ  r�  s   &&r9   Úlog_trace_failureræ  †  s   € Ü‡H�HØJØ×ÑØ	ör;   T)Úfrozenc                  ó@   € ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R	tR
# )Ú_TraceArgInfoiŽ  ú	list[str]ÚargnamesÚflat_argnamesrˆ   Ú	arg_specszdict[str, list[str]]Úarg_flat_namesr7   N©rV   rd   re   rf   rg   rh   r7   r;   r9   ré  ré  Ž  s   ‡ àÓØÓØÓØ(×(r;   ré  c               ó$   € V ^8„  d   QhRRRRRR/# )r2   r&  r4   Ú
used_namesúOrderedSet[str]r5   r7   )r8   s   "r9   r:   r:   –  s!   € ÷ 
ñ 
˜#ð 
¨?ð 
¸sñ 
r;   c                óš   € W9  d   VP                  V 4       V # ^ pV  RV 2V9   d   V^,          pK  V  RV 2p VP                  V 4       V # )r�   r§  )rÈ  )r&  rñ  r¾  s   && r9   Ú_unique_argnamerô  –  sY   € ØÔØ�‰�tÔØˆà	€AØˆF�!�A�3ˆ-˜:Ô
%Ø	ˆQ�ŠØˆV�1�Q�Cˆ=€DØ‡N�N�4ÔØ€Kr;   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r2   rë  úSequence[str]Úexample_inputsr
  Úscalar_workaroundzdict[str, float | int]r5   rË   r7   )r8   s   "r9   r:   r:   £  s0   € ÷ ñ Øðà!ðð .ðð ñ	r;   c                óž   € . p^ pV  FB  pWR9   d   VP                  W%,          4       K"  VP                  W,          4       V^,          pKD  	  V# r  )r¦   )rë  r÷  rø  Ú
trace_argsÚ	input_idxÚargnames   &&&   r9   Ú_trace_args_for_initial_tracerý  £  sR   € ð
 €JØ€IÛˆØÔ'Ø×ÑÐ/Õ8Ö9à×Ñ˜nÕ7Ô8Ø˜�NŠIñ ð Ðr;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   rë  rö  rY   r
  r5   ré  r7   )r8   s   "r9   r:   r:   ³  s!   € ÷ ñ ˜mð °=ð À]ñ r;   c           	     óª  € . p/ p/ p\        4       p\        W4       F˜  w  rg\        P                  ! V4      w  r‰W“V&   \	        V4      ^ 8X  d   . p
MO\	        V4      ^8X  d   \        We4      .p
M2\        \	        V4      4       Uu. uF  p\        V RV 2V4      NK  	  p
pVP                  V
4       W¤V&   Kš  	  \        \        V 4      VVVR7      # u upi )r�   r§  )rë  rì  rí  rî  )
r!   rD  rž  r¥  r  rô  Úrangerã   ré  rÖ   )rë  rY   rì  rí  rî  rñ  rü  r)  Ú	flat_argsr�  Únamesr¾  s   &&          r9   Ú_trace_arg_infor  ³  sæ   € Ø!€MØ "€IØ+-€NÜ",£,€Jä˜HÖ+‰ˆÜ ×-Ò-¨cÓ2‰ˆ	Ø!�'ÑÜˆy‹>˜QÔØ!‰EÜ�‹^˜qÔ Ü$ WÓ9Ð:‰Eô œs 9›~Ô.óá.�Aô   7 )¨1¨Q¨CÐ 0°*Ö=Ù.ð ð ð 	×Ñ˜UÔ#Ø"'�wÓñ ,ô Ü�h“Ø#ØØ%ô	ð ùòs   ÂCc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r2   rZ   úMapping[str, Any]Úarg_inforé  ÚdefaultszMapping[str, Any] | Noner5   rˆ   r7   )r8   s   "r9   r:   r:   Ð  s0   € ÷ !ñ !Øð!àð!ð 'ð!ð ñ	!r;   c                óJ  € \        V 4      p / pVP                   Fê  pVP                  V,          pV Uu. uF  qfV 9   g   K  VNK  	  pp\        V4      \        V4      8w  dO   Ve   WB9   d   V'       g   W$,          W4&   Kf  V Uu. uF  qfV 9  g   K  VNK  	  pp\	        RV RV RV RV  24      h. p	V F#  pV	P                  V P                  V4      4       K%  	  \        P                  ! W‘P                  V,          4      W4&   Kì  	  VP                  V 4       V# u upi u upi )Nz^Not all inputs to pattern found in match.kwargs. Perhaps one of the inputs is unused? argname=z, flat_argnames=z, missing_argnames=z, match.kwargs=)rt  rë  rî  r  r\  r¦   r6  rž  Útree_unflattenrí  r¨   )
rZ   r  r  rÞ  rü  Ú
flat_namesÚ	flat_nameÚfound_namesÚmissing_namesÚflat_valuess
   &&&       r9   Ú_unflatten_match_kwargsr  Ð  s;  € ô
 �&‹\€FØ€Fà×$Ô$ˆØ×,Ñ,¨WÕ5ˆ
Ù2<ÓT±* YÈVÑ@S—y�y±*ˆÐTÜˆ{Óœs :›Ô.ØÒ#¨Ô(;ÇKØ"*Õ"3�‘Ùá+5óÙ+5˜iÈ&Ñ9P—	�	©:ð ð ô ð4Ø4;°9ð =!Ø!+ Ð,?À¸ð O Ø &˜xð)óð ð ˆÛ#ˆIØ×Ñ˜vŸz™z¨)Ó4Ö5ñ $ä ×/Ò/Ø×+Ñ+¨GÕ4ó
ˆ‹ñ) %ð0 ‡M�M�&ÔØ€Mùò/ Uùò
s   ´DÁDÂD ÂD c               ó    € V ^8„  d   QhRRRR/# r˜  r7   )r8   s   "r9   r:   r:   ô  s   € ÷ &ñ & ð &°#ñ &r;   c                óp   € R V P                   9   d   V P                   R ,          # V P                   R,          # r0  r-  r»  s   &r9   Ú_get_match_node_valuer  ô  s,   € Ø�—	‘	ÔØ�y‰y˜ÕÐØ�9‰9�_Õ%Ð%r;   Fc          
     ó,   € V ^8„  d   QhRRRRRRRRR	R/# )
r2   rÊ   rÉ   rÜ   ztorch.fx.Graph | NoneÚseen_patternszdict[str, list[str | None]]Úskip_duplicatesr6   r5   r7   )r8   s   "r9   r:   r:   ú  s:   € ÷ 'ñ 'Øð'à ð'ð /ð'ð ð	'ð
 
ñ'r;   c                ó¼  aa€ \         P                  V 4      oVP                  S4      pV'       g.   VS,          P                  V'       d   \	        V4      MR4       R# Vf&   V'       d   R# \
        P                  ! RV3R l4       \	        V4      pV F3  oVS8w  d   K  V'       d    R# \
        P                  ! RVV3R l4       K5  	  VP                  V4       R# )a.  
Check if a pattern is a duplicate. Because we ignore certain types in searching, but not
in matching, use the graph to distinguish equivalent search patterns.

Returns True if a duplicate is found and `skip_duplicates=True` is passed in. Errors if
`skip_duplicates` is False and a duplicate is found.
NFTc                 ó   <€ R S  R2# )úDuplicate pattern: z with no graphr7   )Úpattern_reprs   €r9   r*  Ú1check_and_add_duplicate_pattern.<locals>.<lambda>  s   ø€ Ð)¨,¨°~ÑFr;   c                 ó   <€ R S RS  R2# )r  z with duplicated match graph Ú r7   )Ú	graph_strr  s   €€r9   r*  r    s   ø€ Ð)¨,¨Ð7TÐU^ÐT_Ð_`Ñar;   )rº  rM  rM   r¦   r4   r“   Ú_check)rÊ   rÜ   r  r  Úequiv_pattern_reprsÚnew_graph_strr  r  s   &&&&  @@r9   Úcheck_and_add_duplicate_patternr!  ú  s¯   ù€ ô (×+Ñ+¨GÓ4€LØ'×+Ñ+¨LÓ9ÐßØ�lÕ#×*Ñ*¿¬3¨u¬:ÀDÔIÙà‚}ßÙÜ�ŠØÜFô	
ô
 ˜“J€MÛ(ˆ	Ø˜IÔ%ÙßÚÜ�ŠØÝaö	
ñ )ð ×Ñ˜}Ô-Ùr;   c               óL   € V ^8„  d   Qh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R/# )r2   râ  rU   Ú
replace_fnrj   r÷  zlist[Any] | tuple[Any, ...]r  rq   rt  ru  rk  rj  rø  údict[str, float | int] | NoneÚexclusive_arg_namesrö  Úsearch_fn_patternzPatternExpr | Noner  r6   r‘  r/   Úget_decomp_fnú,Callable[..., dict[Any, Callable[..., Any]]]r5   r7   )r8   s   "r9   r:   r:   $  sš   € ÷ Hñ HØðHàðHð 0ðHð ð	Hð
 :ðHð )ðHð 5ðHð 'ðHð *ðHð ðHð ðHð @ðHð 
ñHr;   c                óÞ  a aaaaaaaaaa€ . \         P                  ! S 4      P                  P                  4       Oo\         P                  ! S 4      '       d   \        S S4      o \         P                  ! S4      '       d=   . \         P                  ! S4      P                  P                  4       Op\        SV4      o\        V\        \        34      '       g   \        R\        V4       24      hS;'       g    / o\        SVS4      p\        SV4      o\        P                  ! R V4      oR VVVVVVVVV VV3R llpR VV3R llpS\        J d   \         P"                  ! 4       '       d   R# \$        P&                  ! RR7      ;_uu_ 4        Sf   \)        S VSSSSR
7      w  ppMSpR	p\        V\*        4      '       d   TMV. FY  p\        V\,        4      '       g   K  \/        TV'       d   VP0                  MR	VP2                  V	R7      '       g   KP   R	R	R	4       R# 	  \5        VVVV
R7      pVP7                  V4       VP8                  uuR	R	R	4       #   + '       g   i     R	# ; i)aç  
Create a replacement rule based on example functions that get traced
to create patterns.  This supports both training and inference when
run on a joint forward+backward graph.

Args:
    search_fn: traced to give original pattern
    replace_fn: traced to give replacement graph
    example_inputs: example inputs for initial trace
    trace_fn: fwd_only or joint_fwd_bwd
    pass_dict: dict of passes to register to
    extra_check: additional check to run on match(using real shapes)
z,example_inputs must be a list or tuple, got c                ó^   € \        V \        P                  4      ;'       d    V P                  # r^   )rQ   r“   rÒ  rÖ  )rƒ  s   &r9   r*  Ú&register_replacement.<locals>.<lambda>R  s   € ”*˜Q¤§¡Ó-×AÐA°!·/±/ÐAr;   c               ó    € V ^8„  d   QhRRRR/# rÝ  r7   )r8   s   "r9   r:   Ú*register_replacement.<locals>.__annotate__V  s   € ÷ [ñ [˜ð [ $ñ [r;   c                óø  <aaaa€ \        V P                  S4      p\        \        P                  P                  S Uu. uF  q!V,          NK  	  up\        4      4      o. o\        P                  P                  P                  S4      pVf   \        R4      hT;_uu_ 4        Ro\        \        P                  ! S4      4      oR VVV3R llp\        P                  ! VS4      oS'       d    RRR4       R# S p\        SS4      pVP                   pV'       Eg{   S'       EdW   R VV3R llp S!! VSS,           SR7      p	. pT	P&                  P(                   Uu. uF  qÌP*                  R	8X  g   K  TNK  	  pp\-        TR\/        S4      \/        T4      ,            4       FÌ  w  rïT\/        S4      8  d   TP1                  TP2                  4       K2  T	P&                  P5                  T4      ;_uu_ 4        T	P&                  P7                  Y~\/        S4      ,
          ,          4      pTP8                  Tn        TP;                  T4       T	P&                  P=                  T4       RRR4       KÎ  	  Y·,           pM S!! SSSR7      p	\?        T	TSSR
7      pV PA                  4       ^ ,          pVf   \        R4      hVPC                  V4      p\E        VP8                  4      '       d$   \F        PI                  RVVPJ                  VV4       \M        V4      '       d   \        VP                  VVR7      Vn        \M        V4      '       dš   S! V4      '       dŒ   S!! SSSR7      V n'        Wn        \/        V P(                  4      ^8X  dQ   V PN                  P&                  P(                   F,  p\Q        VPR                  V P(                  ^ ,          RR7       K.  	   RRR4       R#  RRR4       R# u upi   \"         d    p
\%        ST
4        Rp
?
RRR4       R# Rp
?
ii ; iu upi   + '       g   i     EK•  ; i  \"         d    p
\%        ST
4        Rp
?
RRR4       R# Rp
?
ii ; i  + '       g   i     R# ; i)z�
Often shapes get burned into the pattern, so our initial match ran with
`ignore_types=(int, ...)`.

Recheck the match with the correct shapes.
Nzfake_mode is NoneFc               ó    € V ^8„  d   QhRRRR/# )r2   r)  r   r5   r7   )r8   s   "r9   r:   Ú<register_replacement.<locals>.check_fn.<locals>.__annotate__p  s   € ÷ %ñ % ð %¨ñ %r;   c                óž  <a€ \        S4      p\        V \        P                  4      '       g   V # V'       d    \	        V P
                  4      '       d   R oV # \        P                  ! V P                  4       V P                  4       V P
                  V P                  VR7      p\        P                  ! VP                  VP                  4       4       Fx  o\        S\        P                  4      '       g   K%  \        ;QJ d    V3R lS 4       F  '       d   K   RM	  R M! V3R lS 4       4      '       g   Kg  SP                  S4       Kz  	  V# )T)rÇ  rÔ  rÖ  c              3  ó@   <"  € T F  p\        SV8g  4      x € K  	  R # 5ir^   )r   )r˜   rÃ  rš   s   & €r9   r›   ÚNregister_replacement.<locals>.check_fn.<locals>.refresh_arg.<locals>.<genexpr>‚  s!   øé € ð ;Ù?G¸!Ô-¨a°1©f×5Ð5»xùs   ƒF)r  rQ   r“   rÒ  r   rÇ  Úempty_stridedÚsizerØ  rÔ  r…  r†  rÓ  ÚSymIntrE   r¦   )r)  ÚgradÚrefreshed_argrš   Úinvalid_argsÚrequires_grad_valuesÚsym_argss   &  @€€€r9   Úrefresh_argÚ;register_replacement.<locals>.check_fn.<locals>.refresh_argp  sï   ù€ äÐ0Ó1�Ü! #¤u§|¡|×4Ò4Ø�JçÔ,¨S¯Y©Y×7Ò7Ø#'�LØ�Jä %× 3Ò 3Ø—H‘H“JØ—J‘J“LØŸ)™)ØŸ:™:Ø"&ô!�ô #Ÿš¨×)<Ñ)<¸m×>RÑ>RÓ>TÖU�AÜ! !¤U§\¡\×2Ô2·s³sô ;Ù?Gó;·s·s²sô ;Ù?Gó;÷ 8ô 8ð !Ÿ™¨Ö*ñ	 Vð
 %Ð$r;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   Úargs_newr   r§  r5   r7   )r8   s   "r9   r:   r0  œ  s&   € ÷ Qñ Q°ð Q¸3ð QÀ3ñ Qr;   c                 óH   <€ S! V \        V 4      \        S4      ,
          R  !  # r^   )r  )r?  r§  rY   râ  s   *,€€r9   Úsearch_fn_newÚ=register_replacement.<locals>.check_fn.<locals>.search_fn_newœ  s#   ø€ Ù(¨(´3°x³=Ä3ÀtÃ9Õ3LÐ3NÐ*OÑPÐPr;   ©r'  r›  )rë  r%  rø  zoutput node is Nonez"Specific pattern match: %s%s %s %s)r  rN  r9  T)*r  rZ   rÖ   r“   r”   rC  r  rE  r@  rF  r‚   Úiterrž  Útree_leavesrB  r  rì  r\  ræ  rÜ   r®   r  rÿ  r  r¦   r  Úinserting_afterr›  r&  r‡  r÷   Úfx_to_patternr   rz  rS   rä  ÚwarningrY   rm  rÐ   r¬   r©   )"rz  Ústructured_match_kwargsr&  r5  r<  Úspecific_patternÚspecific_arg_infoÚspecific_argnamesrA  Úspecific_graphr�  Úsym_arg_namesrø   Úplaceholdersr¾  r›  rO  r¸   Úspecific_pattern_matchrY   r9  r:  r;  Úargnames_staticr%  rk  r'  Úinitial_arg_infor#  rÖ  rø  râ  r&  r  s"   &                  @@@@€€€€€€€€€€€r9   Úcheck_fnÚ&register_replacement.<locals>.check_fnV  sû  ü€ ô #:Ø�L‰LÐ*ó#
Ðô Ü�H‰H×ÑÙ;JÓK¹?°4¨×.Ð.¹?ÑKÜ%óó
ˆð (*ˆÜ—M‘M×'Ñ'×8Ñ8¸Ó>ˆ	ØÒÜ Ð!4Ó5Ð5ßŠYØ ˆLÜ#'¬×(:Ò(:¸=Ó(IÓ#JÐ ÷%ò %ô0 —?’? ;°Ó5ˆDßØ÷= ‰YðF  1ÐÜ /°ÀÓ FÐØ 1× ?Ñ ?Ðç#Ð#ß�8÷Qñ Qð%Ù)1Ø)Ø$ t�OØ*7ô*˜ð %'�Mà#1×#7Ñ#7×#=Ò#=ó$Ù#=˜aÇÁÈÑAVŸ˜Ñ#=ð !ð $ô +4Ø$Ð%M¤s¨8£}´sÐ;LÓ7MÕ'MÐNö+™˜ð œs 8›}Ô,Ø)×0Ñ0°×1CÑ1CÔDÙ$à+×1Ñ1×AÑAÀ+×NÕNØ'5×';Ñ';×'GÑ'GØ 1´c¸(³mÕ2CÕ Dó(˜Hð /7¯m©m˜HœOØ'×=Ñ=¸hÔGØ*×0Ñ0×;Ñ;¸KÔH÷ OÑNñ+ð )6Õ(IÑ%ð%Ù)1Ø% t¸=ô*˜ô $1Ø"Ø.Ø(;Ø&7ô	$Ð ð ×%Ñ%Ó'¨Õ*ˆDØŠ|Ü$Ð%:Ó;Ð;Ø%5×%;Ñ%;¸DÓ%AÐ"ä! $§)¡)×,Ò,Ü—‘Ø8ØØ—I‘IØ*Ø$ôô Ð.×/Ò/Ü0GØ*×1Ñ1Ø%Ø4ô1Ð&Ô-ô Ð.×/Ò/±KÐ@V×4WÒ4Wá*2Ø °Mô+�Ô'ð  7”Ü�u—{‘{Ó# qÔ(Ø"×4Ñ4×:Ñ:×@Ô@˜Ü&Ø%&§V¡VØ%*§[¡[°¥^Ø&3÷ñ Að ÷I ‰YðJ ÷K ‰Yùò LøôD (ô %Ü)¨)°QÔ7Û$÷w ‰Yûðr%üò$÷ O×NÑNûô (ô %Ü)¨)°QÔ7Û$÷s ‰Yûðn%ú÷o �YˆYús¬   ¾O/Â#AQ(Ã:+Q(Ä&
Q(Ä1O4ÅQ(ÅP!Å4P!Å:A>Q(Ç8A/P&É'Q(É=P;ÊCQ(ÍBQ(Ï$Q(Ï4PÏ?PÐQ(ÐPÐQ(Ð&P8Ð1
Q(Ð;Q%ÑQ ÑQ(Ñ Q%Ñ%Q(Ñ(Q9	c               ó    € V ^8„  d   QhRRRR/# )r2   rZ   r   r5   rË   r7   )r8   s   "r9   r:   r-  ó  s   € ÷ ñ  ð ¨ñ r;   c                 ó  <a € \         ;QJ d    V 3R  lS 4       F  '       d   K   RM	  RM! V 3R  lS 4       4      '       g   \        S S4      o S Uu. uF  pS P                  V4      NK  	  pp. pV F(  pVP                  \        P
                  ! V4      4       K*  	  \        ^\        S 4      ^,           4       F2  pRV 2S 9  d    M'VP                  S P                  RV 24      4       K4  	  S '       d   \        RS : 24      hV# u upi )c              3  ó,   <"  € T F	  qS9   x € K  	  R # 5ir^   r7   )r˜   r&  rZ   s   & €r9   r›   Ú?register_replacement.<locals>.normalize_args.<locals>.<genexpr>ö  s   øé € Ð>©o d˜6–>«oùs   ƒFTÚ	tangents_zleftover kwargs: )
rE   r  r6  rã   rž  rE  r   r  r¦   r‚   )rZ   r&  Ústructured_argsrY   r)  r¾  rQ  rR  s   l     €€r9   r�  Ú,register_replacement.<locals>.normalize_argsó  sÞ   ù€ ÷ ‹sÔ>©oÓ>�s�sŠsÔ>©oÓ>×>Ò>Ü,¨VÐ5EÓFˆFÙ8GÓH¹°˜6Ÿ:™: dÖ+¹ˆÐHØˆÛ"ˆCØ�K‰Kœ×*Ò*¨3Ó/Ö0ñ #ä�qœ#˜f›+¨�/Ö*ˆAØ˜1˜#ˆ fÔ,ÙØ�K‰K˜Ÿ
™
 Y¨q¨c ?Ó3Ö4ñ +÷ Ü Ð#4°V±JÐ!?Ó@Ð@Øˆùò Is   ÁD
F©Úfunctionalize_rng_opsNrC  )r  )rÊ   rk  r�  r‘  )ÚinspectÚ	signatureÚ
parametersrá   ÚismethodÚ_wrap_bound_methodrQ   rÖ   rç   rÚ  rô  rý  r  rž  rB  Újoint_fwd_bwdr“   Úis_inference_mode_enabledÚfunctorch_configÚpatchÚgen_pattern_and_search_gmr   rz  r!  rÜ   r  r  ry  rÊ   )râ  r#  r÷  r  rt  rk  rø  r%  r&  r  r‘  r'  Úreplace_argnamesÚinitial_trace_argsrS  r�  rÊ   ÚgmÚpattern_matcher_passrQ  rR  rÖ  s   ff&f&ffff&&f       @@@r9   Úregister_replacementrl  $  s'  ÿú€ ð6 Hœ×)Ò)¨)Ó4×?Ñ?×DÑDÓFÐG€Oä×Ò˜	×"Ò"Ü& y°/ÓBˆ	ä×Ò˜
×#Ò#ØMœW×.Ò.¨zÓ:×EÑE×JÑJÓLÐMÐÜ'¨
Ð4DÓEˆ
ä�n¤t¬U m×4Ò4ÜØ:¼4ÀÓ;OÐ:PÐQó
ð 	
ð *×/Ð/¨RÐÜ6Ø˜Ð):óÐô ' Ð8JÓKÐÜ—O’OÙAØó€M÷
[÷ [ò [÷zñ ð" ”=Ó ô ×*Ò*×,Ò,Ùô 
×	Ò	°e×	<Ö	<ØÒ$Ü3ØØØØ!Ø#Ø+ô‰KˆG‘Rð (ˆGØˆBô % Z´×:Ò:‰JÀÀÒLð !ô Ð.Ô0B×CÔCÜ2Øß "�B—H’H¨Ø(×6Ñ6Ø$3÷	õ ð !÷1 
=Ñ	<ñ Mô *ØØ Ø)Ø%ô	
ˆð 	×Ñ˜Ô$Ø�‰÷C 
=×	<×	<Ó	<ús   ÆAIÇ#0IÈIÈ#-IÉI,	rò  Ú_serialized_patternsc               ó0   € V ^8„  d   QhRRRRRRRRR	R
RR/# )r2   Úunique_namer4   râ  rU   r÷  r
  r  rq   rø  r$  r5   rÉ   r7   )r8   s   "r9   r:   r:   2  sL   € ÷ Kñ KØðKàðKð "ðKð ð	Kð
 5ðKð ñKr;   c                ó°  € R  R lp\         P                  4       '       g   \        R\          24      hTP                  p^ RIHp VP                  ! RR7      ;_uu_ 4        \        WW44      pRRR4       \        P                  XV R7      p	V\        9  d   Rp
\        P                  V4       MR	p
V! 4       p\        \         V R
2,          V
4      ;_uu_ 4       pV
R8X  d   VP                  V4       MVP                  R4       VP                  V	4       VP                  R4       RRR4       V#   + '       g   i     LÌ; i  + '       g   i     T# ; i)c               ó   € V ^8„  d   QhRR/# rë   r7   )r8   s   "r9   r:   Ú(_serialize_pattern.<locals>.__annotate__9  s   € ÷ %5ñ %5˜sñ %5r;   c                 ó  € \         P                  ! R 4      p \         P                  ! R4      P                  V R7      p. p\        \        P
                  P                  4       Fo  p\        \        P
                  P                  V4      p \        V\        4      '       d2   \        V\        \        34      '       d   VP                  V4       Km  Ko  Kq  	  RP                  V4      pRV R2pV V 2#   \         d     Kž  i ; i)zÁ            # This is an auto-generated file. Please do not modify it by hand.
            # To re-generate, run:
            # cd ~/pytorch && python torchgen/fuse/gen_patterns.py
            zÝ            # noqa: F401, E501
            {msg}
            import torch
            import torch._inductor
            import operator

            aten = torch.ops.aten
            prims = torch.ops.prims

            )Úmsgz,
   z1from torch._inductor.pattern_matcher import (
   z,
)
)ÚtextwrapÚdedentr8   Údirr“   Ú	_inductorÚpattern_matcherr^  rQ   rô  Ú
issubclassrÉ   rM  r¦   rÚ  rë  )Úauto_generated_msgÚfile_templateÚpattern_matcher_importsr&  ÚattrÚformatted_importss         r9   Úget_file_templateÚ-_serialize_pattern.<locals>.get_file_template9  sý   € Ü%Ÿ_š_ðó
Ðô !Ÿšð
ó
÷ ‰&Ð'ˆ&Ó
(ð 	ð #%ÐÜœŸ™×7Ñ7Ö8ˆDÜœ5Ÿ?™?×:Ñ:¸DÓAˆDðÜ˜d¤D×)Ò)¬jØœ;¬Ð4÷/ò /ð ,×2Ñ2°4Ö8ñ	/Ñ)ñ 9ð %ŸM™MÐ*AÓBÐØPÐQbÐPcÐciÐjÐØ�Ð!2Ð 3Ð4Ð4øô ô Úðús   Â
AC2Ã2DÄ Dz0Could not find serialized patterns directory at r"   Fr\  N)rH  ÚwrÃ  z.pyz

rJ  )ÚSERIALIZED_PATTERN_PATHÚis_dirr\  rV   Útorch._functorchr#   rf  Úgen_patternrº  rM  rm  rÈ  ÚopenÚwrite)ro  râ  r÷  r  rø  r€  r‘  re  rÊ   Úserialized_patternÚ
write_moder|  Úfs   &&&&&        r9   Ú_serialize_patternrŒ  2  s  € õ%5ôN #×)Ñ)×+Ò+ÜØ>Ô?VÐ>WÐXó
ð 	
ð ×%Ñ%€Lå;à	×	Ò	°e×	<Ö	<Ü˜i¸ÓUˆ÷ 
=ô .×1Ñ1°'À{Ð1ÓSÐØÔ/Ô/Øˆ
Ü× Ñ  Õ.àˆ
á%Ó'€Mä	Ô%¨<¨.¸Ð(<Õ<¸j×	IÔ	IÈQØ˜ÔØ�G‰G�MÕ"à�G‰G�FŒOØ	�‰Ð"Ô#Ø	�‰�Œ÷ 
Jð €N÷) 
=×	<ú÷ 
JÖ	Ið €Nús   Á D1ÃAEÄ1E	ÅE	Ú	fx_passesÚserialized_patternsc                  óJ   € ] tR tRt$ R]R&   R]R&   R]R&   R]R	&   R
]R&   RtR# )Ú_PrecompiledPatterni†  rU   râ  r
  r÷  rq   r  r$  rø  rÉ   r&  r7   Nrï  r7   r;   r9   r�  r�  †  s    ‡ àÓØ!Ó!ØÓØ4Ó4Ø"×"r;   r�  zlist[_PrecompiledPattern]Ú_known_precompiled_patternsc               óH   € V ^8„  d   QhRRRRRRRRR	R
RRRRRRRRRRRRRR/# )r2   ro  r4   râ  rU   r#  rj   r÷  zIterable[Any]r  rq   rt  ru  rk  rj  rø  r$  r%  rö  r  r6   r'  r(  r5   r}   r7   )r8   s   "r9   r:   r:   ’  s�   € ÷ 9ñ 9Øð9àð9ð ð9ð "ð	9ð
 ð9ð :ð9ð )ð9ð 5ð9ð 'ð9ð ð9ð @ð9ð 
ñ9r;   c                ó$  € \        V4      pR \        P                  9   d   \        WW4V4      pM_VP                  p\
        P                  ! RV 24      pV'       d   \        WÐ4      '       g   \        P                  RV 4       \        WÐ4      p\        P                  ! V4       F1  p\        V\        4      '       g   K  \        V4      f   K*  RVn        K3  	  \"        P%                  \'        WWGV4      4       \)        VVVVVVVVVV	V V
R7       R# )ÚPYTORCH_GEN_PATTERNSz.torch._inductor.fx_passes.serialized_patterns.zDPrecompiled pattern %r not found. Run torchgen/fuse/gen_patterns.py.N)r&  r  r‘  r'  )rç   rK   rL   rŒ  rV   Ú	importlibÚimport_modulerK  rä  rH  r^  rž  Ú	tree_iterrQ   r'   r   r÷  r‘  r¦   r�  rl  )ro  râ  r#  r÷  r  rt  rk  rø  r%  r  r'  Úpatr‘  rj  r)  s   &&&&&&&&&&&    r9   Úgen_register_replacementr™  ’  s  € ô ˜>Ó*€Nà¤§¡Ô+Ü Ø NÐ>Oó
‰ð !×)Ñ)ˆÜ×#Ò#Ø<¸\¸NÐKó
ˆ÷ œ ×/Ò/Ü�K‰KØVØôô �aÓ%ˆä×Ò Ö/ˆÜ�cœ:×&Ô&Ô+BÀ3Ó+GÔ+Sð  ˆCŽLñ 0ô  ×&Ñ&Ü˜I°xÐTWÓXôô ØØØØØØØØØØ'Ø Ø#÷r;   r\  c               ó4   € V ^8„  d   QhRRRRRRRRR	R
RRRR/# )r2   râ  rU   r÷  r
  r  rq   rø  r$  r%  rö  r'  r(  r5   z(tuple[PatternExpr, torch.fx.GraphModule]r7   )r8   s   "r9   r:   r:   Ï  sO   € ÷ ñ Øðà!ðð ðð 5ð	ð
 'ðð @ðð .ñr;   c                óN  € . \         P                  ! V 4      P                  P                  4       OpT;'       g    / p\	        WaV4      p\        Wg4      pV! WVR 7      p	\        V	\        \        \        \        P                  \        P                  3VP                  VVR7      V	3# )rC  )Úignore_typesrë  rø  r%  )r^  r_  r`  rá   rý  r  rG  Úintræ  rÖ   r“   rÔ  rÇ  rì  )
râ  r÷  r  rø  r%  r'  rë  Úflat_inputsr  Ú	search_gms
   &&&&&&    r9   rg  rg  Î  sž   € ð A”×"Ò" 9Ó-×8Ñ8×=Ñ=Ó?Ð@€Hà)×/Ð/¨RÐÜ/ØÐ"3ó€Kô ˜xÓ5€Há˜¸}ÔM€IäØÜœu¤d¬E¯L©L¼%¿+¹+ÐFØ×+Ñ+Ø/Ø 3ô	
ð 	ð	ð 	r;   c               ó0   € V ^8„  d   QhRRRRRRRRR	R
RR/# )r2   râ  rU   r÷  r
  r  rq   rø  r$  r%  rö  r5   rÉ   r7   )r8   s   "r9   r:   r:   ì  sD   € ÷ 		ñ 		Øð		à!ð		ð ð		ð 5ð			ð
 'ð		ð ñ		r;   c                ó*   € \        WW#V4      ^ ,          # r  )rg  )râ  r÷  r  rø  r%  s   &&&&&r9   r†  r†  ì  s!   € ô %Ø 8Ð@Sóàõ	ð 	r;   rv  Ú%output_metadata_ignores_input_storageÚoutput_metadata_is_inputÚoutput_metadata_fnc               ó8   € V ^8„  d   QhRRRRRRRRR	RR
RRRRR/# )r2   rÊ   rÉ   rk  rj  Ú	pass_dictr`  rv  r6   r¢  r£  zint | str | Noner¤  zCallable[..., Any] | Noner5   ú2Callable[[Callable[..., Any]], Callable[..., Any]]r7   )r8   s   "r9   r:   r:   ø  sX   € ÷  ñ  Øð à(ð ð ð	 ð
 ð ð ,0ð ð /ð ð 2ð ð 8ñ r;   c               ó2   a aaaaaa€ R VVVVVV V3R llpV# )z«
Register an aten to inductor IR replacement pattern.  The decorated
function is saved and then called at lowering time allowing direct
pattern to inductor IR conversion.
c               ó    € V ^8„  d   QhRRRR/# ©r2   r€  r  r5   r7   )r8   s   "r9   r:   Ú/register_lowering_pattern.<locals>.__annotate__	  s   € ÷ ñ Ð-ð Ð2Dñ r;   c                ó¼   <€ \        V 4      '       g   \        R V  24      h\        SSV R7      P                  SSR7       RV n        SV n        SV n        SV n        V # )úexpected callable handler, got ©rÊ   rk  r€  rx  T)rS  r‚   r~  ry  Ú_inductor_lowering_functionÚ8_inductor_lowering_output_metadata_ignores_input_storageÚ+_inductor_lowering_output_metadata_is_inputÚ%_inductor_lowering_output_metadata_fn)r€  rk  r¤  r¢  r£  r¦  rÊ   rv  s   &€€€€€€€r9   Ú	decoratorÚ,register_lowering_pattern.<locals>.decorator	  sn   ø€ Ü˜× Ò Ü Ð#BÀ7À)Ð!LÓMÐMÜØ¨¸gô	
ç
‰(�9 gˆ(Ô
.Ø.2ˆÔ+à1ð 	ÔHð %ð 	Ô;ð 9KˆÔ5Øˆr;   r7   )rÊ   rk  r¦  rv  r¢  r£  r¤  r³  s   ffddddd r9   Úregister_lowering_patternrµ  ø  s   þ€ ÷ ö ð  Ðr;   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r2   rÊ   rÉ   rk  rj  r¦  r`  rv  r6   r5   r§  r7   )r8   s   "r9   r:   r:   	  s:   € ÷ ñ Øðà(ðð ð	ð
 ðð 8ñr;   c               ó&   a aaa€ R VVV V3R llpV# )z_
Register a pattern that runs a function on the FX graph, allowing
custom transformation code.
c               ó    € V ^8„  d   QhRRRR/# rª  r7   )r8   s   "r9   r:   Ú,register_graph_pattern.<locals>.__annotate__'	  s   € ÷ ñ Ð-ð Ð2Dñ r;   c                ó„   <€ \        V 4      '       g   \        R V  24      h\        SSV R7      P                  SSR7       V # )r­  r®  rx  )rS  r‚   rŠ  ry  )r€  rk  r¦  rÊ   rv  s   &€€€€r9   r³  Ú)register_graph_pattern.<locals>.decorator'	  sC   ø€ Ü˜× Ò Ü Ð#BÀ7À)Ð!LÓMÐMÜØ¨¸gô	
ç
‰(�9 gˆ(Ô
.Øˆr;   r7   )rÊ   rk  r¦  rv  r³  s   ffdd r9   Úregister_graph_patternr¼  	  s   û€ ÷ó ð Ðr;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   rÜ   rÚ   r¸   rŠ   r5   r6   r7   )r8   s   "r9   r:   r:   2	  s!   € ÷ +ñ + ð +°mð +Èñ +r;   c                óB   € V\        \        V P                  4      4      J # r^   )r  rD  r®   )rÜ   r¸   s   &&r9   Úis_start_of_fx_graphr¿  2	  s   € à”4œ˜UŸ[™[Ó)Ó*Ð*Ð*r;   z6(?<!_)(_$|_[.]|(\b|_)(set|enter|exit|seed)(\b|_))(?!_)c               ó    € V ^8„  d   QhRRRR/# )r2   r  ztorch._ops.OpOverloadr5   r6   r7   )r8   s   "r9   r:   r:   <	  s   € ÷ Eñ EÐ+@ð EÀTñ Er;   c                óŒ   € V P                   R 8w  d   R# V \        P                  P                  P                  P
                  39   # )r-   F)rB  r“   r  r-   Úresize_storage_bytes_Údefault)r  s   &r9   Ú"fixme_incorrect_inductor_schema_oprÄ  <	  s7   € Ø	‡|�|�zÔ!Ùð ”%—)‘)×$Ñ$×:Ñ:×BÑBÐDÑDÐDr;   c               ó    € V ^8„  d   QhRRRR/# ro  r7   )r8   s   "r9   r:   r:   E	  s   € ÷ .ñ .˜ð .¨4ñ .r;   c                óx  € \        V P                  \        P                  P                  4      '       d<   \        V P                  4      '       g!   V P                  P                  P                  # \        V P                  \        P                  P                  P                  4      '       d   R # V P                  R8X  df   \        V P                  4      '       g   \        RV P                   24      h\        P                  V P                  P                   4      '       d   R# MyV P                  R8X  di   \        V P                  \"        4      '       g"   \        R\%        V P                  4       24      h\        P                  V P                  4      '       d   R# V P&                  P)                  R4      RJ# )Fr×  r¹  TrÛ  úexpected str node.target, got ÚoutN)rQ   r  r“   rT  r`  rÄ  Ú_schemaÚ
is_mutableÚ_higher_order_opsÚauto_functionalizeÚAutoFunctionalizedr  rS  r‚   Ú_mutation_op_reÚsearchrV   r4   rô  rZ   rM   r»  s   &r9   Úis_mutation_oprÐ  E	  s3  € ÜØ�‰”U—Z‘Z×*Ñ*÷ò ä0°·±×=Ò=Ø�{‰{×"Ñ"×-Ñ-Ð-Ü	Ø�‰”U×,Ñ,×?Ñ?×RÑR÷
ò 
ñ Ø‡w�w�/Ô!Ü˜Ÿ™×$Ò$Ü Ð#FÀtÇ{Á{ÀmÐ!TÓUÐUÜ×!Ñ! $§+¡+×"6Ñ"6×7Ò7Ùð 8à	�‰�MÔ	!Ü˜$Ÿ+™+¤s×+Ò+Ü Ð#AÄ$ÀtÇ{Á{ÓBSÐATÐ!UÓVÐVÜ×!Ñ! $§+¡+×.Ò.ÙØ�;‰;�?‰?˜5Ó!¨Ð-Ð-r;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   rÃ  rŠ   rÄ  r5   r6   r7   )r8   s   "r9   r:   r:   [	  s&   € ÷ Hñ H˜]ð H¨}ð HÀñ Hr;   c                óÀ   € R V P                   9  d   \        R4      hR VP                   9  d   \        R4      hV P                   R ,          VP                   R ,          8H  # )Úmutation_region_idz&mutation_region_id missing from a.metaz&mutation_region_id missing from b.meta)r©   r‚   rÏ  s   &&r9   Úsame_mutation_regionsrÔ  [	  sQ   € Ø 1§6¡6Ô)ÜÐEÓFÐFØ 1§6¡6Ô)ÜÐEÓFÐFØ�6‰6Ð&Õ'¨1¯6©6Ð2FÕ+GÑGÐGr;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   rÜ   rÚ   r¸   rŠ   r5   r�  r7   )r8   s   "r9   r:   r:   c	  s!   € ÷ 
ñ 
 .ð 
¸ð 
È#ñ 
r;   c                ó  € TpR VP                   9  d    \        W4      '       g   VP                  pK0  VP                   P                  R ^ 4      pW!Jd7   VP                  p\        V4      '       d
   V^,          pW2P                   R &   K;  V# ©rÓ  )r©   r¿  ÚprevrM   r  rÐ  )rÜ   r¸   rø   rÓ  s   &&  r9   Úget_mutation_region_idrÙ  c	  st   € Ø€AØ
 a§f¡fÔ
,Ô5IÈ%×5SÒ5SØ�F‰FŠØŸ™Ÿ™Ð$8¸!Ó<ÐØ
‹-Ø�F‰FˆÜ˜!×ÒØ !Õ#ÐØ'9�‰Ð#Ó$ØÐr;   c               ó    € V ^8„  d   QhRRRR/# )r2   rÜ   rÚ   r5   r6   r7   )r8   s   "r9   r:   r:   p	  s   € ÷ Dñ D¨nð DÀñ Dr;   c                óX   € R \        \        V P                  4      4      P                  9  # r×  )r  rD  r®   r©   r�  s   &r9   Ú"should_compute_mutation_region_idsrÜ  p	  s!   € Ø¤t¬D°·±Ó,=Ó'>×'CÑ'CÑCÐCr;   c               ó    € V ^8„  d   QhRRRR/# ©r2   rÜ   rÚ   r5   r}   r7   )r8   s   "r9   r:   r:   t	  s   € ÷ ;ñ ; ~ð ;¸$ñ ;r;   c                ó€   € ^ pV P                    F+  p\        V4      '       d
   V^,          pWP                  R&   K-  	  R# )r�   rÓ  N)r®   rÐ  r©   )rÜ   rÓ  Únds   &  r9   Úcompute_mutation_region_idsrá  t	  s9   € ØÐØ�kŒkˆÜ˜"×ÒØ !Õ#ÐØ(:�‰Ð$Ó%ó r;   c                  ó@   € ] tR tRt$ R]R&   R]R&   R]R&   R]R&   RtR	# )
Ú_MutationRegionRefreshi|	  rŠ   ÚanchorÚstopr�  rÓ  Úmutation_countr7   Nrï  r7   r;   r9   rã  rã  |	  s   ‡ àÓØ
ÓØÓØ×r;   rã  c                  ób   € ] tR tRt$ ]P
                  ! ]R7      tR]R&   Rt	R]R&   R R	 lt
R
tR# )Ú_GraphMutationTrackeri„	  )Údefault_factoryrÌ   Úcreated_nodesFr6   Úerased_mutation_nodec               ó   € V ^8„  d   QhRR/# rc  r7   )r8   s   "r9   r:   Ú"_GraphMutationTracker.__annotate__‰	  s   € ÷ Vñ V¨$ñ Vr;   c                	óT   € V P                   ;'       g    \        V P                  4      # r^   )rë  Ú_contains_mutation_oprê  rƒ   s   &r9   Úchanged_mutation_regionsÚ._GraphMutationTracker.changed_mutation_regions‰	  s"   € Ø×(Ñ(×UÐUÔ,AÀ$×BTÑBTÓ,UÐUr;   r7   N)rV   rd   re   rf   ÚdataclassesÚfieldrÖ   rê  rg   rë  rð  rh   r7   r;   r9   rè  rè  „	  s/   ‡ à)4×):Ò):È4Ô)P€MÐ&ÓPØ!&Ð˜$Ó&÷Vñ Vr;   rè  c               ó$   € V ^8„  d   QhRRRRRR/# )r2   rÜ   rÚ   rÁ   rÒ   r5   z,Generator[_GraphMutationTracker, None, None]r7   )r8   s   "r9   r:   r:   Ž	  s&   € ÷ $7ñ $7Øð$7à)ð$7ð 2ñ$7r;   c              #  óž  aaa	a
"  € S;'       g    / o\        4       o
V P                  oV P                  o	\        4       pV P                  pVP                  R V4      pVP                  RV4      pR VVV
3R llpR V	V
3R llpWcR &   WsR&    S
x € WBJ d   VR  MWCR &   WRJ d   VR R# WSR&   R#   YBJ d   TR  MYCR &   YRJ d   TR i YSR&   i ; i5i)Úcreate_noder÷   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   rY   r   rZ   r5   rŠ   r7   )r8   s   "r9   r:   Ú/_track_graph_mutation_ops.<locals>.__annotate__›	  s!   € ÷ ñ  3ð °#ð ¸-ñ r;   c                 óz   <€ S! V / VB p\        VP                  S4       SP                  P                  V4       V# r^   )rÆ   r©   rê  r¦   )rY   rZ   Úcreated_noderö  rÁ   Útrackers   *, €€€r9   Útracked_create_nodeÚ6_track_graph_mutation_ops.<locals>.tracked_create_node›	  s<   ø€ Ù" DÐ3¨FÑ3ˆÜ˜l×/Ñ/°Ô@Ø×Ñ×$Ñ$ \Ô2ØÐr;   c               ó    € V ^8„  d   QhRRRR/# )r2   Úto_eraserŠ   r5   r   r7   )r8   s   "r9   r:   rø  ¡	  s   € ÷ $ñ $ ]ð $°sñ $r;   c                óh   <€ V P                   '       g   \        V 4      '       d   R Sn        S! V 4      # rß  )rõ   rÐ  rë  )rÿ  r÷   rû  s   &€€r9   Útracked_erase_nodeÚ5_track_graph_mutation_ops.<locals>.tracked_erase_node¡	  s,   ø€ Ø××Ð¤N°8×$<Ò$<Ø+/ˆGÔ(Ù˜(Ó#Ð#r;   N)rè  rö  r÷   ÚobjectÚ__dict__rM   )rÜ   rÁ   ÚsentinelÚ
graph_dictÚcreate_node_attrÚerase_node_attrrü  r  rö  r÷   rû  s   &f      @@@r9   Ú_track_graph_mutation_opsr	  �	  sï   ûé € ð
 $×)Ð) r€NÜ#Ó%€GØ×#Ñ#€KØ×!Ñ!€JÜ‹x€HØ—‘€JØ!—~‘~ m°XÓ>ÐØ —n‘n \°8Ó<€O÷ò ÷$ñ $ð
 !4ˆ}ÑØ1ˆ|Ñð
7ØŠàÓ'Ø˜=Ñ)à(8�}Ñ%ØÓ&Ø˜<Ò(à'6�|Ó$øð Ó'Ø˜=Ñ)à(8�}Ñ%ØÓ&Ø˜<Ñ(à'6�|Ò$üs   †BCÂB. ÂCÂ.C
Ã
Cc               ó$   € V ^8„  d   QhRRRRRR/# )r2   ÚstartrŠ   rå  r5   r�  r7   )r8   s   "r9   r:   r:   µ	  s!   € ÷ 	ñ 	 ]ð 	¸-ð 	ÈCñ 	r;   c                ó¦   € ^ pT pW1JdH   VP                   R8X  d   \        RV 24      h\        V4      '       d
   V^,          pVP                  pKL  V# )r�   Úrootzunexpected root node reached: )r  r‚   rÐ  r  )r  rå  ræ  rà  s   &&  r9   Ú_count_mutation_ops_untilr  µ	  sS   € Ø€NØ	€BØ
‹.Ø�5‰5�FŒ?Ü Ð#AÀ"ÀÐ!FÓGÐGÜ˜"×ÒØ˜aÕˆNØ�W‰WŠØÐr;   c               ó    € V ^8„  d   QhRRRR/# )r2   r®   úIterable[torch.fx.Node]r5   r6   r7   )r8   s   "r9   r:   r:   Á	  s   € ÷ 3ñ 3Ð!8ð 3¸Tñ 3r;   c                ój   € \         ;QJ d    R  V  4       F  '       g   K   R# 	  R# ! R  V  4       4      # )c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir^   )rÐ  )r˜   rà  s   & r9   r›   Ú(_contains_mutation_op.<locals>.<genexpr>Â	  s   é € Ð2©E bŒ~˜b×!Ð!«Eùs   ‚TF)r½   )r®   s   &r9   rï  rï  Á	  s+   € ß‹3Ñ2©EÓ2�3Œ3Ð2Š3Ð2ˆ3Ñ2©EÓ2Ó2Ð2r;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   Úentryr  rz  rÈ   r5   r6   r7   )r8   s   "r9   r:   r:   Å	  s$   € ÷ ñ Ø"ðØ+0ðà	ñr;   c                óÀ   € VP                   f   \        R4      h\        VP                  4      ;'       g*    \        VP                   P                  P                  4      # )Nz(match.replacement_graph must not be None)rÐ   r‚   rï  r®   rÜ   )r  rz  s   &&r9   Ú%_replacement_changes_mutation_regionsr  Å	  sT   € ð ×ÑÒ&ÜÐGÓHÐHÜ  §¡Ó-÷ ð Ô1FØ×Ñ×%Ñ%×+Ñ+ó2ð r;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   rÜ   rÚ   r®   r¯   r5   rã  r7   )r8   s   "r9   r:   r:   Ï	  s&   € ÷ ñ Øðà"ðð ñr;   c           	     óH  € V'       d0   \        V4      p\        V4      pVP                  pVP                  pM,\        \	        V P
                  4      4      pVP                  pTpVP                  R 8X  d   ^ M
\        W4      p\        VVV\        VP                  V4      4      # )r  )
rÒ  ÚmaxrØ  r  rD  r®   r  rÙ  rã  r  )rÜ   r®   Úfirst_matched_nodeÚlast_matched_noderä  rå  Ú
first_noderÓ  s   &&      r9   Ú_mutation_region_refreshr  Ï	  s•   € ÷ Ü  ›ZÐÜ ›JÐØ#×(Ñ(ˆØ ×%Ñ%‰äœ$˜uŸ{™{Ó+Ó,ˆ
Ø—‘ˆØˆð �Y‰Y˜&Ô ‰Ô&<¸UÓ&Kð ô "ØØØÜ! &§+¡+¨tÓ4ó	ð r;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   rÜ   rÚ   Úrefreshrã  r5   r}   r7   )r8   s   "r9   r:   r:   è	  s&   € ÷ ñ Øðà#ðð 
ñr;   c                ób  € VP                   P                  '       g   VP                  P                  '       d   \        V 4       R # VP                   P                  pVP
                  p^ pW!P                  Jd^   VP                  R8X  d   \        V 4       R # \        V4      '       d   V^,          pV^,          pW2P                  R&   VP                  pKl  WAP                  8X  d   R # VP                  R8w  d7   \        V4      '       d
   V^,          pW2P                  R&   VP                  pKG  R # )Nr  rÓ  )
rä  rõ   rå  rá  r  rÓ  r  rÐ  r©   ræ  )rÜ   r   rà  rÓ  ræ  s   &&   r9   Ú_refresh_mutation_region_idsr"  è	  sï   € ð ‡~�~××Ð §¡×!5×!5Ð!5Ü# EÔ*Ùà	�‰×	Ñ	€BØ ×3Ñ3ÐØ€NØ
—L‘LÓ
 Ø�5‰5�FŒ?Ü'¨Ô.ÙÜ˜"×ÒØ !Õ#ÐØ˜aÕˆNØ(:�‰Ð$Ñ%Ø�W‰WŠà×/Ñ/Ô/Ùà
�%‰%�6Œ/Ü˜"×ÒØ !Õ#ÐØ(:�‰Ð$Ñ%Ø�W‰WŠñ	 r;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   rs   r   rë  rê  r5   r7   )r8   s   "r9   r:   r:   
  s!   € ÷ ñ ˜3ð ¨)ð ¸ñ r;   c                óÖ   a € R V 3R llpV Uu. uF2  p\         P                  ! V\         P                  P                  4      NK4  	  pp\         P                  ! V4      Vn        V# u upi )zI
Wrap a bound method to remove 'self' from its signature for FX tracing.
c               ó$   € V ^8„  d   QhRRRRRR/# rX   r7   )r8   s   "r9   r:   Ú(_wrap_bound_method.<locals>.__annotate__
  s!   € ÷ #ñ #�sð # cð #¨cñ #r;   c                 ó   <€ S! V / VB # r^   r7   )rY   rZ   rs   s   *,€r9   ÚwrapperÚ#_wrap_bound_method.<locals>.wrapper
  s   ø€ Ù�4Ð"˜6Ñ"Ð"r;   )r^  Ú	ParameterÚPOSITIONAL_OR_KEYWORDÚ	SignatureÚ__signature__)rs   rë  r(  r&  Úparamss   f&   r9   rb  rb  
  sg   ø€ ÷
#ð #ñ
 óáˆDô 	×Ò˜$¤× 1Ñ 1× GÑ GÖHÙð ð ô $×-Ò-¨fÓ5€GÔØ€Nùòs   �8A&c                  óZ   a € ] tR tRtRtRR V 3R llltR R ltR R ltR	 R
 ltRt	V ;t
# )rz  i
  z9
Registry of patterns to match and replace in FX graphs.
c               ó$   € V ^8„  d   QhRRRRRR/# )r2   r‹   r/   Ú	subsystemr5   r}   r7   )r8   s   "r9   r:   ÚPatternMatcherPass.__annotate__
  s-   € ÷ Lñ LàðLð ðLð 
ñ	Lr;   c                	óŒ   <€ \         SV `  4        \        \        4      V n        Wn        W n        \        \        4      V n        R # r^   )rÕ   r„   r   rÖ   Úpatternsr‹   r1  r  )r`   r‹   r1  r×   s   &&&€r9   r„   ÚPatternMatcherPass.__init__
  s=   ø€ ô
 	‰ÑÔô œÓð 	Œð #ŒØ"Œô ;FÄdÓ:KˆÖr;   c               ó    € V ^8„  d   QhRRRR/# )r2   rÎ  rb  r5   rc  r7   )r8   s   "r9   r:   r2  .
  s   € ÷ #ñ #Ð @ð #ÐEWñ #r;   c                	ó(   € V P                   V,          # r^   )r4  )r`   rÎ  s   &&r9   rf  ÚPatternMatcherPass.__getitem__.
  s   € Ø�}‰}˜TÕ"Ð"r;   c               ó    € V ^8„  d   QhRRRR/# )r2   rj  ú%torch.fx.GraphModule | torch.fx.Graphr5   r�  r7   )r8   s   "r9   r:   r2  1
  s   € ÷ uñ uÐ=ð uÀ#ñ ur;   c                óæ  € V P                   '       g   ^ # \        V\        P                  P                  4      '       d   VP
                  pMP\        V\        P                  P                  4      '       d   TpVP                  pM\        R\        V4       24      h\        V4      '       d   \        V4       \        P                  ! \        V4      p^ p. pRpV P                    F2  w  rxVR8X  d   RpK  VP                  VP!                  WxRR7      4       K4  	  V'       d#   VP                  VP!                  RRR7      4       V P"                  e   V P"                  MRp	\        V\        P                  P                  4      '       g   \%        R	\        V4       24      h\'        WV P(                  4      ;_uu_ 4        \+        \,        P.                  P1                  V4      RR
7       EFÑ  p
\3        V
4      pV
P4                  R8X  d    V
P4                  V3V P                   9  d   K?  \7        V
RR7      '       d   KT  V P                   V
P4                  V3,           EFY  pV
P8                  '       d    KŒ  VP:                  P=                  V
4      p\?        V4      '       d/   \A        \C        \E        W<PF                  4      4      4      ^8w  d   Ks  \?        V4      '       d-   \A        \C        R VPF                   4       4      4      ^8w  d   K°  \I        V
PJ                  4      '       d,   \L        PO                  RWªPP                  WËP:                  4       \?        V4      '       g   EK
  \S        VPU                  V4      4      '       g   EK-  V^,          p\        V\V        4      '       d*   \Y        W¼4      '       d   \[        W,PF                  4      MRpM.\        V\\        4      '       d   RpM\[        W,PF                  4      p\        V\\        4      '       de   \_        V\a        VPF                  4      4      ;_uu_ 4       pVPc                  WÂV
4       RRR4       XPe                  4       '       d   \        V4       M4Ve   VPc                  WÂV
4       \g        W-4       MVPc                  WÂV
4       \h        \j        ,          R;;,          ^,          uu&   \h        \j        ,          R;;,          \A        VPF                  4      ,          uu&   \l        Pn                  Pq                  R4      '       g   EKÔ  \s        VRR4      '       d   VPt                  pM<VP:                  Pv                  Px                  p\{        V
P|                  4      pV RV 2p\j         R2p\h        V,          V;;,          ^,          uu&   EK\  	  EKÔ  	  RRR4       V#   + '       g   i     ELƒ; i  + '       g   i     T# ; i)zLApply all registered patterns to the graph, returning the number of matches.zJThe input to PatternMatcherPass must be a GraphModule or a Graph, but got Frß  T)r  r  Úsort)r  r<  Nry  r·  )Úreverse)Úallow_cpu_inputsc              3  ó$  "  € T F†  pVP                   P                  R / 4      P                  R^ 4      VP                   P                  R / 4      P                  R4      VP                   P                  R / 4      P                  R4      3x € Kˆ  	  R# 5ir¶   r·   )r˜   rø   s   & r9   r›   Ú+PatternMatcherPass.apply.<locals>.<genexpr>n
  sw   é € ð 'ñ *1 Að	 %&§F¡F§J¡J¨x¸Ó$<×$@Ñ$@ÀÈ1Ó$MØ$%§F¡F§J¡J¨x¸Ó$<×$@Ñ$@ÀÓ$KØ$%§F¡F§J¡J¨x¸Ó$<×$@Ñ$@ÐAQÓ$Rõ!"ó
 *1ùs   ‚BBz
%s%s %s %sÚpattern_matcher_countÚpattern_matcher_nodesrJ   r‘  r§  Ú_pattern_matcher_per_pattern)?r4  rQ   r“   r”   r¡  rÜ   ÚGraphr  r\  rô  rÜ  rá  r=  r>  rÙ  r¦   Ú
find_nodesr‹   r‚   r   r1  Úsortedr…  r†  Úfrom_iterablerq  r  r+   rõ   rÊ   rz  rm  r  r!   rì  r®   rS   r&  rä  rH  rY   r   rk  r  r  r  rŠ  r	  r¿   rq  rð  r"  r   ÚbackendrK   rL   rM   r^  r‘  r×   rV   r4   r  )r`   rj  rÜ   Úget_mutation_region_id_partialÚcountr®   Úhas_call_moduler  r  r‹   r¸   r  rj  Úmutation_region_refreshÚmutation_trackerr‘  Úpattern_classÚpattern_keys   &&                r9   rq  ÚPatternMatcherPass.apply1
  sŒ  € à�}�}ˆ}ÙÜ�bœ%Ÿ(™(×.Ñ.×/Ò/Ø—H‘H‰EÜ˜œEŸH™HŸN™N×+Ò+ØˆEØ×$Ñ$‰BäØ\Ô]aÐbdÓ]eÐ\fÐgóð ô .¨e×4Ò4Ü'¨Ô.Ü)2×):Ò):Ü" Eó*
Ð&ð ˆØˆØˆØŸ-œ-‰JˆBØ�]Ô"Ø"&’à—‘˜U×-Ñ-°ÈÐ-ÓOÖPñ	 (÷
 Ø�L‰L˜×)Ñ)¨]ÀÐ)ÓGÔHØ&*§n¡nÒ&@�D—N’NÐFWˆ	Ü˜"œeŸh™h×2Ñ2×3Ò3Ü Ð#=¼dÀ2»h¸ZÐ!HÓIÐIÜ# B°4·>±>×BÕBÜœyŸ™×<Ñ<¸UÓCÈT×RÐR�Ü'¨Ó-�Ø—7‘7˜mÔ+ØŸ™ Ð(°·±Ô=Ù ô
 9¸ÐPU×VÓVÙà!Ÿ]™]¨D¯G©G°VÐ+<×=Ñ=�EØ—|—|�|ÚØŸ™×+Ñ+¨DÓ1�Aô ! ŸšÜÜ&¤sÐ+IÏ7É7Ó'SÓTóð ôñ
 !ô ! ŸšÜÜ&ñ 'ð *+¯ªó'ó ó	ð ô
ñ !Ü)¨$¯)©)×4Ò4ÜŸ™ L°$¿	¹	À1ÇmÁmÔTä —{•{¤~°e×6GÑ6GÈÓ6J×'KÕ'KØ �
˜Ü% eÔ-D×EÒEô $IÈ×#RÒ#Rô !9¸ÇÁÔ Hà%)ñ 4ô
 (¨Ô/@×AÒAØ6:Ñ3ä6NØ %§w¡wó7Ð3ô & eÔ->×?Ò?Ü!:Ø %Ô'=¸a¿g¹gÓ'F÷"ô "à!1Ø %§¡¨A°dÔ ;÷"ð  0×HÑH×JÒJÜ ;¸EÔ BøØ4Ò@Ø!ŸK™K¨°$Ô7Ü8¸ÕXà!ŸK™K¨°$Ô7Ü ¤Õ)Ð*A×BÀaÕGÓBÜ ¤Õ)Ð*A×BÄcÈ!Ï'É'ÃlÕRÓBô Ÿ:™:Ÿ>™>Ð*M×NÕNÜ& u¨n¸d×CÒCØ/4×/AÑ/A¡ð 16·±×0GÑ0G×0PÑ0P Ü),¨T¯[©[Ó)9 Ø2?°ÀÀ&ÀÐ/J ä-4¨IÐ5QÐ*R˜KÜ$ [Õ1°,×?À1ÕDÖ?ôQ >ñ S÷ Cðl ˆ÷5"÷ "ð "ú÷y CÖBðl ˆús@   Ç F"WÍ(WÎB3WÐ>WÑWÑ/B=WÔ2BW×W×	W×W0	c               ó   € V ^8„  d   QhRR/# r|   r7   )r8   s   "r9   r:   r2  ¨
  s   € ÷ ñ �tñ r;   c                	ó:   € V P                   P                  4        R # r^   )r4  Úclearrƒ   s   &r9   rS  ÚPatternMatcherPass.clear¨
  s   € Ø�‰×ÑÖr;   )r‹   r4  r  r1  rQ  )rV   rd   re   rf   rR  r„   rf  rq  rS  rh   rT  rU  s   @r9   rz  rz  
  s*   ø† ñ÷Lò Lõ$#õu÷nó r;   rz  c               ó$   € V ^8„  d   QhRRRRRR/# )r2   rY   r   rZ   r5   r   r7   )r8   s   "r9   r:   r:   ¬
  s!   € ÷ ñ ˜Cð ¨3ð °8ñ r;   c                 ó   € \         hr^   rl  rï   s   *,r9   Ú_not_implementedrW  ¬
  s   € Ü
Ðr;   c               ó0   € V ^8„  d   QhRRRRRRRRR	RR
R/# )r2   rj  r:  rœ  zSequence[type[Any]]rë  rö  rø  r$  r%  r5   rÉ   r7   )r8   s   "r9   r:   r:   °
  sL   € ÷ {ñ {Ø-ð{à%ð{ð ð{ð 5ð	{ð
 'ð{ð ñ{r;   c                ót  aaaa	a
a€ T;'       g    / pVP                  4        UUu/ uF  w  rVWebK	  	  uppo
\        S
4      \        V4      8w  d   \        R4      hRR VV
3R lllo\        P                  ! 4       o	 ! VV	VVV3R lR\
        P                  P                  4      p\        V \
        P                  P                  4      '       g   \        R\        V 4       24      hV! V 4      P                  4       p\        V\        4      '       g    \        \        P                  ! V4      4      # V# u uppi )zŠ
Convert an FX graph into a PatternExpr.  This is useful for simple
patterns that can only match single functions and fixed-length lists.
z&scalar_workaround has duplicate valuesc               ó$   € V ^8„  d   QhRRRRRR/# ©r2   rƒ  rx   Úignore_types_overridezSequence[type[Any]] | Noner5   zT | KeywordArg | Ignoredr7   )r8   s   "r9   r:   Ú#fx_to_pattern.<locals>.__annotate__Â
  s$   € ÷ ñ ØðØ%?ðà	!ñr;   c                óz  <€ Ve   TMSp\        V \        \        34      '       d   V S9   d   \        SV ,          4      # \	        V 4      V9   d   \        4       # \        V \        4      '       dM   \        ;QJ d    R V  4       F  '       d   K   RM	  RM! R V  4       4      '       d   V '       d   \        4       # V # )Nc              3  óB   "  € T F  p\        V\        4      x € K  	  R # 5ir^   )rQ   r®  )r˜   Úys   & r9   r›   Ú5fx_to_pattern.<locals>.process_arg.<locals>.<genexpr>Ì
  s   é € Ð&IÁqÀ!¤z°!´W×'=Ð'=Ãqùs   ‚FT)rQ   ræ  r�  r"  rô  r®  rÖ   rE   )rƒ  r\  Úcurrent_ignore_typesrœ  Úinv_scalar_workarounds   && €€r9   Úprocess_argÚ"fx_to_pattern.<locals>.process_argÂ
  s’   ø€ ð &;Ò%FÑ!ÈLð 	ô �aœ%¤˜×&Ò&¨1Ð0EÔ+EÜÐ3°AÕ6Ó7Ð7Ü�‹7Ð*Ô*Ü“9ÐÜ�aœ×Ò§3£3Ñ&IÁqÓ&I§3§3¢3Ñ&IÁqÓ&I×#IÒ#IÏaÜ“9ÐØˆr;   c                  ón   <a € ] tR tRt]t]tR VVV3R lltR R ltR VV3R llt	R V 3R	 llt
R
tV ;t# )Ú fx_to_pattern.<locals>.ConverteriÒ
  c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r2   r  r4   rY   r
  rZ   r  r5   z ExclusiveKeywordArg | KeywordArgr7   )r8   s   "r9   r:   Ú-fx_to_pattern.<locals>.Converter.__annotate__Ù
  s2   € ÷ 	(ñ 	(àð	(ð  ð	(ð &ð		(ð
 .ñ	(r;   c                	ó  <€ \        S4      pV\        S4      8  d   SV,          pMJS'       d)   VP                  R 4      '       g   \        RV 24      hTpM\        P
                  ! RRV4      pTpVS9   d   \        V4      # \        V4      # )Útangentz-expected target to start with 'tangent', got z_\d+$rä  )r  r  Ú
startswithr‚   ÚreÚsubr>  r"  )	r`   r  rY   rZ   rø   r&  rë  Úargnumr%  s	   &&&&  €€€r9   r›  Ú,fx_to_pattern.<locals>.Converter.placeholderÙ
  s‹   ø€ ô �V“ˆAØ”3�x“=Ô Ø •{‘ßØ×(Ñ(¨×3Ò3Ü(ØGÈÀxÐPóð ð ‘äŸš ¨"¨fÓ5�Ø�ØÐ*Ô*Ü*¨4Ó0Ð0ä! $Ó'Ð'r;   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r2   r  r4   rY   r
  rZ   r  r5   rý  r7   )r8   s   "r9   r:   ri  ñ
  s2   € ÷ 	;ñ 	;àð	;ð  ð	;ð &ð		;ð
 ñ	;r;   c                	ó‚   € V'       g	   V'       d   \        R V RV 24      h\        \        V P                  V4      4      # )zunexpected get_attr args: rí   )r‚   rý  r   Úmodule)r`   r  rY   rZ   s   &&&&r9   r  Ú)fx_to_pattern.<locals>.Converter.get_attrñ
  s8   € ÷ —vÜ$Ð'AÀ$ÀÀrÈ&ÈÐ%RÓSÐSÜœ9 T§[¡[°&Ó9Ó:Ð:r;   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r2   r  r4   rY   r
  rZ   r  r5   rÉ   r7   )r8   s   "r9   r:   ri  ü
  s2   € ÷ 	9ñ 	9àð	9ð  ð	9ð &ð		9ð
 ñ	9r;   c                	óœ  <€ S	pV\         P                  J d9   \        ;QJ d    . R  S 4       F  NK  	  5M! R  S 4       4      3R V	3R lllpTp\        P                  ! WBV34      w  r#\
        S9   d@   V Uu. uF
  qd! V4      NK  	  ppVP                  4        UUu/ uF  w  rvWt! V4      bK  	  ppp\        V.VO5/ VB # u upi u uppi )c              3  ó<   "  € T F  q\         Jg   K  Vx € K  	  R # 5ir^   )r�  )r˜   Úts   & r9   r›   ÚAfx_to_pattern.<locals>.Converter.call_function.<locals>.<genexpr>  s   é € ð NÙ#/˜a¼C°<Ÿš£<ùs   ‚’
c               ó$   € V ^8„  d   QhRRRRRR/# r[  r7   )r8   s   "r9   r:   ÚDfx_to_pattern.<locals>.Converter.call_function.<locals>.__annotate__  s+   € ÷ Añ AØðAà+EðAð
 .ñAr;   c                ó   <€ S! W4      # r^   r7   )rƒ  r\  rd  s   &&€r9   Úprocess_arg_fn_implÚKfx_to_pattern.<locals>.Converter.call_function.<locals>.process_arg_fn_impl  s   ø€ ñ ' qÓ@Ð@r;   )r_  rº  rç   rž  rB  rÖ   rª   rÖ  )
r`   r  rY   rZ   Úprocess_arg_fnr}  rÃ  r™   rœ  rd  s
   &&&&    €€r9   r×  Ú.fx_to_pattern.<locals>.Converter.call_functionü
  sÔ   ø€ ð )ˆNàœ×)Ñ)Ó)÷ INÌñ NÙ#/óNÏÉñ NÙ#/óNó I÷Aò Að "5�ä!Ÿ?š?¨>À&¸>ÓJ‰LˆDÜ�|Ô#á37Ó8±4¨a˜ qÖ)±4�Ð8Ø;A¿<¹<¼>ÔJ¹>±4°1˜!˜^¨AÓ.Ò.¹>�ÑJÜ Ð8¨Ò8°Ñ8Ð8ùò 9ùÛJs   Á9CÂCc               ó    € V ^8„  d   QhRRRR/# )r2   rø   rŠ   r5   r   r7   )r8   s   "r9   r:   ri    s   € ÷ 	ñ 	˜mð 	°ñ 	r;   c                	óÐ  <€ \         SV `  V4      pVP                  R 8X  d«   \        V\        4      '       d•   VP
                  ^ ,          p\        V\        4      '       g   \        R\        V4       24      h\        V4      \        V4      8w  d   \        R4      h\        W#4       F  w  rE\        VP                  4      Vn        K!  	  V# \        VP                  4      Vn        V# )r  zexpected Collection, got zrv and args length mismatch)rÕ   rž  r  rQ   rç   rY   r   r‚   rô  r  rD  rö   )r`   rø   ÚrvrY   Úrr)  r×   s   &&    €r9   rž  Ú)fx_to_pattern.<locals>.Converter.run_node  s³   ø€ Ü‘Ñ! !Ó$ˆBØ�t‰t�xÔ¤J¨r´5×$9Ò$9Ø—v‘v˜a•y�Ü! $¬
×3Ò3Ü(Ð+DÄTÈ$ÃZÀLÐ)QÓRÐRÜ�r“7œc $›iÔ'Ü(Ð)FÓGÐGÜ! "žm‘F�Aä! #§)¡)›n�A–Gñ ,ð
 ˆIô ˜qŸw™w›<�”ØˆIr;   r7   )rV   rd   re   rf   rW  rÛ  rß  r›  r  r×  rž  rh   rT  )r×   rë  ro  r%  rœ  rd  s   @€€€€€r9   Ú	Converterrg  Ò
  s0   ù† à&ˆà&ˆ÷	(ò 	(õ0	;÷	9ñ 	9÷6	ö 	r;   r†  r·  r^   )rª   r  r‚   r…  rJ  r“   r”   rÐ  rQ   r¡  rô  rM  rÉ   r  rž  rE  )rj  rœ  rë  rø  r%  r™   rš   r†  rÊ   ro  rc  rd  s   &ff&f    @@@r9   rG  rG  °
  sÿ   ý€ ð *×/Ð/¨RÐØ.?×.EÑ.EÔ.GÔHÑ.G¡d a˜QšTÑ.GÒHÐÜ
Ð Ó!¤SÐ):Ó%;Ô;ÜÐEÓFÐF÷ó ô �_Š_Ó€F÷Ró R”E—H‘H×(Ñ(ô Rôh �bœ%Ÿ(™(×.Ñ.×/Ò/ÜÐ9¼$¸r»(¸ÐDÓEÐEÙ˜‹m×ÑÓ!€GÜ�gœ{×+Ò+Ü!¤&×"4Ò"4°WÓ"=Ó>Ð>Ø€Nùó[ Is   ¦D4r  r'  c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r2   rs   r  rY   r
  r  r6   r'  r5   rt   r7   )r8   s   "r9   r:   r:   /  s:   € ÷ %ñ %Øð%à
ð%ð  ð	%ð
 &ð%ð ñ%r;   c               óö  € ^ RI Hp VP                  RR7      ;_uu_ 4        \        4       ;_uu_ 4        \	        4       ;_uu_ 4        \        W! 4       RR7      ! V!  pRRR4       RRR4       RRR4       ^RIHp V'       d-   V! XP                  4       VP                  P                  4        XP                  4        V#   + '       g   i     Ll; i  + '       g   i     Lw; i  + '       g   i     L‚; i)z>Build a normalized inference graph, for use with fx_to_patternr"   F©Úcompile_on_one_rankrÊ  )Útracing_modeN©Úremove_noop_ops)Útorch.compilerr#   rf  r   r    r   Úfx_passes.post_gradr�  rÜ   Úeliminate_dead_codeÚ	recompile)rs   rY   r  r'  Úcompiler_configrj  r�  s   &&$$   r9   r?  r?  .  s¢   € õ 9ð 	×Ñ°%Ð×8Õ8Ü ×"Õ"Ü×Õä�R˜›°vÕ>ÀÑEˆ÷ 	÷ 	#÷ 	9õ 5çÙ˜Ÿ™Ô!ð 	�‰×$Ñ$Ô&à‡L�L„NØ€I÷' 	×ú÷ 	#×"ú÷ 	9×8ús:   ¡C(´C	ÁCÁC	Á&C(ÃCÃC	ÃC%Ã C(Ã(C8	c               ó(   € V ^8„  d   QhRRRRRRRR/# )r2   rs   r  rY   r
  r'  r5   rt   r7   )r8   s   "r9   r:   r:   X  s0   € ÷ /ñ /Øð/à
ð/ð &ð	/ð
 ñ/r;   c               ó¬  a€ RoR V3R llp^ RI Hp \        P                  P	                  R4      ;_uu_ 4        VP                  RR7      ;_uu_ 4        \        V R VV! 4       RRR	7      ! V!   RRR4       RRR4       S'       g   \        R
4      h^RIH	p V! SP                  4       ^RIHp VP                  SP                  4       \        P                  P                  P                  4       SP                  n        SP                  P#                  4        SP%                  4        S#   + '       g   i     LÇ; i  + '       g   i     LÒ; i)z=Build a normalized training graph, for use with fx_to_patternNc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r2   Újoint_graphrt   Úinputsr
  rZ   r   r5   z1tuple[torch.fx.GraphModule, torch.fx.GraphModule]r7   )r8   s   "r9   r:   Ú#joint_fwd_bwd.<locals>.__annotate__a  s2   € ÷ @ñ @Ø)ð@Ø3@ð@ØLOð@à	:ñ@r;   c                óX   <€ S'       d   \        R 4      h\        V 4      o\        W3/ VB # )zgm already set)r‚   Úclone_graphr&   )r–  r—  rZ   rj  s   &&,€r9   Úrecord_joint_graphÚ)joint_fwd_bwd.<locals>.record_joint_grapha  s.   ø€ ÷ Ü Ð!1Ó2Ð2Ü˜Ó%ˆÜ  Ñ?¸Ñ?Ð?r;   r"   Fr‰  c                ó   € \        V 4      # r^   )r%   )rj  r÷  s   &&r9   r*  Újoint_fwd_bwd.<locals>.<lambda>r  s	   € ¤°rÔ':r;   T)Úpartition_fnÚdecompositionsÚkeep_inference_input_mutationsÚ
enable_logzgm was not setrŒ  )Úearly_patterns)rŽ  r#   r“   Ú_guardsÚtracingrf  r$   r‚   r�  r�  rÜ   Úfx_passes.joint_graphr£  rq  r”   ÚCodeGenÚ_codegenr�  r‘  )rs   rY   r'  r›  r’  r�  r£  rj  s   &&$    @r9   rc  rc  W  sø   ø€ ð '+€B÷@ð @õ 9ô 
�‰×	Ñ	˜t×	$Õ	$ o×&;Ñ&;ÐPUÐ&;×&VÕ&VÜØá:Ø+Ù(›?Ø+/Øõ	
ð ò	÷ 'W×	$÷ ÜÐ-Ó.Ð.å4á�B—H‘HÔå5à×Ñ˜Ÿ™Ô"ô Ÿ™Ÿ™×.Ñ.Ó0€B‡H�HÔØ‡H�H× Ñ Ô"Ø‡L�L„NØ€I÷3 'W×&Vú×	$×	$ús#   ºEÁD0	Á1EÄ0E Ä;EÅE	c               ó    € V ^8„  d   QhRRRR/# )r2   rø   rŠ   r5   zlist[torch.fx.node.Argument]r7   )r8   s   "r9   r:   r:   Š  s   € ÷ ñ ˆ]ð Ð;ñ r;   c                óŠ   € . p\         P                  P                  V P                  V P                  3VP
                  4       V# r^   )r“   r”   rC  rY   rZ   r¦   )rø   rY   s   & r9   r»  r»  Š  s1   € Ø)+€DÜ	‡H�H×Ñ�a—f‘f˜aŸh™hÐ'¨¯©Ô5Ø€Kr;   c               ó    € V ^8„  d   QhRRRR/# rÞ  r7   )r8   s   "r9   r:   r:   �  s   € ÷ "Kñ "K >ð "K°dñ "Kr;   c                óÂ  € \        \        V P                  4      4      p\        \        P
                  P                  ,          ! 4       p\        \         4      pR pV'       dÃ   VP                  4       p\        V4       Uu. uF  qfV9  g   K  VNK  	  ppV'       d!   W7R,          ,          P                  V4       Kb  VP                  V4       V'       d"   VP                  VJd   VP                  V4       TpVP                  \        VP                  VR4      4      4       KÊ  V'       g$   \        V4      \        V P                  4      8X  g   \        R4      hR # u upi )Nz*topological sort did not consume all nodesr„  r7   )rÖ   rô   r®   r!   r“   r”   r$  r   r6  r»  r¦   rÈ  r  rã   r  r‚   )rÜ   ÚpendingÚreadyÚwaitingÚcursorr¸   rƒ  Úwaiting_fors   &       r9   Ústable_topological_sortr²  �  sý   € ô ”8˜EŸK™KÓ(Ó)€Gô ”u—x‘x—}‘}Ö%Ó'€Eô œ$Ó€Gð €Fß
Ø�{‰{‹}ˆÜ"'¨¤+Ó@¡+˜Q¸%±—q�q¡+ˆÐ@ßð  •OÕ$×+Ñ+¨DÖ1à�I‰I�dŒOß˜&Ÿ+™+¨TÓ1Ø—‘˜dÔ#ØˆFð �N‰Nœ8 G§K¡K°°bÓ$9Ó:Ö;çœC ›J¬#¨e¯k©kÓ*:Ô:ÜÐIÓJÐJñ ;ùò As   Á?EÂEc               ó    € V ^8„  d   QhRRRR/# )r2   rs   r  r5   r7   )r8   s   "r9   r:   r:   µ  s   € ÷ ñ Ð-ð Ð2Dñ r;   c                óÆ   a a€ \         P                  ! S 4      P                  o\        P                  \        P
                  ! S 4      R\        3R VV 3R lll4       4       pV# )z0Wrapper around lazy init functions in fx_passes/Nc               ó$   € V ^8„  d   QhRRRRRR/# )r2   Úinput_devicez
Any | Noner'  r(  r5   r   r7   )r8   s   "r9   r:   Ú(init_once_fakemode.<locals>.__annotate__¼  s(   € ÷ ñ Ø ðð
ðð
 
ñr;   c                óÞ  <€ \         \        ,          P                  4       p/ pR S9   d   WR &   RS9   d   WR&   \        P                  P                  R4      ;_uu_ 4        \        4       ;_uu_ 4        \        4       ;_uu_ 4        S! R/ VB pRRR4       RRR4       RRR4       V\         \        &   X#   + '       g   i     L/; i  + '       g   i     L:; i  + '       g   i     LE; i)r¶  r'  Nr7   )r   rH  r¥   r“   r¤  r¥  r   r(   )r¶  r'  Úcounters_refrZ   rÞ  Ú
_fn_paramsrs   s   &&   €€r9   Ú	lazy_initÚ%init_once_fakemode.<locals>.lazy_initº  s¥   ø€ ô  ¤Õ(×-Ñ-Ó/ˆà!#ˆØ˜ZÔ'Ø%1�>Ñ"Ø˜jÔ(Ø&3�?Ñ#ä�]‰]×"Ñ" 4×(Õ(Ô*@×*BÕ*BÄN×DTÕDTÙ‘\˜&‘\ˆF÷ EU×*B×(ð )Œ”Ñàˆ÷ EU×DTú×*B×*Bú×(×(ús<   Á CÁ3C		Â	B6ÂC		ÂCÂ6CÃC		Ã	CÃCÃC,	)r^  r_  r`  r=  r^  r…  r*   )rs   r»  rº  s   f @r9   Úinit_once_fakemoder½  µ  sW   ù€ ô ×"Ò" 2Ó&×1Ñ1€Jä‡_�_Ü‡_‚_�RÓà#'ô  ÷	ò ó ó ðð, Ðr;   c               ó    € V ^8„  d   QhRRRR/# )r2   r&  r4   r5   zCallable[[Match], Any]r7   )r8   s   "r9   r:   r:   Õ  s   € ÷ ñ �cð Ð4ñ r;   c                ó   a € R V 3R llpV# )z2Function for extra_check to put pass behind a flagc               ó    € V ^8„  d   QhRRRR/# )r2   rz  rÈ   r5   r   r7   )r8   s   "r9   r:   Ú!config_flag.<locals>.__annotate__Ø  s   € ÷ %ñ %˜%ð % Cñ %r;   c                ó$   <€ \        \        S4      # r^   )r^  r#   )rz  r&  s   &€r9   Ú
flag_checkÚconfig_flag.<locals>.flag_checkØ  s   ø€ Ü”v˜tÓ$Ð$r;   r7   )r&  rÃ  s   f r9   Úconfig_flagrÅ  Õ  s   ø€ ÷%ð %ð Ðr;   c               ó    € V ^8„  d   QhRRRR/# )r2   Úinput_graphrt   r5   r7   )r8   s   "r9   r:   r:   Þ  s   € ÷ .ñ .Ð1ð .Ð6Jñ .r;   c                óL   €  ! R  R\         4      pV! V 4      P                  4       # )c                  ó.   a € ] tR tRtR V 3R lltRtV ;t# )Úclone_graph.<locals>.CopyGraphiß  c               ó    € V ^8„  d   QhRRRR/# )r2   r‰   rŠ   r5   r7   )r8   s   "r9   r:   Ú+clone_graph.<locals>.CopyGraph.__annotate__à  s   € ÷ 	ñ 	 ]ð 	°}ñ 	r;   c                	óV  <€ \         SV `  V4      p\        V\        P                  P
                  4      '       do   VP                  P                  P                  VP                  4       V P                  P                  P                  VP                  R 4      VP                  n        V# r^   )rÕ   rž  rQ   r“   r”   ÚProxyr¸   r©   r¨   Ú	new_graphÚ_graph_namespacerX  r&  )r`   r‰   rO  r×   s   && €r9   rž  Ú'clone_graph.<locals>.CopyGraph.run_nodeà  st   ø€ Ü‘wÑ'¨Ó1ˆHÜ˜(¤E§H¡H§N¡N×3Ò3Ø—‘×"Ñ"×)Ñ)¨(¯-©-Ô8Ø%)§^¡^×%DÑ%D×%PÑ%PØ—M‘M 4ó&�—‘Ô"ð ˆOr;   r7   )rV   rd   re   rf   rž  rh   rT  rU  s   @r9   Ú	CopyGraphrÊ  ß  s   ø† ÷	ö 	r;   rÒ  )r)   Ú	transform)rÇ  rÒ  s   & r9   rš  rš  Þ  s$   € ô	”Kô 	ñ �[Ó!×+Ñ+Ó-Ð-r;   Ú_seen_patternsc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r2   r¸   rŠ   Ú
arg_numberr�  Ú
kwarg_namer/   r5   r   r7   )r8   s   "r9   r:   r:   ñ  s,   € ÷ +ñ +Ø
ð+Ø%(ð+Ø6@ð+àñ+r;   c                óž   € \        V P                  4      V8”  d   V P                  V,          # Vf   R # V P                  P                  V4      # r^   )r  rY   rZ   rM   )r¸   rÖ  r×  s   &&&r9   Úget_arg_valuerÙ  ñ  s?   € ô ˆ4�9‰9ƒ~˜
Ô"Ø�y‰y˜Õ$Ð$Ø	Ò	Ùà�{‰{�‰˜zÓ*Ð*r;   c               ó$   € V ^8„  d   QhRRRRRR/# )r2   r®   r  rs   r   r5   rÌ   r7   )r8   s   "r9   r:   r:   ü  s#   € ÷ :ñ :Ð/ð :°Sð :Ð=Pñ :r;   c                óì   € V.p\        V\        P                  P                  4      '       d    VP	                  VP                  4       4       V  Uu. uF  q3P                  V9   g   K  VNK  	  up# u upi r^   )rQ   r“   rT  rU  rã   rV  r  )r®   rs   rN  r¸   s   &&  r9   Úfilter_nodesrÜ  ü  sV   € Øˆ$€CÜ�"”e—j‘j×1Ñ1×2Ò2Ø�
‰
�2—?‘?Ó$Ô%á"Ó9™U�T§k¡k°SÑ&8�DˆD™UÑ9Ð9ùÒ9s   ÁA1Á(A1c               ó    € V ^8„  d   QhRRRR/# )r2   r¸   rŠ   r5   ztorch.fx.node.Targetr7   )r8   s   "r9   r:   r:     s   € ÷ ñ ˜ð Ð+?ñ r;   c                ól  € V P                   R8X  d™   \        V P                  \        4      '       g"   \	        R\        V P                  4       24      hV P                  P                  f   \	        R4      h\        V P                  P                  V P                  4      P                  # V P                  # )z�For call_function and call_method, we directly use the target function;
For call_module, the target is string, and we treat the module class
 as a function.
rß  rÇ  z)node.graph.owning_module must not be None)
r  rQ   r  r4   r‚   rô  rÜ   r  r   r×   r»  s   &r9   rq  rq    s…   € ð
 ‡w�w�-ÔÜ˜$Ÿ+™+¤s×+Ò+Ü Ð#AÄ$ÀtÇ{Á{ÓBSÐATÐ!UÓVÐVØ�:‰:×#Ñ#Ò+Ü Ð!LÓMÐMÜ˜Ÿ™×1Ñ1°4·;±;Ó?×IÑIÐIØ�;‰;Ðr;   )rä  r^   re  r7   )Nr7   )r7   r7   Nr7   )ÖÚ__conditional_annotations__rR  Ú
__future__r   r;  rò  r=  r•  r^  r…  Úloggingrç  r_  rK   rm  ru  r  Úabcr   r   Úcollectionsr   Úcollections.abcr   r   r   r	   r
   r   Úpathlibr   r   r   r   r   Útyping_extensionsr   r   r“   Útorch._guardsÚtorch.fxÚtorch.utils._pytreer@  rA  rž  Útorch._dispatch.pythonr   Útorch._dynamo.utilsr   Útorch._prims_commonr   Útorch._subclasses.fake_tensorr   r   r   Ú"torch.fx.experimental.proxy_tensorr   Ú%torch.fx.experimental.symbolic_shapesr   r   Útorch.fx.graph_moduler   Útorch.fx.immutable_collectionsr   r   Ú(torch.fx.passes.graph_transform_observerr   r£   r    Útorch.utils._ordered_setr!   Ú
_functorchr#   re  Ú_functorch.aot_autogradr$   r%   Ú_functorch.partitionersr&   Ú_subclassesr'   r(   r”   r)   rä  Údecompositionr*   Úloweringr+   Ú	getLoggerrV   rä  r  ÚatenÚprimsÚConstantr$  rw  rL   rM   rH  r.   rg   r0   rS   rU   rj   rq   rx   r¸   ÚTargetr4   ÚFnsTyperz   r€   r¬   r¿   rÆ   rÈ   r\  râ   rk  rm  rÎ   rÉ   r¥  r®  rÁ  rÉ  rß  rê  rû  rý  r"  r>  rM  rç   Ú_SimpleSpecr|  rÖ  rÚ  rÞ  rá  ré  rì  rï  rñ  r  r+  rº  r`  Ú	dataclassri  r~  rŠ  r  rà  ræ  ré  rô  rý  r  r  r  r!  rl  rm  rŒ  Ú__file__Úparentrƒ  r�  r‘  r™  rf  rg  r†  rµ  r¼  r¿  ÚcompilerÎ  rÄ  rÐ  rÔ  rÙ  rÜ  rá  rã  rè  Úcontextmanagerr	  r  rï  r  r  r"  rb  rz  rW  rG  Úno_gradr?  Úenable_gradrc  r»  r²  r½  rÅ  rš  rÔ  rÙ  rÜ  rq  )rß  s   @r9   Ú<module>r     s/  øðô!õF #ã Û Û Û Û Û Û Û Û Û 	Û 	Û Û ß #Ý #ß X× XÝ ß 3Ó 3ß *ã Û Û ß $Ð $Ý ;Ý (Ý 0÷ñ õ
 7ß WÝ +ß IÝ KÝ 1Ý /å 3ß CÝ 7ß 4Ý Ý Ý .Ý ;ð ×Ò˜Ó!€Ø‡y�y‡~�~€Ø�	‰	�‰€à€Ø˜EŸH™HŸM™MÕ)€à
�*‰*�.‰.Ð>À
Ó
K€ð 59Ð Ð1Ó 8Ø+/Ð ˜jÓ /õ$ô4>ˆxô >ô>�ô >ô#ˆhô #ñ ˆCƒL€ð �(‰(�-‰-×
Ñ
 Õ
$€÷@ñ @ñ ‹:€÷?õBõ6
&÷Oñ Oôd�,ô ð8 �kÕ!€õ÷(
ñ (
ôV 1�#ô  1ôF-ˆ+ô -ôˆkô õõ	õ9õBõ .ô@9
ˆkô 9
ôxE�ô Eô(E˜+ô Eô4O
�+ô O
ðd �C˜�H�o€ôs
�kô s
ôl�?ô ô�ô ô�ô ô˜ô ô(Ð,ô ôÐ*ô ôÐ*ô ô-
ˆ[ô -
ô`H
˜ô H
ôV%
�;ô %
÷P7ñ 7ôt!�Xô !ð ×Ò÷:ð :ó ð:ð> ×Òô˜<ó ó ðð ×Òô	=˜ó 	=ó ð	=ð ×ÒôE
˜ló E
ó ðE
õPõð ×Ó˜dÔ#÷)ð )ó $ð)õ
õõ ÷:!õH&÷'ð` ,8Ø7;Ø)+Ø,0Ø!Ø#ØBU÷HñV )3«Ð �oÓ 4õKñ\ ˜x›.×/Ò/°+Õ=Ð@UÕUÐ ð ×Ò÷#ð #ó ð#ð :<Ð Ð6Ó ;ð ,8Ø7;Ø)+Ø!ØBU÷9ðx ×Ó¨eÔ4ð
 8<Ø)+ØBUöó 5ð÷:		ð ,8ñ ð
 ð ð 37ð ð 26ð ð 59÷ ð  ðJ ,8ñð
 ÷ð õ.+ð —*“*ÐVÓW€õEõ.õ,Hõ
õDõ;ð ×Ó˜dÔ#÷ð ó $ðð ×Ò÷Vð Vó ðVð ×Òö$7ó ð$7õN	õ3õõõ2õ>÷ Rñ Rõj÷{ð| ‡ƒƒð%ð #'ð	%ð
 )<ö%ó ð%ðP ×ÓÓð/ð )<ö	/ó ð/õdõ"KõJõ@õ.ñ  #-£,€�Ó .÷+õ:÷r;   