
    N j                     @   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  S SK	J
r
Jr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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\RX                  \RZ                  5      r.S\/S\04S jr1S\/S\04S jr2\ Rf                   " S S5      5       r4 " S S\Rj                  5      r6 " S S5      r7\" S\85      r9 " S S\Rt                  5      r; " S S5      r< " S S 5      r= " S! S"5      r> " S# S$5      r? " S% S&5      r@ " S' S(5      rA " S) S*5      rB " S+ S,\B5      rC " S- S.\B5      rD " S/ S0\B5      rE " S1 S2\B5      rF " S3 S4\B5      rG " S5 S65      rH " S7 S85      rIg)9    N)abstractmethod)Callable)AnyNewTypeOptionalTypeVarUnion)overrideSelf)import_dill)TracingContext)AOTCompiledArtifact)
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    h/root/GenerationalWealth/GenerationalWealth/venv/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'   2   s    
 SSSr    c                   V    \ rS rSr% \r\\\/\	4      \
S'   \r\\\/\	4      \
S'   Srg)Options:   
ops_filternode_metadata_key_filterr&   N)__name__
__module____qualname____firstlineno__r   r+   r   r   strbool__annotations__r'   r,   __static_attributes__r&   r    r   r)   r)   :   s>     3CJ3%+./B& hxt'<= r    r)   c                   D  ^  \ rS rSrSrSS\R                  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\\   4S j5       r\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\\   4S jjj5       rSrU =r$ )GraphPicklerE   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)   r9   _UnpickleStateTokenobject_unpickle_stater   _meta_tensor_describer)selfr8   r9   	__class__s      r   r?   GraphPickler.__init__K   sV    GT.GT"+')  368< ':E&J#r    obj.c                 j   [        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[        R
                  R&                  5      (       a  [)        S5      e[*        R                  X5      =n(       a  U$ [,        $ )Nz#Unexpected raw Node during pickling)
isinstancer   _TensorPickleDatareduce_helpertorchfxGraphModule_GraphModulePickleData_opsOperatorBaseOpOverloadPacket_OpPickleDatar   _ShapeEnvPickleDataSymInt_SymNodePickleData_guardsr   _TracingContextPickleDataNodeAssertionError_TorchNumpyPickleDataNotImplemented)rD   rG   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 #uxx}}--$%JKK.<<TGGvG "!r    c                 "    XR                   L a  gg )Nunpickle_staterB   )rD   rG   s     r   persistent_idGraphPickler.persistent_id   s     &&&#r    c                     [         R                  " 5        nU " X25      nUR                  U5        UR                  5       sSSS5        $ ! , (       d  f       g= f)z
Pickle an object.
N)ioBytesIOdumpgetvalue)clsrG   r9   streampicklers        r   dumpsGraphPickler.dumps   s9    
 ZZ\V&*GLL??$ \\s   )A		
Adata	fake_modec                     [        U5      n[        R                  " U 5       n[        X25      nUR	                  5       sSSS5        $ ! , (       d  f       g= f)z
Unpickle an object.
N)_UnpickleStaterf   rg   _GraphUnpicklerload)ro   rp   staterk   	unpicklers        r   loadsGraphPickler.loads   s<    
 y)ZZ'6I>># s   A
