o
    ki                     @   s   d dl Z 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 )    N)
_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__ h/var/www/addictedbytheproject.nl/epg/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 }~ww | j|}t	j
dkr[|d}d|v rHtd|t|dkrQ|}	nt||d d }	nt||\}
}	| jd	krt||f}|r|d
kr{td| |dkr|ttd|  d S |dkr|ttd|  d S |ttd|  d S |dd	 }|	|u r|}| jdkr| | | | |t nz|	|ur| t|	|f nm| jdkr|tt|d d t|d d  nU| jrt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: )      .z<locals>zCan't pickle local object r      r   z&expected positive extension code, got    z<Bi  z<Hz<i   r*   zutf-8   
asciiz can't pickle global identifier 'z' using pickle protocol d)#writememor&   get_namer   r   r
   strimport_modulesysversion_infosplitlenr   protor   getAssertionErrorr   r   r   r   
rpartitionsaver   save_reducegetattrr	   bytesfix_importsr   REVERSE_NAME_MAPPINGREVERSE_IMPORT_MAPPINGUnicodeEncodeErrormemoize)r   r    namer4   r5   module_nameerrmodule
name_parts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%   r0   c                 C   s"   |t u r
t| |dS t|| |dS )N)protocol)r   r   r%   )data_bufr&   rW   r   r   r   create_pickler   s   rY   )r0   )r9   pickler   r   r   r   r   r   r   r	   r
   r   structr   typesr   r&   r   r   r   r   r   r%   rY   r   r   r   r   <module>   s    0k