
    _j*E                        d Z ddlZddlZ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 ddlmZmZ dd	lmZmZmZmZ  e            gZd
eddfdZd
eddfdZd
eddfdZd
eddfdZd
eddfdZd
eddfdZd
eddfdZd
eddfdZdS )z@
Integration test for the Collection statistics wrapper methods
    N)Any)Client)SparseVector)System)skip_if_not_cluster)get_collection_versionwait_for_version_increase)attach_statistics_functiondetach_statistics_functionget_statisticsget_statistics_fn_namebasic_http_clientreturnc           
         t          j        |           }|                                 |                    dddi          }t	          |d          \  }}|J |du sJ |j        dk    sJ |j        dk    sJ t          ||j                  }|	                    g d	g d
ddddddddddddg           t          ||j        |           t          j        d           t          |d          }t          d           t          t          j        |d                     d|v sJ d|v sJ |d         d         dk    sJ d|d         v sJ d|d         d         v sJ d|d         d         v sJ |d         d         d         d         dk    sJ |d         d         d         d         dk    sJ d|d         v sJ d|d         d         v sJ d|d         d         v sJ |d         d         d         d         dk    sJ |d         d         d         d         dk    sJ d|d         v sJ d |d         d         v sJ d!|d         d         v sJ |d         d         d          d         dk    sJ |d         d         d!         d         dk    sJ |                    t%          |                    }|j        dk    sJ t'          |d"          }|du sJ |                    d          }	|	J dS )#z1Test the statistics wrapper methods on Collectiontest_collectiondescriptionzTest collection for statistics)namemetadatatest_collection_statisticsNT
statisticsdoc1doc2doc3ztest document 1ztest document 2ztest document 3A
   categoryscoreactiveBF   ids	documents	metadatas<   z
Statistics output:   indentsummarytotal_count   r   count   r    1020r!   truefalsedelete_stats_collection)ClientCreatorfrom_systemresetget_or_create_collectionr
   function_nameoutput_collectionr   r   addr	   timesleepr   printjsondumpsget_attached_functionr   r   get_collection)
r   client
collectionattached_fncreatedinitial_versionstatsstats_fnsuccessstats_collections
             n/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/chromadb/test/distributed/test_statistics_wrapper.pytest_statistics_wrapperrO      s   &'899F
