
    _j5                     >   U d dl mZ d dlZd dlZd dlZd dlmZ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Zd dl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 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)c m*c m,Z, d dl-m.Z/ d dl0Z0d dl1Z1d dl2m3Z3 d dl4m5Z6 d dl7m8Z8m9Z9m:Z: ddgZ; e0j<        d          Z=g dZ>dee?         fdZ@de	e?e
f         de	e?e
f         fdZAdejB        dejC        de3ddfdZDdejB        dejC        de3ddfdZEdeDfdeEfgZFeee?eejB        ejC        e3gdf         f                  eGd <   d!e?dejB        dejC        de3ddf
d"ZHd#e
d!e?defd$ZId%ee?         deee?e3f                  fd&ZJ e@            ZK ejL                    ZM ejN        d# eJeK          '          deee?e3f         ddf         fd(            ZO G d) d*ee                   ZPd!e?de3d+ejB        d,ejC        d-eddfd.ZQ ejR         ejS        d/d/d0d0 ejT                    1          d23          ZUejV        ejB                 eGd4<    eeU ejW        eUd56          7           ed8          d9ee?e3f         d+ejB        d,ejC        ddfd:                        ZXdS );    )
ConnectionN)	GeneratorListTupleDictAnyCallableType)givensettings)request)config)ConfigurationParameter$EmbeddingsQueueConfigurationInternal)	DocumentsEmbeddingFunction
Embeddings)SqliteDB),trigger_vector_segments_max_seq_id_migration)SegmentManager)LocalSegmentManager)version)Settings)Client)switch_to_versioninstall_versionget_path_to_version_installz0.4.1z0.5.3z^[0-9]+\.[0-9]+\.[0-9]+$)pydanticpydantic_settingsnumpy
tokenizersreturnc                  `   d} t          j        t          j        t          j        |                               }|d         t                                                    }d |D             }fd|D             }|                    t          j	                   t          |d         gz   S )zFReturns the pinned minimum version and the latest version of chromadb.z#https://pypi.org/pypi/chromadb/jsonreleasesc                 F    g | ]}t                               |          |S  )
version_rematch).0vs     n/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/chromadb/test/property/test_cross_version_persist.py
<listcomp>zversions.<locals>.<listcomp>3   s+    ;;;az'7'7':':;;;;    c           	      n    g | ]1}t          d                      |g           D                       /|2S )c              3   B   K   | ]}|                     d d          V  dS )yankedFN)get)r)   files     r+   	<genexpr>z&versions.<locals>.<listcomp>.<genexpr>7   s0      MM488He,,MMMMMMr-   )anyr1   )r)   r*   r$   s     r+   r,   zversions.<locals>.<listcomp>4   sT       MMa9L9LMMMMM	  r-   key)jsonloadr   urlopenRequestlistkeyssortpackaging_versionVersionBASELINE_VERSIONS)urldataversionsr$   s      @r+   rD   rD   ,   s    
/C9W_W_S%9%9::;;DJHHMMOO$$H;;8;;;H     H
 MM'/M000~--r-   metadatac                     |                      d |                                 D                        |                      d |                                 D                        | S )Nc              3   ,   K   | ]\  }}|d u 	|dfV  dS )T   Nr&   r)   kr*   s      r+   r3   z_bool_to_int.<locals>.<genexpr>>   s.      EEtq!199QF9999EEr-   c              3   ,   K   | ]\  }}|d u 	|dfV  dS )Fr   Nr&   rI   s      r+   r3   z_bool_to_int.<locals>.<genexpr>?   s.      FFtq!1::QF::::FFr-   )updateitems)rE   s    r+   _bool_to_intrN   =   s]    OOEEx~~'7'7EEEEEEOOFFx~~'7'7FFFFFFOr-   
collection
embeddingsr   c                 N   | j         }|t          |           |d         t          |d         t                    r3|d         D ](}|$t          |t                    rt          |           )d S t          |d         t                    r|d         }t          |           d S d S d S )N	metadatas)rE   rN   
isinstancer<   dict)rO   rP   r   collection_metadatarE   s        r+   _patch_boolean_metadatarV   C   s     %-&()))+*j-t44 	#&{3 + +'Jx,F,F' ***+ + 
;/66 	#!+.H""""" +*
	# 	#r-   c                     d|_         d S )Nz"chromadb.telemetry.posthog.Posthog)chroma_telemetry_impl)rO   rP   r   s      r+   _patch_telemetry_clientrY   X   s     &JH"""r-   z0.4.30.4.14version_patchesr   c                     t           D ]<\  }}t          j        |           t          j        |          k    r ||||           =dS )zwOverride aspects of the collection and embeddings, before testing, to account for
    breaking changes in old versions.N)r[   r?   r@   )r   rO   rP   r   patch_versionpatchs         r+   patch_for_versionr_   j   sd     !0 4 4u$W--1B1J2
 2
 
 
 E*j(333	4 4r-   modulec                     t          j        |          t          j        d          k    r| j        j        S | j        j        S )NrZ   )r?   r@   apiAPI	ServerAPI)r`   r   s     r+   api_import_for_versionre   z   s9     ))->-Fx-P-PPPz~:r-   rD   c                     d | D             S )Nc                     g | ]<}|t          d t          j        v rdndddddddt          j                              f=S )CHROMA_RUST_BINDINGS_TEST_ONLYz!chromadb.api.rust.RustBindingsAPIchromadb.api.segment.SegmentAPIz chromadb.db.impl.sqlite.SqliteDBz7chromadb.segment.impl.manager.local.LocalSegmentManagerT)chroma_api_implchroma_sysdb_implchroma_producer_implchroma_consumer_implchroma_segment_manager_implallow_resetis_persistentpersist_directory)r   osenvirontempfilemkdtemp)r)   r   s     r+   r,   z"configurations.<locals>.<listcomp>   sx          3rzAA !D C6"D%G%G,e ""*"2"4"4  	
  r-   r&   )rD   s    r+   configurationsrv      s%        !   r-   )scopeparamsc              #     K   | j         }|d         }t          |i            |V  t          |          }t          j        |           |d         j        }t          j                            |          rt          j        |d           d S d S )Nr   rH   T)ignore_errors)	paramr   r   shutilrmtreerq   rr   pathexists)r   configurationr   r~   	data_paths        r+   version_settingsr      s      MMAGGR   
