
    ugq_                         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 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 d dlmZ d dlmZmZmZm Z m!Z! d dl"m#Z#m$Z$m%Z% ejL                  jO                  d        d	d	d	d
Z( G d de      Z) G d de      Z* G d de      Z+ G d de      Z,dZ- ej\                  e-d      Z/dZ0 ej\                  e0d      Z1 ej\                  e-d      Z2e/jg                  d       Z/e1jg                  d       Z1e2jg                  d       Z2 ejh                  dd      Z5 ejl                  ddddd d!"      Z7e/e5e7 ejp                         gZ9eee
e:e;e<e=f         e>d#<   d$ej0                  e   d%ej0                  e   d&ej0                  e   fd'Z?d(Z@ej                  ej                  ej                  gZDej                  ej                  ej                  gZHej                  d)ej                  d&e<fd*       ZK ej                   ej                          ej                  e/ ej                  e9             ZOd+e:d,e:d-ej                  d&ej@                  fd.ZQd+e:d,e:d-ej                  d&ej
                  j                  e   fd/ZS G d0 d1ej>                  e         ZT G d2 d3ej>                  e         ZUd+e:d-ej                  d&ej0                  ej>                  e      fd4ZVe G d5 d6             ZWe G d7 d8eW             ZXej                  dddd ej                  d      d9d9fd)ej                  d:e=d;e=d<ee=   d=ee=   d>ej0                  e=   d?e:d@e:d&eXfdA       ZZej                  	 	 d]d)ej                  dBeXdCe:dDee:   d&eejB                     f
dE       Z[ej                  d)ej                  dBeXd&ej                  fdF       Z]ej                   eZ       e/ddGdd dfd)ej                  dHeeX   dIee<   dCe:dDe:dJee:   dKe:dLee:   d&e)fdM       Z^dNe#d&ee   fdOZ_ej                  d)ej                  dBeXd&ej                  fdP       Zaej                  d)ej                  dBeXd&ej                  fdQ       ZcdReej                     d&eej                     fdSZddReej                     d&eej                     fdTZeej                  d)ej                  dBeXd&ej                  fdU       Zfej                  d)ej                  dBeXd&ej                  fdV       Zg G dW dXe      Zhej                  	 d^d)ej                  dYej0                  eX   dZej0                  e)   d[e=d&ehf
d\       Ziy)_    N)AnyOptionalListDictUnioncast)	TypedDict)SearchStrategy)NOT_CLUSTER_ONLY)	dataclass)	Documents
EmbeddableEmbeddingFunction
EmbeddingsMetadata)LiteralValueWhereOperatorLogicalOperator   )zhnsw:construction_efzhnsw:search_efz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     V/var/www/openai/venv/lib/python3.12/site-packages/chromadb/test/property/strategies.pyr   r   5   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   r   r   N)r   r   r   r   r   r    r!   r"   r   r   r   r$   r%   r&   r'   r)   r)   A   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   r   r   N)r   r   r   r   r   r    r!   r"   r   r   r   r$   r%   r&   r'   r+   r+   L   sK     
ehh   HU^^,--HU^^,--r&   r+   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)r   r   r   r   r    r!   r"   r   r#   r   r$   r%   r&   r'   r-   r-   W   s?     	L((u~~&&u~~&&r&   r-   z@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_   )alphabetmin_sizez?abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-   c                 &    | j                  d       S N_sa
startswithss    r'   <lambda>r=   n   s    1<<+>'>r&   c                 &    | j                  d       S r7   r9   r;   s    r'   r=   r=   o       eAT=Tr&   c                 &    | j                  d       S r7   r9   r;   s    r'   r=   r=   p   r?   r&      	min_value	max_valueF    g    .g    .A)allow_infinity	allow_nanallow_subnormalwidthrD   rE   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)rL   rM   s     r'   one_or_bothrU      sK     99
		*j)
		*bggi(
		"'')Z( r&   zCabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_./+drawc                 N   t        j                  d      }t        j                  d      }t        j                  d      } | t        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compilerQ   
from_regex
hypothesisassumematchsearch)rV   _collection_name_re_ipv4_address_re_two_periods_renames        r'   collection_namerc      s    **%OPzz"BCjj)OR]]#678D*00667/00667Kr&   dimcountdtypec                     t         j                  j                  dd|| f      j                  |      j	                         }|S Ng      g      ?)lowhighsize)nprandomuniformastypetolist)rd   re   rf   r   s       r'   create_embeddingsrq      sG     			 	 	

 
	  r&   c                 h    t         j                  j                  dd|| f      j                  |      S rh   )rl   rm   rn   ro   )rd   re   rf   s      r'   create_embeddings_ndarrayrs      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_functionrd   rf   rN   Nc                      || _         || _        y rP   rd   rf   )selfrd   rf   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      .@)rf   )listhashlibsha256encode	hexdigestrd   lenrl   arrayintrf   )rx   rz   texthashed_textspadded_textscharr   s          r'   __call__z#hashing_embedding_function.__call__   s     PU
