
    Ig}                     \   U d dl Z d dlZd dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
 d dlm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mZ d dlmZ d d	lmZmZmZmZ d d
l m!Z! d dlm"Z" d dl#Z#d dl$m%Z% d dl&Z& e&jN                  e(      Z)dZ*dZ+ e e#jX                  d      d e%       dddddeed        e e#jX                  d      d e%       dddddeed        e e#jX                  d      d e%       dddddeed        e e#jX                  d      d e%       d dd!ddeed       gZ-ee   e.d"<   d#ee!ddf   fd$Z/d#ee!ddf   fd%Z0d#ee!ddf   fd&Z1d#ee!ddf   fd'Z2d#eeg ee!ddf   f      fd(Z3 ejh                  d) e3       *      d+e"d#ee!ddf   fd,       Z5 e#jl                         d-ejn                  ddddfd.e#jX                  d/e8d0ed1e	e8e
e8e9e:f   f   d#ef
d2Z;d3e!d#dfd4Z<d3e!d#dfd5Z=d3e!d#dfd6Z>d3e!d#dfd7Z?d3e!d#dfd8Z@d3e!d#dfd9ZAd3e!d#dfd:ZBd3e!d#dfd;ZC e e#jX                  d<      d-ejn                  e-d    j                  dddd=       e e#jX                  d>      d?ejn                  e-d   j                  dddd=      gZEd3e!d#dfd@ZFd3e!d#dfdAZGy)B    N)	GeneratorListCallableDictUnion)	GrpcSysDB)GrpcMockSysDB)NotFoundErrorUniqueConstraintErrorInternalError)find_free_port)
CollectionSegmentSegmentScope)SqliteDB)DEFAULT_DATABASEDEFAULT_TENANTSystemSettings)SysDB)FixtureRequest)CollectionConfigurationInternaldefault   )inttest_collection_1str1?test_strtest_int
test_float   )idnameconfigurationmetadata	dimensiondatabasetenantversion   test_collection_2str2gffffff@   test_collection_3str3gffffff
@   test_collection_4str4g@sample_collectionsreturnc               #      K   t        t        t        d                  } | j                          |  | j	                          yw)Fixture generator for sqlite DBT)allow_resetN)r   r   r   startstop)dbs    Y/var/www/html/answerous/venv/lib/python3.12/site-packages/chromadb/test/db/test_system.pysqliter>   M   s<     	 	

B HHJ
HGGIs   AAc            	   #   &  K   t        j                         } t        t        t	        dd|                   }|j                          | |j                          t        j                  j                  |       rt        j                  |        yyw)r8   T)r9   is_persistentpersist_directoryN)tempfilemkdtempr   r   r   r:   r;   ospathexistsshutilrmtree)	save_pathr<   s     r=   sqlite_persistentrJ   [   sq       "I	 ""+	

B HHJ
HGGI	ww~~i i  !s   BBc               #     K   t               } t        t        d|             }|j                  t               |j                  t
              }|j                          |j                          | |j                          yw)zpFixture generator for sqlite DB that creates a mock grpc sysdb server
    and a grpc client that connects to it.Tr9   chroma_server_grpc_portN)	r   r   r   instancer	   r   r:   reset_and_wait_for_readyr;   )portsystemclients      r=   grpc_with_mock_serverrS   n   sg      D$(	
F OOM"__Y'F
LLN
##%
L
KKMs   B Bc               #     K   t         j                  d       t        t        dd            } | j	                  t
              }t         j                  d       | j                          t         j                  d       |j                          t         j                  d       | t         j                  d       | j                          y w)	Nz Setting up grpc_with_real_serverTi  rL   zStarting systemz&Resetting client and waiting for readyz$grpc_with_real_server setup completez(Stopping system in grpc_with_real_server)	loggerdebugr   r   rN   r   r:   rO   r;   )rQ   rR   s     r=   grpc_with_real_serverrW      s     
