
    ug                        U d dl Zd dlZd dlmZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
 d dlmZmZmZmZmZmZmZ d dlmZ d dl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 m!Z! d d	l"m#Z# d dl$m%c m&c mZ d d
l m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2 d dl3m%c m&c m4Z4 d dl5m6Z6m7Z7m8Z8 d dl9Z:d dl;Z;d dl<m=Z=m>Z>  e2d       a?ee@eAf   eBd<   de@ddfdZCdIdZD ej                   ej                  ej                        d      ZHej                  ee:j                  e:j                  e:j                  f      eBd<    ej                   ej                  dd      d      ZNej                  eA   eBd<   e G d d             ZO ej                   ejb                  d      d       ZP G d! d"e(      ZQ G d# d$eQ      ZRd%ej                  d&e!ddfd'ZTd&e!ddfd(ZUd&e!ddfd)ZVd%ej                  d&e!ddfd*ZWd&e!ddfd+ZXd&e!ddfd,ZYd&e!ddfd-ZZd&e!ddfd.Z[d&e!ddfd/Z\ej                  j                  d01      d&e!ddfd2       Z_d&e!ddfd3Z`ej                  j                  d4d5d6gid7d6d8iid9d:d8iid6gd6d8id;d6gd:d8id<d6gd6d8id:d8id=g      d&e!d4eddfd>       Zb e ej                  e:j                  e:j                  e:j                  eAeeg      ?      d@ee   ddfdA       Zf e ej                  e:j                  e:j                  e:j                  eAeeg      ?      d@ee   ddfdB       Zg e ej                  e@ehg      C      dDee   ddfdE       ZidIdFZjd&e!ddfdGZkd&e!ddfdHZly)J    N)	overrides)givensettingsHealthCheck)DictSetcastUnionDefaultDictAnyList)	dataclass)ID
EmbeddingsIncludeIDsvalidate_embeddingsnormalize_embeddings)System)	ClientAPI)
Collection)
BundleRuleBasedStateMachineMultipleResultsrule
initializepreconditionconsumesrun_state_machine_as_testmultiple	invariant)defaultdict)is_client_in_processresetNOT_CLUSTER_ONLY)wait_for_version_increaseget_collection_versionc                       yNr    r*       [/var/www/openai/venv/lib/python3.12/site-packages/chromadb/test/property/test_embeddings.py<lambda>r-   /   s    Ar+   traceskeyreturnc                 &    t         | xx   dz  cc<   y )N   )r.   r/   s    r,   tracer4   2   s    
3K1Kr+   c                  \    t         j                         D ]  \  } }t        |  d|         y )Nz: )r.   itemsprint)r/   values     r,   print_tracesr9   7   s)    lln
URw  %r+   dtyper3   dtype_shared_st   i   )	min_value	max_value	dimensiondimension_shared_stc                        e Zd ZdZdZdZdZdZy)EmbeddingStateMachineStatesr   add_embeddingsdelete_by_idsupdate_embeddingsupsert_embeddingsN)__name__
__module____qualname__r   rC   rD   rE   rF   r*   r+   r,   rB   rB   F   s    J%N#M++r+   rB   T)with_hnsw_paramscollc            
           e Zd ZU eed<    ed      Zee   ed<   dZde	f fdZ
 ee      dej                  fd       Zed&d
       Z ee ej"                  e            dej$                  dee   fd       Z e ej,                   ee      d            dedd	fd       Z ed        e ej"                  eedd            dej$                  dd	fd              Z ed        e ej"                  e ej8                  eej:                        dd            dej$                  dd	fd              Z e       d&d       Z  e       d&d       Z! e       d&d       Z" e       d&d       Z# ed        e       d&d              Z$de%fd Z&dej$                  dd	fd!Z'd"e(e)   dd	fd#Z*d$e+dd	fd%Z, xZ-S )'EmbeddingStateMachineBase
