
    vh                        d Z ddlmZ ddlZddlZddlZddlmZ ddl	m
Z
 ddZ	 	 d	 	 	 ddZ G d d	ej                        Z G d
 dej                        Zy)z*Pickling support for precompiled binaries.    )annotationsN)
xla_client)Sequencec                ~   t        | j                  dd      }|t        d      t        j                  j                  | j                        \  }}t        j                         5 }t        |      j                  ||| j                  f       |j                         || j                  fcddd       S # 1 sw Y   yxY w)zSerializes a compiled binary.

  Because pytrees are not serializable, they are returned so that
  the user can handle them properly.
  _unloaded_executableNz*Compilation does not support serialization)getattr_executable
ValueErrorjax	tree_utiltree_flatten	args_infoioBytesIO_JaxPjrtPicklerdump
_no_kwargsgetvalueout_tree)compiledunloaded_executableargs_info_flatin_treefiles        `/opt/face_recognition/venv/lib/python3.12/site-packages/jax/experimental/serialize_executable.py	serializer      s       4 4 6> 
A
BBMM66x7I7IJ.'	zz| 7tD	nh.A.ABD==?GX%6%667 7 7s   %AB33B<c                   |t        |t              r"t        j                  |      d   j                  }||j                         }nQ|d   j                  }||k7  r=t        d|j                  |j                  f d|j                  |j                  f       t        t        j                  |       ||      j                         \  }}}|j                  |      }	|j                         }
t        j                  j                  |
|	||      S )z>Constructs a jax.stages.Compiled from a serialized executable.r   OExecution devices belong to a client other than `backend`. Got backend client:  and execution devices client: )	no_kwargs)
isinstancestrr   devicesclientr
   platformplatform_version_JaxPjrtUnpicklerr   r   load	unflattenstagesCompiled)
serializedr   r   backendexecution_devicesdevice_backendr   r   r    r   loaded_compiled_objs              r   deserialize_and_loadr1   ,   s    _
7C0kk'"1%,,G)&q)00N %..0H0HIJ K'%%~'F'FGHJK K "	zz*w(9;;?46 /)+002			9h) 
 
E E    c                  F    e Zd Zej                  fZej                  fZd Zy)r   c                T   t        |t        j                        rd|j                  j	                  |      fS t        |t        j
                  j                        rd|j                         fS t        || j                        rd|j                  fS t        || j                        ryy )Nexecdevice)r$   )r!   xcLoadedExecutabler$   serialize_executable_xla
Executabler   device_typesidclient_types)selfobjs     r   persistent_idz_JaxPjrtPickler.persistent_idQ   s    #r**+cjj55c:;;#rww))*cmmo&&#t(()#t(() *r2   N)	__name__
__module____qualname__r7   Devicer<   Clientr>   rA    r2   r   r   r   M   s    )),)),r2   r   c                  &     e Zd Zd fd	Zd Z xZS )r'   c                   t         |   |       || _        ||j                         }nQ|d   j                  }||k7  r=t        d|j                  |j                  f d|j                  |j                  f       |D ci c]  }|j                  | c}| _	        t        j                  t        |            | _        y c c}w )Nr   r   r   )super__init__r-   r#   r$   r
   r%   r&   r=   devices_by_idr7   
DeviceListtupler.   )r?   r   r-   r.   r/   d	__class__s         r   rK   z_JaxPjrtUnpickler.__init__^   s    	GTDL !//+(+22n	7	" ' 0 0'2J2JKL M-'')H)HIJLM 	M
 ,==a!$$'=D]]51B+CDD >s    C c                    |d   dk(  r*| j                   j                  |d   | j                        S |d   dk(  r| j                  |d      S |d   dk(  r| j                   S t        j
                  )Nr   r5      )executable_devicesr6   r$   )r-   deserialize_executabler.   rL   pickleUnpicklingError)r?   pids     r   persistent_loadz!_JaxPjrtUnpickler.persistent_loadn   s|    
1v\\00
a&T%;%; 1 = =
1vA''
1v\\

 
  r2   )N)rB   rC   rD   rK   rX   __classcell__)rP   s   @r   r'   r'   \   s    E !r2   r'   )r   zjax.stages.Compiled)NN)r-   zstr | xc.Client | Noner.   zSequence[xc.Device] | None)__doc__
__future__r   rU   r   r   jax._src.libr   r7   typingr   r   r1   Picklerr   	Unpicklerr'   rG   r2   r   <module>r`      sj    1 "  	 
 ) 7* <@IM	E #9E -G	EBfnn !(( !r2   