o
    wZh|                     @   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__ M/var/www/auris/lib/python3.10/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def 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   s,  | j }| j}z| j||\}}W n ttfy, } ztd| dt| |d }~ww | j|}t	||\}}	| j
dkrwt||f}
|
rw|
dksNJ |
dkr]|ttd|
  d S |
dkrl|ttd|
  d S |ttd	|
  d S |d
d }|	|u r|}| j
dkr| | | | |t nw|	|ur| t|	|f nj| j
dkr|tt|d d t|d d  nR| jrtj}tj}||f|v r|||f \}}n||v r|| }z|tt|d d t|d d  W n ty } ztd| d
| d| j
d|d }~ww | | 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   





zPackagePickler.save_globalr   )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 )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\