collectionembedding_idsFclientc                 x    t         |           || _        t        j                  j                  |       | _        y N)super__init__rP   
hypothesisstatefulRuleStrategy_rules_strategyselfrP   	__class__s     r,   rT   z"EmbeddingStateMachineBase.__init__W   s.    )22??Er+   rN   c                 8   | j                   j                  |j                  |j                  |j                        | _        |j                  | _        t        d       | j                  t        j                         t        j                  g g g g       | _        y )N)namemetadataembedding_functioninitids	metadatas	documents
embeddings)rP   create_collectionr^   r_   r`   rN   r4   on_state_changerB   r   
strategiesStateMachineRecordSetrecord_set_state)rZ   rN   s     r,   r   z$EmbeddingStateMachineBase.initialize\   s~    ++77(()<< 8 

 #-"?"?f8CCD * @ @bB2!
r+   r0   Nc                 b    | j                   j                  | j                  j                         y rR   )rP   delete_collectionrN   r^   rZ   s    r,   teardownz"EmbeddingStateMachineBase.teardownk   s    %%doo&:&:;r+   target
record_setrr   c                    t        d       | j                  t        j                         t	        j
                  |      }t        |d         dkD  rt        d       t        |d         j                  | j                  d         }t        |      dkD  rt        t        |d         j                  |            }|D cg c]  }|d   j                  |       }}|D cg c]
  }|d   |    c}|d   r|D cg c]
  }|d   |    c}nd |d   r|D cg c]
  }|d   |    c}nd |d   r|D cg c]
  }|d   |    c}nd d} | j                  j                  d	i | | j                  t!        t"        j$                  |             t'        |d    S  | j                  j                  d	i | | j                  t!        t"        j$                  |             t'        |d    S c c}w c c}w c c}w c c}w c c}w )
NrC   rc   r   add_more_embeddingsrd   re   rf   rb   r*   )r4   rh   rB   rC   
invariantswrap_alllensetintersectionrk   list
differenceindexrN   add_upsert_embeddingsr	   ri   	RecordSetr    )	rZ   rr   normalized_record_setry   new_idsidindicesifiltered_record_sets	            r,   rC   z(EmbeddingStateMachineBase.add_embeddingso   s"   
 	8GGH@J@S@SA
 $U+,q0'(078EE!!%(
 |q 34U;<GGUVGHOP",U399"=GPAHIA-e4Q7I(5 NUUW3K@CWU(5 NUUW3K@CWU(6 PWWw!4\B1EwWC  DOO8"78##D)=)=?R$ST0788  DOO8"78##D)=)=?T$UV259::) QIU V Xs   ?G( G-:G2G72G<
r2   min_sizerc   rc   c                 $   t        d       | j                  t        j                         |D cg c]   }| j                  d   j                  |      " }}| j                  j                  |       | j                  t        |             y c c}w )Nzremove embeddingsrc   r   )
r4   rh   rB   rD   rk   r|   rN   delete_remove_embeddingsrx   )rZ   rc   r   indices_to_removes       r,   rD   z'EmbeddingStateMachineBase.delete_by_ids   sz    !"8FFGNQRcT2259??CcR3'$5 67 Ss   %Bc                 8    t        | j                  d         dk\  S Nrc      rw   rk   rn   s    r,   r-   z"EmbeddingStateMachineBase.<lambda>       s4#8#8#?@AEr+   r   collection_strategyid_strategyr   max_sizerr   c                     t        d       | j                  t        j                          | j                  j
                  di | | j                  |       y )Nzupdate embeddingsr*   )r4   rh   rB   rE   rN   updater~   rZ   rr   s     r,   rE   z+EmbeddingStateMachineBase.update_embeddings   G     	!"8JJK,,
+r+   c                 8    t        | j                  d         dk\  S Nrc      r   rn   s    r,   r-   z"EmbeddingStateMachineBase.<lambda>   r   r+   c                     t        d       | j                  t        j                          | j                  j
                  di | | j                  |       y )Nzupsert embeddingsr*   )r4   rh   rB   rF   rN   upsertr~   r   s     r,   rF   z+EmbeddingStateMachineBase.upsert_embeddings   r   r+   c                     t        j                  | j                  t        t        j
                  | j                               y rR   )ru   countrN   r	   ri   r   rk   rn   s    r,   r   zEmbeddingStateMachineBase.count   s,    OOT*"6"68M8MN	
r+   c                 B    t        j                  | j                         y rR   )ru   no_duplicatesrN   rn   s    r,   r   z'EmbeddingStateMachineBase.no_duplicates   s      1r+   c                     t        j                  | j                  t        t        j
                  | j                        d| j                         y )Ngffffff?)rN   rr   
min_recallr`   )ru   ann_accuracyrN   r	   ri   r   rk   r`   rn   s    r,   r   z&EmbeddingStateMachineBase.ann_accuracy   s9    J00$2G2GH#66		
r+   c                 l   | j                         r | j                  j                         dk(  sJ y t        t        j
                  | j                        }t        j                  | j                  |       t        j                  | j                  |       t        j                  | j                  |       y r)   )_is_state_emptyrN   r   r	   ri   r   rk   ru   embeddings_matchmetadatas_matchdocuments_match)rZ   rk   s     r,   fields_matchz&EmbeddingStateMachineBase.fields_match   s    !??((*a///  $J$8$8$:O:OP''9IJ&&t8HI&&t8HIr+   c                 ,    t        | j                        S rR   )r#   rP   rn   s    r,   r-   z"EmbeddingStateMachineBase.<lambda>   s    )$++6r+   c                     | j                   j                  }t        j                  || j                  g| j
                         y rR   )rP   _systemru   log_size_below_maxrN   has_collection_mutated)rZ   systems     r,   r   z,EmbeddingStateMachineBase.log_size_below_max   s5    
 ,,%%T__%t'B'B	
r+   c                 J    | j                   j                         D ]  }|s y y)NFT)rk   values)rZ   fields     r,   r   z)EmbeddingStateMachineBase._is_state_empty   s&    **113E 4 r+   c           	         t        j                  |      }t        |d         D ][  \  }}|| j                  d   v r| j                  d   j	                  |      }|d   |d   |   | j                  d   |<   n@|d   J | j
                  J | j                  |d   |   g      d   | j                  d   |<   |d   || j                  d   |   }|Pt        t        t        t        t        t        t        f   f   |      }|d   |   |j                  |d   |          nn|d   |   | j                  d   |<   |d   |d   |   | j                  d   |<   7| j                  d   j                  |       |d   %| j                  d   j                  |d   |          nL| j
                  J |d   J | j                  d   j                  | j                  |d   |   g      d          |d   %| j                  d   j                  |d   |          n| j                  d   j                  d        |d   &| j                  d   j                  |d   |          >| j                  d   j                  d        ^ y )Nrc   rf   re   r   rd   )ru   rv   	enumeraterk   r|   r`   r	   r   strr
   intfloatr   append)rZ   rr   r   idxr   