AP   2   T)	max_depthmax_iter_itemsverbosezOptions | Noner{   r|   r}   c          	      R  ^ ^^^^^^^	^
^ T=(       d
    [        5       mT " [        R                  " 5       T5      m	[        5       m
S[        SS4U4S jjmS[
        S[        [           4U U4S jjm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 N)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r   )rm   	Exception)r   erj   r9   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__[)!typeidaddrI   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getstateru   e3r   slotreduce_tuplee4partr   r   r{   r|   rl   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)   rf   rg   r   r1   r   r   BaseExceptionint)rj   rG   r9   r{   r|   r}   r   r   r   rl   r   r   s   ` ```` @@@@@r   debug_dumpsGraphPickler.debug_dumps   s    < &WYbjjlG,E	S 	T 		 	 7 	 	I	C I	s I	3 I	8C= I	 I	V 3"
r    )rC   rB   r9   r   )r-   r.   r/   r0   __doc__rf   rg   r   r)   r?   r
   rA   r   r   r   r^   r1   rc   classmethodbytesrm   staticmethodr   rw   r   r2   r   r4   __classcell__rE   s   @r   r6   r6   E   sb   
KRZZ K(72C Kt K K" )")"	xS!5c?2	3)" )"V  HSM   % %'): %e % % $E $n $ $ $  %)y
  yy "y
 y y y 
#y yr    r6   c                   &    \ rS rSrS\SS4S jrSrg)rr   ib  rp   r   Nc                 .    Xl         [        5       U l        g r   )rp   r   meta_converter)rD   rp   s     r   r?   _UnpickleState.__init__c  s    "9Fr    )rp   r   )r-   r.   r/   r0   r   r?   r4   r&   r    r   rr   rr   b  s    I. IT Ir    rr   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$ )
rs   in  rk   ra   r   Nc                 0   > [         TU ]  U5        X l        g r   )r>   r?   rB   )rD   rk   ra   rE   s      r   r?   _GraphUnpickler.__init__o  s     -r    pidc                 R    US:X  a  U R                   $ [        R                  " S5      e)Nra   zInvalid persistent ID)rB   r   UnpicklingError)rD   r   s     r   persistent_load_GraphUnpickler.persistent_loads  s+     ""'''(()@AAr    rb   )r-   r.   r/   r0   rf   rg   rr   r?   r
   rA   r   r4   r   r   s   @r   rs   rs   n  sG    .rzz .> .d . B6 Bf B Br    rs   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)rT   i|  ro   rl   rG   r   c                 B    U R                   U " U5      UR                  44$ r   unpicklerB   rj   rl   rG   s      r   rK   !_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_enabledrZ   r   copyro   )rD   r   s     r   r?   _ShapeEnvPickleData.__init__  sF     .. !WXXLL%%'	IIo&II)*r    ra   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)rp   rZ   	shape_envro   r   setattr)rD   ra   r   r   s       r   r   _ShapeEnvPickleData.unpickle  ss    '' !FGG''11 !PQQIIOO%DAN,,66= & ''111r    )ro   )r-   r.   r/   r0   r   r1   rA   r3   r   r6   r   r   r   r   rr   r@   rK   r?   r   r4   r&   r    r   rT   rT   |  s    
sF{
A"A)1A	$'12E$@S:S4TT
A A+H + +
2~ 
2( 
2r    rT   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)rV   i  rl   rG   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 )	noderB   rI   rL   rU   rV   unpickle_sym_intNotImplementedErrorr   )rj   rl   rG   r   s       r   rK    _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 r   )_exprexprr   pytype_hinthint)rD   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   rZ   r   r   r   r   )rD   s    r   _to_sym_node_SymNodePickleData._to_sym_node  s9    >>! !455tyy$..$++tyyIIr    ra   c                 J    [         R                  " U R                  5       5      $ r   )rL   rU   r   rD   ra   s     r   r   #_SymNodePickleData.unpickle_sym_int  s    ||D--/00r    )r   r   r   r   )r-   r.   r/   r0   r   r6   r   r   r   r   rr   r@   rK   r   r?   r   rL   rU   r   r4   r&   r    r   rV   rV     s    MM M 
$'23U4AT;T5UU
	M MW  Jg J
1~ 1%,, 1r    rV   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	)rJ   i  metadatarl   rG   r   c                 X    U R                   U " UR                  U5      UR                  44$ r   )r   rC   rB   r   s      r   rK   _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 rp   )rp   	view_funcz
not None: z: )describe_tensorr
  rI   rL   _subclasses
meta_utils_FakeTensorViewFuncrZ   r   r   replacer  r   _UNSERIALIZABLEr   )rD   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    ra   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                  [        4   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r   )r   r   rp   )r  r  ra   s     r   	with_fake-_TensorPickleData.unpickle.<locals>.with_fake  s-     !",,M	 s	   2
A )r   r  r  rp   is_viewr  r   rL   r   r	   r  r1   r   r   meta_tensorr   )rD   ra   r  new_baser  s    `   r   r   _TensorPickleData.unpickle  s    &&MM$..
  9"**(22H #**8CH		!"ell"23		=B5<<QTCT=U				 ,,88$$..
 	
r    )r  )r-   r.   r/   r0   r   r   r3   r   r6   r   r   r   rr   r@   rK   r   r   r?   r   r4   r&   r    r   rJ   rJ     s    Z((
"
)3
	$'34eDBU<U6VV

 
T"5 T& TT T2 
~  
*  
r    rJ   c                       \ rS rSr\S\S\S\\\	\
\/\4   \\
\4   4      4S j5       rS\S\SS4S	 jrS
\S\	S\4   4S jr\S\S\\
   4S j5       rSrg)r[   i  rl   rG   r   c                 f    U R                  U5      =n(       a  U R                  X1R                  44$ g r   )from_objectr   rB   )rj   rl   rG   ro   s       r   rK   #_TorchNumpyPickleData.reduce_helper  s3     ??3''4'LL4)@)@"ABBr    modr   Nc                     Xl         X l        g r   r!  r   )rD   r!  r   s      r   r?   _TorchNumpyPickleData.__init__  s    	r    ra   .c                     [        [        R                  " U R                  5      U R                  5      n[
        R                  R                  R                  R                  5       U   $ r   )
