
    	i                     :   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZmZmZmZ d dlmZmZ d dlmZ  e       ZeeZd dlZd dlmc mZ d dlmZ d dlmZ d d	lmZm Z m!Z! d d
l"m#Z#m$Z$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+  edejX                  ejZ                        Z.de/de0fdZ1de/de0fdZ2e jf                   G d d             Z4 G d dejj                        Z6 G d d      Z7 ede8      Z9 G d dejt                        Z; G d d      Z< G d d       Z= G d! d"      Z> G d# d$      Z? G d% d&      Z@ G d' d(      ZA G d) d*      ZB G d+ d,eB      ZC G d- d.eB      ZD G d/ d0eB      ZE G d1 d2eB      ZF G d3 d4eB      ZG G d5 d6      ZH G d7 d8      ZIy)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                 $    | j                  d      S )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/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/torch/fx/_graph_pickler.py_ops_filter_safer   $   s     ??	
     keyc                 
    | dv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                   N    e Zd ZU eZeeegef      e	d<   e
Zeeegef      e	d<   y)Options
ops_filternode_metadata_key_filterN)__name__
__module____qualname__r   r*   r   r   strbool__annotations__r'   r+   r&   r    r   r)   r)   :   s>     3CJ3%+./B& hxt'<= r    r)   c                   &    e Zd ZdZddej
                  dee   ddf fdZe	de
deedef   eedf   f   fd	       Ze	de
dee   fd
       Zedde
dee   defd       Zededede
fd       Ze	 dddddde
dddedededee   fd       Z xZS )GraphPicklerzb
    GraphPickler is a Pickler which helps pickling fx graph - in particular
    GraphModule.
    Nfileoptionsr   c                     t         t        | 	  |d       nt        | 	  |       |xs
 t               | _        t        t                     | _        t        d      | _	        y )NT)byrefF)	copy_data)
dillsuper__init__r)   r5   _UnpickleStateTokenobject_unpickle_stater   _meta_tensor_describer)selfr4   r5   	__class__s      r   r;   zGraphPickler.__init__K   sV    GT.GT"+')  368< ':E&J#r    obj.c                 (   t        |t              rt        j                  | |      S t        |t        j
                  j                        rt        j                  | |      S t        |t        j                  j                  t        j                  j                  f      rt        j                  | |      S t        |t              rt        j                  | |      S t        |t        j                        rt        j                  | |      S t        |t        j                   j"                        rt$        j                  | |      S t        |t        j
                  j&                        rt)        d      t*        j                  | |      x}r|S t,        S )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)r@   rB   reduces      r   reducer_overridezGraphPickler.reducer_override\   s(   , c:&$224==UXX112)77cBBejj55uzz7R7RST ..tS99X&&44T3??U\\*%33D#>>U]]99:,::4EE #uxx}}-$%JKK.<<T3GGvG "!r    c                 "    || j                   u ryy )Nunpickle_state)r>   )r@   rB   s     r   persistent_idzGraphPickler.persistent_id   s     $&&&#r    c                     t        j                         5 } | ||      }|j                  |       |j                         cddd       S # 1 sw Y   yxY w)z#
        Pickle an object.
        N)ioBytesIOdumpgetvalue)clsrB   r5   streampicklers        r   dumpszGraphPickler.dumps   sF    
 ZZ\ 	%V&'*GLL??$	% 	% 	%s   *A		Adata	fake_modec                     t        |      }t        j                  |       5 }t        ||      }|j	                         cddd       S # 1 sw Y   yxY w)z%
        Unpickle an object.
        N)_UnpickleStater^   r_   _GraphUnpicklerload)rf   rg   staterc   	unpicklers        r   loadszGraphPickler.loads   sG    
 y)ZZ 	$'6I>>#	$ 	$ 	$s   AAP   2   T)	max_depthmax_iter_itemsverbosezOptions | Nonerq   rr   rs   c          	      :   	
 xs
 t                 t        j                               	t               
