
    Vpf                        d Z ddlmZ ddlZddlZddlmZmZ ddl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dS )z*Pickling support for precompiled binaries.    )annotationsN)OptionalUnion)
xla_clientcompiledjax.stages.Compiledc                   t          | j        dd          }|t          d          t          j                            | j                  \  }}t          j                    5 }t          |          
                    ||| j        f           |                                || j        fcddd           S # 1 swxY w Y   dS )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)r   unloaded_executableargs_info_flatin_treefiles        e/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/jax/experimental/serialize_executable.py	serializer      s      4 6> > 
A
B
BBM66x7IJJ.'	z|| 7tD	nh.ABD D D==??GX%667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   "AB55B9<B9backendstr | xc.Client | Nonec                v   |t          |t                    rt          j        |          d         j        }t          t          j        |           |                                          \  }}}|	                    |          }|                                }t          j
                            ||||          S )z>Constructs a jax.stages.Compiled from a serialized executable.Nr   )	no_kwargs)
isinstancestrr   devicesclient_JaxPjrtUnpicklerr   r   load	unflattenstagesCompiled)	
serializedr   r   r   r   r   r"   r   loaded_compiled_objs	            r   deserialize_and_loadr.   ,   s     _
7C00_k'""1%,G ""*Z"8"8'BBGGII//)+0022			9h) 
 
E 
E E    c                  4    e Zd Zej        fZej        fZd ZdS )r   c                F   t          |t          j                  rd|j                            |          fS t          |t          j        j                  rd|                                fS t          || j                  r	d|j	        fS t          || j
                  rdS d S )Nexecdevice)r&   )r#   xcLoadedExecutabler&   serialize_executable_xla
Executabler   device_typesidclient_types)selfobjs     r   persistent_idz_JaxPjrtPickler.persistent_idD   s    #r*++ <cj55c::;;#rw)** 'cmmoo&&#t())  #t()) [ r/   N)	__name__
__module____qualname__r4   Devicer9   Clientr;   r>    r/   r   r   r   @   s5        ),),    r/   r   c                  $     e Zd Z fdZd Z xZS )r'   c                    t                                          |           || _        d |                                D             | _        d S )Nc                    i | ]
}|j         |S rD   )r:   ).0ds     r   
<dictcomp>z._JaxPjrtUnpickler.__init__.<locals>.<dictcomp>T   s    ===a!$===r/   )super__init__r   r%   devices_by_id)r<   r   r   	__class__s      r   rL   z_JaxPjrtUnpickler.__init__Q   sH    	GGTDL==7??+<+<===Dr/   c                    |d         dk    r | j                             |d                   S |d         dk    r| j        |d                  S |d         dk    r| j         S t          j        )Nr   r2      r3   r&   )r   deserialize_executablerM   pickleUnpicklingError)r<   pids     r   persistent_loadz!_JaxPjrtUnpickler.persistent_loadV   sl    
1v\00Q888
1vA''
1v\

  r/   )r?   r@   rA   rL   rU   __classcell__)rN   s   @r   r'   r'   O   sG        > > > > >
! ! ! ! ! ! !r/   r'   )r   r   )N)r   r    )__doc__
__future__r   rR   r   typingr   r   r   jax._src.libr   r4   r   r.   Picklerr   	Unpicklerr'   rD   r/   r   <module>r]      s    1 0 " " " " " "  				 " " " " " " " " 



 ) ) ) ) ) )7 7 7 7* <@E E E E E(    fn   ! ! ! ! !( ! ! ! ! !r/   