r   	importlibimport_moduler!  r   rL   _dynamo	variablesmiscget_np_to_tnp_map)rD   ra   nps      r   r   _TorchNumpyPickleData.unpickle  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   rL   r(  r)  r*  get_tnp_to_np_mapget	TypeErrorr   r&  r'  rZ   )rj   r.  	tnp_to_npr,  r!  r   s         r   r  !_TorchNumpyPickleData.from_object  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r#  )r-   r.   r/   r0   r   r6   rA   r   r   r   r   rr   r@   rK   r1   r?   r   r  r4   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)rO   i8  rl   rG   r   c                 V    U R                   U " X!R                  5      UR                  44$ r   )r   r9   rB   r   s      r   rK   $_GraphModulePickleData.reduce_helper9  s/     ||__%##
 
 	
r    gmr9   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)rI   rL   rM   _lazy_graph_module_LazyGraphModule_real_recompile	recompiler   r   gm_dictr   r   _GraphPickleDatar;  graph)rD   r9  r9   _python_codes       r   r?   _GraphModulePickleData.__init__E  s    b%((55FFGG--/L<<>L2~&&??,DL;;++-DLLL"%bii9
r    ra   c                     [         R                  R                  R                  [         R                  R                  5      nU R                  Ul        U R                  R                  X!5      Ul        U$ r   )	rL   rM   rN   __new__r@  r   rB  r   r;  )rD   ra   r9  s      r   r   _GraphModulePickleData.unpickleR  sL    XX!!))%((*>*>?llJJ'';		r    )r@  rB  )r-   r.   r/   r0   r   r6   rL   rM   rN   r   r   r   rr   r@   rK   r)   r?   r   r4   r&   r    r   rO   rO   8  s    	
"	
).)=)=	
	$')=)==>d''(	*
	
 	
:588// :' :d :~ %((:N:N r    rO   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)_NodePickleDataiY  r   mappingr9   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    $ r   r&   nrJ  s    r   <lambda>*_NodePickleData.__init__.<locals>.<lambda>`  s	    '!*r    c                    > TU    $ r   r&   rM  s    r   rO  rP  b  s	    WQZr    )pytreetree_map_onlyrL   rM   rY   r   kwargsr   oprS   r   targetr   metar   r,   )rD   r   rJ  r9   r   r   s     `   r   r?   _NodePickleData.__init__Z  s     ((8LdiiX	**HHMM/
 II	''#**4;;@ II	 		)
)4433A6	 AD)
	 
