
    VpfMB                       d dl mZ d dlmZmZ d dlmZ d dlmZ 	 d dl	Z	n# e
$ rZ e
d          edZ[ww xY w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dVdWdZdXdZdYdZdZd"Z d[d$Z!d\d,Z"d]d/Z#d^d1Z$i  ej%        d2          ej&        j'         ej%        d3          ej&        j(         ej%        d4          ej&        j)         ej%        d5          ej&        j*         ej%        d6          ej&        j+         ej%        d7          ej&        j,         ej%        d8          ej&        j-         ej%        d9          ej&        j.         ej%        d:          ej&        j/        ej0        ej&        j1         ej%        d;          ej&        j2         ej%        d<          ej&        j3         ej%        d=          ej&        j4         ej%        d>          ej&        j5         ej%        d?          ej&        j6        ej7        ej&        j8        ej9        ej&        j:        ej;        ej&        j<        ej=        ej&        j>        ej?        ej&        j@        ejA        ej&        jB        ejC        ej&        jD        ejE        ej&        jF        iZGd@ eGH                                D             ZId_dCZJd`dEZKdadHZLdbdJZMdcdMZNdddOZOdedRZPdfdUZQdS )g    )annotations)CallableSequence)partial)TypeVarNzCPlease install 'flatbuffers' in order to use Exported serialization)core)dtypes)effects)	tree_util)serialization_generated)_export)
shape_poly)
xla_clientTSerT   exp_export.Exported	vjp_orderintreturn	bytearrayc                    t          j        d          }t          || |          }|                    |           |                                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)r   r   builderexporteds       ]/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/jax/_src/export/serialization.py	serializer"   2   sG     &&' #y99(	..			    serc                ^    t           j                            |           }t          |          S )zDeserializes an Exported.)ser_flatbufExportedGetRootAsExported_deserialize_exported)r$   r   s     r!   deserializer*   B   s&    ..s33#	s	#	##r#   r   flatbuffers.Builderc                   |                      |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                  }|                     t+          j        |j        t*          j                            }d }|dk    rI|                                st5          d          t7          | |                                |dz
            }t;          j        |            t;          j        | t@                     t;          j!        | |           t;          j"        | |           t;          j#        | |           t;          j$        | |           t;          j%        | |           t;          j&        | |j'                   t;          j(        | |           t;          j)        | |	           t;          j*        | |           t;          j+        | |
           t;          j,        | |           t;          j-        | |           t;          j.        | |           t;          j/        | |j0                   t;          j1        | |           t;          j2        | |j3                   |t;          j4        | |           t;          j5        |           S )Nc                ,    |                      |          S NCreateString)bps     r!   <lambda>z%_serialize_exported.<locals>.<lambda>a   s    ANN1-- r#   )dtyper   zIserialization of an Exported that does not have vjps of high-enough order   )6r0   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_SERIALIZATION_VERSIONExportedAddFunctionNameExportedAddInTreeExportedAddInAvalsExportedAddOutTreeExportedAddOutAvalsExportedAddNrDevices
