
    Bvh:'                         d dl Z d dlmc mc mZ d dlmc mc mZ d dlZd dlmZ	 d dl
Z
d dlZd dlmZ d dlmZmZ d dlmZ d dlmZmZ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"  e	jF                   ejH                  d	      d
      Z% G d de      Z& e       dejN                  de jP                  jR                  ddfd       Z* e       dejN                  de jP                  jR                  ddfd       Z+y)    N)
Collection)resetskip_if_not_cluster)wait_for_version_increase)BundleRuleBasedStateMachinerule
initializemultipleconsumesrun_state_machine_as_testMultipleResults)	overrides)DictcastUnionTupleSetT)with_hnsw_paramssource)keyc            
       H    e Zd ZU  ed      Zeeeej                  f      e	d<    ed      Z
eeeej                  f      e	d<   ee   e	d<   dej                  j                  f fdZ eee      d	ej                  d
eeej                  f   fd       Zedd       Z e ee       ej.                         e
      deeej                  f   ded
eeeej                  f      fd       Z e ee
       ej4                  e      e      deeej                  f   dej6                  d
eeej                  f   fd       Z e ee
      e      deeej                  f   d
eeej                  f   fd       Z ee
      deeej                  f   d
dfd       Z xZS )ForkStateMachinechanging_collectionsupdated_collectionscollectionsforked_collectionscollection_namesclientc                 N    t         |           || _        t               | _        y N)super__init__r   setr   )selfr   	__class__s     J/RAG/venv/lib/python3.12/site-packages/chromadb/test/property/test_fork.pyr#   zForkStateMachine.__init__%   s     #    )
collectiontargetr)   returnc                     | j                   j                  |j                  |j                  |j                        }| j
                  j                  |j                         |t        j                  g g g g       fS )N)namemetadataembedding_function)ids	metadatas	documents
embeddings)	r   create_collectionr-   r.   r/   r   add
strategiesStateMachineRecordSet)r%   r)   r   s      r'   r
   zForkStateMachine.initialize*   ss     ..(()<< / 

 	!!&++.z77bB2
 
 	
r(   Nc                 .    t        | j                         y r!   )r   r   )r%   s    r'   teardownzForkStateMachine.teardown8   s    dkkr(   )r   new_namer*   r   r:   c                 ~   |\  }}|| j                   v r>t        j                  t              5  |j	                  |       d d d        t        |      S |j	                  |      }| j                   j                  |j                         t        ||t        j                  |      f      S # 1 sw Y   t        |      S xY wr!   )
r   pytestraises	Exceptionforkr   r5   r-   copydeepcopy)r%   r   r:   r)   
record_setr*   s         r'   r?   zForkStateMachine.fork<   s     "(
Jt,,,y)) *F##*!!&++.z)B CDD *F##s   B))B<)cursordeltar*   rC   rD   c           	         |\  }}t        j                  |      } |j                  di | t        |d         D ]  \  }}||d   v r|d   j	                  |      }|d   |d   |   |d   |<   n6|d   J |j
                  J |j                  |d   |   g      d   |d   |<   |d   et        t        t        t        t        t        t        f   f   |d   |         }	|	 |d   |   &|	j                  |d   |          n|d   |   |d   |<   |d   |d   |   |d   |<   |d   j                  |       |d   |d   j                  |d   |          nB|j
                  J |d   J |d   j                  |j                  |d   |   g      d          |d   |d   j                  |d   |          n|d   j                  d        |d   |d   j                  |d   |          |d   j                  d         ||fS )Nr0   r3   r2   r   r1    )
invariantswrap_allupsert	enumerateindex_embedding_functionr   r   strr   intfloatupdateappend)
r%   rC   rD   r)   record_set_statenormalized_deltaidxid
target_idxrecord_set_state_metadatas
             r'   rI   zForkStateMachine.upsertN   s    (.$
$;E;N;Nu;U
-,- !1%!89GC%e,,-e4::2>
#L1=AQ$BB$\2:> ,K8DDD%99EEE #66)+6s;<  %\2" $K0<04S%S%"889(5jA1- 1<+K8=I5<< 0 =c B EU'EE(5jA $K0<@P#AA$[1*= !'..r2#L1=$\299(6s; &99EEE+K8DDD$\299"66-k:3?@
 $K0<$[188(5c: %[188>#K0<$[188(5c: %[188>y :z +++r(   )rC   r*   c                     |\  }}t        |d         dz  }|dk(  r||fS |d   d | }|j                  |       |d   |d  |d<   |d   |d  |d<   |d   |d  |d<   |d   |d  |d<   ||fS )Nr0   
   r   r3   r1   r2   )lendelete)r%   rC   r)   rR   boundaryids_to_deletes         r'   r[   zForkStateMachine.delete   s     (.$
