
    ukiQ                    6   d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
 	 d dlZd dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlZ e
d      Z e
d      ZdZd1d2dZd3dZ 	 	 	 	 	 	 	 	 d4dZ!	 	 	 	 	 	 	 	 d5dZ"d6dZ#	 	 	 	 	 	 	 	 d7dZ$	 	 	 	 	 	 d8dZ%d9dZ&i  ejN                  d      ejP                  jR                   ejN                  d      ejP                  jT                   ejN                  d      ejP                  jV                   ejN                  d      ejP                  jX                   ejN                  d      ejP                  jZ                   ejN                  d      ejP                  j\                   ejN                  d       ejP                  j^                   ejN                  d!      ejP                  j`                   ejN                  d"      ejP                  jb                  ejd                  ejP                  jf                   ejN                  d#      ejP                  jh                   ejN                  d$      ejP                  jj                   ejN                  d%      ejP                  jl                   ejN                  d&      ejP                  jn                   ejN                  d'      ejP                  jp                  ejr                  ejP                  jt                  ejv                  ejP                  jx                  ejz                  ejP                  j|                  ej~                  ejP                  j                  ej                  ejP                  j                  ej                  ejP                  j                  ej                  ejP                  j                  ej                  ejP                  j                  ej                  ejP                  j                  ej                  ejP                  j                  ej                  ejP                  j                  ej                  ejP                  j                  i
ZQeQj                         D  ci c]  \  } }|| 
 c}} ZSd:d(ZTej                  j                  ej                  j                  ej                  j                  ej                  j                  ej                  j                  ej                  j                  iZXeXj                         D ci c]  \  }}||
 c}}ZY	 	 	 	 	 	 d;d)ZZ	 	 d<d*Z[	 	 	 	 	 	 d=d+Z\d>d,Z]d?d-Z^d@d.Z_	 	 	 	 	 	 dAd/Z`	 	 	 	 dBd0Zay# e$ rZ ed      edZ[ww xY wc c}} w c c}}w )C    )annotationsN)CallableSequence)partial)AnyTypeVarzCPlease install 'flatbuffers' in order to use Exported serialization)core)dtypes)effects)	tree_util)serialization_generated)_export)
shape_poly)
xla_clientTSerT   c                    t        j                  d      }t        || |      }|j                  |       |j	                         S )ae  Serializes an Exported.

  Args:
    exp: the Exported to serialize.
    vjp_order: The maximum vjp order to include. E.g., the value 2 means that we
      serialize the primal functions and two orders of the `vjp` function. This
      should allow 2nd order reverse mode differentiation of the deserialized
      function. i.e., `jax.grad(jax.grad(f)).`
  i   )flatbuffersBuilder_serialize_exportedFinishOutput)exp	vjp_orderbuilderexporteds       X/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jax/_src/export/serialization.py	serializer   :   s;     &' #y9(	..		    c                V    t         j                  j                  |       }t        |      S )zDeserializes an Exported.)ser_flatbufExportedGetRootAsExported_deserialize_exported)serr   s     r   deserializer'   J   s#    ..s3#	s	##r    c                X   | j                  |j                        }t        | |j                        }t	        | t
        |j                        }t        | |j                        }t	        | t
        |j                        }t	        | t        |j                        }t	        | t        |j                        }	t	        | t        |j                        }
t	        | t        |j                        }t	        | t        |j                         }t	        | d |j"                        }| j%                  |j&                        }| j)                  t+        j,                  |j.                  t*        j0                              }d }|dkD  r9|j3                         st5        d      t7        | |j9                         |dz
        }t;        j<                  |        t;        j>                  | d       t;        j@                  | |       t;        jB                  | |       t;        jD                  | |       t;        jF                  | |       t;        jH                  | |       t;        jJ                  | |jL                         t;        jN                  | |jL                         t;        jP                  | |       t;        jR                  | |	       t;        jT                  | |       t;        jV                  | |
       t;        jX                  | |       t;        jZ                  | |       t;        j\                  | |       t;        j^                  | |j`                         t;        jb                  | |       t;        jd                  | |jf                         |t;        jh                  | |       t;        jj                  |       S )Nc                $    | j                  |      S N)CreateString)bps     r   <lambda>z%_serialize_exported.<locals>.<lambda>i   s    ANN1- r    )dtyper   zIserialization of an Exported that does not have vjps of high-enough order      )6r+   fun_name_serialize_pytreedefin_tree_serialize_array_serialize_avalin_avalsout_tree	out_avals_serialize_shardingin_shardings_hloout_shardings_hlo_serialize_effectordered_effectsunordered_effects _serialize_disabled_safety_checkdisabled_safety_checks	platformsCreateByteVectormlir_module_serializedCreateNumpyVectornparraymodule_kept_var_idxuint16has_vjp
