
    ZiY                        U d dl Z d dlZd dlmZ d dl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Zd dlmZ d dlmc mZ d dlZd dlmZ d dlmZmZ d dlmZ d dlm Z  d dlm!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 d d	l1m2Z2m3Z3m4Z4 d d
lm5Z5 d dl6m7Z7m8Z8m9Z9 d dl:m;Z; ej<        =                    d            ddddZ> G d de?          Z@ G d de@          ZA G d de@          ZB G d de@          ZC G d de          ZDdZE ejF        eEd          ZGdZH ejF        eHd          ZI ejF        eEd          ZJeJK                    d           ZJeGK                    d           ZGeIK                    d            ZI ejL        d!d"#          ZM ejN        d$d$d$d%d&d'(          ZOeGeMeO ejP                    gZQeee
eReSeTeUf                           eVd)<   d*ej        e         d+ej        e         d,ej        e         fd-ZWd.ZXejY        ejZ        ej[        gZ\ej]        ej^        ej_        gZ`eja        d/ejb        d,eTfd0            Zc ejd         eje                     ejf        eG ejd        eQ                     Zgd1eRd2eRd3ejh        d,ej$        fd4Zid1eRd2eRd3ejh        d,ej        jj        e         fd5Zk G d6 d7ej#        e!                   Zl G d8 d9ej#        e!                   Zmd1eRd3ejh        d,ej        ej#        e"                  fd:Zne  G d; d<                      Zoe; G d= d>e                      Zpeja        d/ejb        d,e(fd?            Zqeja        d/ejb        d,e)fd@            Zreja        d/ejb        d,ee&         fdA            Zseja        d/ejb        d,ee'         fdB            Zteja        d/ejb        d,ee7         fdC            Zue  G dD dE                      ZvdFe	eTef         d,e	eTef         fdGZwdHe(d,e	eTef         fdIZxeja        d/ejb        d,ee&e	eTef         f         fdJ            Zyeja        d/ejb        d,evfdK            Zze  G dL dMeo                      Z{eja        d$d$dd ej|        d$          dNdNfd/ejb        dOeUdPeUdQeeU         dReeU         dSej        eU         dTeRdUeRd,e{fdV            Z}eja        	 	 drd/ejb        dWe{dXeRdYeeR         d,eej%                 f
dZ            Z~eja        d/ejb        dWe{d,ej        fd[            Zeja         e}            eGdd\dd dfd/ejb        d]ee{         d^eeT         dXeRdYeRd_eeR         d`eRdaeeR         d,eAfdb            Zdce2d,ee         fddZeja        d/ejb        dWe{d,ej        fde            Zeja        d/ejb        dWe{d,ej        fdf            Zdgeej                 d,eej                 fdhZdgeej                 d,eej                 fdiZeja        d/ejb        dWe{d,ej        fdj            Zeja        d/ejb        dWe{d,ej        fdk            Z G dl dme          Zeja        	 dsd/ejb        dnej        e{         doej        eA         dpeUd,ef
dq            ZdS )t    N)AnyOptionalListDictUnioncastTuple)	TypedDict)SearchStrategy)SimpleEmbeddingFunction$DeterministicSparseEmbeddingFunction)NOT_CLUSTER_ONLY)	dataclass)	Documents
EmbeddableEmbeddingFunction
EmbeddingsMetadataSchemaCollectionMetadataVectorIndexConfigSparseVectorIndexConfigStringInvertedIndexConfigIntInvertedIndexConfigFloatInvertedIndexConfigBoolInvertedIndexConfigHnswIndexConfigSpannIndexConfigSpace)LiteralValueWhereOperatorLogicalOperator)is_spann_disabled_mode)CreateCollectionConfigurationCreateSpannConfigurationCreateHNSWConfiguration)register_embedding_function   )hnsw:construction_efhnsw:search_efhnsw:Mc                   ,     e Zd ZdZdZdef fdZ xZS )_TruncatedReprDictz`Dict subclass that truncates its repr to avoid overwhelming output in hypothesis error messages.  returnc                     t                                                      }t          |          | j        k    r|S |d | j                 dz   S )Nz...})super__repr__len_REPR_MAX_LEN)selffull	__class__s     ^/root/projects/butler/venv/lib64/python3.11/site-packages/chromadb/test/property/strategies.pyr2   z_TruncatedReprDict.__repr__R   sJ    ww!!t99***K(d(()F22    )__name__
__module____qualname____doc__r4   strr2   __classcell__)r7   s   @r8   r-   r-   M   sO        jjM3# 3 3 3 3 3 3 3 3 3 3r9   r-   c                       e Zd ZU dZeej        eej                 f         ed<   e	eej
        ej        f                  ed<   e	eee	ej                          ej        f                  ed<   e	eeej                 ej        f                  ed<   dS )	RecordSetz|
    A generated set of embeddings, ids, metadatas, and documents that
    represent what a user would pass to the API.
    ids
embeddings	metadatas	documentsN)r:   r;   r<   r=   r   typesIDr   __annotations__r   r   	Embeddingr   Document r9   r8   rA   rA   Y   s          
 
uxeh'	((((u/@ABBBBd8EN#;<enLMNNNNd5>2ENBCDDDDDDr9   rA   c                       e Zd ZU dZeej                 ed<   eej	                 ed<   eeeej
                                   ed<   eeej                          ed<   dS )NormalizedRecordSetz;
    A RecordSet, with all fields normalized to lists.
    rB   rC   rD   rE   N)r:   r;   r<   r=   r   rF   rG   rH   r   r   r   rJ   rK   r9   r8   rM   rM   e   sy           
eh)****Xen567777U^,------r9   rM   c                       e Zd ZU dZeej                 ed<   ej        ed<   ee	ej
                          ed<   ee	ej                          ed<   dS )StateMachineRecordSetzO
    Represents the internal state of a state machine in hypothesis tests.
    rB   rC   rD   rE   N)r:   r;   r<   r=   r   rF   rG   rH   r   r   r   rJ   rK   r9   r8   rO   rO   p   so           
eh    HU^,----HU^,------r9   rO   c                       e Zd ZU dZej        ed<   eej                 ed<   eej	                 ed<   eej
                 ed<   dS )Recordz$
    A single generated record.
    id	embeddingmetadatadocumentN)r:   r;   r<   r=   rF   rG   rH   r   rI   r   rJ   rK   r9   r8   rQ   rQ   {   sb           	LLL((((u~&&&&u~&&&&&&r9   rQ   z@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_   )alphabetmin_sizez?abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-   c                     |                      d           oA|                      d           o+|                     d           o|                     d           S )N_-)
startswithendswithss    r8   <lambda>ra      s    cARAR=R  >][\[g[ghk[l[lWl  >]uvuu  AD  vE  vE  rE  >]  NO  NX  NX  Y\  N]  N]  J] r9   c                 .    |                      d           S N_sar]   r_   s    r8   ra   ra      s    1<<+>+>'> r9   c                 .    |                      d           S rc   re   r_   s    r8   ra   ra      s    eATAT=T r9      	min_value	max_valueF    g    .g    .A)allow_infinity	allow_nanallow_subnormalwidthrj   rk   safe_values
strategy_a
strategy_br/   c                     t          j        t          j        | |          t          j        | t          j                              t          j        t          j                    |                    S N)stone_oftuplesnone)rr   rs   s     r8   one_or_bothrz      sQ     9
	*j))
	*bgii((
	"'))Z((  r9   zCabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_./+drawc                 |   t          j        d          }t          j        d          }t          j        d          } | t          j        |                                                    }t          j        |                    |                      t          j        |                    |                      |S )Nz'^[a-zA-Z][a-zA-Z0-9-]{1,60}[a-zA-Z0-9]$z^([0-9]{1,3}\.){3}[0-9]{1,3}$z\.\.)	recompilerv   
from_regexstrip
hypothesisassumematchsearch)r{   _collection_name_re_ipv4_address_re_two_periods_renames        r8   collection_namer      s    *%OPPz"BCCj))OR]#67788>>@@D*00666777/00666777Kr9   dimcountdtypec           	          t          t          j        t          j                            dd|| f                              |                                                    }|S Ng            ?)lowhighsize)r   rF   r   nprandomuniformastypetolist)r   r   r   rC   s       r8   create_embeddingsr      s^    
 $(IS\   
 VE]]VXX$ $J r9   c                 p    t           j                            dd|| f                              |          S r   )r   r   r   r   )r   r   r   s      r8   create_embeddings_ndarrayr      s=    
 9S\    fUmm	r9   c                   \    e Zd Zdedej        ddfdZdej        dej	        fdZ
defdZdS )	hashing_embedding_functionr   r   r/   Nc                 "    || _         || _        d S ru   r   r   )r5   r   r   s      r8   __init__z#hashing_embedding_function.__init__   s    


r9   inputc                 X     d |D             } fd|D             } fd|D             }|S )Nc           	          g | ]H}t          t          j        |                    d                                                               IS )zutf-8)listhashlibsha256encode	hexdigest).0texts     r8   
<listcomp>z7hashing_embedding_function.__call__.<locals>.<listcomp>   sO     
 
 
GKDG 4 455??AABB
 
 
r9   c           	          g | ]<}|j         t          |          z  z  |d j         t          |          z           z   =S ru   )r   r3   r   r   r5   s     r8   r   z7hashing_embedding_function.__call__.<locals>.<listcomp>   sX     
 
 
 DHD		)*T2HDHs4yy4H2H-II
 
 
r9   c                 Z    g | ]'}t          j        d  |D             j                  (S )c                 4    g | ]}t          |d           dz  S )   g      .@)int)r   chars     r8   r   zBhashing_embedding_function.__call__.<locals>.<listcomp>.<listcomp>  s%    <<<tc$mmd*<<<r9   )r   )r   arrayr   r   s     r8   r   z7hashing_embedding_function.__call__.<locals>.<listcomp>  sI     (
 (
 (
 H<<t<<<DJOOO(
 (
 (
r9   rK   )r5   r   hashed_textspadded_textsrC   s   `    r8   __call__z#hashing_embedding_function.__call__   sy    
 
