
    ei(                     l   d dl m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
mZ  e       deddfd	       Z e       deddfd
       Z e       deddfd       Z e       deddfd       Z e       deddfd       Z e       deddfd       Z e       deddfd       Z e       deddfd       Zy)    )sleepN)	ClientAPI)IndexingStatus)skip_if_not_cluster)get_collection_versionwait_for_version_increaseclientreturnc                    | j                          | j                  d      }|j                         }t        |t              sJ |j
                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ y)z(Test indexing status on empty collectiontest_collectionnamer         ?N)	resetcreate_collectionget_indexing_status
isinstancer   num_indexed_opsnum_unindexed_ops	total_opsop_indexing_progress)r	   
collectionstatuss      p/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/chromadb/test/api/test_indexing_status.py%test_indexing_status_empty_collectionr      s     LLN))/@)AJ++-Ffn---!!Q&&&##q(((q   &&#---    c           	      J   | j                          | j                  d      }t        d      D cg c]  }d| 	 }}t        d      D cg c](  }t        |      t        |dz         t        |dz         g* }}t	        | |j
                        }|j                  ||       |j                         }|j                  dk(  sJ |t	        | |j
                        k(  rt        |t              sJ |j                  dk(  sJ |j                  dk(  sJ |j                  d	k(  sJ t        | |j
                  |       t        d
       |j                         }t        |t              sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ yyc c}w c c}w )z,Test indexing status after adding embeddingsr   r   i,  id_      ids
embeddingsr           <   r   N)r   r   rangefloatr   r   addr   r   r   r   r   r   r   r   r   )r	   r   ir"   r#   initial_versionr   final_statuss           r   test_indexing_status_after_addr,      s    LLN))/@)AJ#Cj
)S9
)C
)BG*MQ58U1q5\5Q<8MJM,VZ__EONNszN2++-Fs"""0II&.111''3...%%*****c111!&*//?Kb	 "557,777++s222--22200C777 J *Ms   F-F c                 d   | j                          | j                  d      }t        | |j                        }|j	                  ddgg dg dg       |j                         }|j                  dk(  sJ |t        | |j                        k(  rgt        |t              sJ |j                  dk(  sJ |j                  d	k(  sJ |j                  d
k(  sJ t        | |j                  |       t        d       |j	                  ddgg dg dg       |j                         }|j                  dk(  sJ y)z,Test indexing status after upsert operationsr   r   id1id2r   g       @g      @g      @g      @g      @r!   r    r   r$   r%   id3)g?g @g@g      @g       @g      "@   N)r   r   r   r   upsertr   r   r   r   r   r   r   r   r   )r	   r   r*   r   s       r   !test_indexing_status_after_upsertr6   ;   s$    LLN))/@)AJ,VZ__EO5%.o5WX++-Fq   0II&.111''1,,,%%*****c111!&*//?Kb	5%.o5WX++-Fq   r   c                 |   | j                          | j                  d      }t        | |j                        }|j	                  g dg dg dg dg       |t        | |j                        k(  rw|j                         }t        |t              sJ |j                  dk(  sJ |j                  d	k(  sJ |j                  d
k(  sJ t        | |j                  |       t        d       |j                         }|j                  dk(  sJ |j                  ddg       |j                         }|j                  dk(  sJ y)z,Test indexing status after delete operationsr   r   )r.   r/   r2   r0   r1   r3   r!      r   r$   r%   r.   r/   )r"      N)r   r   r   r   r(   r   r   r   r   r   r   r   r   r   delete)r	   r   r*   r   initial_statusstatus_after_deletes         r   !test_indexing_status_after_deleter=   V   s2    LLN))/@)AJ,VZ__EONN!#_oF  
 0II//1&.111''1,,,%%*****c111!&*//?Kb	335N##q(((5%.) %88:((A---r   c                 \   | j                          | j                  d      }t        | |j                        }|j	                  dgg dg       |j                         }|t        | |j                        k(  rgt        |t              sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ t        | |j                  |       t        d	       |j                         }t        |j                  t              sJ t        |j                  t              sJ t        |j                  t              sJ t        |j                  t              sJ |j                  dk\  sJ |j                  dk\  sJ |j                  dk\  sJ d|j                  cxk  rd
k  sJ  J y)z5Test that indexing status returns correct field typesfield_types_collectionr   type_test_idr0   r!   r   r   r$   r%   r   N)r   r   r   r   r(   r   r   r   r   r   r   r   r   intr   r'   )r	   r   r*   r   r+   s        r    test_indexing_status_field_typesrB   v   s    LLN))/G)HJ,VZ__EONN'_4ENF++-F0II&.111''1,,,%%*****c111!&*//?Kb	113Ll22C888l44c:::l,,c222l77???''1,,,))Q...!!Q&&&,33:s:::::r   c           	         | j                          | j                  d      }t        | |j                         t	        d      D cg c]  }d| 	 }}t	        d      D cg c](  }t        |      t        |dz         t        |dz         g* }}|j                  ||       t	        dd      D cg c]  }d| 	 }}t	        dd      D cg c](  }t        |      t        |dz         t        |dz         g* }}|j                  ||       t        | |j                        }t        d	ddd
      t        dddd      t        dd	dd      g}d	}	|	dk  rW|j                         }
|
|v sJ t        d|
       |
j                  }	t        | |j                  |       t        d       |	dk  rVyyc c}w c c}w c c}w c c}w )zITest indexing status with 2000 records based on index version progressionbatch_test_collectionr   i  	batch_id_r   r    r!   i  r   r$   )r   r   r   r   g      ?r   zwitnessed status: r%   N)r   r   r   r   r&   r'   r(   r   r   printr   r   r   )r	   r   r)   ids_1embeddings_1ids_2embeddings_2current_versionallowed_statusesops_indexedr   s              r   &test_indexing_status_batch_progressionrN      s    LLN))/F)GJ6:??3 ',Dk2y_2E2DI$KPqU1XuQU|U1q5\:PLPNNuN6&+D$&78y_8E8DI$PTDUVqU1XuQU|U1q5\:VLVNNuN6,VZ__EO 	"!$		
 	 "!$		
 	 !$		
* K

//1))))"F+,,!&*//?Kb	 
A 3P 9Vs   F0!-F51F:-F?c                    | j                          | j                  d      }| j                  d       	 |j                          J d       # t        $ r}dt        |      j                         v sbdt        |      j                         v sBdt        |      j                         v s"dt        |      j                         v sJ Y d}~yY d}~yY d}~yY d}~yd}~ww xY w)	z/Test indexing status on non-existent collectiontemp_collectionr   z.Expected exception for non-existent collectionz	not foundzdoes not existzsoft deletedzcollection not foundN)r   r   delete_collectionr   	Exceptionstrlower)r	   r   es      r   test_indexing_status_not_foundrV      s     LLN))/@)AJ
./	
&&(FFFu 
3q6<<>)3q6<<>1Q/%Q7		
8 8 0 2 *
s   A 	CA.CCc                   	
 | j                          | j                  d      g 	t        j                         
d	
fd}dfd}t        j                  |      }t        j                  |      }|j                          |j                          |j                          t        d       
j                          |j                          t        	      dkD  sJ d	       	D cg c]
  }|d
kD  s	| }}t        |      dkD  sJ d       t        	      }t        |      dkD  s
J d|        t        dt        	       d       t        dt        |              t        dt        	      ddt        	      d       yc c}w )z;Test that progress values vary during concurrent operationsconcurrent_test_collectionr   Nc                      j                         sI	 j                         } j                  | j                         t	        d       j                         sHyy# t
        $ r Y yw xY w)z3Thread that continuously monitors indexing progressg?N)is_setr   appendr   r   rR   )r   r   progress_valuesstop_monitorings    r   progress_monitorzLtest_indexing_status_concurrent_progress_variation.<locals>.progress_monitor   s_    !((*#779&&v'B'BCc
	 "((*
  s   6A 	A('A(c            
          t        d      D ]I  } j                  d|  gt        |       t        | dz         t        | dz         gg       t        d       K y)z&Thread that adds records one at a time2   concurrent_id_r   r    r!   g?N)r&   r(   r'   r   )r)   r   s    r   record_adderzHtest_indexing_status_concurrent_progress_variation.<locals>.record_adder   s^    r 	ANN%aS)*"1XuQU|U1q5\BC   $K	r   )targetr   r   z!No progress values were collectedr$   z!All progress values remained at 0r   z5Expected variation in progress values, but only got: z
Collected z progress valueszUnique progress values: zProgress range: z.3fz - )r
   N)r   r   	threadingEventThreadstartjoinr   setlenrF   sortedminmax)r	   r^   rb   monitor_threadadder_threadpnon_zero_progressunique_progressr   r\   r]   s           @@@r   2test_indexing_status_concurrent_progress_variationrs      s    LLN))/K)LJOoo'O %%-=>N##<8L  
#J  !#H%HH# %4?qq3w?? !A%J'JJ% /*OOq Q	>>OPQ  
Js?+,,<
=>	$VO%<$=
>?	S1#6c#o:Ns9S
TU @s   *
F5F)timer   rd   chromadb.apir   chromadb.api.typesr   chromadb.test.conftestr   -chromadb.test.utils.wait_for_version_increaser   r   r   r,   r6   r=   rB   rN   rV   rs    r   r   <module>rz      sG     " - 6 .) . . . 89 8 8 8> !i !D ! !4 .i .D . .> ;Y ;4 ; ;@ .9 . . .b 
9 
 
 
& <Vy <VT <V <Vr   