
    ug2                     j   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l2Z2d dl3m4Z4 d dl5m6Z7 d dl8m9Z9m:Z:m;Z; ddgZ< e0jz                  d      Z>g dZ?dee@   fdZAde	e@e
f   de	e@e
f   fdZBdej                  dej                  de4ddfdZEdej                  dej                  de4ddfdZFdeEfdeFfgZGeee@eej                  ej                  e4gdf   f      eHd <   d!e@dej                  dej                  de4ddf
d"ZId#e
d!e@defd$ZJd%ee@   deee@e4f      fd&ZK eA       ZL ej                         d'z   ZN ej                  d# eKeL      (      deee@e4f   ddf   fd)       ZP G d* d+ee         ZQd!e@de4d,ej                  d-ej                  d.eddfd/ZR ej                   ej                  d0d0d1d1 ej                         2      d34      ZVej                  ej                     eHd5<    eeV ej                  eV      6       ed7      d8ee@e4f   d,ej                  d-ej                  ddfd9              ZYy):    )
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numpy
tokenizersreturnc                  b   d} t        j                  t        j                  t        j                  |                   }t        |d   j                               }|D cg c]  }t        j                  |      s| }}|j                  t        j                         t        |d   gz   S c c}w )zFReturns the pinned minimum version and the latest version of chromadb.z#https://pypi.org/pypi/chromadb/jsonreleaseskey)jsonloadr   urlopenRequestlistkeys
version_rematchsortpackaging_versionVersionBASELINE_VERSIONS)urldataversionsvs       f/var/www/openai/venv/lib/python3.12/site-packages/chromadb/test/property/test_cross_version_persist.pyr5   r5   -   s    
/C99W__W__S%9:;DD$))+,H#;8az'7'7':8H;MM'//M0~-- <s   B,9B,metadatac                     | j                  d | j                         D               | j                  d | j                         D               | S )Nc              3   4   K   | ]  \  }}|d u s|df  yw)T   N .0kr6   s      r7   	<genexpr>z_bool_to_int.<locals>.<genexpr>9   s!     E'7tq!19QF'7   	c              3   4   K   | ]  \  }}|d u s|df  yw)Fr   Nr<   r=   s      r7   r@   z_bool_to_int.<locals>.<genexpr>:   s!     F'7tq!1:QF'7rA   )updateitems)r8   s    r7   _bool_to_intrE   8   s9    OOEx~~'7EEOOFx~~'7FFO    
collection
embeddingsr   c                    | j                   }|t        |       |d   bt        |d   t              r*|d   D ]!  }|t        |t              st        |       # y t        |d   t              r|d   }t        |       y y y )N	metadatas)r8   rE   
isinstancer+   dict)rG   rH   r   collection_metadatar8   s        r7   _patch_boolean_metadatarN   >   s     %--&()+*j-t4&{3'Jx,F * 4 
;/6!+.H" 7 +rF   c                     d|_         y )Nz"chromadb.telemetry.posthog.Posthog)chroma_telemetry_impl)rG   rH   r   s      r7   _patch_telemetry_clientrQ   S   s     &JH"rF   z0.4.30.4.14version_patchesr   c                     t         D ];  \  }}t        j                  |       t        j                  |      k  s2 ||||       = y)zwOverride aspects of the collection and embeddings, before testing, to account for
    breaking changes in old versions.N)rS   r0   r1   )r   rG   rH   r   patch_versionpatchs         r7   patch_for_versionrW   e   sE     !0u$$W-1B1J1J2
 
 *j(3	 !0rF   modulec                     t        j                  |      t        j                  d      k  r| j                  j                  S | j                  j                  S )NrR   )r0   r1   apiAPI	ServerAPI)rX   r   s     r7   api_import_for_versionr]   u   s?      )->-F-Fx-PPzz~~::rF   r5   c                 |    | D cg c],  }|t        dddddddt        j                         dz         f. c}S c c}w )Nzchromadb.api.segment.SegmentAPIz chromadb.db.impl.sqlite.SqliteDBz7chromadb.segment.impl.manager.local.LocalSegmentManagerTz/persistence_test_chromadb)chroma_api_implchroma_sysdb_implchroma_producer_implchroma_consumer_implchroma_segment_manager_implallow_resetis_persistentpersist_directory)r   tempfile
gettempdir)r5   r   s     r7   configurationsri   {   sa        G  A"D%G%G,e ""*"5"5"7:V"V		
    s   19z#/persistence_test_chromadb_versions)scopeparamsc              #     K   | j                   }|d   }t        |i        | t        |      }t        j                  |       |d   j
                  }t        j                  j                  |      rt        j                  |d       y y w)Nr   r;   T)ignore_errors)	paramr   r   shutilrmtreerf   ospathexists)r   configurationr   rr   	data_paths        r7   version_settingsrv      sr     MMMAGGR 
