a
    h|                     @   s   d dl 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G dd	 d	eZdddZdS )    )
_compat_pickle_extension_registry_getattribute_PicklerEXT1EXT2EXT4GLOBALPicklingErrorSTACK_GLOBAL)pack)FunctionType   )ImporterObjMismatchErrorObjNotFoundErrorsys_importerc                       s(   e Zd Z fddZ fddZ  ZS )_PyTorchLegacyPicklerc                    s   t  j|i | d | _d S N)super__init___persistent_id)selfargskwargs	__class__ L/var/www/auris/lib/python3.9/site-packages/torch/package/_package_pickler.pyr      s    z_PyTorchLegacyPickler.__init__c                    s    | j d u rt |S |  |S r   )r   r   persistent_id)r   objr   r   r   r      s    
z#_PyTorchLegacyPickler.persistent_id)__name__
__module____qualname__r   r   __classcell__r   r   r   r   r      s   r   c                       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                    s4   || _ t j|i | tj | _tj| jt< d S r   )	r&   r   r   r   dispatchcopyr%   save_globalr   )r   r&   r   r   r   r   r   r   &   s    zPackagePickler.__init__Nc                 C   sP  | j }| j}z| j||\}}W nB ttfyd } z&td| dt| |W Y d }~n
d }~0 0 | j|}t	||\}}	| j
dkrt||f}
|
r|
dksJ |
dkr|ttd|
  n.|
dkr|ttd|
  n|ttd	|
  d S |d
d }|	|u r|}| j
dkr>| | | | |t n|	|urZ| t|	|f n| j
dkr|tt|d d t|d d  n| jrtj}tj}||f|v r|||f \}}n||v r|| }z(|tt|d d t|d d  W nF ty@ } z,td| d
| d| j
d|W Y d }~n
d }~0 0 | | d S )NzCan't pickle z:    r      z<Bi  z<Hz<i.      zutf-8   
asciiz can't pickle global identifier 'z' using pickle protocol d)writememor&   get_namer   r   r
   strimport_moduler   protor   getr   r   r   r   
rpartitionsaver   save_reducegetattrr	   bytesfix_importsr   REVERSE_NAME_MAPPINGREVERSE_IMPORT_MAPPINGUnicodeEncodeErrormemoize)r   r    namer2   r3   module_nameerrmodule_parentcodelastnamer_name_mappingr_import_mappingexcr   r   r   r)   3   s    0





zPackagePickler.save_global)N)r!   r"   r#   __doc__r   r   r)   r$   r   r   r   r   r%      s   r%   r-   c                 C   s&   |t u rt| |dS t|| |dS d S )N)protocol)r   r   r%   )Zdata_bufr&   rO   r   r   r   create_pickler{   s    rP   N)r-   )pickler   r   r   r   r   r   r   r	   r
   r   structr   typesr   r&   r   r   r   r   r   r%   rP   r   r   r   r   <module>   s   0\