target_idxrk   s          r,   r~   z,EmbeddingStateMachineBase._upsert_embeddings   s"   @J@S@SA
 !!6u!=>GCT**511!2259??C
(6B .l;C@ )),7" 1=III22>>> //.{;C@A  )),7" )5A (,'<'<['I*'U$'3+/ eCeO&<!<=?O,( 1=cBN,33 5k B3 G
 ! 2+>sC --k:& )5A .k:3? ))+6"
 %%e,33B7(6B)),7>>-l;C@  22>>>0=III)),7>>//2;?DE
 )5A))+6==-k:3? ))+6==dC(5A))+6==-k:3? ))+6==dCG ?r+   r   c                     t        |      }|j                  d       |D ]B  }| j                  d   |= | j                  d   |= | j                  d   |= | j                  d   |= D y )NT)reverserc   rf   rd   re   )rz   sortrk   )rZ   r   indices_listr   s       r,   r   z,EmbeddingStateMachineBase._remove_embeddings?  st    -.$'A%%e,Q/%%l3A6%%k215%%k215	 r+   	new_statec                 :    |t         j                  k7  rd| _        y y )NT)rB   r   r   )rZ   r   s     r,   rh   z)EmbeddingStateMachineBase.on_state_changeI  s    3>>>*.D' ?r+   r0   N).rG   rH   rI   r   __annotations__r   rO   r   r   r   rT   r   collection_stri   r   ro   r   
recordsetsr   r   rC   stlistsr   r   rD   r   rE   one_of	safe_textrF   r!   r   r   r   r   r   boolr   r~   r   r   r   r   rh   __classcell__r[   s   @r,   rM   rM   R   s    & 7M6":7"Fy F
 =)
Z%:%: 
 *
 < < 
