§
    ˜Štj^!  ã            
       ó:  — d dl Z d dlmZmZmZ d dlZd dlZd dlmZm	Z	m
Z
mZmZmZmZ d dlZd dlmZ d dlmc mc mZ d dlmZ d dlmZ d dlmZ d dlmZ d	eeef         fd
„Zdeded	efd„Z dedededed	df
d„Z!dedededed	df
d„Z"ded	dfd„Z#ded	dfd„Z$dS )é    N)ÚFutureÚThreadPoolExecutorÚwait)ÚAnyÚDictÚListÚOptionalÚSetÚTupleÚcast)Ú	ClientAPI)Ú
SegmentAPI)Ú	RecordSet)Útest_hnsw_config)ÚMetadataÚreturnc                  ó^   — t          j        dd¦  «        } t          j        dd¦  «        }| |fS )Né
   i'  é   )ÚrandomÚrandint)ÚNÚDs     ú^/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/chromadb/test/test_multithreaded.pyÚgenerate_data_shaper      s-   € ÝŒ�r˜5Ñ!Ô!€AÝŒ�r˜3ÑÔ€AØˆqˆ6€Mó    r   r   c                 ó&  — d„ t          | ¦  «        D ¦   «         }d„ t          | ¦  «        D ¦   «         }d„ t          | ¦  «        D ¦   «         }t          j                             | |¦  «                             ¦   «         }t          ||||¬¦  «        }|S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS © )Ústr©Ú.0Úis     r   ú
<listcomp>z'generate_record_set.<locals>.<listcomp>   s   € Ð
$Ð
$Ð
$�a�3ˆq‰6Œ6Ð
$Ð
$Ð
$r   c                 ó   — g | ]}|› |i‘ŒS r   r   r!   s     r   r$   z'generate_record_set.<locals>.<listcomp>   s   € Ð&EÐ&EÐ&E°q¨1¨° {Ð&EÐ&EÐ&Er   c                 ó   — g | ]}d |› �‘ŒS )zdoc r   r!   s     r   r$   z'generate_record_set.<locals>.<listcomp>   s   € Ð.Ð.Ð. �˜��Ð.Ð.Ð.r   ©ÚidsÚ
embeddingsÚ	metadatasÚ	documents)ÚrangeÚnpr   ÚrandÚtolistr   )r   r   r(   r*   r+   r)   Únormalized_record_sets          r   Úgenerate_record_setr1      s™   € Ø
$Ð
$�5 ™8œ8Ð
$Ñ
$Ô
$€CØ&EÐ&E½EÀ!¹H¼HÐ&EÑ&EÔ&E€IØ.Ð.¥U¨1¡X¤XÐ.Ñ.Ô.€IÝ”—’  1Ñ%Ô%×,Ò,Ñ.Ô.€Jõ (1ØØØØð	(ñ (ô (Ðð !Ð r   ÚclientÚnum_workersc           
      ó¶  — t          ||¦  «        }|d         }|d         }|d         }|d         }t          d|› d|› d|› d�¦  «         |                      ¦   «          |                      d	t          ¬
¦  «        }	t          |¬¦  «        5 }
g }d}|t          |¦  «        k     rÛt          j        d|dz  ¦  «        }t          |t          |¦  «        |z
  ¦  «        }|dz   }||z   dz   }|�t          |||…         ¦  «        dk    rnx|
 
                    |	j        |||…         |�
