
    q9i                        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jx                  j{                  d        ddddZ> G d de      Z? G d de      Z@ G d de      ZA G d de      ZBdZC ej                  eCd      ZEdZF ej                  eFd      ZG ej                  eCd      ZHeEj                  d       ZEeGj                  d       ZGeHj                  d       ZH ej                  dd !      ZK ej                  d"d"d"d#d$d%&      ZMeEeKeM ej                         gZOeee
ePeQeReSf         eTd'<   d(ej2                  e   d)ej2                  e   d*ej2                  e   fd+ZUd,ZVej                  ej                  ej                  gZZej                  ej                  ej                  gZ^ej                  d-ej                  d*eRfd.       Za ej                   ej                          ej                  eE ej                  eO             Zed/ePd0ePd1ej                  d*ejH                  fd2Zgd/ePd0ePd1ej                  d*ej
                  j                  e   fd3Zi G d4 d5ejF                  e!         Zj G d6 d7ejF                  e!         Zkd/ePd1ej                  d*ej2                  ejF                  e"      fd8Zle  G d9 d:             Zme; G d; d<e             Znej                  d-ej                  d*e(fd=       Zoej                  d-ej                  d*e)fd>       Zpej                  d-ej                  d*ee&   fd?       Zqej                  d-ej                  d*ee'   fd@       Zrej                  d-ej                  d*ee7   fdA       Zse  G dB dC             ZtdDe	eRef   d*e	eRef   fdEZudFe(d*e	eRef   fdGZvej                  d-ej                  d*ee&e	eRef   f   fdH       Zwej                  d-ej                  d*etfdI       Zxe  G dJ dKem             Zyej                  d"d"dd ej                  d"      dLdLfd-ej                  dMeSdNeSdOeeS   dPeeS   dQej2                  eS   dRePdSePd*eyfdT       Z{ej                  	 	 dpd-ej                  dUeydVePdWeeP   d*eejJ                     f
dX       Z|ej                  d-ej                  dUeyd*ej                  fdY       Z~ej                   e{       eEddZdd dfd-ej                  d[eey   d\eeR   dVePdWePd]eeP   d^ePd_eeP   d*e?fd`       Zdae2d*ee   fdbZej                  d-ej                  dUeyd*ej                  fdc       Zej                  d-ej                  dUeyd*ej                  fdd       Zdeeej                     d*eej                     fdfZdeeej                     d*eej                     fdgZej                  d-ej                  dUeyd*ej                  fdh       Zej                  d-ej                  dUeyd*ej                  fdi       Z G dj dke      Zej                  	 dqd-ej                  dlej2                  ey   dmej2                  e?   dneSd*ef
do       Zy)r    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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<   y)	RecordSetz|
    A generated set of embeddings, ids, metadatas, and documents that
    represent what a user would pass to the API.
    ids
embeddings	metadatas	documentsN)__name__
__module____qualname____doc__r   typesIDr   __annotations__r   r   	Embeddingr   Document     j/var/www/html/leadgen/airagagent/rag_env/lib/python3.12/site-packages/chromadb/test/property/strategies.pyr-   r-   M   s    
 
uxxehh'	((u//@ABBd8ENN#;<ennLMNNd5>>2ENNBCDDr<   r-   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<   y)NormalizedRecordSetz;
    A RecordSet, with all fields normalized to lists.
    r.   r/   r0   r1   N)r2   r3   r4   r5   r   r6   r7   r8   r   r   r   r:   r;   r<   r=   r?   r?   Y   sU     
ehh))**Xenn5677U^^,--r<   r?   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<   y)StateMachineRecordSetzO
    Represents the internal state of a state machine in hypothesis tests.
    r.   r/   r0   r1   N)r2   r3   r4   r5   r   r6   r7   r8   r   r   r   r:   r;   r<   r=   rA   rA   d   sK     
ehh   HU^^,--HU^^,--r<   rA   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<   y)Recordz$
    A single generated record.
    id	embeddingmetadatadocumentN)r2   r3   r4   r5   r6   r7   r8   r   r9   r   r:   r;   r<   r=   rC   rC   o   s?     	L((u~~&&u~~&&r<   rC   z@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_   )alphabetmin_sizez?abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-   c                 &    | j                  d       S N_sa
startswithss    r=   <lambda>rS      s    1<<+>'> r<   c                 &    | j                  d       S rM   rO   rQ   s    r=   rS   rS          eAT=T r<   c                 &    | j                  d       S rM   rO   rQ   s    r=   rS   rS      rU   r<      	min_value	max_valueF    g    .g    .A)allow_infinity	allow_nanallow_subnormalwidthrZ   r[   safe_values
strategy_a
strategy_breturnc                     t        j                  t        j                  | |      t        j                  | t        j                               t        j                  t        j                         |            S N)stone_oftuplesnone)rb   rc   s     r=   one_or_bothrk      sK     99
		*j)
		*bggi(
		"'')Z( r<   zCabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_./+drawc                 j   t        j                  d      }t        j                  d      }t        j                  d      } | t        j                  |            j	                         }t        j                  |j                  |              t        j                  |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compilerg   
from_regexstrip
hypothesisassumematchsearch)rl   _collection_name_re_ipv4_address_re_two_periods_renames        r=   collection_namerz      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           	          t        t        j                  t        j                  j                  dd|| f      j                  |      j                               }|S Ng            ?)lowhighsize)r   r6   r   nprandomuniformastypetolist)r{   r|   r}   r/   s       r=   create_embeddingsr      sU    
 $(IIS\  
 VE]VX$J r<   c                 h    t         j                  j                  dd|| f      j                  |      S r   )r   r   r   r   )r{   r|   r}   s      r=   create_embeddings_ndarrayr      s8    
 99S\   fUm	r<   c                   x    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y)	hashing_embedding_functionr{   r}   rd   Nc                      || _         || _        y rf   r{   r}   )selfr{   r}   s      r=   __init__z#hashing_embedding_function.__init__   s    
r<   inputc                    |D cg c]=  }t        t        j                  |j                  d            j	                               ? }}|D cg c]9  }|| j
                  t        |      z  z  |d | j
                  t        |      z   z   ; }}|D cg c]>  }t        j                  |D cg c]  }t        |d      dz   c}| j                        @ }}}|S c c}w c c}w c c}w c c}}w )Nzutf-8   g      .@)r}   )listhashlibsha256encode	hexdigestr{   lenr   arrayintr}   )r   r   texthashed_textspadded_textscharr/   s          r=   __call__z#hashing_embedding_function.__call__   s     PU
GKDG 45??AB
 
 %
 DHHD	)*T2HDHHs4y4H-II
 
 %(
 HHt<tc$md*<DJJO(

 (

 

 =(
s$   AC>CC)*C$ C)$C)c                 <    d| j                    d| j                   dS )Nzhashing_embedding_function(dim=z, dtype=)r   r   s    r=   __repr__z#hashing_embedding_function.__repr__   s    0
(4::,aPPr<   )r2   r3   r4   r   npt	DTypeLiker   r6   r   r   r   strr   r;   r<   r=   r   r      sK    C  $ eoo %2B2B &Q# Qr<   r   c                       e Zd ZdedefdZy)"not_implemented_embedding_functionr   rd   c                     J d       )Nz*This embedding function is not implementedr;   )r   r   s     r=   r   z+not_implemented_embedding_function.__call__  s    BBBur<   N)r2   r3   r4   r   r   r   r;   r<   r=   r   r     s    Ci CJ Cr<   r   c           	      j    t        j                  t        t        t           t        | |                  S rf   )rg   justr   r   r   r   r   s     r=   embedding_function_strategyr   	  s-     77z*,FsE,RS r<   c                   j    e Zd ZU dZeed<   eej                     ed<   eej                  e
      ed<   y)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.
    ry   rF   embedding_functionN)r2   r3   r4   r5   r   r8   r   r6   r   r   r   r;   r<   r=   r   r     s3     Iu~~&& !8!8!DEEr<   r   c                       e Zd ZdZdefdZy)SimpleIpEmbeddingFunctionz>Simple embedding function with ip space for persistence tests.rd   c                      y)Nipr;   r   s    r=   default_spacez'SimpleIpEmbeddingFunction.default_space$  s    r<   N)r2   r3   r4   r5   r   r   r;   r<   r=   r   r      s    Hs r<   r   c                    d}d}d}d}d} | t        j                               r | t        j                  g d            } | t        j                               r't         | t        j                  dd                  } | t        j                               r3 | 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   rH     rY   r{   	#document)hnswspannrj   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   )rg   booleanssampled_fromr   integersrh   r   	safe_textr   floatsr   r   r   r   )rl   r   r   r   r   r   index_choices          r=   vector_index_config_strategyr   (  s    EJDEBKKMR__%;<=BKKM6R[[1=>
 BKKM"))BGGK$8)DE
(ABCLvBKKM" !qD!IJBKKM" r{{Q$GHBKKM" 2;;dCDBKKM"  a5 IJBKKM" ryy3#FG
" 
	  BKKM" r{{Q#FGBKKM" bkkADEBKKM" !qC!HIBKKM" 2;;cBCBKKM" r{{Q"EFBKKM" %)qB)O$PBKKM" !rS!IJBKKM" !rS!IJ1
6 5% - r<   c                 @   d}d}d} | t        j                               r=t               } | 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)rg   r   r   rh   r   r   r   )rl   r   r   r   s       r=   #sparse_vector_index_config_strategyr   u  s}     JDBKKMAC"))BGGK$8)DE
BKKMBKKM""- r<   c                     | t        j                               ryt               } | t        j                  dd            }d}t	        |      D ]  } | t        j
                  ddg            } | t        j
                  g d            } | t        j                               }d}|r|d	k7  r | t              }|dk(  r|d
k(  r|j                  t               |       |dk(  r|j                  t               |       |dk(  r|j                  t               |       |dk(  r|j                  t               |       |d	k(  r% | t                     }	|j                  |	d        |dk(  s't        r/|r3 | t                     }
| | t              }|j                  |
|       d}h|dk(  so|d
k(  r|j                  t               |       |dk(  r|j                  t               |       |dk(  r|j                  t               |       |dk(  s|j                  t               |        |S )zKGenerate a Schema object with various create_index/delete_index operations.Nr      rY   Fcreate_indexdelete_index)string_invertedint_invertedfloat_invertedbool_invertedvectorsparse_vectorr   r   configkeyr   r   r   r   T)rg   r   r   r   ranger   r   r   r   r   r   r   r   r#   r   r   )rl   schemanum_operationssparse_index_created_	operationconfig_typeuse_keyr   vector_configsparse_configs              r=   schema_strategyr     s-    BKKMXF "++Q?@N >" 6O..)IJK	OO	
 r{{}%{h.y/C&//##+D+FC#P.##+A+C#M 00##+C+E3#O/##+B+D##N( $%A%C D##=d#C.., $%H%J K;y/C##=c#B'+$.(//##+D+FC#P.##+A+C#M 00##+C+E3#O/##+B+D##Nm6Or Mr<   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|S dS )z'Generate metadata with hnsw parameters.r   
hnsw:spacerH   r   rY   r)   r*   r+   r   r   zhnsw:resize_factorr   r   hnsw:sync_thresholdN)rg   r   r   r   r   )rl   rF   s     r=   metadata_with_hnsw_strategyr     s    $&HBKKM!%boo6L&M!NBKKM+/KK!t4,
'( BKKM%)"++T*R%S!"BKKM!"++T"JKBKKM)-bii#QT.U)V%&BKKM*.KK!u5+
&'  8)T)r<   c                    i } | t        j                               r*t         | t        j                  dd                  |d<    | t        j                  g d            }|dk(  r,t         | t        j                  g d            	      |d
<   n`|dk(  r,t         | t        j                  g d            	      |d<   n/|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
<   nG|dk(  rAi } | 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|S d"S )#zEGenerate CreateCollectionConfiguration with mutual exclusivity rules.rH   r   rY   r   r   )space_only_hnswspace_only_spannr   r   rj   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)rg   r   r   r   r   r&   r%   r   )rl   configurationconfig_choicehnsw_configspann_configs        r=   create_configuration_strategyr    s   
 46M BKKM.GR[[1=>/
*+
 
L	
M )) 7r'=>?!
f 
,	,!9r'=>?"
g 
&	 /1#'8N(O#PK )-bkkAQU.V)W%&#'a4(P#QK '+BKK!t,T'UO$(,R[[1PU-V(W$%'+BIIs,S'TO$ +f	'	!13$(9O)P$QL!(,R[[1PS-T(U_%'+BKK!r,R'S^$*.r{{QRU/V*W&'$(qC)P$Q[!(,R[[1PR-S(T_%26KK!r23
./ +/r{{RSV/W*X&'*.r{{RSV/W*X&'!-g)=3t3r<   c                   f    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<   y)CollectionInputCombinationz4
    Input tuple for collection creation tests.
    rF   r   r   schema_vector_infokindN)r2   r3   r4   r5   r   r   r8   r$   r   r   r   r   r;   r<   r=   r  r  &  sD     )**9::V c3h00
Ir<   r  itemsc                 \    | j                         D ci c]  \  }}|	|| c}}S c c}}w rf   )r  )r  kvs      r=   non_none_itemsr
  3  s(    "[[]<TQamAqD<<<s   
((r   c                 b   d }| j                   >t        | j                   d      r(t        t        | j                   j	                               }| j
                  | j                  r| j                  j                  d      nd | j                  r| j                  j                  d      |dS 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     r=   vector_index_to_dictr  7  s    -1  ,!!?2 #'sF,E,E,S,S,U"V =C[[&&D&9d?E||((d(;,C	  RV,C	 r<   c                 v    t               } | t                     }|j                  |d        |t        |      fS )Nr   )r   r   r   r  )rl   r   r   s      r=   _schema_input_strategyr  F  s=     XF578M
}$7'666r<   c                 ,    | t        j                  g d            }d}d}d}d}|dv r  | t               j                  d             }|dv r  | t	               j                  d             }|dk(  r | t                     \  }}t        |||||      S )	zY
    Generate compatible combinations of metadata, configuration, and schema inputs.
    )rj   rF   r   metadata_configurationr   N)rF   r  c                 *    | d uxr t        |       dkD  S )Nr   )r   values    r=   rS   z8metadata_configuration_schema_strategy.<locals>.<lambda>l  s    e4/BCJN r<   )r   r  c                     | d uxrN | j                  d      d uxr t        | d         dkD  xs& | j                  d      d uxr t        | d         dkD  S )Nr   r   r   )getr   r  s    r=   rS   z8metadata_configuration_schema_strategy.<locals>.<lambda>s  sb    e4/ YYv&d2Ms5=7IA7M T		'*$6R3uW~;NQR;R r<   r   )rF   r   r   r  r  )rg   r   r   filterr  r  r  )rl   choicerF   r   r   schema_infos         r=   &metadata_configuration_schema_strategyr  P  s     
	