OTtDG 45??ABu 	 
 %
$ DHHD	)*T2HDHHs4y4H-II$ 	 
 %(
$ HHt<ttc$md*t<DJJO$ 	 (

 

 =(
s$   AC>CC)*C$ C)$C)c                 <    d| j                    d| j                   dS )Nzhashing_embedding_function(dim=z, dtype=)rw   )rx   s    r'   __repr__z#hashing_embedding_function.__repr__   s    0
(4::,aPPr&   )r   r   r   r   npt	DTypeLikery   r    r   r   r   strr   r%   r&   r'   ru   ru      sK    C  $ eoo %2B2B &Q# Qr&   ru   c                       e Zd ZdedefdZy)"not_implemented_embedding_functionrz   rN   c                     J d       )Nz*This embedding function is not implementedr%   )rx   rz   s     r'   r   z+not_implemented_embedding_function.__call__   s    BBBur&   N)r   r   r   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 rP   )rQ   justr   r   r   ru   rw   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.
    rb   r0   embedding_functionN)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                       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	<   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.
    r.   	dimensionrf   known_metadata_keysknown_document_keywordsFhas_documentshas_embeddingsN)r   r   r   r   uuidUUIDr"   r   r   r   r    r   r   r   r   boolr   r%   r&   r'   r   r     sI     			MN=='!#Y&M4 ND r&   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
<   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.F   i   rC   z@with_persistent_hnsw_params requires with_hnsw_params to be truer5   zhnsw:sync_thresholdzhnsw:batch_size)cosinel2ipz
hnsw:space   r4   max_sizeT)
r.   rb   r0   r   rf   r   r   r   r   r   )rc   collection_metadatarQ   integerssampled_fromfloat_types
ValueErrorupdatetest_hnsw_configminbooleansr   	safe_textrR   rK   r   listssafe_text_min_size_3r   r   r   uuid4)rV   r   r   r   r   r   r   r   rb   r0   r   rf   use_persistent_hnsw_paramsr   keyr   r   s                    r'   collectionsr     sL     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\"=?%&*y/C'+BII{,C'D$ %&* R[[]+$$$ 0&*-AF'# ')#0&*288ITU+V&W#&(#!!"++-0N%%%9)UKL::</# 7%- r&   
collectionr4   r   c                     | t        j                  t        t        j                  t         ||            }|j
                  r|j
                  j                         D ]
  }||v s||=  |j
                  j                         D ci c]  \  }}|t        j                  |       }}}|j                   | t        j                  i |                   |i k(  ry|S c c}}w )zMStrategy for generating metadata that could be a part of the given collectionr   )optionalN)rQ   dictionariesr   rR   rK   r   keysitemsr   r   fixed_dictionaries)	rV   r   r4   r   r0   r   kvsampling_dicts	            r'   r0   r0   y  s      $
ryy+.H	
 H %%11668ChSM 9
 '1&D&D&J&J&LO