OT
 
 

 
 
 
$
 
 
(
 (
 (
 (
$(
 (
 (


 r9   c                 (    d| j          d| j         dS )Nzhashing_embedding_function(dim=z, dtype=)r   r5   s    r8   r2   z#hashing_embedding_function.__repr__  s    PPP4:PPPPr9   )r:   r;   r<   r   npt	DTypeLiker   rF   r   r   r   r>   r2   rK   r9   r8   r   r      s        C  $    eo %2B    &Q# Q Q Q Q Q Qr9   r   c                       e Zd ZdedefdZdS )"not_implemented_embedding_functionr   r/   c                     J d            )NFz*This embedding function is not implementedrK   )r5   r   s     r8   r   z+not_implemented_embedding_function.__call__  s    BBBBBr9   N)r:   r;   r<   r   r   r   rK   r9   r8   r   r     s>        Ci CJ C C C C C Cr9   r   c           	          t          j        t          t          t                   t          | |                              S ru   )rv   justr   r   r   r   r   s     r8   embedding_function_strategyr     s6     7z*,FsE,R,RSS  r9   c                   j    e Zd ZU dZeed<   eej                 ed<   eej	        e
                  ed<   dS )ExternalCollectiona  
    An external view of a collection.

    This strategy only contains information about a collection that a client of Chroma
    sees -- that is, it contains none of Chroma's internal bookkeeping. It should
    be used to test the API and client code.
    r   rT   embedding_functionN)r:   r;   r<   r=   r>   rH   r   rF   r   r   r   rK   r9   r8   r   r     sS           IIIu~&&&& !8!DEEEEEEr9   r   c                       e Zd ZdZdefdZdS )SimpleIpEmbeddingFunctionz>Simple embedding function with ip space for persistence tests.r/   c                     dS )NiprK   r   s    r8   default_spacez'SimpleIpEmbeddingFunction.default_space1  s    tr9   N)r:   r;   r<   r=   r>   r   rK   r9   r8   r   r   -  s5        HHs      r9   r   c                    d}d}d}d}d} | t          j                              r | t          j        g d                    } | t          j                              r-t           | t          j        dd                              } | t          j                              r5 | t          j        t          j        d          t                              } | t          j        g d                    }|d	k    r=t           | t          j                              r | t          j        dd                    nd | t          j                              r | t          j        dd                    nd | t          j                              r | t          j        dd                    nd | t          j                              r | t          j        d
d                    nd | t          j                              r | t          j	        dd                    nd          }n|dk    rt           | t          j                              r | t          j        dd                    nd | t          j                              r | t          j        dd                    nd | t          j                              r | t          j        dd                    nd | t          j                              r | t          j        dd                    nd | t          j                              r | t          j        dd                    nd | t          j                              r | t          j        dd                    nd | t          j                              r | t          j        dd                    nd | t          j                              r | t          j        dd                    nd          }t          t          t          |          ||||          S )z\Generate VectorIndexConfig with optional space, embedding_function, source_key, hnsw, spann.Ncosinel2r   rV   r.   ri   r   	#document)hnswspannry   r      '  r         @)ef_constructionmax_neighbors	ef_searchsync_thresholdresize_factorr   r(   @      2      d   )search_nprobewrite_nprober   r   r   reassign_neighbor_countsplit_thresholdmerge_threshold)spacer   
source_keyr   r   )rv   booleanssampled_fromr   integersrw   r   	safe_textr   floatsr   r   r   r   )r{   r   r   r   r   r   index_choices          r8   vector_index_config_strategyr   5  sX    EJDEtBKMM >R_%;%;%;<<==tBKMM 
6R[1===>>
 
 
 tBKMM FT")BGK$8$8)DDEE
4(A(A(ABBCCLvtBKMM""DDqD!I!I!IJJJtBKMM""$$r{Q$GGGHHHtBKMM""dd2;dCCCDDDtBKMM""44a5 I I IJJJtBKMM""$$ry3#FFFGGG
 
 
" 
	 	  tBKMM""$$r{Q#FFFGGGtBKMM""bkADDDEEEtBKMM""DDqC!H!H!HIIItBKMM""dd2;cBBBCCCtBKMM""$$r{Q"EEEFFFtBKMM""%DDqB)O)O)O$P$P$PtBKMM""DDrS!I!I!IJJJtBKMM""DDrS!I!I!IJJJ1
 
 
6 5%  -   r9   c                 `   d}d}d} | t          j                              rCt                      } | t          j        t          j        d          t
                              } | t          j                              r | t          j                              }t          |||          S )zTGenerate SparseVectorIndexConfig with optional embedding_function, source_key, bm25.Nr   )r   r   bm25)rv   r   r   rw   r   r   r   )r{   r   r   r   s       r8   #sparse_vector_index_config_strategyr     s     JDtBKMM FACCT")BGK$8$8)DDEE
tBKMM #tBKMM"""-   r9   c                     | t          j                              rdS t                      } | t          j        dd                    }d}t	          |          D ]`} | t          j        ddg                    } | t          j        g d                    } | t          j                              }d}|r|d	k    r | t                    }|dk    r2|d
k    r$|                    t                      |           |dk    r$|                    t                      |           |dk    r$|                    t                      |           |dk    r%|                    t                      |           '|d	k    r0 | t                                }	|                    |	d           ]|dk    rKt          sD|sB | t                                }
| | t                    }|                    |
|           d}|dk    r|d
k    r%|                    t                      |           |dk    r%|                    t                      |           |dk    r%|                    t                      |           7|dk    r#|                    t                      |           b|S )zKGenerate a Schema object with various create_index/delete_index operations.Nr      ri   Fcreate_indexdelete_index)string_invertedint_invertedfloat_invertedbool_invertedvectorsparse_vectorr   r   configkeyr   r   r   r   T)rv   r   r   r   ranger   r   r   r   r   r   r   r   r#   r   r   )r{   schemanum_operationssparse_index_createdr[   	operationconfig_typeuse_keyr   vector_configsparse_configs              r8   schema_strategyr    s"    tBKMM tXXF T"+Q???@@N >"" 6O 6OD..)IJJKK	dO  	 	
 
 $r{}}%% 	"{h..$y//C&&///##+D+F+FC#PPPP..##+A+C+C#MMMM 000##+C+E+E3#OOOO//##+B+D+D##NNNN(( $%A%C%C D D##=d#CCCC... /, / !%%H%J%J K K;$y//C##=c#BBB'+$.((///##+D+F+FC#PPPP..##+A+C+C#MMMM 000##+C+E+E3#OOOO//##+B+D+D##NNN Mr9   c                    i } | t          j                              r" | t          j        g d                    |d<    | t          j                              r" | t          j        dd                    |d<    | t          j                              r" | t          j        dd                    |d<    | t          j                              r" | t          j        dd                    |d<    | t          j                              r" | t          j        d	d
                    |d<    | t          j                              r" | t          j        dd                    |d<   |r|ndS )z'Generate metadata with hnsw parameters.r   
