+
    –°³jÊœ  ã                   ó  a € RO tH0 t ^ RIt^ RIHtHt ^ RIHtHt ^ RIH	t	H
t
 ^ RIt. RPOt]P                  ! ]4      t]	! R4      t]
! R4      t]]]3,          t]]]3,          t] ! R R4      4       t]]]]],          .]],          3,          t] ! R	 R
4      4       t]! 4       t] ^ k / s] ^k / t] ^k R R lt]] ]]3,          ]],          3,          t!/ s"] ^k ]]]] ]]3,          ,          3,          t#/ s$] ^k / s%] ^k / s&] ^k ^ s'] ^k ](! 0 RQm4      t)] ^k R R lt*RR/R R llt+/ t,] ^	k ]-! 4       t.] ^
k / t/] ^k R R lt0R R lt1R R lt2R R lt3R R lt4R R lt5R R  lt6R! R" lt7R# R$ lt8R%RR&RR'R/R( R) llt9R*RR+RR,R/R- R. llt:R/ R0 lt;R1 R2 lt<R3 R4 lt=R5RR6R/R7 R8 llt>R9R/R: R; llt?R<R/R= R> llt@R?RR@RR<R/RA RB lltARRRC RD lltBR<R/RE RF lltCRG RH ltDR@R/RI RJ lltER@R/RK RL lltFR@R/RM RN lltGR# )Sé    N)ÚCallableÚIterable)Ú	dataclassÚfield)Ú	ParamSpecÚTypeVarÚPÚRc                   ó8   a € ] tR t^t o RtRtRtV 3R ltRtV t	R# )Ú_OverrideNodezTrack function override data.FTc                óz   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[ ;R&   S[;R&   S[;R&   S[ ;R&   S[;R&   S[;R&   # )	é   Údsl_nameÚ	op_symbolÚdispatch_keyÚcond_fnÚimpl_fnÚnode_idÚunconditional_overrideÚactive©ÚstrÚ	_OpCondFnÚ	_OpImplFnÚbool)ÚformatÚ__classdict__s   "€ÚW/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/_native/registry.pyÚ__annotate__Ú_OverrideNode.__annotate__   sj   ø‡ ‚ ñ �Mñ	 ñ
 �Nñ ñ Ññ ñ Ññ ñ Ññ ñ �Lñ ñ !Ñ(ñ ñ Ñò ó    © N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©r   s   @r   r   r      s   ø‡ € á'ð $)ÐØ€F÷ ƒ r!   r   c                   ó²   a € ] tR t^1t o Rt]! ]R7      t]! ]R7      t]! ]R7      t	V 3R lR lt
RV 3R lR lltV 3R lR ltV 3R	 lR
 ltV 3R ltRtV tR# )Ú_FilterStatez+Manages filtering state for override nodes.)Údefault_factoryc                ó&   <€ V ^8„  d   QhRS[ RS[/# )r   ÚnodeÚreturn)r   r   )r   r   s   "€r   r   Ú_FilterState.__annotate__9   s   ø€ ÷ ñ ¡-ð ±Dñ r!   c                ó´   € VP                   V P                  9   d   R# VP                  V P                  9   d   R# VP                  V P
                  9   d   R# R# )zµ
Check if a node is enabled based on current filter state.

Args:
    node: The override node to check

Returns:
    bool: True if the node should be enabled, False if filtered out
FT)r   Ú
_dsl_namesr   Ú_op_symbolsr   Ú_dispatch_keys)Úselfr0   s   &&r   Úcheck_enabledÚ_FilterState.check_enabled9   sF   € ð �=‰=˜DŸO™OÔ+Ùà�>‰>˜T×-Ñ-Ô-Ùà×Ñ × 3Ñ 3Ô3Ùár!   c          
      óÀ   <€ V ^8„  d   QhRS[ S[S[ ,          ,          R,          RS[ S[S[ ,          ,          R,          RS[ S[S[ ,          ,          R,          RS[RR/# )r   Ú	dsl_namesNÚ
op_symbolsÚdispatch_keysÚremove_keysr1   )r   r   r   )r   r   s   "€r   r   r2   N   sn   ø€ ÷ Iñ Iá™¡#�Õ&¨Õ-ðIñ ™(¡3�-Õ'¨$Õ.ðIñ ™X¡c�]Õ*¨TÕ1ð	Iñ
 ðIð 
ñIr!   c                ó  € V'       d„   V ;P                   \        \        V4      4      ,          un         V ;P                  \        \        V4      4      ,          un        V ;P                  \        \        V4      4      ,          un        R# V ;P                   \        \        V4      4      ,          un         V ;P                  \        \        V4      4      ,          un        V ;P                  \        \        V4      4      ,          un        R# )a£  
Update filter sets as (current | new) or (current ~ new).

Args:
    dsl_names: DSL names to add/remove from filter
    op_symbols: Operation symbols to add/remove from filter
    dispatch_keys: Dispatch keys to add/remove from filter
    remove_keys: If True, remove keys from filter; if False, add them

Note:
    Uses set.discard as it doesn't raise an exception if the element
    wasn't in the set to begin with.
N)r4   ÚsetÚ_resolve_iterabler5   r6   )r7   r;   r<   r=   r>   s   &&&&&r   ÚupdateÚ_FilterState.updateN   s©   € ÷( Ø�OŠOœsÔ#4°YÓ#?Ó@Õ@�OØ×Ò¤Ô$5°jÓ$AÓ BÕBÕØ×Ò¤3Ô'8¸Ó'GÓ#HÕH×à�OŠOœsÔ#4°YÓ#?Ó@Õ@�OØ×Ò¤Ô$5°jÓ$AÓ BÕBÕØ×Ò¤3Ô'8¸Ó'GÓ#HÕH×r!   c                óF   <€ V ^8„  d   QhRS[ S[S[S[3,          ,          /# ©r   r1   )r@   Útupler   )r   r   s   "€r   r   r2   k   s!   ø€ ÷ 
ñ 
¡s©5±±c°­?Õ';ñ 
r!   c                óX   € \        V P                  V P                  V P                  4      # )z�
Build a set of dictionary keys based on the current filter state.

Returns:
    set[tuple[str, str]]: Set of (op_symbol, dispatch_key) tuples
)Ú_build_key_setr4   r5   r6   )r7   s   &r   Úbuild_disable_key_setÚ"_FilterState.build_disable_key_setk   s*   € ô Ø�O‰OØ×ÑØ×Ñó
ð 	
r!   c                ó    <€ V ^8„  d   QhRS[ /# rE   ©r   )r   r   s   "€r   r   r2   x   s   ø€ ÷ ñ ™ñ r!   c                óf  € RpVR,          pVR,          p\        V P                  4       F  w  r#VRV RV R2,          pK  	  VR,          p\        V P                  4       F  w  r$VRV RV R2,          pK  	  VR,          p\        V P                  4       F  w  r%VRV RV R2,          pK  	  V# )	z-Return string representation of filter state.Ú zFilter State:
z  === DSL: ===
ú    z: Ú
z  === OP SYMBOL: ===
z  === DISPATCH KEYS: ===
)Ú	enumerater4   r5   r6   )r7   ÚsÚiÚdslÚopÚkeys   &     r   Ú__str__Ú_FilterState.__str__x   sÈ   € àˆØ	ÐÕˆØ	ÐÕˆÜ §¡Ö0‰FˆAØ�4˜�s˜"˜S˜E Ð$Õ$ŠAñ 1à	Ð%Õ%ˆÜ˜t×/Ñ/Ö0‰EˆAØ�4˜�s˜"˜R˜D Ð#Õ#ŠAñ 1à	Ð)Õ)ˆÜ × 3Ñ 3Ö4‰FˆAØ�4˜�s˜"˜S˜E Ð$Õ$ŠAñ 5ð ˆr!   c                ón   <€ V ^8„  d   Qh/ S[ S[,          ;R&   S[ S[,          ;R&   S[ S[,          ;R&   # )r   r4   r5   r6   )r@   r   )r   r   s   "€r   r   r2   1   s8   ø‡ ‚ ñ ‘C•Ñ5ñ	 ñ
 ‘S•Ñ6ñ ñ ™•HÑ9ò r!   r"   N©F)r#   r$   r%   r&   r'   r   r@   r4   r5   r6   r8   rB   rI   rW   r(   r)   r*   r+   s   @r   r-   r-   1   sX   ø‡ € á5á °Ô5€JÙ!°#Ô6€KÙ$°SÔ9€N÷ð ÷*Iò I÷:
ð 
÷ð ÷O ƒ r!   r-   c                ó$   € V ^8„  d   QhR\         /# rE   ©r   )r   s   "r   r   r   §   s   € ÷ ñ ¬ñ r!   c                  óF  a€ R  V3R llo\         ;QJ d    V3R lV  4       F  '       g   K   RM	  RM! V3R lV  4       4      ;'       gW    \         ;QJ d-    V3R lVP                  4        4       F  '       g   K   R# 	  R# ! V3R lVP                  4        4       4      # )c                ó$   € V ^8„  d   QhR\         /# rE   r\   )r   s   "r   r   Ú%_has_cow_tensor.<locals>.__annotate__¨   s   € ÷ ñ œdñ r!   c                 ó
  <€ \        V \        P                  4      '       d    \        P                  P	                  V 4      # \        V \
        \        34      '       d;   \        ;QJ d    V3R  lV  4       F  '       g   K   R# 	  R# ! V3R  lV  4       4      # \        V \        4      '       dW   \        ;QJ d-    V3R lV P                  4        4       F  '       g   K   R# 	  R# ! V3R lV P                  4        4       4      # R# )c              3   ó4   <"  € T F  pS! V4      x € K  	  R # 5i©Nr"   ©Ú.0ÚitemÚis_cow_tensors   & €r   Ú	<genexpr>Ú9_has_cow_tensor.<locals>.is_cow_tensor.<locals>.<genexpr>¬   s   øé € Ð;±s¨t‘} T×*Ð*³sùó   ƒTFc              3   ó4   <"  € T F  pS! V4      x € K  	  R # 5irb   r"   rc   s   & €r   rg   rh   ®   s   øé € ÐD±|¨t‘} T×*Ð*³|ùri   )
Ú
isinstanceÚtorchÚTensorÚ_CÚ_is_cow_tensorÚlistrF   ÚanyÚdictÚvalues)Úargrf   s   &€r   rf   Ú&_has_cow_tensor.<locals>.is_cow_tensor¨   s¨   ø€ Ü�cœ5Ÿ<™<×(Ò(Ü—8‘8×*Ñ*¨3Ó/Ð/Ü�cœD¤%˜=×)Ò)ß“3Ô;±sÓ;—3”3Ð;’3Ð;�3Ô;±sÓ;Ó;Ð;Ü�cœ4× Ò ß“3ÔD°s·z±z´|ÓD—3”3ÐD’3ÐD�3ÔD°s·z±z´|ÓDÓDÐDÙr!   c              3   ó4   <"  € T F  pS! V4      x € K  	  R # 5irb   r"   ©rd   rt   rf   s   & €r   rg   Ú"_has_cow_tensor.<locals>.<genexpr>±   s   øé € Ð2©T c‰}˜S×!Ð!«Tùri   TFc              3   ó4   <"  € T F  pS! V4      x € K  	  R # 5irb   r"   rw   s   & €r   rg   rx   ±   s   øé € ð :Ù&5˜s‰�c×Ð£oùri   )rq   rs   )ÚargsÚkwargsrf   s   *,@r   Ú_has_cow_tensorr|   §   s}   ø€ ÷ð ÷ ‹3Ô2©TÓ2�3�3Š3Ô2©TÓ2Ó2÷ ð ·c³cô :Ø&,§m¡m¤oó:·c´cð ²cð °cô :Ø&,§m¡m¤oó:ó 7ð r!   c                ó.  € V ^8„  d   QhR\         \        \         ,          ,          R,          R\         \        \         ,          ,          R,          R\         \        \         ,          ,          R,          R\        \        \         \         3,          ,          /# )r   r;   Nr<   r=   r1   )r   r   r@   rF   )r   s   "r   r   r   Ñ   sg   € ÷ !ñ !Ü”Xœc•]Õ" TÕ)ð!ä”hœs•mÕ# dÕ*ð!ô œ¤#�Õ&¨Õ-ð!ô 	ŒŒs”Cˆx�Õñ	!r!   c                ó|   a€ \        4       oR V3R llpV! V \        4       V! V\        4       V! V\        4       S# )a+  
Build a set of dictionary keys based on filter criteria.

Args:
    dsl_names: DSL names to include in key set
    op_symbols: Operation symbols to include in key set
    dispatch_keys: Dispatch keys to include in key set

Returns:
    set[tuple[str, str]]: Set of (op_symbol, dispatch_key) tuples
c                ón   € V ^8„  d   QhR\         \        \         ,          ,          R,          R\        RR/# )r   ÚentriesNÚgraph_lib_dictr1   )r   r   Ú_MappingType)r   s   "r   r   Ú$_build_key_set.<locals>.__annotate__ã   s2   € ÷ 	%ñ 	%Ü”x¤•}Õ$ tÕ+ð	%Ü=Ið	%à	ñ	%r!   c                ó€   <€ \        V 4      pV F+  pW19   g   K  W,           F  pSP                  V4       K  	  K-  	  R# )z;Helper to add matching keys from graph_lib_dict to key_set.N)rA   Úadd)r€   r�   Úresolved_entriesÚentryrV   Úkey_sets   &&   €r   Ú_append_to_setÚ&_build_key_set.<locals>._append_to_setã   s<   ø€ ô -¨WÓ5Ðã%ˆEØÖ&Ø)×0Ð0�CØ—K‘K Ö$ó 1ó &r!   )r@   Ú_dsl_name_to_lib_graphÚ_op_symbol_to_lib_graphÚ_dispatch_key_to_lib_graph)r;   r<   r=   r‰   rˆ   s   &&& @r   rH   rH   Ñ   s>   ø€ ô  %(£E€G÷	%ð 	%ñ �9Ô4Ô5Ù�:Ô6Ô7Ù�=Ô"<Ô=à€Nr!   Úprint_inactiveFc                ó(   € V ^8„  d   QhR\         RR/# )r   rŽ   r1   Nr\   )r   s   "r   r   r   õ   s   € ÷ ñ ¬dð ¸tñ r!   c                ób  € \         P                  4        F–  w  w  rp\        RV: RV: 24       \        V4       Fl  w  rEVP                  '       g   V '       g   K!  RV RVP
                  : RVP                  : 2pV '       d   VRVP                  : 2,          p\        V4       Kn  	  K˜  	  R# )zn
Print all override graphs for debugging purposes.

Args:
    print_inactive: Whether to print inactive nodes
zop=z, key=rO   z: node.dsl_name=z, node.unconditional_override=z node.active=N)Ú_graphsÚitemsÚprintrQ   r   r   r   )rŽ   rU   rV   Ú	node_listrS   r0   rR   s   $      r   Ú_print_override_graphsr•   õ   s“   € ô !(§¡¦Ñ‰	ˆ�9Ü��‘�W˜‘vÐÔä  Ö+‰GˆAØ�{�{ˆ{Ÿn™nØ ˜sÐ"3 T§]¡]Ñ$4Ð4S°t×7RÑ7RÑ6TÐU�ß!Ø˜>˜TŸ[™[™NÐ+Õ+�Aä�a–ó ,ó !0r!   c                óX   € V ^8„  d   QhR\         R\        P                  P                  /# )r   Ú	namespacer1   ©r   rl   ÚlibraryÚLibrary)r   s   "r   r   r     s$   € ÷  ñ  ¤ð  ¬¯©×(=Ñ(=ñ  r!   c                 ó€   € V \         9  d(   \        P                  P                  V R 4      \         V &   \         V ,          # )ÚFRAGMENT)Ú	_def_libsrl   r™   rš   )r—   s   &r   Ú_get_def_libraryrž     s0   € Øœ	Ô!Ü$Ÿ}™}×4Ñ4°YÀ
ÓKŒ	�)ÑÜ�YÕÐr!   c                óX   € V ^8„  d   QhR\         R\        P                  P                  /# )r   r   r1   r˜   )r   s   "r   r   r     s$   € ÷ ñ ¬ð ´·±×1FÑ1Fñ r!   c                óŠ   € RV 3pV\         9  d)   \        P                  P                  RRV 4      \         V&   \         V,          # )z…
Get or create the _native IMPL library for a given dispatch key.

One library per dispatch key is shared across all overridden ops.
Ú_nativeÚIMPL)Ú_libsrl   r™   rš   )r   rV   s   & r   Ú_get_or_create_libraryr¤     s<   € ð �lÐ
#€CØ
”%ÔÜ—]‘]×*Ñ*¨9°f¸lÓKŒˆc‰
ä��:Ðr!   c                ó@   € V ^8„  d   QhR\         R\         R\        RR/# )r   r   r   Úkernelr1   N)r   r   )r   s   "r   r   r   )  s)   € ÷ #ñ #¤cð #¼ð #Ähð #ÐSWñ #r!   c                óÜ   € W3p\         P                  VR4      pVe   VP                  4        \        P                  P                  RRV4      pVP                  WVRR7       V\         V&   R# )zñ
Install (or replace) an aten kernel at (op_symbol, dispatch_key).

Creates a fresh Library per (op, key) so we can tear down just this
one override via `_destroy_aten_override` without affecting any other
override at the same dispatch key.
NÚatenr¢   T)Úwith_keyset)Ú_aten_override_libsÚpopÚ_destroyrl   r™   rš   Úimpl)r   r   r¦   rV   ÚexistingÚlibs   &&&   r   Ú_install_aten_overrider°   )  sg   € ð Ð
#€Cô #×&Ñ& s¨DÓ1€HØÒØ×ÑÔä
�-‰-×
Ñ
 ¨°Ó
