o
    eiY                     @   s"  U d dl Zd dlZd dlmZ d dlmZmZ d dlm	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mZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6Z6d d	l7m8Z8m9Z9m:Z: g d
Z;e< a=e<e	e>e	e?f B  e@d< deAe	e>e	e?f B  fddZBdeAe	e>e	e?f B  fddZCdd ZDdeAe	e>e	e?f B  fddZEG dd dZFdd ZGdd ZHejIdddd ZJd e	de>e?e?f fd!d"ZKde<e? fd#d$ZLG d%d& d&ZMd'd(d)e?fd*d+ZNdS ),    N)encode)CounterOrderedDict)Callable)%APPENDAPPENDSBINFLOATBINGETBININTBININT1BININT2	BINPERSIDBINPUT
BINUNICODEBUILDbytes_typesdecode_long
EMPTY_DICT
EMPTY_LIST	EMPTY_SETEMPTY_TUPLEGLOBALLONG1LONG_BINGETLONG_BINPUTMARKNEWFALSENEWOBJNEWTRUENONEPROTOREDUCESETITEMSETITEMSSHORT_BINSTRINGSTOPTUPLETUPLE1TUPLE2TUPLE3UnpicklingError)unpack)maxsize)Any)_sparse_tensors_to_validateIMPORT_MAPPINGNAME_MAPPING)sysosposixnt_marked_safe_globals_setsafe_globalsc                 C   s   t t| a d S N)r5   unionsetr6    r;   g/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/torch/_weights_only_unpickler.py_add_safe_globalsZ   s   r=   returnc                   C   s   t tS r7   )listr5   r;   r;   r;   r<   _get_safe_globals_   s   r@   c                   C   s
   t  ad S r7   )r9   r5   r;   r;   r;   r<   _clear_safe_globalsd   s   
rA   globals_to_removec                 C   s   t t|  a d S r7   )r5   r9   )rB   r;   r;   r<   _remove_safe_globalsi   s   rC   c                   @   s:   e Zd Zdeeeeef B  fddZdd Zdd Z	dS )	_safe_globalsr6   c                 C   s
   || _ d S r7   r:   )selfr6   r;   r;   r<   __init__q   s   
z_safe_globals.__init__c                 C      t | j d S r7   )r=   r6   )rE   r;   r;   r<   	__enter__t      z_safe_globals.__enter__c                 C   rG   r7   )rC   r6   )rE   typevaluetbr;   r;   r<   __exit__w   rI   z_safe_globals.__exit__N)
__name__
__module____qualname__r?   r   tuplestrrF   rH   rM   r;   r;   r;   r<   rD   p   s    rD   c                  C   s   i } t D ]B}t|tr6t|dkrtdt| t|d tur-tdt|d  |\}}|| |< q|j|j	}}|| | d| < q| S )N   zYExpected tuple of length 2 (global, str of callable full path), but got tuple of length:    zHExpected second item in tuple to be str of callable full path, but got: .)
r5   
isinstancerQ   len
ValueErrorrJ   rR   	TypeErrorrO   rP   )rcfnamemoduler;   r;   r<   _get_user_allowed_globals   s    

r^   c                   C   sL   t jjt jjt jjt jjt jjt jjt jjt jj	t jj
t jjt jjt jjhS r7   )torch_utils_rebuild_parameter_rebuild_parameter_with_state_rebuild_qtensor_rebuild_tensor_rebuild_tensor_v2_rebuild_tensor_v3_rebuild_sparse_tensor_rebuild_meta_tensor_no_storage_rebuild_nested_tensor_rebuild_wrapper_subclass!_rebuild_device_tensor_from_numpy&_rebuild_device_tensor_from_cpu_tensorr;   r;   r;   r<   _tensor_rebuild_functions   s   rm   rT   c                  C   s~  t ttjjtjjtjtjtj	t
tttd} tj D ]}|| t|< qtj D ]}|| t|< q(dd tddD D ]}|| t|< q;dd tddD D ]}|| t|< qNtjD ]}|| |j d|j < qZtjD ](}|tjjtjjfvrtj|j| |j d|j < qk|| |j d|j < qktjtjtjtjtjfD ]}|| t|< qt D ]
}|| d|j < qtj j!| d	< | S )
N)zcollections.OrderedDictzcollections.Counterztorch.nn.parameter.Parameterztorch.serialization._get_layoutz
torch.Sizeztorch.Tensorztorch.devicez_codecs.encodezbuiltins.bytearrayzbuiltins.setzbuiltins.complexc                 S      g | ]
}t td | qS )uintgetattrr_   .0xr;   r;   r<   
<listcomp>       z(_get_allowed_globals.<locals>.<listcomp>rT      c                 S   rn   )intrp   rr   r;   r;   r<   ru      rv   rU   ztorch._utils.z#torch._tensor._rebuild_from_type_v2)"r   r   r_   nn	Parameterserialization_get_layoutSizeTensordevicer   	bytearrayr9   complexstorage_dtype_to_storage_type_maprR   _new_dtypesrange_tensor_classesrO   rN   _storage_classesTypedStorageUntypedStorageStorageTypeper_tensor_affineper_tensor_symmetricper_channel_affineper_channel_symmetric per_channel_affine_float_qparamsrm   _tensor_rebuild_from_type_v2)rZ   ttttsqtr[   r;   r;   r<   _get_allowed_globals   sN   