dt        ddffddt
        dt        t           f fddt
        dt        dt        dt        t           f	
fd	 |d
d      }|S )a  
        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                 "    rt        |        y y N)print)ru   rs   s    r   logz%GraphPickler.debug_dumps.<locals>.log   s    c
 r    oc                 \    	 j                  |        y # t        $ r}|cY d }~S d }~ww xY wrw   )re   	Exception)rz   erb   r5   s     r   fail_excz*GraphPickler.debug_dumps.<locals>.fail_exc   s.    		!W% s    	+&++pathdepthc           	      `
   |kD  r" d|z   d| dt        |        d       |dz   S t        |       }|v ry j                  |       d|z  } | d| dt        |        d        |       }| | d       y  | dt        |        d	|        t        | t              r3| j                         D ]  \  }} || d
|d|dz         }|s|c S  |S t        | t        t        f      r.t        |       D ]  \  }	} || d
|	 d|dz         }|s|c S  |S t        | t        t        f      r.t        |       D ]  \  }	} || d
|	 d|dz         }|s|c S  |S t        | d      rt        |       j                  j                  d      r	 t        t        j                  t!        |       dz               }
|
Qt%        |
      kD  r | d d        |
d  }
t        |
      D ]  \  }	} || d
|	 d|dz         }|s|c S  |S 	 j'                  |       } | dt        |              |t(        urG|\  }} | dt%        |              t        |      D ]  \  }	} || d|	 d|dz         }|s|c S  t+        j,                  |       rUt+        j.                  |       D ];  }	 t1        | |j2                        } || d|j2                   |dz         }|s9|c S  |S t1        | dd       }t5        |      r2	  |       } | dt        |               ||dz   |dz         }|r|S t        | d      r;t7        |       j                         D ]  \  }} || d| |dz         }|s|c S  |S t        | d      rB| j8                  D ]1  }t        | |      s t1        | |      | d| |dz         }|s/|c S  |S d }	 t        | d      r6| j;                  t<        j>                        } | dt        |              n2t        | d      r&| jA                         } | dt        |              t        |t              r/t        |      D ]!  \  }	}|	 || d!|	 d|dz         }|s|c S  |S # t"        $ r d }
Y w xY w# t"        $ r} | d|        |cY d }~S d }~ww xY w# t"        $ r | d|j2                   cY c S w xY w# t"        $ r} | d|        |dz   cY d }~S d }~ww xY w# t"        $ r} | d |        |cY d }~S d }~ww xY w)"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addrD   dictitemslisttuple	enumerateset	frozensethasattrr,   endswith	itertoolsisliceiterr|   lenrY   rW   dataclassesis_dataclassfieldsgetattrr   callablevarsr   r   pickleHIGHEST_PROTOCOLr   ) rz   r   r   r!   indentr}   kvbadiprefixrede2_argsafgetstaterl   e3r   slotreduce_tuplee4partr~   ry   rq   rr   rd   visitedwalks                             r   r   z&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"GGI #DAqqTF!A5"2EAI>C"
# !dE]+%aL #DAqqTF!A3a.%!)<C"
# !c9-.%aL #DAqqTF!A3a.%!)<C"
#  q*%$q'*:*:*C*CJ*O"!)"2"247NQ<N"OPF %6{^3%h&A.AQ R33A2BD "(!8 )& 1 '1"1as!neai@#&J'  K..q1vh249+>?
 .(4vh8TDE%dO #DAqqTF-s!"<eaiHC"
# ''*$++A. #A2#Aqvv. qTF!AFF8"4eai@C"
#  q.$7H!4$JE6("24;-@A 5$):":EAIFJq*%#Aw}} #GD!qTF!D6"2EAI>C"
# q+&KK 'Dq$'"71d#3vQtf5EuqyQ#&J	'
   L	1o.#$??63J3J#KL6("3D4F3GHIQ-#$<<>L6(.l1C0DEF
 ,.(6 #GAt| tv\!A%>	JC"
# Ky ! "!F"&  vh=bTBC" % 2"&q112 ! 46("<RDAB"3334>  vh;B4@As   +R
 'R 7SS# A4T 
RR	R>%R93R>9R>S S #	T,T=TT	T-T("T-(T-rootr   )	r)   r^   r_   r   r/   r   r   BaseExceptionint)rb   rB   r5   rq   rr   rs   r   r~   ry   rd   r   r   s   ` ```` @@@@@r   debug_dumpszGraphPickler.debug_dumps   s    < &WYbjjlG,E	S 	T 		 	 7 	I	C I	s I	3 I	8C= I	 I	V 3"
r    rw   )r,   r-   r.   __doc__r^   r_   r   r)   r;   r
   r=   r   r   r   rY   r/   r\   classmethodbytesre   staticmethodr   rn   r   r0   r   __classcell__rA   s   @r   r3   r3   E   s\   
