a
    d                     @   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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 )N)	r   super__init__r   dispatchcopyr   save_globalr   )selfr   argskwargs	__class__ g/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/package/_package_pickler.pyr      s    zPackagePickler.__init__Nc              
   C   s2  | j }| j}z| j||\}}W nB ttfyd } z&td| dt| d 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rX| 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 n* ty"   td||| j
f d Y n0 | | 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    0







zPackagePickler.save_global)N)__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 d S )N)protocol)r   r
   r   )Zdata_bufr   rJ   r    r    r!   create_picklerp   s    rK   N)r%   )rH   pickler   r   r   r   r   r   r   r	   r
   r   r   structr   typesr   r   r   r   r   r   r   rK   r    r    r    r!   <module>   s   4[