&w//D
M$a 2I	w~~i   5it4444445 5r-   c                   2    e Zd ZdedefdZdededdfdZdS )not_implemented_efinputr"   c                     J d            )NFz'Embedding function should not be calledr&   )selfr   s     r+   __call__znot_implemented_ef.__call__   s    ?????r-   argskwargsNc                     d S Nr&   )r   r   r   s      r+   __init__znot_implemented_ef.__init__   s    r-   )__name__
__module____qualname__r   r   r   r   r   r&   r-   r+   r   r      se        @i @J @ @ @ @c S T      r-   r   collection_strategyembeddings_strategyconnc                    	 t          | t                    }dt          j        v r1t	          j        |           t	          j        d          k     rd|_        |j                            |          }|	                    t          ||                     }|                                 |                                 t	          j        |           t	          j        d          k    r$|j        j        j                            |          }|                    |j        |j        t)                                } |j        di | t-          j        |          }	|                                t3          |	d         pg           k    sJ |                                }
|
d         }d t7          |	d                   D             t9          |fd	
          }||	d         k    sJ |	                    t:                                                      |j        di | |                                 d S # t@          $ r}|!                    |           |d }~ww xY w)Nrh   z0.7.0ri   z0.5.4)namerE   embedding_functionrP   idsc                     i | ]\  }}||	S r&   r&   )r)   iids      r+   
<dictcomp>z;persist_generated_data_with_old_version.<locals>.<dictcomp>   s     W W W51bQ W W Wr-   c                     |          S r   r&   )r   embedding_id_to_indexs    r+   <lambda>z9persist_generated_data_with_old_version.<locals>.<lambda>   s    7LR7P r-   r5   r&   )"r   VERSIONED_MODULESrr   rs   r?   r@   rj   r   Systeminstancere   startresetrb   clientr   from_systemcreate_collectionr   rE   r   add
invariantswrap_allcountlenr1   	enumeratesortedr   stopupsert	Exceptionsend)r   r   r   r   r   
old_modulesystemrb   collcheck_embeddingsresult
actual_idser   s                @r+   'persist_generated_data_with_old_versionr      s[   1&w0ABB
+rz99>O>W?
 ?
