
    ui                         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e          Z G d	 d
e          Z G d de          Z G d de          ZdS )    )abstractmethod)Enum)Optional)	Documents
Embeddings)	Metadatas)	ComponentSystemc                   *    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        J/var/www/icac/venv/lib/python3.11/site-packages/chromadb/quota/__init__.pyr   r      s7        /3#M%N)'N1r   r   c                   ,     e Zd Zdededef fdZ xZS )
QuotaErrorresourcequotaactualc                     t                                          d| d| d|            || _        || _        || _        d S )Nzquota error. resource: z quota: z	 actual: )super__init__r   r   r   )selfr   r   r   	__class__s       r   r!   zQuotaError.__init__   sU    PhPPPPPP	
 	
 	
 
 r   )r   r   r   r   intr!   __classcell__r#   s   @r   r   r      sR        ! !# !s ! ! ! ! ! ! ! ! ! !r   r   c                   ~     e Zd ZdZdeddf fdZe	 	 d
dedee	         dee	         dee
         fd	            Z x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                 X    t                                          |           || _        d S N)r    r!   r)   r"   r)   r#   s     r   r!   zQuotaProvider.__init__*   s&       r   r   subjecttierc                     d S r,   r   )r"   r   r.   r/   s       r   get_for_subjectzQuotaProvider.get_for_subject.   s	     	r   )NN)r   r   r   __doc__r
   r!   r   r   r   strr$   r1   r%   r&   s   @r   r(   r(   !   s         v $        "&"	  # sm	
 
#   ^    r   r(   c            
       ~     e Zd ZdZdeddf fdZ	 	 	 	 ddee         dee         dee	         d	ee
         fd
Z x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                     t                                          |           d| _        |j        j        r&|                    t                    | _        d| _        || _        d S )NFT)	r    r!   should_enforcesettingschroma_quota_provider_implrequirer(   _quota_providerr)   r-   s     r   r!   zQuotaEnforcer.__init__A   sW       #?5 	'#)>>-#@#@D "&Dr   	metadatas	documents
embeddingscollection_idc           	         | j         sd S | j                            t          j        |          }| j                            t          j        |          }|r|s|r|D ]}|D ]}|r<t          |          |k    r)t          t          j        t          |          |          |rct          ||         t                    rHt          ||                   |k    r/t          t          j        t          ||                   |          | j                            t          j
        |          }	|	rC|rA|D ]>}
t          |
          |	k    r)t          t          j
        t          |
          |	          ?| j                            t          j        |          }|rC|rC|D ]B}t          |          |k    r)t          t          j        t          |          |          ?d S d S d S )N)r   r.   )r   r   r   )r7   r;   r1   r   r   r   lenr   
isinstancer3   r   r   )r"   r<   r=   r>   r?   metadata_key_length_quotametadata_value_length_quotametadatakeydocument_size_quotadocumentembedding_dimension_quota	embeddings                r   static_checkzQuotaEnforcer.static_checkI   s~    " 	F$($8$H$H1= %I %
 %
! '+&:&J&J3] 'K '
 '
#  	3 	7R 	%  #  C1HH'@@@(%-%A#&s88";    4	&x}c::	  ..1LLL(%-%C#&x}#5#5"=   ( #2BB+] C 
 
  	9 	%  x==#666$!)!7"8}}1    7 %)$8$H$H2M %I %
 %
! % 	 	'  	y>>$===$!)!>"9~~7    >	 	 	 	 r   )NNNN)r   r   r   r2   r
   r!   r   r   r   r   r3   rK   r%   r&   s   @r   r5   r5   8   s         v $       *.)-+/'+: :I&: I&: Z(	:
  }: : : : : : : :r   r5   N)abcr   enumr   typingr   chromadbr   r   chromadb.apir   chromadb.configr	   r
   r   	Exceptionr   r(   r5   r   r   r   <module>rS      sI                     * * * * * * * * " " " " " "       2 2 2 2 2t 2 2 2! ! ! ! ! ! ! !    I   .K K K K KI K K K K Kr   