
    sg                         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e      Zd
dZy	)    )_compat_pickle_extension_registry_getattribute_PicklerEXT1EXT2EXT4GLOBALPicklerPicklingErrorSTACK_GLOBAL)pack)FunctionType   )ImporterObjMismatchErrorObjNotFoundErrorsys_importerc                   0     e Zd ZdZdef fdZddZ x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                     || _         t        |   |i | t        j                  j                         | _        t        j                  | j                  t        <   y N)	r   super__init__r   dispatchcopyr   save_globalr   )selfr   argskwargs	__class__s       Q/var/www/html/venv/lib/python3.12/site-packages/torch/package/_package_pickler.pyr   zPackagePickler.__init__   sH     $)&) !))..0&4&@&@l#    c           	         | j                   }| j                  }	 | j                  j                  ||      \  }}| j                  j                  |      }t        ||      \  }}	| j                  dk\  rxt        j                  ||f      }
|
r_|
dkD  sJ |
dk  r |t        t        d|
      z          y |
dk  r |t        t        d|
      z          y  |t         t        d	|
      z          y |j#                  d
      d   }|	|u r|}| j                  dk\  r/| j%                  |       | j%                  |        |t&               n|	|ur| j)                  t*        |	|f       n| j                  dk\  r- |t,        t/        |d      z   dz   t/        |d      z   dz          ns| j0                  r:t2        j4                  }t2        j6                  }||f|v r|||f   \  }}n	||v r||   }	  |t,        t/        |d      z   dz   t/        |d      z   dz          | j;                  |       y # t        t
        f$ r }t        d| dt        |             d d }~ww xY w# t8        $ r t        d||| j                  fz        d w xY w)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_mappings                 r#   r   zPackagePickler.save_global)   s    

yy	M $ 6 6sD AK ,,[9!&$/	6 ::?&**K+>?Daxx4<$dD!112
 	 V^$dD!112  $dD!112??3'*VD::?IIk"IIdO,6!Wvx&89ZZ1_W-. g&' 	 !/!D!D#1#H#H &.8(6T7J(K%K $44"2;"?KK12 D'*+ 	 	Su !"23 	M-uBs3xj ABL	Mh & #),2D$**+EF s#   H  ",I  I/I

I&I8r   )__name__
__module____qualname____doc__r   r   r   __classcell__)r"   s   @r#   r   r      s    A ADr$   r   c                 H    |t         u rt        | |      S t        || |      S )N)protocol)r   r   r   )data_bufr   rO   s      r#   create_picklerrQ   p   s(    < x(33h8DDr$   N)r)   )pickler   r   r   r   r   r   r	   r
   r   r   r   structr   typesr   r   r   r   r   r   r   rQ    r$   r#   <module>rV      s<         P PXX XvEr$   