LL34$)	
F __Y'F
LL"#
LLN
LL9:
##%
LL78
L
LL;<
KKMs   C
Cc                  V    dt         j                  v rt        gS t        t        t
        gS )NCHROMA_CLUSTER_TEST_ONLY)rD   environrW   r>   rJ   rS        r=   db_fixturesr]      s&    !RZZ/%&&)+@AAr\   module)scopeparamsrequestc              #      K   t         j                  d| j                  j                          t	        | j                                t         j                  d       y w)NzSetting up sysdb fixture with zTearing down sysdb fixture)rU   rV   param__name__next)ra   s    r=   sysdbrf      sC     
LL1'--2H2H1IJK
w}}

LL-.s   AA test_type_acollection_idsegment_typer_   r'   c                 F    t        t        j                         ||| |      S )Nr$   typer_   
collectionr'   )r   uuiduuid4)rh   ri   r_   r'   s       r=   sample_segmentrp      s&     ::<  r\   rf   c                 (   t         j                  d       | j                          t        D ]  }t         j                  d|j                          | j                  |j                  |j                  |j                         t        t        j                         dt        j                  |j                  dddd      g|d	   |d
          t        |d<   t        |d<    t         j                  d       | j                         }t!        |d       }t!        |d       t        k(  sJ t#        j$                  t&              5  | j                  t        d   j                  t        d   j                  t        d   j                         t        t        j                         dt        j                  t        d   j                  dddd      g       d d d        t        D ]  }| j                  |d         }||gk(  rJ  t        D ]  }| j                  |d         }||gk(  rJ  t        d   }| j)                  |j                         | j                         }||vsJ t+        |      t+        t              dz
  k(  sJ t!        |d       t        dd  k(  sJ | j                  |d         }|g k(  sJ t#        j$                  t,              5  | j)                  |j                         d d d        y # 1 sw Y   (xY w# 1 sw Y   y xY w)NzResetting statezCreating collection: rg   r   r   r   r   rk   r'   r(   r$   r%   r&   segmentsr'   r(   r)   r*   zGetting all collectionsc                     | j                   S Nr%   cs    r=   <lambda>z4test_create_get_delete_collections.<locals>.<lambda>   s
    AFF r\   keyc                     | j                   S ru   rv   rw   s    r=   ry   z4test_create_get_delete_collections.<locals>.<lambda>   
     r\   r   )r%   r$   r&   rs   r%   rv   r$   r$   c                     | j                   S ru   rv   rw   s    r=   ry   z4test_create_get_delete_collections.<locals>.<lambda>   r}   r\   )rU   rV   reset_stater5   r%   create_collectionr$   get_configurationr   rn   ro   r   VECTORr   r   get_collectionssortedpytestraisesr   delete_collectionlenr
   )rf   rm   resultsresultc1by_id_results         r=   "test_create_get_delete_collectionsr      s   
LL"#	( .
,Z__,=>?}}$668zz|&&--)}}*0asS  
+ - 	  	
  "2
:-
8'.* LL*+##%GW"23G'/04FFFF 
,	- 
#A&++!!$'',Q/AACzz|&&--1!477*0asS	 	  	

" ) &
&&Jv,>&?*%%%&
 ) &
&&*T*:&;*%%%&
 
A	B	BEE"##%GWw<312Q6666'/04Fqr4JJJJ((BtH(5L2 
}	% '&' 'O
 