$'./25q=///(/	:-("25"9()"D)9,)G	)R&(8(Ehi(P%(8(Ehi(P%+++r(   )rC   c                    |\  }}t        |d         dk(  r|j                         dk(  sJ y t        t        j                  |      }t        j                  ||       t        j                  ||       t        j                  ||       y )Nr0   r   )	rZ   countr   r6   	RecordSetrG   embeddings_matchmetadatas_matchdocuments_match)r%   rC   r)   rR   rB   s        r'   verifyzForkStateMachine.verify   s|     (.$
$&'1,##%***j224DEJ''
J?&&z:>&&z:>r(   )r+   N) __name__
__module____qualname__r   r   r   r   r6   r7   __annotations__r   r   rM   chromadbapi	ClientAPIr#   r
   collection_str   r9   r	   r   collection_namer   r?   
recordsetsr`   rI   r[   rd   __classcell__)r&   s   @r'   r   r      s\    	%& j*:::; '
 	} j*:::;  #h&x||55 &
 =1DE
$//
	z:;;;	<
 F
   
+,+++-!
EJ
(H(HHIEUXE	z:+K+KKL	ME
E 
*+#j##M2"
E,j*"B"BBCE, ##E, 
z:;;;	<	E,
E,N 
*+",J
(H(HHI,	z:;;;	<,	, 
!
?J
(H(HHI
?	
?
?r(   r   caplogr   r+   c                 `    | j                  t        j                         t        fd       y )Nc                      t               S r!   )r   )r   s   r'   <lambda>ztest_fork.<locals>.<lambda>   s    &6v&>r(   )	set_levelloggingERRORr   )rp   r   s    `r'   	test_forkrw      s    
W]]#>?r(   c                 :   dd l }ddlm} ddlm} ddlm} | j                  t        j                         |j                          |j                  d      } ||      }|j                  d      } ||      }d}	|j                  d      }
t        t        |	      D cg c]  }d	| 	 c}      }|
j                  |t        |	      D cg c]  }||g c}
       |j!                   ||
j"                  j$                               |
j'                  d      }t        |j)                         d         |k(  sJ |j                  d      }
|j!                   ||
j"                  j$                               t        t        |	      D cg c]  }d	| 	 c}      }|
j                  |t        |	      D cg c]  }||g c}
       |
j'                  d      }t+        ||j,                  d       t        |j)                         d         |k(  sJ |j                  d      }
t        |	      D ]  }|
j                  d	| g||gg
        t+        ||
j,                  d       |j!                   ||
j"                  j$                               |
j                  d	|	 g|	|	gg
       |
j'                  d      }t        t        |	dz         D cg c]  }d	| 	 c}      }t        |j)                         d         |k(  sJ y c c}w c c}w c c}w c c}w c c}w )Nr   )SealLogRequest)LogServiceStub)	SysDBStubzlocalhost:50052zlocalhost:50051d   zlegacy-go-collection-0id_)r0   r3   )collection_idzfork-legacy-go-collection-0r0   zlegacy-go-collection-1zfork-legacy-go-collection-1zlegacy-go-collection-2zfork-legacy-go-collection-2   )grpcchromadb.proto.logservice_pb2ry   "chromadb.proto.logservice_pb2_grpcrz   #chromadb.proto.coordinator_pb2_grpcr{   rt   ru   rv   r   insecure_channelr4   sortedranger5   SealLogrU   hexr?   getr   r-   )rp   r   r   ry   rz   r{   channelgo_log_servicesysdb_serviceNUMBERr)   ir0   fork_collections                 r'   test_fork_with_log_migrationr      s    <A=
W]]#
LLN##$56G#G,N##$56Gg&MF))*BCJ
U6]3]Cs)]3
4CNNsf'F1A'FNG>
8I8IJK oo&CDO/%%'./3666))*BCJ>
8I8IJK
U6]3]Cs)]3
4CNNsf'F1A'FNG oo&CDOfo&:&:A>/%%'./3666))*BCJ6]c!I;QF8< fjooq9>
8I8IJKNN#fX'ff5E4FNG oo&CDO
U6A:%67%6Cs)%67
8C/%%'./3666- 4'F 4'F 8s   L	L	
	L5L
L),ri   !chromadb.test.property.invariantstestpropertyrG   !chromadb.test.property.strategiesr6   r@   hypothesis.strategieshystru   r<   chromadb.api.models.Collectionr   chromadb.test.conftestr   r   -chromadb.test.utils.wait_for_version_increaser   hypothesis.statefulr   r   r	   r
   r   r   r   r   r   typingr   r   r   r   r   sharedr   rl   r   LogCaptureFixturerj   rk   rw   r   rF   r(   r'   <module>r      s     6 6 6 6  $   5 = S	 	 	   0 02J22DIxX^?, ^?B @f.. @8N8N @SW @ @
 )7$$)7.6ll.D.D)7	)7 )7r(   