§
    ˜Štj±^  ã                   óÐ  — d dl Z d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lm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!m"Z"m#Z#m$Z$m%Z% d dl&m'Z' d dl(Z)d dl*mZ+ d dl,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@  e"d¦  «        ZAde eAe!eA         f         de!eA         fd„ZBdedefd„ZCdee-jD                 dee-jD                 ddfd„ZEd e0deddfd!„ZFd e0d"ed#e e'd$         e'd%         e'd&         f         ddfd'„ZGd e0deddfd(„ZHd e0deddfd)„ZId e0deddfd*„ZJd e0deddfd+„ZKd e0ddfd,„ZLe9jM        fd-e-jN        d.e-jN        d/ee+jO        e+jO        gePf         dee!e!eQ                  e!e!eP                  f         fd0„ZRd1eQddfd2„ZSd e0fd3„ZT	 	 	 	 	 	 dKd e0ded7eQd8ePd9ee-jU                 d:ee!eQ                  d;ee-jN                 d<eVddfd=„ZWd>e-jX        d7eQddfd?„ZYd@edeQfdA„ZZdBedCe!e0         dDeVddfdE„Z[dBedCe!e0         de%eeQf         fdF„Z\dBedCe!e0         dDeVddfdG„Z]edHe.dIe^fdJ„¦   «         Z_dS )Lé    N)ÚUUID)Úcontextmanager)Ú
SegmentAPI)ÚSysDB)Úcreate_topic_name)ÚSystem)Úget_sql)ÚSqliteDB)Úsleep)ÚSegmentType)ÚNormalizedRecordSetÚ	RecordSet)	ÚCallableÚOptionalÚTupleÚUnionÚListÚTypeVarÚcastÚAnyÚDict)ÚLiteral)ÚtypesÚ	ClientAPI)Ú
Collection)Únote)ÚInvalidArgument)ÚTableÚ	functions)Údistance_functions)ÚSearch)ÚKnnÚSelectÚLimitÚKeyÚTÚvalueÚreturnc                 óX   — | €t          d¦  «        ‚t          | t          ¦  «        r| S | gS )z*Wrap a value in a list if it is not a listNzvalue cannot be None)r   Ú
isinstancer   )r'   s    ú_/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/chromadb/test/property/invariants.pyÚwrapr,   $   s4   € à€}ÝÐ4Ñ5Ô5Ð5Ý	�E�4Ñ	 Ô	 ð Øˆàˆwˆó    Ú
record_setc                 óX  — | d         €d}�n?t          | d         t          ¦  «        �r| d         €J ‚t          | d         ¦  «        dk    rÐt          d„ | d         D ¦   «         ¦  «        r!t	          t
          j        | d         ¦  «        }nÀt          d„ | d         D ¦   «         ¦  «        r!t	          t
          j        | d         ¦  «        }n€t          d„ | d         D ¦   «         ¦  «        r"t	          t
          j        | d         g¦  «        }n?t          d¦  «        ‚t	          t
          j        | d         ¦  «        }nt          d¦  «        ‚t          t          | d	         ¦  «        | d
         �t          | d
         ¦  «        nd| d         �t          | d         ¦  «        nd|¬¦  «        S )z9Ensure that an embedding set has lists for all its valuesÚ