&w/D
MM$a 22I	ww~~i it4 !s   B	Bc                       e Zd ZdedefdZy)not_implemented_efinputr!   c                     J d       )Nz'Embedding function should not be calledr<   )selfry   s     r7   __call__znot_implemented_ef.__call__   s    ???urF   N)__name__
__module____qualname__r   r   r|   r<   rF   r7   rx   rx      s    @i @J @rF   rx   collection_strategyembeddings_strategyconnc                     	 t        | t              }|j                  j                  |      }|j	                  t        ||             }|j                          |j                          t        j                  |       t        j                  d      k\  r/|j                  j                  j                  j                  |      }|j                  |j                  |j                   t#                     } |j$                  di | t'        j(                  |      }	|j+                         t-        |	d   xs g       k(  sJ |j/                         }
|
d   }t1        |	d         D ci c]  \  }}||
 c}}t3        |fd      }||	d   k(  sJ |j	                  t4              j7                           |j8                  di | |j7                          y c c}}w # t:        $ r}|j=                  |       |d }~ww xY w)Nz0.5.4)namer8   embedding_functionrH   idsc                     |    S )Nr<   )idembedding_id_to_indexs    r7   <lambda>z9persist_generated_data_with_old_version.<locals>.<lambda>   s    7LR7PrF   r$   r<   )r   VERSIONED_MODULESr   Systeminstancer]   startresetr0   r1   rZ   clientr   from_systemcreate_collectionr   r8   rx   add
invariantswrap_allcountlenget	enumeratesortedr   stopupsert	Exceptionsend)r   r   r   r   r   
old_modulesystemrZ   collcheck_embeddingsresult
actual_idsir   er   s                  @r7   'persist_generated_data_with_old_versionr      s   ,&w0AB
""))(3oo4ZIJ		
 $$W-1B1J1J71SS..''..::6BC$$$))(1113	 % 
 	'&'
 &../BCzz|s#3L#A#GRHHHHE]
4=>Nu>U4V W4V51bQ4V WJ,PQ
-e4444
 	+,113*)* 	 !X  		!s+   E"G %G2A#G G 	G=%G88G=T
   )with_hnsw_paramshas_embeddingsmax_hnsw_sync_thresholdmax_hnsw_batch_sizewith_persistent_hnsw_paramsr   r$   collection_st)r   r   )deadlinerv   c                    | \  }}|d   i k(  rd |d<   |d   ;t        |d   t              r(|d   D cg c]  }|t        |      dkD  r|nd  c}|d<   t        ||||       d |_        i |_        t        j                  d      }t        j                         \  }}|j                  t        |||||f      }	|	j                          |	j                          |j                         r|j                         }
|
|	j                          t!        j"                  |      }|j                          t%        j&                  |      }|j)                  |j*                  t-                     }|j/                  t0              }t3        j4                  |      t3        j4                  d      k  r)|j                   j7                  d      j8                  du sJ |j;                  t=        t?        dd	      g             tA        ||j/                  tB                     |jE                  |jF                         tI        jJ                  ||gd	        |jL                  d
i | tI        jN                  ||       tI        jP                  ||       tI        jR                  ||       tI        jT                  ||       tI        jV                  ||       tI        jJ                  ||gd	       |jY                          y c c}w )NrJ   r   spawn)targetargs)r   r   z0.5.7automatically_purgeFTr<   )-rK   r+   r   rW   r   known_metadata_keysmultiprocessingget_contextPipeProcessr   r   joinpollrecvcloser   r   ClientCreatorr   get_collectionr   rx   r   r   r0   r1   get_parametervalue
set_configr   r   r   r   	purge_logr   r   log_size_below_maxr   r   metadatas_matchdocuments_match	ids_matchann_accuracyr   )rv   r   r   r   r   mctxconn1conn2pr   r   r   r   embeddings_queues                  r7   test_cycle_versionsr      s    )GX ;'2-+/K(;'3
K($9
 )5,
5 c!fqjAd25,
K(
 g24GR .2*.0+
 
%
%g
.C"'')LE56x!46I5Q 	 	A GGIFFHzz|JJLGGI ]]8$F
LLN&&v.F   %%-/ ! D
 x0   ),=,E,E-  ##112GHNNRWW	
W ,#$94@A	
 1&//.9 tww'!!&4&$7 DHH#"#T./t%89t%8923D"56!!&4&$7 KKM_,
s   K1)Zmultiprocessing.connectionr   rq   ro   rg   typingr   r   r   r   r   r	   r
   
hypothesisr   r   hypothesis.strategies
strategiesstpytestr'   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   r0   resysr   chromadb.configr   chromadb.api.clientr   r   !chromadb.test.utils.cross_versionr   r   r   r2   compiler-   r   strr5   rE   
Collection	RecordSetrN   rQ   rS   __annotations__rW   r]   ri   test_old_versionsrh   base_install_dirfixturerv   rx   r   sharedcollectionsbooleansr   SearchStrategy
recordsetsr   r<   rF   r7   <module>r      s   1 	   D D D & "     H G , S + C 6 6 6 6 2 	 
  $ 7  g& RZZ34
 8 .$s) .4S> d38n #%%#$$# # 
	#*J%%J$$J J 
	J %&&' 	#x..
0D0DhOQUUV
VW 44%%4 $$4 	4
 
4  3      T#Y 4c8m0D+E & J &8&&(+PP 
 h~6G'HI55h+?t+K!L 5 J5@*95 @
333 $..3 $--	3
 3 
3n ;D"))J "$/BKKM 	
;r  !6!67 
 %-
--m< 
4`CM*`#..` $--` 
	` 	
`rF   