=€CØ‡H�HˆY ¸$€HÔ?Ø"Ô˜Ór!   c                ó4   € V ^8„  d   QhR\         R\         RR/# )r   r   r   r1   NrL   )r   s   "r   r   r   >  s!   € ÷ ñ ¤cð ¼ð Àñ r!   c                ó`   € \         P                  W3R4      pVe   VP                  4        R# R# )zATear down the aten override at (op_symbol, dispatch_key), if any.N)rª   r«   r¬   )r   r   r¯   s   && r   Ú_destroy_aten_overrider³   >  s*   € ä
×
!Ñ
! 9Ð";¸TÓ
B€CØ
‚Ø�‰Žñ r!   c                ó(   € V ^8„  d   QhR\         RR/# )r   r   r1   ztorch._ops.OpOverload | NonerL   )r   s   "r   r   r   E  s   € ÷ ñ ¤cð Ð.Lñ r!   c                óÆ   € V P                  R4      w  rpT;'       g    Rp \        \        P                  P                  V4      p\        WC4      #   \
         d     R# i ; i)u   
Resolve `op_symbol` to a concrete OpOverload on `torch.ops.aten`.

Accepts bare names ("bmm" â†’ aten.bmm.default) and overload-qualified
names ("add_.Tensor" â†’ aten.add_.Tensor). Returns None if the op is not
registered (e.g. a test-only op_symbol that never hit the C++ dispatcher).
Ú.ÚdefaultN)Ú	partitionÚgetattrrl   Úopsr¨   ÚAttributeError)r   ÚnameÚ_Úoverload_nameÚpackets   &    r   Ú_resolve_aten_overloadrÀ   E  s\   € ð '×0Ñ0°Ó5Ñ€Dˆ]Ø!×.Ð. Y€MðÜœŸ™Ÿ™¨Ó.ˆÜ�vÓ-Ð-øÜô Úðús   ¢.A ÁA ÁA c                ó0   € V ^8„  d   QhR\         R\         /# )r   r   r1   rL   )r   s   "r   r   r   V  s   € ÷ ñ ¤ð ¬ñ r!   c                óÂ   € \        V 4      pVf   \        RV : 24      h\        VP                  4      pVP	                  R^4      w  r4VP	                  R^4      w  r5RV 2# )uÂ   Return the schema of at::<op_symbol> with the `aten::<name>` prefix stripped.

Accepts bare names ("bmm" â†’ aten.bmm.default) and overload-qualified
names ("add_.Tensor" â†’ aten.add_.Tensor).
z aten op not found for op_symbol=z::Ú()rÀ   r»   r   Ú_schemaÚsplit)r   ÚoverloadrR   r½   Úrestrz   s   &     r   Ú_aten_schema_tailrÈ   V  sg   € ô & iÓ0€HØÒÜÐ?À	¹}ÐMÓNÐNÜˆH×ÑÓ€Aà�g‰g�d˜AÓ�G€AØ�j‰j˜˜aÓ �G€AØˆtˆfˆ:Ðr!   c                ó4   € V ^8„  d   QhR\         R\         RR/# )r   r¼   r   r1   NrL   )r   s   "r   r   r   f  s!   € ÷ "ñ "¤ð "´ð "¸ñ "r!   c                 ó  € V \         9   d   R # \        R4      P                  V  \        V4       24       \	        V4      p\
        P                  P                  RV  24      ! RV/R l4       \         P                  V 4       R # )Nr¡   z	_native::Ú_aten_overloadc                 ó   € V ! V/ VB # rb   r"   )rË   rz   r{   s   $*,r   Ú<lambda>Ú(_define_native_op_once.<locals>.<lambda>t  s   € ¹nØð?
Øò?
r!   )	Ú_defined_native_opsrž   ÚdefinerÈ   rÀ   rl   r™   Úregister_faker…   )r¼   r   Úaten_overloads   && r   Ú_define_native_op_oncerÓ   f  sy   € ð Ô"Ô"ÙÜ�YÓ×&Ñ&¨$¨Ô0AÀ)Ó0LÐ/MÐ'NÔOô +¨9Ó5€MÜ	‡M�M×Ñ )¨D¨6Ð 2Ô3ð	
 ]ó 	
ôô ×Ñ˜DÖ!r!   c                óh   € V ^8„  d   QhR\         P                  P                  R\        R\        RR/# )r   r¯   r0   r   r1   N)rl   r™   rš   r   r   )r   s   "r   r   r   ‚  s6   € ÷ ñ Ü	�‰×	Ñ	ðÜ&3ðÜCFðà	ñr!   c                ó  € VP                   '       g)   \        RVP                  : RVP                  : R24      h\	        VP                   VP                  4       V P                  VP                   VP                  VRRR7       R# )zÈ
Register a single node implementation with the library.

Args:
    lib: The torch.library.Library instance
    node: The override node to register
    dispatch_key: The dispatch key for registration
zJ_OverrideNode must have a non-empty node_id before registration (dsl_name=z, op_symbol=Ú)FT)r©   Úallow_overrideN)r   Ú
ValueErrorr   r   rÓ   r­   r   )r¯   r0   r   s   &&&r   Ú_register_node_implrÙ   ‚  sx   € ð �<�<ˆ<ÜðØŸ™Ñ)¨°d·n±nÑ5GÀqðJó
ð 	
ô ˜4Ÿ<™<¨¯©Ô8Ø‡H�HØ�‰Ø�‰ØØØð ö r!   c                ó€   € V ^8„  d   QhR\         \        \         ,          ,          R,          R\        \         ,          /# )r   ÚiterableNr1   )r   r   )r   s   "r   r   r   œ  s,   € ÷ ñ ¤¤h¬s¥mÕ 3°dÕ :ð ¼xÌ½}ñ r!   c                óp   € V f   . # \        V \        4      '       d   \        V \        4      '       d   V 3# V # )z´
Resolve various input types to a consistent iterable of strings.

Args:
    iterable: String, iterable of strings, or None

Returns:
    Iterable[str]: Consistent iterable output
)rk   r   r   )rÛ   s   &r   rA   rA   œ  s5   € ð ÒØˆ	ä�h¤×)Ò)¬Z¸Ä#×-FÒ-FØˆ{Ðà€Or!   Úenable_dsl_namesÚenable_op_symbolsÚenable_dispatch_keysc                óî   € V ^8„  d   QhR\         \        \         ,          ,          R,          R\         \        \         ,          ,          R,          R\         \        \         ,          ,          R,          RR/# )r   rÝ   NrÞ   rß   r1   ©r   rp   )r   s   "r   r   r   ¯  sY   € ÷ 2ñ 2äœD¤�I•o¨Õ,ð2ô œT¤#�Y•¨Õ-ð2ô ¤¤S¥	�/¨DÕ0ð	2ð
 
ñ2r!   c                óð   € \         P                  RV VV4       \        P                  V VVRR7       \	        V VV4      pV F1  pVw  rVV\
        9   g   K  \        WV\
        V,          \        R7       K3  	  R# )aO  
Re-enable overrides by removing them from filter state and reregistering.

Args:
    enable_dsl_names: DSL names to re-enable
    enable_op_symbols: Operation symbols to re-enable
    enable_dispatch_keys: Dispatch keys to re-enable

Note:
    This function uses reverse filter state management (removing from
    filters to enable).
z>Re-registering ops by dsl: %s, op_symbol: %s, dispatch_key: %sT)r>   ©Úfilter_stateN)ÚlogÚinfoÚ_filter_staterB   rH   r‘   Ú_register_overrides_from_graph)rÝ   rÞ   rß   rˆ   rV   r   r   s   $$$    r   Úreenable_op_overridesré   ¯  s‚   € ô$ ‡H�HØHØØØô	ô ×ÑØØØØð	 ô ô %3ØØØó%€Gó ˆØ"%Ñˆ	à”'Ž>ô +Ø¬°­ÄM÷ó r!   Údisable_dsl_namesÚdisable_op_symbolsÚdisable_dispatch_keysc                óî   € V ^8„  d   QhR\         \        \         ,          ,          R,          R\         \        \         ,          ,          R,          R\         \        \         ,          ,          R,          RR/# )r   rê   Nrë   rì   r1   rá   )r   s   "r   r   r   ä  sY   € ÷ )ñ )äœT¤#�Y•¨Õ-ð)ô œd¤3�i�¨$Õ.ð)ô ¤¤c¥�?¨TÕ1ð	)ð
 
ñ)r!   c                óú   € \         P                  RV VV4       \        P                  WV4       \        P	                  4       pV F2  pVw  rVV\
        9   g   K  \        VV\
        V,          \        R7       K4  	  R# )aC  
De-register overrides by updating filter state and reregistering graphs.

Args:
    disable_dsl_names: DSL names to disable
    disable_op_symbols: Operation symbols to disable
    disable_dispatch_keys: Dispatch keys to disable

Note:
    This function uses filter state management to selectively disable
    operations.
z>De-registering ops by dsl: %s, op_symbol: %s, dispatch_key: %srã   N)rå   ræ   rç   rB   rI   r‘   Ú_cleanup_and_reregister_graph)rê   rë   rì   rˆ   rV   r   r   s   $$$    r   Úderegister_op_overridesrð   ä  ss   € ô$ ‡H�HØHØØØô	ô ×ÑÐ*Ð@UÔVô %2×$GÑ$GÓ$I€Gó ˆØ"%Ñˆ	à”'Ž>Ü)ØØÜ˜•Ü*÷	ó	 r!   c                óF   € V ^8„  d   QhR\         R\        \         ,          /# )r   r   r1   rá   )r   s   "r   r   r     s   € ÷ ñ ¤ð ¬¬c­ñ r!   c                óÈ   € \        4       p\        P                  4        F6  w  w  r#pV F(  pVP                  V 8X  g   K  VP	                  V4        K4  	  K8  	  \        V4      # )z¨Get list of operations registered by a specific DSL.

Args:
    dsl_name: Name of the DSL to query.

Returns:
    Sorted list of operation names registered by the DSL.
)r@   r‘   r’   r   r…   Úsorted)r   Ú
operationsr   r½   Únodesr0   s   &     r   Úget_dsl_operationsrö     sT   € ô “€JÜ!(§¡¦Ñ‰ˆ˜ÛˆDØ�}‰} Ö(Ø—‘˜yÔ)Úó ñ "1ô
 �*ÓÐr!   c          
      ón   € V ^8„  d   QhR\         R\         R\         R\        \         \         3,          RR/# )r   r   r   r   rV   r1   N)r   rF   )r   s   "r   r   r   "  sI   € ÷ #Lñ #LÜð#Läð#Lô ð#Lô 
Œs”Cˆx�ð	#Lð
 
ñ#Lr!   c                ó`   € R R lpV! \         W4       V! \        W4       V! \        W#4       R# )zº
Update the registration mapping dictionaries.