embeddingsNr   c              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S ©N)r*   Úlist©Ú.0Ú	embeddings     r+   ú	<genexpr>zwrap_all.<locals>.<genexpr>7   s=   è è € ð ð Ø09•
˜9¥dÑ+Ô+ðð ð ð ð ð r-   c              3   óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S r2   )r*   ÚnpÚndarrayr4   s     r+   r7   zwrap_all.<locals>.<genexpr>;   sB   è è € ð ð àõ ˜9¥b¤jÑ1Ô1ðð ð ð ð ð r-   c              3   óz   K  — | ]6}t          |t          t          t          j        t          j        f¦  «        V — Œ7d S r2   )r*   ÚintÚfloatr9   ÚintegerÚfloating©r5   Úes     r+   r7   zwrap_all.<locals>.<genexpr>A   sM   è è € ð ð àõ ˜q¥3­­r¬z½2¼;Ð"GÑHÔHðð ð ð ð ð r-   z-an embedding must be a list of floats or intszVembeddings must be a list of lists, a list of numpy arrays, a list of numbers, or NoneÚidsÚ	documentsÚ	metadatas)rB   rC   rD   r0   )
r*   r3   ÚlenÚallr   r   Ú
Embeddingsr   r   r,   )r.   Úembedding_lists     r+   Úwrap_allrI   .   sú  € ð �,ÔÐ'Øˆ‰Ý	�J˜|Ô,­dÑ	3Ô	3ñ 
Ø˜,Ô'Ð3Ð3Ð3Ýˆz˜,Ô'Ñ(Ô(¨1Ò,Ð,Ýð ð Ø=GÈÔ=Uðñ ô ñ ô ð õ "&¥eÔ&6¸
À<Ô8PÑ!QÔ!Q��Ýð ð à!+¨LÔ!9ðñ ô ñ ô ð õ "&¥eÔ&6¸
À<Ô8PÑ!QÔ!Q��åð ð à'¨Ô5ðñ ô ñ ô ð õ &*­%Ô*:¸ZÈÔ=UÐ<VÑ%WÔ%W�N�Nå)ØGñô ð õ "¥%Ô"2°J¸|Ô4LÑMÔMˆNˆNåØdñ
ô 
ð 	
õ Ý�˜EÔ"Ñ#Ô#à�kÔ"Ð.õ �z +Ô.Ñ/Ô/Ð/àà�kÔ"Ð.õ �z +Ô.Ñ/Ô/Ð/àØ!ð	ñ 	ô 	ð 	r-   ÚexpectedÚgotc           	      óØ  — | €|�| �|€J ‚| �Ù|�Ùt          | ¦  «        t          |¦  «        k    sJ ‚|                      ¦   «         D ]¤\  }}||v sJ ‚t          | |         t          ¦  «        rft          ||         t          ¦  «        rKt	          t          t          | |         ¦  «        t          t          ||         ¦  «        z
  ¦  «        dk     sJ ‚ŒŒ| |         ||         k    sJ ‚Œ¡d S d S d S )Nç�íµ ÷Æ°>)rE   Úitemsr*   r=   Úabsr   )rJ   rK   ÚkeyÚvals       r+   Úcheck_metadatarR   ]   s  € ð Ð  ØÐ   ðð Ð  Ý�8‰}Œ}¥ C¡¤Ò(Ð(Ð(Ð(Ø ŸšÑ(Ô(ð 	1ð 	1‰HˆC�Ø˜#�:�:�:�:Ý˜( 3œ-­Ñ/Ô/ð 1µJ¸sÀ3¼xÍÑ4OÔ4Oð 1Ý�4¥ x°¤}Ñ5Ô5½½UÀCÈÄHÑ8MÔ8MÑMÑNÔNÐQUÒUÐUÐUÐUÐUà ”}¨¨C¬Ò0Ð0Ð0Ð0Ð0ð Ð  ð	1ð 	1r-   Ú
collectionc           	      óþ   — |                       ¦   «         }t          |¦  «        }|t          |d         ¦  «        k    r%t          d|dt          |d         ¦  «        ¦  «         |t          |d         ¦  «        k    sJ ‚dS )z?The given collection count is equal to the number of embeddingsrB   zcount mismatch:z=!N)ÚcountrI   rE   Úprint)rS   r.   rU   Únormalized_record_sets       r+   rU   rU   m   s‚   € à×ÒÑÔ€EÝ$ ZÑ0Ô0ÐØ•Ð)¨%Ô0Ñ1Ô1Ò1Ð1ÝÐ ¨­cÐ2GÈÔ2NÑ.OÔ.OÑPÔPÐPØ•CÐ-¨eÔ4Ñ5Ô5Ò5Ð5Ð5Ð5Ð5Ð5r-   rW   Ú
field_namerC   rD   r0   c                 ó¤  ‡‡	— |                       |d         |g¬¦  «        Š	d„ t          |d         ¦  «        D ¦   «         Š‰	|         }t          |d         ¦  «        dk    rA|dk    r1t          t          j        t                   |¦  «        j        dk    sJ ‚n|g k    sJ ‚dS |€J ‚t          t          |¦  «        ˆˆ	fd„¬¦  «        }d	„ |D ¦   «         }||         }|€dgt          |d         ¦  «        z  }|dk    r=t          j
        t          j        |¦  «        t          j        |¦  «        ¦  «        sJ ‚dS t          |¦  «        t          |¦  «        k    sJ ‚t          ||¦  «        D ]c\  }}t          |t          ¦  «        rAt          t          t           j        |¦  «        t          t           j        |¦  «        ¦  «         Œ[||k    sJ ‚ŒddS )
zq
    The actual embedding field is equal to the expected field
    field_name: one of [documents, metadatas]
    rB   ©rB   Úincludec                 ó   — i | ]\  }}||“Œ	S © r]   ©r5   ÚiÚids      r+   ú
<dictcomp>z"_field_matches.<locals>.<dictcomp>„   ó   € ÐXÐXÐX¡u q¨"˜R ÐXÐXÐXr-   r   r0   Nc                 ó8   •— ‰‰d         | d                           S )NrB   r   r]   )Úindex_and_field_valueÚembedding_id_to_indexÚresults    €€r+   ú<lambda>z _field_matches.<locals>.<lambda>“   s   ø€ Ð*?Ø�5ŒMÐ/°Ô2Ô3ô+
€ r-   ©rP   c                 ó   — g | ]\  }}|‘ŒS r]   r]   )r5   Ú_Úfield_values      r+   ú
<listcomp>z"_field_matches.<locals>.<listcomp>—   s   € ÐCÐCÐC¡N A {�KÐCÐCÐCr-   )ÚgetÚ	enumeraterE   r   ÚnptÚNDArrayr   ÚsizeÚsortedr9   ÚallcloseÚarrayÚzipr*   ÚdictrR   r   ÚMetadata)
rS   rW   rX   Úactual_fieldÚsorted_fieldÚfield_valuesÚexpected_fieldrk   re   rf   s
           @@r+   Ú_field_matchesr|   v   s   øø€ ð �^Š^Ð 5°eÔ <ÀzÀlˆ^ÑSÔS€Fð YÐXµ	Ð:OÐPUÔ:VÑ0WÔ0WÐXÑXÔXÐØ˜*Ô%€Lå
Ð  Ô'Ñ(Ô(¨AÒ-Ð-Ø˜Ò%Ð%Ý�œ¥CÔ(¨,Ñ7Ô7Ô<ÀÒAÐAÐAÐAÐAà 2Ò%Ð%Ð%Ð%Øˆð Ð#Ð#Ð#ÝÝ�,ÑÔð
ð 
ð 
ð 
ð 
ðñ ô €Lð DÐC°lÐCÑCÔC€Là*¨:Ô6€NØÐð ˜¥#Ð&;¸EÔ&BÑ"CÔ"CÑCˆØ�\Ò!Ð!ÝŒ{�2œ8 LÑ1Ô1µ2´8¸NÑ3KÔ3KÑLÔLÐLÐLÐLÐLÐLå�<Ñ Ô ¥C¨Ñ$7Ô$7Ò7Ð7Ð7Ð7å+.¨|¸^Ñ+LÔ+Lð 	5ð 	5Ñ'ˆK˜Ý˜.­$Ñ/Ô/ð 5ÝÝ�œ¨Ñ5Ô5Ý�œ¨Ñ8Ô8ñô ð ð ð
 # nÒ4Ð4Ð4Ð4Ð4ð	5ð 	5r-   c                 óî   ‡— t          |¦  «        }|                      |d         g ¬¦  «        d         }d„ t          |d         ¦  «        D ¦   «         Št          |ˆfd„¬¦  «        }||d         k    sJ ‚dS )z5The actual embedding ids is equal to the expected idsrB   rZ   c                 ó   — i | ]\  }}||“Œ	S r]   r]   r^   s      r+   ra   zids_match.<locals>.<dictcomp>³   rb   r-   c                 ó   •— ‰|          S r2   r]   )r`   re   s    €r+   rg   zids_match.<locals>.<lambda>´   s   ø€ Ð3HÈÔ3L€ r-   rh   N)rI   rm   rn   rr   )rS   r.   rW   Ú
