U
    9%e                     @   s   d Z ddlmZmZmZmZmZmZmZm	Z	m
Z
mZmZ ddlmZ ddlmZ ddlmZmZmZmZ G dd deZdd
dZdS )zisort:skip_file    )_compat_pickle_extension_registry_getattribute_PicklerEXT1EXT2EXT4GLOBALPicklerPicklingErrorSTACK_GLOBAL)pack)FunctionType   )ImporterObjMismatchErrorObjNotFoundErrorsys_importerc                       s0   e Zd ZdZed fddZdddZ  ZS )	PackagePicklerzPackage-aware pickler.

    This behaves the same as a normal pickler, except it uses an `Importer`
    to find objects and modules to save.
    )importerc                    s0   || _ t j|| tj | _tj| jt< d S )N)	r   super__init__r   dispatchcopyr   save_globalr   )selfr   argskwargs	__class__ ]/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/torch/package/_package_pickler.pyr      s    zPackagePickler.__init__Nc              
   C   s2  | j }| j}z| j||\}}W n@ ttfk
rb } ztd| dt| d W 5 d }~X Y nX | j|}t	||\}}	| j
dkrt||f}
|
r|
dkst|
dkr|ttd|
  n.|
dkr|ttd|
  n|ttd	|
  d S |d
d }|	|kr|}| j
dkr:| | | | |t n|	|k	rV| t|	|f n| j
dkr|tt|d d t|d d  n| jrtj}tj}||f|kr|||f \}}n||kr|| }z(|tt|d d t|d d  W n, tk
r"   td||| j
f d Y nX | | d S )NzCan't pickle z:    r      z<Bi  z<Hz<i.      zutf-8   
asciiz?can't pickle global identifier '%s.%s' using pickle protocol %i)writememor   get_namer   r   r   strimport_moduler   protor   getAssertionErrorr   r   r   r   
rpartitionsaver   save_reducegetattrr	   bytesfix_importsr   REVERSE_NAME_MAPPINGREVERSE_IMPORT_MAPPINGUnicodeEncodeErrormemoize)r   objnamer)   r*   module_nameerrmodule_parentcodelastnamer_name_mappingr_import_mappingr    r    r!   r   )   s    ,







zPackagePickler.save_global)N)__name__
__module____qualname____doc__r   r   r   __classcell__r    r    r   r!   r      s   r   r%   c                 C   s&   |t krt| |dS t|| |dS d S )N)protocol)r   r
   r   )Zdata_bufr   rK   r    r    r!   create_picklerp   s    rL   N)r%   )rI   pickler   r   r   r   r   r   r   r	   r
   r   r   structr   typesr   r   r   r   r   r   r   rL   r    r    r    r!   <module>   s   4[