Args:
    dsl_name: The DSL name
    op_symbol: The operation symbol
    dispatch_key: The dispatch key
    key: The dictionary key tuple
c                ó¼   € V ^8„  d   QhR\         \        \        \        \        \        3,          ,          3,          R\        R\        \        \        3,          RR/# )r   ÚregistrationÚsymbolrV   r1   N)rr   r   rp   rF   )r   s   "r   r   Ú/_update_registration_maps.<locals>.__annotate__5  sO   € ÷ #ñ #Üœ3¤¤U¬3´¨8¥_Õ 5Ð5Õ6ð#äð#ô ”3œ�8�_ð#ð 
ñ	#r!   c                ód   € V P                  V4      pVf
   V.pW0V&   R# VP                  V4       R# )z;Helper to add key to registration list or create new entry.N)ÚgetÚappend)rú   rû   rV   Ú
entry_lists   &&& r   Ú_get_new_entry_or_appendÚ;_update_registration_maps.<locals>._get_new_entry_or_append5  s7   € ð "×%Ñ% fÓ-ˆ
àÒØ˜ˆJØ#-˜Ó à×Ñ˜cÖ"r!   N)r‹   rŒ   r�   )r   r   r   rV   r  s   &&&& r   Ú_update_registration_mapsr  "  s*   € õ&#ñ Ô3°XÔCÙÔ4°iÔEÙÔ7¸ÖKr!   c                ó<   € V ^8„  d   QhR\         R\         R\        /# )r   rz   r{   r1   )Úobjectr   )r   s   "r   r   r   H  s!   € ÷ ñ œð ¬&ð ´Tñ r!   c                  ó   € R # )Tr"   )rz   r{   s   *,r   Ú_always_truer  H  s   € Ùr!   Úallow_multiple_overrider   c                óŠ   € V ^8„  d   QhR\         R\         R\         R\         R\        R,          R\        R\        R	\        R
R/	# )r   ÚbackendÚ
lib_symbolr   r   ÚcondNr­   r  r   r1   r   )r   s   "r   r   r   L  s}   € ÷ MIñ MIÜðMIäðMIô ðMIô ð	MIô
 �dÕ