hnsw:spacerV   r.   ri   r)   r*   r+   r   r   zhnsw:resize_factorr   r   hnsw:sync_thresholdN)rv   r   r   r   r   )r{   rT   s     r8   metadata_with_hnsw_strategyr	    s    $&HtBKMM O!%bo6L6L6L&M&M!N!NtBKMM 
+/4K!t444,
 ,
'( tBKMM T%)T"+T*R*R*R%S%S!"tBKMM L!T"+T"J"J"JKKtBKMM W)-bi#QT.U.U.U)V)V%&tBKMM 
*.$K!u555+
 +
&'  )88T)r9   c                 n   i } | t          j                              r0t           | t          j        dd                              |d<    | t          j        g d                    }|dk    r2t           | t          j        g d                    	          |d
<   n|dk    r2t           | t          j        g d                    	          |d<   nS|d
k    ri } | t          j                              r" | t          j        g d                    |d<    | t          j        dd                    |d<    | t          j        dd                    |d<    | t          j        dd                    |d<    | t          j        dd                    |d<    | t          j        dd                    |d<   ||d
<   n\|dk    rUi } | t          j                              r" | t          j        g d                    |d<    | t          j        dd                    |d<    | t          j        dd                    |d<    | t          j        dd                    |d<    | t          j        dd                    |d<    | t          j        dd                    |d<    | t          j        dd                    |d<    | t          j        dd                    |d<    | t          j        dd                     |d!<   ||d<   |r|nd"S )#zEGenerate CreateCollectionConfiguration with mutual exclusivity rules.rV   r.   ri   r   r   )space_only_hnswspace_only_spannr   r   ry   r  r   )r   r   r  r   r   r   r   r   r   r   r   r   r   r   r(   r   r   r   r   r   r   r   r   r   r   N)rv   r   r   r   r   r&   r%   r   )r{   configurationconfig_choicehnsw_configspann_configs        r8   create_configuration_strategyr    s   
 46M tBKMM 