&LdaArwwqzM&L 	 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Por5   )blacklist_categories)r4   r3   r2   r4    )r   r   )	r   r   rQ   r   r   
charactersr   rR   join)rV   r   r   known_words_strandom_words_stwordss         r'   r1   r1     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&   2   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)r4   r   uniquer   r2   r   )r   r   r   r   )r}   rQ   r   r   rq   r   r   rf   r0   rangeappendr   r1   r   )rV   r   r   r4   r   r   r   r   r   r   r   num_metadatagenerated_metadatasr   ir   	single_idsingle_embeddingsingle_metadatasingle_documents                       r'   
recordsetsr     s    )*J
RXXkHxPTUVC (,J  &z';';SXzGWGWX
*=*I&sSVxL
%6AR "!	
 I3s8_,Q5H1I-IJK  &*IHHXj)CHs3xP
	 3x1}59"++-5H3q6c	 %$r{{}*= qM 	 !/IaLY 	 &1d2;;=6IIaLy 	 *((	
 	
  	 r&   valuec                     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 rP   r%   xr   s    r'   r=   z opposite_value.<locals>.<lambda>  s	    AJr&   c                     | k7  S rP   r%   r   s    r'   r=   z opposite_value.<locals>.<lambda>  s	    !u*r&   c                     | k7  S rP   r%   r   s    r'   r=   z opposite_value.<locals>.<lambda>  s	    a5jr&   rA   rB   rC   c                     | k7  S rP   r%   r   s    r'   r=   z opposite_value.<locals>.<lambda>  s	    a5jr&   c                     | k7  S rP   r%   r   s    r'   r=   z opposite_value.<locals>.<lambda>  s	    !u*r&   )
isinstancefloatsafe_floatsfilterr   r   r   rQ   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                 "   t        |j                  j                               } | t        j                  |            }|j                  |   }g d}t        |t              s#t        |t              s|j                  g d       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 collection)Nz$eqz$ne$in$nin)z$gtz$ltz$ltez$gtegư>gưr   r5   r   )sortedr   r   rQ   r   r   r   r   extendr   rl   float32r   r   )rV   r   
known_keysr   r   	legal_opsop_s           r'   where_clauser    sq    
66;;=>J
rz*
+C**3/E 4IeS!*UD*A78%R__dE];<<bjj'(R__Y78B	zU|	ueS!%Ib5Sq#RAD)>$?#RSTUU	veS!%IbaI14u 56IJKKb%[!! $S Js   F
$F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   rQ   r   r   r   )rV   r   wordr  s       r'   where_doc_clauser  E  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   )r   r4   r2   )r   valuesr4   r   rQ   r   r   r   r  r  s     r'   binary_operator_clauser  b  @     +-//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  n  r  r&   c                 \    t        |      } | t        j                  |t                    }|S rP   )r  rQ   	recursiver  rV   r   r  wheres       r'   recursive_where_clauser  z  s'    :&Gbll74JKLELr&   c                 \    t        |      } | t        j                  |t                    }|S rP   )r  rQ   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)r   r   r   r   r    Wherer"   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   r2   r   r   )r  r  r   )rQ   rR   rT   r  r  r   r   r   r   r}   setr   r   )	rV   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)jr~   r[   hypothesis.strategies
strategiesrQ   typingr   r   r   r   r   r   typing_extensionsr	   r   numpyrl   numpy.typingr   chromadb.api.typesapir    rX   *hypothesis.strategies._internal.strategiesr
   chromadb.test.conftestr   dataclassesr   r   r   r   r   r   chromadb.typesr   r   r   rm   seedr   r   r)   r+   r-   sql_alphabetr   r   sql_alphabet_minus_underscorer   tenant_database_namer   r   safe_integersfloatsr   r   rK   r   r   r   r   r"   rU   legal_id_charactersfloat16r   float64r   int16int32int64	int_types	compositeDrawFnrc   rR   rT   r   r   r   rq   NDArrayrs   ru   r   r   r   r   r   r   r0   r$   r1   r   r   r  r  r  r  r  r  r  r  r  r$  r%   r&   r'   <module>rA     s6     " 9 9 '    " " 	 E 3 !  H G 		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 !# ! !$  !&"%)$(;B2775>##']
))]] ] TN	]
 D>] "$!2!24!8] ] !] ] ]@  "	
))  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[[ #" #"L '299 '* 'ATAT ' '8	EKK(	EKK 		E//0	E''(	  
 u{{   
))!+
 2Y 2 
 "	X
))X$$Z0X ##I.X 	X
 X Xr&   