Ë
    lQêj¹  ã                   ó&  — 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&y)é    N)ÚEvent)ÚClient)Ú
Collection)Úcli)Úbuild_cli_args)ÚSettingsÚSystem)Úget_sql)ÚSqliteDB)ÚTable)Ú
invariantsÚhostÚportÚmax_retriesÚinitial_delayÚreturnc                 ó  — |}t        |«      D ]U  }	 t        j                  | |¬«      }|j                  «       }|dkD  r y	 ||dz
  k  sŒ<t        j                  |«       |dz  }ŒW y# t        $ r t        d«       Y Œ<w xY w)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           ú[/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/chromadb/test/test_cli.pyÚwait_for_serverr#      s–   € ð €EÜ˜Ó%ò ˆð	Ü×(Ñ(¨d¸Ô>ˆFØ×(Ñ(Ó*ˆIØ˜1Š}Ùð ð �[ 1‘_Ó$Ü�J‰J�uÔØ�Q‰J‰Eðð øô ò 	ÜÐ5Ô6Ùð	ús   ’,A'Á'A>Á=A>Úargsc                 óB   — | t         _        t        j                  «        y )N)ÚsysÚargvr   Úapp)r$   s    r"   Ú	start_appr)   2   s   € Ø„C„HÜ‡G�G…Ió    c                  óJ  — dddœ} ddg}|j                  t        di | ¤Ž«       t        |«       t        j                  t
        |f¬«      }|j                  «        t        j                  d«       t        dd¬	«      sJ d
«       ‚|j                  «        |j                  «        y )NÚchroma_test_dataiA  )Úpathr   ÚchromaÚrun©Útargetr$   é   Ú	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€FØ�eÐ€DØ‡K�K”Ñ( Ñ(Ô)Ü	ˆ$„KÜ$×,Ñ,´IÀTÀGÔL€NØ×ÑÔÜ‡J�Jˆq„Mä °$Õ7ÐoÐ9oÓoÐ7à×ÑÔØ×ÑÕr*   Úsqlite_persistentc                 óÔ  — | }|j                  t        «      }|j                  }|j                  dd«       |j	                  |«       t        j                  |«      }|j                  d«      }|j                  d«      }dt        dt        dd fd„} ||d	«        ||d
«       |j                  «       5 }t        d«      }	|j                  «       j                  |	«      j                  d«      }
t        |
«      \  }}|j!                  ||«       |j#                  «       g k(  sJ ‚	 d d d «       ddd|j$                  j&                  dgt(        _        t-        j.                  «        |j                  «       5 }t        d«      }	|j                  «       j                  |	«      j                  d«      }
t        |
«      \  }}|j!                  ||«       |j#                  «       }t1        |«      dk(  sJ ‚|d   d   dk(  sJ ‚	 d d d «       t3        |d«      r|`|j                  j5                  d«      j6                  sJ ‚t9        j:                  |||gd«       y # 1 sw Y   �Œ1xY w# 1 sw Y   ŒexY w)NÚautomatically_purgeFÚcollection1Úcollection2Ú
collectionÚnumr   c                 ó¶   — t        |«      D �cg c]  }t        |«      ‘Œ }}t        j                  j	                  |d«      }| j                  ||¬«       y c c}w )Nr   )ÚidsÚ
embeddings)r   ÚstrÚnpÚrandomÚrandÚadd)rC   rD   ÚirF   rG   s        r"   Úadd_recordsz test_vacuum.<locals>.add_recordsS   sF   € Ü$ S›zÖ*˜!Œs�1�vÐ*ˆÐ*Ü—Y‘Y—^‘^ C¨Ó+ˆ
Ø�‰˜3¨:ˆÕ6ùò +s   ŽAéd   iÐ  Úmaintenance_logÚ*r.   Úvacuumú--pathú--forcer   r   r   ÚconfigT)Úinstancer   rU   Ú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ÚsqliterU   r!   rA   rB   rN   ÚcurÚtÚqÚsqlÚparamsÚrowss                 r"   Útest_vacuumrq   E   s/  € Ø€FØ�_‰_œXÓ&€Fð �]‰]€FØ
×ÑÐ.°Ô6Ø
×Ñ�fÔô ×Ñ Ó'€FØ×*Ñ*¨=Ó9€KØ×*Ñ*¨=Ó9€Kð7¤
ð 7´ð 7¸ó 7ñ
 �˜SÔ!Ù�˜UÔ#ð 
