
    ^j                        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    b/var/www/ramen.bs-engineer-server.com/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                   N    e Zd ZdZddej
                  dedz  ddf fdZ ee	e
eee ed      h      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                    t        |      | j                  v rt        S 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} t2        j5                  |d      }| |t        |            rt        S t6        dfS t        |t8        j:                        r |       }|	t<        |ffS t>        dfS t        |t        j                  j@                        r)| jB                  jD                  rt6        dfS tG        d      tH        j                  | |      x}r|S t        S )Nr   )is_opaque_value_typereal_objr&   z#Unexpected raw Node during pickling)%type_PASSTHROUGH_TYPESNotImplemented
isinstancer   _TensorPickleDatareduce_helpertorchfxGraphModule_GraphModulePickleData_opsOperatorBaseOpOverloadPacket_OpPickleDatar   _ShapeEnvPickleDataSymInt_SymNodePickleData_guardsr   _TracingContextPickleDatar   torch._library.opaque_objectr_   rX   __getattribute__r5   r8   r9   r:   r>   NoderP   r,   AssertionError_TorchNumpyPickleData)r[   r]   r_   r`   r6   reduces         r   reducer_overridezGraphPickler.reducer_override   s   , 9///!!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__[)!ra   idaddrd   dictitemslisttuple	enumerateset	frozensethasattrr-   endswith	itertoolsisliceiterr   lenrz   rc   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   r   floatr0   bytesr1   ra   rb   r	   rX   r   r   r   rz   r}   classmethodr   staticmethodr   r   r   __classcell__r\   s   @r   rN   rN   g   sz   
KRZZ K'D. KD K" #CUD$t*#MN@"@"	xS!5c?2	3@" @"D  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)ro   r   r   r]   r   c                 B    | j                    | |      |j                  ffS r4   unpicklerY   r   r   r]   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_enabledrw   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   rw   	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   rf   rV   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   r   r]   r   c                      | |j                         |j                  f}t        |t        j                        rt
        j                  |fS t        dt        |             )NzUnhandled SymNode type )	noderY   rd   rg   rp   rq   unpickle_sym_intNotImplementedErrorra   )r   r   r]   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 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   rw   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   )rg   rp   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   rf   r   rV   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   metadatar   r]   r   c                 X    | j                    | |j                  |      |j                  ffS r4   )r   rZ   rY   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 r   )r   	view_funcz
not None: z: )describe_tensorr  rd   rg   _subclasses
meta_utils_FakeTensorViewFuncrw   ra   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_fake1  s8      !",,M	  s   2;)r   r  r  r   is_viewr  r   rg   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   rf   r   r   rV   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	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)rx   r   r]   r   Nc                 ^    | j                  |      x}r| j                  ||j                  ffS y r4   )from_objectr   rY   )r   r   r]   r   s       r   rf   z#_TorchNumpyPickleData.reduce_helperF  s5     ??3''4'LL4)@)@"ABBr    modr   c                      || _         || _        y r4   )r&  r   )r[   r&  r   s      r   rV   z_TorchNumpyPickleData.__init__T  s    	r    r|   .c                     t        t        j                  | j                        | j                        }t
        j                  j                  j                  j                         |   S r4   )
r   	importlibimport_moduler&  r   rg   _dynamo	variablesmiscget_np_to_tnp_map)r[   r|   nps      r   r   z_TorchNumpyPickleData.unpickleX  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*  rw   )r   r0  	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   rN   rX   r   r   r
   r   rW   rf   r0   rV   r   r%  r&   r    r   rx   rx   E  s    ")/ 	dN+V34eDBU<U6VV	
 	 C s t D~ D(3;:O D f   r    rx   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   r   r]   r   c                 X    | j                    | ||j                        |j                  ffS r4   )r   rP   rY   r   s      r   rf   z$_GraphModulePickleData.reduce_helperx  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)rd   rg   rh   _lazy_graph_module_LazyGraphModule_real_recompile	recompiler   r   gm_dictr   r   _GraphPickleDatar;  graph)r[   r9  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   )	rg   rh   ri   __new__r@  r   rB  r   r;  )r[   r|   r9  s      r   r   z_GraphModulePickleData.unpickle  sN    XX!!))%((*>*>?llJJ''N;		r    )r-   r.   r/   r   rN   rg   rh   ri   r   r   r
   r   rW   rf   r)   rV   r   r&   r    r   rj   rj   w  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   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&   nrH  s    r   r=   z*_NodePickleData.__init__.<locals>.<lambda>  s    '!* r    c                     |    S r4   r&   rK  s    r   r=   z*_NodePickleData.__init__.<locals>.<lambda>  s    WQZ r    )rH   tree_map_onlyrg   rh   rv   r   kwargsr   oprn   r   targetra   metar   r+   )r[   r   rH  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-rB  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&   rK  s    r   r=   z*_NodePickleData.unpickle.<locals>.<lambda>  s    wqz r    c                     |    S r4   r&   rK  s    r   r=   z*_NodePickleData.unpickle.<locals>.<lambda>  s    wqz r    z$target must be callable or str, got )rH   rN  rG  r   rO  rQ  r   r   rd   r0   rw   ra   create_noderP  r   rR  )r[   rB  rH  r|   r   rO  rQ  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/   rg   rh   rv   r   r)   rV   Graphr   r   r&   r    r   rG  rG    s    
hhmm
 ehhmm%667
 	

 

:xx~~ '67 '	
 
r    rG  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)rn   r   rP  r   c                 l    | j                  ||j                        }|j                  |j                  ffS r4   )r   rP   r   rY   )r   r   rP  results       r   rf   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:  )rd   r0   _OpStrPickleDatar   r   r   rw   r\  ra   _OpPrecompiledPickleDatarg   rh   rv   _pretty_print_targetrk   
OpOverload
_pickle_op_OpOverloadPickleDatarm   _OpOverloadPacketPickleDatar   _OpFunctionPickleDataSUPPORTED_ROOTSsplitr  )r   rP  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   dataclsrc  rd  c                 r    |j                   x}r" ||       sddlm} |j                  d|          ||       S )Nr   )CacheabilityValidatorz"Unable to pickle non-standard op: )r*   torch._inductor.codecacherl  bypass)r   rj  rP   r*   rl  s        r   rb  z_OpPickleData._pickle_op  s?     ",,,J,j6FG!((+MdV)TU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   )rg  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   )rg  r   )r   r   r&  s      r   rr  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   rf   r)   r   r   r0   ra   rb  r   r   rt  rr  r&   r    r   rn   rn     s-   ="=(.=	x(&0159L3MM	N= = I I I_ I I6 		-.6S1TT	 	 
		 	 ~ &   	## 	#& 	# 	# #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 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)rc  r   r   Nc                     || _         y r4   r   rx  s     r   rV   z_OpOverloadPickleData.__init__  ry  r    r|   c                     | j                  | j                        }t        |t        j                  j
                        st        dt        |             |S )NzExpected OpOverload, got )rt  r   rd   rg   rk   ra  rw   ra   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   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 r4   r   rx  s     r   rV   z$_OpOverloadPacketPickleData.__init__'  ry  r    r|   c                     | j                  | j                        }t        |t        j                  j
                        st        dt        |             |S )NzExpected OpOverloadPacket, got )rt  r   rd   rg   rk   rm   rw   ra   r~  s      r   r   z$_OpOverloadPacketPickleData.unpickle*  sF    ))$))4#uzz::; #B49+!NOO
r    )
r-   r.   r/   r0   rV   r   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 r4   )	serializecontents)r[   rh  s     r   rV   z!_OpPrecompiledPickleData.__init__2  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>.wrapped9  s    '..r    )r   deserializer  	functoolswrapsr   )r[   r|   r  r  r  s       @r   r   z!_OpPrecompiledPickleData.unpickle5  sL    2>>t}}M	-	.	/3 	/3 	/ 
/	/ r    )r-   r.   r/   r   rV   r   rX   r   r&   r    r   r_  r_  1  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 r4   )r   r   )r[   r   r   s      r   rV   z_OpFunctionPickleData.__init__J  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__r4  r   r  rr  rg   r  r  r  )r[   r|   r  r  r  s        r   r   z_OpFunctionPickleData.unpickleN  s    99
"##DII..YY& ((tyy99YY'!((		::YY*$((499==YY("((;;%%r    )
r-   r.   r/   r   rf  r0   rV   r   rX   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)	rA  rB  rP   r   Nc                     |j                   | _        |j                  | _        i }|j                  D ]  }t        |||      ||<    t        |j                               | _        |j                  | _        y r4   )	_tracer_cls
tracer_cls_tracer_extrastracer_extrasnodesrG  r   values_codegen)r[   rB  rP   r  r   s        r   rV   z_GraphPickleData.__init__d  sf    ++"1168KK 	@D)$w?E$K	@5<<>*
r    r9  r|   c                     t         j                  j                  || j                  | j                        }i }| j
                  D ]  }|j                  |||      ||<    t        | d      r| j                  |_        |S )Nr  )	rg   rh   rW  r  r  r  r   r   r  )r[   r9  r|   rB  r  nds         r   r   z_GraphPickleData.unpicklew  sn     r4??D4F4FG68** 	BBE5.AE"I	B4$!]]ENr    )r-   r.   r/   rg   rh   rW  r)   rV   ri   r   r   r&   r    r   rA  rA  c  sS    'ehhnn 'w '4 '&((&&8F	r    rA  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   r   r]   r   c                 B    | j                    | |      |j                  ffS r4   r   r   s      r   rf   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   rg   rr   r   r   r   r
   r   rW   rf   rV   r   r&   r    r   rs   rs     s    
"
).)E)E
	$')E)EEFd''(	*

 

 
4 
,~ . r    rs   )r   N)S
contextlibr   r)  r   r   r   r8   abcr   collections.abcr   r   typingr   r   r   typing_extensionsr	   r
   torch.utils._import_utilsr   rT   rg   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   rp   SymFloatr   r0   r1   r   r'   	dataclassr)   r5   rX   r9   r:   r>   contextmanagerrL   PicklerrN   r   rW   	Unpicklerr   ro   rq   re   rx   rj   rG  rn   r^  rc  rd  r_  re  rA  rs   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_ . . v6>> vr	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    