
    ug^                     <   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mZ d dlmZmZmZmZmZ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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% d dl&Z&d dl'Z'd dl(Z(d dl)Z*dee	ddf   fdZ+dee	ddf   fdZ,deeg ee	ddf   f      fdZ- e j\                  d e-             de#dee	ddf   fd       Z/ e j\                  d      dee   fd       Z0deee      fdZ1 e j\                  d e1             de#deee   ddf   fd       Z2defdZ3dededdfdZ4de	dee   d ee   d!eddf
d"Z5d4d#e6d$e6d%e6de7fd&Z8d4d#ed$ed%e6de7fd'Z9de	dee   d ee   d!eddf
d(Z:de	dee   d ee   d!eddf
d)Z;de	dee   d ee   d!eddf
d*Z<d+ed,ejz                  dedee   d-eddfd.Z>de	dee   d ee   d!eddf
d/Z?de	dee   d ee   d!eddf
d0Z@de	d ee   ddfd1ZAde	dee   d ee   d!eddf
d2ZBde	dee   d ee   d!eddf
d3ZCy)5    N)	GeneratorListCallableIteratorTypecast)SystemSettings)
ProducerFn)	OperationRecordRequestVersionContextVectorQuery	OperationScalarEncodingSegmentSegmentScopeSeqIdVector)Producer)VectorReader)LocalHnswSegment)PersistentLocalHnswSegment)test_hnsw_config)FixtureRequest)countreturnc               #     K   t        j                         } t        dd|       }t        |      }|j	                          | |j                          t        j                  j                  |       rt        j                  |        yyw)Fixture generator for sqlite DBTFallow_resetis_persistentpersist_directoryNtempfilemkdtempr
   r	   startstopospathexistsshutilrmtree	save_pathsettingssystems      V/var/www/openai/venv/lib/python3.12/site-packages/chromadb/test/segment/test_vector.pysqliter2   &   sk       "I#H
 HF
LLN
L
KKM	ww~~i i  !   BB
c               #     K   t        j                         } t        dd|       }t        |      }|j	                          | |j                          t        j                  j                  |       rt        j                  |        yyw)r   Tr   Nr#   r-   s      r1   sqlite_persistentr5   6   sk       "I#H
 HF
LLN
L
KKM	ww~~i i  !r3   c                      t         t        gS N)r2   r5        r1   system_fixturesr:   I   s    %&&r9   module)scopeparamsrequestc              #   B   K   t        | j                                y wr7   )nextparamr>   s    r1   r0   r0   M   s     
w}}
s   function)r<   c                  J     dt         dt        fd  fdt               D        S )zGenerate a sequence of embeddings with the property that for each embedding
    (other than the first and last), it's nearest neighbor is the previous in the
    sequence, and it's second nearest neighbor is the subsequentir   c                     t        j                  | dz  | dz  g      }t        d|  |t        j                  d t
        j                        }|S )Ng?
embedding_id	embeddingencodingmetadata	operation)nparrayr   r   FLOAT32r   ADD)rE   vectorrecords      r1   create_recordz(sample_embeddings.<locals>.create_recordX   sN    1c61c6*+ A3#++mm
 r9   c              3   .   K   | ]  } |        y wr7   r8   ).0rE   rT   s     r1   	<genexpr>z$sample_embeddings.<locals>.<genexpr>c   s     .gM!gs   )intr   r   )rT   s   @r1   sample_embeddingsrY   R   s%    	 	 	 /eg..r9   c                      t         t        gS r7   )r   r   r8   r9   r1   vector_readersr[   f   s    899r9   c              #   (   K   | j                    y wr7   )rA   rB   s    r1   vector_readerr]   j   s     
--s   c                      t        t        j                         dt        j                  t        j
                  d      t        i       S )N	test_typer   )rX   )rI   typer<   
collectionrL   
file_paths)r   uuiduuid4r   VECTORUUIDr   r8   r9   r1    create_random_segment_definitionrg   o   s6    ::<!!99#! r9   segmentseq_idc                    t        j                          }t        j                          |z
  dk  rD| j                         |k\  ry t        j                  d       t        j                          |z
  dk  rDt        d|       )N   g      ?zTimed out waiting for seq_id )time	max_seqidsleepTimeoutError)rh   ri   r&   s      r1   syncrp   z   sj    IIKE
))+

!&(

4 ))+

