§
    ˜Štj³$  ã                   óx  — d dl Z d dlmZmZmZmZmZmZ d dlm	Z	m
Z
 d dlZd dlmZmZ d dlmZ d dlZd dlmZ d dlZd dlZd dlZej        deeddf         fd„¦   «         Zej        deeddf         fd	„¦   «         Zed
ef         Z ej        ddg¬¦  «        dej        deeddf         fd„¦   «         Z ej        ¦   «         dedeeddf         fd„¦   «         Zdeddfd„Zdeddfd„Zdeddfd„Z deddfd„Z!deddfd„Z"deed
ef         ee#ef         f         fd„Z$d!d„Z%d!d„Z&d!d„Z'd!d„Z(d!d„Z)d!d „Z*dS )"é    N)ÚAnyÚCallableÚ	GeneratorÚcastÚDictÚTuple)Ú	MagicMockÚpatch)ÚSettingsÚSystem)Ú	ClientAPI)ÚFastAPIÚreturnc               #   óÆ   K  — t           j                             d¦  «        rt          j        d¦  «         t          j        ¦   «         } | V — |                      ¦   «          d S )NÚCHROMA_INTEGRATION_TEST_ONLYúIntegration test only)ÚosÚenvironÚgetÚpytestÚskipÚchromadbÚEphemeralClientÚclear_system_cache©Úclients    úW/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/chromadb/test/test_client.pyÚephemeral_apir      s]   è è € å	„z‡~‚~Ð4Ñ5Ô5ð -ÝŒÐ+Ñ,Ô,Ð,ÝÔ%Ñ'Ô'€FØ
€L€L€LØ
×ÒÑÔÐÐÐó    c               #   óò   K  — t           j                             d¦  «        rt          j        d¦  «         t          j        t          j        ¦   «         dz   ¬¦  «        } | V — |  	                    ¦   «          d S )Nr   r   z/test_server©Úpath)
r   r   r   r   r   r   ÚPersistentClientÚtempfileÚ
gettempdirr   r   s    r   Úpersistent_apir&      sy   è è € å	„z‡~‚~Ð4Ñ5Ô5ð -ÝŒÐ+Ñ,Ô,Ð,ÝÔ&ÝÔ Ñ"Ô" ^Ñ3ðñ ô €Fð €L€L€LØ
×ÒÑÔÐÐÐr   .Úsync_clientÚasync_client)ÚparamsÚrequestc              #   óÜ  K  — | j         dk    r_t          d¦  «        5  t          d¦  «        5  t          j        V — d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S t          d¦  «        5  t          d¦  «        5  dt          dt          dt          fd	„}t          t          |¦  «        V — d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S )
Nr'   z4chromadb.api.client.Client._validate_tenant_databasez,chromadb.api.client.Client.get_user_identityz?chromadb.api.async_client.AsyncClient._validate_tenant_databasez7chromadb.api.async_client.AsyncClient.get_user_identityÚargsÚkwargsr   c                  óp   — t          j        ¦   «                              t          j        | i |¤Ž¦  «        }|S ©N)ÚasyncioÚget_event_loopÚrun_until_completer   ÚAsyncHttpClient)r,   r-   Úclss      r   Úfactoryz!http_api_factory.<locals>.factory1   s:   € Ý!Ô0Ñ2Ô2×EÒEÝ Ô0°$ÐA¸&ÐAÐAñô �Cð �Jr   )Úparamr
   r   Ú