(:((7%;)=)= %;/RTBU %;	%;N 
hbhhx.;<8 8 8 =8 EF	(:(( -%	
,J,@,@ ,T , G, EF	(:(( -!		-1E1EF	
,J,@,@ ,T , G, [
 

 [2 2 [
 
 [
J 
J 6 [
 
 GDZ-A-A GDd GDR6CH 6 6/ / /r+   rM   c            
           e Zd ZU  ed      Zee   ed<   def fdZ e	e
      dej                  f fd       Z	 ed        e       dd
              Z ee ej                   e
            dej"                  dee   f fd       Z e ej*                   ee      d            dedd	f fd       Z ed        e ej                   e
edd            dej"                  dd	f fd              Z ed        e ej                   e
 ej4                  eej6                        dd            dej"                  dd	f fd              Z xZS )EmbeddingStateMachinerO   rP   c                 $    t         |   |       y rR   )rS   rT   rY   s     r,   rT   zEmbeddingStateMachine.__init__Q  s     r+   r\   rN   c                     t         |   |       t        d| j                  j                  d   d|j
                         d| _        t               | _        | j                  j                         d   | _
        y )Nz7[test_embeddings][initialize] Initialize collection id r   z$ hypothesis generated collection id r   version)rS   r   r7   rN   _modelr   log_operation_countrx   unique_ids_in_log	get_modelcollection_version)rZ   rN   r[   s     r,   r   z EmbeddingStateMachine.initializeT  se    :&EOO""4(2MM		
 $% *-%"&//";";"=i"Hr+   c                 f    t          xr) | j                  dkD  xr t        | j                        dkD  S )N
   r   )r%   r   rw   r   rn   s    r,   r-   zEmbeddingStateMachine.<lambda>b  s8    )) ,$$r),&&'!+,r+   r0   Nc                    t        | j                  | j                  j                        }|| j                  k\  sJ || j                  kD  r)t        d       || _        d| _        t               | _        y t        d|       t        | j                  | j                  j                  |d      }d| _        t               | _        || _        y )NzT[test_embeddings][wait_for_compaction] collection version has changed, so reset to 0r   zY[test_embeddings][wait_for_compaction] wait for version to increase from current version    )additional_time)
r'   rP   rN   r^   r   r7   r   rx   r   r&   )rZ   current_versionnew_versions      r,   wait_for_compactionz)EmbeddingStateMachine.wait_for_compactiona  s     1doo>R>RS$"9"9999 T444f '6D#'(D$%(UD"k 4T__11?TWK ()D$%(UD"&1D#r+   rp   rr   c           	      4   t         |   |      }t        j                  |      }t	        d|d   dt        |d                | xj                  t        |d         z  c_        |d   D ],  }|| j                  vs| j                  j                  |       . |S )Nz,[test_embeddings][add] Non Intersection ids rc    len )	rS   rC   ru   rv   r7   rw   r   r   r}   )rZ   rr   resr   r   r[   s        r,   rC   z$EmbeddingStateMachine.add_embeddings  s    
 g$Z0@J@S@SA
 	:!%(%e,-		
 	  C(=e(D$EE '.B///&&**2. / 
r+   r2   r   r   rc   c                     t         |   |       t        d|dt        |             | xj                  t        |      z  c_        |D ],  }|| j
                  v s| j
                  j                  |       . y )Nz[test_embeddings][delete] ids r   )rS   rD   r7   rw   r   r   remove)rZ   rc   r   r[   s      r,   rD   z#EmbeddingStateMachine.delete_by_ids  sd    c".Wc#hG  CH, BT+++&&--b1 r+   c                 8    t        | j                  d         dk\  S r   r   rn   s    r,   r-   zEmbeddingStateMachine.<lambda>  r   r+   r   r   r   c                     t         |   |       t        d|d   dt        t	        j
                  |d                      | xj                  t        t	        j
                  |d               z  c_        y )Nz[test_embeddings][update] ids rc   r   )rS   rE   r7   rw   ru   wrapr   )rZ   rr   r[   s     r,   rE   z'EmbeddingStateMachine.update_embeddings  sd     	!*-,u

5 123		
 	  C

58I(J$KK r+   c                 8    t        | j                  d         dk\  S r   r   rn   s    r,   r-   zEmbeddingStateMachine.<lambda>  r   r+   c                 z   t         |   |       t        d|d   dt        t	        j
                  |d                      | xj                  t        t	        j
                  |d               z  c_        t	        j
                  |d         D ],  }|| j                  vs| j                  j                  |       . y )Nz[test_embeddings][upsert] ids rc   r   )	rS   rF   r7   rw   ru   r   r   r   r}   )rZ   rr   r   r[   s      r,   rF   z'EmbeddingStateMachine.upsert_embeddings  s     	!*-,u

5 123		
 	  C

58I(J$KK //*U"34B///&&**2. 5r+   r   )rG   rH   rI   r   rO   r   r   r   rT   r   r   ri   r   r   r   r   r   r   r   rC   r   r   r   r   rD   rE   r   r   rF   r   r   s   @r,   r   r   N  s    & 7M6":7!y ! =)
IZ%:%: 
I *
I 	,
 
V2 24 
(:((7)=)= /RTBU 	" 
hbhhx.;<2 2 2 =2 EF	(:(( -%	
LJ,@,@ LT L GL EF	(:(( -!		-1E1EF	
/J,@,@ /T / G/r+   r   caplogrP   c                     | j                  t        j                         t        fdt	        dt
        j                  g             t                y )Nc                      t               S rR   )r   )rP   s   r,   r-   z'test_embeddings_state.<locals>.<lambda>  s    %f-r+   i_ )deadlinesuppress_health_check)r   )	set_levelloggingERRORr   r   r   filter_too_muchr9   )r   rP   s    `r,   test_embeddings_stater     s=    
W]]#-;3N3N2O
 Nr+   c                 "   t        |       }|j                  t        j                  dddddd t	        j
                         dt        j                  i g dd
             |j                          |j                          |j                          |j                          |j                  g d	d
dgddgddgddgddgddggg dd d      \  }}}}}}|j                          |j                          |j                          |j                          |j                  |||||g       t        s|j                          |j                          |j                          |j                          |j                          |j!                          y )NA00   hnsw:construction_efhnsw:search_efhnsw:Mr<   FT
r^   r_   r`   r   r?   r:   known_metadata_keysknown_document_keywordshas_documentshas_embeddingsr\   )012345      ?     ?     P?     ?     ÿ     ?          ?     ?     Ϳ)NNNNNNrc   rf   rd   re   r   r   )r   r   ri   r   uuiduuid4npfloat16r   r   r   r   rC   rD   r%   r   ro   )rP   statev1v2v3v4v5v6s           r,   test_add_then_delete_n_minus_1r    s   !&)E	(((+"%
  $zz|** "$&
  $ 
	KKM		"111^, 01!>2"M200 >
 2 BBB 
	KKM			RRR01!!#		KKM			NNr+   c                 R   t        |       }|j                  t        j                  ddddddddddd t	        j
                  d	      d
t        j                  i g dd
             |j                          |j                          |j                          |j                          |j                  g ddgd
z  dgd
z  dgd
z  dgd
z  dgd
z  dgd
z  gddddddddd dddddddddddddd dd!d"d#
d$d%d&d'd(d)d*dd+dd,
gd d-.      \  }}}}}}|j                          |j                          |j                          |j                          |j                  d/dgd
z  gd d d-.      \  }|j                          |j                          |j                          |j                          |j                  d0d1gdgd
z  dgd
z  gd d2dd3dd4gd d-.      \  }	}
|j                          |j                          |j                          |j                          |j                  g d5dgd
z  dgd
z  dgd
z  gd6d7d8d9d:d;d<dd=d>d?id@ddAdBdddCdDdddEdFgd d-.       |j                          |j                          |j                          |j                          |j                  dGdHdI||	gdgd
z  dgd
z  dgd
z  dgd
z  dgd
z  gdJdKddLdMdNdOdPdQdNdRdSdTdUddVdWdXdYdZddd[d\d gd d-.       |j                          |j                          |j                          |j                          |j                  |||
||gdgd
z  dgd
z  dgd
z  dgd
z  dgd
z  gi d]dd^d_d`ddaddbdcdddedfddgdhdiddjddedkdldmdnddodpdqddrdsdtduddvdwdxdyd dzd{dd|d}dNd~dddddddd*d7ddgd d-.       |j                          |j                          |j                          |j                          |j                  |||
|gdgd
z  dgd
z  dgd
z  dgd
z  gddddd|dddddiddidNddddddSddgd d-.       |j                          |j                          |j                          |j                          |j                  |gdgd
z  gddlddddddd d-.       |j                          |j                          |j                          |j                          |j                  g ddgd
z  dgd
z  dgd
z  dgd
z  gdddddddiddhdddigd d-.      \  }}}}|j                          |j                          |j                          |j                          |j                  ddd|gdgd
z  dgd
z  dgd
z  dgd
z  gddid(dpdddddd7dddkddddddd
djdigd d-.       |j                          |j                          |j                          |j                          |j                  ||gdgd
z  dgd
z  gi ddddddddddddddddNddddhddddd|ddddCdddddēddddddddddʜ	ddddddkd͜gd d-.       |j                          |j                          |j                          |j                          |j                  |gdgd
z  gd d d-.       |j                          |j                          |j                          |j                          |j                  |||||gdgd
z  dgd
z  dgd
z  dgd
z  dgd
z  gddidddќd dddddddd؜ddddddddޜgd d-.       |j                          |j                          |j                          |j                          |j                  ||	dd|gdgd
z  dgd
z  dgd
z  dgd
z  dgd
z  gd ddddddddddddkdddddddddddddddgd d-.       |j                          |j                          |j                          |j                          |j                          y )NzfOIBy
FHtmYRTipiU5KdoaYsUQ_EWStV4r   )z-7n92WhVE_zJ-sW
wPGA8hY7uX4rAr   r   r   z$ff006990-82c3-494b-97d5-cbb05092c861i  Tr   r\   )kgaT4dzC2h2YoNSgUqRyE-Tmxf3MTzODI-yOtbvCr   i{5DkqA9o6           g   `UUտVT)szd1wQJV-9hWf7gwQrbyHgPe0r6qQ5XYxeqPzXpiqBi|E)hqTZ6Ok767eCSwyvGEuig8aTRGxN1h8Ii)ATRsKF0Piig      vReDiig      <)
PcFwuPSWCgxEQtupcOfhueUzI4tOMfHM7uU58tW_muctZfSvOyiuDCOcywKhsii;[g      p>-g    .i)
iuTAKznMg6IdUKxaPioyzc0Zb3VTUktBu-uW6innbsomMXnpsEEEFul8JRjHi7lrYr  r   uaK_yFsHiO5g      )
RiaaN9MNpqg9WxuexOHh2)SCeelWyLAWG_oHalYr  iObg   >   ii     g    >A)0ZbYq40POT9sTxkMz-jrqsBEfrELJctJoVeLqtsPZp5M4XFtiilyDy6q7LZUWzKuQG8m-Ti  xGwkig   ;*A)fPAPtmtxKb6CG18Vr-  zc-G92nYTTBWs31rbM_L_PQDSCuxOGzFeGgh7cuT_ruA3mnzO3m3-X1ZNt2PF6M5_qIj0Yh6iKiM  34oWsr93EUl    ~.Ag   Xc80eze-QXuDdnxYMd)2fDAuv74Etz5hqGH60G-yZ6PWyM1BOkMjjGyTkwZvpmS5HbTAIbvqzPhLgg   `ff?)WKyGNZphPCKay88gsh3x_iJDcig)z_zVO2i-NtWHxoltu_E_fg9yGpikZnQ3ALwA2   iL)otM8EGeKm
skf71O0UKTzS8Kc8-l95Rpc4bGz1QmzbKVySN1yrXFl56CmDS08FhBFXAIAWx4dcB5i8w8mwQ5c7G9g2JVYzVQGb_r-hzoAg    M0lMigFg   ?dRDugrcoZv45Bg   @  zUG-sSVcri4cT1GidIii
xM0jUV4U2rmsuFYMwj_SXc)FqFWR__r  vwo4WERBljY3aWjWnqLWFib@iHr  )mf4UtV_NVCw   )VWuP7uF8r  g      iL   )a1ML_Zl2Ir85KolESaXiJvAO8orMSr  5AeE2q	6T9tEEC84i  )YxlGe5GMXUvsAljL5V5ELRv	yeLTrhAIq      ?iP      ri  Rii&  ip )pzHn2YfdftMEd0C5ekByb7mhdbLJCViuLT5YOoVwEvq8Wf6iŭebEKOxi	g   uA)C1KbOOlKkzzLo9CGU2NHMfpu77F70Iclz	dz6fI-GppqVVWQrcq645F)F7Rig1RXiz_nC8-ii  g   @̼+A)FBtaPcQWV24vddLq1My3mbUL9IfIHLxuosTATUP1)AhCwm9AwPKim}4GJrAunf5
J8O0R8VGaYnK67gg    .Ag   `\A)K2cCgoObAcpaxafzpxnRCSPJUF4JZ2sKOIRDcznBaQ6F1O38etVMhss2angu-g   g    #
AiSNcMrT   )
UwbDWM2_r  nfoovt
elaMLbhEvWr  UOr  3ssGS4rSKXsKqRPFTBGrRPPsuGwVtTwei_qscyRBC_TPIXd	N0FG7Nta1g   >&woDB   IV0L3xImGgz9N--JBl0uH_au_KVmhtcAqrNfL6taIVpCXJXl
8YaEynJznBiONg   $AebBi  g   
@	cRl59jW_Og    ~.g      8g   @w)	fJz
QK8l3l4yP-r  z	-XP899RRnA9UlxNwmcG1NoCdWRn5cD	HExeVM0iMiSh)zAbCKkEvE4shnFNUc9vXWYz-iRt88MxYq)55m28krQsTFdqMhYjhFiHg      ?VG7E7xmio#  1xXUHLklmIVSVgQd7EHUCu5wakl6)9SnviLf
Y0Jw4pLTwrv3E
Fx3jsbcdqyHz-USisBi
xtLNrNyRo2g    ),)r@  Qfm_6duLSh0LkduZt5qsRJrF8DMMZrX  7OiaiD4eKi٨ii])tVsBzTRzbq6VslBBo2_12hgyKNPddxify34-np-F7FcZpODwCTHg91o4mKTjBL1Zjfyslg3z_TG-YhAQQ)1qrTKV8tLuQHsxar  UepiV6K_g    YR)prRUDZ_uRfFG6cZvICaGczunTbxz0qd2-AV1iC9OePgaBYi%D)EXXVBZUtJMO4oF8g8nr  hv3i)r   r   ri   r   r  UUIDr  r  r   r   r   r   rC   rF   rE   ro   )rP   r  embedding_ids_0embedding_ids_1embedding_ids_2embedding_ids_3embedding_ids_4embedding_ids_5embedding_ids_6embedding_ids_7embedding_ids_8embedding_ids_9embedding_ids_10embedding_ids_11embedding_ids_12s                  r,   test_embeddings_flake1rB    sN   !&)E	((!")(+"%	  99;<jj "'
  . 
	KKM		kpkk  TRCGaSWqc#gs3wC!SI!) ",# #F3 $	& $$"	-@ E"Lk "lhO_oYhF 
	KKM		--CG9:- _ 
	KKM		',';';PTV\~CGaSW%&
 H'; ($O_ 
	KKM			/MCGaSWqc#g. )("& h$!
#$( -( . 
	KKM				=(Tcet/uCGaSWqc#gs3wC@%"- $.0 ETJ(5	7
 #$ )( * 
	KKM				0
 CGaSWqc#gs3wC@Iu #U E t	
 s T )  D  C 5 !  >  E!" *)* )5C@%s?!$1@ M&( &N 
	KKM			Racr/sCGc#gc#gc#g &$7CT Dk& $ '( ( 
	KKM			/@CG9)7  	( 	 
	KKM		LQL`L`  uSCGaSWqc#gs3w7$* o12
Fm 	mL` 	MIO%'79I 
	KKM			sG_/UCGaSWqc#gs3w7 $'%$#"/1 )&$-	 El#$ )( * 
	KKM			/QCGc#g D*  