! 6vh?
@@r9   r0   rY   r]   produce_fnsc                    | j                  t              }t        dd      }| j                          t	               }|d   } |||d|      d   d   } || |      }	|	j                          t        |	|       |	j                  |      dk(  sJ  |||d|      d   d   }t        |	|       |	j                  |      d	k(  sJ y )
Nr   collection_versionlog_positionra      producercollection_idn
embeddings   request_version_context   )instancer   r   reset_staterg   r&   rp   r   )
r0   rY   r]   rq   rx   r   segment_definitionry   max_idrh   s
             r1   test_insert_and_countr      s     x(H31 9;&|4M#
$	
 	
 
F F$67GMMO&==1H=IQNNN#
$	
 	
 
F 	&==1H=IQNNNr9   abepsilonc                 $    t        | |z
        |k  S r7   )absr   r   r   s      r1   approx_equalr      s    q1u:r9   c                 @    t        fdt        | |      D              S )Nc              3   >   K   | ]  \  }}t        ||        y wr7   )r   )rV   xyr   s      r1   rW   z&approx_equal_vector.<locals>.<genexpr>   s     Aytq!|Aq'*ys   )allzipr   s     `r1   approx_equal_vectorr      s    As1ayAAAr9   c           	         | j                  t              }t        dd      }| j                          t	               }|d   } || |      }|j                           ||||d      \  }	}
t        ||
d          |j                  |      }t        |      t        |	      k(  sJ t        |d 	      }t        ||	|
      D ]5  \  }}}|d
   |d
   k(  sJ t        |d   t        t        |d               r5J  |	dd  D cg c]  }|d
   	 }}|j                  ||      }t        |      dk(  sJ t        |d 	      }t        ||	dd  |
dd        D ]5  \  }}}|d
   |d
   k(  sJ t        |d   t        t        |d               r5J  y c c}w )Nr   rs   ra   
   rx   ry   r{   rz   r}   r~   c                     | d   S NrI   r8   vs    r1   <lambda>z"test_get_vectors.<locals>.<lambda>       AdGr9   keyrI   rJ   rk   idsr   c                     | d   S r   r8   r   s    r1   r   z"test_get_vectors.<locals>.<lambda>   r   r9   )r   r   r   r   rg   r&   rp   get_vectorslensortedr   r   r   r   )r0   rY   r]   rq   rx   r   r   ry   rh   r{   seq_idsvectorsactualexpectedri   er   s                    r1   test_get_vectorsr      s    x(H31 9;&|4MF$67GMMO%#$
	J 	'"+ !!:Q!RGw<3z?***W"34G$'W$E &d|x~---";fh{.C!D
 	
 
 %F 'qrN
+Nq1T7NC
+!!)@ " G w<1W"34G$'AB$M &d|x~---";fh{.C!D
 	
 
 %N ,s   >F	c           
         | j                  t              }| j                          t        dd      }t	               }|d   } || |      }|j                           ||||d      \  }	}
t        ||
d          |	D ]  }t        t        |d         }t        |gdd d d	|
      }|j                  |      }t        |      dk(  sJ t        |d         dk(  sJ |d   d   d   |d   k(  sJ |d   d   d   J t        |d   d   d   |      rJ  |	D cg c]  }t        t        |d          }}t        |dd d d|
      }|j                  |      }t        |      t        |	      k(  sJ t        ||	      D ]%  \  }}t        |      dk(  sJ |d   d   |d   k(  r%J  |	dd }|D cg c]  }t        t        |d          }}t        |dd d d|
      }|j                  |      }t        |      t        |      k(  sJ t        ||t        dt        |                  D ]U  \  }}}t        |      dk(  sJ |d   d   |	|   d   k(  sJ |d   d   |	|dz
     d   k(  sJ |d   d   |	|dz      d   k(  rUJ  y c c}w c c}w )Nr   rs   ra   d   r   r}   rJ   r|   Tr   kallowed_idsoptionsinclude_embeddingsr   rI   Frv      )r   r   r   r   rg   r&   rp   r   r   r   query_vectorsr   r   r   range)r0   rY   r]   rq   rx   r   r   ry   rh   r{   r   r   rR   queryresultsr   rtest_embeddingsrE   s                      r1   test_ann_queryr      s    x(H
31 :;&|4MF$67GMMO%#$
	J 	'"+ fan-H#$;
 ''.7|q   71:!###qz!}T"ag---qz!}[)555"71:a=#=vFFF $ 6@@ZtFAkN+ZG@
  7E ##E*Gw<3z?***GZ(11v{{tDzQtW$$$ )
 !2&O5DE_tFAkN+_GE
  7E ##E*Gw<3////wq#o:N1OP1a1v{{tDzZ]40000tDzZA.t4444tDzZA.t4444	 Q; A" Fs   I8(I=c                 
   | j                  t              }| j                          t        dd      }t	               }|d   } || |      }|j                           ||||d      \  }	}
