§
    ˜Štj¹  ã                   ó.  — d dl Z d dlZ d dlZd dlZd dl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 d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlZd dlmZ 	 ddededededef
d„Z de!e         ddfd„Z"dd„Z#deddfd„Z$dedededdfd„Z%deddfd„Z&dS ) é    N)ÚEvent)ÚClient)Ú
Collection)Úcli)Úbuild_cli_args)ÚSettingsÚSystem)Úget_sql)ÚSqliteDB)ÚTable)Ú
invariantsé   ç      ð?ÚhostÚportÚmax_retriesÚinitial_delayÚreturnc                 ó  — |}t          |¦  «        D ]x}	 t          j        | |¬¦  «        }|                     ¦   «         }|dk    r dS n# t          $ r t          d¦  «         Y nw xY w||dz
  k     rt          j        |¦  «         |dz  }ŒydS )a9  Wait for server to be ready using exponential backoff.
    Args:
        client: ChromaDB client instance
        max_retries: Maximum number of retry attempts
        initial_delay: Initial delay in seconds before first retry
    Returns:
        bool: True if server is ready, False if max retries exceeded
    ©r   r   r   Tz!Heartbeat failed, trying again...é   é   F)ÚrangeÚchromadbÚ
HttpClientÚ	heartbeatÚ	ExceptionÚprintÚtimeÚsleep)r   r   r   r   ÚdelayÚattemptÚclientr   s           úT/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/chromadb/test/test_cli.pyÚwait_for_serverr%      s¿   € ð €EÝ˜Ñ%Ô%ð ð ˆð	ÝÔ(¨d¸Ð>Ñ>Ô>ˆFØ×(Ò(Ñ*Ô*ˆIØ˜1Š}ˆ}Ø�t�tð øåð 	ð 	ð 	ÝÐ5Ñ6Ô6Ð6ØˆDð	øøøð �[ 1‘_Ò$Ð$ÝŒJ�uÑÔÐØ�Q‰JˆEøàˆ5s   •0A	Á	A%Á$A%Úargsc                 óD   — | t           _        t          j        ¦   «          d S )N)ÚsysÚargvr   Úapp)r&   s    r$   Ú	start_appr+   2   s   € Ø…C„HÝ„G�I„I€I€I€Ió    c                  ó‚  — dddœ} ddg}|                      t          di | ¤Ž¦  «         t          |¦  «         t          j        t
          |f¬¦  «        }|                     ¦   «          t          j        d¦  «         t          dd¬	¦  «        s
J d
¦   «         ‚| 
                    ¦   «          |                     ¦   «          d S )NÚchroma_test_dataiA  )Úpathr   ÚchromaÚrun©Útargetr&   r   Ú	localhostr   z4Server failed to start within maximum retry attempts© )Úextendr   r   ÚmultiprocessingÚProcessr+   Ústartr   r    r%   Ú	terminateÚjoin)Úkwargsr&   Úserver_processs      r$   Útest_appr>   6   sÆ   € Ø(°$Ð7Ð7€FØ�eÐ€DØ‡K‚K•Ð(Ð( Ð(Ð(Ñ)Ô)Ð)Ý	ˆ$�K„K€KÝ$Ô,µIÀTÀGÐLÑLÔL€NØ×ÒÑÔÐÝ„Jˆq�M„M€Må °$Ð7Ñ7Ô7ÐoÐoÐ9oÑoÔoÐ7à×ÒÑÔÐØ×ÒÑÔÐÐÐr,   Úsqlite_persistentc                 óŽ  — | }|                      t          ¦  «        }|j        }|                     dd¦  «         |                     |¦  «         t          j        |¦  «        }|                     d¦  «        }|                     d¦  «        }dt          dt          dd fd„} ||d	¦  «          ||d
¦  «         | 
                    ¦   «         5 }t          d¦  «        }	|                     ¦   «                              |	¦  «                             d¦  «        }