J U  K  b	 
 Z    (  U  "    c  B  T  D  J   e! " #3 4 5 @ G#( #H 
	KKM			/@CG9(  
	KKM			0@	0
 CGaSWqc#gs3wC@>51
"( " /( 0 
	KKM			RWY]_n/oCGaSWqc#gs3wC@*0"' !	
 #	%
  %0 5( 6 
	KKM			NNr+   c                    t        |      }|j                  t        j                  dddddd t	        j
                  d      dt        j                  i g dd
      	       |j                          |j                          |j                          |j                          |j                  g d
ddgddgddgddgddggg dd d      \  }}}}}|j                          |j                          |j                          |j                          |j                  |gddgg||igd d       |j                          |j                          y )Nr   r   r   z$2fb0c945-b877-42ab-9417-bfe0f6b172afr<   FTr   r\   )r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  )NNNNNr  r   g     ?g     ?)r   r   ri   r   r  r4  r  r  r   r   r   r   rC   rE   ro   )r   rP   r  r  r  r  r  r  s           r,   test_update_nonerD    so   !&)E	(((+"%
  $yy?@** "$&
  $ 
	KKM		--,^, 01!>2"M20 8
 . BBB 
	KKM			4)+;<=r(	
   
	NNr+   c                    t        |       }|j                  t        j                  di dddddddd	d
dddddddddddddddddddddddd t	        j
                  d      dt        j                  i g dd
              |j                          |j                          |j                          |j                          |j                  g d!g d"g d#g d$g d%g d&g d'gd d d()      }d*}i }|D ]  }|||<   |d+z  } |j                          |j                          |j                          |j                          |j                  |d*   |d,   d-|d.   d/gg d0g d1g d2g d3g d4gd d d5)       |j                          |j                          |j                          |j                          t        s|j                          |j                          |j                          |j                          |j                          |j                  d6|d*   |d,   gg d7g d8g d9gd d d()       |j                          |j                          |j                          |j                          |j!                  |d:   |d+   |d.   |d,   |d   g;       |j                          |j                          |j                          |j                          |j                  d<d=d>d?|d+   gg d@g dAg dBg dCg dDgd d d5)      }dE}|D ]  }|||<   |d+z  } |j                          |j                          |j                          t        s|j                          y y )FNKR3cfUfmxsi3rr  bMMvvrqM4MKmp5CJB8Ai  rF  T37PNiVkn5KZfkpod3ND5soL_KA4zcZL9lRN9   Oc8G7ysXmE8lp4Hos_POQe8Unz1uJBI930U   teFtyMr  R0ZiZr  IOwir   r   r   r   z$284b6e99-b19e-49b2-96a4-a2a93a95447dr   r   r\   )255r  z3-r   Nk9yPvT)g333333?gffffff@r  )      @      @r<   )r2   r<   r   )   r      )g!@g      "@   )rY  rZ  ffffff@r  r   r   r2   r[  KWcDaHUVD6MxEiJr   PdlP1d6w)r2      r[  )r   r   	   )rb  r   r   )r   rb     )r2   r   r[  )rc   rf   re   rd   TpjiboLSuYWBJDbRW1zeNmC)r[  r\  r]  )r]  rb  r   )r2   r   r\  r<   r   oD3V84RtTDwlc9C8_evn)rb  g@g(\	@)gHzG?gQ@gp=