ValueErrorr   vjpr"   ExportedStartExportedAddSerializationVersionExportedAddFunctionNameExportedAddInTreeExportedAddInAvalsExportedAddOutTreeExportedAddOutAvalsExportedAddNrDevices
nr_devicesExportedAddNrDevicesShortExportedAddInShardingsExportedAddOutShardingsExportedAddPlatformsExportedAddOrderedEffectsExportedAddUnorderedEffectsExportedAddDisabledChecksExportedAddMlirModuleSerialized#ExportedAddCallingConventionVersioncalling_convention_versionExportedAddModuleKeptVarIdxExportedAddUsesGlobalConstantsuses_global_constantsExportedAddVjpExportedEnd)r   r   r   r2   r4   r7   r8   r9   in_shardingsout_shardingsr>   r?   rA   rB   rD   rH   rL   s                    r   r   r   P   s    !!#,,/( #++6'gE(!'3<<8(wG)!"C$8$8, #"C$9$9- % #"5"5/ ' #"7"7 ,/1K1K -s}}) #33C4N4NO11hhs&&bii8 	#];;=  gswwy)a-
@CG$ --gq9%%gx81  (3  (3!!'95""7CNN;''@$$Wl;%%g}=""7I6''A))'3DE''1GH--g7MN11s-- ))'3FG,,s(( 	_w,		 	 	))r    c                    |D cg c]  } || |       }}t        j                  | t        |             t        |      D ]  }| j	                  |        | j                         S c c}w r*   )r"   PyTreeDefStartChildrenVectorlenreversedPrependUOffsetTRelative	EndVector)r   serialize_oneelementseelement_offsetsscs         r   r5   r5      sk    
 9AA1]7A.A/A**7C4HI_% (b##B'(					 Bs   A'c                d   | j                         }| j                         j                  d      }t        j                  t        | j                                     }t        j                  d      }t        t        |      }t        | j                  | j                  |      }t        j                  t        | j                                     }t        | j                  | j                   |      }| j#                         xs | j%                         }	t        | j&                  | j(                  t*              }
t        | j,                  | j.                  t*              }t        | j0                  | j2                  d       }t        | j4                  | j6                  t8              }t        | j:                  | j<                  t8              }t        | j>                  | j@                  tB              }| jE                         jG                         }| jI                         }tK        | jM                         jO                               }| jQ                         }d }| jS                         xrfd}tU        jV                  di d|d|d|d	|d
|d|	d|
d|d|d|d|d|d|d|d|d|d|S )Nutf-8 scopec                $    | j                  d      S )Nrs   )decode)vs    r   r.   z'_deserialize_exported.<locals>.<lambda>   s    ! r    c                    t              S r*   )r%   )_rL   s    r   r.   z'_deserialize_exported.<locals>.<lambda>   s    .s3 r    r2   r4   r7   r8   r9   rU   r;   r<   rB   r>   r?   rA   rD   r_   rH   rb   _get_vjp),SerializationVersionFunctionNamerx   r   tree_structure _deserialize_pytreedef_to_pytreeInTreer   SymbolicScoper   _deserialize_aval_deserialize_tupleInAvalsLengthInAvalsOutTreeOutAvalsLengthOutAvals	NrDevicesNrDevicesShortInShardingsLengthInShardings_deserialize_shardingOutShardingsLengthOutShardingsPlatformsLength	PlatformsOrderedEffectsLengthOrderedEffects_deserialize_effectUnorderedEffectsLengthUnorderedEffectsDisabledChecksLengthDisabledChecks"_deserialize_disabled_safety_checkMlirModuleSerializedAsNumpytobytesCallingConventionVersiontupleModuleKeptVarIdxAsNumpytolistUsesGlobalConstantsVjpr   r#   )r   serialization_versionr2   r4   rv   
deser_avalr7   r8   r9   rU   re   rf   rB   r>   r?   rA   rD   r_   rH   rb   r|   rL   s                        @r   r%   r%      s   224&&w/($$&szz|4' 
"
"2
&%(6*	j( %%&s{{}5( !	#,,
) }}6#"4"4"6*#	S__.C, %	c..0E- !		mm!)
 '	 2 24G/ )	  #"6"68K .		( ::<DDF";;=c99;BBDE113(GGIS3H			 


 
 	

 
 
 $
 &
 
 &
 *
 4
 4
 "<
 .
  2!
" #
 r    c                L    t        fdt         |              D              S )Nc              3  :   K   | ]  }  |              y wr*   rt   ).0ideserialize_oneget_elems     r   	<genexpr>z%_deserialize_tuple.<locals>.<genexpr>   s     Fx{+Fs   )r   range)get_lenr   r   s    ``r   r   r      s    
 