ðMIô ðMIô "ðMIô !ðMIð 
ñMIr!   c               óœ  € VR8w  d   \        RV R24      hV\        9   d   \        RV: R24      hVf   V'       g   \        R4      h\        pW#3p\        P	                  V. 4      p	VP                  RR	4      p
V
 R	V  R	\         2p\        ^,          sV	P                  \        V VVVVVVR
7      4       V	\        V&   \        WW8R7       R# )a-  
Register a passed override function to the dispatcher.

Actually a graph-building operation; real registration happens later.

Args:
    backend: The backend name (DSL name)
    lib_symbol: Library you're overriding symbols in (must be "aten")
    op_symbol: Name of the operation you're overriding
    dispatch_key: Dispatch key to override
    cond: Predicate choosing whether `impl` applies to a given call. May
        be None if `unconditional_override=True`.
    impl: Implementation function for the override
    allow_multiple_override: Allow overriding an existing override
    unconditional_override: Implementation doesn't have a fallback and
        doesn't require torch.DispatchKeySet as the first argument. When
        True, a trivially-True predicate is supplied for the router if
        `cond` is None.

Raises:
    ValueError: If lib_symbol is not "aten", if dispatch_key is in
        _DISALLOWED_DISPATCH_KEYS (Meta / CompositeImplicitAutograd /
        CompositeExplicitAutograd), or if cond is None without
        unconditional_override=True.