F .2H=AM#F,0K77')00B
 <<)+22
 "#9#;<%#& r<   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<   y
)
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.
    rD   	dimensionr}   known_metadata_keysknown_document_keywordsFhas_documentshas_embeddingsNcollection_config)r2   r3   r4   r5   uuidUUIDr8   r   r   r   r6   r   r   r   r$  boolr%  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                    |du r|du rJ  | t                     } | t              }	 | t        j                  dd            }
 | t        j                  t
                    } | |      }|r|st        d      |r|	i }	|	j                  t               |rN | t        j                  d|            |	d<    | t        j                  dt        |	d   |g                  |	d	<    | t        j                               r  | t        j                  g d
            |	d<   d}t        s |	r|	j                  dd      nd}|ddd}d|i}i }|rHt        |      dk  r: | t              } | t        j                  t                ||<   t        |      dk  r:| | 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   rY   z@with_persistent_hnsw_params requires with_hnsw_params to be trueNrK   r   zhnsw:batch_sizer   r   r      )r   r   r   r   r   rJ   max_sizeT)rD   ry   rF   r!  r}   r"  r$  r#  r%  r   r&  )rz   collection_metadatarg   r   r   float_types
ValueErrorupdatetest_hnsw_configminr   r#   r  r   r   rh   ra   r   listssafe_text_min_size_3r   r   r'  uuid4)rl   r*  r+  r%  r$  r,  r-  r.  ry   rF   r!  r}   use_persistent_hnsw_paramsr&  spann_spacer   r"  r   r#  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)UKL::</# 7%-+ r<   
collectionrJ   r2  c           
           | t        j                  t        t        j                  t         ||            }|j
                  r|j
                  j                         D ]
  }||v s||=  |j
                  j                         D ci c]6  \  }}t        |t        t        t        f      r|t        j                  |      8 }}}|j                   | t        j                  i |                   |i k(  ry|S c c}}w )zMStrategy for generating metadata that could be a part of the given collectionr1  )optionalN)rg   dictionariesr   rh   ra   r"  keysr  