actual_idsre   s       @r+   Ú	ids_matchr�   ­   s�   ø€ å$ ZÑ0Ô0ÐØ—’Ð$9¸%Ô$@È"�ÑMÔMÈeÔT€Jð YÐXµ	Ð:OÐPUÔ:VÑ0WÔ0WÐXÑXÔXÐÝ˜
Ð(LÐ(LÐ(LÐ(LÐMÑMÔM€JØÐ.¨uÔ5Ò5Ð5Ð5Ð5Ð5Ð5r-   c                 óF   — t          |¦  «        }t          | |d¦  «         dS )z?The actual embedding metadata is equal to the expected metadatarD   N©rI   r|   ©rS   r.   rW   s      r+   Úmetadatas_matchr…   ¸   ó)   € å$ ZÑ0Ô0ÐÝ�:Ð4°kÑBÔBÐBÐBÐBr-   c                 óF   — t          |¦  «        }t          | |d¦  «         dS )úAThe actual embedding documents is equal to the expected documentsrC   Nrƒ   r„   s      r+   Údocuments_matchr‰   ¾   r†   r-   c                 óF   — t          |¦  «        }t          | |d¦  «         dS )rˆ   r0   Nrƒ   r„   s      r+   Úembeddings_matchr‹   Ä   s)   € å$ ZÑ0Ô0ÐÝ�:Ð4°lÑCÔCÐCÐCÐCr-   c                 ó˜   — |                       ¦   «         d         }t          |¦  «        t          t          |¦  «        ¦  «        k    sJ ‚d S )NrB   )rm   rE   Úset)rS   rB   s     r+   Úno_duplicatesrŽ   Ê   s?   € Ø
�.Š.Ñ
Ô
˜5Ô
!€CÝˆs‰8Œ8•s�3˜s™8œ8‘}”}Ò$Ð$Ð$Ð$Ð$Ð$r-   ÚqueryÚtargetsÚdistance_fnc                 ó.  ‡‡— t          j        | t           j        ¬¦  «        }t          j        |t           j        ¬¦  «        Št          j        ˆˆfd„d|¦  «        }t          j        |¦  «                             ¦   «         |                     ¦   «         fS )zGReturn the ordered indices and distances from each query to each target)Údtypec                 ó2   •— t          j        ‰d‰| ¦  «        S )Né   )r9   Úapply_along_axis)r�   r‘   Ú
np_targetss    €€r+   rg   z"_exact_distances.<locals>.<lambda>Ü   s   ø€ •bÔ)¨+°q¸*ÀeÑLÔL€ r-   r•   )r9   rt   Úfloat32r–   ÚargsortÚtolist)r�   r�   r‘   Únp_queryÚ	distancesr—   s     `  @r+   Ú_exact_distancesr�   Ï   sŠ   øø€ õ Œx˜¥R¤ZÐ0Ñ0Ô0€HÝ”˜'­¬Ð4Ñ4Ô4€Jõ Ô#ØLÐLÐLÐLÐLØ	Øñô €Iõ Œ:�iÑ Ô ×'Ò'Ñ)Ô)¨9×+;Ò+;Ñ+=Ô+=Ð=Ð=r-   Úthreadpool_sizec                 ó®  — t          j        ¦   «         }|                     ¦   «         }d}d}t          d„ |D ¦   «         ¦  «        dz
  | k    rg||k     rat	          j        ¦   «          |                     ¦   «         }|dz  }t          d¦  «         t          d„ |D ¦   «         ¦  «        dz
  | k    r||k     °at          d„ |D ¦   «         ¦  «        dz
  | k    sJ ‚dS )zs
    Checks that the open file descriptors are not exceeding the threadpool size
    works only for SegmentAPI
    é   r   c                 ó.   — g | ]}d |j         v ¯|j         ‘ŒS ©Úsqlite3©Úpath©r5   Úps     r+   rl   z4fd_not_exceeding_threadpool_size.<locals>.<listcomp>ï   ó&   € Ð?Ð?Ð?˜¨9¸¼Ð+>Ð+>ˆQŒVÐ+>Ð+>Ð+>r-   r•   c                 ó.   — g | ]}d |j         v ¯|j         ‘ŒS r¢   r¤   r¦   s     r+   rl   z4fd_not_exceeding_threadpool_size.<locals>.<listcomp>÷   r¨   r-   N)ÚpsutilÚProcessÚ
open_filesrE   ÚgcÚcollectr   )rž   Úcurrent_processr¬   Úmax_retriesÚretry_counts        r+   Ú fd_not_exceeding_threadpool_sizer²   ä   sú   € õ
 ”nÑ&Ô&€OØ ×+Ò+Ñ-Ô-€JØ€KØ€Kõ 	Ð?Ð?˜ZÐ?Ñ?Ô?Ñ@Ô@À1ÑDÀÒVÐVØ˜+Ò%Ð%å