r¨   z.Unsupported lib_symbol (must be "aten", got: "Ú"zdispatch_key=z¡ is not supported. Overrides must be installed at a backend key (e.g. CPU, CUDA, XPU); the router's fake kernel redispatches to aten and would recurse otherwise.Nz8cond must be provided unless unconditional_override=Truer¶   r½   )r   r   r   r   r   r   r   )rV   )
rØ   Ú_DISALLOWED_DISPATCH_KEYSr  r‘   rþ   ÚreplaceÚ_node_id_counterrÿ   r   r  )r
  r  r   r   r  r­   r  r   rV   Úop_graphÚ
_sanitizedr   s   &&&&&&$$    r   Úregister_op_overrider  L  s÷   € ðH �VÔÜÐIÈ*ÈÐUVÐWÓXÐXàÔ0Ô0ÜØ˜LÑ+ð ,Gð Hó
ð 	
ð ‚|ß%ÜÐWÓXÐXÜˆàÐ
#€Cô �{‰{˜3 Ó#€Hð ×"Ñ" 3¨Ó,€JØ�˜A˜g˜Y aÔ(8Ð'9Ð:€GÜ˜ÕÐà‡O�OÜØØØ%ØØØ#9Øô	
ô
ð „GˆC�Lä˜g°,×Hr!   Úforce_reregisterc                ót   € V ^8„  d   QhR\         \        ,          R\         \        ,          R\        R\        /# )r   Úoriginal_graphÚ	new_graphr  r1   )rp   r   r   )r   s   "r   r   r   œ  s:   € ÷ 'ñ 'ÜœÕ'ð'ä”MÕ"ð'ô ð	'ô
 
ñ'r!   c               ó   € V'       d   R# W8g  # )a'  
Determine if a graph needs reregistration based on changes.