N' 's   BK;L;LLc                     t        t        d   j                  t        d   j                  t        d   j	                         t        d   d   t        d   d   t
        t        d      }| j                          | j                  |j                  |j                  |j	                         t        t        j                         dt        j                  |j                  dddd	
      g|d   |d          d|d<   | j                  |j                  |j                         | j                  |j                        }||gk(  sJ d|d<   | j                  |j                  |j                          | j                  |d         }||gk(  sJ ddi|d<   | j                  |j                  |d          | j                  |d         }||gk(  sJ d |d<   | j                  |j                  d        | j                  |d         }||gk(  sJ y )Nr   r'   r(   )r%   r$   r&   r'   r(   r)   r*   r+   rg   r   r   r   r   rk   rr   new_namer%   rv   r#   )r(   r$   r~   	test_str2r.   r'   )r   r5   r%   r$   r   r   r   r   r   r   rn   ro   r   r   update_collectionr   r(   )rf   collr   s      r=   test_update_collectionsr      s   "''a ##(+==?#A&z2$Q'4!	D 
	77YY,,.::<""))77&,!3O
 j!{#  $ DL	DGG$))4""		"2FdV D	DGGt~~>""d4j"1FdV $V,D	DGGd:.>?""d4j"1FdV D	DGGd3""d4j"1FdVr\   c                 8	   | j                          t        d   }| j                  |j                  |j                  |j                         t        t        j                         dt        j                  |j                  dddd      g|d   |d	   
       | j                  |j                  t        j                         |j                         dt        t        j                         dt        j                  t        d   j                  dddd      g|d         \  }}||k(  sJ | j                  |d         }||gk(  sJ | j                  t        d   j                  t        d   j                  t        d   j                         t        t        j                         dt        j                  t        d   j                  dddd      gdt        d   d         \  }}|t        d   k(  sJ | j                  t        d   j                  t        d   j                  t        d   j                         t        t        j                         dt        j                  t        d   j                  dddd      gdt        d   d         \  }}|t        d   k(  sJ t        j                  t              5  | j                  t        d   j                  t        d   j                  t        d   j                         dt        t        j                         dt        j                  t        d   j                  dddd      g|d          d d d        ddd}| j                  t        d   j                  t        d   j                  t        d   j                         t        t        j                         dt        j                  t        d   j                  dddd      gd|      \  }}|d   |k7  sJ |d   t        d   d   k(  sJ | j                  t        d   j                  t        d   j                  t        d   j                         t        t        d   j                        gdd       \  }}|d   t        d   d   k(  sJ y # 1 sw Y   CxY w)Nr   rg   r   r   r   r   rk   r'   r(   rr   T)r%   r$   r&   get_or_creaters   r'   r%   rv   )r%   r$   r&   rs   r   r'   r,   Fnew_str)test_new_strr!   )r   r5   r   r$   r%   r   r   rn   ro   r   r   r   r   r   r   rp   )rf   rm   r   created
get_resultoverlayed_metadatas         r=   test_get_or_create_collectionr   6  s   	 $A&J	==__ 224::<""))%==&,!3O
 J'[)  & --__::< 224::<""))-a033&,!3O
 J' . OFG  Z &&Jv,>&?J*%%% --"''a ##(+==?::<""))-a033&,!3O
 #A&z2 . OFG  '**** --"''a ##(+==?::<""))-a033&,!3O
 #A&z2 . OFG  '**** 
,	- 
#A&++!!$'',Q/AACzz|&&--1!477*0asS  
+ 	  	

