
    gj                         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m	Z	m
Z
mZmZ eZeZe
d   Ze G d d             Ze G d d	             Ze G d
 d             Zy)    N)defaultdict)	dataclassfield)DictListLiteralOptionalTuple)
F64F32F16BF16I64I32I16I8U8BOOLc                   d    e Zd ZU dZeed<   ee   ed<   eeef   ed<    e	d      Z
eed<   d
d	Zy)
TensorInfoa<  Information about a tensor.

    For more details regarding the safetensors format, check out https://huggingface.co/docs/safetensors/index#format.

    Attributes:
        dtype (`str`):
            The data type of the tensor ("F64", "F32", "F16", "BF16", "I64", "I32", "I16", "I8", "U8", "BOOL").
        shape (`List[int]`):
            The shape of the tensor.
        data_offsets (`Tuple[int, int]`):
            The offsets of the data in the file as a tuple `[BEGIN, END]`.
        parameter_count (`int`):
            The number of parameters in the tensor.
    dtypeshapedata_offsetsFinitparameter_countNc                     	 t        j                  t        j                  | j                        | _        y # t        $ r
 d| _        Y y w xY w)N   )	functoolsreduceoperatormulr   r   	TypeError)selfs    W/var/www/openai/venv/lib/python3.12/site-packages/huggingface_hub/utils/_safetensors.py__post_init__zTensorInfo.__post_init__#   s;    	%#,#3#3HLL$**#MD  	%#$D 	%s   36 A	A	returnN)__name__
__module____qualname____doc__DTYPE_T__annotations__r   intr
   r   r   r&        r%   r   r      s:     N9S/! e,OS,%r1   r   c                   h    e Zd ZU dZeeef   ed<   eeef   ed<    e	d      Z
eeef   ed<   d	dZy)
SafetensorsFileMetadataa  Metadata for a Safetensors file hosted on the Hub.

    This class is returned by [`parse_safetensors_file_metadata`].

    For more details regarding the safetensors format, check out https://huggingface.co/docs/safetensors/index#format.

    Attributes:
        metadata (`Dict`):
            The metadata contained in the file.
        tensors (`Dict[str, TensorInfo]`):
            A map of all tensors. Keys are tensor names and values are information about the corresponding tensor, as a
            [`TensorInfo`] object.
        parameter_count (`Dict[str, int]`):
            A map of the number of parameters per data type. Keys are data types and values are the number of parameters
            of that data type.
    metadatatensorsFr   r   Nc                     t        t              }| j                  j                         D ]#  }||j                  xx   |j
                  z  cc<   % t        |      | _        y N)r   r/   r5   valuesr   r   dict)r$   r   tensors      r%   r&   z%SafetensorsFileMetadata.__post_init__B   sJ    .9#.>ll))+FFLL)V-C-CC) ,#O4r1   r'   )r)   r*   r+   r,   r   strr.   TENSOR_NAME_Tr   r   r   r-   r/   r&   r0   r1   r%   r3   r3   +   sD    " 38n-+,,*/U*;OT'3,';5r1   r3   c                       e Zd ZU dZee   ed<   eed<   eee	f   ed<   ee	e
f   ed<    ed      Zeeef   ed<   dd
Zy	)SafetensorsRepoMetadataa  Metadata for a Safetensors repo.

    A repo is considered to be a Safetensors repo if it contains either a 'model.safetensors' weight file (non-shared
    model) or a 'model.safetensors.index.json' index file (sharded model) at its root.

    This class is returned by [`get_safetensors_metadata`].

    For more details regarding the safetensors format, check out https://huggingface.co/docs/safetensors/index#format.

    Attributes:
        metadata (`Dict`, *optional*):
            The metadata contained in the 'model.safetensors.index.json' file, if it exists. Only populated for sharded
            models.
        sharded (`bool`):
            Whether the repo contains a sharded model or not.
        weight_map (`Dict[str, str]`):
            A map of all weights. Keys are tensor names and values are filenames of the files containing the tensors.
        files_metadata (`Dict[str, SafetensorsFileMetadata]`):
            A map of all files metadata. Keys are filenames and values are the metadata of the corresponding file, as
            a [`SafetensorsFileMetadata`] object.
        parameter_count (`Dict[str, int]`):
            A map of the number of parameters per data type. Keys are data types and values are the number of parameters
            of that data type.
    r4   sharded
weight_mapfiles_metadataFr   r   Nc                     t        t              }| j                  j                         D ]1  }|j                  j                         D ]  \  }}||xx   |z  cc<    3 t        |      | _        y r7   )r   r/   rA   r8   r   itemsr9   )r$   r   file_metadatar   nb_parameters_s        r%   r&   z%SafetensorsRepoMetadata.__post_init__j   sc    .9#.>!00779M)6)F)F)L)L)N%~&.8& *O :  $O4r1   r'   )r)   r*   r+   r,   r	   r   r.   boolr<   
FILENAME_Tr3   r   r   r-   r/   r&   r0   r1   r%   r>   r>   I   sV    2 tnM]J.//%<<==*/U*;OT'3,';5r1   r>   )r   r!   collectionsr   dataclassesr   r   typingr   r   r   r	   r
   r;   rG   r<   r-   r   r3   r>   r0   r1   r%   <module>rK      sy      # ( 7 7 

V
W % % %: 5 5 5: %5 %5 %5r1   