§
    ˜ŠtjUO  ã                   ó|  — d Z ddlZddlmZ ddlmZmZmZ ddl	m
Z
 ddlmZmZ ddlmZ ddlmZmZ dd	lmZ  e¦   «         g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
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
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S )z‘
Integration test for Chroma's Task API

Tests the task creation, execution, and removal functionality
for automatically processing collections.
é    N)ÚClient)ÚRECORD_COUNTER_FUNCTIONÚSTATISTICS_FUNCTIONÚFunction)ÚSystem)ÚChromaErrorÚNotFoundError)Úskip_if_not_cluster)Úget_collection_versionÚwait_for_version_increase)ÚsleepÚbasic_http_clientÚreturnc                 óÈ  — t          j        | ¦  «        }|                     ¦   «          |                     dddi¬¦  «        }|                     dt
          dd¬¦  «        \  }}|€J ‚|d	u sJ ‚t          ||j        ¦  «        }|                     d
„ t          dd¦  «        D ¦   «         dgdz  ¬¦  «         | 
                    ¦   «         dk    sJ ‚t          ||j        |¦  «         t          d¦  «         |                     d¦  «                             d¦  «        }|d         €J ‚|d         d         d         dk    sJ ‚|                     |j        d	¬¦  «        }|d	u sJ ‚dS )úFTest creating and removing a function with the record_counter operatorÚmy_documentÚdescriptionú$Sample documents for task processing©ÚnameÚmetadataÚcount_my_docsÚmy_documents_countsN©r   ÚfunctionÚoutput_collectionÚparamsTc                 ó8   — g | ]}d                       |¦  «        ‘ŒS ©zdoc_{}©Úformat©Ú.0Úis     úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/chromadb/test/distributed/test_task_api.pyú
<listcomp>z9test_count_function_attach_and_detach.<locals>.<listcomp>5   ó$   € Ð7Ð7Ð7 AˆX�_Š_˜QÑÔÐ7Ð7Ð7ó    r   é,  útest document©ÚidsÚ	documentsé<   Úfunction_outputÚ	metadatasÚtotal_count©Údelete_output_collection©ÚClientCreatorÚfrom_systemÚresetÚget_or_create_collectionÚattach_functionr   r   r   ÚaddÚrangeÚcountr   r   Úget_collectionÚgetÚdetach_function©r   ÚclientÚ
collectionÚattached_fnÚcreatedÚinitial_versionÚresultÚsuccesss           r%   Ú%test_count_function_attach_and_detachrH      s¬  € åÔ&Ð'8Ñ9Ô9€FØ
‡L‚L�N„N€Nð ×0Ò0ØØÐ!GÐHð 1ñ ô €Jð &×5Ò5ØÝ(Ø/Øð	 6ñ ô Ñ€K�ð Ð"Ð"Ð"Ø�dˆ?ˆ?ˆ?ˆ?Ý,¨V°Z´_ÑEÔE€Oð ‡N‚NØ7Ð7­¨q°#©¬Ð7Ñ7Ô7Ø"Ð# cÑ)ð ñ ô ð ð ×ÒÑÔ Ò$Ð$Ð$Ð$å˜f j¤o°ÑGÔGÐGå	ˆ"�I„I€Ià×"Ò"Ð#8Ñ9Ô9×=Ò=Ð>OÑPÔP€FØ�+ÔÐ*Ð*Ð*Ø�+Ô˜qÔ! -Ô0°CÒ7Ð7Ð7Ð7ð ×(Ò(ØÔØ!%ð )ñ ô €Gð �dˆ?ˆ?ˆ?ˆ?ˆ?ˆ?r(   c                 ób  — t          j        | ¦  «        }|                     ¦   «          |                     d¬¦  «        }|                     dgdg¬¦  «         t          j        t          d¬¦  «        5  |                     t          j
        dd	d
¬¦  «         d
d
d
¦  «         d
S # 1 swxY w Y   d
S )zBTest that creating a task with an invalid function raises an errorÚtest_invalid_function©r   Úid1r*   r+   zfunction not found©ÚmatchÚinvalid_taskr   N©r   r   r   r   )r5   r6   r7   r8   r:   ÚpytestÚraisesr   r9   r   Ú_NONEXISTENT_TEST_ONLY©r   rA   rB   s      r%   Útest_task_with_invalid_functionrU   N   sú   € åÔ&Ð'8Ñ9Ô9€FØ
‡L‚L�N„N€Nà×0Ò0Ð6MÐ0ÑNÔN€JØ‡N‚N˜�w¨?Ð*;€NÑ<Ô<Ð<õ 
Œ•{Ð*>Ð	?Ñ	?Ô	?ð 
ð 
Ø×"Ò"ÝÔ4ØØ1Øð	 	#ñ 	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
ð 
s   Á3$B$Â$B(Â+B(c                 ó¨  — t          j        | ¦  «        }|                     ¦   «          |                     d¬¦  «        }|                     dgdg¬¦  «         |                     t          ddd¬	¦  «        \  }}|d
u sJ ‚|j        dk    sJ ‚|j        dk    sJ ‚| 	                    d¦  «        }||k    sJ ‚| 
                    |j        d