( "=
 --"''a ##(+==?::<""))-a033&,!3O
 # . OFG" *!3333*!3A!6z!BBBB --"''a ##(+==? !3A!6!9!9:; . OFG *!3A!6z!BBBBk
 
s   8BRRc                    | j                          | j                  t        d   j                  d      }t	        |      dk(  sJ | j                  t        j                         d       | j                  t        d   j                  t        d   j                  t        d   j                         t        t        d   j                        gt        d   d   t        d   d   d       t        j                  t              5  | j                  t        d   j                  d	t        d   j                         t        d   d   t        d   d   t        t        d   j                        gdd
       d d d        | j                  t        d   j                  t        d   j                  t        d   j                         t        d   d   t        d   d   t        t        d   j                        g       | j                  t        d   d   d      }t	        |      dk(  sJ dt        d   d<   |d   t        d   k(  sJ | j                  t        d   d         }t	        |      dk(  sJ |d   t        d   k(  sJ t	        | j                  t        d   d   d            dk(  sJ | j                  t        d   j                  d       | j                  d      }t	        |      dk(  sJ | j                  t        d   j                        }t	        |      dk(  sJ |d   t        d   k(  sJ t        j                  t               5  | j                  t        d   j                         d d d        t        j                  t               5  | j                  t        d   j                  d       d d d        y # 1 sw Y   OxY w# 1 sw Y   ]xY w# 1 sw Y   y xY w)Nr   new_databaser$   r)   r   r$   r%   r'   r(   r$   r%   r&   rs   r'   r(   r)   r   F)r$   r%   r&   r'   r(   rs   r)   r   )r$   r%   r&   r'   r(   rs   r%   )r%   r)   r)   rv   fake_dbr)   r~   )r   r   r5   r$   r   create_databasern   ro   r   r%   r   rp   r   r   r   r   r
   rf   r   s     r=   .test_create_get_delete_database_and_collectionr     s   	""&8&;&>&>"XFv;! 
TZZ\? 
a ##"''(+==? !3A!6!9!9:;#A&z2$Q'4   
,	- 

!!$'',Q/AAC'*:6(+K8$%7%:%=%=>?# 	  		


 
a ##"''(+==?#A&z2$Q'4 !3A!6!9!9:;   """6*^ # F v;!(6q*%!9*1---- ""(:1(=f(E"FFv;!!9*1---- 	!!'*62Y " 	

 		 
1!477.Q ""N";Fv;! ""(:1(=(B(B"CFv;!!9*1---- 
}	% =#5a#8#;#;<= 
}	% V#5a#8#;#;nUV V}

 

t= =V Vs%   A/N=
$O
%O=O
OOc           
      2   | j                          | j                  t        j                         d       | j	                  t
        d   j                  t
        d   j                  t
        d   j                         t        t
        d   j                        gt
        d   d   t
        d   d   d       | j	                  t
        d   j                  t
        d   j                  t
        d   j                         t        t
        d   j                        gt
        d   d   t
        d   d          | j                  t
        d   j                  d	       | j                  t
        d   d
         }t        |      dk(  sJ |d   d   d	k(  sJ | j                  t
        d   j                  d       | j                  t
        d   d
   d      }t        |      dk(  sJ |d   d   dk(  sJ t        j                  t              5  | j	                  t
        d   j                  t
        d   j                  t
        d   j                         t        t
        d   j                        gt
        d   d   t
        d   d   d       d d d        y # 1 sw Y   y xY w)Nr   r   r   r'   r(   r   r   rr   
new_name_1r$   r~   r%   
new_name_0r   )r   r   rn   ro   r   r5   r$   r%   r   rp   r   r   r   r   r   r   r   s     r=    test_create_update_with_databaser     s   	 
TZZ\? 
a ##"''(+==? !3A!6!9!9:;#A&z2$Q'4   
a ##"''(+==? !3A!6!9!9:;#A&z2$Q'4   
a ##   ""&8&;D&A"BFv;!!9V,,, 
a ##   ""a & # F v;!!9V,,, 
,	- 	
!!$''#A&++,Q/AAC$%7%:%=%=>?'*:6(+K8# 	  	
	
 	
 	
s   A?JJc           
         | j                          | j                  t        j                         d       t        D ][  }| j                  |j                  |j                  |j                         t        |j                        g|d   |d   d       d|d<   ] | j                  d      }t        |      t        t              k(  sJ t        |d 	      t        k(  sJ | j                         }t        |      d
k(  sJ y )Nr   r   r'   r(   r   r)   r   c                     | j                   S ru   rv   rw   s    r=   ry   z1test_get_multiple_with_database.<locals>.<lambda>q  s
     r\   rz   r   )r   r   rn   ro   r5   r   r$   r%   r   rp   r   r   r   )rf   rm   r   s      r=   test_get_multiple_with_databaser   [  s    	 
TZZ\? ) 
0
}}$668$Z]]34
+ -# 	  	
 "0
:
0 ""N";Fv;#01111&./3EEEE ""$Fv;!r\   c                    | j                          | j                  d       t        j                  t              5  | j                  d       d d d        t        j                  t              5  | j                  t
               d d d        | j                  t        j                         dd       | j                  t        j                         d       | j                  t        d   j                  t        d   j                  t        d   j                         t        t        d   j                        gt        d   d   t        d   d   dd	       dt        d   d
