
    3j                        S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKJr  S SK	J
r
Jr  S SKJrJrJr  S SKJrJr  S SKJr  \" 5       r\b  \rS SKrS SKJs  Jr  S SKJr  S SKJr  S S	KJ r   S S
K!J"r"J#r#J$r$  S SK%J&r&J'r'J(r(  S SK)J*r*  S SK+J,r,  S SK-J.r.  \" S\R^                  \R`                  5      r1S\2S\34S jr4S\2S\34S jr5\Rl                   " S S5      5       r7S?S jr8S\9S\Rt                  \9   4S jr;S\
/ S4   4S jr<\ Rz                  S\S   4S j5       r> " S S\R~                  5      r@ " S S5      rA\" S \95      rB " S! S"\R                  5      rD " S# S$5      rE " S% S&5      rF " S' S(5      rG " S) S*5      rH " S+ S,5      rI " S- S.5      rJ " S/ S05      rK " S1 S2\K5      rL " S3 S4\K5      rM " S5 S6\K5      rN " S7 S8\K5      rO " S9 S:\K5      rP " S; S<5      rQ " S= S>5      rRg)@    N)abstractmethod)Callable	Generator)AnyNewTypeTypeVar)overrideSelf)import_dill)TracingContext)AOTCompiledArtifact)FakeScriptObject)
FakeTensorFakeTensorModeTensor)MetaConverterMetaTensorDescMetaTensorDescriber)SymNode)ShapeEnv)no_dispatch	_SymNodeTnamereturnc                 $    U R                  S5      $ )z
An ops filter which allows pickle-safe ops. Pickle-safe ops are built-in
ones where it will be possible to unpickle on any machine which has PyTorch.
)ztorch.ops.atenztorch.ops.fbgemm)
startswithr   s    Q/home/wildlama/miniconda3/lib/python3.13/site-packages/torch/fx/_graph_pickler.py_ops_filter_safer   '   s     ??	
     keyc                     U S;  $ )z
A metadata filter which allows pickle-safe node metadata. These often times contain
stacks with pointers to unserializable objects, so we clear them out.
)source_fn_stacknn_module_stackfwd_source_fn_stack )r!   s    r   _node_metadata_key_filter_safer'   5   s    
 SSSr    c                   d    \ rS rSr% \r\\/\4   S-  \	S'   \
r\\/\4   S-  \	S'   Sr\\	S'   Srg)Options=   N
ops_filternode_metadata_key_filterFignore_raw_noder&   )__name__
__module____qualname____firstlineno__r   r+   r   strbool__annotations__r'   r,   r-   __static_attributes__r&   r    r   r)   r)   =   sJ     0@J#%,?& hud{3d: 
 "OT!r    r)   c                      g Nr&   r&   r    r   _unpickle_as_noner8   J   s    r    referentc                 .    [         R                  " U 5      $ r7   )weakrefref)r9   s    r   _unpickle_as_weakrefr=   N   s    ;;x  r    c                      S $ )Nc                      g r7   r&   r&   r    r   <lambda>+_unpickle_as_dead_weakref.<locals>.<lambda>S   s    4r    r&   r&   r    r   _unpickle_as_dead_weakrefrB   R   s    r    c               #      #    [         [        R                  ;   a  S v   g [        R                  " [         S S 5         S v   [        R                  " [         5        g ! [        R                  " [         5        f = f7f)Nc                 L    U R                   U R                  U R                  /S 4$ r7   )startstopstep)xs    r   r@   -patch_pytree_map_over_slice.<locals>.<lambda>]   s    177AFFAFF3T:r    c                     [        U 6 $ r7   )slice)rH   cs     r   r@   rI   ]   s	    PQr    )rK   pytreeSUPPORTED_NODES_private_register_pytree_node_deregister_pytree_noder&   r    r   patch_pytree_map_over_slicerQ   V   sT     &&&
