o
    h                     @   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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 N)	r   super__init__r   dispatchcopyr   save_globalr   )selfr   argskwargs	__class__ T/var/www/html/ai/venv/lib/python3.10/site-packages/torch/package/_package_pickler.pyr      s   zPackagePickler.__init__Nc              
   C   s  | j }| j}z| j||\}}W n ttfy, } ztd| dt| d 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 nm|	|ur| t|	|f n`| j
dkr|tt|d d t|d d  nH| jrtj}tj}||f|v r|||f \}}n||v r|| }z|tt|d d t|d d  W n ty   td||| j
f d w | | 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   getr   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_globalr   )__name__
__module____qualname____doc__r   r   r   __classcell__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   )data_bufr   rK   r!   r!   r"   create_picklerp   s   rM   N)r&   )rI   pickler   r   r   r   r   r   r   r	   r
   r   r   structr   typesr   r   r   r   r   r   r   rM   r!   r!   r!   r"   <module>   s    4[