<   dt        d   d<   | j                  t        d   j                  t        d   j                  t        d   j                         t        t        d   j                        gt        d   d   t        d   d   d       dt        d   d<   | j                  dd      }t!        |      dk(  sJ |d   t        d   k(  sJ | j                  d      }t!        |      dk(  sJ |d   t        d   k(  sJ t        j                  t              5  | j                  t        d   j                  t        d   j                  t        d   j                         t        t        d   j                        gt        d   d   t        d   d   d       d d d        t        j                  t              5  | j                  t        d   j                  t        d   j                  t        d   j                         t        t        d   j                        gt        d   d   t        d   d   dd	       d d d        | j                  t"        d      }t!        |      dk(  sJ y # 1 sw Y   ~xY w# 1 sw Y   SxY w# 1 sw Y   xY w# 1 sw Y   WxY w)Ntenant1rv   r   r$   r%   r*   r   r   r'   r(   )r$   r%   r&   rs   r'   r(   r)   r*   r*   r)   r   r   )r)   r*   r   )r   create_tenantr   r   r   r   r   rn   ro   r   r5   r$   r%   r   rp   r   r   r   r   s     r=   !test_create_database_with_tenantsr   w  s   	 
Y' 
,	- ,+, 
,	- 101 
TZZ\yQ	TZZ\? 
a ##"''(+==? !3A!6!9!9:;#A&z2$Q'4  	 '0q(#(6q*% 
a ##"''(+==? !3A!6!9!9:;#A&z2$Q'4   )7q*% ""N9"MFv;!!9*1----""N";Fv;!!9*1---- 
,	- 	
!!$''#A&++,Q/AAC$%7%:%=%=>?'*:6(+K8# 	  	
	
 
,	- 

!!$''#A&++,Q/AAC$%7%:%=%=>?'*:6(+K8# 	  		


 "",<Y"OFv;!U, ,1 1Z	
 	


 

s1   O0O;A?O%B O1OO"%O.1O:c                    | j                          | j                  d       | j                  d      }|d   dk(  sJ t        j                  t
              5  | j                  d       d d d        | j                  t        j                         dd       | j                  dd      }|d   dk(  sJ |d   dk(  sJ t        j                  t
              5  | j                  d	d       d d d        t        j                  t
              5  | j                  d	d       d d d        y # 1 sw Y   xY w# 1 sw Y   KxY w# 1 sw Y   y xY w)
Nr   rv   r%   tenant2r   r   )r%   r*   r*   new_database1)
r   r   
get_tenantr   r   r
   r   rn   ro   get_databaser   s     r=   test_get_database_with_tenantsr     sO   	 
Y' 9-F&>Y&&& 
}	% )i() 
TZZ\yQ ^IFF&>^+++(y((( 
}	% C	BC
 
}	% C	BC C#) )C C
C Cs$   D+D7E+D47E Ez$00000000-d7d7-413b-92e1-731098a6e492rk   z$11111111-d7d7-413b-92e1-731098a6e492test_type_bc           
      &   | j                          g }d}t        D ]z  }| }t        |j                  |rdnd      }|j	                  |       | j                  |j                  |j                  |j                         |g|d   |d         \  }}|du rzJ  g }t        D ]-  }|j                  | j                  |j                  	             / t        |d
       }t        |d       }||k(  sJ t        j                  t              5  | j                  |d          d d d        |D ]#  }| j                  |d   |d         }	|	|gk(  r#J  | j                  dt        d   j                        }	t        |	      dk(  sJ |	d   d   t        d   j                  k(  sJ |	d   |d   k(  sJ | j                  dt        d   j                        }	t        |	      dk(  sJ |	d   |d   k(  sJ | j                  t        d   j                  	      }	t        |	      dk(  sJ |	d   |d   k(  sJ | j                  dt        d   j                        }	t        |	      dk(  sJ |	d   |d   k(  sJ | j                  dt        d   j                        }	t        |	      dk(  sJ |d   }
