o
    1Xxi                     @   s   d dl mZ d dlm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 G dd deZG d	d
 d
eZG dd deZG dd deZdS )    )abstractmethod)Enum)Optional)	Documents
Embeddings)	Metadatas)	ComponentSystemc                   @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )ResourceMETADATA_KEY_LENGTHMETADATA_VALUE_LENGTHDOCUMENT_SIZEADD_PER_MINUTEQUERY_PER_MINUTEEMBEDDINGS_DIMENSIONN)
__name__
__module____qualname__r   r   r   r   r   GET_PER_MINUTEr    r   r   V/home/air/biblejyuku/back/venv/lib/python3.10/site-packages/chromadb/quota/__init__.pyr
      s    r
   c                       s*   e Zd Zdededef fddZ  ZS )
QuotaErrorresourcequotaactualc                    s4   t  d| d| d|  || _|| _|| _d S )Nzquota error. resource: z quota: z	 actual: )super__init__r   r   r   )selfr   r   r   	__class__r   r   r      s   
zQuotaError.__init__)r   r   r   r
   intr   __classcell__r   r   r   r   r      s    "r   c                       sZ   e Zd ZdZdeddf fddZe		ddedee	 d	ee	 dee
 fd
dZ  ZS )QuotaProviderz
    Retrieves quotas for resources within a system.

    Methods:
        get_for_subject(resource, subject=None, tier=None):
            Returns the quota for a given resource, optionally considering the tier and subject.
    systemreturnNc                    s   t  | || _d S N)r   r   r#   r   r#   r   r   r   r   *   s   
zQuotaProvider.__init__r   subjecttierc                 C   s   d S r%   r   )r   r   r'   r(   r   r   r   get_for_subject.   s   zQuotaProvider.get_for_subject)NN)r   r   r   __doc__r	   r   r   r
   r   strr    r)   r!   r   r   r   r   r"   !   s    r"   c                
       s^   e Zd ZdZdeddf fddZ				ddee dee d	ee	 d
ee
 fddZ  ZS )QuotaEnforcera?  
    Enforces quota restrictions on various resources using quota provider.

    Methods:
        static_check(metadatas=None, documents=None, embeddings=None, collection_id=None):
            Performs static checks against quotas for metadatas, documents, and embeddings. Raises QuotaError if limits are exceeded.
    r#   r$   Nc                    s6   t  | d| _|jjr|t| _d| _|| _d S )NFT)	r   r   should_enforcesettingschroma_quota_provider_implrequirer"   _quota_providerr#   r&   r   r   r   r   A   s   
zQuotaEnforcer.__init__	metadatas	documents
embeddingscollection_idc                 C   s@  | j sd S | jjtj|d}| jjtj|d}|rV|s|rV|D ]6}|D ]1}|r7t||kr7ttjt||d|rTt|| t	rTt|| |krTttjt|| |dq#q| jjtj
|d}	|	rx|rx|D ]}
t|
|	krwttj
t|
|	dqe| jjtj|d}|r|r|D ]}t||krttjt||dqd S d S d S )N)r   r'   )r   r   r   )r-   r1   r)   r
   r   r   lenr   
isinstancer+   r   r   )r   r2   r3   r4   r5   metadata_key_length_quotametadata_value_length_quotametadatakeydocument_size_quotadocumentembedding_dimension_quota	embeddingr   r   r   static_checkI   sr   
zQuotaEnforcer.static_check)NNNN)r   r   r   r*   r	   r   r   r   r   r   r+   r@   r!   r   r   r   r   r,   8   s     
r,   N)abcr   enumr   typingr   chromadbr   r   chromadb.apir   chromadb.configr   r	   r
   	Exceptionr   r"   r,   r   r   r   r   <module>   s    