Œ
‰ŒˆØ$×/Ò/Ñ1Ô1ˆ
Ø�qÑˆÝˆa‰Œˆõ 	Ð?Ð?˜ZÐ?Ñ?Ô?Ñ@Ô@À1ÑDÀÒVÐVØ˜+Ò%Ð%õ 	Ð?Ð?˜ZÐ?Ñ?Ô?Ñ@Ô@À1ÑDÈÒWÐWÐWÐWÐWÐWr-   c                 óV  — d }| j         pi }d|v r|d         }| j        j        €|S d| j        j        v rs| j        j                             d¦  «        �Td| j        j                             d¦  «        v r3| j        j                             d¦  «                             d¦  «        }n‚d| j        j        v rt| j        j                             d¦  «        �Ud| j        j                             d¦  «        v r4|€2| j        j                             d¦  «                             d¦  «        }|S )Nz
hnsw:spaceÚspannÚspaceÚhnsw)ÚmetadataÚ_modelÚconfiguration_jsonrm   )rS   rµ   r·   s      r+   Ú	get_spacerº   û   s*  € ð €EØÔ"Ð( b€HØ�xÐÐØ˜Ô&ˆØÔÔ+Ð3Øˆà�:Ô$Ô7Ð7Ð7ØÔÔ0×4Ò4°WÑ=Ô=ÐIØ�zÔ(Ô;×?Ò?ÀÑHÔHÐHÐHàÔ!Ô4×8Ò8¸ÑAÔA×EÒEÀgÑNÔNˆˆà�*Ô#Ô6Ð6Ð6ØÔÔ0×4Ò4°VÑ<Ô<ÐHØ�zÔ(Ô;×?Ò?ÀÑGÔGÐGÐGàˆ=ØÔ%Ô8×<Ò<¸VÑDÔD×HÒHÈÑQÔQˆEØ€Lr-   r•   çffffffî?FÚ	n_resultsÚ
min_recallÚembedding_functionÚquery_indicesÚquery_embeddingsÚ
use_searchc           
      ó
  ‡$‡%— t          |¦  «        }t          |d         ¦  «        dk    rdS |d         Š$‰$duot          ‰$¦  «        dk    }	|	s<|€J ‚|d         €J ‚t          |d         t          ¦  «        sJ ‚ ||d         ¦  «        Š$t	          | ¦  «        }
|
€t
          j        }n8|
dk    rt
          j        }n%|
dk    rt
          j        }n|
dk    rt
          j        }d	}‰$€J ‚t          d