((:<R.&&u-&&u-s   <A=A A=A::A=c                   D  ^  \ rS rSrSrSS\R                  S\S-  SS4U 4S jjjr\	S\
S\\S	\4   \\S	4   4   4S
 j5       r\	S\
S\S-  4S j5       r\SS\
S\S-  S\4S jj5       r\S\S\S\
4S j5       r\ SSSSS.S\
SSS\S\S\S\S-  4S jjj5       rSrU =r$ )GraphPicklerg   zV
GraphPickler is a Pickler which helps pickling fx graph - in particular
GraphModule.
Nfileoptionsr   c                    > [         b  [        TU ]	  USS9  O[        TU ]	  U5        U=(       d
    [        5       U l        [        [        5       5      U l        [        SS9U l	        g )NT)byrefF)	copy_data)
dillsuper__init__r)   rV   _UnpickleStateTokenobject_unpickle_stater   _meta_tensor_describer)selfrU   rV   	__class__s      r   r\   GraphPickler.__init__m   sV    GT.GT"+')  368< ':E&J#r    obj.c                    [        U[        5      (       a  [        R                  X5      $ [        U[        R
                  R                  5      (       a  [        R                  X5      $ [        U[        R                  R                  [        R                  R                  45      (       a  [        R                  X5      $ [        U[        5      (       a  [        R                  X5      $ [        U[        R                  5      (       a  [        R                  X5      $ [        U[        R                   R"                  5      (       a  [$        R                  X5      $ [        U[&        5      (       aC  SSKJn  [,        R/                  US5      nUb  U" [1        U5      5      (       a  [2        $ [4        S4$ [        U[6        R8                  5      (       a  U" 5       nUb	  [:        U44$ [<        S4$ [        U[        R
                  R>                  5      (       a.  U R@                  RB                  (       a  [4        S4$ [E        S5      e[F        R                  X5      =n(       a  U$ [2        $ )Nr   )is_opaque_value_typereal_objr&   z#Unexpected raw Node during pickling)$
isinstancer   _TensorPickleDatareduce_helpertorchfxGraphModule_GraphModulePickleData_opsOperatorBaseOpOverloadPacket_OpPickleDatar   _ShapeEnvPickleDataSymInt_SymNodePickleData_guardsr   _TracingContextPickleDatar   torch._library.opaque_objectrf   r^   __getattribute__typeNotImplementedr8   r;   r<   r=   rB   NoderV   r-   AssertionError_TorchNumpyPickleData)ra   rd   rf   rg   r9   reduces         r   reducer_overrideGraphPickler.reducer_override~   s   , c:&&$224==UXX1122)77BBejj55uzz7R7RSTT ..t99X&&&44T??U\\**%33D>>U]]99::,::4EE-..I..sJ?H#(<T(^(L(L%%%r**W[[)) uH#,xk::1266 #uxx}}--<<//-r22$%JKK.<<TGGvG "!r    c                 "    XR                   L a  gg )Nunpickle_stater_   )ra   rd   s     r   persistent_idGraphPickler.persistent_id   s     &&&#r    c                    [        5          [        R                  " 5        nU " X25      nUR                  U5        UR	                  5       sSSS5        sSSS5        $ ! , (       d  f       O= fSSS5        g! , (       d  f       g= f)z
Pickle an object.
N)rQ   ioBytesIOdumpgetvalue)clsrd   rV   streampicklers        r   dumpsGraphPickler.dumps   sP    
 )*BJJLF&*GLL??$ -9L**LL***s"   A7)A
	A7
A+	'A77
Bdata	fake_modec                 r   SSK Jn  [        5          U" S5         [        U5      n[        R
                  " U 5       n[        XC5      nUR                  5       sSSS5        sSSS5        sSSS5        $ ! , (       d  f       O= f SSS5        O! , (       d  f       O= fSSS5        g! , (       d  f       g= f)z
Unpickle an object.
r   )dynamo_timedzGraphPickler.loadsN)torch._dynamo.utilsr   rQ   _UnpickleStater   r   _GraphUnpicklerload)r   r   r   stater   	unpicklers         r   loadsGraphPickler.loads   sy    
 	5(*L9M,N"9-ED!V+F:	 ~~' "! -O,N**!!! -O,N,N***s?   	B("BA3	B 	B(3
B=B	B(
B	B((
B6P   2   T)	max_depthmax_iter_itemsverbosezOptions | Noner   r   r   c          	      B  ^ ^^^^^^^	^
^ T=(       d
    [        5       mT " [        R                  " 5       T5      m	[        5       m
S[        SS4U4S jjmS[
        S[        S-  4U U4S jjmS[
        S[        S[        S[        S-  4UUUUU	U
U4S	 jjmT" US
S5      nU$ )a4  
Find the first leaf that GraphPickler.dumps cannot serialize and return its path.

This is GraphPickler-aware and avoids infinite loops by:
  - Traversing builtin containers directly (dict/list/tuple/set) instead of
    exploring their __reduce_ex__ tuples.
  - Only using __reduce_ex__ / __reduce__ for "opaque" objects.
  - Bounding recursion depth and iterator expansion.

Args:
    obj: The object to attempt to pickle and debug.
    options: Optional Options instance for the GraphPickler.
    max_depth: Maximum recursion depth before stopping traversal.
    max_iter_items: Maximum number of items to materialize from iterators.
    verbose: If True, prints detailed traversal information.

Returns:
    A string representing the path to the first unpicklable leaf,
    or None if the object is fully picklable.
msgr   Nc                 ,   > T(       a  [        U 5        g g r7   )print)r   r   s    r   log%GraphPickler.debug_dumps.<locals>.log  s    c
 r    oc                 ^   >  TR                  U T5        g ! [         a  nUs S nA$ S nAff = fr7   )r   	Exception)r   er   rV   s     r   fail_exc*GraphPickler.debug_dumps.<locals>.fail_exc  s.    		!W% s    
,',,pathdepthc           	      v  > UT:  a"  T" SU-   SU S[        U 5       S35        US-   $ [        U 5      nUT;   a  g TR                  U5        SU-  nT" U SU S[        U 5       S35        T" U 5      nUc  T" U S35        g T" U S[        U 5       S	U 35        [        U [        5      (       a9  U R                  5        H#  u  pgT" Xq S
U< S3US-   5      nU(       d  M!  Us  $    U$ [        U [        [        45      (       a3  [        U 5       H"  u  pT" Xq S
U	 S3US-   5      nU(       d  M   Us  $    U$ [        U [        [        45      (       a3  [        U 5       H"  u  pT" Xq S
U	 S3US-   5      nU(       d  M   Us  $    U$ [        U S5      (       a  [        U 5      R                  R                  S5      (       a   [        [        R                  " [!        U 5      TS-   5      5      n
U
bW  [%        U
5      T:  a  T" U ST ST 35        U
S T n
[        U
5       H"  u  pT" Xq S
U	 S3US-   5      nU(       d  M   Us  $    U$  TR'                  U 5      nT" U S[        U5       35        U[(        LaK  Uu  pT" U S[%        U5       35        [        U5       H"  u  pT" X SU	 S3US-   5      nU(       d  M   Us  $    [*        R,                  " U 5      (       a\  [*        R.                  " U 5       H@  n [1        U UR2                  5      nT" Xq SUR2                   3US-   5      nU(       d  M>  Us  $    U$ [1        U SS 5      n[5        U5      (       a7   U" 5       nT" U S[        U5       35        T" UUS-   US-   5      nU(       a  U$ [        U S5      (       aA  [7        U 5      R                  5        H"  u  nnT" Xq SU 3US-   5      nU(       d  M   Us  $    U$ [        U S5      (       aO  U R8                   H=  n[        U U5      (       d  M  T" [1        U U5      U SU 3US-   5      nU(       d  M;  Us  $    U$ S n [        U S5      (       a6  U R;                  [<        R>                  5      nT" U S[        U5       35        O7[        U S5      (       a&  U RA                  5       nT" U S[        U5       35        [        U[        5      (       a8  [        U5       H)  u  n	nUc  M  T" UU S!U	 S3US-   5      nU(       d  M'  Us  $    U$ ! ["         a    S n
 GN2f = f! ["         a  nT" U SU 35        Us S nA$ S nAff = f! ["         a    U SUR2                   3s s  $ f = f! ["         a  nT" U SU 35        US-   s S nA$ S nAff = f! ["         a  nT" U S U 35        Us S nA$ S nAff = f)"Nz  zDepth limit at z ()z (depth_limit)z	Walking: u   ✓ Pickles fine alonez[FAIL pickle] z -> []   __iter__iteratoru   ⚠ Iterator has more than z items, only checking first zreducer_override -> u   💥 reducer_override crashed: zUsing custom reduce, args=z.reduce_args[.__getstate__z__getstate__ -> u   💥 __getstate__ failed: z.__getstate__()__dict__	__slots____reduce_ex__z__reduce_ex__ -> 
__reduce__z__reduce__ -> u   💥 reduce protocol failed: z.__reduce__[)!rz   idaddrh   dictitemslisttuple	enumerateset	frozensethasattrr.   endswith	itertoolsisliceiterr   lenr   r{   dataclassesis_dataclassfieldsgetattrr   callablevarsr   r   pickleHIGHEST_PROTOCOLr   ) r   r   r   r!   indentr   kvbadiprefixrede2_argsafgetstater   e3r   slotreduce_tuplee4partr   r   r   r   r   visitedwalks                             r   r   &GraphPickler.debug_dumps.<locals>.walk  s   y te|nOD6DG9AFG...Q%Cg~KKE\F6()D6DG9A67Ayvh4566(.a	aS9: !T""GGIDAqF!A5"2EAI>Cs"
 & !dE]++%aLDAqF!A3a.%!)<Cs"
 ) !c9-..%aLDAqF!A3a.%!)<Cs"
 )  q*%%$q'*:*:*C*CJ*O*O"!)"2"247NQ<N"OPF %6{^3%h&A.AQ R33A2BD "(!8 )& 1"1as!neai@3#&J !2  K..q1vh249+>?
 .(vh8TDE%dODAqF-s!"<eaiHCs"
 , ''**$++A.A2#Aqvv. qF!AFF8"4eai@Cs"
 /  q.$7H!!4$JE6("24;-@A 5$):":EAIFJq*%%#Aw}}GD!qF!D6"2EAI>Cs"
  / q+&&KKDq$''"71d#3vQtf5EuqyQ3#&J	 (
   L	1o..#$??63J3J#KL6("3D4F3GHIQ--#$<<>L6(.l1C0DEF
 ,..(6GAt| tv\!A%>	JCs"
  7 Ky ! "!F"&  vh=bTBC" % 2"&q112 ! 46("<RDAB"3334>  vh;B4@As   ,T 'T# 8U	U, AV 
7V T T #
U-U;UU	U)(U),
V6VVV
V8V3-V83V8rootr   )r)   r   r   r   r2   r   BaseExceptionint)r   rd   rV   r   r   r   r   r   r   r   r   r   s   ` ```` @@@@@r   debug_dumpsGraphPickler.debug_dumps   s    < &WYbjjlG,E	S 	T 		 	 4 	 	I	C I	s I	3 I	3: I	 I	V 3"
r    )r`   r_   rV   r7   )r.   r/   r0   r1   __doc__r   r   r)   r\   r	   r^   r   r   r   r   r2   r   classmethodbytesr   staticmethodr   r   r   r3   r   r5   __classcell__rb   s   @r   rS   rS   g   s`   
KRZZ K'D. KD K K" ="="	xS!5c?2	3=" ="~  C$J   % %4 %5 % % 
(E 
(n 
( 
( 
(  %)y
  yy "y
 y y y 
ty yr    rS   c                   &    \ rS rSrS\SS4S jrSrg)r   i  r   r   Nc                 .    Xl         [        5       U l        g r7   )r   r   meta_converter)ra   r   s     r   r\   _UnpickleState.__init__  s    "9Fr    )r   r   )r.   r/   r0   r1   r   r\   r5   r&   r    r   r   r     s    I. IT Ir    r   r]   c                   h   ^  \ rS rSrS\R
                  S\SS4U 4S jjr\S\	S\	4S j5       r
S	rU =r$ )
r   i  r   r   r   Nc                 0   > [         TU ]  U5        X l        g r7   )r[   r\   r_   )ra   r   r   rb   s      r   r\   _GraphUnpickler.__init__  s     -r    pidc                 R    US:X  a  U R                   $ [        R                  " S5      e)Nr   zInvalid persistent ID)r_   r   UnpicklingError)ra   r   s     r   persistent_load_GraphUnpickler.persistent_load  s+     ""'''(()@AAr    r   )r.   r/   r0   r1   r   r   r   r\   r	   r^   r   r5   r   r   s   @r   r   r     sG    .rzz .> .d . B6 Bf B Br    r   c                       \ rS rSr% \\\4   \S'   \S\	S\
S\\\\/\
4   \\\4   4   4S j5       rS\
SS4S	 jrS
\S\
4S jrSrg)rs   i  r   r   rd   r   c                 B    U R                   U " U5      UR                  44$ r7   unpickler_   r   r   rd   s      r   rj   !_ShapeEnvPickleData.reduce_helper  s"     ||c#h(?(?@@@r    envNc                     UR                   (       a  [        S5      eUR                  R                  5       U l        U R                  S	 U R                  S	 g )Nz4Translation validation must be disabled for picklingtracked_fakesfake_tensor_cache)_translation_validation_enabledr}   r   copyr   )ra   r  s     r   r\   _ShapeEnvPickleData.__init__  sF     .. !WXXLL%%'	IIo&II)*r    r   c                 8   UR                   (       d  [        S5      eUR                   R                  (       d  [        S5      eU R                  R	                  5        H%  u  p#[        UR                   R                  X#5        M'     UR                   R                  $ )Nz#unpickle_state.fake_mode is not setz-unpickle_state.fake_mode.shape_env is not set)r   r}   	shape_envr   r   setattr)ra   r   r   r   s       r   r  _ShapeEnvPickleData.unpickle  ss    '' !FGG''11 !PQQIIOO%DAN,,66= & ''111r    )r   )r.   r/   r0   r1   r   r2   r^   r4   r   rS   r   r   r   r
   r   r]   rj   r\   r  r5   r&   r    r   rs   rs     s    
sF{
A"A)1A	$'12E$@S:S4TT
A A+H + +
2~ 
2( 
2r    rs   c                       \ rS rSr\S\S\S\\\	\
/\4   \\	\4   4   4S j5       rS\SS4S jrS\4S	 jrS
\
S\R"                  4S jrSrg)ru   i  r   rd   r   c                     U " UR                   5      UR                  4n[        U[        R                  5      (       a  [
        R                  U4$ [        S[        U5       35      e)NzUnhandled SymNode type )	noder_   rh   rk   rt   ru   unpickle_sym_intNotImplementedErrorrz   )r   r   rd   r   s       r   rj    _SymNodePickleData.reduce_helper  sU     CHHw667c5<<((%66<<%(?S	{&KLLr    r  Nc                     UR                   U l        UR                  U l        UR                  U l        UR                  U l        g r7   )_exprexprr  pytype_hinthint)ra   r  s     r   r\   _SymNodePickleData.__init__  s.    JJ	kkJJ	r    c                     U R                   c  [        S5      e[        U R                  U R                   U R                  U R
                  5      $ )Nzshape_env is None)r  r}   r   r  r  r  )ra   s    r   _to_sym_node_SymNodePickleData._to_sym_node  s9    >>! !455tyy$..$++tyyIIr    r   c                 J    [         R                  " U R                  5       5      $ r7   )rk   rt   r  ra   r   s     r   r  #_SymNodePickleData.unpickle_sym_int  s    ||D--/00r    )r  r  r  r  )r.   r/   r0   r1   r   rS   r   r   r   r
   r   r]   rj   r   r\   r  rk   rt   r  r5   r&   r    r   ru   ru     s    MM M 
$'23U4AT;T5UU
	M MW  Jg J
1~ 1%,, 1r    ru   c                       \ rS rSr% \\   \S'   \S\S\S\	\
\\/\4   \	\\4   4   4S j5       rS\S\SS	4S
 jrS\S\4S jrSrg	)ri   i  metadatar   rd   r   c                 X    U R                   U " UR                  U5      UR                  44$ r7   )r  r`   r_   r  s      r   rj   _TensorPickleData.reduce_helper  s3     ||..4##
 
 	
r    	describertNc           
         UR                  U5      nUR                  (       a^  [        UR                  [        R                  R
                  R                  5      (       d!  [        S[        UR                  5       35      e[        R                  " US S9U l        [        R                   HG  nUS;   a  M  [        U R                  U5      c  M$  [        SU S[        U R                  U5       35      e   g )Nz3view_func must be None or _FakeTensorViewFunc, got r   )r   	view_funcz
not None: z: )describe_tensorr,  rh   rk   _subclasses
meta_utils_FakeTensorViewFuncr}   rz   r   replacer%  r   _UNSERIALIZABLEr   )ra   r(  r)  r%  r   s        r   r\   _TensorPickleData.__init__  s    
 ,,Q/ j 1 1 < < P P'
 '
 !E**+,.  $++HE  //A..t}}a(4$z!Bwt}}a7P6Q%RSS	 0r    r   c                   ^ [         R                  " U R                  TR                  S9nUR                  (       aJ  UR
                  b=  [         R                  " UR
                  TR                  S9n[         R                  " X#S9nS[        / [        R                  4   S[        R                  [        -  S[        4U4S jjnTR                  R                  UTR                  R                  US S 5      $ )Nr+  )basemake_meta_tdevicer   c                    > [        5          [        TR                  U " 5       U5      sS S S 5        $ ! , (       d  f       g = fr7   )r   r   r   )r6  r7  r   s     r   	with_fake-_TensorPickleData.unpickle.<locals>.with_fake,  s-     !",,M	 s	   2
A )r   r1  r%  r   is_viewr5  r   rk   r   r7  r2   r   r   meta_tensorr  )ra   r   r%  new_baser9  s    `   r   r  _TensorPickleData.unpickle  s    &&MM$..
  9"**(22H #**8CH		!"ell"23		=B\\C=O				 ,,88$$..
 	
r    )r%  )r.   r/   r0   r1   r   r   r4   r   rS   r   r   r
   r   r]   rj   r   r   r\   r  r5   r&   r    r   ri   ri     s    Z((
"
)3
	$'34eDBU<U6VV

 
T"5 T& TT T2 
~  
*  
r    ri   c                       \ rS rSr\S\S\S\\\	\
/\4   \\	\4   4   S-  4S j5       rS\S\SS4S	 jrS
\
S\S\4   4S jr\S\S\	S-  4S j5       rSrg)r~   i@  r   rd   r   Nc                 f    U R                  U5      =n(       a  U R                  X1R                  44$ g r7   )from_objectr  r_   )r   r   rd   r   s       r   rj   #_TorchNumpyPickleData.reduce_helperA  s3     ??3''4'LL4)@)@"ABBr    modr   c                     Xl         X l        g r7   rC  r   )ra   rC  r   s      r   r\   _TorchNumpyPickleData.__init__O  s    	r    r   .c                     [        [        R                  " U R                  5      U R                  5      n[
        R                  R                  R                  R                  5       U   $ r7   )
r   	importlibimport_modulerC  r   rk   _dynamo	variablesmiscget_np_to_tnp_map)ra   r   nps      r   r  _TorchNumpyPickleData.unpickleS  sE    Y,,TXX6		B}}&&++==?CCr    tnpc                    [        U5      (       d  g [        R                  R                  R                  R                  5       n UR                  U5      =n(       d  g  [        USS 5      =n(       d  Sn[        USS 5      =n(       d  g U[        [        R                  " U5      U5      :w  a  [        SU SU 35      eU " XE5      $ ! [         a     g f = f)Nr/   numpyr.   zNumpy object mismatch for r   )r   rk   rJ  rK  rL  get_tnp_to_np_mapget	TypeErrorr   rH  rI  r}   )r   rP  	tnp_to_nprN  rC  r   s         r   rA  !_TorchNumpyPickleData.from_objectW  s    }}MM++00BBD		#--,,B, -
 r<666CJ555 005t<< ,SE4&9  3~  		s   C 
CCrE  )r.   r/   r0   r1   r   rS   r^   r   r   r
   r   r]   rj   r2   r\   r  rA  r5   r&   r    r   r~   r~   @  s    ")/ 	dN+V34eDBU<U6VV	
 	 C s t D~ D(3;:O D f   r    r~   c                      \ rS rSr\S\S\R                  R                  S\	\
\\/\R                  R                  4   \	\\4   4   4S j5       rS\R                  R                  S\SS4S	 jrS
\S\R                  R                  4S jrSrg)rn   ir  r   rd   r   c                 V    U R                   U " X!R                  5      UR                  44$ r7   )r  rV   r_   r  s      r   rj   $_GraphModulePickleData.reduce_helpers  s/     ||__%##
 
 	
r    gmrV   Nc                    [        U[        R                  R                  R                  5      (       a  UR                  5       nOUR                  5       n[        US5      (       a  UR                  5       U l	        OUR                  R                  5       U l	        U R                  S	 [        UR                  U5      U l        g )Nr   _graph)rh   rk   rl   _lazy_graph_module_LazyGraphModule_real_recompile	recompiler   r   gm_dictr   r  _GraphPickleDatar]  graph)ra   r[  rV   _python_codes       r   r\   _GraphModulePickleData.__init__  s    b%((55FFGG--/L<<>L2~&&??,DL;;++-DLLL"%bii9
r    r   c                     [         R                  R                  R                  [         R                  R                  5      nU R                  Ul        U R                  R                  X!5      Ul        U$ r7   )	rk   rl   rm   __new__rb  r   rd  r  r]  )ra   r   r[  s      r   r  _GraphModulePickleData.unpickle  sL    XX!!))%((*>*>?llJJ'';		r    )rb  rd  )r.   r/   r0   r1   r   rS   rk   rl   rm   r   r   r
   r   r]   rj   r)   r\   r  r5   r&   r    r   rn   rn   r  s    	
"	
).)=)=	
	$')=)==>d''(	*
	
 	
:588// :' :d :~ %((:N:N r    rn   c                   $   \ rS rSrS\R
                  R                  S\\R
                  R                  S 4   S\SS4S jr	S\R
                  R                  S\S \R
                  R                  4   S	\S\R
                  R                  4S
 jrSrg)_NodePickleDatai  r  mappingrV   r   Nc                   ^ [         R                  " [        R                  R                  U4S jUR
                  5      U l        [         R                  " [        R                  R                  U4S jUR                  5      U l        UR                  U l        UR                  U l        [        R                  UR                  U5      U l        UR                  U l        UR                  R                  5        VVs0 s H0  u  pEUR                  (       a  UR                  U5      (       d  M.  XE_M2     snnU l        g s  snnf )Nc                    > TU    $ r7   r&   nrl  s    r   r@   *_NodePickleData.__init__.<locals>.<lambda>  s	    '!*r    c                    > TU    $ r7   r&   ro  s    r   r@   rq    s	    WQZr    )rM   tree_map_onlyrk   rl   r|   r   kwargsr   oprr   r   targetrz   metar   r,   )ra   r  rl  rV   r   r   s     `   r   r\   _NodePickleData.__init__  s     ((8LdiiX	**HHMM/
 II	''#**4;;@ II	 		)
)4433A6	 AD)
	 
s   =-D>.D>rd  r   c                   ^ [         R                  " [        U4S jU R                  5      n[         R                  " [        U4S jU R                  5      nU R
                  R                  U5      n[        U5      (       d,  [        U[        5      (       d  [        S[        U5       35      eUR                  U R                  XdXPR                  U R                  5      nU R                  Ul        U$ )Nc                    > TU    $ r7   r&   ro  s    r   r@   *_NodePickleData.unpickle.<locals>.<lambda>  s	    wqzr    c                    > TU    $ r7   r&   ro  s    r   r@   r{    s	    wqzr    z$target must be callable or str, got )rM   rs  rk  r   rt  rv  r  r   rh   r2   r}   rz   create_noderu  r   rw  )ra   rd  rl  r   r   rt  rv  r  s     `     r   r  _NodePickleData.unpickle  s     ##O5I499U%%14;;
 %%n5  Jvs$;$; #GV~!VWW  &		499UII	r    )r   rt  rw  r   ru  rv  rz   )r.   r/   r0   r1   rk   rl   r|   r   r)   r\   Graphr   r  r5   r&   r    r   rk  rk    s    
hhmm
 ehhmm%667
 	

 

:xx~~ '67 '	
 
r    rk  c            
           \ rS rSr\S\S\S\\\	/\4   \\
   4   4S j5       r\S\S\SS 4S j5       r\S\S	\S
   \S   -  S\SS 4S j5       r\S\	S\4S j5       r\S\S\4S j5       r\S\S\S\4S j5       rSrg)rr   i  r   ru  r   c                 j    U R                  X!R                  5      nUR                  UR                  44$ r7   )r   rV   r  r_   )r   r   ru  results       r   rj   _OpPickleData.reduce_helper  s.     B0'"9"9!;<<r    rV   c                 R   [        U[        5      (       a  [        U5      $ [        [        USS 5      [        5      (       a_  [        US5      (       d  [        S5      eUR                  n[        U[        5      (       d  [        S[        U5       35      e[        U5      $ [        R                  R                  R                  U5      n[        U[        R                  R                  5      (       a  U R!                  U["        U5      $ [        U[        R                  R$                  5      (       a  U R!                  U[&        U5      $ UR)                  [*        R,                  5      (       a  UR/                  SS5      u  pV[+        XV5      $ [1        S[        U5       SU SU 35      e)N__wrapped__z op missing __wrapped__ attributez"Expected AOTCompiledArtifact, got r   r   zTARGET:  )rh   r2   _OpStrPickleDatar   r   r   r}   r  rz   _OpPrecompiledPickleDatark   rl   r|   _pretty_print_targetro   
OpOverload
_pickle_op_OpOverloadPickleDatarq   _OpOverloadPacketPickleDatar   _OpFunctionPickleDataSUPPORTED_ROOTSsplitr  )r   ru  rV   artifactr   r   details          r   r   _OpPickleData.pickle  sO   b##B''gb-68KLL2}--$%GHH~~Hh(;<<$8h8HI  ,H55xx}}11"5b%**//00>>$(=wGGEJJ7788>>$(CWMM__2BBCC::c1-LD(66 &b
!B4q&GHHr    r   dataclsr  r  c                 t    UR                   =n(       a  U" U 5      (       d  SSKJn  U" SU  35      eU" U 5      $ )Nr   )BypassFxGraphCachez"Unable to pickle non-standard op: )r+   torch._inductor.codecacher  )r   r  rV   r+   r  s        r   r  _OpPickleData._pickle_op  s?     ",,,J,j6F6FD$'I$%PQQt}r    r   c                     g r7   r&   r"  s     r   r  _OpPickleData.unpickle  s    r    c                     SU;   a2  UR                  SS5      u  p#[        5       U   nU R                  XC5      $ [        5       U   $ )z3
Like `globals()[name]` but supports dotted names.
r   r   )r  globals_getattr_by_name)r   r   rC  restr   s        r   _lookup_global_by_name$_OpPickleData._lookup_global_by_name  sE    
 $;

3*IC9S>D''339T?"r    r   c                 r    SU;   a'  UR                  SS5      u  p![        X5      n SU;   a  M'  [        X5      $ )z7
Like `getattr(root, name)` but supports dotted names.
r   r   )r  r   )r   r   rC  s      r   r  _OpPickleData._getattr_by_name  s=    
 Tk

3*IC4%D Tk t""r    r&   N)r.   r/   r0   r1   r   rS   r^   r   r   r   r]   rj   r)   r   r   r2   rz   r  r   r  r  r  r5   r&   r    r   rr   rr     s-   ="=(.=	x(&0159L3MM	N= = I I I_ I I6 		-.6S1TT	 	 
		 	 ~ &   	## 	#& 	# 	# #v #S #V # #r    rr   c                   8    \ rS rSrS\SS4S jrS\S\4S jrSrg)	r  i  r   r   Nc                     Xl         g r7   r   ra   r   s     r   r\   _OpStrPickleData.__init__      	r    r   c                     U R                   $ r7   r   r"  s     r   r  _OpStrPickleData.unpickle  s    yyr    r   )	r.   r/   r0   r1   r2   r\   r   r  r5   r&   r    r   r  r    s(    S T ~ # r    r  c                   `    \ rS rSrS\SS4S jrS\S\R                  R                  4S jr
Srg)	r  i  r   r   Nc                     Xl         g r7   r   r  s     r   r\   _OpOverloadPickleData.__init__  r  r    r   c                     U R                  U R                  5      n[        U[        R                  R
                  5      (       d  [        S[        U5       35      eU$ )NzExpected OpOverload, got )r  r   rh   rk   ro   r  r}   rz   ra   r   rd   s      r   r  _OpOverloadPickleData.unpickle  sI    ))$))4#uzz4455 #<T#YK!HII
r    r   )r.   r/   r0   r1   r2   r\   r   rk   ro   r  r  r5   r&   r    r   r  r    s2    S T ~ %**:O:O r    r  c                   `    \ rS rSrS\SS4S jrS\S\R                  R                  4S jr
Srg)	r  i!  r   r   Nc                     Xl         g r7   r   r  s     r   r\   $_OpOverloadPacketPickleData.__init__"  r  r    r   c                     U R                  U R                  5      n[        U[        R                  R
                  5      (       d  [        S[        U5       35      eU$ )NzExpected OpOverloadPacket, got )r  r   rh   rk   ro   rq   r}   rz   r  s      r   r  $_OpOverloadPacketPickleData.unpickle%  sI    ))$))4#uzz::;; #B49+!NOO
r    r   )r.   r/   r0   r1   r2   r\   r   rk   ro   rq   r  r5   r&   r    r   r  r  !  s2    S T ~ %**:U:U r    r  c                   8    \ rS rSrS\SS4S jrS\S\4S jrSr	g)	r  i,  r  r   Nc                 .    UR                  5       U l        g r7   )	serializecontents)ra   r  s     r   r\   !_OpPrecompiledPickleData.__init__-  s     **,r    r   c                    ^ [         R                  " U R                  5      mSS KnUR	                  T5      S[
        S[
        4U4S jj5       nU$ )Nr   r   r   c                     > T" U 6 $ r7   r&   )r   precompiled_artifacts    r   wrapped2_OpPrecompiledPickleData.unpickle.<locals>.wrapped4  s    '..r    )r   deserializer  	functoolswrapsr   )ra   r   r  r  r  s       @r   r  !_OpPrecompiledPickleData.unpickle0  sL    2>>t}}M	-	.	/3 	/3 	/ 
/	/ r    )r  )
r.   r/   r0   r1   r   r\   r   r^   r  r5   r&   r    r   r  r  ,  s)    -!4 - -~ & r    r  c                   D    \ rS rSrSrSrS\S\SS4S jrS	\S\	4S
 jr
Srg)r  i;  z
Supports pickling a set of standard/common functions
These must be prefixed with the full namespace in order to properly
be pickled (i.e `einops.rearrange` and not `from einops import rearrange`)
)z	builtins.zmath.ztorch.z	operator.zeinops.r   r   r   Nc                     Xl         X l        g r7   )r   r   )ra   r   r   s      r   r\   _OpFunctionPickleData.__init__E  s    		r    r   c                    U R                   S:X  a  [        R                  U R                  5      $ U R                   S:X  a  SS KnU R                  X R                  5      $ U R                   S:X  a   U R                  [        U R                  5      $ U R                   S:X  a  SS KnU R                  X0R                  5      $ U R                   S:X  a  SS KnU R                  X@R                  5      $ [        e)Nbuiltinsmathr   rk   operatoreinops)
r   __builtins__rT  r   r  r  rk   r  r  r  )ra   r   r  r  r  s        r   r  _OpFunctionPickleData.unpickleI  s    99
"##DII..YY& ((yy99YY'!((		::YY*$((99==YY("((;;%%r    )r   r   )r.   r/   r0   r1   r   r  r2   r\   r   r^   r  r5   r&   r    r   r  r  ;  s<     OOS   &~ && &r    r  c                       \ rS rSrS\R
                  R                  S\SS4S jrS\R
                  R                  S\
S\R
                  R                  4S	 jrS
rg)rc  i^  rd  rV   r   Nc                     UR                   U l        UR                  U l        0 nUR                   H  n[        XCU5      X4'   M     [        UR                  5       5      U l        UR                  U l        g r7   )	_tracer_cls
tracer_cls_tracer_extrastracer_extrasnodesrk  r   values_codegen)ra   rd  rV   r  r  s        r   r\   _GraphPickleData.__init___  s[    ++"1168KKD)$w?EK  5<<>*
r    r[  r   c                    [         R                  R                  XR                  U R                  5      n0 nU R
                   H  nUR                  X4U5      XE'   M     [        U S5      (       a  U R                  Ul        U$ )Nr  )	rk   rl   r  r  r  r  r  r   r  )ra   r[  r   rd  r  nds         r   r  _GraphPickleData.unpickler  sd     r??D4F4FG68**BE.AEI 4$$!]]ENr    )r  r  r  r  )r.   r/   r0   r1   rk   rl   r  r)   r\   rm   r   r  r5   r&   r    r   rc  rc  ^  sS    'ehhnn 'w '4 '&((&&8F	r    rc  c                       \ rS rSr\S\S\R                  R                  S\	\
\\/\R                  R                  4   \	\\4   4   4S j5       rS\SS4S jrS	\S\4S
 jrSrg)rw   i  r   rd   r   c                 B    U R                   U " U5      UR                  44$ r7   r  r  s      r   rj   '_TracingContextPickleData.reduce_helper  s*     LLC''
 	
r    contextNc                 6   UR                   U l         UR                  U l        UR                  U l        UR                  U l        UR                  U l        UR
                  U l        UR                  U l        UR                  U l        UR                  U l        g r7   )	module_contextframe_summary_stackloc_in_frameaot_graph_nameparams_flatparams_flat_unwrap_subclassesparams_unwrapped_to_flat_indexoutput_strides#force_unspec_int_unbacked_size_like)ra   r  s     r   r\   "_TracingContextPickleData.__init__  s    %44#*#>#> #00%44"..-4-R-R*.5.T.T+%4477 	0r    r   c                 b   [        UR                  5      nU R                  Ul        U R                  Ul        U R                  Ul        U R
                  Ul        U R                  Ul        U R                  Ul        U R                  Ul        U R                  Ul	        U R                  Ul
        U$ r7   )r   r   r  r  r  r  r  r  r  r  r  )ra   r   r  s      r   r  "_TracingContextPickleData.unpickle  s     !9!9:!%!4!4&*&>&>##00!%!4!4"..040R0R-151T1T.!%!4!444 	3 r    )	r  r  r  r  r  r  r  r  r  )r.   r/   r0   r1   r   rS   rk   rv   r   r   r   r
   r   r]   rj   r\   r  r5   r&   r    r   rw   rw     s    
"
).)E)E
	$')E)EEFd''(	*

 

 
4 
,~ . r    rw   )r   N)S
contextlibr   rH  r   r   r   r;   abcr   collections.abcr   r   typingr   r   r   typing_extensionsr	   r
   torch.utils._import_utilsr   rZ   rk   torch.utils._pytreeutils_pytreerM   torch._guardsr   "torch._inductor.standalone_compiler   "torch._library.fake_class_registryr   torch._subclasses.fake_tensorr   r   r   torch._subclasses.meta_utilsr   r   r   torch.fx.experimental.sym_noder   %torch.fx.experimental.symbolic_shapesr   torch.utils._mode_utilsr   rt   SymFloatr   r2   r3   r   r'   	dataclassr)   r8   r^   r<   r=   rB   contextmanagerrQ   PicklerrS   r   r]   	Unpicklerr   rs   ru   ri   r~   rn   rk  rr   r  r  r  r  r  rc  rw   r&   r    r   <module>r     s      	     / ( ( , 1 }F  $ $ ( B ? L L 
 3 : / Ku~~>	3 4 T T T 	" 	" 	"!6 !gkk&.A !8BH#5  .Yt_ . . q6>> qh	I I 3V< Bf&& B2 2D1 1>G
 G
T/ /d B- -`H# H#V} M - }  &M  &F D3 3r    