HttpClientr   r   ÚHttpAPIFactory)r*   r5   s     r   Úhttp_api_factoryr9   %   s  è è € ð „}˜Ò%Ð%ÝÐIÑJÔJð 	*ð 	*ÝÐEÑFÔFð *ð *ÝÔ)Ð)Ð)Ð)ð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð 	*ð 	*õ ÐTÑUÔUð 		4ð 		4ÝÐPÑQÔQð 4ð 4ð¥3ð µ#ð ½#ð ð ð ð õ �>¨7Ñ3Ô3Ð3Ð3Ð3ð4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4ð		4ð 		4ð 		4ñ 		4ô 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4øøøð 		4ð 		4ð 		4ð 		4ð 		4ð 		4si   �A ­A¼A ÁA	ÁA ÁA	ÁA Á A$Á'A$Á<C!Â1C	Â=C!Ã	C	ÃC!ÃC	ÃC!Ã!C%Ã(C%r9   c              #   óþ   K  — t           j                             d¦  «        �9t          t           j                             d¦  «        ¦  «        } | |¬¦  «        }n
 | ¦   «         }|V — |                     ¦   «          d S )NÚCHROMA_SERVER_HTTP_PORT)Úport)r   r   r   Úintr   )r9   r<   r   s      r   Úhttp_apir>   :   s{   è è € å	„z‡~‚~Ð/Ñ0Ô0Ð<Ý•2”:—>’>Ð";Ñ<Ô<Ñ=Ô=ˆØ!Ð! tÐ,Ñ,Ô,ˆˆà!Ð!Ñ#Ô#ˆØ
€L€L€LØ
×ÒÑÔÐÐÐr   r   c                 óD   — |                       ¦   «         }|j        du sJ ‚d S )NF©Úget_settingsÚis_persistent)r   Úsettingss     r   Útest_ephemeral_clientrD   E   s-   € Ø×)Ò)Ñ+Ô+€HØÔ! UÐ*Ð*Ð*Ð*Ð*Ð*r   r&   c                 óD   — |                       ¦   «         }|j        du sJ ‚d S )NTr@   )r&   rC   s     r   Útest_persistent_clientrF   J   s-   € Ø×*Ò*Ñ,Ô,€HØÔ! TÐ)Ð)Ð)Ð)Ð)Ð)r   r>   c                 ób   — |                       ¦   «         }|j        dk    s|j        dk    sJ ‚d S d S )Núchromadb.api.fastapi.FastAPIz'chromadb.api.async_fastapi.AsyncFastAPI)rA   Úchroma_api_impl)r>   rC   s     r   Útest_http_clientrJ   O   sF   € Ø×$Ò$Ñ&Ô&€HàÔ Ð$BÒBÐBØÔ#Ð'PÒPÐPÐPð	QÐBÐBØPÐPr   c                 ó–   — 	  | t          d¬¦  «        ¬¦  «         d S # t          $ r }t          |¦  «        dk    sJ ‚Y d }~d S d }~ww xY w)Nz	127.0.0.1)Úchroma_server_host)rC   znChroma server host provided in settings[127.0.0.1] is different to the one provided in HttpClient: [localhost]©r   Ú
ValueErrorÚstr©r9   Úes     r   Ú0test_http_client_with_inconsistent_host_settingsrR   W   s“   € ð
ØÐ¥(¸kÐ"JÑ"JÔ"JÐKÑKÔKÐKÐKÐKøÝð 
ð 
ð 
å�‰FŒFØò@ð @ð @ð @ð @ð @ð @ð @ð @ð @øøøøð
øøøs   ‚ ž
A¨AÁAc                 ó˜   — 	  | dt          d¬¦  «        ¬¦  «         d S # t          $ r }t          |¦  «        dk    sJ ‚Y d }~d S d }~ww xY w)NiB  iA  )Úchroma_server_http_port)r<   rC   ziChroma server http port provided in settings[8001] is different to the one provided in HttpClient: [8002]rM   rP   s     r   Ú0test_http_client_with_inconsistent_port_settingsrU   c   s¬   € ð
ØÐØÝØ(,ðñ ô ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
øõ ð 
ð 
ð 
å�‰FŒFØzò{ð {ð {ð {ð {ð {ð {ð {ð {ð {øøøøð
øøøs   ‚ Ÿ
A	©AÁA	c                  óF   ‡— i Šdt           dt           dt           fˆfd„} | ‰fS )NÚ_r-   r   c                  ó\   •— ‰                      |¦  «         t          ¦   «         }i |_        |S r/   )Úupdater	   Úheaders)rW   r-   ÚsessionÚcaptureds      €r   r5   z)make_sync_client_factory.<locals>.factoryx   s*   ø€ Ø�Š˜ÑÔÐÝ‘+”+ˆØˆŒØˆr   )r   )r5   r\   s    @r   Úmake_sync_client_factoryr]   t   sH   ø€ Ø!€Hð•Cð ¥3ð ­3ð ð ð ð ð ð ð �HÐÐr   c            	      ó0  — t          ddddddd¬¦  «        } t          | ¦  «        }t          ¦   «         \  }}t          j        t
          d	t          ¦   «         t          ¦   «         g¬