%g..?/ ?/ (IH$"))(33oo4ZIIJJ		
 $W--1B1J71S1SSS.'.::6BBC$$$)(1133	 % 
 
 	''&'''
 &./BCCzz||s#3L#A#GRHHHHHHE]
 W WI>Nu>U4V4V W W WJ,P,P,P,PQQQ
-e44444
 	+,,11333**)*** 	   		!s   H/H4 4
I>IIT
   )with_hnsw_paramshas_embeddingsmax_hnsw_sync_thresholdmax_hnsw_batch_sizewith_persistent_hnsw_paramsr   r5   collection_st   )max_size)r   r   )deadliner   c                 x   | \  }}|d         i k    rd |d<   |d         0t          |d         t                    rd |d         D             |d<   t          ||||           d |_        i |_        t          j        d          }t          j                    \  }}|                    t          |||||f          }|
                                 |                                 |                                r|                                }	|	|                                 t          j        |          }
|

                                 t#          j        |
          }|                    |j        t+                                }|
                    t.                    }t1          j        |          t1          j        d          k     r#|j                            d          j        du sJ |                    t;          t=          dd	          g                     d
t>          j         v rtC          j"        ||           nBtG          ||
                    tH                               |%                    |j&                   tC          j'        |
|gd	            |j(        di | tC          j"        ||           tC          j)        ||           tC          j*        ||           tC          j+        ||           tC          j,        ||           tC          j'        |
|gd	           |
-                                 d S )NrR   c                 @    g | ]}|t          |          dk    r|nd S )Nr   )r   )r)   ms     r+   r,   z'test_cycle_versions.<locals>.<listcomp>  s>     ,
 ,
 ,
 c!ffqjjAAd,
 ,
 ,
r-   spawn)targetr   )r   r   z0.5.7automatically_purgeFTrh   r&   ).rS   r<   r_   r   known_metadata_keysmultiprocessingget_contextPipeProcessr   r   joinpollrecvcloser   r   ClientCreatorr   get_collectionr   r   r   r   r?   r@   get_parametervalue
set_configr   r   rr   rs   r   r   r   r   	purge_logr   log_size_below_maxr   metadatas_matchdocuments_match	ids_matchann_accuracyr   )r   r   r   r   r   ctxconn1conn2pr   r   r   r   embeddings_queues                 r+   test_cycle_versionsr      sX    )GX ;'2--+/K(;'3
K($9 93,
 ,
(5,
 ,
 ,
K(
 g24GRRR .2*.0+
 
%g
.
.C"'))LE56x!46I5Q 	 	 	A GGIIIFFHHHzz|| JJLLGGIII ]8$$F
LLNNN&v..F   %-// !  D
 x00  )),=,E- -   #112GHHNRWWWWW ,#$94@@A	
 	
   (2:55233334foon==	
 	
 	
 	""47+++!&4&$777 DH##"###T.///t%8999t%89992333D"5666!&4&$777 KKMMMMMr-   )Ymultiprocessing.connectionr   rr   r|   rt   typingr   r   r   r   r   r	   r
   
hypothesisr   r   hypothesis.strategies
strategiesstpytestr8   urllibr   chromadbr   chromadb.api.configurationr   r   chromadb.api.typesr   r   r   chromadb.db.impl.sqliter   chromadb.ingest.impl.utilsr   chromadb.segmentr   #chromadb.segment.impl.manager.localr   !chromadb.test.property.strategiestestproperty!chromadb.test.property.invariantsr   	packagingr   r?   rer   chromadb.configr   chromadb.api.clientr   r   !chromadb.test.utils.cross_versionr   r   r   rA   compiler'   r   strrD   rN   
Collection	RecordSetrV   rY   r[   __annotations__r_   re   rv   test_old_versionsru   base_install_dirfixturer   r   r   sharedcollectionsbooleansr   SearchStrategy
recordsetsr   r&   r-   r+   <module>r	     s5   1 1 1 1 1 1 1 				   D D D D D D D D D D D D D D D D D D & & & & & & & & " " " " " "                      H G G G G G G G G G , , , , , , S S S S S S + + + + + + C C C C C C 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 2 2 2 2 2 2 				     $ $ $ $ $ $ 7 7 7 7 7 7          g& RZ344
 MLL .$s) . . . ."4S> d38n    #%#$# # 
	# # # #*J%J$J J 
	J J J J %&&' 	#x.
0DhOQUUV
VW   44%4 $4 	4
 
4 4 4 4  3            T#Y 4c8m0D+E    * HJJ #8#%% 
 h~~6G'H'HIII55h+?t+K!L 5 5 5 JI5    *95   888 $.8 $-	8
 8 
8 8 8 8x ;D")J "$/BKMM   	
; 
; 
;r !67 
 
 
 %-
-mcJJJ   
4cCM*c#.c $-c 
	c c c 	 
c c cr-   