
    3imc                     ,   % S SK r S SKrS SKJr  S SKJrJrJrJ	r	J
r
Jr  S SKJr  S SKrS SKrS SKJr  S SKJs  Jr  S SKrS SKJr  S SKJr  S SKJr  S SKJrJrJrJ r J!r!  S SK"J#r#J$r$J%r%  S S	KJ&r&J'r'  S S
K(J)r)J*r*  \RV                  RY                  S 5        SSSS.r- " S S\5      r. " S S\5      r/ " S S\5      r0 " S S\5      r1Sr2\Rf                  " \2SS9r4Sr5\Rf                  " \5SS9r6\Rf                  " \2SS9r7\4Rq                  S 5      r4\6Rq                  S 5      r6\7Rq                  S 5      r7\Rr                  " SSS9r:\Rv                  " S S S S!S"S#S$9r<\4\:\<\Rz                  " 5       /r>\\\
\?\@\A\B4         \CS%'   S&\R0                  \   S'\R0                  \   S(\R0                  \   4S) jrDS*rE\R                  \R                  \R                  /rI\R                  \R                  \R                  /rM\R                  S+\R                  S(\A4S, j5       rP\R                  " \R                  " 5       \R                  " \4\R                  " \>6 5      5      rTS-\?S.\?S/\R                  S(\R@                  4S0 jrVS-\?S.\?S/\R                  S(\R
                  R                  \   4S1 jrX " S2 S3\R>                  \   5      rY " S4 S5\R>                  \   5      rZS-\?S/\R                  S(\R0                  \R>                  \      4S6 jr[\ " S7 S85      5       r\\ " S9 S:\\5      5       r]\R                  S S SS\R                  " S 5      S;S;4S+\R                  S<\BS=\BS>\\B   S?\\B   S@\R0                  \B   SA\?SB\?S(\]4SC jj5       r_\R                    S_S+\R                  SD\]SE\?SF\\?   S(\\RB                     4
SG jj5       r`\R                  S+\R                  SD\]S(\R                  4SH j5       rb\R                  \_" 5       \4SSISS S4S+\R                  SJ\\]   SK\\A   SE\?SF\?SL\\?   SM\?SN\\?   S(\.4SO jj5       rcSP\#S(\\   4SQ jrd\R                  S+\R                  SD\]S(\R                  4SR j5       rf\R                  S+\R                  SD\]S(\R                  4SS j5       rhST\\R                     S(\\R                     4SU jriST\\R                     S(\\R                     4SV jrj\R                  S+\R                  SD\]S(\R                  4SW j5       rk\R                  S+\R                  SD\]S(\R                  4SX j5       rl " SY SZ\5      rm\R                   S`S+\R                  S[\R0                  \]   S\\R0                  \.   S]\BS(\m4
S^ jj5       rng)a    N)AnyOptionalListDictUnioncast)	TypedDict)SearchStrategy)NOT_CLUSTER_ONLY)	dataclass)	Documents
EmbeddableEmbeddingFunction
EmbeddingsMetadata)LiteralValueWhereOperatorLogicalOperator)is_spann_disabled_modeskip_reason_spann_disabled)CreateCollectionConfigurationCreateSpannConfiguration   )zhnsw:construction_efzhnsw:search_efzhnsw:Mc                   4   \ rS rSr% Sr\\R                  \\R                     4   \	S'   \
\\R                  \R                  4      \	S'   \
\\\
\R                        \R                  4      \	S'   \
\\\R                     \R                  4      \	S'   Srg)		RecordSet:   zp
A generated set of embeddings, ids, metadatas, and documents that
represent what a user would pass to the API.
ids
embeddings	metadatas	documents N)__name__
__module____qualname____firstlineno____doc__r   typesIDr   __annotations__r   r   	Embeddingr   Document__static_attributes__r!       [/home/james-whalen/.local/lib/python3.13/site-packages/chromadb/test/property/strategies.pyr   r   :   s    
 
uxxehh'	((u//@ABBd8ENN#;<ennLMNNd5>>2ENNBCDDr-   r   c                       \ rS rSr% Sr\\R                     \S'   \	\R                     \S'   \	\\	\R                           \S'   \	\\R                        \S'   Srg)	NormalizedRecordSetF   z3
A RecordSet, with all fields normalized to lists.
r   r   r   r    r!   N)r"   r#   r$   r%   r&   r   r'   r(   r)   r   r   r   r+   r,   r!   r-   r.   r0   r0   F   sU     
ehh))**Xenn5677U^^,--r-   r0   c                       \ rS rSr% Sr\\R                     \S'   \R                  \S'   \\
\R                        \S'   \\
\R                        \S'   Srg)	StateMachineRecordSetQ   zG
Represents the internal state of a state machine in hypothesis tests.
r   r   r   r    r!   N)r"   r#   r$   r%   r&   r   r'   r(   r)   r   r   r   r+   r,   r!   r-   r.   r3   r3   Q   sK     
ehh   HU^^,--HU^^,--r-   r3   c                       \ rS rSr% Sr\R                  \S'   \\R                     \S'   \\R                     \S'   \\R                     \S'   Srg)	Record\   z
A single generated record.
id	embeddingmetadatadocumentr!   N)r"   r#   r$   r%   r&   r'   r(   r)   r   r*   r   r+   r,   r!   r-   r.   r6   r6   \   s?     	L((u~~&&u~~&&r-   r6   z@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_   )alphabetmin_sizez?abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-   c                 .    U R                  S5      (       + $ N_sa
startswithss    r.   <lambda>rG   s   s    1<<+>'>r-   c                 .    U R                  S5      (       + $ rA   rC   rE   s    r.   rG   rG   t       eAT=Tr-   c                 .    U R                  S5      (       + $ rA   rC   rE   s    r.   rG   rG   u   rI   r-      	min_value	max_valueF    g    .g    .A)allow_infinity	allow_nanallow_subnormalwidthrN   rO   safe_values
strategy_a
strategy_breturnc                     [         R                  " [         R                  " X5      [         R                  " U [         R                  " 5       5      [         R                  " [         R                  " 5       U5      5      $ N)stone_oftuplesnone)rV   rW   s     r.   one_or_bothr_      sI     99
		*)
		*bggi(
		"'')Z( r-   zCabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_./+drawc                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nU " [        R                  " U5      5      R	                  5       n[
        R                  " UR                  U5      (       + 5        [
        R                  " UR                  U5      (       + 5        U$ )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compiler[   
from_regexstrip
hypothesisassumematchsearch)r`   _collection_name_re_ipv4_address_re_two_periods_renames        r.   collection_namern      s    **%OPzz"BCjj)OR]]#678>>@D*00667/00667Kr-   dimcountdtypec           	          [        [        R                  [        R                  R                  SSX4S9R                  U5      R                  5       5      nU$ Ng      g      ?)lowhighsize)r   r'   r   nprandomuniformastypetolist)ro   rp   rq   r   s       r.   create_embeddingsr|      sS    
 $(II\  
 VE]VX$J r-   c                 `    [         R                  R                  SSX4S9R                  U5      $ rs   )rw   rx   ry   rz   )ro   rp   rq   s      r.   create_embeddings_ndarrayr~      s6    
 99\   fUm	r-   c                       \ rS rSrS\S\R                  SS4S jrS\R                  S\R                  4S jrS\4S	 jrS
