o
    *i#                     @   s~   d dl mZmZ d dlmZmZ d dlmZ d dlm	Z	 g dZ
eG dd deZeG dd	 d	eZG d
d dee	ZdS )    )Enumunique)ListOptional)RegistryMixin)	BaseModel)SparsityCompressionConfigCompressionFormatSparsityStructurec                   @   s8   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdS )r	   densezsparse-bitmaskzsparse-24-bitmaskzint-quantizedzfloat-quantizedznaive-quantizedzpack-quantizedz	marlin-24zmixed-precisionznvfp4-pack-quantizedzmxfp4-pack-quantizedN)__name__
__module____qualname__r   sparse_bitmasksparse_24_bitmaskint_quantizedfloat_quantizednaive_quantizedpack_quantized	marlin_24mixed_precisionnvfp4_pack_quantizedmxfp4_pack_quantized r   r   [/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/compressed_tensors/config/base.pyr	      s    r	   c                   @   s0   e Zd ZdZdZdZdZdd Zedd Z	d	S )
r
   as  
    An enumeration to represent different sparsity structures.

    Attributes
    ----------
    TWO_FOUR : str
        Represents a 2:4 sparsity structure.
    ZERO_ZERO : str
        Represents a 0:0 sparsity structure.
    UNSTRUCTURED : str
        Represents an unstructured sparsity structure.

    Examples
    --------
    >>> SparsityStructure('2:4')
    <SparsityStructure.TWO_FOUR: '2:4'>

    >>> SparsityStructure('unstructured')
    <SparsityStructure.UNSTRUCTURED: 'unstructured'>

    >>> SparsityStructure('2:4') == SparsityStructure.TWO_FOUR
    True

    >>> SparsityStructure('UNSTRUCTURED') == SparsityStructure.UNSTRUCTURED
    True

    >>> SparsityStructure(None) == SparsityStructure.UNSTRUCTURED
    True

    >>> SparsityStructure('invalid')
    Traceback (most recent call last):
        ...
    ValueError: invalid is not a valid SparsityStructure
    z2:4unstructuredz0:0c                 C   s*   t | }|d ur| |_|S ||_|S )N)object__new__lower_value_)clsvalueobjr   r   r   r   Q   s
   
zSparsityStructure.__new__c                 C   sB   |d u r| j S | D ]}|j| kr|  S q	t| d| j )Nz is not a valid )UNSTRUCTUREDr!   r   
ValueErrorr   )r    r!   memberr   r   r   	_missing_V   s   zSparsityStructure._missing_N)
r   r   r   __doc__TWO_FOURr#   	ZERO_ZEROr   classmethodr&   r   r   r   r   r
   (   s    #r
   c                   @   sb   e Zd ZU dZeed< dZeee  ed< dZ	eee  ed< dZ
ee ed< dZee ed	< dS )
r   a  
    Base data class for storing sparsity compression parameters

    :param format: name of compression format
    :param targets: List of layer names or layer types that aren't sparse and should
        be ignored during compression. By default, assume all layers are targeted
    :param ignore: List of layer names (unique) to ignore from targets. Defaults to None
    :param global_sparsity: average sparsity of the entire model
    :param sparsity_structure: structure of the sparsity, such as
    "unstructured", "2:4", "8:16" etc
    formatNtargetsignoreg        global_sparsityr   sparsity_structure)r   r   r   r'   str__annotations__r,   r   r   r-   r.   floatr/   r   r   r   r   r   a   s   
 r   N)enumr   r   typingr   r   compressed_tensors.registryr   pydanticr   __all__r	   r
   r   r   r   r   r   <module>   s   8