t          |
¦  «        \  }}|                     ||¦  «         |                     ¦   «         g k    sJ ‚	 d d d ¦  «         n# 1 swxY w Y   ddd|j        j        dgt(          _        t-          j        ¦   «          | 
                    ¦   «         5 }t          d¦  «        }	|                     ¦   «                              |	¦  «                             d¦  «        }
t          |
¦  «        \  }}|                     ||¦  «         |                     ¦   «         }t1          |¦  «        dk    sJ ‚|d         d         dk    sJ ‚	 d d d ¦  «         n# 1 swxY w Y   t3          |d¦  «        r|`|j                             d¦  «        j        sJ ‚t9          j        |||gd¦  «         d S )NÚautomatically_purgeFÚcollection1Úcollection2Ú
collectionÚnumr   c                 ó¦   — d„ t          |¦  «        D ¦   «         }t          j                             |d¦  «        }|                      ||¬¦  «         d S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS r5   )Ústr)Ú.0Úis     r$   ú
<listcomp>z4test_vacuum.<locals>.add_records.<locals>.<listcomp>T   s   € Ð*Ð*Ð*˜!�s�1‰vŒvÐ*Ð*Ð*r,   r   )ÚidsÚ
embeddings)r   ÚnpÚrandomÚrandÚadd)rD   rE   rL   rM   s       r$   Úadd_recordsz test_vacuum.<locals>.add_recordsS   sL   € Ø*Ð*�u S™zœzÐ*Ñ*Ô*ˆÝ”Y—^’^ C¨Ñ+Ô+ˆ
Ø�Š˜3¨:ˆÑ6Ô6Ð6Ð6Ð6r,   éd   iÐ  Úmaintenance_logÚ*r0   Úvacuumú--pathú--forcer   r   r   ÚconfigT)Úinstancer   rY   Úset_parameterÚ
set_configr   Úfrom_systemÚcreate_collectionr   ÚintÚtxr   ÚquerybuilderÚfrom_Úselectr
   ÚexecuteÚfetchallÚsettingsÚpersist_directoryr(   r)   r   r*   ÚlenÚhasattrÚget_parameterÚvaluer   Úlog_size_below_max)r?   ÚsystemÚsqliterY   r#   rB   rC   rR   ÚcurÚtÚqÚsqlÚparamsÚrowss                 r$   Útest_vacuumru   E   s+  € Ø€FØ�_Š_�XÑ&Ô&€Fð Œ]€FØ
×ÒÐ.°Ñ6Ô6Ð6Ø
×Ò�fÑÔÐõ Ô Ñ'Ô'€FØ×*Ò*¨=Ñ9Ô9€KØ×*Ò*¨=Ñ9Ô9€Kð7¥
ð 7µð 7¸ð 7ð 7ð 7ð 7ð
 €K�˜SÑ!Ô!Ð!Ø€K�˜UÑ#Ô#Ð#ð 