¦  «        5  t          d|¬
¦  «        5  t          |¦  «        }d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   |                     ¦   «          |d         }|j        dk    sJ ‚|j	        dk    sJ ‚|j
        dk    sJ ‚|d         �J ‚|d         du sJ ‚d S )NrH   Ú	localhosti(#  Tg      )@é@   é   )rI   rL   rT   Úchroma_server_ssl_verifyÚchroma_http_keepalive_secsÚchroma_http_max_connectionsÚ%chroma_http_max_keepalive_connectionsÚrequire)Úside_effectz!chromadb.api.fastapi.httpx.ClientÚlimitsÚtimeoutÚverify)r   r   r]   r
   Úobjectr   r	   ÚstopÚkeepalive_expiryÚmax_connectionsÚmax_keepalive_connections)rC   Úsystemr5   r\   Úapirh   s         r   Ú+test_fastapi_uses_http_limits_from_settingsrr   �   s¹  € ÝØ6Ø&Ø $Ø!%Ø#'Ø$&Ø.0ðñ ô €Hõ �HÑÔ€Få0Ñ2Ô2Ñ€GˆXå	Œ•g˜yµy±{´{ÅIÁKÄKÐ6PÐ	QÑ	QÔ	Qð "ð "ÝÐ6ÀGÐLÑLÔLð 	"ð 	"Ý˜&‘/”/ˆCð	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð"ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "ð ‡H‚H�J„J€JØ�hÔ€FØÔ" dÒ*Ð*Ð*Ð*ØÔ! RÒ'Ð'Ð'Ð'ØÔ+¨rÒ1Ð1Ð1Ð1Ø�IÔÐ&Ð&Ð&Ø�HÔ Ð%Ð%Ð%Ð%Ð%Ð%s6   Á-B2Á?BÂB2ÂB	ÂB2Â"B	Â#B2Â2B6Â9B6c                  ó  — t           j                             d¦  «        rt          j        d¦  «         t          j        ¦   «         5 } t          j        | ¬¦  «        }| 	                    d¦  «        }| 
                    ddgddgd	d