„ ‰$D ¦   «         ¦  «        sJ ‚t          ‰$d         ¦  «        }|t          j        dt          t          j        |¦  «        ¦  «        ¦  «        z  }|€|€‰$nˆ$fd„|D ¦   «         }|d         Š%|�‰%�ˆ%fd„|D ¦   «         Š%t          |‰$|¬¦  «        \  }}|rág }|D ]‡}t          |t          j        ¦  «        r|                     ¦   «         }n|}t%          t'          |¬¦  «        t)          |¬¦  «        ¬¦  «                             ¦   «         }|                     |¦  «         Œˆ|                      |¬¦  «        }t1          t2          j        |d         |d         |d         |d         |d         dœ¦  «        }n#|                      |	r|nd|	s‰%nd|g d¢¬¦  «        }t9          ||¦  «         |d         €J ‚|d         €J ‚|d         €J ‚|d         €J ‚|d         €J ‚d„ t;          |d         ¦  «        D ¦   «         }d}t;          t=          ||¦  «        ¦  «        D �]j\  }\  }}t          j        |d         ¦  «        |d|…                  }|t          tA          |¦  «        tA          |d         |         ¦  «        z
  ¦  «        z  }t;          |d         |         ¦  «        D ]â\  }}||v}||         }t          j!        ||         |d         |         |         |¬¦  «        } |r	| r|dz  }nŒK| sJ ‚t          j!        ‰$|         |d         |         |         ¦  «        sJ ‚|d         �&|d         |         |d         |         |         k    sJ ‚|d         �.tE          |d         |         |d         |         |         ¦  «         Œã�Œlt          |d         ¦  «        }!|!|z
  |!z  }"	 tG          d|"› d|› d|!› d|› �¦  «         n# tH          $ r Y nw xY w|"|k    sJ ‚|d         D ]+}#t          j!        t          j%        |#¦  «        |#¦  «        sJ ‚Œ,dS ) zBValidate that the API performs nearest_neighbor searches correctlyrB   r   Nr0   rC   ÚcosineÚipÚl2rM   c              3   óX   K  — | ]%}t          |t          t          j        f¦  «        V — Œ&d S r2   )r*   r3   r9   r:   r@   s     r+   r7   zann_accuracy.<locals>.<genexpr>>  s3   è è € ÐEÐE°Q�z˜!�d¥B¤JÐ/Ñ0Ô0ÐEÐEÐEÐEÐEÐEr-   é
   c                 ó    •— g | ]
}‰|         ‘ŒS r]   r]   )r5   r_   r0   s     €r+   rl   z ann_accuracy.<locals>.<listcomp>G  s   ø€ Ð7Ð7Ð7 A�*˜Q”-Ð7Ð7Ð7r-   c                 ó    •— g | ]
}‰|         ‘ŒS r]   r]   )r5   r_   Úquery_documentss     €r+   rl   z ann_accuracy.<locals>.<listcomp>K  s   ø€ ÐEÐEÐE°!˜?¨1Ô-ÐEÐEÐEr-   )r‘   )r�   )Úlimit)ÚrankrË   )ÚsearchesÚscoresrD   )rB   rœ   r0   rC   rD   )r0   rC   rD   rœ   )rÀ   Úquery_textsr¼   r[   rœ   c                 ó   — i | ]\  }}||“Œ	S r]   r]   r^   s      r+   ra   z ann_accuracy.<locals>.<dictcomp>„  s   € ÐNÐNÐN™U˜Q �2�qÐNÐNÐNr-   )Úatolr•   z
# recall: z
, missing z out of z, accuracy threshold )&rI   rE   r*   r3   rº   r    rÅ   rÃ   rÄ   rF   ÚmathÚpowr<   Úlog10r�   r9   r:   rš   r!   r"   r$   Ú
select_allÚappendÚsearchr   r   ÚQueryResultr�   Ú _query_results_are_correct_shapern   ru   rt   r�   rs   rR   r   r   Úsort)&rS   r.   r¼   r½   r¾   r¿   rÀ   rÁ   rW   Úhave_embeddingsrµ   Údistance_functionÚaccuracy_thresholdÚdimÚindicesrœ   Úsearch_requestsÚquery_embeddingÚquery_embedding_listr×   Úsearch_resultsÚquery_resultsÚid_to_indexÚmissingr_   Ú	indices_iÚdistances_iÚexpected_idsÚjr`   Úunexpected_idÚindexÚcorrect_distancerq   ÚrecallÚdistance_resultr0   rÊ   s&                                       @@r+   Úann_accuracyrð     s‘  øø€ õ % ZÑ0Ô0Ðå
Ð  Ô'Ñ(Ô(¨AÒ-Ð-Øˆà-BÀ<Ô-P€JØ ¨Ð,ÐDµ°Z±´À1Ò1D€OØð LØ!Ð-Ð-Ð-Ø$ [Ô1Ð=Ð=Ð=ÝÐ/°Ô<½dÑCÔCÐCÐCÐCà'Ð'Ð(=¸kÔ(JÑKÔKˆ
å�jÑ!Ô!€EØ€}Ý.Ô1ÐÐØ	�(Ò	Ð	Ý.Ô5ÐÐØ	�$ŠˆÝ.Ô1ÐÐØ	�$ŠˆÝ.Ô1ÐàÐØÐ!Ð!Ð!õ
 ÐEÐE¸*ÐEÑEÔEÑEÔEÐEÐEÐEÝ
ˆj˜ŒmÑ
Ô
€CØ+­d¬h°r½3½t¼zÈ#¹¼Ñ;OÔ;OÑ.PÔ.PÑPÐð Ðð Ð$ð ˆJà7Ð7Ð7Ð7¨Ð7Ñ7Ô7ð 	ð
 ,¨KÔ8€OØÐ  _Ð%@ØEÐEÐEÐE°}ÐEÑEÔEˆå)Ø˜*Ð2Cðñ ô Ñ€GˆYð ð '
àˆØ/ð 
	+ð 
	+ˆOå˜/­2¬:Ñ6Ô6ð 7Ø'6×'=Ò'=Ñ'?Ô'?Ð$Ð$à'6Ð$ÝÝÐ3Ð4Ñ4Ô4Ý )Ð,Ñ,Ô,ðñ ô ÷ Šj‰lŒlð ð ×"Ò" 6Ñ*Ô*Ð*Ð*ð $×*Ò*Ø$ð +ñ 
ô 
ˆõ
 ÝÔà% eÔ,Ø+Øôð -¨\Ô:Ø+¨KÔ8Ø+¨KÔ8ðð ñ
ô 
ˆˆð #×(Ò(Ø1@ÐJÐ-Ð-ÀdØ/>ÐH˜˜ÀDØØIÐIÐIð	 )ñ 
ô 
ˆõ % ]°IÑ>Ô>Ð>ð ˜ÔÐ+Ð+Ð+Ø˜Ô%Ð1Ð1Ð1Ø˜Ô&Ð2Ð2Ð2Ø˜Ô%Ð1Ð1Ð1Ø˜Ô%Ð1Ð1Ð1ð OÐN¥iÐ0EÀeÔ0LÑ&MÔ&MÐNÑNÔN€KØ€GÝ'0µ°W¸iÑ1HÔ1HÑ'IÔ'Ið $ñ $Ñ#ˆÑ#ˆI�{Ý”xÐ 5°eÔ <Ñ=Ô=¸iÈ
ÈÈ
Ô>SÔTˆØ•3•s˜<Ñ(Ô(­3¨}¸UÔ/CÀAÔ/FÑ+GÔ+GÑGÑHÔHÑHˆõ ˜}¨UÔ3°AÔ6Ñ7Ô7ð 	ð 	‰EˆAˆrà lÐ2ˆMØ ”OˆEå!œ{Ø˜EÔ"Ø˜kÔ*¨1Ô-¨aÔ0Ø'ð ñ  ô  Ðð
 ð (ð $ð Ø˜q‘L�G�Gàà'Ð'Ð'Ð'å”;˜z¨%Ô0°-ÀÔ2MÈaÔ2PÐQRÔ2SÑTÔTÐTÐTÐTØ$ [Ô1Ð=à)¨+Ô6°uÔ=Ø$ [Ô1°!Ô4°QÔ7ò8ð 8ð 8ð 8ð % [Ô1Ð=ÝØ)¨+Ô6°uÔ=Ø! +Ô.¨qÔ1°!Ô4ñô ð øñ7	õ@ Ð$ UÔ+Ñ,Ô,€DØ�W‰n Ñ$€FðÝØk˜ÐkÐk¨7ÐkÐk¸DÐkÐkÐWiÐkÐkñ	
ô 	
ð 	
ð 	
øõ ð ð ð Øˆðøøøð �ZÒÐÐÐð )¨Ô5ð Fð FˆÝŒ{�2œ7 ?Ñ3Ô3°_ÑEÔEÐEÐEÐEÐEðFð Fs   Ò R< Ò<
S	ÓS	rä   c                 ól   ‡— dD ]/}| |         €J ‚t          ˆfd„| |         D ¦   «         ¦  «        sJ ‚Œ0d S )N)rœ   r0   rC   rD   c              3   ó>   •K  — | ]}t          |¦  «        ‰k    V — Œd S r2   )rE   )r5   rf   r¼   s     €r+   r7   z3_query_results_are_correct_shape.<locals>.<genexpr>Â  s?   øè è € ð 
ð 
Ø)/�C�‰KŒK˜9Ò$ð
ð 
ð 
ð 
ð 
ð 
r-   )rF   )rä   r¼   Úresult_types    ` r+   rÙ   rÙ   ½  s|   ø€ ð Mð 
ð 
ˆØ˜[Ô)Ð5Ð5Ð5Ýð 
ð 
ð 
ð 
Ø3@ÀÔ3Mð
ñ 
ô 
ñ 
ô 
ð 	
ð 	
ð 
ð 	
ð
ð 
r-   Úsqlitec                 óî  — t          d¦  «        }|                      ¦   «                              |¦  «        }|                      ¦   «         5 }t	          |                     t          j        |j        ¦  «        ¦  «        |  	                    ¦   «         ¦  «        \  }}| 
                    ||¦  «        }t          t          |                     ¦   «         d         ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )NÚembeddings_queuer   )r   ÚquerybuilderÚfrom_Útxr	   Úselectr   ÚCountÚseq_idÚparameter_formatÚexecuter   r<   Úfetchone)rô   ÚtÚqÚcurÚsqlÚparamsrf   s          r+   Ú_total_embedding_queue_log_sizer  Ç  s  € ÝÐ Ñ!Ô!€AØ×ÒÑÔ×#Ò# AÑ&Ô&€Aà	�Š‰Œð /˜ÝØ�HŠH•Y”_ Q¤XÑ.Ô.Ñ/Ô/°×1HÒ1HÑ1JÔ1Jñ