s   =-D>.D>rB  ra   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    $ r   r&   rM  s    r   rO  *_NodePickleData.unpickle.<locals>.<lambda>}  s	    wqzr    c                    > TU    $ r   r&   rM  s    r   rO  r[    s	    wqzr    z$target must be callable or str, got )rR  rS  rI  r   rT  rV  r   r   rI   r1   rZ   r   create_noderU  r   rW  )rD   rB  rJ  ra   r   rT  rV  r   s     `     r   r   _NodePickleData.unpicklew  s     ##O5I499U%%14;;
 %%n5  Jvs$;$; #GV~!VWW  &		499UII	r    )r   rT  rW  r   rU  rV  r   )r-   r.   r/   r0   rL   rM   rY   r   r)   r?   Graphrr   r   r4   r&   r    r   rI  rI  Y  s    
hhmm
 ehhmm%667
 	

 

:xx~~ '67 '	
 
r    rI  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   4   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)rS   i  rl   rU  r   c                 j    U R                  X!R                  5      nUR                  UR                  44$ r   )r   r9   r   rB   )rj   rl   rU  results       r   rK   _OpPickleData.reduce_helper  s.     B0'"9"9!;<<r    r9   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:  )rI   r1   _OpStrPickleDatar   r   r   rZ   re  r   _OpPrecompiledPickleDatarL   rM   rY   _pretty_print_targetrP   
OpOverload
_pickle_op_OpOverloadPickleDatarR   _OpOverloadPacketPickleDatar   _OpFunctionPickleDataSUPPORTED_ROOTSsplitr   )rj   rU  r9   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   dataclsrl  rm  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.codecacherv  )r   rt  r9   r+   rv  s        r   rk  _OpPickleData._pickle_op  s?     ",,,J,j6F6FD$'I$%PQQt}r    ra   c                     g r   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   )rp  globals_getattr_by_name)rj   r   r!  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   )rp  r   )r   r   r!  s      r   r}  _OpPickleData._getattr_by_name  s=    
 Tk

3*IC4%D Tk t""r    r&   N)r-   r.   r/   r0   r   r6   rA   r   r   rr   r@   rK   r)   r   r   r1   r	   r   rk  r   r   r  r}  r4   r&   r    r   rS   rS     s5   ="=(.=	x(&0159L3MM	N= = I I I_ I I6 ()40M+NN

  
  ~ &   	## 	#& 	# 	# #v #S #V # #r    rS   c                   8    \ rS rSrS\SS4S jrS\S\4S jrSrg)	rg  i  r   r   Nc                     Xl         g r   r   rD   r   s     r   r?   _OpStrPickleData.__init__      	r    ra   c                     U R                   $ r   r   r   s     r   r   _OpStrPickleData.unpickle  s    yyr    r   )	r-   r.   r/   r0   r1   r?   rr   r   r4   r&   r    r   rg  rg    s(    S T ~ # r    rg  c                   `    \ rS rSrS\SS4S jrS\S\R                  R                  4S jr