ף@)g#@g#@g?)gffffff#@r^  rY  )g333333@r^  gL#@r\  )r   r   ri   r   r  r4  r  float32r   r   r   r   rC   rF   r%   r   rD   )rP   r  rf   r   emb_list	embeddings         r,   test_add_delete_addrl    s   !&)E	((8%u T 	
 #D  %m " e t  T v ' !#  #!$  $yy?@** "$&7
  > 
	KKM		%%9 
 & J 	
AH		Q   
	KKM			 ! &y)Y	R
   
	KKM		!!#		KKM			-x{HQKH$i;	
   
	KKM			a[(1+x{HQK!M   
	KKM		%%$D"   
 & J 	
A		Q   
	KKM	!!# r+   c                 p   t        |        | j                  d      }|j                  dgdgg       |j                         dk(  sJ |j                  dgdgg       |j                         dk(  sJ |j	                         }|d   dgk(  sJ |j                  dg       |j                         d	k(  sJ y )
Nfoor^   ar*  rc   rf   r2   rc   r   r   )r$   rg   r}   r   getr   )rP   rK   resultss      r,   test_multi_addrt  C  s    	&M###/DHH#SE7H+::<1 	HH#SE7H+::<1hhjG5>cU"""KKSEK::<1r+   c                    t        |        | j                  d      }t        j                  t        j
                        5  |j                  ddgdgdgg       d d d        t        j                  t        j
                        5  |j                  ddgdgdgg       d d d        y # 1 sw Y   OxY w# 1 sw Y   y xY w)Nrn  ro  rp  r*  g?rq  )r$   rg   pytestraiseserrorsDuplicateIDErrorr}   r   rP   rK   s     r,   test_dup_addr{  V  s    	&M###/D	v..	/c3ZcUSEN; 