ô 
‰ˆˆVð —’˜S &Ñ)Ô)ˆÝ•C˜ŸšÑ*Ô*¨1Ô-Ñ.Ô.ð/ð /ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /ð /ð /s   ÁBC*Ã*C.Ã1C.ÚsystemÚcollectionsÚhas_collection_mutatedc                 ó”  — |                       t          ¦  «        }| j        j        s| j        j        dk    rd S |rxt          |¦  «        dk    sJ ‚t          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }| j        j        dk    r|n||z   }t          |¦  «        dz
  |k    sJ ‚d S t          |¦  «        dk    sJ ‚d S )Nú!chromadb.api.rust.RustBindingsAPIr•   c              3   ó^   K  — | ](}|j         �|j                              dd¦  «        ndV — Œ)d S )Núhnsw:sync_thresholdéè  ©r·   rm   ©r5   rS   s     r+   r7   z%log_size_below_max.<locals>.<genexpr>ä  s]   è è € ð !
ð !
ð ð Ô"Ð.ð Ô×#Ò#Ð$9¸4Ñ@Ô@Ð@àð!
ð !
ð !
ð !
ð !
ð !
r-   c              3   ó^   K  — | ](}|j         �|j                              dd¦  «        ndV — Œ)d S ©Nzhnsw:batch_sizeéd   r  r  s     r+   r7   z%log_size_below_max.<locals>.<genexpr>ê  s]   è è € ð 
ð 
ð ð Ô"Ð.ð Ô×#Ò#Ð$5°sÑ;Ô;Ð;àð
ð 
ð 
ð 
ð 
ð 
r-   r   )Úinstancer
   ÚsettingsÚis_persistentÚchroma_api_implr  Úsum)r  r  r  rô   Úsync_threshold_sumÚbatch_size_sumrË   s          r+   Úlog_size_below_maxr  Ó  s'  € ð �_Š_�XÑ&Ô&€Fð ŒOÔ)ðàŒOÔ+Ð/RÒRÐRàˆàð <å.¨vÑ6Ô6¸!Ò;Ð;Ð;Ð;õ !ð !
ð !
ð *ð	!
ñ !
ô !
ñ 
ô 
Ðõ ð 
ð 
ð *ð	
ñ 
ô 
ñ 
ô 
ˆð ŒÔ.Ð2UÒUÐUð Ðà# nÑ4ð 	õ /¨vÑ6Ô6¸Ñ:¸eÒCÐCÐCÐCÐCÐCå.¨vÑ6Ô6¸!Ò;Ð;Ð;Ð;Ð;Ð;r-   c           	      óò  ‡‡— |                       t          ¦  «        }t          d¦  «        }|                     ¦   «                              |¦  «        }| j                             d¦  «        Š| j                             d¦  «        Šˆˆfd„|D ¦   «         }|                     ¦   «         5 }t          | 	                    |j
        t          j        |j        ¦  «        ¦  «                             d¦  «        |                     ¦   «         ¦  «        \  }}|                     ||¦  «        }	i }