.GR[1===>>/
 /
 /
*+
 D
LLL	
 	
 M ))) 7$r'='='=>>??!
 !
 !
f 
,	,	,!9$r'='='=>>??"
 "
 "
g 
&	 	 /14 	Q#'48N8N8N(O(O#P#PK )-bkAQU.V.V.V)W)W%&#'4a4(P(P(P#Q#QK '+tBK!t,T,T,T'U'UO$(,R[1PU-V-V-V(W(W$%'+tBIs,S,S,S'T'TO$ +f	'	!	!134 	R$(D9O9O9O)P)P$Q$QL!(,R[1PS-T-T-T(U(U_%'+tBK!r,R,R,R'S'S^$*.$r{QRU/V/V/V*W*W&'$(DqC)P)P)P$Q$Q[!(,R[1PR-S-S-S(T(T_%26$K!r2223
 3
./ +/$r{RSV/W/W/W*X*X&'*.$r{RSV/W/W/W*X*X&'!-g)3==t3r9   c                       e Zd ZU dZee         ed<   ee         ed<   ee         ed<   ee	e
ef                  ed<   e
ed<   dS )CollectionInputCombinationz4
    Input tuple for collection creation tests.
    rT   r  r   schema_vector_infokindN)r:   r;   r<   r=   r   r   rH   r$   r   r   r>   r   rK   r9   r8   r  r  3  ss           )****9::::V c3h0000