t        ||
d          |j                  |      dk(  sJ t        |	d   d   d d d t        j                  	      t        |
t              sJ |
j                   |||d
fdt        d
      D              d
   d          t        ||
d          |j                  |      dk(  sJ |j                  |	d   d   g|      g k(  sJ |j                  |      }t!        |      dk(  sJ t#        |d       }t%        ||	d
d        D ]4  \  }}|d   |d   k(  sJ t'        |d   t)        t*        |d               r4J  t)        t*        |	d   d         }t-        |gdd d d|      }|j/                  |      }t!        |      dk(  sJ t1        d |d   D              t1        d |	d
d  D              k(  sJ |
j                   |||d
fdt        d
      D              d
   d          t        ||
d          |j                  |      dk(  sJ y )Nr   rs   ra   rk   r   r}   r~   rI   rH   r|   c              3   "   K   | ]  }  y wr7   r8   rV   _delete_records     r1   rW   ztest_delete.<locals>.<genexpr>^       8x!x   rw      r   c                     | d   S r   r8   r   s    r1   r   ztest_delete.<locals>.<lambda>q  r   r9   r   rJ   r   Fr   c              3   &   K   | ]	  }|d      ywrI   Nr8   rV   r   s     r1   rW   ztest_delete.<locals>.<genexpr>       /1qw   c              3   &   K   | ]	  }|d      ywr   r8   rV   r   s     r1   rW   ztest_delete.<locals>.<genexpr>       6W1qwr   c              3   "   K   | ]  }  y wr7   r8   r   s     r1   rW   ztest_delete.<locals>.<genexpr>  r   r   )r   r   r   r   rg   r&   rp   r   r   r   DELETE
isinstancer   appendr   r   r   r   r   r   r   r   r   r   setr0   rY   r]   rq   rx   r   r   ry   rh   r{   r   r   r   r   rR   r   knn_resultsr   s                    @r1   test_deleter   6  s    x(H
31 :;&|4MF$67GMMO%#$
	J 	'"+==1H=IQNNN#a=""M gt$$$NN'8uQx8		

 	
 	 	'"+ ==1H=IQNNN 	At$%?V 	 	
 		
 !!:Q!RGw<1W"34GAB8d|x~---";fh{.C!D
 	
 
 9 &*Q-45F
  7E ''.Kw<1/A//36W
STSU6W3WWWW NN'8uQx8		

 	
 	 	'"+==1H=IQNNNr9   rx   ry   rM   c                    t        d      D cg c]  }t        |       }}g }|D ]#  }|j                  | j                  ||             % t	        dd      }	t        ||d          |j                  |	      dk(  sJ |j                  | j                  |t        |d   d   t        j                  ddg      t        j                  d|	                   t        ||d          |j                  |	      dk(  sJ |j                  |	      }
t        |
      dk(  sJ |j                  |d   d   g|	
      }
t        j                  |
d   d   t        j                  ddg            sJ t        t         |d   d         }t#        |gdddd|	      }|j%                  |      d   }|d   d   |d   d   k(  sJ |d   d   |d   d   k(  sJ |d   d   |d   d   k(  sJ t        j                  ddg      }t#        |gdddd|	      }|j%                  |      d   }|d   d   |d   d   k(  sJ |d   d   |d   d   k(  sJ |d   d   |d   d   k(  sJ yc c}w )z3Tests the common code paths between update & upsertrv   r   rs   r}   r~   rI         $@NrH   r   rJ   Fr   r|   r   )r   r@   r   submit_embeddingr   rp   r   r   rN   rO   r   rP   r   r   array_equalr   r   r   r   )rx   ry   rh   rY   rM   rE   r{   r   r   r   r   rR   r   r   s                 r1   _test_updater     s    498<8a$()8J<Gx00BC  41 	'"+==1H=IQNNNNN!!a=&((D$<0'//#		
 	'"+ ==1H=IQNNN!!:Q!RGw<1!!]4 !;R " G >>'!*[1288T4L3IJJJ &*Q-45F
  7E ''.q1Kq>$:a=#6666q>$:a=#6666q>$:a=#6666 XXtTl#F
  7E ''.q1Kq>$:a=#6666q>$:a=#6666q>$:a=#6666A =s   Ic           	      6  
 | j                  t              }| j                          t               }|d   }t	        dd      } || |      }|j                          t        ||||t        j                         t        dt        j                  ddg      t        j                  d t        j                        
 |||d