0	v..	/c
u~> 
0	/ 
0	/	/	/s   B)B5)B25B>c           	         t        |        | j                  d      }g d}t        j                  j	                  dd      }t        j                  j	                  dd      }|j                  t        j                  j                  ||f      j                         |      }|D ]2  }||   }|J t        |D cg c]  }t        |      dk(   c}      r2J  y c c}w )	Nrn  ro  )re   rd   rf   	distancesr2   i  d   )query_embeddingsincluder   )	r$   rg   r  randomrandintquerytolistallrw   )	rP   rK   fieldsr  r  rs  r   field_resultsresults	            r,   test_query_without_addr  _  s    	&M###/DKF
		!T"A
		!S!Ajj))1a&188:F  G (((=A=CK1$=ABBB  Bs   9C
c                    t        |        | j                  d      }|j                  dgg d      }t        |d         dk(  sJ t        |d         dk(  sJ t        |d	         dk(  sJ t        |d
         dk(  sJ y )Nrn  ro  rp  )re   rd   rf   )rc   r  rc   r   rd   re   rf   )r$   rg   rr  rw   )rP   rK   r  s      r,   test_get_non_existentr  n  s    	&M###/DXX3%)QXRFve}"""vk"#q(((vk"#q(((vl#$)))r+   z9We don't properly escape SQL internally, causing problems)reasonc                     t        |        d}| j                  d      }|j                  |gdgg       |j                         dk(  sJ |j	                  |g       |j                         dk(  sJ y )	Nrn  ro  r*  rq  r2   r   r   )r$   rg   r}   r   r   )rP   r   rK   s      r,   test_escape_chars_in_idsr  y  so    	&M	B###/DHH"C5'H*::<1KKRDK::<1r+   c                     t        |        | j                  d      }t        j                  t              5  |j                          d d d        y # 1 sw Y   y xY w)Nrn  ro  )r$   rg   rv  rw  