|||…         nd |�
|||…         nd |�
|||…         nd ¬¦  «        }|                     |¦  «         ||z  }|t          |¦  «        k     °Ûd d d ¦  «         n# 1 swxY w Y   t          |¦  «         |D ]}|                     ¦   «         }|�|‚Œt          j        |	|¦  «         t          j        |	|¦  «         t          j        |	|¦  «         t          j        |	¦  «         t          j        d„ t+          |¦  «        D ¦   «         d¦  «        }d}t          j        |	|||¬¦  «         d S )Nr(   r)   r*   r+   úAdding ú records with ú dimensions on ú workersÚtest©ÚnameÚmetadata©Úmax_workerséÿÿÿÿé   r   r   r'   c                 ó   — g | ]}|‘ŒS r   r   r!   s     r   r$   z+_test_multithreaded_add.<locals>.<listcomp>[   ó   € Ð"7Ð"7Ð"7¨ 1Ð"7Ð"7Ð"7r   é   ©Ú	n_resultsÚquery_indices)r1   ÚprintÚresetÚcreate_collectionr   r   Úlenr   r   ÚminÚsubmitÚaddÚappendr   Ú	exceptionÚ
invariantsÚcountÚ	ids_matchÚmetadatas_matchÚno_duplicatesÚsampler,   Úann_accuracy)r2   r   r   r3   Úrecords_setr(   r)   r*   r+   ÚcollÚexecutorÚfuturesÚ
total_sentÚ
batch_sizeÚto_sendÚstartÚendÚfuturerO   rF   rE   s                        r   Ú_test_multithreaded_addra   )   sø  € õ & a¨Ñ+Ô+€KØ
�eÔ
€CØ˜\Ô*€JØ˜KÔ(€IØ˜KÔ(€Iå	Ð
L�AÐ
LÐ
L QÐ
LÐ
L°{Ð
LÐ
LÐ
LÑMÔMÐMð ‡L‚L�N„N€NØ×#Ò#¨Õ:JÐ#ÑKÔK€DÝ	¨Ð	4Ñ	4Ô	4ð "¸Ø%'ˆØˆ
Ø�3˜s™8œ8Ò#Ð#åœ¨¨1°©7Ñ3Ô3ˆJÝ˜*¥c¨#¡h¤h°Ñ&;Ñ<Ô<ˆGØ ‘NˆEØ˜wÑ&¨Ñ*ˆCØÐ%­#¨j¸¸s¸Ô.CÑ*DÔ*DÈÒ*IÐ*IØØ—_’_Ø”Ø˜˜c˜	”NØ4>Ð4J˜: e¨C iÔ0Ð0ÐPTØ2;Ð2G˜) E¨# IÔ.Ð.ÈTØ2;Ð2G˜) E¨# IÔ.Ð.ÈTð %ñ ô ˆFð �NŠN˜6Ñ"Ô"Ð"Ø˜'Ñ!ˆJð! �3˜s™8œ8Ò#Ð#ð"ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "õ* 	ˆ�M„M€Màð ð ˆØ×$Ò$Ñ&Ô&ˆ	ØÐ ØˆOð !õ Ô�T˜;Ñ'Ô'Ð'ÝÔ˜˜{Ñ+Ô+Ð+ÝÔ˜t [Ñ1Ô1Ð1ÝÔ˜TÑ"Ô"Ð"õ ”MÐ"7Ð"7­e°A©h¬hÐ"7Ñ"7Ô"7¸Ñ<Ô<€MØ€IÝÔØØØØ#ð	ñ ô ð ð ð s   Â
C3F	Æ	FÆFc           	      ó¼  ‡‡‡‡‡‡‡— |                       ¦   «          |                      dt          ¬¦  «        Št          ||¦  «        }t	          t
          t                   |d         ¦  «        Št	          t
          t                   |d         ¦  «        Št	          t
          t                   |d         ¦  «        Š|d         Št          ¦   «         Št          j        ¦   «         Št          d|› d|› d	|› d
�¦  «         	 ddt          dt          t
          t                            ddfˆˆˆˆˆˆˆfd„}t          |¬¦  «        5 }g }d}|t!          ‰¦  «        dz
  k     rát#          j        dd¦  «        }	|	dk    rt#          j        d|dz  ¦  «        }
t'          |
t!          ‰¦  «        |z
  ¦  «        }|dz   }||z   dz   }|                     ||	‰||…         ¦  «        }|                     |¦  «         ||z  }n1|	dk    r+|                     ||	¦  «        }|                     |¦  «         |t!          ‰¦  «        dz
  k     °áddd¦  «         n# 1 swxY w Y   t-          |¦  «         |D ]}|                     ¦   «         }|�|‚Œt1          | t2          ¦  «        r/|                      ¦   «         j        du rt9          j        |¦  «         t9          j        ‰|¦  «         t9          j        ‰|¦  «         t9          j         ‰|¦  «         t9          j!        ‰¦  «         t#          j"        d„ tG          |¦  «        D ¦   «         d¦  «        }d}t9          j$        ‰|||¬¦  «         dS )zeTest that will use multiple threads to interleave operations on the db and verify they work correctlyr9   r:   r(   r)   r*   r+   r5   r6   r7   r8   NÚ	operationÚids_to_modifyr   c           	      óü  •— | dk    r¢|€J ‚ˆfd„|D ¦   «         }t          |¦  «        dk    rdS ‰	                     |‰�ˆfd„|D ¦   «         nd‰�ˆfd„|D ¦   «         nd‰