Args:
    original_graph: The original graph before modification
    new_graph: The graph after modification
    force_reregister: If True, always reregister regardless of changes

Returns:
    bool: True if reregistration is needed
Tr"   )r  r  r  s   &&$r   Ú_should_reregister_graphr  œ  s   € ÷" Ùð Ñ&Ð&r!   rä   c          
      óp   € V ^8„  d   QhR\         R\         R\        \        ,          R\        R,          RR/# ©r   r   r   Úgraphrä   Nr1   ©r   rp   r   r-   )r   s   "r   r   r   ´  sD   € ÷ ñ Üðäðô ”Õðô
  Õ%ðð 
ñr!   c               ó$   € \        V VVVR7       R# )ag  
Reregister a graph's routes from scratch.

Used by reorder / deregister / reenable. Libraries are intentionally
long-lived singletons; we rebuild the per-op router closure here.

Args:
    op_symbol: The operation symbol
    dispatch_key: The dispatch key
    graph: The graph to register
    filter_state: Optional filter state for conditional registration
rã   N)rè   )r   r   r  rä   s   &&&$r   rï   rï   ´  s   € ô& #ØØØØ!÷	r!   Úkeys_to_processÚreregister_overridesc          
      ó    € V ^8„  d   QhR\         R\        \        \        \        3,          ,          R,          R\        R\
        R,          RR/# )r   Útransformation_fnr   Nr!  rä   r1   )ÚUserOrderingFnr@   rF   r   r   r-   )r   s   "r   r   r   Ï  sZ   € ÷ Nñ NÜ%ðNô œœs¤C˜x�Õ)¨DÕ0ðNô ð	Nô
  Õ%ðNð 
ñNr!   c          	     óˆ  € Ve   TM\        \        P                  4       4      p\        V4       F¯  w  rVWV3\        9  d   K  \        \        WV3,          4      p V ! WVV4      p\        T\        4      '       g.   \        P                  R\        T4      P                  TT4       Kw  T\        YV3&   T'       g   K‹  \        YxRR7      '       g   K   \!        TTTTR	7       K±  	  R#   \        \
        \        \        3 d    \        P                  RTTRR7        Kì  \         d    \        P                  RTT4        EK  i ; i)
ad  
Apply a transformation function to graphs and optionally reregister.

This is the core pattern used by reorder_graphs_from_user_function and
can be reused for other graph transformation operations.

Args:
    transformation_fn: Function to transform each graph
    keys_to_process: Keys to process, or None for all graphs
    reregister_overrides: Whether to reregister changed graphs
    filter_state: Optional filter state for conditional registration

Note:
    If transformation_fn raises an exception for a specific graph, that graph
    will be skipped and processing will continue with remaining graphs.