ValueErrorr   rz  s     r,   test_delete_empty_failsr    s=    	&M###/D	z	" 
#	"	"s   AAkwargsrc   rn  wherebarwhere_documentz	$contains)rc   r  )rc   r  )rc   r  r  c                 b    t        |        | j                  d      } |j                  di | y )Nrn  ro  r*   )r$   rg   r   )rP   r  rK   s      r,   test_delete_successr    s/      
&M###/DDKK&r+   )supported_typesr  c           	         t        j                  dd|       }t        t        t        t        |                  }t        |D cg c]  }t        |t        j                        xrz |j                  t        j                  k(  xs[ |j                  t        j                  k(  xs< |j                  t        j                  k(  xs |j                  t        j                  k(   c}      sJ y c c}w Nr   )ri   create_embeddingsr   r	   r   r   r  
isinstancer  ndarrayr:   ri  float64int32int64r  embdsvalidated_embeddingsr8   s       r,   9test_autocasting_validate_embeddings_for_compatible_typesr    s     ((RAE. '	
  .		
 . ubjj) rzz) +;;"**,+;;"((*+ ;;"((* .		
  		
   BC*c           	         t        j                  dd|       }t        t        t        t        |                  }t        |D cg c]  }t        |t        j                        xrz |j                  t        j                  k(  xs[ |j                  t        j                  k(  xs< |j                  t        j                  k(  xs |j                  t        j                  k(   c}      sJ y c c}w r  )ri   create_embeddings_ndarrayr   r	   r   r   r  r  r  r  r:   ri  r  r  r  r  s       r,   1test_autocasting_validate_embeddings_with_ndarrayr    s     00RIE.Z-e45  .		
 . ubjj) rzz) +;;"**,+;;"((*+ ;;"((* .		
  		
r  )unsupported_typesr  c           	         t        j                  dd|       }t        j                  t              5 }t        t        t        t        |                   d d d        dt        j                        v sJ y # 1 sw Y   #xY w)Nr   zsExpected embeddings to be a list of floats or ints, a list of lists, a numpy array, or a list of numpy arrays, got )ri   r  rv  rw  r  r   r	   r   r   r   r8   )r  r  r?  s      r,   7test_autocasting_validate_embeddings_incompatible_typesr    sj     ((R1BCE	z	"aD-A%-HIJ 
# 	~qww<			 
#	"s   #A66A?c                      t        j                  g       g} t        j                  t              5 }t        |        d d d        dt              v sJ y # 1 sw Y   xY w)NzExpected each embedding in the embeddings to be a 1-dimensional numpy array with at least 1 int/float value. Got a 1-dimensional numpy array with no values at pos)r  arrayrv  rw  r  r   r   )r  r?  s     r,   test_0dim_embedding_validationr    sQ    "E	z	"aE" 
# 	mq6		 
#	"s   AAc           	      >   t        |        | j                  d      }t        ddd      D ]8  }|j                  t        ||dz         D cg c]  }t	        |       c}       : t
        s-t        | |j                  t        | |j                        d       y y c c}w )Nnoopro  r     r~  r   r   )	r$   rg   ranger   r   r%   r&   r^   r'   )rP   rK   batchr   s       r,   test_no_op_compactionr    s    	&M###0Dq$$ueck)BC)BAQ)BCD %!&$))5KFTXT]T]5^`cd  Ds   
B
c           
         t        |        d}d}| j                  d      }t        d||      D ]b  }t        |||z         D cg c]  }| }}|D cg c]  }t        |       }}|j	                  ||D cg c]  }d|z  d|z  dz   g c}       d t
        s,t        | |j                  t        | |j                        d	       t        d||      D ]H  }t        |||z         D cg c]  }| }}|D cg c]  }t        |       }}|j                  |
       J t
        s,t        | |j                  t        | |j                        d	       t        |j                         d         dk(  sJ y c c}w c c}w c c}w c c}w c c}w )Nr  r~  add_then_purgero  r   r<   r2   rq  r   r   rc   )r$   rg   r  r   r}   r%   r&   r^   r'   r   rw   rr  )rP   record_countbatch_countrK   r  r   record_id_vals
record_idss           r,   test_add_then_purger    s   	&MLK##)9#:D q,4%*5%+2E%FG%F!%FG&45nc!fn
5Z,XAa!eQUQY-?,XY 5 !&$))5KFTXT]T]5^`cd q,4%*5%+2E%FG%F!%FG&45nc!fn
5
# 5 !&$))5KFTXT]T]5^`cd txxz% !Q&&& H5,X H5s   	E2E76E<'	F6Fr   )mhypothesis.statefulrU   hypothesis.strategiesr   rv  r   ri   r   r   r   r   typingr   r   r	   r
   r   r   r   dataclassesr   chromadb.api.typesr   r   r   r   r   r   chromadb.configr   chromadb.errorsrx  chromadb.apir   chromadb.api.models.Collectionr   !chromadb.test.property.strategiestestpropertyr   r   r   r   r   r   r   r   r    r!   collectionsr"   !chromadb.test.property.invariantsru   chromadb.test.conftestr#   r$   r%   numpyr  r  -chromadb.test.utils.wait_for_version_increaser&   r'   r.   r   r   r   r4   r9   sharedsampled_fromfloat_typesr;   SearchStrategyr  ri  r  integersr@   rB   r   rM   r   LogCaptureFixturer   r  rB  rD  rl  rt  r{  r  r  markxfailr  r  parametrizer  r  r  r   r  r  r   r  r  r  r  r*   r+   r,   <module>r     sN         " 3 3 A A A !  #   " 5 6 6   $ 6 6 P P   !,I 6CH 6s t 
! BIIobooj4457C ""	"**bjj"**
,- D /8biiBKK!t,+/ R&&s+ 
 , , , 		0*00$GVTy/ 5 y/x{/5 {/|&":": I RV 29 2 2j}9 } }@3V55 3y 3T 3l~$	 ~$d ~$B9  &? ?t ?C9 C C*) * * UVY 4  WI $  		5%.!	K/05%.1K+?@7U^*E2	
	 3 4  r

BHHbhhU'STU#Y	 V0 r

BHHbhhU'STU#Y	 V* #t56
Cy
	
 7
e) e e'	 'd 'r+   