�ˆ
fd„|D ¦   «         nd¬¦  «         ‰5  ‰                     |¦  «         ddd¦  «         dS # 1 swxY w Y   dS | dk    rÌg }d	}‰5  t          ‰                     ¦   «         ¦  «        }ddd¦  «         n# 1 swxY w Y   ˆfd
„|D ¦   «         }t          |¦  «        dk    st          |¦  «        |k     rdS t          j        |t          dt          |¦  «        ¦  «        ¦  «        }ˆfd„|D ¦   «         }‰	                     ||¬¦  «         dS dS )z,Perform a random operation on the collectionr   Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   ©Úindex©r"   Úidr(   s     €r   r$   zJ_test_interleaved_add_query.<locals>.perform_operation.<locals>.<listcomp>~   s#   ø€ Ð GÐ GÐ G°2 §¢¨2¡¤Ð GÐ GÐ Gr   c                 ó    •— g | ]
}‰|         ‘ŒS r   r   ©r"   r#   r)   s     €r   r$   zJ_test_interleaved_add_query.<locals>.perform_operation.<locals>.<listcomp>„   s   ø€ ÐEÐEÐE¨a˜J qœMÐEÐEÐEr   c                 ó    •— g | ]
}‰|         ‘ŒS r   r   )r"   r#   r*   s     €r   r$   zJ_test_interleaved_add_query.<locals>.perform_operation.<locals>.<listcomp>‡   ó   ø€ ÐCÐCÐC¨A˜9 Qœ<ÐCÐCÐCr   c                 ó    •— g | ]
}‰|         ‘ŒS r   r   )r"   r#   r+   s     €r   r$   zJ_test_interleaved_add_query.<locals>.perform_operation.<locals>.<listcomp>Š   rn   r   r'   r@   rC   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   rg   ri   s     €r   r$   zJ_test_interleaved_add_query.<locals>.perform_operation.<locals>.<listcomp>•   s#   ø€ Ð&SÐ&SÐ&S¸ s§y¢y°¡}¤}Ð&SÐ&SÐ&Sr   r   c                 ó    •— g | ]
}‰|         ‘ŒS r   r   rl   s     €r   r$   zJ_test_interleaved_add_query.<locals>.perform_operation.<locals>.<listcomp>£   s   ø€ ÐBÐBÐB¨q˜Z¨œ]ÐBÐBÐBr   )rE   )	rJ   rM   ÚupdateÚlistÚcopyr   rU   rK   Úquery)rc   rd   Úindices_to_modifyÚcurrently_added_idsrE   Úcurrently_added_indicesrF   Úquery_vectorsÚ	added_idsrX   r+   r)   r(   Úlockr*   s           €€€€€€€r   Úperform_operationz6_test_interleaved_add_query.<locals>.perform_operationx   s©  ø€ ð ˜Š>ˆ>Ø Ð,Ð,Ð,Ø GÐ GÐ GÐ G¸Ð GÑ GÔ GÐåÐ$Ñ%Ô%¨Ò*Ð*Ø�Ø�HŠHØ!àÐ)ð FÐEÐEÐEÐ3DÐEÑEÔEÐEààÐ(ð DÐCÐCÐCÐ1BÐCÑCÔCÐCààÐ(ð DÐCÐCÐCÐ1BÐCÑCÔCÐCàð ñ ô ð ð ð 0ð 0Ø× Ò  Ñ/Ô/Ð/ð0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0ð 0ð 0à˜!Š^ˆ^Ø"$ÐØˆIØð =ð =Ý&*¨9¯>ª>Ñ+;Ô+;Ñ&<Ô&<Ð#ð=ð =ð =ñ =ô =ð =ð =ð =ð =ð =ð =øøøð =ð =ð =ð =à&SÐ&SÐ&SÐ&SÐ?RÐ&SÑ&SÔ&SÐ#åÐ'Ñ(Ô(¨AÒ-Ð-ÝÐ.Ñ/Ô/°)Ò;Ð;à�õ
 #œMØ'Ý�B�Ð3Ñ4Ô4Ñ5Ô5ñô ˆMð CÐBÐBÐB°MÐBÑBÔBˆMà�JŠJØØ#ð ñ ô ð ð ð ð+ ˆ^s$   Á:BÂB!Â$B!Â6"C$Ã$C(Ã+C(r=   r?   r@   r   é   r   Tc                 ó   — g | ]}|‘ŒS r   r   r!   s     r   r$   z/_test_interleaved_add_query.<locals>.<listcomp>Ð   rB   r   rC   rD   )N)%rH   rI   r   r1   r   r   r    Úfloatr   ÚsetÚ	threadingÚLockrG   Úintr	   r   rJ   r   r   rK   rL   rN   r   rO   Ú
isinstancer   Úget_settingsÚis_persistentrP   Ú fd_not_exceeding_threadpool_sizerQ   rR   rS   rT   rU   r,   rV   )r2   r   r   r3   rW   r|   rY   rZ   r[   rc   r\   r]   r^   r_   r`   rO   rF   rE   rz   rX   r+   r)   r(   r{   r*   s                     @@@@@@@r   Ú_test_interleaved_add_queryrˆ   e   sÏ  øøøøøøø€ ð
 ‡L‚L�N„N€NØ×#Ò#¨Õ:JÐ#ÑKÔK€Då% a¨Ñ+Ô+€KÝ
�t•CŒy˜+ eÔ,Ñ
-Ô
-€CÝ•d�5”k ;¨|Ô#<Ñ=Ô=€JÝ•T�(”^ [°Ô%=Ñ>Ô>€IØ˜KÔ(€Iå™%œ%€IÝŒ>ÑÔ€Då	Ð
L�AÐ
LÐ
L QÐ
LÐ
L°{Ð
LÐ
LÐ
LÑMÔMÐMð >Bð0ð 0Ýð0Ý'/µµS´	Ô':ð0à	ð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0õd 
¨Ð	4Ñ	4Ô	4ð '¸Ø%'ˆØˆ
Ø�3˜s™8œ8 a™<Ò'Ð'Ýœ q¨!Ñ,Ô,ˆIØ˜AŠ~ˆ~å#œ^¨A¨q°B©wÑ7Ô7�
Ý˜j­#¨c©(¬(°ZÑ*?Ñ@Ô@�Ø" Q™�Ø  7Ñ*¨QÑ.�Ø!ŸšÐ):¸IÀsÈ5ÐQTÈ9Ä~ÑVÔV�Ø—’˜vÑ&Ô&Ð&Ø˜gÑ%�
�
Ø˜a’�Ø!ŸšØ%Øñô �ð —’˜vÑ&Ô&Ð&ð! �3˜s™8œ8 a™<Ò'Ð'ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'õ* 	ˆ�M„M€Màð ð ˆØ×$Ò$Ñ&Ô&ˆ	ØÐ ØˆOð !õ 	�6�:Ñ&Ô&ðAØ+1×+>Ò+>Ñ+@Ô+@Ô+NÐRVÐ+VÐ+VåÔ3°KÑ@Ô@Ð@åÔ�T˜;Ñ'Ô'Ð'ÝÔ˜˜{Ñ+Ô+Ð+ÝÔ˜t [Ñ1Ô1Ð1ÝÔ˜TÑ"Ô"Ð"õ ”MÐ"7Ð"7­e°A©h¬hÐ"7Ñ"7Ô"7¸Ñ<Ô<€MØ€IÝÔØØØØ#ð	ñ ô ð ð ð s   Å C<IÉIÉIc                 óÂ   — t          d¦  «        D ]N}t          j        dt          j        ¦   «         dz  ¦  «        }t          ¦   «         \  }}t          | |||¦  «         ŒOd S ©Né   r}   )r,   r   r   ÚmultiprocessingÚ	cpu_countr   ra   ©r2   r#   r3   r   r   s        r   Útest_multithreaded_addr�   Ú   sf   € Ý�1‰XŒXð ;ð ;ˆÝ”n Q­Ô(AÑ(CÔ(CÀaÑ(GÑHÔHˆÝ"Ñ$Ô$‰ˆˆ1Ý ¨¨1¨kÑ:Ô:Ð:Ð:ð;ð ;r   c                 óÂ   — t          d¦  «        D ]N}t          j        dt          j        ¦   «         dz  ¦  «        }t          ¦   «         \  }}t          | |||¦  «         ŒOd S rŠ   )r,   r   r   rŒ   r�   r   rˆ   rŽ   s        r   Útest_interleaved_add_queryr‘   á   sf   € Ý�1‰XŒXð ?ð ?ˆÝ”n Q­Ô(AÑ(CÔ(CÀaÑ(GÑHÔHˆÝ"Ñ$Ô$‰ˆˆ1Ý# F¨A¨q°+Ñ>Ô>Ð>Ð>ð?ð ?r   )%rŒ   Úconcurrent.futuresr   r   r   r   r�   Útypingr   r   r   r	   r
   r   r   Únumpyr-   Úchromadb.apir   Ú!chromadb.test.property.invariantsr9   ÚpropertyrP   Úchromadb.api.segmentr   Ú!chromadb.test.property.strategiesr   r   Úchromadb.typesr   rƒ   r   r1   ra   rˆ   r�   r‘   r   r   r   ú<module>r›      s!  ðØ Ð Ð Ð Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø €€€Ø Ð Ð Ð Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø Ð Ð Ð à "Ð "Ð "Ð "Ð "Ð "Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø +Ð +Ð +Ð +Ð +Ð +Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø >Ð >Ð >Ð >Ð >Ð >Ø #Ð #Ð #Ð #Ð #Ð #ð˜U 3¨ 8œ_ð ð ð ð ð!˜3ð ! 3ð !¨9ð !ð !ð !ð !ð&9Øð9Øð9Ø"%ð9Ø47ð9à	ð9ð 9ð 9ð 9ðxrØðrØðrØ"%ðrØ47ðrà	ðrð rð rð rðj; 9ð ;°ð ;ð ;ð ;ð ;ð? yð ?°Tð ?ð ?ð ?ð ?ð ?ð ?r   