id	dig¬¦  «         |j        }|                     ¦   «          |j        du sJ ‚t          j        | ¬¦  «        }|                     d¦  «        }|                     ¦   «         }t          |d         ¦  «        dk    sJ ‚d|d         v sJ ‚d|d         v sJ ‚|                     ¦   «          |                     ¦   «          |                     ¦   «          ddd¦  «         dS # 1 swxY w Y   dS )zBTest that close() properly releases resources in PersistentClient.r   r   r!   Útest_collectionÚid1Úid2Údoc1Údoc2ÚkeyÚvalue1Úvalue2©ÚidsÚ	documentsÚ	metadatasFr}   é   N)r   r   r   r   r   r$   ÚTemporaryDirectoryr   r#   Úcreate_collectionÚaddÚ_systemÚcloseÚ_runningÚget_collectionÚlenr   )Útmpdirr   Ú
collectionrp   Úclient2Úcollection2Úresultss          r   Útest_persistent_client_closerŽ   œ   sÚ  € å	„z‡~‚~Ð4Ñ5Ô5ð -ÝŒÐ+Ñ,Ô,Ð,å	Ô	$Ñ	&Ô	&ð %¨&åÔ*°Ð7Ñ7Ô7ˆØ×-Ò-Ð.?Ñ@Ô@ˆ
Ø�ŠØ˜�Ø˜vÐ&Ø˜xÐ(¨5°(Ð*;Ð<ð 	ñ 	
ô 	
ð 	
ð ”ˆð 	�Š‰Œˆð Œ %Ð'Ð'Ð'Ð'õ Ô+°Ð8Ñ8Ô8ˆØ×,Ò,Ð->Ñ?Ô?ˆØ—/’/Ñ#Ô#ˆÝ�7˜5”>Ñ"Ô" aÒ'Ð'Ð'Ð'Ø˜ œÐ&Ð&Ð&Ð&Ø˜ œÐ&Ð&Ð&Ð&à�Š‰ŒˆØ×!Ò!Ñ#Ô#Ð#Ø×"Ò"Ñ$Ô$Ð$ð;%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %ð %ð %s   ÁD E4Å4E8Å;E8c            	      óä  — t           j                             d¦  «        rt          j        d¦  «         t          j        ¦   «         5 } t          j        | ¬¦  «        5 }|j	        }| 
                    d¦  «        }|                     ddgddgd	d
id	dig¬¦  «         ddd¦  «         n# 1 swxY w Y   |j        du sJ ‚t          j        | ¬¦  «        5 }|                     d¦  «        }|                     ¦   «         }t          |d         ¦  «        dk    sJ ‚	 ddd¦  «         n# 1 swxY w Y   |                     ¦   «          |                     ¦   «          ddd¦  «         dS # 1 swxY w Y   dS )z6Test that PersistentClient works as a context manager.r   r   r!   rt   ru   rv   rw   rx   ry   rz   r{   r|   NFr}   r€   )r   r   r   r   r   r$   r�   r   r#   r„   r‚   rƒ   r†   r‡   rˆ   r   )r‰   r   rp   rŠ   r‹   rŒ   r�   s          r   Ú&test_persistent_client_context_managerr�   Á   s=  € å	„z‡~‚~Ð4Ñ5Ô5ð -ÝŒÐ+Ñ,Ô,Ð,å	Ô	$Ñ	&Ô	&ð %¨&åÔ&¨FÐ3Ñ3Ô3ð 	°và”^ˆFØ×1Ò1Ð2CÑDÔDˆJØ�NŠNØ˜E�NØ! 6Ð*Ø! 8Ð,¨u°hÐ.?Ð@ð ñ ô ð ð		ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð Œ %Ð'Ð'Ð'Ð'õ Ô&¨FÐ3Ñ3Ô3ð 	,°wØ!×0Ò0Ð1BÑCÔCˆKØ!—o’oÑ'Ô'ˆGÝ�w˜u”~Ñ&Ô&¨!Ò+Ð+Ð+Ð+Ð+ð	,ð 	,ð 	,ñ 	,ô 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,øøøð 	,ð 	,ð 	,ð 	,ð
 	×!Ò!Ñ#Ô#Ð#Ø×"Ò"Ñ$Ô$Ð$ð-%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %ð %ð %s[   ÁE%Á?B(ÂE%Â(B,	Â,E%Â/B,	Â0#E%ÃAD%ÄE%Ä%D)	Ä)E%Ä,D)	Ä-+E%Å%E)Å,E)c                  ób  — t           j                             d¦  «        rt          j        d¦  «         t          j        ¦   «         } | j        }|                      d¦  «        }| 	                    dgdg¬¦  «         |  
                    ¦   «          |j        du sJ ‚|                      ¦   «          dS )	z-Test that close() works with EphemeralClient.r   r   rt   ru   rw   ©r}   r~   FN)r   r   r   r   r   r   r   r„   r‚   rƒ   r…   r†   r   ©r   rp   rŠ   s      r   Útest_ephemeral_client_closer”   ß   s©   € å	„z‡~‚~Ð4Ñ5Ô5ð -ÝŒÐ+Ñ,Ô,Ð,åÔ%Ñ'Ô'€FàŒ^€FØ×)Ò)Ð*;Ñ<Ô<€JØ‡N‚N˜�w¨6¨(€NÑ3Ô3Ð3ð ‡L‚L�N„N€Nð Œ?˜eÐ#Ð#Ð#Ð#à
×ÒÑÔÐÐÐr   c                  ó‚  — t           j                             d¦  «        rt          j        d¦  «         t          j        ¦   «         5 } | j        }|                      d¦  «        }| 	                    dgdg¬¦  «         |j
        du sJ ‚	 ddd¦  «         n# 1 swxY w Y   |j
        d	u sJ ‚|                      ¦   «          dS )