KRZZ K(72C Kt K" )")"	xS!5c?2	3)" )"V  HSM   % %'): %e % % $E $n $ $ $  %)y
  yy "y
 y y y 
#y yr    r3   c                       e Zd ZdeddfdZy)ri   rg   r   Nc                 0    || _         t               | _        y rw   )rg   r   meta_converter)r@   rg   s     r   r;   z_UnpickleState.__init__c  s    "9Fr    )r,   r-   r.   r   r;   r&   r    r   ri   ri   b  s    I. IT Ir    ri   r<   c                   Z     e Zd Zdej                  deddf fdZededefd       Z	 xZ
S )rj   rc   r[   r   Nc                 2    t         |   |       || _        y rw   )r:   r;   r>   )r@   rc   r[   rA   s      r   r;   z_GraphUnpickler.__init__o  s     -r    pidc                 N    |dk(  r| j                   S t        j                  d      )Nr[   zInvalid persistent ID)r>   r   UnpicklingError)r@   r   s     r   persistent_loadz_GraphUnpickler.persistent_loads  s+     ""'''(()@AAr    )r,   r-   r.   r^   r_   ri   r;   r
   r=   r   r   r   s   @r   rj   rj   n  sG    .rzz .> .d . B6 Bf B Br    rj   c                       e Zd ZU eeef   ed<   edede	de
eeege	f   e
eef   f   fd       Zde	ddfdZd	ede	fd
Zy)rO   rf   rd   rB   r   c                 B    | j                    | |      |j                  ffS rw   unpickler>   rb   rd   rB   s      r   rF   z!_ShapeEnvPickleData.reduce_helper  s"     ||c#h(?(?@@@r    envNc                     |j                   rt        d      |j                  j                         | _        | j                  d= | j                  d= y )Nz4Translation validation must be disabled for picklingtracked_fakesfake_tensor_cache)_translation_validation_enabledrU   r   copyrf   )r@   r   s     r   r;   z_ShapeEnvPickleData.__init__  sF     .. !WXXLL%%'	IIo&II)*r    r[   c                 $   |j                   st        d      |j                   j                  st        d      | j                  j	                         D ]&  \  }}t        |j                   j                  ||       ( |j                   j                  S )Nz#unpickle_state.fake_mode is not setz-unpickle_state.fake_mode.shape_env is not set)rg   rU   	shape_envrf   r   setattr)r@   r[   r   r   s       r   r   z_ShapeEnvPickleData.unpickle  s|    '' !FGG''11 !PQQIIOO% 	>DAqN,,661=	> ''111r    )r,   r-   r.   r   r/   r=   r1   r   r3   r   r   r   r   ri   r<   rF   r;   r   r&   r    r   rO   rO   |  s    
sF{
A"A)1A	$'12E$@S:S4TT
A A+H + +
2~ 
2( 
2r    rO   c                       e Zd Zedededeeee	gef   eee
f   f   fd       ZdeddfdZdefdZd	e	dej                   fd
Zy)rQ   rd   rB   r   c                      | |j                         |j                  f}t        |t        j                        rt
        j                  |fS t        dt        |             )NzUnhandled SymNode type )	noder>   rD   rG   rP   rQ   unpickle_sym_intNotImplementedErrorr   )rb   rd   rB   r   s       r   rF   z _SymNodePickleData.reduce_helper  sR     CHHw667c5<<(%66<<%(?S	{&KLLr    r   Nc                     |j                   | _        |j                  | _        |j                  | _        |j                  | _        y rw   )_exprexprr   pytype_hinthint)r@   r   s     r   r;   z_SymNodePickleData.__init__  s.    JJ	kkJJ	r    c                     | j                   t        d      t        | j                  | j                   | j                  | j
                        S )Nzshape_env is None)r   rU   r   r   r   r   )r@   s    r   _to_sym_nodez_SymNodePickleData._to_sym_node  s9    >>! !455tyy$..$++tyyIIr    r[   c                 H    t        j                  | j                               S rw   )rG   rP   r   r@   r[   s     r   r   z#_SymNodePickleData.unpickle_sym_int  s    ||D--/00r    )r,   r-   r.   r   r3   r   r   r   r   ri   r<   rF   r   r;   r   rG   rP   r   r&   r    r   rQ   rQ     s    MM M 
$'23U4AT;T5UU
	M MW  Jg J
1~ 1%,, 1r    rQ   c                       e Zd ZU ee   ed<   edededee	e
egef   ee
ef   f   fd       Zdededdfd	Zd
edefdZy)rE   metadatard   rB   r   c                 X    | j                    | |j                  |      |j                  ffS rw   )r   r?   r>   r   s      r   rF   z_TensorPickleData.reduce_helper  s3     ||..4##
 
 	
r    	describertNc           
         |j                  |      }|j                  rYt        |j                  t        j                  j
                  j                        s!t        dt        |j                               t        j                  |d       | _        t        j                  D ]B  }|dv rt        | j                  |      t        d| dt        | j                  |              y )Nz3view_func must be None or _FakeTensorViewFunc, got rg   )rg   	view_funcz
not None: z: )describe_tensorr   rD   rG   _subclasses
meta_utils_FakeTensorViewFuncrU   r   r   replacer   r   _UNSERIALIZABLEr   )r@   r   r   r   r   s        r   r;   z_TensorPickleData.__init__  s    
 ,,Q/ j 1 1 < < P P'
 !E**+,.  $++HE  // 	TA..t}}a(4$z!Bwt}}a7P6Q%RSS		Tr    r[   c                    t        j                  | j                  j                        }|j                  rN|j
                  Bt        j                  |j
                  j                        }t        j                  ||      }dt        g t        j                  f   dt        t        j                  t        f   dt        ffd}j                  j                  |j                  j                  |d d       S )Nr   )basemake_meta_tdevicer   c                 |    t               5  t        j                   |        |      cd d d        S # 1 sw Y   y xY wrw   )r   r   rg   )r   r   r[   s     r   	with_fakez-_TensorPickleData.unpickle.<locals>.with_fake  s8      !",,M	  s   2;)r   r   r   rg   is_viewr   r   rG   r   r	   r   r/   r   r   meta_tensorr   )r@   r[   r   new_baser   s    `   r   r   z_TensorPickleData.unpickle  s    &&MM$..
  9"**(22H #**8(CH		!"ell"23		=B5<<QTCT=U				 ,,88$$..
 	
r    )r,   r-   r.   r   r   r1   r   r3   r   r   r   ri   r<   rF   r   r   r;   r   r&   r    r   rE   rE     s    Z((
"
)3
	$'34eDBU<U6VV

 
T"5 T& TT T2 
~  
*  
r    rE   c                       e Zd Zedededeeee	e
gef   ee	ef   f      fd       ZdededdfdZd	e
ded
ef   fdZededee	   fd       Zy)rV   rd   rB   r   c                 ^    | j                  |      x}r| j                  ||j                  ffS y rw   )from_objectr   r>   )rb   rd   rB   rf   s       r   rF   z#_TorchNumpyPickleData.reduce_helper  s5     ??3''4'LL4)@)@"ABBr    modr   Nc                      || _         || _        y rw   )r  r   )r@   r  r   s      r   r;   z_TorchNumpyPickleData.__init__  s    	r    r[   .c                     t        t        j                  | j                        | j                        }t
        j                  j                  j                  j                         |   S rw   )
r   	importlibimport_moduler  r   rG   _dynamo	variablesmiscget_np_to_tnp_map)r@   r[   nps      r   r   z_TorchNumpyPickleData.unpickle  sE    Y,,TXX6		B}}&&++==?CCr    tnpc                    t        |      sy t        j                  j                  j                  j                         }	 |j                  |      x}sy 	 t        |dd       x}sd}t        |dd       x}sy |t        t        j                  |      |      k7  rt        d| d|        | ||      S # t        $ r Y y w xY w)Nr-   numpyr,   zNumpy object mismatch for r   )r   rG   r	  r
  r  get_tnp_to_np_mapget	TypeErrorr   r  r  rU   )rb   r  	tnp_to_npr  r  r   s         r   r  z!_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    B2 2	B>=B>)r,   r-   r.   r   r3   r=   r   r   r   r   ri   r<   rF   r/   r;   r   r  r&   r    r   rV   rV     s    
"
)/
	dN+V34eDBU<U6VV	


 
C s t D~ D(3;:O D f $  r    rV   c                      e Zd Zededej                  j                  dee	e
egej                  j                  f   ee
ef   f   fd       Zdej                  j                  deddfdZd	edej                  j                  fd
Zy)rJ   rd   rB   r   c                 X    | j                    | ||j                        |j                  ffS rw   )r   r5   r>   r   s      r   rF   z$_GraphModulePickleData.reduce_helper9  s1     ||W__%##
 
 	
r    gmr5   Nc                 t   t        |t        j                  j                  j                        r|j                         }n|j                         }t        |d      r|j                         | _	        n|j                  j                         | _	        | j                  d= t        |j                  |      | _        y )Nr   _graph)rD   rG   rH   _lazy_graph_module_LazyGraphModule_real_recompile	recompiler   r   gm_dictr   r   _GraphPickleDatar  graph)r@   r  r5   _python_codes       r   r;   z_GraphModulePickleData.__init__E  s    b%((55FFG--/L<<>L2~&??,DL;;++-DLLL"%bii9
r    r[   c                     t         j                  j                  j                  t         j                  j                        }| j                  |_        | j                  j                  ||      |_        |S rw   )	rG   rH   rI   __new__r  r   r   r   r  )r@   r[   r  s      r   r   z_GraphModulePickleData.unpickleR  sN    XX!!))%((*>*>?llJJ''N;		r    )r,   r-   r.   r   r3   rG   rH   rI   r   r   r   ri   r<   rF   r)   r;   r   r&   r    r   rJ   rJ   8  s    	
"	
).)=)=	
	$')=)==>d''(	*
	
 	
:588// :' :d :~ %((:N:N r    rJ   c                      e Zd Zdej                  j
                  deej                  j
                  d f   deddfdZdej                  j                  ded ej                  j
                  f   de
dej                  j
                  fd	Zy)
_NodePickleDatar   mappingr5   r   Nc                 f   t        j                  t        j                  j                  fd|j
                        | _        t        j                  t        j                  j                  fd|j                        | _        |j                  | _        |j                  | _        t        j                  |j                  |      | _        |j                  | _        |j                  j                         D ci c]%  \  }}|j                  r|j                  |      r||' c}}| _        y c c}}w )Nc                     |    S rw   r&   nr&  s    r   <lambda>z*_NodePickleData.__init__.<locals>.<lambda>`  s    '!* r    c                     |    S rw   r&   r)  s    r   r+  z*_NodePickleData.__init__.<locals>.<lambda>b  s    WQZ r    )pytreetree_map_onlyrG   rH   rT   r   kwargsr   oprN   r   targetr   metar   r+   )r@   r   r&  r5   r   r   s     `   r   r;   z_NodePickleData.__init__Z  s     ((8LdiiX	**HHMM/
 II	''#**4;;@ II	 		)
14433A6	 qD
	 
s   9*D-r   r[   c                    t        j                  t        fd| j                        }t        j                  t        fd| j                        }| j
                  j                  |      }t        |      s't        |t              st        dt        |             |j                  | j                  |||| j                  | j                        }| j                  |_        |S )Nc                     |    S rw   r&   r)  s    r   r+  z*_NodePickleData.unpickle.<locals>.<lambda>}  s    wqz r    c                     |    S rw   r&   r)  s    r   r+  z*_NodePickleData.unpickle.<locals>.<lambda>  s    wqz r    z$target must be callable or str, got )r-  r.  r%  r   r/  r1  r   r   rD   r/   rU   r   create_noder0  r   r2  )r@   r   r&  r[   r   r/  r1  r   s     `     r   r   z_NodePickleData.unpicklew  s     ##O5I499U%%14;;
 %%n5 Jvs$; #GV~!VWW  &$		499UII	r    )r,   r-   r.   rG   rH   rT   r   r)   r;   Graphri   r   r&   r    r   r%  r%  Y  s    
hhmm
 ehhmm%667
 	

 

:xx~~ '67 '	
 
r    r%  c            
           e Zd Zedededeeegef   ee	   f   fd       Z
edededd fd       Zededeed	   ed
   f   dedd fd       Zededefd       Zededefd       Zedededefd       Zy)rN   rd   r0  r   c                 l    | j                  ||j                        }|j                  |j                  ffS rw   )r   r5   r   r>   )rb   rd   r0  results       r   rF   z_OpPickleData.reduce_helper  s0     B0'"9"9!;<<r    r5   c                    t        |t              rt        |      S t        t        |dd       t              rUt        |d      st        d      |j                  }t        |t              st        dt        |             t        |      S t        j                  j                  j                  |      }t        |t        j                  j                        r| j!                  |t"        |      S t        |t        j                  j$                        r| j!                  |t&        |      S |j)                  t*        j,                        r!|j/                  dd      \  }}t+        ||      S t1        dt        |       d| d|       )N__wrapped__z op missing __wrapped__ attributez"Expected AOTCompiledArtifact, got r   r   zTARGET:  )rD   r/   _OpStrPickleDatar   r   r   rU   r<  r   _OpPrecompiledPickleDatarG   rH   rT   _pretty_print_targetrK   
OpOverload
_pickle_op_OpOverloadPickleDatarM   _OpOverloadPacketPickleDatar   _OpFunctionPickleDataSUPPORTED_ROOTSsplitr   )rb   r0  r5   artifactr   r   details          r   r   z_OpPickleData.pickle  s>   b##B''gb-68KL2}-$%GHH~~Hh(;<$8h8HI  ,H55xx}}11"5b%**//0>>$(=wGGEJJ778>>$(CWMM__2BBC::c1-LD&(v66 &b
!B4q&GHHr    r   dataclsrC  rD  c                 `    |j                   x}r ||       sddlm}  |d|         ||       S )Nr   )BypassFxGraphCachez"Unable to pickle non-standard op: )r*   torch._inductor.codecacherL  )r   rJ  r5   r*   rL  s        r   rB  z_OpPickleData._pickle_op  s<     ",,,J,j6FD$'I$%PQQt}r    r[   c                      y rw   r&   r   s     r   r   z_OpPickleData.unpickle  s    r    c                     d|v r4|j                  dd      \  }}t               |   }| j                  ||      S t               |   S )zC
        Like `globals()[name]` but supports dotted names.
        r   r   )rG  globals_getattr_by_name)rb   r   r  restr   s        r   _lookup_global_by_namez$_OpPickleData._lookup_global_by_name  sI    
 $;

3*IC9S>D''d339T?"r    r   c                 n    d|v r&|j                  dd      \  }}t        | |      } d|v r&t        | |      S )zG
        Like `getattr(root, name)` but supports dotted names.
        r   r   )rG  r   )r   r   r  s      r   rQ  z_OpPickleData._getattr_by_name  sC    
 Tk

3*IC4%D Tk tT""r    N)r,   r-   r.   r   r3   r=   r   r   ri   r<   rF   r)   r   r   r/   r	   r   rB  r   r   rS  rQ  r&   r    r   rN   rN     s5   ="=(.=	x(&0159L3MM	N= = I I I_ I I6 ()40M+NN

  
  ~ &   	## 	#& 	# 	# #v #S #V # #r    rN   c                   ,    e Zd ZdeddfdZdedefdZy)r>  r   r   Nc                     || _         y rw   r   r@   r   s     r   r;   z_OpStrPickleData.__init__  	    	r    r[   c                     | j                   S rw   r   r   s     r   r   z_OpStrPickleData.unpickle  s    yyr    )r,   r-   r.   r/   r;   ri   r   r&   r    r   r>  r>    s(    S T ~ # r    r>  c                   T    e Zd ZdeddfdZdedej                  j                  fdZ	y)rC  r   r   Nc                     || _         y rw   r   rW  s     r   r;   z_OpOverloadPickleData.__init__  rX  r    r[   c                     | j                  | j                        }t        |t        j                  j
                        st        dt        |             |S )NzExpected OpOverload, got )rS  r   rD   rG   rK   rA  rU   r   r@   r[   rB   s      r   r   z_OpOverloadPickleData.unpickle  sF    ))$))4#uzz445 #<T#YK!HII
r    )
r,   r-   r.   r/   r;   ri   rG   rK   rA  r   r&   r    r   rC  rC    s2    S T ~ %**:O:O r    rC  c                   T    e Zd ZdeddfdZdedej                  j                  fdZ	y)rD  r   r   Nc                     || _         y rw   r   rW  s     r   r;   z$_OpOverloadPacketPickleData.__init__  rX  r    r[   c                     | j                  | j                        }t        |t        j                  j
                        st        dt        |             |S )NzExpected OpOverloadPacket, got )rS  r   rD   rG   rK   rM   rU   r   r]  s      r   r   z$_OpOverloadPacketPickleData.unpickle  sF    ))$))4#uzz::; #B49+!NOO
r    )
r,   r-   r.   r/   r;   ri   rG   rK   rM   r   r&   r    r   rD  rD    s2    S T ~ %**:U:U r    rD  c                   ,    e Zd ZdeddfdZdedefdZy)r?  rH  r   Nc                 .    |j                         | _        y rw   )	serializecontents)r@   rH  s     r   r;   z!_OpPrecompiledPickleData.__init__  s     **,r    r[   c                     t        j                  | j                        dd l}|j	                        dt
        dt
        ffd       }|S )Nr   r   r   c                       |  S rw   r&   )r   precompiled_artifacts    r   wrappedz2_OpPrecompiledPickleData.unpickle.<locals>.wrapped  s    '..r    )r   deserializerd  	functoolswrapsr   )r@   r[   rj  rh  rg  s       @r   r   z!_OpPrecompiledPickleData.unpickle  sL    2>>t}}M	-	.	/3 	/3 	/ 
/	/ r    )r,   r-   r.   r   r;   ri   r=   r   r&   r    r   r?  r?    s)    -!4 - -~ & r    r?  c                   8    e Zd ZdZdZdededdfdZdedefd	Z	y)
rE  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                      || _         || _        y rw   )r   r   )r@   r   r   s      r   r;   z_OpFunctionPickleData.__init__  s    		r    r[   c                    | j                   dk(  rt        j                  | j                        S | j                   dk(  r dd l}| j                  || j                        S | j                   dk(  r | j                  t        | j                        S | j                   dk(  r dd l}| j                  || j                        S | j                   dk(  r dd l}| j                  || j                        S t        )Nbuiltinsmathr   rG   operatoreinops)
r   __builtins__r  r   rp  rQ  rG   rq  rr  r   )r@   r[   rp  rq  rr  s        r   r   z_OpFunctionPickleData.unpickle  s    99
"##DII..YY& ((tyy99YY'!((		::YY*$((499==YY("((;;%%r    )
r,   r-   r.   r   rF  r/   r;   ri   r=   r   r&   r    r   rE  rE    s<     OOS   &~ && &r    rE  c                       e Zd Zdej                  j
                  deddfdZdej                  j                  de	dej                  j
                  fdZ
y)	r  r   r5   r   Nc                     |j                   | _        |j                  | _        i }|j                  D ]  }t        |||      ||<    t        |j                               | _        |j                  | _        y rw   )	_tracer_cls
tracer_cls_tracer_extrastracer_extrasnodesr%  r   values_codegen)r@   r   r5   rz  r   s        r   r;   z_GraphPickleData.__init__'  sf    ++"1168KK 	@D)$w?E$K	@5<<>*
r    r  r[   c                     t         j                  j                  || j                  | j                        }i }| j
                  D ]  }|j                  |||      ||<    t        | d      r| j                  |_        |S )Nr|  )	rG   rH   r7  rw  ry  rz  r   r   r|  )r@   r  r[   r   rz  nds         r   r   z_GraphPickleData.unpickle:  sn     r4??D4F4FG68** 	BBE5.AE"I	B4$!]]ENr    )r,   r-   r.   rG   rH   r7  r)   r;   rI   ri   r   r&   r    r   r  r  &  sS    'ehhnn 'w '4 '&((&&8F	r    r  c                       e Zd Zededej                  j                  dee	e
egej                  j                  f   ee
ef   f   fd       ZdeddfdZdedefd	Zy)
rS   rd   rB   r   c                 B    | j                    | |      |j                  ffS rw   r   r   s      r   rF   z'_TracingContextPickleData.reduce_helperI  s*     LLC''
 	
r    contextNc                 6   |j                   | _         |j                  | _        |j                  | _        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _        |j                  | _        y rw   )	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)r@   r  s     r   r;   z"_TracingContextPickleData.__init__X  s    %44#*#>#> #00%44"..-4-R-R*.5.T.T+%4477 	0r    r[   c                 b   t        |j                        }| j                  |_        | j                  |_        | j                  |_        | j
                  |_        | j                  |_        | j                  |_        | j                  |_        | j                  |_	        | j                  |_
        |S rw   )r   rg   r  r  r  r  r  r  r  r  r  )r@   r[   r  s      r   r   z"_TracingContextPickleData.unpicklen  s     !9!9:!%!4!4&*&>&>##00!%!4!4"..040R0R-151T1T.!%!4!444 	3 r    )r,   r-   r.   r   r3   rG   rR   r   r   r   r   ri   r<   rF   r;   r   r&   r    r   rS   rS   H  s    
"
).)E)E
	$')E)EEFd''(	*

 

 
4 
,~ . r    rS   )Jr   r  r^   r   r   abcr   collections.abcr   typingr   r   r   r   r	   typing_extensionsr
   r   torch.utils._import_utilsr   r9   rG   torch.utils._pytreeutils_pytreer-  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   rP   SymFloatr   r/   r0   r   r'   	dataclassr)   Picklerr3   ri   r=   r<   	Unpicklerrj   rO   rQ   rE   rV   rJ   r%  rN   r>  rC  rD  r?  rE  r  rS   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    