rg)hashing_embedding_function   ro   rq   rX   Nc                     Xl         X l        g rZ   ro   rq   )selfro   rq   s      r.   __init__#hashing_embedding_function.__init__   s    
r-   inputc                    U Vs/ s H?  n[        [        R                  " UR                  S5      5      R	                  5       5      PMA     nnU Vs/ s H9  nX R
                  [        U5      -  -  US U R
                  [        U5      -   -   PM;     nnU VVs/ s H@  n[        R                  " U Vs/ s H  n[        US5      S-  PM     snU R                  S9PMB     nnnU$ s  snf s  snf s  snf s  snnf )Nzutf-8   g      .@)rq   )listhashlibsha256encode	hexdigestro   lenrw   arrayintrq   )r   r   texthashed_textspadded_textscharr   s          r.   __call__#hashing_embedding_function.__call__   s     PU
OTtDG 45??ABu 	 
 %
$ HHD	)*T2HDHHs4y4H-II$ 	 
 %(
$ HHt<ttc$md*t<DJJO$ 	 (

 

 =(
s%   AC$A C)C32C.C3.C3c                 <    SU R                    SU R                   S3$ )Nzhashing_embedding_function(dim=z, dtype=)r   )r   s    r.   __repr__#hashing_embedding_function.__repr__   s    0
(4::,aPPr-   r   )r"   r#   r$   r%   r   npt	DTypeLiker   r'   r   r   r   strr   r,   r!   r-   r.   r   r      sK    C  $ eoo %2B2B &Q# Qr-   r   c                   &    \ rS rSrS\S\4S jrSrg)"not_implemented_embedding_function   r   rX   c                      S5       e)Nz*This embedding function is not implementedr!   )r   r   s     r.   r   +not_implemented_embedding_function.__call__   s    BBBur-   r!   N)r"   r#   r$   r%   r   r   r   r,   r!   r-   r.   r   r      s    Ci CJ Cr-   r   c           	      j    [         R                  " [        [        [           [        X5      5      5      $ rZ   )r[   justr   r   r   r   r   s     r.   embedding_function_strategyr      s+     77z*,Fs,RS r-   c                   r    \ rS rSr% Sr\\S'   \\R                     \S'   \\R                  \      \S'   Srg)ExternalCollection   z
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.
rm   r:   embedding_functionr!   N)r"   r#   r$   r%   r&   r   r)   r   r'   r   r   r   r,   r!   r-   r.   r   r      s3     Iu~~&& !8!8!DEEr-   r   c                       \ rS rSr% Sr\R                  \S'   \\S'   \	R                  \S'   \R                  \S'   \\   \S'   Sr\\S	'   Sr\\S
'   Sr\\   \S'   Srg)
Collectioni  z
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.
r8   	dimensionrq   known_metadata_keysknown_document_keywordsFhas_documentshas_embeddingsNcollection_configr!   )r"   r#   r$   r%   r&   uuidUUIDr)   r   r   r   r'   r   r   r   r   boolr   r   r   r   r,   r!   r-   r.   r   r     sZ     			MN=='!#Y&M4 ND AEx =>Er-   r   i  add_filterable_datawith_hnsw_paramsr   r   with_persistent_hnsw_paramsmax_hnsw_batch_sizemax_hnsw_sync_thresholdc                 h   USL a  USL a   eU " [        5       5      nU " [        5      n	U " [        R                  " SSS95      n
U " [        R                  " [
        5      5      nU " U5      nU(       a  U(       d  [        S5      eU(       a  U	c  0 n	U	R                  [        5        U(       aJ  U " [        R                  " SUS95      U	S'   U " [        R                  " S[        U	S   U/5      S95      U	S	'   U " [        R                  " 5       5      (       a!  U " [        R                  " / S
Q5      5      U	S'   Sn[        (       d%  U	(       a  U	R                  SS5      OSnUSSS.nSU0n0 nU(       aL  [        U5      S:  a=  U " [        5      nU " [        R                  " [         6 5      UU'   [        U5      S:  a  M=  Uc  U " [        R                  " 5       5      nUc   e["        (       d2  U(       a(  U(       a!  U " [        R$                  " [&        SSS95      nO4/ nO1U(       a(  U(       a!  U " [        R$                  " [        SSS95      nO/ nU(       d  SnOUc  U " [        R                  " 5       5      nUc   eU " [)        X5      5      n[+        [,        R.                  " 5       UU	U
UUUUUUUS9$ )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.F   i   rM   z@with_persistent_hnsw_params requires with_hnsw_params to be trueNr?   zhnsw:sync_thresholdzhnsw:batch_size)cosinel2ipz
hnsw:spacer      )spacewrite_nprobereassign_neighbor_countspann   r>   max_sizeT)r8   rm   r:   r   rq   r   r   r   r   r   r   )rn   collection_metadatar[   integerssampled_fromfloat_types
ValueErrorupdatetest_hnsw_configminbooleansr   getr   	safe_textr\   rU   r   listssafe_text_min_size_3r   r   r   uuid4)r`   r   r   r   r   r   r   r   rm   r:   r   rq   use_persistent_hnsw_paramsr   spann_spacespann_configr   keyr   r   s                       r.   collectionsr   !  s     5(}/EGG!"D'(HR[[1=>I-.E!%&A!B!*:N
 	
 H()%.2a3JK/H*+ +/!!"78:MN+H&'  &*"//:P*Q%RH\"AE!!:Bhll<6 !'(2
 \
 >@%&*y/C'+BII{,C'D$ %&* R[[]+$$$ 0&*-AF'# ')#0&*288ITU+V&W#&(#!!"++-0N%%%9)KL::</# 7%-+ r-   
collectionr>   r   c           	         U " [         R                  " [        [         R                  " [        6 X#S95      nUR
                  (       a  UR
                  R                  5        H  nXT;   d  M
  XE	 M     UR
                  R                  5        VVs0 s H  u  pgU[         R                  " U5      _M     nnnUR                  U " [         R                  " 0 US95      5        U0 :X  a  gU$ s  snnf )zMStrategy for generating metadata that could be a part of the given collectionr   )optionalN)r[   dictionariesr   r\   rU   r   keysitemsr   r   fixed_dictionaries)	r`   r   r>   r   r:   r   kvsampling_dicts	            r.   r:   r:     s      $
ryy+.	
 H %%11668CM 9
 '1&D&D&J&J&LO
&LdaArwwqzM&L 	 O
 	R222NOP2~OO
s   #C'c                     [         (       d  SnUR                  (       a!  [        R                  " UR                  5      nO'[        R                  " S[        R
                  " US9S9n[        R                  " S[        R
                  " US9S9nU " [        R                  " [        R                  " X45      SS95      nSR                  U5      $ SnUR                  (       a!  [        R                  " UR                  5      nO'[        R                  " S[        R
                  " US9S9n[        R                  " S[        R
                  " US9S9nU " [        R                  " [        R                  " X45      SS95      nSR                  U5      $ )	zNStrategy for generating documents that could be a part of the given collection)CcCsPcPor?   )blacklist_categories)r>   r=   r<   r>    )r   r   )	r   r   r[   r   r   
charactersr   r\   join)r`   r   r   known_words_strandom_words_stwordss         r.   r;   r;     s+      8--__Z-O-OPNWW<PQN
 ''DX!Y
 RXXbiiHSTUVxx ()))K)KL]]8LM

 ggR]]@TUO "))NDqQRE88E?r-   2   collection_strategyid_strategynum_unique_metadatamin_metadata_sizemax_metadata_sizec                    U " U5      n[        U " [        R                  " X#USS95      5      n	S n
UR                  (       a*  [	        UR
                  [        U	5      UR                  5      n
Ub  UO
[        U	5      nU " [        R                  " [        XUS9UUS95      n/ n[        [        U	5      5       H"  nUR                  X[        U5      -     5        M$     S nUR                  (       a7  U " [        R                  " [        U5      [        U	5      [        U	5      S95      n[        U	5      S:X  a  U " [        R                  " 5       5      (       a  U	S   OU	nU
b%  U " [        R                  " 5       5      (       a  U
S   OU
nU " [        R                  " 5       5      (       a  US   OUnUb%  U " [        R                  " 5       5      (       a  US   OUnUUUUS.$ U	U
UUS.$ )NT)r>   r   uniquer   r<   r   )r   r   r   r    )r   r[   r   r   r|   r   r   rq   r:   rangeappendr   r;   r   )r`   r   r   r>   r   r   r   r   r   r   r   num_metadatagenerated_metadatasr   ir    	single_idsingle_embeddingsingle_metadatasingle_documents                       r.   
recordsetsr    s    )*J
RXXkxPTUVC (,J  &z';';SXzGWGWX
*=*I&sSVxL
AR "!	
 I3s8_,5H1I-IJK  &*IHHXj)CHs3xP
	 3x1}59"++-5H5H3q6c	 %$r{{}*=*= qM 	 !//IaLY 	 &1d2;;=6I6IIaLy 	 *((	
 	
  	 r-   valuec                   ^  [        T [        5      (       a  [        R                  U 4S j5      $ [        T [        5      (       a  [
        R                  U 4S j5      $ [        T [        5      (       a(  [        R                  " 5       R                  U 4S j5      $ [        T [        5      (       a(  [        R                  " SSS9R                  U 4S j5      $ [        R                  " [        T 5      5      R                  U 4S j5      $ )	za
Returns a strategy that will generate all valid values except the input value - testing of $nin
c                    > U T:g  $ rZ   r!   xr  s    r.   rG    opposite_value.<locals>.<lambda>*  s	    AJr-   c                    > U T:g  $ rZ   r!   r  s    r.   rG   r	  ,  s	    !u*r-   c                    > U T:g  $ rZ   r!   r  s    r.   rG   r	  .  s	    a5jr-   rK   rL   rM   c                    > U T:g  $ rZ   r!   r  s    r.   rG   r	  1  s	    a5jr-   c                    > U T:g  $ rZ   r!   r  s    r.   rG   r	  4  s	    !u*r-   )
isinstancefloatsafe_floatsfilterr   r   r   r[   r   r   r   	from_typetype)r  s   `r.   opposite_valuer  %  s     %!!"677	E3		 455	E4	 	 {{}##$899	E3		{{XCJJ 
 	
 ||DK(//0DEEr-   c                 f   [        UR                  R                  5       5      nU " [        R                  " U5      5      nUR                  U   nS/n[        U[        5      (       a  UR                  / SQ5        O[        U[        5      (       a  UR                  / SQ5        Oe[        U[        5      (       a  UR                  / SQ5        O<[        U[        5      (       a  UR                  / SQ5        O S[        U5       35       e[        U[        5      (       a?  X@" [        R                  " SS/5      5      -   n[        [        R                  " U5      5      nU " [        R                  " U5      5      nUc  X40$ US:X  aN  [        U[        5      (       a	  U(       d  0 $ X6U/[        S	5       Vs/ s H  op" [        U5      5      PM     snQ00$ US
:X  aK  [        U[        5      (       a	  U(       d  0 $ X6[        S	5       Vs/ s H  op" [        U5      5      PM     sn00$ X6U00$ s  snf s  snf )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  zUnsupported type: gư>gưr  r?   r  )sortedr   r   r[   r   r  r   extendr  r   r   r  rw   float32r   r  )r`   r   
known_keysr   r  	legal_opsop_s           r.   where_clauser%  7  s    
66;;=>J
rz*
+C**3/E&*VI%67	E5	!	!78	E3		TU	E3		678*4;-88u%R__dE];<<bjj'(R__Y78B	z|	ueS!!%I5Sq#RAD)>$?#RSTUU	veS!!%IaI14u 56IJKK%[!! $S Js   3H)
H.c                    [         (       dE  UR                  (       a'  U " [        R                  " UR                  5      5      nOQU " [        5      nODUR                  (       a'  U " [        R                  " UR                  5      5      nOU " [
        5      nU " [        R                  " SS/5      5      nUS:X  a  SU0$ US:X  d   eSU0$ )zPGenerate a where_document filter that could be used against the given collectionz	$containsz$not_contains)r   r   r[   r   r   r   )r`   r   wordr#  s       r.   where_doc_clauser(  c  s     --
(J(JKLD,-D--
(J(JKLD	?D
 
boo{O<=	>B	[T""_$$$&&r-   base_stc           	          [         R                  " SS/5      n[         R                  " U[         R                  " U SSS9SSS9$ Nz$andz$orr   )r   r>   r<   )r   valuesr>   r   r[   r   r   r   r)  r#  s     r.   binary_operator_clauser/    @     +-//65/*JB??xx!a8	 r-   c           	          [         R                  " SS/5      n[         R                  " U[         R                  " U SSS9SSS9$ r+  r-  r.  s     r.   binary_document_operator_clauser2    r0  r-   c                 ^    [        U5      nU " [        R                  " U[        5      5      nU$ rZ   )r%  r[   	recursiver/  r`   r   r)  wheres       r.   recursive_where_clauser7    s'    :&Gbll74JKLELr-   c                 ^    [        U5      nU " [        R                  " U[        5      5      nU$ rZ   )r(  r[   r4  r2  r5  s       r.   recursive_where_doc_clauser9    s.     z*G!%
W=>"E Lr-   c                   ~    \ rS rSr% \\R                     \S'   \\\	\
\	   4      \S'   \\R                     \S'   Srg)Filteri  r6  r   where_documentr!   N)r"   r#   r$   r%   r   r'   Wherer)   r   r   r   WhereDocumentr,   r!   r-   r.   r;  r;    s:    EKK  	%T#Y'	((U0011r-   r;  collection_strecordset_stinclude_all_idsc           
         U " U5      nU " U5      nU " [         R                  " [         R                  " 5       [        U5      5      5      nU " [         R                  " [         R                  " 5       [	        U5      5      5      n[        US   [        5      (       a  US   /nOUS   nU(       dn  U " [         R                  " [         R                  " 5       [         R                  " [         R                  " U5      SS95      5      nUb  [        [        U5      5      nUb4  [        U5      S:X  a%  U " [         R                  " 5       5      (       a  US   nXgUS.$ )Nr   r<   r   r   )r6  r<  r   )r[   r\   r^   r7  r9  r  r   r   r   r   setr   r   )	r`   r?  r@  rA  r   	recordsetr%  where_document_clauser   s	            r.   filtersrF    s    m$J\"I		"'')-CJ-OPQL 
		"'')7
CD )E"C(( 299RWWY1EPQ(RST?s3x.C 3s8q=T"++--@-@!f!SVWWr-   )r   N)F)or   rf   hypothesis.strategies
strategiesr[   typingr   r   r   r   r   r   typing_extensionsr	   r   numpyrw   numpy.typingr   chromadb.api.typesapir'   rb   *hypothesis.strategies._internal.strategiesr
   chromadb.test.conftestr   dataclassesr   r   r   r   r   r   chromadb.typesr   r   r   r   r   %chromadb.api.collection_configurationr   r   rx   seedr   r   r0   r3   r6   sql_alphabetr   r   sql_alphabet_minus_underscorer   tenant_database_namer  r   safe_integersfloatsr  r   rU   r   r  r   r   r)   r_   legal_id_charactersfloat16r   float64r   int16int32int64	int_types	compositeDrawFnrn   r\   r^   r   r   r   r|   NDArrayr~   r   r   r   r   r   r   r   r:   r+   r;   r  r  r=  r%  r>  r(  r/  r2  r7  r9  r;  rF  r!   r-   r.   <module>rd     s+     " 9 9 '    " " 	 E 3 !  H G U 		q .   	E	 	E.) ..I .'Y ' RGG\A6	E  ww(EPQR wwqA  >?	+223TU +223TU )
 ii
 KKM	CT.sE3'<!=>? !!#&464E4Ec4Js J  zz2::rzz2XXrxx*	 	")) 	 	 	 iiGGIry"))[*AB 	 == 	*				 ==	 YYs		Q!8!8!C Q8C)@)@)K C
	]]u..z:; F F F F# F F&  !&"%)$(;=775>##'m
))mm m TN	m
 D>m "$!2!24!8m m !m m m`  "	
))  sm	
 enn < '299 '* ' ' 'T  7Bm'0 *.'+E
))E'
3E  $E 	E
 E "#E E  }E E EPF, F>#+> F$ ("ryy ("j ("U[[ (" ("V '299 '* 'ATAT ' '8	EKK(	EKK 		E//0	E''(	  
 u{{   
))!+
 2Y 2 
 "	X
))X$$Z0X ##I.X 	X
 X Xr-   