NúAGraph transformation failed for %s/%s. Preserving original graph.T©Úexc_infoúNUnexpected error in graph transformation for %s/%s. Preserving original graph.zbGraph transformation returned invalid type %s for %s/%s. Expected list. Preserving original graph.F)r  rã   )r@   r‘   Úkeysrp   Ú	TypeErrorrØ   r»   ÚRuntimeErrorrå   ÚwarningÚ	ExceptionÚ	exceptionrk   Útyper#   r  rï   )	r#  r   r!  rä   Útarget_keysr   r   r  r  s	   &$$$     r   Ú_apply_graph_transformationr2  Ï  s7  € ð6 +Ò6‰¼CÄÇÁÃÓ<Oð ô
 $(¨Ö#4Ñˆ	ØÐ$¬GÔ3Ùäœg yÐ&?Õ@ÓAˆð	Ù)¨)À>ÓRˆIô$ ˜)¤T×*Ò*Ü�K‰KØtÜ�Y“×(Ñ(ØØô	ñ ð .7Œ�Ð)Ñ*÷  ÑÔ$<Ø¸÷%
õ %
ô *ØØØØ)÷	óU $5øô œ:¤~´|ÐDô 	Ü�K‰KØSØØØð	 ô ò Üô 	Ü�M‰MØ`ØØôó
 ð	ús   Á	C$Ã$4EÄEÄ$EÅ Ec                óR   € V ^8„  d   QhR\         R\        \        \        3,          /# )r   Úoverrides_onlyr1   )r   rr   r  r   )r   s   "r   r   r      s&   € ÷ 3ñ 3Üð3ä	Œ&”(Ð
Õñ3r!   c                ór   € V '       d   / pM^ RI Hp \        V! 4       4      pVP                  \        4       V# )aT  
Return a decomposition table suitable for passing to
``ExportedProgram.run_decompositions`` or to Inductor / Dynamo as a
decomposition set for ``torch.compile``.

This is the canonical way to apply native overrides outside of eager.
Callers opt in explicitly -- the registry does **not** install into any
global compile/export decomp table on its own. This preserves three
properties:

  * ``import torch._native`` doesn't transitively import inductor /
    dynamo / triton.
  * No other consumer (ONNX, tests, third-party backends) accidentally
    picks up our overrides.
  * Scoping is up to the caller: pass the table only where routing is
    desired.

By default, the returned table contains
``torch.export.default_decompositions()`` with native-registered
overrides layered on top -- matching typical "run the usual
decompositions, plus my overrides" intent. The override entries win
over any same-op default, because they're merged last.

Example:

    ep = torch.export.export(model, args)
    ep = ep.run_decompositions(
        torch._native.registry.native_decomp_table()
    )

Args:
    overrides_only: If True, return only the native-registered overrides
        and no default aten decompositions. Useful for inspection /
        debugging, or when composing tables manually.

Returns:
    A dict mapping ``OpOverload`` to decomposition callable.
)Údefault_decompositions)Útorch.exportr6  rr   rB   Ú_native_decomp_overrides)r4  Útabler6  s   &  r   Únative_decomp_tabler:     s2   € ÷R Ø(*‰õ 	8äÑ+Ó-Ó.ˆà	‡L�LÔ)Ô*Ø€Lr!   c          
      óp   € V ^8„  d   QhR\         R\         R\        \        ,          R\        R,          RR/# r  r  )r   s   "r   r   r   V  sK   € ÷ y<ñ y<Üðy<äðy<ô ”Õðy<ô
  Õ%ðy<ð 
ñy<r!   c               óD  aaa€ \        V4      p. oV Fi  pRpV'       d   VP                  V4      pV'       d=   \        WEV4       SP                  VP                  VP
                  34       RVn        Kb  RVn        Kk  	  \        V 4      p\        W4       S'       g   Ve   \        P                  VR4       R# \        P                  P                  RV  2V4      p\        4       oR VV3R lloRVRV/VV3R	 llp	VV3R
 lp
\        WV	4       Ve   V
\        V&   R# R# )zì
Register all overrides in a single graph.

Args:
    op_symbol: The operation symbol
    dispatch_key: The dispatch key
    graph: List of override nodes to register
    filter_state: Optional filter state for conditional registration
TFNzaten::c                ó$   € V ^8„  d   QhR\         /# )r   Úswallow_cond_exceptionsr\   )r   s   "r   r   Ú4_register_overrides_from_graph.<locals>.__annotate__ž  s   € ÷ 
ñ 
¼ñ 
r!   c                 óÎ   <€ S FB  w  r4 V! V / VB pT'       g   K  \        \        P                  P                  T4      ! T / TB u # 	  S#   \          d    T'       g   h  K_  i ; irb   )r.  r¹   rl   rº   r¡   )rz   r{   r>  r  Ú	impl_nameÚmatchedÚ	_NO_MATCHÚ	cond_impls   &&&   €€r   Ú	_dispatchÚ1_register_overrides_from_graph.<locals>._dispatchž  sm   ø€ Û(‰OˆDðÙ Ð/¨Ñ/�÷
 ‰wÜœuŸy™y×0Ñ0°)Ô<¸dÐMÀfÑMÒMñ  )ð Ðøô ô ß.ØÚðús   ŠAÁA$ÁA$Á#A$Ú	_fallbackrË   c                óÖ   <€ \         P                  P                  4       '       d   Ve   \        V/ VB '       g	   V! V/ VB # S! W4RR7      pVSJ d   VP                  ! V .VO5/ VB # V# )NF©r>  )rl   ÚcompilerÚis_dynamo_compilingr|   Ú
call_boxed)ÚkeysetrG  rË   rz   r{   ÚresultrC  rE  s   &$$*, €€r   Úeager_routerÚ4_register_overrides_from_graph.<locals>.eager_routerª  sr   ø€ ô �N‰N×.Ñ.×0Ò0ØÒ*Ü# TÐ4¨V×4Ð4á! 4Ð2¨6Ñ2Ð2á˜4ÀÔGˆØ�YÓØ×'Ò'¨Ð@°Ò@¸Ñ@Ð@Øˆr!   c                  ó4   <€ S! WR R7      pVSJ d   \         # V# )TrI  )ÚNotImplemented)rz   r{   rN  rC  rE  s   *, €€r   Úcompile_routerÚ6_register_overrides_from_graph.<locals>.compile_routerÁ  s"   ø€ Ù˜4ÀÔFˆØ�YÓÜ!Ð!Øˆr!   )r¤   r8   rÙ   rÿ   r   r   r   rÀ   r³   r8  r«   rl   r™   Ú
get_kernelr  r°   )r   r   r  rä   r¯   r0   ÚenablerÆ   Úfallback_kernelrO  rS  rC  rE  rD  s   &&&$       @@@r   rè   rè   V  s  ú€ ô  ! Ó
.€Cà-/€Ió
 ˆØˆßØ!×/Ñ/°Ó5ˆFçÜ ¨<Ô8Ø×Ñ˜dŸl™l¨D¯L©LÐ9Ô:ØˆDŽKàˆDŽKñ ô & iÓ0€Hô ˜9Ô3÷ ØÒÜ$×(Ñ(¨°4Ô8Ùô —m‘m×.Ñ.°¸	°{Ð/CÀ\ÓR€Oô “€I÷
ñ 
ðØ!0ðØAI÷ð ö.ô ˜9°LÔAð ÒØ-;Ô  Ó*ñ r!   c                ó   € V ^8„  d   QhRR/# )r   r1   Nr"   )r   s   "r   r   r   Ò  s   € ÷ 
ñ 
 ñ 
r!   c                 ób   € \         P                  4        F  w  rV w  r#\        VVV4       K  	  R# )zG
Perform all registration calls from previously-built override graphs.
N)r‘   r’   rè   )rV   r  r   r   s       r   Ú_register_all_overridesrZ  Ò  s/   € ô —m‘m–o‰
ˆØ"%Ñˆ	ä&ØØØö	
ó &r!   c                ó4   € V ^8„  d   QhR\         R\        RR/# )r   Úfnr!  r1   N)r$  r   )r   s   "r   r   r   à  s(   € ÷ ñ Üðô ðð 
ñ	r!   c               ó    € \        V VR7       R# )a’  
Reorder override graphs using a user-provided ordering function.

Args:
    fn: User-provided function that takes (op_symbol, dispatch_key, graph)
        and returns a reordered graph
    reregister_overrides: Whether to reregister graphs that have changed

Note:
    This function uses the common graph transformation pattern and can serve
    as an example for other graph manipulation operations.
©r#  r!  N©r2  )r\  r!  s   &$r   Ú!reorder_graphs_from_user_functionr`  à  s   € ô"  ØØ1÷r!   c                ól   € V ^8„  d   QhR\         \        \        \        .\        3,          R\        RR/# )r   Ú	filter_fnr!  r1   N)r   r   r   r   )r   s   "r   r   r   ÷  s9   € ÷ 5ñ 5Üœœc¤=Ð1´4Ð7Õ8ð5ô ð5ð 
ñ	5r!   c               ó4   a € R V 3R llp\        VVR7       R# )a´  
Apply a filter function to remove nodes from graphs.

This is a convenience function that uses the graph transformation pattern
to filter out unwanted nodes.

Args:
    filter_fn: Function that takes (op_symbol, dispatch_key, node) and
        returns True to keep the node, False to remove it
    reregister_overrides: Whether to reregister modified graphs

Example:
    # Remove all nodes with "deprecated" in the DSL name
    _apply_graph_filter(
        lambda op, dk, node: "deprecated" not in node.dsl_name,
        reregister_overrides=True
    )

Note:
    If filter_fn raises an exception for a specific graph, the original
    graph will be preserved and processing will continue.
c          	      ót   € V ^8„  d   QhR\         R\         R\        \        ,          R\        \        ,          /# ©r   r   r   r  r1   ©r   rp   r   )r   s   "r   r   Ú)_apply_graph_filter.<locals>.__annotate__  s6   € ÷ ñ ÜðÜ&)ðÜ26´}Õ2Eðä	ŒmÕ	ñr!   c                ó  <€  V Uu. uF  pS! WV4      '       g   K  VNK  	  up# u upi   \         \        \        \        3 d    \        P                  RT TRR7       Tu # \         d    \        P                  RT T4       Tu # i ; i)z-Apply filter_fn to graph with error handling.r&  Tr'  r)  ©r+  rØ   r»   r,  rå   r-  r.  r/  )r   r   r  r0   rb  s   &&& €r   Úfiltering_transformationÚ5_apply_graph_filter.<locals>.filtering_transformation  sŒ   ø€ ð	Ù%*ÓW¡U˜T©i¸	ÐQU×.V—D�D¡UÑWÐWùÒWøÜœ:¤~´|ÐDô 	Ü�K‰KØSØØØð	 ô ð ŠLÜô 	Ü�M‰MØ`ØØôð
 ŠLð	ús+   ƒ+ ‡&�&£+ ¦+ «6B	Á#B	Á,B	ÂB	r^  Nr_  )rb  r!  rj  s   f$ r   Ú_apply_graph_filterrl  ÷  s   ø€ ÷8ð ô,  Ø2Ø1÷r!   c                ón   € V ^8„  d   QhR\         \        \        .\        3,          R\        R\        RR/# )r   Úcondition_fnÚordering_fnr!  r1   N)r   r   r   r$  )r   s   "r   r   r   /  sD   € ÷ Lñ LÜœC¤˜:¤tÐ+Õ,ðLäðLô ð	Lð
 
