
    9j                        d dl Z d dlZ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
mZ d dl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  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j^                  ej`                        Z1de2de3fdZ4de2de3fdZ5ejl                   G d d             Z7d?dZ8de9dejt                  e9   fdZ;de
g df   fdZ<e jz                  ded   fd       Z> G d dej~                        Z@ G d d      ZA ed e9      ZB G d! d"ej                        ZD G d# d$      ZE G d% d&      ZF G d' d(      ZG G d) d*      ZH G d+ d,      ZI G d- d.      ZJ G d/ d0      ZK G d1 d2eK      ZL G d3 d4eK      ZM G d5 d6eK      ZN G d7 d8eK      ZO G d9 d:eK      ZP G d; d<      ZQ G d= d>      ZRy)@    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                 $    | 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    W/media/conek/DATA/Code/OCR/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'   5   s    
 SSSr    c                   \    e Zd ZU eZeegef   dz  ed<   e	Z
eegef   dz  ed<   dZeed<   y)OptionsN
ops_filternode_metadata_key_filterFignore_raw_node)__name__
__module____qualname__r   r*   r   strbool__annotations__r'   r+   r,   r&   r    r   r)   r)   =   sJ     0@J#%,?& hud{3d: 
 "OT!r    r)   c                       y Nr&   r&   r    r   _unpickle_as_noner5   J   s    r    referentc                 ,    t        j                  |       S r4   )weakrefref)r6   s    r   _unpickle_as_weakrefr:   N   s    ;;x  r    c                      d S )Nc                       y r4   r&   r&   r    r   <lambda>z+_unpickle_as_dead_weakref.<locals>.<lambda>S   s    r    r&   r&   r    r   _unpickle_as_dead_weakrefr>   R   s    r    c               #      K   t         t        j                  v rd  y t        j                  t         d d        	 d  t        j                  t                y # t        j                  t                w xY ww)Nc                 L    | j                   | j                  | j                  gd fS r4   )startstopstep)xs    r   r=   z-patch_pytree_map_over_slice.<locals>.<lambda>]   s    177AFFAFF3T: r    c                     t        |  S r4   )slice)rD   cs     r   r=   z-patch_pytree_map_over_slice.<locals>.<lambda>]   s    PQ r    )rF   pytreeSUPPORTED_NODES_private_register_pytree_node_deregister_pytree_noder&   r    r   patch_pytree_map_over_slicerL   V   sU     &&&
((:<R.&&u-&&u-s   9A8A  A8A55A8c                   &    e Zd ZdZddej
                  dedz  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dz  fd
       Zedde	dedz  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dz  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)   rP   _UnpickleStateTokenobject_unpickle_stater   _meta_tensor_describer)selfrO   rP   	__class__s      r   rV   zGraphPickler.__init__m   sV    GT.GT"+')  368< ':E&J#r    obj.c                 f   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&              r=ddlm} t,        j/                  |d      }| |t1        |            rt2        S t4        dfS t        |t6        j8                        r |       }|	t:        |ffS t<        dfS t        |t        j
                  j>                        r)| j@                  jB                  rt4        dfS tE        d      tF        j                  | |      x}r|S t2        S )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_objectr_   rX   __getattribute__typeNotImplementedr5   r8   r9   r:   r>   NoderP   r,   AssertionError_TorchNumpyPickleData)r[   r]   r_   r`   r6   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-.I..sJ?H#(<T(^(L%%%r**W[[) uH#,xk::1266 #uxx}}-<<//-r22$%JKK.<<T3GGvG "!r    c                 "    || j                   u ryy )Nunpickle_state)rY   )r[   r]   s     r   persistent_idzGraphPickler.persistent_id   s     $&&&#r    c                     t               5  t        j                         5 } | ||      }|j                  |       |j	                         cddd       cddd       S # 1 sw Y   nxY wddd       y# 1 sw Y   yxY w)z#
        Pickle an object.
        N)rL   ioBytesIOdumpgetvalue)clsr]   rP   streampicklers        r   dumpszGraphPickler.dumps   se    
 )* 	%BJJL 	%F&'*GLL??$	% 	% 	% 	% 	% 	% 	%s"   A2*A
	A2A&	"A22A;data	fake_modec                 T   ddl m} t               5   |d      5  t        |      }t	        j
                  |       5 }t        ||      }|j                         cddd       cddd       cddd       S # 1 sw Y   nxY w	 ddd       n# 1 sw Y   nxY wddd       y# 1 sw Y   yxY w)z%
        Unpickle an object.
        r   )dynamo_timedzGraphPickler.loadsN)torch._dynamo.utilsr   rL   _UnpickleStater~   r   _GraphUnpicklerload)r   r   r   stater   	unpicklers         r   loadszGraphPickler.loads   s    
 	5(* 	(L9M,N 	("9-ED! (V+FE:	 ~~'( (	( 	( 	(( ( (	( 	( 	( 	( 	( 	(s?   	B!B	A3	B	 	B3A<8B	 	B	B	BB'P   2   T)	max_depthmax_iter_itemsverbosezOptions | Noner   r   r   c          	      *   	
 xs
 t                 t        j                               	t               
dt        ddffddt
        dt        dz  f fddt
        dt        dt        dt        dz  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 r4   )print)r   r   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r4   )r   	Exception)r   er   rP   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__[)!rs   idaddra   dictitemslisttuple	enumerateset	frozensethasattrr-   endswith	itertoolsisliceiterr   lenry   rt   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   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   r0   r   BaseExceptionint)r   r]   rP   r   r   r   r   r   r   r   r   r   s   ` ```` @@@@@r   debug_dumpszGraphPickler.debug_dumps   s    < &WYbjjlG,E	S 	T 		 	 4 	I	C I	s I	3 I	3: I	 I	V 3"
r    r4   )r-   r.   r/   __doc__r~   r   r)   rV   r	   rX   r   r   r   ry   r0   r|   classmethodbytesr   staticmethodr   r   r   r1   r   __classcell__r\   s   @r   rN   rN   g   sZ   
KRZZ K'D. KD K" ="="	xS!5c?2	3=" ="~  C$J   % %4 %5 % % 
(E 
(n 
( 
( 
(  %)y
  yy "y
 y y y 
ty yr    rN   c                       e Zd ZdeddfdZy)r   r   r   Nc                 0    || _         t               | _        y r4   )r   r   meta_converter)r[   r   s     r   rV   z_UnpickleState.__init__  s    "9Fr    )r-   r.   r/   r   rV   r&   r    r   r   r     s    I. IT Ir    r   rW   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 )r   r   r{   r   Nc                 2    t         |   |       || _        y r4   )rU   rV   rY   )r[   r   r{   r\   s      r   rV   z_GraphUnpickler.__init__  s     -r    pidc                 N    |dk(  r| j                   S t        j                  d      )Nr{   zInvalid persistent ID)rY   r   UnpicklingError)r[   r   s     r   persistent_loadz_GraphUnpickler.persistent_load  s+     ""'''(()@AAr    )r-   r.   r/   r~   r   r   rV   r	   rX   r   r   r   s   @r   r   r     sG    .rzz .> .d . B6 Bf B Br    r   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)rl   r   r   r]   r   c                 B    | j                    | |      |j                  ffS r4   unpicklerY   r   r   r]   s      r   rc   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_enabledrv   r   copyr   )r[   r   s     r   rV   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)r   rv   	shape_envr   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   r0   rX   r2   r   rN   r   r   r   r
   r   rW   rc   rV   r   r&   r    r   rl   rl     s    
sF{
A"A)1A	$'12E$@S:S4TT
A A+H + +
2~ 
2( 
2r    rl   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)rn   r   r]   r   c                      | |j                         |j                  f}t        |t        j                        rt
        j                  |fS t        dt        |             )NzUnhandled SymNode type )	noderY   ra   rd   rm   rn   unpickle_sym_intNotImplementedErrorrs   )r   r   r]   r   s       r   rc   z _SymNodePickleData.reduce_helper  sR     CHHw667c5<<(%66<<%(?S	{&KLLr    r   Nc                     |j                   | _        |j                  | _        |j                  | _        |j                  | _        y r4   )_exprexprr   pytype_hinthint)r[   r   s     r   rV   z_SymNodePickleData.__init__  s.    JJ	kkJJ	r    c                     | j                   t        d      t        | j                  | j                   | j                  | j
                        S )Nzshape_env is None)r   rv   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 r4   )rd   rm   r  r[   r{   s     r   r   z#_SymNodePickleData.unpickle_sym_int  s    ||D--/00r    )r-   r.   r/   r   rN   r   r   r   r
   r   rW   rc   r   rV   r  rd   rm   r   r&   r    r   rn   rn     s    MM M 
$'23U4AT;T5UU
	M MW  Jg J
1~ 1%,, 1r    rn   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)rb   metadatar   r]   r   c                 X    | j                    | |j                  |      |j                  ffS r4   )r   rZ   rY   r   s      r   rc   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 r   )r   	view_funcz
not None: z: )describe_tensorr  ra   rd   _subclasses
meta_utils_FakeTensorViewFuncrv   rs   r   replacer  r   _UNSERIALIZABLEr   )r[   r  r  r  r   s        r   rV   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        j                  t        z  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r4   )r   r   r   )r  r  r{   s     r   	with_fakez-_TensorPickleData.unpickle.<locals>.with_fake,  s8      !",,M	  s   2;)r   r  r  r   is_viewr  r   rd   r   r  r0   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		=B\\C=O				 ,,88$$..
 	
r    )r-   r.   r/   r   r   r2   r   rN   r   r   r
   r   rW   rc   r   r   rV   r   r&   r    r   rb   rb     s    Z((
"
)3
	$'34eDBU<U6VV

 
T"5 T& TT T2 
~  
*  
r    rb   c                       e Zd Zedededeeee	gef   eee
f   f   dz  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dz  fd       Zy)rw   r   r]   r   Nc                 ^    | j                  |      x}r| j                  ||j                  ffS y r4   )from_objectr   rY   )r   r   r]   r   s       r   rc   z#_TorchNumpyPickleData.reduce_helperA  s5     ??3''4'LL4)@)@"ABBr    modr   c                      || _         || _        y r4   )r$  r   )r[   r$  r   s      r   rV   z_TorchNumpyPickleData.__init__O  s    	r    r{   .c                     t        t        j                  | j                        | j                        }t
        j                  j                  j                  j                         |   S r4   )
r   	importlibimport_moduler$  r   rd   _dynamo	variablesmiscget_np_to_tnp_map)r[   r{   nps      r   r   z_TorchNumpyPickleData.unpickleS  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   rd   r)  r*  r+  get_tnp_to_np_mapget	TypeErrorr   r'  r(  rv   )r   r.  	tnp_to_npr-  r$  r   s         r   r#  z!_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    B2 2	B>=B>)r-   r.   r/   r   rN   rX   r   r   r
   r   rW   rc   r0   rV   r   r#  r&   r    r   rw   rw   @  s    ")/ 	dN+V34eDBU<U6VV	
 	 C s t D~ D(3;:O D f   r    rw   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)rg   r   r]   r   c                 X    | j                    | ||j                        |j                  ffS r4   )r   rP   rY   r   s      r   rc   z$_GraphModulePickleData.reduce_helpers  s1     ||W__%##
 
 	
r    gmrP   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)ra   rd   re   _lazy_graph_module_LazyGraphModule_real_recompile	recompiler   r   gm_dictr   r   _GraphPickleDatar9  graph)r[   r7  rP   _python_codes       r   rV   z_GraphModulePickleData.__init__  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 r4   )	rd   re   rf   __new__r>  r   r@  r   r9  )r[   r{   r7  s      r   r   z_GraphModulePickleData.unpickle  sN    XX!!))%((*>*>?llJJ''N;		r    )r-   r.   r/   r   rN   rd   re   rf   r   r   r
   r   rW   rc   r)   rV   r   r&   r    r   rg   rg   r  s    	
"	
).)=)=	
	$')=)==>d''(	*
	
 	
:588// :' :d :~ %((:N:N r    rg   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   mappingrP   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 r4   r&   nrF  s    r   r=   z*_NodePickleData.__init__.<locals>.<lambda>  s    '!* r    c                     |    S r4   r&   rI  s    r   r=   z*_NodePickleData.__init__.<locals>.<lambda>  s    WQZ r    )rH   tree_map_onlyrd   re   ru   r   kwargsr   oprk   r   targetrs   metar   r+   )r[   r   rF  rP   r   r   s     `   r   rV   z_NodePickleData.__init__  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 r4   r&   rI  s    r   r=   z*_NodePickleData.unpickle.<locals>.<lambda>  s    wqz r    c                     |    S r4   r&   rI  s    r   r=   z*_NodePickleData.unpickle.<locals>.<lambda>  s    wqz r    z$target must be callable or str, got )rH   rL  rE  r   rM  rO  r   r   ra   r0   rv   rs   create_noderN  r   rP  )r[   r@  rF  r{   r   rM  rO  r   s     `     r   r   z_NodePickleData.unpickle  s     ##O5I499U%%14;;
 %%n5 Jvs$; #GV~!VWW  &$		499UII	r    )r-   r.   r/   rd   re   ru   r   r)   rV   Graphr   r   r&   r    r   rE  rE    s    
hhmm
 ehhmm%667
 	

 

:xx~~ '67 '	
 
r    rE  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d	   ed
   z  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)rk   r   rN  r   c                 l    | j                  ||j                        }|j                  |j                  ffS r4   )r   rP   r   rY   )r   r   rN  results       r   rc   z_OpPickleData.reduce_helper  s0     B0'"9"9!;<<r    rP   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:  )ra   r0   _OpStrPickleDatar   r   r   rv   rZ  rs   _OpPrecompiledPickleDatard   re   ru   _pretty_print_targetrh   
OpOverload
_pickle_op_OpOverloadPickleDatarj   _OpOverloadPacketPickleDatar   _OpFunctionPickleDataSUPPORTED_ROOTSsplitr   )r   rN  rP   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   dataclsra  rb  c                 `    |j                   x}r ||       sddlm}  |d|         ||       S )Nr   )BypassFxGraphCachez"Unable to pickle non-standard op: )r*   torch._inductor.codecacherj  )r   rh  rP   r*   rj  s        r   r`  z_OpPickleData._pickle_op  s<     ",,,J,j6FD$'I$%PQQt}r    r{   c                      y r4   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   )re  globals_getattr_by_name)r   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   )re  r   )r   r   r$  s      r   ro  z_OpPickleData._getattr_by_name  sC    
 Tk