IIIIIr9   r  itemsc                 >    d |                                  D             S )Nc                     i | ]
\  }}|||S ru   rK   r   kvs      r8   
<dictcomp>z"non_none_items.<locals>.<dictcomp>A  s    <<<TQamAqmmmr9   r  r  s    r8   non_none_itemsr  @  s    <<U[[]]<<<<r9   r   c                 6   d }| j         At          | j         d          r,t          t          | j                                                   }| j        | j        r| j                            d          nd | j        r| j                            d          nd |dS )Nr   T)exclude_none)r   r   r    embedding_function_default_space)	r   hasattrr   r>   r   r   r   
model_dumpr   )r   embedding_default_spaces     r8   vector_index_to_dictr%  D  s    -1 ,!?2 2, #'sF,E,S,S,U,U"V"V =C[R&&D&999d?E|U((d(;;;QU,C	  r9   c                     t                      } | t                                }|                    |d            |t          |          fS )Nr   )r   r   r   r%  )r{   r   r  s      r8   _schema_input_strategyr'  S  sP     XXFD57788M
}$777'6666r9   c                 t    | t          j        g d                    }d}d}d}d}|dv r+ | t                                          d                     }|dv r+ | t	                                          d                     }|dk    r | t                                \  }}t          |||||          S )	zY
    Generate compatible combinations of metadata, configuration, and schema inputs.
    )ry   rT   r  metadata_configurationr   N)rT   r)  c                 0    | d uot          |           dk    S )Nr   )r3   values    r8   ra   z8metadata_configuration_schema_strategy.<locals>.<lambda>y  s    e4/BCJJN r9   )r  r)  c                     | d uo_|                      d          d urt          | d                   dk    p/|                      d          d uot          | d                   dk    S )Nr   r   r   )getr3   r+  s    r8   ra   z8metadata_configuration_schema_strategy.<locals>.<lambda>  sn    e4/ YYv&&d2Ms5=7I7IA7M T		'**$6R3uW~;N;NQR;R r9   r   )rT   r  r   r  r  )rv   r   r	  filterr  r'  r  )r{   choicerT   r  r   schema_infos         r8   &metadata_configuration_schema_strategyr2  ]  s    T
  	
 	

 
F .2H=AM#F,0K7774'))00BB 
 
 <<<)++22  
 
 "d#9#;#;<<%#&   r9   c                       e Zd ZU dZej        ed<   eed<   ej	        ed<   e