r   readlinec                 C   sd   |  d d  d}|  d d  d}||ftv r&t||f \}}||fS |tv r.t| }||fS )Nutf-8)decoder0   r/   )r   r]   r\   r;   r;   r<   _read_global_instruction   s   r   c           
      C   sZ  t  }| j}| j}i td dtd dtd dtd dtd dtd dt	d dt
d dtd dtd dtd dtd dtd dtd dtd dtd dtd dtd dtd dtd dtd dtd dtd dtd dtd dtd dtd dtd di}	 |d}|stt |t!st"dt#|j$ |d t%d krt&|\}}|'| d|  nm|d |v r||d  }|r|| nZ|d t(d krt)d	|dd }	|	t*krt+d
||	 n<|d t,d t-d hv r|dd }	||	 n$|d t.d kr|dd  n|d t/d kr#|S t+d|d  q)Nr      rT   rS   rw   TExpected bytes, got rU   <IString is too longUnsupported operand )0r9   readr   r   r!   r   r   r   r"   r#   r   r&   r'   r(   r)   r   r   r   r   r   r   r   r   r
   r   r   r   r	   r   r   r   EOFErrorrV   r   AssertionErrorrJ   rN   r   r   addr   r+   r,   r*   r$   r   r    r%   )
fileglobals_in_checkpointr   r   op_to_bytes_to_readkeyr]   r\   bytes_to_readstrlenr;   r;   r<   get_globals_in_pkl   s   	



r   c                   @   sF   e Zd ZdddefddZdd Zdd	 Zd
efddZdd ZdS )	Unpicklerbytesencodingr   c                C   s&   || _ |j| _|j| _i | _d| _d S )Nr   )r   r   r   memoproto)rE   r   r   r;   r;   r<   rF   4  s
   
zUnpickler.__init__c                 C   s
  g | _ g | _| jj| _| j}	 |d}|stt|ts&tdt|j	 |d t
d krt| j\}}| d| }|tv rKtd| d| d|t v rZ| t |  n|t v ri| t |  n|d	v rqtd
|dv rytdd}||v r||dt| kr|t|d }t|dkr|d dkr|dd n|| }td| d| d| d|d td kr| j }| j }|tjju r| tjj|  np|t  v s|t  v r	|j|g|R  }	|tjv rd|jv rt|	 | |	 n@td| |d td krf| j }| jd }
|
t  vrJ|
t  vrJd|
 }t|