3*IC4%D Tk tT""r    N)r-   r.   r/   r   rN   rX   r   r   r   rW   rc   r)   r   r   r0   rs   r`  r   r   rq  ro  r&   r    r   rk   rk     s-   ="=(.=	x(&0159L3MM	N= = I I I_ I I6 		-.6S1TT	 	 
		 	 ~ &   	## 	#& 	# 	# #v #S #V # #r    rk   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 r4   r   r[   r   s     r   rV   z_OpStrPickleData.__init__  	    	r    r{   c                     | j                   S r4   r   r	  s     r   r   z_OpStrPickleData.unpickle  s    yyr    )r-   r.   r/   r0   rV   r   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)ra  r   r   Nc                     || _         y r4   r   ru  s     r   rV   z_OpOverloadPickleData.__init__  rv  r    r{   c                     | j                  | j                        }t        |t        j                  j
                        st        dt        |             |S )NzExpected OpOverload, got )rq  r   ra   rd   rh   r_  rv   rs   r[   r{   r]   s      r   r   z_OpOverloadPickleData.unpickle  sF    ))$))4#uzz445 #<T#YK!HII
r    )
r-   r.   r/   r0   rV   r   rd   rh   r_  r   r&   r    r   ra  ra    s2    S T ~ %**:O:O r    ra  c                   T    e Zd ZdeddfdZdedej                  j                  fdZ	y)rb  r   r   Nc                     || _         y r4   r   ru  s     r   rV   z$_OpOverloadPacketPickleData.__init__"  rv  r    r{   c                     | j                  | j                        }t        |t        j                  j
                        st        dt        |             |S )NzExpected OpOverloadPacket, got )rq  r   ra   rd   rh   rj   rv   rs   r{  s      r   r   z$_OpOverloadPacketPickleData.unpickle%  sF    ))$))4#uzz::; #B49+!NOO
r    )
r-   r.   r/   r0   rV   r   rd   rh   rj   r   r&   r    r   rb  rb  !  s2    S T ~ %**:U:U r    rb  c                   ,    e Zd ZdeddfdZdedefdZy)r]  rf  r   Nc                 .    |j                         | _        y r4   )	serializecontents)r[   rf  s     r   rV   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 r4   r&   )r   precompiled_artifacts    r   wrappedz2_OpPrecompiledPickleData.unpickle.<locals>.wrapped4  s    '..r    )r   deserializer  	functoolswrapsr   )r[   r{   r  r  r  s       @r   r   z!_OpPrecompiledPickleData.unpickle0  sL    2>>t}}M	-	.	/3 	/3 	/ 
/	/ r    )r-   r.   r/   r   rV   r   rX   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)
rc  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 r4   )r   r   )r[   r   r   s      r   rV   z_OpFunctionPickleData.__init__E  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   rd   operatoreinops)
r   __builtins__r2  r   r  ro  rd   r  r  r   )r[   r{   r  r  r  s        r   r   z_OpFunctionPickleData.unpickleI  s    99
"##DII..YY& ((tyy99YY'!((		::YY*$((499==YY("((;;%%r    )
r-   r.   r/   r   rd  r0   rV   r   rX   r   r&   r    r   rc  rc  ;  s<     OOS   &~ && &r    rc  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@  rP   r   Nc                     |j                   | _        |j                  | _        i }|j                  D ]  }t        |||      ||<    t        |j                               | _        |j                  | _        y r4   )	_tracer_cls
tracer_cls_tracer_extrastracer_extrasnodesrE  r   values_codegen)r[   r@  rP   r  r   s        r   rV   z_GraphPickleData.__init___  sf    ++"1168KK 	@D)$w?E$K	@5<<>*
r    r7  r{   c                     t         j                  j                  || j                  | j                        }i }| j
                  D ]  }|j                  |||      ||<    t        | d      r| j                  |_        |S )Nr  )	rd   re   rU  r  r  r  r   r   r  )r[   r7  r{   r@  r  nds         r   r   z_GraphPickleData.unpickler  sn     r4??D4F4FG68** 	BBE5.AE"I	B4$!]]ENr    )r-   r.   r/   rd   re   rU  r)   rV   rf   r   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)
rp   r   r]   r   c                 B    | j                    | |      |j                  ffS r4   r   r   s      r   rc   z'_TracingContextPickleData.reduce_helper  s*     LLC''
 	
r    contextNc                 6   |j                   | _         |j                  | _        |j                  | _        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _        |j                  | _        y r4   )	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   rV   z"_TracingContextPickleData.__init__  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 r4   )r   r   r  r  r  r  r  r  r  r  r  )r[   r{   r  s      r   r   z"_TracingContextPickleData.unpickle  s     !9!9:!%!4!4&*&>&>##00!%!4!4"..040R0R-151T1T.!%!4!444 	3 r    )r-   r.   r/   r   rN   rd   ro   r   r   r   r
   r   rW   rc   rV   r   r&   r    r   rp   rp     s    
"
).)E)E
	$')E)EEFd''(	*

 

 
4 
,~ . r    rp   )r   N)S
contextlibr   r'  r~   r   r   r8   abcr   collections.abcr   r   typingr   r   r   typing_extensionsr	   r
   torch.utils._import_utilsr   rT   rd   torch.utils._pytreeutils_pytreerH   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   rm   SymFloatr   r0   r1   r   r'   	dataclassr)   r5   rX   r9   r:   r>   contextmanagerrL   PicklerrN   r   rW   	Unpicklerr   rl   rn   rb   rw   rg   rE  rk   r\  ra  rb  r]  rc  r?  rp   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    