z5Test that EphemeralClient works as a context manager.r   r   rt   ru   rw   r’   TNF)r   r   r   r   r   r   r   r„   r‚   rƒ   r†   r   r“   s      r   Ú%test_ephemeral_client_context_managerr–   ó   s  € å	„z‡~‚~Ð4Ñ5Ô5ð -ÝŒÐ+Ñ,Ô,Ð,å	Ô	!Ñ	#Ô	#ð ' và”ˆØ×-Ò-Ð.?Ñ@Ô@ˆ
Ø�Š˜E˜7¨v¨hˆÑ7Ô7Ð7ØŒ $Ð&Ð&Ð&Ð&Ð&ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'ð Œ?˜eÐ#Ð#Ð#Ð#à
×ÒÑÔÐÐÐs   ÁABÂBÂBc                  óê  — t           j                             d¦  «        rt          j        d¦  «         t          j        ¦   «         5 } t          j        | ¬¦  «        }| 	                    d¦  «        }| 
                    dgdg¬¦  «         |                     ¦   «          |                     ¦   «          |                     ¦   «          |                     ¦   «          ddd¦  «         dS # 1 swxY w Y   dS )	z9Test that calling close() multiple times is a safe no-op.r   r   r!   rt   ru   rw   r’   N)r   r   r   r   r   r$   r�   r   r#   r‚   rƒ   r…   r   )r‰   r   rŠ   s      r   Útest_client_close_idempotentr˜     s  € å	„z‡~‚~Ð4Ñ5Ô5ð -ÝŒÐ+Ñ,Ô,Ð,å	Ô	$Ñ	&Ô	&ð $¨&ÝÔ*°Ð7Ñ7Ô7ˆØ×-Ò-Ð.?Ñ@Ô@ˆ
Ø�Š˜E˜7¨v¨hˆÑ7Ô7Ð7ð 	�Š‰Œˆð 	�Š‰Œˆð 	�Š‰Œˆà×!Ò!Ñ#Ô#Ð#ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð $ð $s   ÁBC(Ã(C,Ã/C,)r   N)+r0   Útypingr   r   r   r   r   r   Úunittest.mockr	   r
   r   Úchromadb.configr   r   Úchromadb.apir   Úchromadb.server.fastapiÚchromadb.api.fastapir   r   r$   r   Úfixturer   r&   r8   ÚFixtureRequestr9   r>   rD   rF   rJ   rR   rU   rO   r]   rr   rŽ   r�   r”   r–   r˜   © r   r   ú<module>r¢      s<  ðØ €€€Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ø €€€Ø €€€Ø 	€	€	€	ð „ð �y ¨D°$Ð!6Ô7ð  ð  ð  ñ „ð ð „ð ˜	 )¨T°4Ð"7Ô8ð  ð  ð  ñ „ð ð ˜#˜y˜.Ô)€ð €„˜ ~Ð6Ð7Ñ7Ô7ð4ØÔ"ð4àˆ~˜t TÐ)Ô*ð4ð 4ð 4ñ 8Ô7ð4ð( €„ÑÔð ˜~ð  °)¸IÀtÈTÐ<QÔ2Rð  ð  ð  ñ Ôð ð+¨ð +°tð +ð +ð +ð +ð
*¨9ð *¸ð *ð *ð *ð *ð
˜yð ¨Tð ð ð ð ð	
Ø$ð	
à	ð	
ð 	
ð 	
ð 	
ð
Ø$ð
à	ð
ð 
ð 
ð 
ð"
 %¨°°c°Ô(:¸DÀÀcÀ¼NÐ(JÔ"Kð 
ð 
ð 
ð 
ð&ð &ð &ð &ð6"%ð "%ð "%ð "%ðJ%ð %ð %ð %ð< ð  ð  ð  ð( ð  ð  ð  ð$$ð $ð $ð $ð $ð $r   