FU795EF	FFr    c                   |j                         }|j                         }d }d }|rt        | t        |      }d }d }|xr |d   }|t        j
                  j                  }	nt|t        j                  u rt        j
                  j                  }	nF|t        u rt        j
                  j                  }	n"|t        u rt        j
                  j                  }	n|t        u rJt        j
                  j                  }	t        |d         t        |      k(  sJ d }
t        | |
|d         }n|t        j                  v rt        j
                  j                   }	t        j                  |   \  }}| j#                  |      } ||d         }t%        |t&        t(        f      st+        dt-        |       d      | j/                  |      }nt+        d| d      t	        j0                  |        t	        j2                  | |	       |rt	        j4                  | |       |rt	        j6                  | |       |t	        j8                  | |       |t	        j:                  | |       t	        j<                  |       S )Nr   r0   c                z    t        |t              st        d| dt        |       d      | j	                  |      S )NzMSerialization is supported only for dictionaries with string keys. Found key z	 of type .)
isinstancestr	TypeErrortyper+   )r   ks     r   serialize_keyz+_serialize_pytreedef.<locals>.serialize_key  sG    3Id1gYa12 	2 !!!$$r    z^The custom serialization function for `node_type` must return a `bytes` object. It returned a r   z<Cannot serialize PyTreeDef containing an unregistered type `a`. Use `export.register_pytree_node_serialization` or `export.register_namedtuple_serialization`.)	node_datachildrenr5   r3   r"   PyTreeDefKindleaftypesNoneTypenoner   listdictri   r   serialization_registrycustomr+   r   bytes	bytearrayrK   r   rC   PyTreeDefStartPyTreeDefAddKindPyTreeDefAddChildrenPyTreeDefAddChildrenNamesPyTreeDefAddCustomNamePyTreeDefAddCustomAuxdataPyTreeDefEnd)r   r-   r   r   children_vector_offsetchildren_names_vector_offsetcustom_namecustom_auxdata	node_typekindr   serialized_nameserialize_auxdataserialized_auxdatas                 r   r3   r3      sT    kkm)ZZ\(!%-%x +.(IaL)$$))DENN"$$))DE$$**DD$$))DD$$))Dy|H---% $4	!$  G222$$++D)0)G)G	)R&O&&&7K*9Q<8(5)*<=4489K4L3MQPQ Q --.@AN
	'[ )6	67 7 W%w-$$W.DE!))'3OP&&w<))'>B		!	!'	**r    c                   | j                         }| j                         }t        |      D cg c]  }t        | j	                  |             }}|t
        j                  j                  k(  ry|t
        j                  j                  k(  ry |t
        j                  j                  k(  rt        |      S |t
        j                  j                  k(  rt        |      S |t
        j                  j                  k(  r`| j                         |k(  sJ t        |      D cg c]"  }| j                  |      j                  d      $ }}t        t        ||            S |t
        j                  j                   k(  r| j#                         j                  d      }|t$        j&                  vrt)        d| d      t$        j&                  |   \  }}}	 || j+                         j-                               }
 |	|
|      S J |       c c}w c c}w )Ng        rs   z@Cannot deserialize a PyTreeDef containing an unregistered type `r   )KindChildrenLengthr   r   Childrenr"   r   r   r   r   r   r   ChildrenNamesLengthChildrenNamesrx   zipr   
CustomNamer   deserialization_registryrK   CustomAuxdataAsNumpyr   )r-   r   nr_childrenr   r   keysr   nodetypedeserialize_auxdata	from_iterauxdatas              r   r   r   <  s    
$  "+ [!
 'qzz!}5(  
[&&+++{((---{((...?{((--->{((---  "k1118=k8JK1AOOA%%g.KDKD(#$${((///lln++G4Og>>>  /0 1889 9
 07/O/OP_/`,H!9!!"8"8":"B"B"DEGWh''$59 Ls   !H'Hboolint8int16int32int64uint8rI   uint32uint64float16float32float64	complex64
complex128c                (    |t         | <   | t        |<   y r*   )_dtype_to_dtype_kind_dtype_kind_to_dtype)r/   r   s     r   register_dtype_kindr     s     $u$tr    c                   t         j                  j                  }|j                  D cg c]  }| j	                  t        |             }}t        j                  | t        |j                               t        |      D ]  }| j                  |        | j                         }t        j                  |        t        j                  | |       t        j                  | |       t        j                  | t        |j                             t        j"                  | t$        |j&                            t        j(                  |       S c c}w r*   )r"   AbstractValueKindshapedArrayshaper+   r   AbstractValueStartShapeVectorri   rj   rk   rl   AbstractValueStartAbstractValueAddKindAbstractValueAddShapeAbstractValueAddDtyper   r/   AbstractValueAddMemorySpace_memory_space_to_enummemory_spaceAbstractValueEnd)r   aval	aval_kinddshape_offsetsshape_vector_offsets         r   r6   r6     s     ++77)9=DA7''A/D-D++GS_EM" 'a##A&'))+  )""7I6##G-@A##G-A$**-MN))'3HIZIZ3[\		%	%g	.. Es   !E
c           	          j                         }|t        j                  j                  k(  rt         j                            }t        j                  dj                   fdt         j                               D              |      } j                         xs t        j                  j                  }t        j                  ||t        |         S J |       )N,c              3  ^   K   | ]$  }j                  |      j                  d        & yw)rs   N)Shaperx   )r   r   r  s     r   r   z$_deserialize_aval.<locals>.<genexpr>  s)      
./DJJqM  )
s   *-ru   )r  )r   r"   r   r   r   Dtyper   symbolic_shapejoinr   ShapeLengthMemorySpaceDevicer	   ShapedArray_memory_space_from_enum)r  rv   r  r/   r   	mem_spaces   `     r   r   r     s    iik)+//;;; .E%% 
389I9I9K3L
 	
 	E   "Dk&=&=&D&DIE57Ny7YZZ)5r    c                   d }|t         j                  j                  }nIt         j                  j                  }|j	                         j                         }| j                  |      }t        j                  |        t        j                  | |       |t        j                  | |       t        j                  |       S r*   )r"   ShardingKindunspecifiedhlo_shardingto_protoSerializeToStringrC   ShardingStartShardingAddKindShardingAddHloShardingProtoShardingEnd)r   sprotor   proto_bytess        r   r:   r:     s     %Y##//D##00D**,002K$$[1EG$gt,
++GU;		 	 	))r    c                j   | j                         }|t        j                  j                  k(  ry |t        j                  j                  k(  rb| j                         j                         }t        j                         }|j                  |       t        j                  j                  |      S J |       r*   )r   r"   r  r  r  HloShardingProtoAsNumpyr   r   
OpShardingParseFromStringHloSharding
from_proto)r  r   	proto_strr   s       r   r   r     s    	
$	[%%111	[%%222))+335I!!#E	)$!!,,U33r    c                   	 |j                         }	 t        |      }t        |      }||k7  s||k7  rt        d| d      t	        |j                         }| j                  |      }t        j                  |        t        j                  | |       t        j                  |       S # t        $ r t        d| d      w xY w# t        $ r t        d| d      w xY w)NzEffect z3 must have a nullary constructor to be serializablez$ must be hashable to be serializablezL must have a nullary class constructor that produces an equal effect object.)
	__class__	ExceptionNotImplementedErrorhashr   r+   r"   EffectStartEffectAddTypeNamerd   )r   effeff_replicahash_effhash_eff_replicaeffect_type_nameeffect_type_name_offsets          r   r=   r=     s   --/K
CyHK(
 	K8'77
u    '#001AB'")@A		 	 	))) 
 

#IJ  
 

#:; s   B( C (CCc                    | j                         j                  d      }t        j                  j                  D ]  }t        |      |k(  s	  |       c S  t        d|       #  t        d| d      xY w)Nrs   zdeserializing effect z/ that does not have a nullary class constructorzcannot deserialize effect type )TypeNamerx   r   lowerable_effects_effect_typesr   r,  )r0  r4  existing_effect_types      r   r   r     s    \\^**73%77EE 	

 $44
#%%	
 	'(8'9:	 
!#$4#5 6( (
 	
s   A%%A6c                   |j                         }d }|,t        j                  j                  }| j	                  |      }nJ|t
        j                  j                         k(  rt        j                  j                  }nt        d|       t        j                  |        t        j                  | |       |t        j                  | |       t        j                  |       S )Nz!serializing DisabledSafetyCheck: )is_custom_callr"   DisabledSafetyCheckKindcustom_callr+   r   DisabledSafetyCheckplatformr,  DisabledSafetyCheckStartDisabledSafetyCheckAddKind&DisabledSafetyCheckAddCustomCallTargetDisabledSafetyCheckEnd)r   checkcustom_call_target_strcustom_call_targetr   s        r   r@   r@      s     !//1'..::D --.DE++4466..77D
 A%I
JJ&&w/(($7#66# 
	+	+G	44r    c                   | j                         }|t        j                  j                  k(  r<t        j
                  j                  | j                         j                  d            S |t        j                  j                  k(  rt        j
                  j                         S |t        j                  j                  k(  rt        j
                  j                  d      S J |       )Nrs   zno op)
r   r"   r=  r>  r   r?  CustomCallTargetrx   r@  shape_assertions)rq   r   s     r   r   r     s     
$	[00<<<&&22
$$W-  
[00999&&//11	[00AAA &&227;;r    )r   )r   _export.Exportedr   intreturnr   )r&   r   rM  rK  )r   flatbuffers.Builderr   rK  r   rL  rM  rL  )r   rN  rm   z'Callable[[flatbuffers.Builder, T], int]rn   zSequence[T]rM  rL  )r   zser_flatbuf.ExportedrM  rK  )r   zCallable[[], int]r   zCallable[[int], SerT]r   zCallable[[SerT], T]rM  ztuple[T, ...])r   rN  r-   ztree_util.PyTreeDefrM  rL  )r-   zser_flatbuf.PyTreeDef)r/   r   r   rL  )r   rN  r  core.ShapedArrayrM  rL  )r  zser_flatbuf.AbstractValuerM  rO  )r   rN  r  _export.HloSharding | NonerM  rL  )r  zser_flatbuf.ShardingrM  rP  )r   rN  r0  core.EffectrM  rL  )r0  zser_flatbuf.EffectrM  rQ  )r   rN  rE  _export.DisabledSafetyCheckrM  rL  )rq   zser_flatbuf.DisabledSafetyCheckrM  rR  )b
__future__r   r   collections.abcr   r   	functoolsr   typingr   r   r   ImportErrorro   jax._srcr	   r
   r   r   jax._src.exportr   r"   r   r   jax._src.libr   numpyrF   r   r   _SERIALIZATION_VERSIONr   r'   r   r5   r%   r   r3   r   r/   DTyper   i8i16i32i64ui8ui16ui32ui64float0f0f16f32f64c64c128_bfloat16_dtypebf16_int4_dtypei4_uint4_dtypeui4_float8_e4m3b11fnuz_dtypef8_e4m3b11fnuz_float8_e4m3fn_dtype	f8_e4m3fn_float8_e4m3fnuz_dtypef8_e4m3fnuz_float8_e5m2_dtypef8_e5m2_float8_e5m2fnuz_dtypef8_e5m2fnuz_float8_e3m4_dtypef8_e3m4_float8_e4m3_dtypef8_e4m3_float8_e8m0fnu_dtype
f8_e8m0fnu_float4_e2m1fn_dtype	f4_e2m1fnr   itemsr   r   r  r  Hostr   r  r6   r   r:   r   r=   r   r@   r   )r/   r   r   ry   s   0000r   <module>r     s  " #  .       B # & # CLv   $H* H*'7H*DGH*H*V	 	:	 	 			HVGG#G )G 	G?+ ?+%8?+?+D!HBHHVk'',,BHHVk''** BHHW{((,, BHHW{((,,	
 BHHW{((,, BHHW{((,, BHHX)).. BHHX)).. BHHX)).. MM;$$'' BHHY**.. BHHY**.. BHHY**.. BHH[;,,00 BHH\K--22  K--22!" )),,#$ **..
$$k&7&7&F&F
!2!2!<!<
!!;#4#4#@#@
{0088
!!;#4#4#@#@
{0088
{0088
  +"3"3">">
!2!2!<!<7 > $8#=#=#?E4D%K 
% 	[44;;;2277+1155 
 -B,G,G,IJDAq1a4J / /(8//$ 0"* *%?**$*4$5 5)D55,' y  K	H Ks#   U9 V/V9V>	VV