Srg)	rl  i  r   r   Nc                     Xl         g r   r   r  s     r   r?   _OpOverloadPickleData.__init__  r  r    ra   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   rI   rL   rP   rj  rZ   r   rD   ra   rG   s      r   r   _OpOverloadPickleData.unpickle  sI    ))$))4#uzz4455 #<T#YK!HII
r    r   )r-   r.   r/   r0   r1   r?   rr   rL   rP   rj  r   r4   r&   r    r   rl  rl    s2    S T ~ %**:O:O r    rl  c                   `    \ rS rSrS\SS4S jrS\S\R                  R                  4S jr
Srg)	rm  i  r   r   Nc                     Xl         g r   r   r  s     r   r?   $_OpOverloadPacketPickleData.__init__  r  r    ra   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   rI   rL   rP   rR   rZ   r   r  s      r   r   $_OpOverloadPacketPickleData.unpickle  sI    ))$))4#uzz::;; #B49+!NOO
r    r   )r-   r.   r/   r0   r1   r?   rr   rL   rP   rR   r   r4   r&   r    r   rm  rm    s2    S T ~ %**:U:U r    rm  c                   8    \ rS rSrS\SS4S jrS\S\4S jrSr	g)	rh  i  rq  r   Nc                 .    UR                  5       U l        g r   )	serializecontents)rD   rq  s     r   r?   !_OpPrecompiledPickleData.__init__  s     **,r    ra   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 $ r   r&   )r   precompiled_artifacts    r   wrapped2_OpPrecompiledPickleData.unpickle.<locals>.wrapped  s    '..r    )r   deserializer  	functoolswrapsr   )rD   ra   r  r  r  s       @r   r   !_OpPrecompiledPickleData.unpickle  sL    2>>t}}M	-	.	/3 	/3 	/ 
/	/ r    )r  )
r-   r.   r/   r0   r   r?   rr   rA   r   r4   r&   r    r   rh  rh    s)    -!4 - -~ & r    rh  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)rn  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 r   )r   r   )rD   r   r   s      r   r?   _OpFunctionPickleData.__init__  s    		r    ra   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   rL   operatoreinops)
r   __builtins__r2  r   r  r}  rL   r  r  r   )rD   ra   r  r  r  s        r   r   _OpFunctionPickleData.unpickle  s    99
"##DII..YY& ((yy99YY'!((		::YY*$((99==YY("((;;%%r    )r   r   )r-   r.   r/   r0   r   ro  r1   r?   rr   rA   r   r4   r&   r    r   rn  rn    s<     OOS   &~ && &r    rn  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)rA  i&  rB  r9   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 r   )	_tracer_cls
tracer_cls_tracer_extrastracer_extrasnodesrI  r   values_codegen)rD   rB  r9   r  r   s        r   r?   _GraphPickleData.__init__'  s[    ++"1168KKD)$w?EK  5<<>*
r    r9  ra   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  )	rL   rM   r_  r  r  r  r   r   r  )rD   r9  ra   rB  r  nds         r   r   _GraphPickleData.unpickle:  sd     r??D4F4FG68**BE.AEI 4$$!]]ENr    )r  r  r  r  )r-   r.   r/   r0   rL   rM   r_  r)   r?   rN   rr   r   r4   r&   r    r   rA  rA  &  sS    'ehhnn 'w '4 '&((&&8F	r    rA  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)rX   iH  rl   rG   r   c                 B    U R                   U " U5      UR                  44$ r   r   r   s      r   rK   '_TracingContextPickleData.reduce_helperI  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 r   )	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)rD   r  s     r   r?   "_TracingContextPickleData.__init__X  s    %44#*#>#> #00%44"..-4-R-R*.5.T.T+%4477 	0r    ra   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$ r   )r   rp   r  r  r  r  r  r  r  r  r  )rD   ra   r  s      r   r   "_TracingContextPickleData.unpicklen  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.   r/   r0   r   r6   rL   rW   r   r   r   r   rr   r@   rK   r?   r   r4   r&   r    r   rX   rX   H  s    
"
).)E)E
	$')E)EEFd''(	*

 

 
4 
,~ . r    rX   )Jr   r&  rf   r   r   abcr   collections.abcr   typingr   r   r   r   r	   typing_extensionsr
   r   torch.utils._import_utilsr   r=   rL   torch.utils._pytreeutils_pytreerR  torch._guardsr   "torch._inductor.standalone_compiler   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   rU   SymFloatr   r1   r2   r   r'   	dataclassr)   Picklerr6   rr   rA   r@   	Unpicklerrs   rT   rV   rJ   r[   rO   rI  rS   rg  rl  rm  rh  rn  rA  rX   r&   r    r   <module>r     s     	    $ 9 9 , 1 }F  $ $ ( B L L 
 3 : / Ku~~>	3 4 T T T   Z6>> ZzI I 3V< Bf&& B2 2D1 1>G
 G
T. .b B- -`J# J#Z} M - }  &M  &F D3 3r    