o
    Zh                     @   s   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G dd deZG dd	 d	eZeG d
d dZeG dd dZeG dd dZdS )    N)defaultdict)	dataclassfield)DictListLiteralOptionalTuple)
ZF64ZF32ZF16ZBF16ZI64ZI32ZI16ZI8ZU8ZBOOLc                   @      e Zd ZdZdS )SafetensorsParsingErrorzRaised when failing to parse a safetensors file metadata.

    This can be the case if the file is not a safetensors file or does not respect the specification.
    N__name__
__module____qualname____doc__ r   r   Y/var/www/html/lang_env/lib/python3.10/site-packages/huggingface_hub/utils/_safetensors.pyr          r   c                   @   r
   )NotASafetensorsRepoErrorzRaised when a repo is not a Safetensors repo i.e. doesn't have either a `model.safetensors` or a
    `model.safetensors.index.json` file.
    Nr   r   r   r   r   r      r   r   c                   @   sR   e Zd ZU dZeed< ee ed< eeef ed< e	ddZ
eed< dd
dZd	S )
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shapeZdata_offsetsFinitparameter_countreturnNc                 C   s4   zt tj| j| _W d S  ty   d| _Y d S w )N   )	functoolsreduceoperatormulr   r   	TypeError)selfr   r   r   __post_init__0   s
   zTensorInfo.__post_init__r   N)r   r   r   r   DTYPE_T__annotations__r   intr	   r   r   r#   r   r   r   r   r      s   
 r   c                   @   sV   e Zd ZU dZeeef ed< eeef ed< e	ddZ
eeef ed< dd	d
ZdS )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   r   Nc                 C   s:   t t}| j D ]}||j  |j7  < q	t|| _d S N)r   r'   r*   valuesr   r   dict)r"   r   Ztensorr   r   r   r#   O   s   z%SafetensorsFileMetadata.__post_init__r$   )r   r   r   r   r   strr&   TENSOR_NAME_Tr   r   r   r%   r'   r#   r   r   r   r   r(   8   s   
 r(   c                   @   sj   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dZeeef ed< dddZd
S )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.
    r)   ZshardedZ
weight_mapfiles_metadataFr   r   r   Nc                 C   sJ   t t}| j D ]}|j D ]\}}||  |7  < qq	t|| _d S r+   )r   r'   r1   r,   r   itemsr-   )r"   r   Zfile_metadatar   Znb_parameters_r   r   r   r#   w   s   z%SafetensorsRepoMetadata.__post_init__r$   )r   r   r   r   r   r   r&   boolr/   
FILENAME_Tr(   r   r   r%   r'   r#   r   r   r   r   r0   V   s   
 r0   )r   r   collectionsr   dataclassesr   r   typingr   r   r   r   r	   r.   r4   r/   r%   	Exceptionr   r   r   r(   r0   r   r   r   r   <module>   s     