ñLr!   c               ó8   a a€ R V V3R llp\        VVR7       R# )aý  
Apply reordering only to graphs that match a condition.

This allows for more targeted reordering operations.

Args:
    condition_fn: Function that takes (op_symbol, dispatch_key) and
        returns True if the graph should be reordered
    ordering_fn: Ordering function to apply to matching graphs
    reregister_overrides: Whether to reregister modified graphs

Example:
    # Only reorder CUDA operations
    _apply_selective_reordering(
        condition_fn=lambda op, dk: dk == "CUDA",
        ordering_fn=lambda op, dk, g: sorted(g, key=lambda n: n.dsl_name),
        reregister_overrides=True
    )

Note:
    If condition_fn or ordering_fn raises an exception for a specific graph,
    the original graph will be preserved and processing will continue.
c          	      ót   € V ^8„  d   QhR\         R\         R\        \        ,          R\        \        ,          /# re  rf  )r   s   "r   r   Ú1_apply_selective_reordering.<locals>.__annotate__M  s6   € ÷ )ñ )Üð)Ü&)ð)Ü26´}Õ2Eð)ä	ŒmÕ	ñ)r!   c                óÂ  <€  S! W4      pT'       d    S! YT4      # T#   \         \        \        \        3 d    \        P                  RT TRR7       Tu # \         d    \        P                  RT T4       Tu # i ; i  \         \        \        \        3 d    \        P                  RT TRR7       Tu # \         d    \        P                  RT T4       Tu # i ; i)z=Apply ordering_fn conditionally based on condition_fn result.r&  Tr'  r)  ri  )r   r   r  Úshould_reorderrn  ro  s   &&& €€r   Úconditional_transformationÚ?_apply_selective_reordering.<locals>.conditional_transformationM  sô   ø€ ð	Ù)¨)ÓBˆN÷" ðÙ" 9¸EÓBÐBð" ˆøôG œ:¤~´|ÐDô 	Ü�K‰KØSØØØð	 ô ð ŠLÜô 	Ü�M‰MØ`ØØôð
 ŠLð	ûô œz¬>¼<ÐHô Ü—‘ØWØØ Ø!ð	 ô ð ’Üô Ü—‘ØdØØ ôð
 ’ðús8   ƒ ”B  Ÿ6A=ÁA=Á A=Á<A=Â 6CÂ8CÃCÃCr^  Nr_  )rn  ro  r!  ru  s   ff$ r   Ú_apply_selective_reorderingrw  /  s   ù€ ÷<)ñ )ôV  Ø4Ø1÷r!   c                óh  € V ^8„  d   Qh/ ^ \         9   d
   \        ;R&   ^\         9   d@   \        \        \        \        3,          \
        P                  P                  3,          ;R&   ^\         9   d   \        \        \        3,          ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d   \        \        ,          ;R	&   ^	\         9   d/   \        \        \
        P                  P                  3,          ;R
&   ^
\         9   d   \        \        ,          ;R&   ^\         9   d@   \        \        \        \        3,          \
        P                  P                  3,          ;R&   # )r   rç   r£   r8  r‘   r‹   r�   rŒ   r  r  r�   rÏ   rª   )Ú__conditional_annotations__r-   rr   rF   r   rl   r™   rš   r  r   Ú_GraphsTyper‚   ÚintÚ	frozensetr@   )r   s   "r   r   r      sY  € ‡�÷R -Ò ,Œ|Ñ ,ñS ÷X 9Ò 8„tŒE”#”s�(�OœUŸ]™]×2Ñ2Ð2Õ3Ñ 8ñY ÷F 6Ò 5œ$œv¤xÐ/Õ0Ñ 5ñG ÷n Ò ŒÑ ño ÷x *Ò )œÑ )ñy ÷z .Ò -œLÑ -ñ{ ÷| +Ò *œÑ *ñ} ÷F Ò ”#Ñ ñG ÷Vò œ9¤S�>ñ ñW ÷P 1Ò 0Œ4””U—]‘]×*Ñ*Ð*Õ+Ñ 0ñQ ÷T &Ò %”Sœ•XÑ %ñU ÷` GÒ F”Tœ%¤¤S �/¬5¯=©=×+@Ñ+@Ð@ÕAÑ Fòa r!   )r$  r  r`  ré   rð   rö   r:  >   ÚMetaÚCompositeExplicitAutogradÚCompositeImplicitAutogradrZ   )Iry  ÚloggingÚcollections.abcr   r   Údataclassesr   r   Útypingr   r   Útorch.libraryrl   Ú__all__Ú	getLoggerr#   rå   r	   r
   r   r   r   r   r   rp   r$  r-   rç   r£   r8  r|   rr   rF   rz  r‘   r‚   r‹   r�   rŒ   r  r|  r  rH   r•   r�   r@   rÏ   rª   rž   r¤   r°   r³   rÀ   rÈ   rÓ   rÙ   rA   ré   rð   rö   r  r  r  r  rï   r2  r:  rè   rZ  r`  rl  rw  r   )ry  s   @r   Ú<module>r‡     sÉ  øðß €ß .ß (ß %ã ò€ð ×Ò˜Ó!€áˆcƒN€ÙˆCƒL€à�Q˜�WÕ€	Ø�Q˜�T�N€	ð ÷ð ó ðð" ˜3  T¨-Õ%8Ð9¸4ÀÕ;NÐNÕO€ð ÷Tð Tó ðTñp +›n€Ó ,ð 79€Ó 8ð. 46Ð Ó 5õð  �5˜˜c˜•? D¨Õ$7Ð7Õ8€Ø€Ó à�C˜˜e C¨ H�oÕ.Ð.Õ/€ð (*Ð Ó )Ø+-Ð Ó -Ø(*Ð Ó *ð
 Ð Ó ñ -6ÚFó-Ð ó õ
!ðH°U÷ ð( /1€	Ó 0á #£Ð Ó %ð EGÐ Ó Fõ õõ#õ*õõ"õ "õ8õ4ð&2à/3ð2ð 15ð2ð 48÷	2ðj)à04ð)ð 26ð)ð 59÷	)õXõ$#LõLðMIð %*ðMIð $)÷MIð`'ð #÷	'ð0ð
 )-÷ð6Nð 48ðNð "'ð	Nð
 )-÷N÷b3ðly<ð
 )-÷y<õx
ðð "'÷ð.5ð "'÷5ðpLð "'÷	Lñ Lr!   