�Š‰Œð $˜ÝÐ#Ñ$Ô$ˆØ×ÒÑ!Ô!×'Ò'¨Ñ*Ô*×1Ò1°#Ñ6Ô6ˆÝ˜a‘j”j‰ˆˆVØ�Š�C˜Ñ Ô Ð Ø�|Š|‰~Œ~ Ò#Ð#Ð#Ð#Ð#ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð ˜( H¨f¬oÔ.OÐQZÐ[…C„HÝ„G�I„I€Ið 
�Š‰Œð &˜ÝÐ#Ñ$Ô$ˆØ×ÒÑ!Ô!×'Ò'¨Ñ*Ô*×1Ò1°#Ñ6Ô6ˆÝ˜a‘j”j‰ˆˆVØ�Š�C˜Ñ Ô Ð Ø�|Š|‰~Œ~ˆÝ�4‰yŒy˜AŠ~ˆ~ˆ~ˆ~Ø�AŒw�qŒz˜XÒ%Ð%Ð%Ð%Ð%ð&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &õ ˆv�xÑ Ô ð 
àˆMàŒ=×&Ò&Ð'<Ñ=Ô=ÔCÐCÐCÐCõ Ô! &¨;¸Ð*DÀdÑKÔKÐKÐKÐKs&   ÃBE&Å&E*Å-E*Æ3B/I/É/I3É6I3rf   Úready_eventÚshutdown_eventc                 ó|  — t          | ¬¦  «        }|                     ¦   «          |                     t          ¦  «        }|                     ¦   «         5 }|                     d¦  «         |                     ¦   «          |                     ¦   «          d d d ¦  «         n# 1 swxY w Y   |                     ¦   «          d S )N)rf   z"INSERT INTO tenants DEFAULT VALUES)	r	   r9   rZ   r   r`   rd   ÚsetÚwaitÚstop)rf   rv   rw   rm   rn   ro   s         r$   Úsimulate_transactional_writer|   {   sÚ   € õ ˜XÐ&Ñ&Ô&€FØ
‡L‚L�N„N€NØ�_Š_�XÑ&Ô&€Fà	�Š‰Œð ˜Ø�ŠÐ8Ñ9Ô9Ð9Ø�ŠÑÔÐØ×ÒÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð
 ‡K‚K�M„M€M€M€Ms   Á>BÂB!Â$B!c                 ó†  — t          j        d¦  «        }|                     ¦   «         }|                     ¦   «         }|                     t          | j        ||f¬¦  «        }|                     ¦   «          |                     ¦   «          	 ddd| j        j        dddgt          _
        t          j        ¦   «          |                     ¦   «         }d	|j                             ¦   «         v sJ ‚	 |                     ¦   «          |                     ¦   «          d
S # |                     ¦   «          |                     ¦   «          w xY w)zVVacuum command should fail with details if there is a long-lived lock on the database.Úspawnr2   r0   rV   rW   rX   z	--timeoutÚ10zFailed to vacuum ChromaN)r7   Úget_contextr   r8   r|   rf   r9   rz   rg   r(   r)   r   r*   Ú
readouterrÚerrÚstripry   r;   )r?   ÚcapfdÚctxrv   rw   ÚprocessÚcaptureds          r$   Útest_vacuum_errors_if_lockedrˆ   Š   s"  € å
Ô
% gÑ
.Ô
.€CØ—)’)‘+”+€KØ—Y’Y‘[”[€NØ�kŠkÝ+ØÔ(¨+°~ÐFð ñ ô €Gð ‡M‚M�O„O€OØ×ÒÑÔÐðØ˜h¨Ð2CÔ2LÔ2^Ð`iÐkvÐx|Ð}�ŒÝŒ‰	Œ	ˆ	Ø×#Ò#Ñ%Ô%ˆØ(¨H¬L×,>Ò,>Ñ,@Ô,@Ð@Ð@Ð@Ð@Ð@à×ÒÑÔÐØ�Š‰Œˆˆˆøð 	×ÒÑÔÐØ�Š‰Œˆˆøøøs   Â
A!D Ä*E )r   r   )r   N)'r7   Úmultiprocessing.contextr(   r   Úmultiprocessing.synchronizer   r   Úchromadb.api.clientr   Úchromadb.api.models.Collectionr   Úchromadb.clir   Úchromadb.cli.clir   Úchromadb.configr   r	   Úchromadb.db.baser
   Úchromadb.db.impl.sqliter   Úpypikar   ÚnumpyrN   Úchromadb.test.propertyr   rH   r_   ÚfloatÚboolr%   Úlistr+   r>   ru   r|   rˆ   r5   r,   r$   ú<module>r˜      s	  ðØ Ð Ð Ð Ø Ð Ð Ð Ø 
€
€
€
Ø €€€Ø -Ð -Ð -Ð -Ð -Ð -à €€€Ø &Ð &Ð &Ð &Ð &Ð &Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø $Ð $Ð $Ð $Ð $Ð $Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð à -Ð -Ð -Ð -Ð -Ð -ð
 25ðð ØðØðàðà).ðð 
ðð ð ð ð:�D˜”Ið  $ð ð ð ð ðð ð ð ð3L 6ð 3L¨dð 3Lð 3Lð 3Lð 3LðlØðØ%*ðØ<Aðà	ðð ð ð ð°Fð Àdð ð ð ð ð ð r,   