|	                     ¦   «         D ]}|d         |
||d                  j        <   Œ|
cd d d ¦  «         S # 1 swxY w Y   d S )Nrö   Ú	tenant_idÚtopic_namespacec                 ó>   •— i | ]}t          ‰‰|j        ¦  «        |“ŒS r]   )r   r`   )r5   rS   Ú_tenantÚ_topic_namespaces     €€r+   ra   zB_total_embedding_queue_log_size_per_collection.<locals>.<dictcomp>  s:   ø€ ð ð ð àõ 	˜'Ð#3°Z´]ÑCÔCÀZðð ð r-   Útopicr•   r   )r  r
   r   r÷   rø   r  Úrequirerù   r	   rú   r!  r   rû   rü   Úgroupbyrý   rþ   Úfetchallr`   )r  r  rô   r   r  Útopic_mappingsr  r  r  rf   ÚoutÚresr  r   s               @@r+   Ú._total_embedding_queue_log_size_per_collectionr(  þ  s°  øø€ ð �_Š_�XÑ&Ô&€FÝÐ Ñ!Ô!€AØ×ÒÑÔ×#Ò# AÑ&Ô&€AØŒo×%Ò% kÑ2Ô2€GØ”×.Ò.Ð/@ÑAÔAÐðð ð ð ð à%ðñ ô €Nð 
�Š‰Œð 	˜ÝØ�HŠH�Q”W�iœo¨a¬hÑ7Ô7Ñ8Ô8×@Ò@ÀÑIÔIØ×#Ò#Ñ%Ô%ñ
ô 
‰ˆˆVð —’˜S &Ñ)Ô)ˆØˆØ—?’?Ñ$Ô$ð 	4ð 	4ˆCØ-0°¬VˆC�˜s 1œvÔ&Ô)Ñ*Ð*Øð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   Â*B5E,Å,E0Å3E0c                 óÜ  ‡‡‡— | j         j        dk    rd S |                      t          ¦  «        }|r¥t	          |¦  «        dk    sJ ‚d„ |D ¦   «         Šˆfd„|D ¦   «         Št          | |¦  «        Št          ‰                     ¦   «         ¦  «        t          ‰                     ¦   «         ¦  «        k    sJ ‚t          ˆˆfd„|D ¦   «         ¦  «        sJ ‚d S t	          |¦  «        dk    sJ ‚d S )Nr
  r•   c                 ób   — i | ],}|j         |j        �|j                             dd¦  «        nd“Œ-S r  )r`   r·   rm   r  s     r+   ra   z;log_size_for_collections_match_expected.<locals>.<dictcomp>$  sT   € ð 
ð 
ð 
ð ð ŒMØÔ"Ð.ð &Ô.×2Ò2Ð3DÀcÑJÔJÐJàð
ð 
ð 
r-   c                 óf   •— i | ]-}|j         |                     ¦   «         ‰|j                  z  d z   “Œ.S )r•   )r`   rU   )r5   rS   r  s     €r+   ra   z;log_size_for_collections_match_expected.<locals>.<dictcomp>*  sK   ø€ ð 
ð 
ð 
àð ŒM˜:×+Ò+Ñ-Ô-°¸z¼}Ô0MÑMÐPQÑQð
ð 
ð 
r-   c              3   óP   •K  — | ] }‰|j                  ‰|j                  k    V — Œ!d S r2   )r`   )r5   rS   Úactual_sizesÚexpected_sizess     €€r+   r7   z:log_size_for_collections_match_expected.<locals>.<genexpr>3  sJ   øè è € ð 
ð 
àð ˜œÔ'¨>¸*¼-Ô+HÒHð
ð 
ð 
ð 
ð 
ð 
r-   r   )	r  r  r  r
   r  r(  r�   ÚkeysrF   )r  r  r  rô   r-  r  r.  s       @@@r+   Ú'log_size_for_collections_match_expectedr0    s[  øøø€ ð „Ô&Ð*MÒMÐMàˆà�_Š_�XÑ&Ô&€Fàð <å.¨vÑ6Ô6¸!Ò;Ð;Ð;Ð;ð
ð 
ð *ð	
ñ 
ô 
ˆð
ð 
ð 
ð 
à)ð
ñ 
ô 
ˆõ
 FØ�Kñ
ô 
ˆõ �<×$Ò$Ñ&Ô&Ñ'Ô'­3¨~×/BÒ/BÑ/DÔ/DÑ+EÔ+EÒEÐEÐEÐEÝð 
ð 
ð 
ð 
ð 
à)ð
ñ 
ô 
ñ 
ô 
ð 	
ð 	
ð 
ð 	
ð 	
õ /¨vÑ6Ô6¸!Ò;Ð;Ð;Ð;Ð;Ð;r-   ÚclientÚcollection_namec           
   #   ó  K  — d„ |                       ¦   «         D ¦   «         }||v sJ ‚|                      |¦  «        }g }t          | j        t          ¦  «        �r,| j        j        }|                     |j        ¬¦  «        }i }d}|D ]Ê}d||d         <   |d         t          j	        j
        k    r¢|j        �d|j        v r|j        d         nd}	|                     ¦   «         |	k    rkd}t          j                             t          j                             |                      ¦   «         j        t'          |d         ¦  «        ¦  «        ¦  «        sJ ‚ŒË|r|t          j	        j
                 sJ ‚|t          j        j
                 sJ ‚d V — d	„ |                       ¦   «         D ¦   «         }||vsJ ‚t+          |¦  «        d
k    rÅ| j        j        }|                     |j        ¬¦  «        }
t+          |
¦  «        d
k    sJ ‚|D ]ˆ}|d         t          j	        j
        k    rit          j                             t          j                             |                      ¦   «         j        t'          |d         ¦  «        ¦  «        ¦  «        rJ ‚Œ‡d S d S )Nc                 ó   — g | ]	}|j         ‘Œ