�‰‹ð $˜ÜÐ#Ó$ˆØ×ÑÓ!×'Ñ'¨Ó*×1Ñ1°#Ó6ˆÜ˜a“j‰ˆˆVØ�‰�C˜Ô Ø�|‰|‹~ Ò#Ð#Ñ#÷$ð ˜( H¨f¯o©o×.OÑ.OÐQZÐ[„C„HÜ‡G�G„Ið 
�‰‹ð &˜ÜÐ#Ó$ˆØ×ÑÓ!×'Ñ'¨Ó*×1Ñ1°#Ó6ˆÜ˜a“j‰ˆˆVØ�‰�C˜Ô Ø�|‰|‹~ˆÜ�4‹y˜AŠ~Ðˆ~Ø�A‰w�q‰z˜XÒ%Ð%Ñ%÷&ô ˆv�xÔ àˆMà�=‰=×&Ñ&Ð'<Ó=×CÒCÐCÐCô ×!Ñ! &¨;¸Ð*DÀdÕK÷9$ñ $ú÷&ð &ús   Â2A/IÅ2BIÉIÉI'rb   Úready_eventÚshutdown_eventc                 ó2  — t        | ¬«      }|j                  «        |j                  t        «      }|j	                  «       5 }|j                  d«       |j                  «        |j                  «        d d d «       |j                  «        y # 1 sw Y   ŒxY w)N)rb   z"INSERT INTO tenants DEFAULT VALUES)	r	   r8   rV   r   r\   r`   ÚsetÚwaitÚstop)rb   rr   rs   ri   rj   rk   s         r"   Úsimulate_transactional_writerx   {   ss   € ô ˜XÔ&€FØ
‡L�L„NØ�_‰_œXÓ&€Fà	�‰‹ð ˜Ø�‰Ð8Ô9Ø�‰ÔØ×ÑÔ÷ð
 ‡K�K…M÷ð ús   Á2BÂBc                 óT  — t        j                  d«      }|j                  «       }|j                  «       }|j                  t        | j
                  ||f¬«      }|j                  «        |j                  «        	 ddd| j
                  j                  dddgt        _
        t        j                  «        |j                  «       }d	|j                  j                  «       v sJ ‚	 |j!                  «        |j#                  «        y
# |j!                  «        |j#                  «        w xY w)zVVacuum command should fail with details if there is a long-lived lock on the database.Úspawnr0   r.   rR   rS   rT   z	--timeoutÚ10zFailed to vacuum ChromaN)r6   Úget_contextr   r7   rx   rb   r8   rv   rc   r&   r'   r   r(   Ú
readouterrÚerrÚstripru   r:   )r>   ÚcapfdÚctxrr   rs   ÚprocessÚcaptureds          r"   Útest_vacuum_errors_if_lockedr„   Š   sð   € ä
×
%Ñ
% gÓ
.€CØ—)‘)“+€KØ—Y‘Y“[€NØ�k‰kÜ+Ø×(Ñ(¨+°~ÐFð ó €Gð ‡M�M„OØ×ÑÔðØ˜h¨Ð2C×2LÑ2L×2^Ñ2^Ð`iÐkvÐx|Ð}ŒŒÜ�‰Œ	Ø×#Ñ#Ó%ˆØ(¨H¯L©L×,>Ñ,>Ó,@Ñ@Ð@Ñ@à×ÑÔØ�‰�øð 	×ÑÔØ�‰�ús   Á;A(D Ä"D')r2   g      ð?)r   N)'r6   Ú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   ÚnumpyrI   Úchromadb.test.propertyr   rH   r[   ÚfloatÚboolr#   Úlistr)   r=   rq   rx   r„   r4   r*   r"   ú<module>r”      sÔ   ðÛ Û Û 
Û Ý -ã Ý &Ý 5Ý Ý +ß ,Ý $Ý ,Ý Û å -ð
 25ñØðØðàðà).ðð 
óð:�D˜‘Ið  $ó óð3L 6ð 3L¨dó 3LðlØðØ%*ðØ<Aðà	óð°Fð Àdô r*   