j        ed<   ee         ed<   dZeed<   dZeed	<   d
Zee         ed<   d
S )
Collectionz
    An internal view of a collection.

    This strategy contains all the information Chroma uses internally to manage a
    collection. It is a superset of ExternalCollection and should be used to test
    internal Chroma logic.
    rR   	dimensionr   known_metadata_keysknown_document_keywordsFhas_documentshas_embeddingsNcollection_config)r:   r;   r<   r=   uuidUUIDrH   r   r   r   rF   r   r   r>   r8  boolr9  r:  r   r$   rK   r9   r8   r4  r4    s           		MMMNNN='''!#Y&&&M4 ND   AEx =>EEEEEr9   r4  i  add_filterable_datawith_hnsw_paramsr9  r8  with_persistent_hnsw_paramsmax_hnsw_batch_sizemax_hnsw_sync_thresholdc                 z   |du r|du rJ  | t                                } | t                    }	 | t          j        dd                    }
 | t          j        t
                              } | |          }|r|st          d          |r|	i }	|	                    t                     |rY | t          j        d|                    |	d<    | t          j        dt          |	d         |g                              |	d	<    | t          j
                              r" | t          j        g d
                    |	d<   d}t          s$|	r|	                    dd          nd}|ddd}d|i}i }|rUt          |          dk     rB | t                    } | t          j        t                      ||<   t          |          dk     B| | t          j
                              }|J t"          s-|r(|r& | t          j        t&          dd                    }n/g }n,|r(|r& | t          j        t          dd                    }ng }|sd}n| | t          j
                              }|J  | t)          |
|                    }t+          t-          j                    ||	|
|||||||          S )zStrategy to generate a Collection object. If add_filterable_data is True, then known_metadata_keys and known_document_keywords will be populated with consistent data.Fr   i   ri   z@with_persistent_hnsw_params requires with_hnsw_params to be trueNrY   r  zhnsw:batch_sizer   r  r      )r   r   r   r   r   rX   max_sizeT)rR   r   rT   r5  r   r6  r8  r7  r9  r   r:  )r   collection_metadatarv   r   r   float_types
ValueErrorupdatetest_hnsw_configminr   r#   r.  r3   r   rw   rq   r   listssafe_text_min_size_3r   r4  r;  uuid4)r{   r>  r?  r9  r8  r@  rA  rB  r   rT   r5  r   use_persistent_hnsw_paramsr:  spann_spacer  r6  r   r7  r   s                       r8   collectionsrR    s     5((}/E/E/E/E4!!""Dt'((HR[1===>>ID--..E!%&A!B!B! 
*: 
N
 
 	
  SH()))% 	.2da3JKKK/ /H*+ +/$!!"78:MN   + +H&' 4 	S &*T"/:P:P:P*Q*Q%R%RH\"AE! 
:BLhll<666 !'(2
 2
 \
 >@ E%&&**$y//C'+tBI{,C'D'D$ %&&** R[]]++$$$  ) 	)0 	)&*d-AFFF' '## ')## 	)0 	)&*d28ITU+V+V+V&W&W##&(# 1!!T"+--00N%%%9)UKKLL:<</# 7%-+   r9   
collectionrX   rF  c                     | t          j        t          t          j        t           ||                    }|j        rx|j                                        D ]	}||v r||= 
d |j                                        D             }|                     | t          j	        i |                               |i k    rdS |S )zMStrategy for generating metadata that could be a part of the given collectionrE  c                     i | ]<\  }}t          |t          t          t          f          '|t	          j        |          =S rK   )
isinstancer>   r   floatrv   r   r  s      r8   r  zmetadata.<locals>.<dictcomp>.  sT     O
 O
 O
1!c3.//O
rwqzzO
 O
 O
r9   )optionalN)
rv   dictionariesr   rw   rq   r6  keysr  rJ  fixed_dictionaries)r{   rS  rX   rF  rT   r   sampling_dicts          r8   rT   rT     s      $t
ry+.H	
 	
 	
   H % 
Q16688 	" 	"ChSMO
 O
"6<<>>O
 O
 O

 	R22NNNOOPPP2~~tOr9   c                     t           sd}|j        rt          j        |j                  }n)t          j        dt          j        |                    }t          j        dt          j        |                    } | t          j        t          j        ||          d                    }d                    |          S d}|j        rt          j        |j                  }n)t          j        dt          j        |                    }t          j        dt          j        |                    } | t          j        t          j        ||          d                    }d                    |          S )	zNStrategy for generating documents that could be a part of the given collection)CcCsPcPorY   )blacklist_categories)rX   rW   rV   rX    )r^  r_  )	r   r7  rv   r   r   
charactersrM  rw   join)r{   rS  rb  known_words_strandom_words_stwordss         r8   rU   rU   :  s}       8- 	_Z-OPPNNW<PQQQ  N
 'DX!Y!Y!Y
 
 
 RXbiHHSTUUUVVxx () 
)KLL]8LMMM
 
 

 gR]@TUUU  O D")NODDqQQQRRE88E??r9   r   collection_strategyid_strategynum_unique_metadatamin_metadata_sizemax_metadata_sizec           
      >    | |          }t           | t          j        |||d                              }	d }
|j        r(t	          |j        t          |	          |j                  }
||nt          |	          } | t          j        t          |||          ||                    }g }t          t          |	                    D ]-}|
                    ||t          |          z                      .d }|j        rG | t          j        t          |          t          |	          t          |	                              }t          |	          dk    r | t          j                              r|	d         n|	}|
$ | t          j                              r|
d         n|
} | t          j                              r|d         n|}|$ | t          j                              r|d         n|}t          ||||          S t          |	|
||          S )NT)rX   rF  uniquerE  rV   r   )rB   rC   rD   rE   )r   rv   rM  r9  r   r5  r3   r   rT   r   appendr8  rU   r   rA   )r{   rj  rk  rX   rF  rl  rm  rn  rS  rB   rC   num_metadatagenerated_metadatasrD   irE   	single_idsingle_embeddingsingle_metadatasingle_documents                       r8   
recordsetsry  e  sl    )**J
RXkHxPTUUUVV C (,J  Y&z';SXXzGWXX
*=*I&&sSVxxL$
%6AR   "!	
 	
 	
  I3s88__ L L,Q5H1I1I-IJKKKK%)I 
DHXj))CHHs3xxPPP
 
	 3xx1}}59T"+--5H5H+Q3q66c	 %$$r{}}*=*=% qMM 	 !D//>IaLLY 	 &1dd2;==6I6I1IaLLy 	 '%%	
 
 
 	
 	   r9   r,  c                 8    t           t                    rt                               fd          S t           t                    rt
                               fd          S t           t                    r)t          j                                         fd          S t           t                    r,t          j
        dd                               fd          S t          j        t                                                    fd          S )	zi
    Returns a strategy that will generate all valid values except the input value - testing of $nin
    c                     | k    S ru   rK   xr,  s    r8   ra   z opposite_value.<locals>.<lambda>  s    AJ r9   c                     | k    S ru   rK   r|  s    r8   ra   z opposite_value.<locals>.<lambda>  s    !u* r9   c                     | k    S ru   rK   r|  s    r8   ra   z opposite_value.<locals>.<lambda>  s    a5j r9   rg   rh   ri   c                     | k    S ru   rK   r|  s    r8   ra   z opposite_value.<locals>.<lambda>  s    a5j r9   c                     | k    S ru   rK   r|  s    r8   ra   z opposite_value.<locals>.<lambda>  s    !u* r9   )rV  rW  safe_floatsr/  r>   r   r=  rv   r   r   r   	from_typetyper+  s   `r8   opposite_valuer    s    % F!!"6"6"6"6777	E3		 	F 4 4 4 4555	E4	 	  F{}}##$8$8$8$8999	E3		 F{XCCCJJ    
 
 	
 |DKK((//0D0D0D0DEEEr9   c                 L    t          |j                                                  }  t          j        |                    }|j        |         dg}t          t                    r|                    g d           nt          t                    r|                    g d           ntt          t                    r|                    g d           nGt          t                    r|                    g d           nJ dt                                 t          t                    rC  t          j        ddg                    z   t          t          j                              t          j        |                    }||iS |d	k    r<t          t                    rsi S ||g fd
t          d          D             iiS |dk    r9t          t                    rsi S || fdt          d          D             iiS ||iiS )zLGenerate a filter that could be used in a query against the given collectionN)$eq$ne$in$nin)$gt$lt$lte$gte)r  r  r  r  r  r  r  r  FzUnsupported type: gư>gưr  c                 @    g | ]} t                              S rK   r  r   r[   r{   r,  s     r8   r   z where_clause.<locals>.<listcomp>  s+    #R#R#RADD)>)>$?$?#R#R#Rr9   rY   r  c                 @    g | ]} t                              S rK   r  r  s     r8   r   z where_clause.<locals>.<listcomp>  s+    III144u 5 566IIIr9   )sortedr6  rZ  rv   r   rV  r=  extendrW  r   r>   r  r   float32r   )r{   rS  
known_keysr   	legal_opsopr,  s   `     @r8   where_clauser    s`    
6;;==>>J
$rz**
+
+C*3/E&*VI% 	96667777	E5	!	! 97778888	E3		 9TTTUUUU	E3		 96667777884;;88888% )R_dE];;<<<bj''((R_Y7788B	zU|	ueS!! 	% 	Ib5S#R#R#R#R#Rq#R#R#RSTUU	veS!! 	% 	IbIIIIIaIIIJKKb%[!!r9   c                 d   t           s;|j        r# | t          j        |j                            }nK | t                    }n:|j        r# | t          j        |j                            }n | t
                    } | t          j        ddg                    }|dk    rd|iS |dk    sJ d|iS )zPGenerate a where_document filter that could be used against the given collectionz	$containsz$not_contains)r   r7  rv   r   rN  r   )r{   rS  wordr  s       r8   where_doc_clauser    s      	#- 	.4
(JKKLLDD4,--DD- 	#4
(JKKLLDD4	??D
 
bo{O<==	>	>B	[T""_$$$$&&r9   base_stc                     t          j        ddg          }t          j        |t          j        | dd          dd          S Nz$andz$orr   )rF  rX   rV   )rZ  valuesrX   rF  rv   r   rY  rM  r  r  s     r8   binary_operator_clauser  	  M     +-/65/*J*JB?x!a888	   r9   c                     t          j        ddg          }t          j        |t          j        | dd          dd          S r  r  r  s     r8   binary_document_operator_clauser    r  r9   c                 j    t          |          } | t          j        |t                              }|S ru   )r  rv   	recursiver  r{   rS  r  wheres       r8   recursive_where_clauser  !  s0    :&&Gbl74JKKLLELr9   c                 j    t          |          } | t          j        |t                              }|S ru   )r  rv   r  r  r  s       r8   recursive_where_doc_clauser  (  s9     z**G!%
W=>>" "E Lr9   c                       e Zd ZU eej                 ed<   eeee	e         f                  ed<   eej
                 ed<   dS )Filterr  rB   where_documentN)r:   r;   r<   r   rF   WhererH   r   r>   r   WhereDocumentrK   r9   r8   r  r  3  sW         EK    	%T#Y'	((((U0111111r9   r  collection_strecordset_stinclude_all_idsc           
          | |          } | |          } | t          j        t          j                    t          |                              } | t          j        t          j                    t	          |                              }t          |d         t                    r
|d         g}n|d         }|ss | t          j        t          j                    t          j        t          j        |          d                              }|t          t          |                    }|7t          |          dk    r$ | t          j                              r|d         }|||dS )NrB   rV   rc  r   )r  r  rB   )rv   rw   ry   r  r  rV  r>   rM  r   r   setr3   r   )	r{   r  r  r  rS  	recordsetr  where_document_clauserB   s	            r8   filtersr  9  sK    m$$J\""I4	"'))-CJ-O-OPPQQL D
	"'))7
CCDD  )E"C((   !d29RWYY1E1EPQ(R(R(RSSTT?s3xx..C 3s88q==TT"+---@-@=!f!5JSVWWWr9   )r   N)F)r   r   hypothesis.strategies
strategiesrv   typingr   r   r   r   r   r   r	   typing_extensionsr
   r;  numpyr   numpy.typingr   chromadb.api.typesapirF   r}   *hypothesis.strategies._internal.strategiesr   !chromadb.test.api.test_schema_e2er   r   chromadb.test.conftestr   dataclassesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   chromadb.typesr    r!   r"   r#   %chromadb.api.collection_configurationr$   r%   r&   "chromadb.utils.embedding_functionsr'   r   seedrK  dictr-   rA   rM   rO   rQ   sql_alphabetr   r   sql_alphabet_minus_underscorerN  tenant_database_namer/  r   safe_integersr   r  r   rq   r   rW  r>   r=  rH   rz   legal_id_charactersfloat16r  float64rH  int16int32int64	int_types	compositeDrawFnr   rw   ry   rY  rG  r   r   NDArrayr   r   r   r   r   r   r   r   r  r	  r  r  r  r%  r'  r2  r4  r   rR  rT   rJ   rU   ry  r  r  r  r  r  r  r  r  r  r  r  rK   r9   r8   <module>r     s        " " " " " " @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ' ' ' ' ' '            " " " " " " " " " 				 E E E E E E        4 3 3 3 3 3 ! ! ! ! ! !                                   $ H G G G G G G G G G 9 9 9 9 9 9         
     
 	q   .    	3 	3 	3 	3 	3 	3 	3 	3	E 	E 	E 	E 	E" 	E 	E 	E. . . . ., . . .. . . . .. . . .' ' ' ' 'Y ' ' ' RBG\A666	E  rw(EPQRRR rwqAAA +22  4]  4]  ^  ^  >>??	+223T3TUU )  
 bi
   BKMM	CT.sE3'<!=>?   !#&464Ec4Js    J  z2:rz2Xrx*	 	") 	 	 	 	 	  biBGIIry)")[*ABB  	 = 	   *				 =	 Ys		 	 	 	Q Q Q Q Q!8!C Q Q Q8C C C C C)@)K C C C
	]u.z:;    F F F F F F F F      7    Iry I5F I I I IX bi <S    ( D") D(8 D D D DN *bi *H=O4P * * * *0 74
)74+,74 74 74 74t 	 	 	 	 	 	 	 	=$sCx. =T#s(^ = = = =!2 tCH~     7
)7
64S>!"7 7 7 7 3
)33 3 3 3l F F F F F# F F F&  !&"%)$(;B275>>##'m m
)mm m TN	m
 D>m "$!24!8m m !m m m m m`  "	 
)  sm	
 en   @ '29 '* ' ' ' ' 'T  7Bkmm'0 *.'+E E
)E'
3E  $E 	E
 E "#E E  }E E E E EPF, F>#+> F F F F$ ("ry ("j ("U[ (" (" (" ("V '29 '* 'AT ' ' ' '8	EK(	EK 	 	 	 		E/0	E'(	 	 	 	  
 u{     
)!+
   2 2 2 2 2Y 2 2 2 
 "	X X
)X$Z0X #I.X 	X
 X X X X X Xr9   