o
    闦i|                     @   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__ \/home/ubuntu/transcripts/venv/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 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   r    namer1   r2   module_nameerrmodule_parentcodelastnamer_name_mappingr_import_mappingr   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%   )data_bufr&   rM   r   r   r   create_pickler{   s   rO   N)r-   )pickler   r   r   r   r   r   r   r	   r
   r   structr   typesr   r&   r   r   r   r   r   r%   rO   r   r   r   r   <module>   s   0\