nr_devicesExportedAddInShardingsExportedAddOutShardingsExportedAddPlatformsExportedAddOrderedEffectsExportedAddUnorderedEffectsExportedAddDisabledChecksExportedAddMlirModuleSerialized#ExportedAddCallingConventionVersioncalling_convention_versionExportedAddModuleKeptVarIdxExportedAddUsesGlobalConstantsuses_global_constantsExportedAddVjpExportedEnd)r   r   r   r6   r8   r;   r<   r=   in_shardingsout_shardingsrB   rC   rE   rF   rH   rL   rP   s                    r!   r   r   H   sC    !!#,//( #+66'gEE(!'3<88(wGG)!"C$8 , #"C$9 - % #"5 / ' #"7  ,/1K  --s} ) #33C4NOO11hs&bi888  	#]];;==    gswwyy)a-
@
@CG$$$-g7MNNN%gx888111 (333 (333!'9555"7CN;;;$Wl;;;%g}==="7I666'AAA)'3DEEE'1GHHH-g7MNNN1s-   )'3FGGG,s(   	_w,,,		 	)	))r#   serialize_one'Callable[[flatbuffers.Builder, T], int]elementsSequence[T]c                      fd|D             }t          j         t          |                     t          |          D ]}                     |                                            S )Nc                (    g | ]} |          S  rq   ).0er   rk   s     r!   
<listcomp>z$_serialize_array.<locals>.<listcomp>   s%    AAA1]]7A..AAAr#   )r&   PyTreeDefStartChildrenVectorlenreversedPrependUOffsetTRelative	EndVector)r   rk   rm   element_offsetsscs   ``   r!   r9   r9      s~    
 BAAAAAAA/*7C4H4HIII_%% ( (b##B''''					r#   ser_flatbuf.Exportedc                   |                                  }|t          k    rt          d|           |                                                     d          }t          j        t          |                                                     \  }}t          j
        d          }t          t          |          }t          | j        | j        |          }t          j        t          |                                                     \  }}t          | j        | j        |          }	|                                 }
t          | j        | j        t,                    }t          | j        | j        t,                    }t          | j        | j        d           }t          | j        | j        t:                    }t          | j        | j        t:                    }t          | j         | j!        tD                    }| #                                $                                }| %                                }tM          | '                                (                                          }| )                                }d }| *                                xrfd}tW          j,        di d|d|d	|d
|d|	d|
d|d|d|d|d|d|d|d|d|d|d|S )Nz deserialize unsupported version utf-8rq   scopec                ,    |                      d          S Nr~   )decode)vs    r!   r3   z'_deserialize_exported.<locals>.<lambda>   s    !! r#   c                "    t                    S r.   )r)   )_rP   s    r!   r3   z'_deserialize_exported.<locals>.<lambda>   s    .s33 r#   r6   r8   r;   r<   r=   rZ   r?   r@   rF   rB   rC   rE   rH   rc   rL   rf   _get_vjp)-SerializationVersionrS   NotImplementedErrorFunctionNamer   r   tree_flatten _deserialize_pytreedef_to_pytreeInTreer   SymbolicScoper   _deserialize_aval_deserialize_tupleInAvalsLengthInAvalsOutTreeOutAvalsLengthOutAvals	NrDevices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_versionr6   r   r8   r   
deser_avalr;   r<   r=   rZ   ri   rj   rF   rB   rC   rE   rH   rc   rL   rf   r   rP   s                         @r!   r)   r)      sW   2244444
B+@BB   &&w//(%&szz||44 *!W 
"2
&
&%(666*	j ( &&s{{}}55 +!X !	#,
 ) }}*#	S_.C , %	c.0E - !		m!! )
 '	 24G / )	 #"68K  .		(  ::<<DDFF";;==c99;;BBDDEE1133(GGIIS 43333H		 
 
 
x
g
 x
 x	

 	
 
 $|
 &
 	
 &o
 *)
 43
 43
 "<!;
 .-
  21!
" x#
 r#   get_lenCallable[[], int]get_elemCallable[[int], SerT]deserialize_oneCallable[[SerT], T]tuple[T, ...]c                h    t          fdt           |                       D                       S )Nc              3  @   K   | ]}  |                    V  d S r.   rq   )rr   ir   r   s     r!   	<genexpr>z%_deserialize_tuple.<locals>.<genexpr>   s5      FFxx{{++FFFFFFr#   )r   range)r   r   r   s    ``r!   r   r      s:    
 
FFFFFU77995E5EFFF	F	FFr#   r2   tree_util.PyTreeDefc                D   |                                 }|                                }d }d }|rt          | t          |          }|t          j        j        }n|d         t          d           u rt          j        j        }n|d         t          u rt          j        j	        }n|d         t          u rt          j        j
        }ns|d         t          u rRt          j        j        }t          |d                   t          |          k    sJ t          | d |d                   }nt          d|           t	          j        |            t	          j        | |           |rt	          j        | |           |rt	          j        | |           t	          j        |           S )Nr   r5   c                ,    |                      |          S r.   r/   )r1   ss     r!   r3   z&_serialize_pytreedef.<locals>.<lambda>  s    annQ// r#   zserializing PyTreeDef )	node_datachildrenr9   r7   r&   PyTreeDefKindleaftypenoner   listdictrv   r   PyTreeDefStartPyTreeDefAddKindPyTreeDefAddChildrenPyTreeDefAddChildrenNamesPyTreeDefEnd)r   r2   r   r   children_vector_offsetchildren_names_vector_offsetkinds          r!   r7   r7      s    kkmm)ZZ\\(!% -%x  $)DD|tDzz!!$)DD|u$*DD|t$)DD|t$)Dy|H----#3//1$ $   ByBB
C
CCW%%%w--- F$W.DEEE! Q)'3OPPP		!'	*	**r#   ser_flatbuf.PyTreeDefc                X                                      }                                 } fdt          |          D             }|t          j        j        k    rdS |t          j        j        k    rd S |t          j        j        k    rt          |          S |t          j        j        k    rt          |          S |t          j        j	        k    rR 
                                |k    sJ  fdt          |          D             }t          t          ||                    S J |            )Nc                T    g | ]$}t                              |                    %S rq   )r   Childrenrr   r   r2   s     r!   rt   z4_deserialize_pytreedef_to_pytree.<locals>.<listcomp>  s;       
 'qzz!}}55  r#   g        c                `    g | ]*}                     |                              d           +S )r~   )ChildrenNamesr   r   s     r!   rt   z4_deserialize_pytreedef_to_pytree.<locals>.<listcomp>'  s3    KKK1AOOA%%g..KKKr#   )KindChildrenLengthr   r&   r   r   r   r   r   r   ChildrenNamesLengthzip)r2   r   nr_childrenr   keyss   `    r!   r   r     s0    
$  ""+   [!!  ( 
[&+++3{(---4{(...??{(--->>{(---  ""k1111KKKKk8J8JKKKDD(##$$$$r#   boolint8int16int32int64uint8rM   uint32uint64float16float32float64	complex64
complex128c                    i | ]\  }}||	S rq   rq   )rr   r4   r   s      r!   
<dictcomp>r   H  s+       E4D%  r#   avalcore.ShapedArrayc                    t           j        j        } fd|j        D             }t          j         t          |j                             t          |          D ]}                     |                                            }t          j	                    t          j
         |           t          j         |           t          j         t          |j                            t          j                   S )Nc                T    g | ]$}                     t          |                    %S rq   )r0   str)rr   dr   s     r!   rt   z#_serialize_aval.<locals>.<listcomp>Q  s-    DDDA7''A//DDDr#   )r&   AbstractValueKindshapedArrayshapeAbstractValueStartShapeVectorrv   rw   rx   ry   AbstractValueStartAbstractValueAddKindAbstractValueAddShapeAbstractValueAddDtype_dtype_to_dtype_kindr4   AbstractValueEnd)r   r   	aval_kindshape_offsetsr   shape_vector_offsets   `     r!   r:   r:   M  s     +7)DDDDDDD-+GS__EEEM"" ' 'a##A&&&&))++ )))"7I666#G-@AAA#G-A$*-MNNN		%g	.	..r#   ser_flatbuf.AbstractValuec           	     z                                      }|t          j        j        k    rt                                                    }t          j        d                     fdt           
                                          D                       |          }t          j        ||          S J |            )N,c              3  h   K   | ],}                     |                              d           V  -dS )r~   N)Shaper   )rr   r   r   s     r!   r   z$_deserialize_aval.<locals>.<genexpr>d  sL       
 
./DJJqMM  ))
 
 
 
 
 
r#   r   )r   r&   r   r   _dtype_kind_to_dtypeDtyper   symbolic_shapejoinr   ShapeLengthr   ShapedArray)r   r   r   r4   r   s   `    r!   r   r   ^  s    iikk)+/;;; .E% 
 
 
 
389I9I9K9K3L3L
 
 
 	
 	
 	  E E5))))r#   r   _export.HloSharding | Nonec                n   d }|t           j        j        }nLt           j        j        }|                                                                }|                     |          }t          j        |            t          j        | |           |t          j	        | |           t          j
        |           S r.   )r&   ShardingKindunspecifiedhlo_shardingto_protoSerializeToStringrG   ShardingStartShardingAddKindShardingAddHloShardingProtoShardingEnd)r   r   protor   proto_bytess        r!   r>   r>   n  s     %Y#/DD#0D**,,0022K$$[11EG$$$gt,,,
+GU;;;		 	)	))r#   ser_flatbuf.Shardingc                p   |                                  }|t          j        j        k    rd S |t          j        j        k    rm|                                                                 }t          j                    }|	                    |           t          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4	[%222))++3355I!##E	)$$$!,,U333r#   effcore.Effectc                   	 |                                 }n!# t          $ r t          d| d          w xY w	 t          |          }t          |          }n!# t          $ r t          d| d          w xY w||k    s||k    rt          d| d          t	          |j                   }|                     |          }t          j        |            t          j        | |           t          j	        |           S )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__	Exceptionr   hashr   r0   r&   EffectStartEffectAddTypeNamerh   )r   r  eff_replicahash_effhash_eff_replicaeffect_type_nameeffect_type_name_offsets          r!   rA   rA     sJ   --//KK	   
J#JJJ  CyyHK((	   
;#;;;   	K8'777
      ''#001ABB'""")@AAA		 	)	))s    5A A6ser_flatbuf.Effectc                   |                                                      d          }t          j        j        D ]:}t          |          |k    r%	  |            c S #  t          d| d          xY w;t          d|           )Nr~   zdeserializing effect z/ that does not have a nullary class constructorzcannot deserialize effect type )TypeNamer   r
   lowerable_effects_effect_typesr   r   )r  r*  existing_effect_types      r!   r   r     s    \\^^**733%7E 	
 	

  $444
##%%%%%
!($4 ( ( (
 
 	
 5 	:(8::	 	 s   	AA0check_export.DisabledSafetyCheckc                   |                                 }d }|'t          j        j        }|                     |          }nz|t
          j                                        k    rt          j        j        }nF|t
          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_callr0   r   DisabledSafetyCheckplatformshape_assertionsr   DisabledSafetyCheckStartDisabledSafetyCheckAddKind&DisabledSafetyCheckAddCustomCallTargetDisabledSafetyCheckEnd)r   r2  custom_call_target_strcustom_call_targetr   s        r!   rD   rD     s    !//11'.:D --.DEE+446666.7DD+<<>>>>.?DD
I%II
J
JJ&w///($777#6#   
	+G	4	44r#   r{   ser_flatbuf.DisabledSafetyCheckc                   |                                  }|t          j        j        k    rDt          j                            |                                                     d                    S |t          j        j        k    rt          j                                        S |t          j        j	        k    rt          j        	                                S J |            r   )
r   r&   r6  r7  r   r8  CustomCallTargetr   r9  r:  )r{   r   s     r!   r   r     s     
$	[0<<<&22
$$W--   
[0999&//111	[0AAA&77999r#   )r   )r   r   r   r   r   r   )r$   r   r   r   )r   r+   r   r   r   r   r   r   )r   r+   rk   rl   rm   rn   r   r   )r   r|   r   r   )r   r   r   r   r   r   r   r   )r   r+   r2   r   r   r   )r2   r   )r   r+   r   r   r   r   )r   r   r   r   )r   r+   r   r
  r   r   )r   r  r   r
  )r   r+   r  r   r   r   )r  r,  r   r   )r   r+   r2  r3  r   r   )r{   rA  r   r3  )R
__future__r   collections.abcr   r   	functoolsr   typingr   r   ImportErrorrs   jax._srcr   r	   r
   r   jax._src.exportr   r&   r   r   jax._src.libr   numpyrJ   r   r   rS   r"   r*   r   r9   r)   r   r7   r   r4   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_e5m2fnuzr   itemsr  r:   r   r>   r   rA   r   rD   r   rq   r#   r!   <module>rn     s1  " # " " " " " . . . . . . . .               K	 	
                         B B B B B B # # # # # # & & & & & & # # # # # #    GCLLwv       $ $ $ $B* B* B* B*J	 	 	 	I I I IXG G G G$+ $+ $+ $+N   2BHVk',BHVk'* BHW{(, BHW{(,	
 BHW{(, BHW{(, BHX). BHX). BHX). M;$' BHY*. BHY*. BHY*. BH[;,0 BH\K-2  K-2!" ),#$ *.
$k&7&F
!2!<
!;#4#@
{08
!;#4#@/  6 #7#=#=#?#?   
/ / / /"    * * * *$   * * * *4   $5 5 5 50     s   ! 727