fdt        d      D        	      d   d   }	t        ||	       |j!                  |
      dk(  sJ |j#                  dg|      g k(  sJ y )Nra   r   rs   no_such_recordr   rH   r|   c              3   "   K   | ]  }  y wr7   r8   )rV   r   update_records     r1   rW   ztest_update.<locals>.<genexpr>       48aM8r   rw   r~   rv   r   )r   r   r   rg   r   r&   r   r   UPDATEr   rN   rO   r   rP   r   rp   r   r   )r0   rY   r]   rq   rx   r   ry   r   rh   ri   r   s             @r1   test_updater     s0    x(H
9;&|4M31 F$67GMMO='3DiFVFVW $((D$<(''""M #
4584	
 	
 
F 	&==1H=IQNNN!"<S 	 	
 		r9   c           	         | j                  t              }| j                          t               }|d   }t	        dd      } || |      }|j                          t        ||||t        j                         t        dt        j                  ddg      t        j                  d t        j                         |||dfdt        d      D        	      d   d   }	t        ||	       |j!                  |
      dk(  sJ |j#                  dg|      }
t%        |
      dk(  sJ t'        |
d   d   t        j                  ddg            sJ y )Nra   r   rs   r   *   rH   r|   c              3   "   K   | ]  }  y wr7   r8   )rV   r   upsert_records     r1   rW   ztest_upsert.<locals>.<genexpr>+  r   r   rw   r~   r   r   rJ   )r   r   r   rg   r   r&   r   r   UPSERTr   rN   rO   r   rP   r   rp   r   r   r   r   )r0   rY   r]   rq   rx   r   ry   r   rh   ri   resultr   s              @r1   test_upsertr     sX    x(H
9;&|4M31 F$67GMMO='3DiFVFVW $((B8$''""M #
4584	
 	
 
F 	&==1H=IQNNN  8O ! F v;!vay5rxxR7IJJJr9   c                    | j                  t              }| j                          t               }|d   }t	        dd      } || |      }|j                          |j                  |      dk(  sJ t        dd d d t        j                        }	 |j                  ||       y # t        $ r t        j                  d       Y y w xY w)Nra   r   rs   r~   	not_in_dbrH   z@Unexpected error. Deleting on an empty segment should not raise.)r   r   r   rg   r   r&   r   r   r   r   r   BaseExceptionpytestfail)r0   r]   rx   r   ry   r   rh   r   s           r1   test_delete_without_addr   8  s     x(H
9;&|4M31 F$67GMMO==1H=IQNNN#""MX!!-? XVWXs   B$ $CCc                    | j                  t              }| j                          t        dd      }t	               }|d   } || |      }|j                           ||||d      \  }	}
t        ||
d          |j                  |      dk(  sJ t        |	d   d   d d d t        j                  	      t        |
t              sJ |
j                   |||d
fdt        d
      D              d
   d          t        ||
d          |j                  |      dk(  sJ |j                  |	d   d   g|      g k(  sJ |j                  |      }t!        |      dk(  sJ t#        |d       }t%        ||	d
d        D ]4  \  }}|d   |d   k(  sJ t'        |d   t)        t*        |d               r4J  t)        t*        |	d   d         }t-        |gdd d d|      }|j/                  |      }t!        |      dk(  sJ t1        d |d   D              t1        d |	d
d  D              k(  sJ t        |t2              rt4        j6                  j9                  |j;                               sJ |j=                          t4        j6                  j9                  |j;                               rJ |j=                          y t        |t>              r3tA        jB                  tD              5  |j=                          d d d        y y # 1 sw Y   y xY w)Nr   rs   ra   rk   r   r}   r~   rI   rH   r|   c              3   "   K   | ]  }  y wr7   r8   r   s     r1   rW   z9test_delete_with_local_segment_storage.<locals>.<genexpr>~  r   r   rw   r   r   c                     | d   S r   r8   r   s    r1   r   z8test_delete_with_local_segment_storage.<locals>.<lambda>  r   r9   r   rJ   r   Fr   c              3   &   K   | ]	  }|d      ywr   r8   r   s     r1   rW   z9test_delete_with_local_segment_storage.<locals>.<genexpr>  r   r   c              3   &   K   | ]	  }|d      ywr   r8   r   s     r1   rW   z9test_delete_with_local_segment_storage.<locals>.<genexpr>  r   r   )#r   r   r   r   rg   r&   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(   r)   r*   _get_storage_folderdeleter   r   raisesNotImplementedErrorr   s                    @r1   &test_delete_with_local_segment_storager   V  s*    x(H
31 :;&|4MF$67GMMO%#$
	J 	'"+==1H=IQNNN#a=""M gt$$$NN'8uQx8		

 	
 	 	'"+ ==1H=IQNNN 	At$%?V 	 	
 		
 !!:Q!RGw<1W"34GAB8d|x~---";fh{.C!D
 	
 
 9 &*Q-45F
  7E ''.Kw<1/A//36W
STSU6W3WWWW '56ww~~g99;<<<77>>'"="="?@@@	G-	.]]./NN 0/ 
///s   #K>>Lc                 L   | j                  t              }| j                          t               }|d   }t	        dd      } || |      }|j                           ||||d      \  }	}
t        ||
d          |j                  |      dk(  sJ t        |	d   d   d d d t        j                  	      t        |
t              sJ |
j                   |||d
fdt        d
      D              d
   d          t        ||
d          |j                  |      dk(  sJ |j                  |	d   d   g|      g k(  sJ |j                  |      }t!        |      dk(  sJ t#        |d       }t%        ||	d
d        D ]4  \  }}|d   |d   k(  sJ t'        |d   t)        t*        |d               r4J  t)        t*        |	d   d         }t-        |gdd d d|      }|j/                  |      }t!        |      dk(  sJ t1        d |d   D              t1        d |	d
d  D              k(  sJ t        |t2              r|j4                  rot6        j8                  j;                  |j=                               sJ |j                          t6        j8                  j;                  |j=                               rJ y t6        j8                  j;                  |j=                               sJ |j                          t6        j8                  j;                  |j=                               sJ y y )Nra   r   rs   rk   r   r}   r~   rI   rH   r|   c              3   "   K   | ]  }  y wr7   r8   r   s     r1   rW   zAtest_reset_state_ignored_for_allow_reset_false.<locals>.<genexpr>  r   r   rw   r   r   c                     | d   S r   r8   r   s    r1   r   z@test_reset_state_ignored_for_allow_reset_false.<locals>.<lambda>  r   r9   r   rJ   r   Fr   c              3   &   K   | ]	  }|d      ywr   r8   r   s     r1   rW   zAtest_reset_state_ignored_for_allow_reset_false.<locals>.<genexpr>  r   r   c              3   &   K   | ]	  }|d      ywr   r8   r   s     r1   rW   zAtest_reset_state_ignored_for_allow_reset_false.<locals>.<genexpr>  r   r   )r   r   r   rg   r   r&   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   _allow_resetr(   r)   r*   r   )r0   rY   r]   rq   rx   r   ry   r   rh   r{   r   r   r   r   rR   r   r   r   s                    @r1   .test_reset_state_ignored_for_allow_reset_falser     sE    x(H
9;&|4M31 F$67GMMO%#$
	J 	'"+==1H=IQNNN#a=""M gt$$$NN'8uQx8		

 	
 	 	'"+ ==1H=IQNNN 	At$%?V 	 	
 		
 !!:Q!RGw<1W"34GAB8d|x~---";fh{.C!D
 	
 
 9 &*Q-45F
  7E ''.Kw<1/A//36W
STSU6W3WWWW'5677>>'"="="?@@@!ww~~g&A&A&CDDDD77>>'"="="?@@@!77>>'"="="?@@@ 7r9   )g-C6?)Dr   typingr   r   r   r   r   r   chromadb.configr	   r
   chromadb.test.conftestr   chromadb.typesr   r   r   r   r   r   r   r   r   chromadb.ingestr   chromadb.segmentr   rc   rl   'chromadb.segment.impl.vector.local_hnswr   2chromadb.segment.impl.vector.local_persistent_hnswr   !chromadb.test.property.strategiesr   r   	itertoolsr   r$   r(   r+   numpyrN   r2   r5   r:   fixturer0   rY   r[   r]   rg   rp   r   floatboolr   r   r   r   r   rf   r   r   r   r   r   r   r8   r9   r1   <module>r     sr    B B , -
 
 
 % )   ? !   	  !	&$,- ! !9VT4%78 !&'hr9VT45G+H'HIJ ' h'89 N  yt1C'D   :  j!/8O4 / "/&:T,/0 : h~'78> i\8JDRV8V.W  9' A, A A$ A$O$O0$O %$O 	$O
 
$ON E  e  e    B6 Bf Bu B$ B/
/
0/
 %/
 	/

 
/
dN5N50N5 %N5 	N5
 
N5b\O\O0\O %\O 	\O
 
\O~I7I799I7 I7  0	I7
 I7 
I7X))0) %) 	)
 
)X(K(K0(K %(K 	(K
 
(KVXX%X 
X<XX0X %X 	X
 
XvWAWA0WA %WA 	WA
 
WAr9   