S r]   ©Úname©r5   Úcs     r+   rl   z&collection_deleted.<locals>.<listcomp>?  ó   € ÐBÐBÐB 1˜œÐBÐBÐBr-   )rS   FTÚtyper  r  r`   c                 ó   — g | ]	}|j         ‘Œ
S r]   r5  r7  s     r+   rl   z&collection_deleted.<locals>.<listcomp>a  r9  r-   r   )Úlist_collectionsÚget_collectionr*   Ú_serverr   Ú_sysdbÚget_segmentsr`   r   ÚHNSW_LOCAL_PERSISTEDr'   r·   rU   Úosr¥   ÚexistsÚjoinÚget_settingsÚpersist_directoryÚstrÚSQLITErE   )r1  r2  Úcollection_namesrS   ÚsegmentsÚsysdbÚsegment_typesÚshould_have_hnswÚsegmentÚsync_thresholdÚsegments_afters              r+   Úcollection_deletedrQ  <  s¿  è è € ð CÐB¨×(?Ò(?Ñ(AÔ(AÐBÑBÔBÐØÐ.Ð.Ð.Ð.Ð.Ø×&Ò& Ñ7Ô7€JØ€HÝ�&”.¥*Ñ-Ô-ñ 7Ø”~Ô,ˆØ×%Ò%°´Ð%Ñ?Ô?ˆØˆØ ÐØð 	ð 	ˆGØ-1ˆM˜' &œ/Ñ*Ø�vŒ¥+Ô"BÔ"HÒHÐHð "Ô*Ð6Ø-°Ô1DÐDÐDð Ô'Ð(=Ô>Ð>ð ð	 ð ×$Ò$Ñ&Ô&¨Ò7Ð7à'+Ð$Ýœ7Ÿ>š>ÝœŸšØ"×/Ò/Ñ1Ô1ÔCÅSÈÐQUÌÑEWÔEWñô ñô ð ð ð øð
 ð 	IØ ¥Ô!AÔ!GÔHÐHÐHÐHØ�[Ô/Ô5Ô6Ð6Ð6Ð6à	€E€E€Eð CÐB¨×(?Ò(?Ñ(AÔ(AÐBÑBÔBÐØÐ"2Ð2Ð2Ð2Ð2Ý
ˆ8�}„}�qÒÐØ”~Ô,ˆØ×+Ò+°z´}Ð+ÑEÔEˆÝ�>Ñ"Ô" aÒ'Ð'Ð'Ð'Øð 	ð 	ˆGØ�vŒ¥+Ô"BÔ"HÒHÐHÝœ7Ÿ>š>Ý”G—L’LØ×+Ò+Ñ-Ô-Ô?ÅÀWÈTÄ]ÑASÔASñô ñô ð ð ð øð Ðð	ð 	r-   )r•   r»   NNNF)`r­   rÒ   Úos.pathrB  Úuuidr   Ú
contextlibr   Úchromadb.api.segmentr   Úchromadb.db.systemr   Úchromadb.ingest.impl.utilsr   Úchromadb.configr   Úchromadb.db.baser	   Úchromadb.db.impl.sqliter
   Útimer   rª   Úchromadb.segmentr   Ú!chromadb.test.property.strategiesr   r   Útypingr   r   r   r   r   r   r   r   r   Útyping_extensionsr   Únumpyr9   Únumpy.typingro   Úchromadb.apir   r   Úchromadb.api.models.Collectionr   Ú
hypothesisr   Úhypothesis.errorsr   Úpypikar   r   Úchromadb.utilsr    Ú"chromadb.execution.expression.planr!   Ú&chromadb.execution.expression.operatorr"   r#   r$   r%   r&   r,   rI   rw   rR   rU   r|   r�   r…   r‰   r‹   rŽ   rÅ   rG   Ú	ArrayLiker=   r<   r�   r²   rº   ÚEmbeddingFunctionÚboolrð   rØ   rÙ   r  r  r(  r0  rG  rQ  r]   r-   r+   ú<module>rm     s¸  ðØ 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %à +Ð +Ð +Ð +Ð +Ð +Ø $Ð $Ð $Ð $Ð $Ð $Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8à "Ð "Ð "Ð "Ð "Ð "Ø $Ð $Ð $Ð $Ð $Ð $Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ð Ð Ø €€€à (Ð (Ð (Ð (Ð (Ð (Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SØ %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø Ð Ð Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #à -Ð -Ð -Ð -Ð -Ð -Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jà€GˆC�L„L€ð��a˜˜aœ�jÔ!ð  d¨1¤gð ð ð ð ð,˜ð ,Ð':ð ,ð ,ð ,ð ,ð^1Ø�u”~Ô&ð1Ø-5°e´nÔ-Eð1à	ð1ð 1ð 1ð 1ð 6�jð 6¨ið 6¸Dð 6ð 6ð 6ð 6ð45Øð45à.ð45ð Ø�Ô˜g kÔ2°G¸LÔ4IÐIôð45ð 
ð45ð 45ð 45ð 45ðn6˜*ð 6°)ð 6Àð 6ð 6ð 6ð 6ðC 
ð C¸	ð CÀdð Cð Cð Cð CðC 
ð C¸	ð CÀdð Cð Cð Cð CðD ð D¸ð DÀtð Dð Dð Dð Dð%˜jð %¨Tð %ð %ð %ð %ð 	Ôð>ð >ØÔð>àÔð>ð Ø	Œ˜œÐ&¨Ð-ôð>ð ˆ4��S”	Œ?˜D  e¤Ô-Ð-Ô.ð>ð >ð >ð >ð*°cð ¸dð ð ð ð ð.˜*ð ð ð ð ð: ØØ<@Ø)-Ø37ØðeFð eFØðeFàðeFð ðeFð ð	eFð
 ! Ô!8Ô9ðeFð ˜D œIÔ&ðeFð ˜uÔ/Ô0ðeFð ðeFð 
ðeFð eFð eFð eFðP
ØÔ$ð
Ø14ð
à	ð
ð 
ð 
ð 
ð	/¨Hð 	/¸ð 	/ð 	/ð 	/ð 	/ð(<Øð(<Ø!% jÔ!1ð(<ØKOð(<à	ð(<ð (<ð (<ð (<ðVØðà�jÔ!ðð 
ˆ$�ˆ)„_ðð ð ð ð2"<Øð"<Ø!% jÔ!1ð"<ØKOð"<à	ð"<ð "<ð "<ð "<ðJ ð0˜yð 0¸3ð 0ð 0ð 0ñ „ð0ð 0ð 0r-   