| j!                  |
d   |
d          g }t        D ]-  }|j                  | j                  |j                  	             / |
|vsJ t        |      t        |      dz
  k(  sJ t        |d       t        |dd  d       k(  sJ t        j                  t"              5  | j!                  |
d   |
d          d d d        y # 1 sw Y   [xY w# 1 sw Y   y xY w)NFrg   r   )rh   ri   r'   r(   rr   T)rm   c                     | d   S Nr$   r[   rw   s    r=   ry   z1test_create_get_delete_segments.<locals>.<lambda>  s
    AdG r\   rz   c                     | d   S r   r[   rw   s    r=   ry   z1test_create_get_delete_segments.<locals>.<lambda>  s
    QtW r\   r   r$   rm   r$   rm   )rl   rm   r   c                     | d   S r   r[   rw   s    r=   ry   z1test_create_get_delete_segments.<locals>.<lambda>K  s
    4 r\   c                     | d   S r   r[   rw   s    r=   ry   z1test_create_get_delete_segments.<locals>.<lambda>L  s
    AdG r\   )r   r5   rp   r$   appendr   r%   r   extendget_segmentsr   r   r   r   create_segmentr   delete_segmentr
   )rf    segments_created_with_collectiontoggle_typerm   segmentcollection_resultr   r   sorted_segmentsr   s1s              r=   test_create_get_delete_segmentsr      s   	 (*$K ) 
%o $--*5=
 	)//8%*%<%<}}$668Y
+ - &= &
"7 $"  G( E
u))Z]])CDEW"34G=CTUOo%%% 
,	- B=a@AB 4 ###wt}AV#W'"""#
 ]?QRS?T?W?WXFv;!!9\"&8&;&>&>>>>!98;;;;]?QRS?T?W?WXFv;!!98;;;; +=a+@+C+CDFv;!!98;;;; ]?QRS?T?W?WXFv;!!98;;;; ]?QRS?T?W?WXFv;! 
*!	,B	L)2d84G( E
u))Z]])CDEWw<3?@1DDDD'01V(,2C6   
 
}	% 9R-r$x89 9]B B\9 9s   M:N:NNc           
         dddd}t        t        j                         dt        j                  t
        d   j                  |      }| j                          t
        D ]U  }| j                  |j                  |j                  |j                         t        |j                        g|d   |d	   
       W | j                  |       | j                  |d   |d         }|d   |d   d<   ||gk(  sJ | j                  |d   |d         }|d   |d   d<   ||gk(  sJ d|d<   | j                  |d   |d   ddi       | j                  |d   |d         }|d   |d   d<   ||gk(  sJ d|d<   | j                  |d   |d   ddi       | j                  |d   |d         }|d   |d   d<   ||gk(  sJ |d= | j                  |d   |d   dd i       | j                  |d   |d         }|d   |d   d<   ||gk(  sJ d |d<   | j                  |d   |d   d        | j                  |d   |d         }|d   |d   d<   ||gk(  sJ y )Nr   r   r   r   rg   r   rk   r'   r(   rr   r$   rm   r   r.   r   r   r1   r    )r   rn   ro   r   r   r5   r$   r   r   r%   r   rp   r   r   update_segment)rf   r'   r   rx   r   s        r=   test_update_segmentr   T  s   3H
 ::<!!%a(++G 
 
tt--/$QTT*+z]n 	  	

 
! 74=W\=RSF%l3F1IlgY74=W\=RSF%l3F1IlgY #H[	wt}V7L   74=W\=RSF%l3F1IlgY "HZ	wt}
F7K   74=W\=RSF%l3F1IlgY 		wt}
D7I   74=W\=RSF%l3F1IlgY GJ	.M74=W\=RSF%l3F1IlgYr\   )HrD   	functoolsrG   rB   r   typingr   r   r   r   r   chromadb.db.impl.grpc.clientr   chromadb.db.impl.grpc.serverr	   chromadb.errorsr
   r   r   chromadb.test.conftestr   chromadb.typesr   r   r   chromadb.db.impl.sqliter   chromadb.configr   r   r   r   chromadb.db.systemr   r   rn   chromadb.api.configurationr   logging	getLoggerrd   rU   TENANT	NAMESPACEUUIDr5   __annotations__r>   rJ   rS   rW   r]   fixturerf   ro   r   strr   floatrp   r   r   r   r   r   r   r   r   r$   sample_segmentsr   r   r[   r\   r=   <module>r      s   	     9 9 2 6 O O 1 < < ,  % !  F 			8	$		
 499 57$!3G!	 499 57$!3G!	 499 57$!3G!	 499 57$!3G!	?)( D$ )X	%t+, !9UD$%67 !&yd):; &yd):; &BT(2yd1B'C#CDE B h{}5/> /itT0A&B / 6/
 /9djjl'4)5)<)<#)#$%(B$)) !$& "#uS#u_'="=> $H'e H' H'V55 5T 5pKC KC4 KC\UV% UVD UVn=
E =
d =
@5 T 8QU Qt QhC% CD CH 499;<!!%a(++$!3G 499;<!!%a(++$!3G$Q95 Q9T Q9hEu E Er\   