isinstancer   r   floatr   r6  fixed_dictionaries)	rl   r?  rJ   r2  rF   r   r  r	  sampling_dicts	            r=   rF   rF     s      $
ryy+.H	
 H %%11668 	"ChSM	" #66<<>O
1!c3./ rwwqzMO
 O

 	R222NOP2~OO
s   ;C: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j                  |      S d}|j                  r t        j                  |j                        }n+t        j                  dt        j
                  |            }t        j                  dt        j
                  |            } | t        j                  t        j                  ||      d            }dj                  |      S )	zNStrategy for generating documents that could be a part of the given collection)CcCsPcPorK   )blacklist_categories)rJ   rI   rH   rJ    )rI  rJ  )	r   r#  rg   r   r   
charactersr9  rh   join)rl   r?  rM  known_words_strandom_words_stwordss         r=   rG   rG   -  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 "))NODqQRE88E?r<   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 ]"  }|j                  ||t        |      z            $ d }|j                  r9 | 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|}||||dS |	|
||dS )NT)rJ   r2  uniquer1  rH   r   )r.   r/   r0   r1   )r   rg   r9  r%  r   r!  r   r}   rF   r   appendr$  rG   r   )rl   rU  rV  rJ   r2  rW  rX  rY  r?  r.   r/   num_metadatagenerated_metadatasr0   ir1   	single_idsingle_embeddingsingle_metadatasingle_documents                       r=   
recordsetsrd  X  s    )*J
RXXkHxPTUVC (,J  &z';';SXzGWGWX
*=*I&sSVxL
%6AR "!	
 I3s8_ L,Q5H1I-IJKL &*IHHXj)CHs3xP
	 3x1}59"++-5H3q6c	 %$r{{}*= qM 	 !/IaLY 	 &1d2;;=6IIaLy 	 *((	
 	
  	 r<   r  c                     t         t              rt        j                   fd      S t         t              rt
        j                   fd      S t         t              r&t        j                         j                   fd      S t         t              r)t        j                  dd      j                   fd      S t        j                  t                     j                   fd      S )	zi
    Returns a strategy that will generate all valid values except the input value - testing of $nin
    c                     | k7  S rf   r;   xr  s    r=   rS   z opposite_value.<locals>.<lambda>  s    AJ r<   c                     | k7  S rf   r;   rg  s    r=   rS   z opposite_value.<locals>.<lambda>  s    !u* r<   c                     | k7  S rf   r;   rg  s    r=   rS   z opposite_value.<locals>.<lambda>  s    a5j r<   rW   rX   rY   c                     | k7  S rf   r;   rg  s    r=   rS   z opposite_value.<locals>.<lambda>  s    a5j r<   c                     | k7  S rf   r;   rg  s    r=   rS   z opposite_value.<locals>.<lambda>  s    !u* r<   )rD  rE  safe_floatsr  r   r   r)  rg   r   r   r   	from_typetyper  s   `r=   opposite_valuerp    s     %!!"677	E3	 455	E4	 {{}##$899	E3	{{XCJJ 
 	
 ||DK(//0DEEr<   c                     t        |j                  j                               } | t        j                  |            }|j                  |   }dg}t        |t              r|j                  g d       nt        |t              r|j                  g d       n[t        |t              r|j                  g d       n7t        |t              r|j                  g d       nJ dt        |              t        |t              r>| | t        j                  ddg            z   }t        t        j                  |            } | t        j                  |            }|||iS |dk(  rCt        |t              r|si S |||gt        d	      D cg c]  } | t        |             c}iiS |d
k(  r@t        |t              r|si S ||t        d	      D cg c]  } | t        |             c}iiS |||iiS c c}w c c}w )zLGenerate a filter that could be used in a query against the given collectionN)$eq$ne$in$nin)$gt$lt$lte$gte)rv  rw  rx  ry  rr  rs  rt  ru  zUnsupported type: gư>gưrt  rK   ru  )sortedr"  rC  rg   r   rD  r)  extendrE  r   r   ro  r   float32r   rp  )rl   r?  
known_keysr   r  	legal_opsopr   s           r=   where_clauser    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|	ueS!%Ib5Sq#RAD)>$?#RSTUU	veS!%IbaI14u 56IJKKb%[!! $S Js   G6
G;c                 j   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   r#  rg   r   r:  r   )rl   r?  wordr  s       r=   where_doc_clauser    s     --
(J(JKLD,-D--
(J(JKLD	?D
 
boo{O<=	>B	[T""_$$$&&r<   base_stc                     t        j                  ddg      }t        j                  |t        j                  | dd      dd      S Nz$andz$orr   )r2  rJ   rH   )rC  valuesrJ   r2  rg   r   rB  r9  r  r  s     r=   binary_operator_clauser    @     +-//65/*JB??xx!a8	 r<   c                     t        j                  ddg      }t        j                  |t        j                  | dd      dd      S r  r  r  s     r=   binary_document_operator_clauser    r  r<   c                 \    t        |      } | t        j                  |t                    }|S rf   )r  rg   	recursiver  rl   r?  r  wheres       r=   recursive_where_clauser    s'    :&Gbll74JKLELr<   c                 \    t        |      } | t        j                  |t                    }|S rf   )r  rg   r  r  r  s       r=   recursive_where_doc_clauser    s.     z*G!%
W=>"E Lr<   c                   v    e Zd ZU eej
                     ed<   eeee	e   f      ed<   eej                     ed<   y)Filterr  r.   where_documentN)r2   r3   r4   r   r6   Wherer8   r   r   r   WhereDocumentr;   r<   r=   r  r  &  s:    EKK  	%T#Y'	((U0011r<   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   }|sl | t        j                  t        j                         t        j                  t        j                  |      d                  }|t        t        |            }|-t        |      dk(  r | t        j                               r|d   }|||dS )Nr.   rH   rN  r   )r  r  r.   )rg   rh   rj   r  r  rD  r   r9  r   r   setr   r   )	rl   r  r  r  r?  	recordsetr  where_document_clauser.   s	            r=   filtersr  ,  s    m$J\"I		"'')-CJ-OPQL 
		"'')7
CD )E"C( 299RWWY1EPQ(RST?s3x.C 3s8q=T"++--@!f!5JSVWWr<   )r   N)F)r   rr   hypothesis.strategies
strategiesrg   typingr   r   r   r   r   r   r	   typing_extensionsr
   r'  numpyr   numpy.typingr   chromadb.api.typesapir6   rn   *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   seedr7  r-   r?   rA   rC   sql_alphabetr   r   sql_alphabet_minus_underscorer:  tenant_database_namer  r   safe_integersr   rm  r   ra   r   rE  r   r)  r8   rk   legal_id_charactersfloat16r|  float64r4  int16int32int64	int_types	compositeDrawFnrz   rh   rj   rB  r3  r   r   NDArrayr   r   r   r   r   r   r   r   r   r   r  r  r
  r  r  r  r   r   r>  rF   r:   rG   rd  rp  r  r  r  r  r  r  r  r  r  r  r;   r<   r=   <module>r     s6	     " @ @ @ '    " " 	 E 4 !    $ H G 9 

 		q .   	E	 	E.) ..I .'Y ' RBGG\A6	E  rww(EPQR rwwqA  >?	+223TU +223TU )
 bii
 BKKM	CT.sE3'<!=>? !!#&464E4Ec4Js J  zz2::rzz2XXrxx*	 	")) 	 	 	  biiBGGIry)"))[*AB 	 == 	*				 ==	 YYs		Q!8!8!C Q8C)@)@)K C
	]]u..z:; F F F  7   Iryy I5F I IX bii <S  ( D")) D(8 D DN *bii *H=O4P * *0 74
))74+,74 74t 	 	 	=$sCx. =T#s(^ =!2 tCH~  7
))7
64S>!"7 7 3
))33 3l F# F F&  !&"%)$(;B2775>##'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<   