LLNNN 00!AB 1  J 60 K """d????$4444(,HHHHH,VZ_EEO NN$$$KKKrT::rU;;rT::
     fjoGGGJrNNN :'CDDE	
 !!!	$*U1
%
%
%&&& 5     M*a//// |,,,,,%%j11111%%j11111z*3/8A====z*3/8A==== eL)))))5&w/////5&w/////w'-g6!;;;;w'-g6!;;;; u\*****U<(22222eL)(33333x(09Q>>>>x(1':a???? //0Fz0R0RSSH!\1111 )USSSGd???? ,,-IJJ'''''    c           
          t          j        |           }|                                 |                    d          }t	          ||j                  }|                    g dg dddddd	dd
dddddg           t          ||j        |           t	          ||j                  }t          |d          \  }}|du sJ |j	        dk    sJ |j
        dk    sJ t          ||j        |           t          |d          }|J d|v sJ d|v sJ |d         d         dk    sJ d|d         v sJ d|d         d         v sJ d	|d         d         v sJ |d         d         d         d         dk    sJ |d         d         d	         d         dk    sJ d|d         v sJ d|d         d         v sJ d|d         d         v sJ |d         d         d         d         dk    sJ |d         d         d         d         dk    sJ d|d         v sJ d|d         d         v sJ d|d         d         v sJ |d         d         d         d         dk    sJ |d         d         d         d         dk    sJ t          |d          }|du sJ dS )zTest backfill statisticsmy_collectionr   r   r   r   r   Tr   r"   Fr#   r$   my_collection_statisticsr   Nr,   r-   r.   r   r/   r)   r0   r    r1   r2   r!   r3   r4   r5   )r7   r8   r9   create_collectionr   r   r=   r	   r
   r;   r<   r   r   )r   rE   rF   rI   rG   rH   rJ   rL   s           rN   test_backfill_statisticsrV   p   s{   &'899F
LLNNN)))??J,VZ_EEO NN$$$KKKrT::rU;;rT::
     fjoGGG,VZ_EEO 6. K d????$4444(,FFFFF fjoGGG:'ABBE5     M*a//// |,,,,,%%j11111%%j11111z*3/8A====z*3/8A==== eL)))))5&w/////5&w/////w'-g6!;;;;w'-g6!;;;; u\*****U<(22222eL)(33333x(09Q>>>>x(1':a???? )TRRRGd??????rP   c                    t          j        |           }|                                 |                    d          }t	          |d          \  }}|du sJ |j        dk    sJ t          ||j                  }|                    dgdgdd	ig
           t          ||j        |           t          |d          }d|v sJ d|d         v sJ t          |d           dS )z2Test statistics with custom output collection namerR   rS   my_custom_stats)stats_collection_nameTid1r   keyvaluer$   r   r5   N)r7   r8   r9   rU   r
   r<   r   r   r=   r	   r   r   )r   rE   rF   rG   rH   rI   rJ   s          rN   0test_statistics_wrapper_custom_output_collectionr]      s(   &'899F
LLNNN)))??J 6*;  K d????(,=====,VZ_EEO NNG(7#$     fjoGGG :'899E5    E,''''' z4HHHHHHrP   c           
      V   t          j        |           }|                                 |                    d          }t	          |d          \  }}|du sJ t          ||j                  }|                    g dg ddddd	d
ddd	dddd	g           t          ||j        |           t          j
        d           t          |d          }d|d         v sJ d|d         v sJ d|d         v sJ t          |ddg          }d|d         v sJ d|d         vsJ d|d         vsJ |d         d         d         d         dk    sJ |d         d         d
         d         dk    sJ d|v sJ |d         d         dk    sJ t          |ddg          }d|d         v sJ d|d         vsJ d|d         vsJ |d         d         d         d         dk    sJ |d         d         d         d         dk    sJ d|v sJ |d         d         dk    sJ t          |d           dS )z-Test get_statistics with key filter parameterkey_filter_testrS   key_filter_test_statisticsTr   r   r   r   r   r"   Fr#   r$   r(   r   r   r    r!   keysr/   r)   r0   r,   r-   r.   r1   r2   r5   N)r7   r8   r9   rU   r
   r   r   r=   r	   r>   r?   r   r   )	r   rE   rF   _rH   rI   	all_statscategory_statsscore_statss	            rN   "test_statistics_wrapper_key_filterrg      s   &'899F
LLNNN))/@)AAJ ,J8TUUJAwd????,VZ_EEO NN$$$KKKrT::rU;;rT::
     fjoGGGJrNNN z+GHHI<00000i-----y..... $0
|  N 55555.66666>,77777,'
3C8AQFFFF,'
3C8AQFFFF&&&&)$]3q8888 !0y  K k,/////[66666;|44444|$W-d3G<AAAA|$W-d3G<AAAA####y!-0A5555 z4HHHHHHrP   c                    t          j        |           }|                                 |                    d          }t	          |d           d t          d          D             }t          j        t                    5 }t          |d|           ddd           n# 1 swxY w Y   dt          |j                  v sJ d	t          |j                  v sJ t          |d
           dS )zNTest that get_statistics raises ValueError when more than 30 keys are providedtoo_many_keys_testrS   too_many_keys_test_statisticsc                     g | ]}d | S )key_ .0is     rN   
<listcomp>zDtest_statistics_wrapper_key_filter_too_many_keys.<locals>.<listcomp>!  s    333AZAZZ333rP      ra   NzToo many keys provided: 31zMaximum allowed is 30Tr5   )r7   r8   r9   rU   r
   rangepytestraises
ValueErrorr   strr\   r   )r   rE   rF   too_many_keysexc_infos        rN   0test_statistics_wrapper_key_filter_too_many_keysrz     sB   &'899F
LLNNN))/C)DDJ z+JKKK 43r333M 
z	"	" Xhz#BWWWWX X X X X X X X X X X X X X X (3x~+>+>>>>>"c(.&9&99999 z4HHHHHHs   B  B$'B$c                    t          j        |           }|                                 |                    d          }t	          |d          \  }}|du sJ t          ||j                  }|                    ddgddgd	d
id	d
ig           t          ||j        |           t          ||j                  }t          |d          }|d         d	         d
         d         dk    sJ |d         d         dk    sJ |                    ddgddgd	did	d
ig           t          ||j        |           t          j        d           t          |d          }|d         d	         d
         d         dk    sJ |d         d	         d         d         dk    sJ |d         d         dk    sJ t          |d           dS )z.Test that statistics are updated incrementallyincremental_testrS   incremental_test_statisticsTrZ   id2r   r   r   r   r$   r   r/   r)   r,   r-   id3id4r   doc4r"   F   r.   r0      r5   N)r7   r8   r9   rU   r
   r   r   r=   r	   r   r>   r?   r   )r   rE   rF   rc   rH   rI   next_versionrJ   s           rN   +test_statistics_wrapper_incremental_updatesr   /  s   &'899F
LLNNN))/A)BBJ+J8UVVJAwd????,VZ_EEO NNEN6"$z3&78     fjoGGG)&*/BBL :'DEEEz*3/8A====M*a//// NNEN6"$z3&78     fjo|DDD 	JrNNN :'DEEEz*3/8A====z*3/8A====M*a////z4HHHHHHrP   c           	      v   t          j        |           }|                                 |                    d          }t	          g dg dg d          }t	          ddgd	d
gddg          }t	          ddgddgddg          }|                    g dg dd|dd|dd|dg           t          |d          \  }}|du sJ t          ||j                  }t          ||j        |           t          |d          }	t          d           t          t          j        |	d                     d|	v sJ d|	v sJ |	d         d          d!k    sJ d"|	d         v sJ d|	d         d"         v sJ d|	d         d"         v sJ |	d         d"         d         d#         dk    sJ |	d         d"         d         d#         d$k    sJ d%|	d         v sJ d|	d         d%         v s
J d&            d|	d         d%         v s
J d'            d|	d         d%         v s
J d(            d|	d         d%         v s
J d)            |	d         d%         d         d#         dk    sJ |	d         d%         d         d#         dk    sJ |	d         d%         d         d#         dk    sJ |	d         d%         d         d#         d$k    sJ d*S )+z7Test statistics with sparse vector that includes labelssparse_vector_test1rS   )d      ,  )g      ?       @      @)applebananacherry)indicesvalueslabelsr   i  g      ?g      @r   dater   r   r   r   r   r   )rZ   r~   r   r   r   )r   vecr"   r$   sparse_vector_test1_statisticsTz!
Sparse vector statistics output:r)   r*   r   r,   r-   r.   r   r/   r0   r   z$Should use label 'apple' not hash IDz%Should use label 'banana' not hash IDz%Should use label 'cherry' not hash IDz#Should use label 'date' not hash IDN)r7   r8   r9   rU   r   r=   r
   r   r   r	   r   r@   rA   rB   )
r   rE   rF   sparse_vec1sparse_vec2sparse_vec3rc   rH   rI   rJ   s
             rN   test_sparse_vector_statisticsr   ^  s   &'899F
LLNNN))/D)EEJ ,,,  K
 c
C:w6G  K c
C:x6J  K
 NN!!!***[11[11[11
     ,4 JAw d????,VZ_EEOfjoGGG :'GHHE	
.///	$*U1
%
%
%&&&5    M*a//// |,,,,,%%j11111%%j11111z*3/8A====z*3/8A==== E,'''''eL)%00002X000E,'..... 	/.. 	E,'..... 	/..U<(////1V/// u%g.w71<<<<u%h/8A====u%h/8A====u%f-g6!;;;;;;rP   c           	      j   t          j        |           }|                                 |                    d          }d}d}d t	          |          D             }d t	          |          D             }g }t	          |          D ]9}i }	t	          |          D ]}
d|
 d| |	d	|
 <   |                    |	           :d
}t          ||j                  }t	          d||          D ];}|                    ||||z            ||||z            ||||z                       <t          ||j        |           t          ||j                  }t          |d          \  }}|du sJ t          ||j        |           t          |d          }d|v sJ t	          |          D ]j}
d	|
 }||d         v sJ |d         |         }t          |          |k    sJ t	          |          D ]$}d|
 d| }||v sJ ||         d         dk    sJ %k|d         d         |k    sJ t          |d           dS )z.Test statistics with high cardinality metadatahigh_cardinality_testrS   i  r   c                     g | ]}d | S )idrm   rn   s     rN   rq   z4test_statistics_high_cardinality.<locals>.<listcomp>  s    
-
-
-888
-
-
-rP   c                     g | ]}d | S )docrm   rn   s     rN   rq   z4test_statistics_high_cardinality.<locals>.<listcomp>  s    444qq444rP   value_rc   field_r   r   r$    high_cardinality_test_statisticsTr   r/   r0   r,   r-   r5   N)r7   r8   r9   rU   rs   appendr   r   r=   r	   r
   r   lenr   )r   rE   rF   num_docs
num_fieldsr%   r&   r'   rp   metaj
batch_sizerI   rc   rH   rJ   	field_keyfield_statsr\   s                      rN    test_statistics_high_cardinalityr     s   &'899F
LLNNN))/F)GGJ HJ
-
-U8__
-
-
-C44E(OO444I&(I8__  !z"" 	2 	2A!1!!1!1a!1!1D! J,VZ_EEO1h
++ 
 
AJ&'A
N 23A
N 23 	 	
 	
 	
 	
 fjoGGG,VZ_EEO ,6 JAw d???? fjoGGG :'IJJE5     : 4 4 QLL	E,/////L))4;8++++ x 	4 	4A$Q$$$$EK''''u%g.!33333	4 M*h6666z4HHHHHHrP   ) __doc__rA   r>   typingr   rt   chromadb.api.clientr   r7   chromadb.base_typesr   chromadb.configr   chromadb.test.conftestr   -chromadb.test.utils.wait_for_version_increaser   r	   chromadb.utils.statisticsr
   r   r   r   
pytestmarkrO   rV   r]   rg   rz   r   r   r   rm   rP   rN   <module>r      sY             7 7 7 7 7 7 , , , , , , " " " " " " 6 6 6 6 6 6                   "!##$
P(v P($ P( P( P( P(fB B4 B B B BJI ISW I I I ID<I& <IT <I <I <I <I~I ISW I I I I2,I6 ,Id ,I ,I ,I ,I^F<V F< F< F< F< F<RBI BI4 BI BI BI BI BI BIrP   