
    LKi^!              
       >   S SK r S SKJrJrJr  S SKrS SKrS SKJrJ	r	J
r
JrJrJrJr  S SKrS SKJr  S SKJs  Js  Jr  S SKJr  S SKJr  S SKJr  S SKJr  S	\\\4   4S
 jrS\S\S	\4S jr S\S\S\S\S	S4
S jr!S\S\S\S\S	S4
S jr"S\S	S4S jr#S\S	S4S jr$g)    N)FutureThreadPoolExecutorwait)AnyDictListOptionalSetTuplecast)	ClientAPI)
SegmentAPI)	RecordSet)test_hnsw_config)Metadatareturnc                  d    [         R                  " SS5      n [         R                  " SS5      nX4$ )N
   i'     )randomrandint)NDs     b/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/chromadb/test/test_multithreaded.pygenerate_data_shaper      s)    r5!Ar3A6M    r   r   c                 T   [        U 5       Vs/ s H  n[        U5      PM     nn[        U 5       Vs/ s H  o" U0PM	     nn[        U 5       Vs/ s H  nSU 3PM
     nn[        R                  R	                  X5      R                  5       n[        UUUUS9nU$ s  snf s  snf s  snf )Nzdoc ids
embeddings	metadatas	documents)rangestrnpr   randtolistr   )r   r   ir   r!   r"   r    normalized_record_sets           r   generate_record_setr*      s     8
$8a3q68C
$<A!H&EHq#{HI&E%*1X.X4sXI.%,,.J (1	( !  %&E.s   BB B%clientnum_workersc           
         [        X5      nUS   nUS   nUS   nUS   n[        SU SU SU S35        U R                  5         U R                  S	[        S
9n	[        US9 n
/ nSnU[        U5      :  a  [        R                  " SUS-  5      n[        U[        U5      U-
  5      nUS-   nX-   S-   nUb  [        XoU 5      S:X  a  OZU
R                  U	R                  X_U Ub  XoU OS Ub  XU OS Ub  XU OS S9nUR                  U5        X-  nU[        U5      :  a  M  S S S 5        [        W5        U H  nUR                  5       nUc  M  Ue   [        R                   " X5        [        R"                  " X5        [        R$                  " X5        [        R&                  " U	5        [        R(                  " [+        U5       Vs/ s H  nUPM     snS5      nSn[        R,                  " U	UUUS9  g ! , (       d  f       N= fs  snf )Nr   r    r!   r"   Adding  records with  dimensions on  workerstestnamemetadatamax_workers   r   r   r      	n_resultsquery_indices)r*   printresetcreate_collectionr   r   lenr   r   minsubmitaddappendr   	exception
invariantscount	ids_matchmetadatas_matchno_duplicatessampler#   ann_accuracy)r+   r   r   r,   records_setr   r    r!   r"   collexecutorfutures
total_sent
batch_sizeto_sendstartendfuturerF   r(   r=   r<   s                         r   _test_multithreaded_addrX   )   s    &a+K
e
C\*JK(IK(I	GA3nQC{m8
LM LLN##:J#KD		4%'
3s8#173J*c#h&;<GNE&*C%#js.C*D*I__cN4>4J:C0PT2;2G)#.T2;2G)#.T % F NN6"!J! 3s8# 
5* 	M$$&	 O  T'+t1T" MMeAh"7h1h"7<MI#	M 
5	4H #8s   "B?G7	H7
Hc           	        ^^^^^^^ U R                  5         U R                  S[        S9m[        X5      n[	        [
        [           US   5      m[	        [
        [           US   5      m[	        [
        [           US   5      mUS   m[        5       m[        R                  " 5       m[        SU SU S	U S
35         SS[        S[        [
        [              SS4UUUUUUU4S jjjn[        US9 n/ nSnU[!        T5      S-
  :  a  ["        R$                  " SS5      n	U	S:X  ah  ["        R$                  " SUS-  5      n
['        U
[!        T5      U-
  5      nUS-   nX-   S-   nUR)                  XYTX 5      nUR+                  U5        X-  nO)U	S:X  a#  UR)                  UU	5      nUR+                  U5        U[!        T5      S-
  :  a  M  SSS5        [-        W5        U H  nUR/                  5       nUc  M  Ue   [1        U [2        5      (       a3  U R5                  5       R6                  SL a  [8        R:                  " U5        [8        R<                  " TU5        [8        R>                  " TU5        [8        R@                  " TU5        [8        RB                  " T5        ["        RD                  " [G        U5       Vs/ s H  nUPM     snS5      nSn[8        RH                  " TUUUS9  g! , (       d  f       GN&= fs  snf )zeTest that will use multiple threads to interleave operations on the db and verify they work correctlyr2   r3   r   r    r!   r"   r.   r/   r0   r1   N	operationids_to_modifyr   c           
      n  > U S:X  a  Uc   eU Vs/ s H  nTR                  U5      PM     nn[        U5      S:X  a  gTR                  UTb  U Vs/ s H  nTU   PM
     snOSTb  U Vs/ s H  nTU   PM
     snOSTb  U Vs/ s H  nTU   PM
     snOSS9  T   T
R                  U5        SSS5        gU S:X  a  / nSnT   [	        T
R                  5       5      nSSS5        U Vs/ s H  nTR                  U5      PM     nn[        U5      S:X  d  [        U5      U:  a  g[        R                  " U[        S[        U5      5      5      nU Vs/ s H  nTU   PM
     n	nTR                  U	US9  ggs  snf s  snf s  snf s  snf ! , (       d  f       g= f! , (       d  f       N= fs  snf s  snf )z,Perform a random operation on the collectionr   Nr   r9   r:   r   )r<   )
indexrA   rD   updatelistcopyr   rL   rB   query)rZ   r[   idindices_to_modifyr(   currently_added_idsr<   currently_added_indicesr=   query_vectors	added_idsrO   r"   r    r   lockr!   s             r   perform_operation6_test_interleaved_add_query.<locals>.perform_operationx   s    > ,,,9F G22 G$%*HH!) 4EE3DaJqM3DE( 2CC1BA9Q<1BC( 2CC1BA9Q<1BC     / !^"$I&*9>>+;&<# ?R&S?Rsyy}?R#&S'(A-./);
 #MM'B345M 5BBMqZ]MMBJJ#  + % !H F D D 
 &S Cs;   E7E<
+FFFF*F-F2
F
F*r6   r8   r9   r      r   Tr:   r;   )N)%r?   r@   r   r*   r   r   r$   floatr   set	threadingLockr>   intr	   r   rA   r   r   rB   rC   rE   r   rF   
isinstancer   get_settingsis_persistentrG    fd_not_exceeding_threadpool_sizerH   rI   rJ   rK   rL   r#   rM   )r+   r   r   r,   rN   ri   rP   rQ   rR   rZ   rS   rT   rU   rV   rW   rF   r(   r=   r<   rg   rO   r"   r    r   rh   r!   s                      @@@@@@@r   _test_interleaved_add_queryru   e   s   
 LLN##:J#KD%a+K
tCy+e,
-Cd5k;|#<=JT(^[%=>IK(I%I>>D	GA3nQC{m8
LM >B00'/S	':0	0 0d 
	4%'
3s8a<'q!,IA~#^^AqBw7
j#c(Z*?@"Q *Q.!):s5~Vv&%
a!% v&! 3s8a<' 
5* 	M$$&	 O 
 	6:&&6+>+>+@+N+NRV+V33K@T;'{+t[1T" MMeAh"7h1h"7<MI#	Q 
5	4L #8s   4CK,>K>,
K;c                     [        S5       HH  n[        R                  " S[        R                  " 5       S-  5      n[        5       u  p4[        XXB5        MJ     g N   rk   )r#   r   r   multiprocessing	cpu_countr   rX   r+   r(   r,   r   r   s        r   test_multithreaded_addr|      sB    1XnnQ(A(A(Ca(GH"$1: r   c                     [        S5       HH  n[        R                  " S[        R                  " 5       S-  5      n[        5       u  p4[        XXB5        MJ     g rw   )r#   r   r   ry   rz   r   ru   r{   s        r   test_interleaved_add_queryr~      sB    1XnnQ(A(A(Ca(GH"$#Fq> r   )%ry   concurrent.futuresr   r   r   r   rn   typingr   r   r   r	   r
   r   r   numpyr%   chromadb.apir   !chromadb.test.property.invariantsr2   propertyrG   chromadb.api.segmentr   !chromadb.test.property.strategiesr   r   chromadb.typesr   rp   r   r*   rX   ru   r|   r~    r   r   <module>r      s     ? ?   > > >  " 6 6 + 7 > #U38_ !3 !3 !9 !&999"%9479	9xrrr"%r47r	rj;9 ; ;?y ?T ?r   