drF|d|
j 7 }t||
| }	|
tjv r_d|
jv r_t|	 |	| jd< n|d td kr| j }| jd }t|tj u r|j!|  nt|tjju r|"| nt|t#u r|j$%| nt|t  v st|t  v rt|dr|"| nd}t|t&rt|dkr|\}}|r|j$%| |r|' D ]\}}t(||| qnPtdt| |d t)d kr,| j }| jd }t|t*ur%tdt| || n|d t+d krU| , }| jd }t|t*urNtdt| |-| n|d t.d krw| j | j }}| /d || jd |< n|d t0d kr| , }| /d t1dt|dD ]}||d  | jd || < qn|d t2d kr| j | j g | _| jj| _n|d t3d kr| , }| t&| nu|d t4d kr| jd f| jd< na|d t5d kr| jd  | jd fg| jd d< nF|d t6d kr"| jd! | jd  | jd fg| jd!d< n'|d t7d kr2| d n|d t8d krB| d" n|d t9d krR| d n|d t:d krb| d# n|d t;d krr| g  n|d t<d kr| i  n|d t=d kr| t>  n|d t?d kr| t@d$|d%d  n|d tAd kr| | dd  n|d tBd kr| t@d&|dd  ns|d tCd kr| t@d'| d(d  n[|d tDd krt@d)|d%d }|tEkr	td*tF||d+d,}| | n1|d tGd kr?|dd }||}| jHd-kr8|I| jHd.}| | n
|d tJd kr| j }t|t&urdt|tKurdtd/t| t|t&u rt|dkrtjLM|d d0krtd1t|d  | | N| n|d tOd tPd fv r|d tOd kr|dnt@d)|d%d }| | jQ|  n|d tRd tSd fv r|d tRd kr|dnt@d)|d%d }|dk rtTd2| jd | jQ|< nW|d tUd kr|dd }||}| tV| n<|d tWd kr0|dd | _X| jXdkr/tYjZd3| jX d4dd5 n|d t[d kr@| j }|S td6|d  q)7zRead a pickled object representation from the open file.

        Return the reconstituted object hierarchy specified in the file.
        TrT   r   r   rU   z"Trying to load unsupported GLOBAL z whose module z is blocked.)z1torch.nested._internal.nested_tensor.NestedTensorz1torch.nested._internal.nested_tensor._rebuild_njtz"torch._dynamo.decorators._DimRangez\``torch.nested`` and ``torch._dynamo`` must be imported to load nested jagged tensors (NJTs))z(torch.distributed.device_mesh.DeviceMeshz2torch.distributed.tensor._dtensor_spec.DTensorSpecz1torch.distributed.tensor._dtensor_spec.TensorMetaz torch.distributed.tensor.DTensorz0torch.distributed.tensor.placement_types.Partialz2torch.distributed.tensor.placement_types.Replicatez.torch.distributed.tensor.placement_types.Shardz>``torch.distributed.tensor`` must be imported to load DTensorsbuiltinsNzUnsupported global: GLOBAL zY was not an allowed global by default. Please use `torch.serialization.add_safe_globals([z.])` or the `torch.serialization.safe_globals([zN])` context manager to allowlist this global if you trust this class/function.sparsezbCan only create new object for nn.Parameter or classes allowlisted via `add_safe_globals` but got r   z0Trying to call reduce for unrecognized function __self__z which belongs to __setstate__rS   zcCan only build Tensor, Parameter, OrderedDict or types allowlisted via `add_safe_globals`, but got z"Can only append to lists, but got zCan only extend lists, but got r"   r#   Fr;   z<ir   z<Hz>drw   r   r   r   surrogatepassr   strictz1persistent_load id must be tuple or int, but got r   z4Only persistent_load of storage is allowed, but got znegative argumentzDetected pickle protocol z in the checkpoint, which was not the default pickle protocol used by `torch.load` (2). The weights_only Unpickler might not support all instructions implemented by this protocol, please file an issue for adding support if you encounter this.)
stacklevelr   )\	metastackstackappendr   r   rV   r   r   rJ   rN   r   r   r   _blocklisted_modulesr*   r   r^   rW   r   popr_   ry   rz   values__new__r   rO   r.   r!   hasattrr   r   r~   set_r   r   __dict__updaterQ   itemssetattrr   r?   r   pop_markextendr"   _check_set_item_targetr#   r   r   r&   r'   r(   r)   r   r   r   r   r   r   r   r9   r
   r+   r   r   r   r   r,   rR   r$   r   r   r   rx   r{   _maybe_decode_asciipersistent_loadr	   r   r   r   r   rX   r   r   r    r   warningswarnr%   )rE   r   r   r]   r\   	full_pathbuiltins_nameargsclsresultfunc	error_msgstateinst	slotstatekvitemlist_objr   ir   strvalstrdatapididxndatarZ   r;   r;   r<   load;  s  
















$,

,,

 zUnpickler.loadc                 C   s    | j }| j | _ | j j| _|S r7   )r   r   r   r   )rE   r   r;   r;   r<   r   <  s   
zUnpickler.pop_markopcodec                 C   s:   t | jd tttfvrtd| dt | jd  d S )Nr   z	Can only zA for dict, collections.OrderedDict, collections.Counter, but got )rJ   r   dictr   r   r*   )rE   r   r;   r;   r<   r   B  s   z Unpickler._check_set_item_targetc                 C   s   t d)Nz%unsupported persistent id encountered)r*   )rE   r   r;   r;   r<   r   I  s   zUnpickler.persistent_loadN)	rN   rO   rP   rR   rF   r   r   r   r   r;   r;   r;   r<   r   3  s      r   ASCIIr   r   c                C   s   t | |d S )Nr   )r   r   )r   r   r;   r;   r<   r   M  s   r   )O	functools
_functoolsr   _codecsr   collectionsr   r   collections.abcr   pickler   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   structr+   r1   r,   typingr-   r_   torch._utilsr.   r/   r0   r   r9   r5   rQ   rR   __annotations__r?   r=   r@   rA   rC   rD   r^   rm   	lru_cacher   r   r   r   r   r;   r;   r;   r<   <module>   s<   
'


8A  