¬¦  «         dS )z^Test that attach_function and get_attached_function return function_name field instead of UUIDÚtest_function_namerK   rL   Údoc1r+   Ú
my_counterr   NrP   TÚrecord_counterr2   )r5   r6   r7   Úcreate_collectionr:   r9   r   Úfunction_namer   Úget_attached_functionr?   )r   rA   rB   rC   rD   Úretrieved_fns         r%   Ú*test_attach_function_returns_function_namer_   `   s   € åÔ&Ð'8Ñ9Ô9€FØ
‡L‚L�N„N€Nà×)Ò)Ð/CÐ)ÑDÔD€JØ‡N‚N˜�w¨6¨(€NÑ3Ô3Ð3ð &×5Ò5Ý(ØØ-Øð	 6ñ ô Ñ€K�ð �dˆ?ˆ?ˆ?ˆ?ØÔ$Ð(8Ò8Ð8Ð8Ð8ØÔ˜|Ò+Ð+Ð+Ð+ð ×3Ò3°LÑAÔA€LØ˜;Ò&Ð&Ð&Ð&ð ×Ò˜{Ô/È$ÐÑOÔOÐOÐOÐOr(   c                 ój  — t          j        | ¦  «        }|                     ¦   «          |                     d¬¦  «        }|                     ddgddg¬¦  «         |                     t          dd	d
¬¦  «        \  }}|€J ‚|du sJ ‚|                     d¬¦  «        }|                     ddgddg¬¦  «         |                     t          ddd
¬¦  «        \  }}|€J ‚|du sJ ‚|j        |j        k    sJ ‚|                     |j	        d¬¦  «        du sJ ‚|                     |j	        d¬¦  «        du sJ ‚d
S )z0Test attaching functions on multiple collectionsÚcollection_1rK   rL   Úid2rX   Údoc2r+   Útask_1Úoutput_1NrP   TÚcollection_2Úid3Úid4Údoc3Údoc4Útask_2Úoutput_2r2   ©
r5   r6   r7   r[   r:   r9   r   Úidr?   r   )r   rA   Úcollection1Úattached_fn1Úcreated1Úcollection2Úattached_fn2Úcreated2s           r%   Ú"test_function_multiple_collectionsru   }   s©  € åÔ&Ð'8Ñ9Ô9€FØ
‡L‚L�N„N€Nð ×*Ò*°Ð*Ñ?Ô?€KØ‡O‚O˜ ˜°6¸6Ð2B€OÑCÔCÐCà(×8Ò8Ý(ØØ$Øð	 9ñ ô Ñ€L�(ð Ð#Ð#Ð#Ø�tÐÐÐÐð ×*Ò*°Ð*Ñ?Ô?€KØ‡O‚O˜ ˜°6¸6Ð2B€OÑCÔCÐCà(×8Ò8Ý(ØØ$Øð	 9ñ ô Ñ€L�(ð Ð#Ð#Ð#Ø�tÐÐÐÐð Œ?˜lœoÒ-Ð-Ð-Ð-ð 	×#Ò# LÔ$5ÐPTÐ#ÑUÔUØð	ð 	ð 	ð 	ð 	×#Ò# LÔ$5ÐPTÐ#ÑUÔUØð	ð 	ð 	ð 	ð 	ð 	r(   c                 óL  — t          j        | ¦  «        }|                     ¦   «          |                     d¬¦  «        }|                     g d¢g d¢¬¦  «         |                     t          ddd¬	¦  «        \  }}|€J ‚|d
u sJ ‚t          j        t          d¬¦  «        5  |                     t          ddd¬	¦  «         ddd¦  «         n# 1 swxY w Y   t          j        t          d¬¦  «        5  |                     t          ddd¬	¦  «         ddd¦  «         n# 1 swxY w Y   |                     |j        d
¬¦  «        d
u sJ ‚|                     t          ddd¬	¦  «        \  }}|€J ‚|d
u sJ ‚|j        |j        k    sJ ‚|                     |j        d
¬¦  «        d
u sJ ‚dS )z>Test that only one attached function is allowed per collectionÚsingle_task_collectionrK   )rL   rb   rg   )rX   rc   ri   r+   rd   re   NrP   Tzmcollection already has an attached function: name=task_1, function=record_counter, output_collection=output_1rM   rk   rl   Úoutput_differentr2   )r5   r6   r7   r[   r:   r9   r   rQ   rR   r   r   r?   r   rn   )r   rA   rB   rp   rD   rs   rt   s          r%   Ú3test_functions_one_attached_function_per_collectionry   ¬   s´  € õ Ô&Ð'8Ñ9Ô9€FØ
‡L‚L�N„N€Nð ×)Ò)Ð/GÐ)ÑHÔH€JØ‡N‚NÐ,Ð,Ð,Ð8PÐ8PÐ8P€NÑQÔQÐQð '×6Ò6Ý(ØØ$Øð	 7ñ ô Ñ€L�'ð Ð#Ð#Ð#Ø�dˆ?ˆ?ˆ?ˆ?õ 
ŒÝØ}ð
ñ 
ô 
ð 	
ð 	
ð 	×"Ò"Ý,ØØ(Øð	 	#ñ 	
ô 	
ð 	
ð		
ð 	
ð 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øøøð 	
ð 	
ð 	
ð 	
õ 
ŒÝØ~ð
ñ 
ô 
ð 	
ð 	
ð 	×"Ò"Ý(ØØ0Øð	 	#ñ 	
ô 	
ð 	
ð		
ð 	
ð 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øøøð 	
ð 	
ð 	
ð 	
ð 	×"Ò" <Ô#4ÈtÐ"ÑTÔTØð	ð 	ð 	ð 	ð
 (×7Ò7Ý(ØØ$Øð	 8ñ ô Ñ€L�(ð Ð#Ð#Ð#Ø�tÐÐÐÐØŒ?˜lœoÒ-Ð-Ð-Ð-ð 	×"Ò" <Ô#4ÈtÐ"ÑTÔTØð	ð 	ð 	ð 	ð 	ð 	s$   Â CÃCÃCÃ1DÄD Ä#D c                 ó\  — t          j        | ¦  «        }|                     ¦   «          |                     d¬¦  «        }|                     dgdg¬¦  «         t          j        t          d¬¦  «        5  |                     dt          d	d
di¬¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z?Test that attach_function with non-empty params raises an errorÚtest_invalid_paramsrK   rL   r*   r+   z?params must be empty - no functions currently accept parametersrM   Úinvalid_params_taskr   Úsome_keyÚ
some_valuer   N©
r5   r6   r7   r[   r:   rQ   rR   r   r9   r   rT   s      r%   Ú(test_attach_function_with_invalid_paramsr€   ô   s  € åÔ&Ð'8Ñ9Ô9€FØ
‡L‚L�N„N€Nà×)Ò)Ð/DÐ)ÑEÔE€JØ‡N‚N˜�w¨?Ð*;€NÑ<Ô<Ð<õ 
ŒÝØOð
ñ 
ô 
ð 	
ð 	
ð 	×"Ò"Ø&Ý,Ø1Ø Ð-ð	 	#ñ 	
ô 	
ð 	
ð		
ð 	
ð 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øøøð 	
ð 	
ð 	
ð 	
ð 	
ð 	
s   Á3!B!Â!B%Â(B%c                 ó„  — t          j        | ¦  «        }|                     ¦   «          |                     d¬¦  «        }|                     dgdg¬¦  «         |                     d¬¦  «         t          j        t          d¬¦  «        5  |                     d	t          dd
¬¦  «         d
d
d
¦  «         d
S # 1 swxY w Y   d
S )zJTest that attach_function fails when output collection name already existsÚinput_collectionrK   rL   r*   r+   Úexisting_output_collectionz?Output collection \[existing_output_collection\] already existsrM   Úmy_taskNr   r   )r   rA   r‚   s      r%   Ú5test_attach_function_output_collection_already_existsr…   
  s"  € õ Ô&Ð'8Ñ9Ô9€FØ
‡L‚L�N„N€Nð ×/Ò/Ð5GÐ/ÑHÔHÐØ×Ò˜e˜W°Ð0AÐÑBÔBÐBð ×ÒÐ">ÐÑ?Ô?Ð?õ 
ŒÝØPð
ñ 
ô 
ð 	
ð 	
ð 	×(Ò(ØÝ,Ø:Øð	 	)ñ 	
ô 	
ð 	
ð		
ð 	
ð 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øøøð 	
ð 	
ð 	
ð 	
ð 	
ð 	
s   Â	B5Â5B9Â<B9c                 óÎ  — t          j        | ¦  «        }|                     ¦   «          |                     d¬¦  «        }|                     dgdg¬¦  «         |                     t          ddd¬	¦  «        \  }}|                     |j        d
¬¦  «         t          j
        t          d¬¦  «        5  |                     |j        d
¬¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z<Test removing a task that doesn't exist raises NotFoundErrorÚtest_collectionrK   rL   Útestr+   Útest_functionr   NrP   Tr2   zdoes not existrM   )r5   r6   r7   r[   r:   r9   r   r?   r   rQ   rR   r	   )r   rA   rB   rC   Ú_s        r%   Ú test_function_remove_nonexistentr‹   %  sE  € åÔ&Ð'8Ñ9Ô9€FØ
‡L‚L�N„N€Nà×)Ò)Ð/@Ð)ÑAÔA€JØ‡N‚N˜�w¨6¨(€NÑ3Ô3Ð3Ø×/Ò/Ý(ØØ-Øð	 0ñ ô �N€K�ð ×Ò˜{Ô/È$ÐÑOÔOÐOõ 
Œ•}Ð,<Ð	=Ñ	=Ô	=ð Tð TØ×"Ò" ;Ô#3ÈdÐ"ÑSÔSÐSðTð Tð Tñ Tô Tð Tð Tð Tð Tð Tð Tð Tøøøð Tð Tð Tð Tð Tð Ts   Â0CÃCÃ!Cc                 óÆ  — t          j        | ¦  «        }|                     ¦   «          |                     d¬¦  «        }|                     dgdg¬¦  «         |                     dt          dd¬	¦  «        \  }}|                     d¬¦  «        }t          j	        t          d
¬¦  «        5  |                     dt          dd¬	¦  «        }ddd¦  «         dS # 1 swxY w Y   dS )z<Test that attaching a function to an output collection failsr‚   rK   rL   rˆ   r+   r‰   r   Nr   z.cannot attach function to an output collectionrM   Útest_function_2Úoutput_collection_2)r5   r6   r7   r[   r:   r9   r   r=   rQ   rR   r   )r   rA   r‚   rŠ   r   s        r%   Ú&test_attach_to_output_collection_failsr�   :  sD  € åÔ&Ð'8Ñ9Ô9€FØ
‡L‚L�N„N€Nð ×/Ò/Ð5GÐ/ÑHÔHÐØ×Ò˜e˜W°°ÐÑ9Ô9Ð9à×+Ò+ØÝ(Ø-Øð	 ,ñ ô �D€A€qð ×-Ò-Ð3FÐ-ÑGÔGÐå	ŒÝÐKð
ñ 
ô 
ð 
ð 
ð ×-Ò-Ø"Ý,Ø3Øð	 .ñ 
ô 
ˆð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
ð 
s   Â*CÃCÃCc                 óÂ  — t          j        | ¦  «        }|                     ¦   «          |                     d¬¦  «        }|                     dgdg¬¦  «         |                     dt          dd¬	¦  «        \  }}|€J ‚|d
u sJ ‚|                     d¦  «         t          j	        t          ¦  «        5  |                     d¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zKTest that deleting an output collection also detaches the attached functionr‚   rK   rL   rˆ   r+   Úmy_functionr   Nr   T)r5   r6   r7   r[   r:   r9   r   Údelete_collectionrQ   rR   r	   r]   ©r   rA   r‚   rC   rD   s        r%   Ú/test_delete_output_collection_detaches_functionr”   V  s>  € åÔ&Ð'8Ñ9Ô9€FØ
‡L‚L�N„N€Nð ×/Ò/Ð5GÐ/ÑHÔHÐØ×Ò˜e˜W°°ÐÑ9Ô9Ð9à+×;Ò;ØÝ(Ø-Øð	 <ñ ô Ñ€K�ð Ð"Ð"Ð"Ø�dˆ?ˆ?ˆ?ˆ?ð ×ÒÐ0Ñ1Ô1Ð1õ 
Œ•}Ñ	%Ô	%ð >ð >Ø×.Ò.¨}Ñ=Ô=Ð=ð>ð >ð >ñ >ô >ð >ð >ð >ð >ð >ð >ð >øøøð >ð >ð >ð >ð >ð >s   Â1CÃCÃCc                 ó†  — t          j        | ¦  «        }|                     ¦   «          |                     d¬¦  «        }|                     dgdg¬¦  «         |                     dt          dd¬	¦  «        \  }}|€J ‚|d
u sJ ‚|                     |j        d¬¦  «         | 	                    d¦  «         t          j        t          ¦  «        5  |                     d¦  «         ddd¦  «         n# 1 swxY w Y   t          j        t          ¦  «        5  |                     d¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zOTest that deleting an output collection from a recently detached function worksr‚   rK   rL   rˆ   r+   r‘   r   Nr   TFr2   )r5   r6   r7   r[   r:   r9   r   r?   r   r’   rQ   rR   r	   r]   r=   r“   s        r%   Ú&test_delete_orphaned_output_collectionr–   p  s×  € åÔ&Ð'8Ñ9Ô9€FØ
‡L‚L�N„N€Nð ×/Ò/Ð5GÐ/ÑHÔHÐØ×Ò˜e˜W°°ÐÑ9Ô9Ð9à+×;Ò;ØÝ(Ø-Øð	 <ñ ô Ñ€K�ð Ð"Ð"Ð"Ø�dˆ?ˆ?ˆ?ˆ?à×$Ò$ [Ô%5ÐPUÐ$ÑVÔVÐVð ×ÒÐ0Ñ1Ô1Ð1õ 
Œ•}Ñ	%Ô	%ð >ð >Ø×.Ò.¨}Ñ=Ô=Ð=ð>ð >ð >ñ >ô >ð >ð >ð >ð >ð >ð >øøøð >ð >ð >ð >õ 
Œ•}Ñ	%Ô	%ð 3ð 3à×ÒÐ1Ñ2Ô2Ð2ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3ð 3ð 3s$   ÃC/Ã/C3Ã6C3ÄD6Ä6D:Ä=D:c                 óB  — t          j        | ¦  «        }|                     ¦   «          |                     d¬¦  «        }|                     dt
          dd¬¦  «        \  }}|du sJ ‚|€J ‚|                     d¬¦  «        }t          j        t          d	¬
¦  «        5  |                     dt
          dd¬¦  «        \  }}ddd¦  «         n# 1 swxY w Y   | 	                    |j
        d¬¦  «        du sJ ‚|                     dt
          dd¬¦  «        \  }}|€J ‚|du sJ ‚dS )r   r   rK   r   r   Nr   TÚmy_document2z8Output collection \[my_documents_counts\] already existsrM   r2   )r5   r6   r7   r8   r9   r   rQ   rR   r   r?   r   )r   rA   rB   rC   rD   rr   rŠ   s          r%   Ú#test_partial_attach_function_repairr™   �  sÆ  € õ Ô&Ð'8Ñ9Ô9€FØ
‡L‚L�N„N€Nð ×0Ò0Øð 1ñ ô €Jð
 &×5Ò5ØÝ(Ø/Øð	 6ñ ô Ñ€K�ð �dˆ?ˆ?ˆ?ˆ?ð Ð"Ð"Ð"à×1Ò1Øð 2ñ ô €Kõ 
ŒÝÐVð
ñ 
ô 
ð 
ð 
ð %×4Ò4Ø Ý,Ø3Øð	 5ñ 
ô 
‰ˆ�Qð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 	×"Ò" ;Ô#3ÈdÐ"ÑSÔSØð	ð 	ð 	ð 	ð
 '×6Ò6ØÝ(Ø/Øð	 7ñ ô Ñ€K�ð Ð"Ð"Ð"Ø�dˆ?ˆ?ˆ?ˆ?ˆ?ˆ?s   Â"C	Ã	CÃCc                 ó°  — t          j        | ¦  «        }|                     ¦   «          |                     d¬¦  «        }|                     dgdg¬¦  «         |                     dt          dd¬	¦  «        \  }}|€J ‚|d
u sJ ‚|                     d¬¦  «        }|€J ‚d|j         	                    ¦   «         v sJ ‚| 
                    |j        d
¬¦  «         dS )z[Test that output collections are created with the source_attached_function_id in the schemar‚   rK   rL   rˆ   r+   r‘   r   Nr   TÚsource_attached_function_idr2   )r5   r6   r7   r[   r:   r9   r   r=   Ú_modelÚpretty_schemar?   r   )r   rA   r‚   rC   rD   r   s         r%   Ú*test_output_collection_created_with_schemarž   É  s  € åÔ&Ð'8Ñ9Ô9€FØ
‡L‚L�N„N€Nð ×/Ò/Ð5GÐ/ÑHÔHÐØ×Ò˜e˜W°°ÐÑ9Ô9Ð9à+×;Ò;ØÝ(Ø-Øð	 <ñ ô Ñ€K�ð Ð"Ð"Ð"Ø�dˆ?ˆ?ˆ?ˆ?ð ×-Ò-Ð3FÐ-ÑGÔGÐØÐ(Ð(Ð(ð
 )Ð,=Ô,D×,RÒ,RÑ,TÔ,TÐTÐTÐTÐTð ×$Ò$ [Ô%5ÐPTÐ$ÑUÔUÐUÐUÐUr(   c                 ót  — t          j        | ¦  «        }|                     ¦   «          |                     dddi¬¦  «        }|                     dt
          dd¬¦  «        \  }}|d	u sJ ‚|€J ‚t          ||j        ¦  «        }|                     d
„ t          dd¦  «        D ¦   «         dgdz  ¬¦  «         | 
                    ¦   «         dk    sJ ‚t          ||j        |¦  «         t          d¦  «         |                     d¦  «                             d¦  «        }|d         €J ‚|d         d         d         dk    sJ ‚|                     |j        d	¬¦  «        }|d	u sJ ‚|                     dt
          dd¬¦  «        \  }}|€J ‚|d	u sJ ‚|                     dt
          dd¬¦  «        \  }}|du sJ ‚|€J ‚dS )r   r   r   r   r   r   r   Nr   Tc                 ó8   — g | ]}d                       |¦  «        ‘ŒS r   r    r"   s     r%   r&   zGtest_count_function_attach_and_detach_attach_attach.<locals>.<listcomp>  r'   r(   r   r)   r*   r+   r.   r/   r0   r1   r2   Fr4   r@   s           r%   Ú3test_count_function_attach_and_detach_attach_attachr¡   è  sC  € õ Ô&Ð'8Ñ9Ô9€FØ
‡L‚L�N„N€Nð ×0Ò0ØØÐ!GÐHð 1ñ ô €Jð &×5Ò5ØÝ(Ø/Øð	 6ñ ô Ñ€K�ð �dˆ?ˆ?ˆ?ˆ?ØÐ"Ð"Ð"Ý,¨V°Z´_ÑEÔE€Oð ‡N‚NØ7Ð7­¨q°#©¬Ð7Ñ7Ô7Ø"Ð# cÑ)ð ñ ô ð ð ×ÒÑÔ Ò$Ð$Ð$Ð$å˜f j¤o°ÑGÔGÐGå	ˆ"�I„I€Ià×"Ò"Ð#8Ñ9Ô9×=Ò=Ð>OÑPÔP€FØ�+ÔÐ*Ð*Ð*Ø�+Ô˜qÔ! -Ô0°CÒ7Ð7Ð7Ð7ð ×(Ò(ØÔ°4ð )ñ ô €Gð
 �dˆ?ˆ?ˆ?ˆ?ð &×5Ò5ØÝ(Ø/Øð	 6ñ ô Ñ€K�ð Ð"Ð"Ð"Ø�dˆ?ˆ?ˆ?ˆ?ð &×5Ò5ØÝ(Ø/Øð	 6ñ ô Ñ€K�ð �eÐÐÐÐØÐ"Ð"Ð"Ð"Ð"r(   c                 ó¼  — t          j        | ¦  «        }|                     ¦   «          |                     d¬¦  «        }|                     dgdg¬¦  «         |                     dt          dd¬	¦  «        \  }}|€J ‚|d
u sJ ‚|                     dt          dd¬	¦  «        \  }}|€J ‚|du sJ ‚|j        |j        k    sJ ‚|                     |j	        d
¬¦  «         dS )zaTest that attach_function is idempotent - calling it twice with same params returns created=FalseÚidempotency_testrK   rL   r*   r+   r‘   r   Nr   TFr2   rm   )r   rA   rB   rp   rq   rs   rt   s          r%   Ú test_attach_function_idempotencyr¤   0  s%  € åÔ&Ð'8Ñ9Ô9€FØ
‡L‚L�N„N€Nà×)Ò)Ð/AÐ)ÑBÔB€JØ‡N‚N˜�w¨?Ð*;€NÑ<Ô<Ð<ð (×7Ò7ØÝ(Ø-Øð	 8ñ ô Ñ€L�(ð Ð#Ð#Ð#Ø�tÐÐÐÐð (×7Ò7ØÝ(Ø-Øð	 8ñ ô Ñ€L�(ð Ð#Ð#Ð#Ø�uÐÐÐÐð Œ?˜lœoÒ-Ð-Ð-Ð-ð ×Ò˜|Ô0È4ÐÑPÔPÐPÐPÐPr(   )%Ú__doc__rQ   Úchromadb.api.clientr   r5   Úchromadb.api.functionsr   r   r   Úchromadb.configr   Úchromadb.errorsr   r	   Úchromadb.test.conftestr
   Ú-chromadb.test.utils.wait_for_version_increaser   r   Útimer   Ú
pytestmarkrH   rU   r_   ru   ry   r€   r…   r‹   r�   r”   r–   r™   rž   r¡   r¤   © r(   r%   ú<module>r¯      s&  ððð ð €€€Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7ðð ð ð ð ð ð ð ð ð ð
 #Ð "Ð "Ð "Ð "Ð "Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð à!Ð!Ñ#Ô#Ð$€
ð0¸Vð 0Èð 0ð 0ð 0ð 0ðf
°vð 
À$ð 
ð 
ð 
ð 
ð$PÀ&ð PÈTð Pð Pð Pð Pð:,¸&ð ,ÀTð ,ð ,ð ,ð ,ð^EØðEà	ðEð Eð Eð EðP
Àð 
È4ð 
ð 
ð 
ð 
ð,
Øð
à	ð
ð 
ð 
ð 
ð6T¸ð TÀ4ð Tð Tð Tð Tð*
¸fð 
Èð 
ð 
ð 
ð 
ð8>Àvð >ÐRVð >ð >ð >ð >ð43¸fð 3Èð 3ð 3ð 3ð 3ð@6Øð6à	ð6ð 6ð 6ð 6ðrVÀ&ð VÈTð Vð Vð Vð Vð>E#ØðE#à	ðE#ð E#ð E#ð E#ðP Q¸ð  QÀ4ð  Qð  Qð  Qð  Qð  Qð  Qr(   