
    3im                     N   S SK r S SKJrJrJrJr  S SKrS SKrS SK	J
r
JrJrJr  S SKJr  S SKJrJrJrJrJrJrJrJrJr  S SKrS SKJr  S SKJr  S SKJrJ r   S S	K!J"r#  S S
KJ$r$J%r%   " S S\
\   5      r& " S S\
\   5      r'\ " S S\
\   5      5       r(\ " S S\
\   5      5       r)S\SS4S jr*S\SS4S jr+S\SS4S jr,S\SS4S jr-S\SS4S jr.S\SS4S jr/SDS jr0S\SS4S jr1S\SS4S jr2S\SS4S jr3\ Rh                  Rk                  \\ S9SDS  j5       r6S\SS4S! jr7S\SS4S" jr8S\SS4S# jr9\ Rh                  Rk                  \\ S9S\SS4S$ j5       r:\ Rh                  Rk                  \\ S9S\SS4S% j5       r;SES& jr<\ Rh                  Rk                  \\ S9S\SS4S' j5       r=S\SS4S( jr>SES) jr?S\SS4S* jr@S\SS4S+ jrAS\SS4S, jrBS\SS4S- jrCS\SS4S. jrDS\SS4S/ jrES\SS4S0 jrFS\SS4S1 jrGS\SS4S2 jrHS\SS4S3 jrIS\SS4S4 jrJS\SS4S5 jrK\ " S6 S7\
\   5      5       rLS\SS4S8 jrMS\SS4S9 jrNS\SS4S: jrOS\SS4S; jrPS\SS4S< jrQS\SS4S= jrR " S> S?\%5      rS\ " S@ SA\
\   5      5       rTS\SS4SB jrUS\SS4SC jrVg)F    N)DictAnycastList)EmbeddingFunction
EmbeddingsSpace
Embeddable)	ClientAPI)	CreateCollectionConfigurationUpdateCollectionConfiguration'load_collection_configuration_from_jsonCreateHNSWConfigurationUpdateHNSWConfigurationCreateSpannConfigurationUpdateSpannConfigurationSpannConfigurationoverwrite_spann_configuration)register_embedding_function)ClientFactories)is_spann_disabled_modeskip_reason_spann_disabled)
Collection)Optional	TypedDictc                   0    \ rS rSrSS jrS\S\4S jrSrg)	LegacyEmbeddingFunction   returnNc                     g N selfs    t/home/james-whalen/.local/lib/python3.13/site-packages/chromadb/test/configurations/test_collection_configuration.py__init__ LegacyEmbeddingFunction.__init__            inputc                 j    [        [        [        R                  " SS//[        R                  S95      $ N      ?       @dtyper   r   nparrayfloat32r$   r*   s     r%   __call__ LegacyEmbeddingFunction.__call__#   $    J3*RZZ HIIr)   r"   r   N)	__name__
__module____qualname____firstlineno__r&   r
   r   r6   __static_attributes__r"   r)   r%   r   r      s    Jj JZ Jr)   r   c                   H    \ rS rSrS	S jrS\S\4S jr\S\	4S j5       r
Srg)
LegacyEmbeddingFunctionWithName'   r   Nc                     g r!   r"   r#   s    r%   r&   (LegacyEmbeddingFunctionWithName.__init__(   r(   r)   r*   c                 j    [        [        [        R                  " SS//[        R                  S95      $ r,   r1   r5   s     r%   r6   (LegacyEmbeddingFunctionWithName.__call__+   r8   r)   c                      g)N	legacy_efr"   r"   r)   r%   name$LegacyEmbeddingFunctionWithName.name.       r)   r"   r9   )r:   r;   r<   r=   r&   r
   r   r6   staticmethodstrrH   r>   r"   r)   r%   r@   r@   '   s8    Jj JZ J #  r)   r@   c                       \ rS rSrSS\4S jjrS\S\4S jr\	S\
4S j5       rS\\
\4   4S jr\	S	\\
\4   SS 4S
 j5       rS\4S jrSrg)CustomEmbeddingFunction3   dimc                     Xl         g r!   _dimr$   rP   s     r%   r&    CustomEmbeddingFunction.__init__5       	r)   r*   r   c                     [        [        [        R                  " S/U R                  -  /[        R
                  S95      $ Nr-   r/   r   r   r2   r3   rS   r4   r5   s     r%   r6    CustomEmbeddingFunction.__call__8   ,    J3%$))*;)<BJJ OPPr)   c                      g)N	custom_efr"   r"   r)   r%   rH   CustomEmbeddingFunction.name;   rJ   r)   c                     SU R                   0$ NrP   rR   r#   s    r%   
get_config"CustomEmbeddingFunction.get_config?       tyy!!r)   configc                     [        U S   S9$ NrP   rP   )rN   rd   s    r%   build_from_config)CustomEmbeddingFunction.build_from_configB   s    &6%=99r)   c                     gNl2r"   r#   s    r%   default_space%CustomEmbeddingFunction.default_spaceF       r)   rR   N   r:   r;   r<   r=   intr&   r
   r   r6   rK   rL   rH   r   r   ra   ri   r	   rn   r>   r"   r)   r%   rN   rN   3   s    C Qj QZ Q #  "DcN " :$sCx. :5N : :u r)   rN   c                       \ rS rSrSS\4S jjrS\S\4S jr\	S\
4S j5       rS\\
\4   4S jr\	S	\\
\4   SS 4S
 j5       rS\4S jrSrg)CustomEmbeddingFunction2J   rP   c                     Xl         g r!   rR   rT   s     r%   r&   !CustomEmbeddingFunction2.__init__L   rV   r)   r*   r   c                     [        [        [        R                  " S/U R                  -  /[        R
                  S95      $ )Nr.   r/   rY   r5   s     r%   r6   !CustomEmbeddingFunction2.__call__O   r[   r)   c                      g)N
custom_ef2r"   r"   r)   r%   rH   CustomEmbeddingFunction2.nameR   s    r)   c                     SU R                   0$ r`   rR   r#   s    r%   ra   #CustomEmbeddingFunction2.get_configV   rc   r)   rd   c                     [        U S   S9$ rf   )rv   rh   s    r%   ri   *CustomEmbeddingFunction2.build_from_configY   s    'F5M::r)   c                     grl   r"   r#   s    r%   rn   &CustomEmbeddingFunction2.default_space]   rp   r)   rR   N)   rs   r"   r)   r%   rv   rv   J   s    C Qj QZ Q #  "DcN " ;$sCx. ;5O ; ;u r)   rv   clientr   c                    U R                  5         U R                  S[        5       S9n[        UR                  R
                  5      nU(       a,  [        U[        5      (       a  UR                  S5      nUb   eO
 SU 35       eU R                  S[        5       S9nUR                  S/S/S9  UR                  S/S	S
9n[        US   5      S	:X  d   egzETest creating and getting collections with legacy embedding functionstest_legacyrH   embedding_functionr   Nzconfig: 1testids	documents   query_texts	n_resultsr   )resetcreate_collectionr   r   _modelconfiguration_json
isinstancedictgetget_collectionaddquerylenr   collrd   efcoll2resultss         r%   test_legacy_embedding_functionr   a   s    
LLN ##24 $ D 5T[[5S5STF*VT**ZZ,-zz)))u !!24 " E 
II3%F8I,kkvh!k<Gwu~!###r)   c                    U R                  5         U R                  S[        5       S9n[        UR                  R
                  5      nU(       a,  [        U[        5      (       a  UR                  S5      nUb   eO
 SU 35       eU R                  S[        5       S9nUR                  S/S/S9  UR                  S/S	S
9n[        US   5      S	:X  d   egr   )r   r   r@   r   r   r   r   r   r   r   r   r   r   r   s         r%   (test_legacy_embedding_function_with_namer      s    
LLN ##:< $ D 5T[[5S5STF*VT**ZZ,-zz)))u !!:< " E 
II3%F8I,kkvh!k<Gwu~!###r)   c                 >   U R                  5         SSSS.nU R                  SUS9n[        UR                  R                  5      nU(       a  [        U[        5      (       a  [        [        UR                  S0 5      5      n[        UR                  S5      5      [        S5      :X  d   eUR                  S	5      S:X  d   eUR                  S
5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      nUc   eUR                  5       S:X  d   eggg)z5Test creating collections with legacy metadata formatcosine   
   )
hnsw:spacezhnsw:construction_efzhnsw:Mtest_legacy_metadata)rH   metadatahnswspaceef_constructionmax_neighbors	ef_searchd   r   Ndefault)r   r   r   r   r   r   r   r   r   r   rL   rH   )r   legacy_metadatar   rd   hnsw_configr   s         r%   r   r      s   
LLN  #O
 ###  $ D 5T[[5S5STF*VT**2FJJvr4JK;??7+,H===01S888/2555{+s222ZZ,-~~wwyI%%% +vr)   c                    U R                  5         SSSSSS.nU[        SS9S	.nU R                  S
US9n[        UR                  R
                  5      nU(       a  [        U[        5      (       a}  [        [        UR                  S0 5      5      nUR                  S0 5      nUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUc   eggg)z7Test creating collections with new configuration formatr   r   r         )r   r   r   r   num_threads   rg   r   r   test_new_configrH   configurationr   r   r   r   r   N)r   rN   r   r   r   r   r   r   r   r   r   )r   r   rd   r   loaded_configr   s         r%   test_new_configurationr      s   
LLN ,K 5!<-F
 ## $ D <&&M M4882M4E4Efb4QR3R8w'833301S888/2555~~ 9}r)   c                     U R                  5         [        R                  " [        5       nSSS.nU R	                  SSU0S9  S[        UR                  5      ;   d   e SSS5        g! , (       d  f       g= f)	z)Test validation of invalid configurationsr   )r   r   test_invalidr   r   zinvalid valueN)r   pytestraises	Exceptionr   rL   value)r   excinfoinvalid_hnsws      r%   test_invalid_configurationsr      sm    
LLN 
y	!W!1
 	  !<0 	! 	

 #gmm"4444 
"	!	!s   3A((
A6c                 T   U R                  5         SSSS.nU R                  SSU0S9nSS	S
.nSU0nUR                  US9  UR                  nU(       a  [	        U[
        5      (       a  UR                  S0 5      n[	        U[
        5      (       a\  UR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eU R                  SS9nUR                  nU(       a  [	        U[
        5      (       a  UR                  S0 5      n[	        U[
        5      (       a]  UR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   egggg)'Test updating collection configurationsr   r   r   r   r   r   test_updatesr   r   r   r   )r   r   r   r   r   r   r   r      rH   Nr   r   modifyr   r   r   r   r   )r   initial_hnswr   update_hnswupdate_configr   r   s          r%   test_hnsw_configuration_updatesr      s   
LLN -L
 ##|, $ D ,K
 	4M 	KKmK, ++MM488#''3k4((??;/2555??7+x777??#45<<<???3r999  n 5D++MM488#''3k4((??;/2555??7+x777??#45<<<???3r999	 ) 9}r)   c                    U R                  5       nUR                  5         SSSS.nU[        SS9S.nUR                  SUS	9  U R                  5       nUR	                  SS
9n[        UR                  R                  5      nU(       a  [        U[        5      (       a  [        [        UR                  S0 5      5      nUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      nUc   eUR                  5       S:X  d   eggg)z5Test configuration persistence across client restartsr   r   r   )r   r   r   r   rg   r   test_persist_configr   r   r   r   r   r   r   r   Nr]   )create_client_from_systemr   rN   r   r   r   r   r   r   r   r   r   r   rH   )client_factoriesr   r   rd   client2r   r   r   s           r%   test_configuration_persistencer     s[    779F
LLN ,K 5!<-F
 "   88:G!!" " D <&&M M4882M4E4Efb4QRw'833301S888/2555{+s22234~~wwyK''' 9}r)   c                 6   U R                  5         SSSS.nU R                  SSU0S9nUR                  R                  c   eUR                  R                  R	                  S5      nUc   eUR	                  S	5      S:X  d   eUR	                  S
5      S:X  d   eg)r   r   r   r   r   r   r   r   Nr   r   )r   r   r   r   r   )r   r   r   r   s       r%    test_configuration_result_formatr   J  s    
LLN -L
 ##|, $ D
 ;;))555++0044V<K"""??;'2---??7#x///r)   c                 0   U R                  5         0 nU[        SS9S.n[        (       a  U R                  SUS9n[	        UR
                  R                  5      nU(       a  [        U[        5      (       a  [        [        UR                  S0 5      5      nUR                  S5      nUR                  S5      S	:X  d   eUR                  S
5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUc   egggU R                  SUS9n[	        UR
                  R                  5      nU(       a  [        U[        5      (       a  [        [        UR                  S0 5      5      nUR                  S5      nUR                  S5      S	:X  d   eUR                  S
5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUc   eggg)9Test creating collections with SPANN configuration formatr   rg   spannr   test_spann_configr   r   r   r   rm   r   r   r   r   r   Nr   r   @   search_nprobe   write_nprober   rN   r   r   r   r   r   r   r   r   r   r   r   r   spann_configrd   r   r   hnsw_config_loadedr   spann_config_loadeds           r%   test_empty_spann_configurationr   a  s8   
LLN .0L5!<-F
 ''$  ( 
 @KK**
 Zt<<!%'):):62)F" ""#78B%))'2d:::%))*;<CCC%))+6#===%))/:b@@@>!> == ''$  ( 
 @KK**
 Zt<<"&(-*;*;GR*H# ""#78B&**73t;;;&**+<=DDD&**;73>>>&**?;rAAA&**?;sBBB&**>:cAAA>!> ==r)   c                 >   U R                  5         SSSSSSS.nU[        SS9S.n[        (       a  U R                  S	US
9n[	        UR
                  R                  5      nU(       a  [        U[        5      (       a  [        [        UR                  S0 5      5      nUR                  S5      nUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUc   egggU R                  S	US
9n[	        UR
                  R                  5      nU(       a  [        U[        5      (       a  [        [        UR                  S0 5      5      nUR                  S5      nUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUc   eggg)r   r   r   r   r   r   )r   r   r   r   r   r   rg   r   r   r   r   r   r   r   r   r   r   Nr   r   r   r   r   r   s           r%   test_spann_configurationr     sN   
LLN .L 5!<-F
 ''$  ( 
 @KK**
 Zt<<!%'):):62)F" ""#78B%))'2h>>>%))*;<CCC%))+6#===%))/:b@@@>!> == ''$  ( 
 @KK**
 Zt<<"&(-*;*;GR*H# ""#78B&**73x???&**+<=DDD&**;73>>>&**?;rAAA&**?;q@@@&**>:b@@@>!> ==r)   )reasonc                    U R                  5       nUR                  5         SSSSSS.nU[        SS9S.nUR                  SUS	9  U R                  5       nUR	                  SS
9n[        UR                  R                  5      nU(       a  [        U[        5      (       a  [        [        UR                  S0 5      5      nUR                  S5      nUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUc   eggg)z;Test SPANN configuration persistence across client restartsr   r   r   r   )r   r   r   r   r   rg   r   test_persist_spann_configr   r   r   r   r   r   r   r   r   N)r   r   rN   r   r   r   r   r   r   r   r   r   r   )r   r   r   rd   r   r   r   r   s           r%   $test_spann_configuration_persistencer     so    779F
LLN .L 5!<-F
 (  
 88:G!!( " D <&&M M4884m6G6GQS6TU34(H444 12c9990B6660A555/2555~~ 9}r)   c                     U R                  5         SSS.nSSS.n[        R                  " [        SS9   U R	                  SUUS	.S
9  SSS5        g! , (       d  f       g= f)z@Test that HNSW and SPANN configurations cannot both be specifiedr   r   )r   r   r   )r   r   z&hnsw and spann cannot both be provided)matchtest_dual_configr   r   r   N)r   r   r   
ValueErrorr   )r   r   r   s      r%   'test_exclusive_hnsw_spann_configurationr     sh    
LLN ,K
 .L 
z)Q	R  ##% 	! 	
 
S	R	Rs   A
Ac                 |   U R                  5         SS0nSU0n[        (       a  U R                  SUS9n[        UR                  R
                  5      nU(       a  [        U[        5      (       a  [        [        UR                  S0 5      5      nUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S	5      S:X  d   eUR                  S
5      S:X  d   eUR                  S5      nUc   eUR                  5       S:X  d   egggU R                  SUS9n[        UR                  R
                  5      nU(       a  [        U[        5      (       a  [        [        UR                  S0 5      5      nUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S
5      S:X  d   eUR                  S	5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      nUc   eUR                  5       S:X  d   eggg)z,Test the default values for SPANN parametersr   r   r   test_spann_defaultsr   r   r   r   r   r   r   r   Nr   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   rH   r   r   s           r%   test_spann_default_parametersr     sc   
LLN 	.L 	-F ''&  ( 
 @KK**
 Zt<<!%'):):62)F" &))'2h>>>%))*;<CCC%))+6#===%))/:b@@@""#78B>!>779	))) == ''&  ( 
 @KK**
 Zt<<"&(-*;*;GR*H# '**73x???&**+<=DDD&**?;rAAA&**;73>>>&**?;sBBB&**>:cAAA""#78B>!>779	))) ==r)   c                    U R                  5         Sn[        [        R                  " U5      5      n0 nUR	                  S5      b"  [        [        UR	                  S5      5      US'   UR	                  S5      b  UR	                  S5      US'   [        (       a  U R                  SUS9n[        UR                  R                  5      nU(       a  [        U[        5      (       a  [        [        UR	                  S0 5      5      nUR	                  S5      nUR	                  S5      S	:X  d   eUR	                  S
5      S:X  d   eUR	                  S5      S:X  d   eUR	                  S5      S:X  d   eUc   egggU R                  SUS9n[        UR                  R                  5      nU(       a  [        U[        5      (       a  [        [        UR	                  S0 5      5      nUR	                  S5      S	:X  d   eUR	                  S5      S:X  d   eUR	                  S5      S:X  d   eUR	                  S
5      S:X  d   eUR	                  S5      S:X  d   eggg)zCTest serializing and deserializing SPANN configuration to/from JSONaw  
    {
        "spann": {
            "space": "cosine",
            "search_nprobe": 7,
            "write_nprobe": 15,
            "ef_construction": 200,
            "ef_search": 150
        },
        "embedding_function": {
            "type": "known",
            "name": "custom_ef",
            "config": {
                "dim": 10
            }
        }
    }
    r   Nr   test_spann_jsonr   r   r   r   r   r   r   r   r   r      r      r      )r   r   jsonloadsr   r   r   r   r   r   r   r   r   r   )	r   config_jsoncollection_configcreate_configr   r   r   r   r   s	            r%   test_spann_json_serializationr
  X  sn   
LLNK( @

;@WX 46MW%1!%$&7&;&;G&D"
g 12>.?.C.C /
*+ ''"' ( 
 @KK**
 Zt<<!%'):):62)F" ""#78B%))'2h>>>%))*;<CCC%))+6#===%))/:b@@@>!> == ''"' ( 
 @KK**
 Zt<<"&(-*;*;GR*H# '**73x???&**?;q@@@&**>:b@@@&**+<=DDD&**;73>>> ==r)   c                    U R                  5         SSSS.nU R                  SSU0S9nSS	S
.nSU0nUR                  US9  UR                  nU(       a  [	        U[
        5      (       al  UR                  S0 5      n[	        U[
        5      (       aE  UR                  S5      S:X  d   eUR                  S5      S	:X  d   eUR                  S5      S:X  d   eU R                  S5      nUR                  nU(       a  [	        U[
        5      (       an  UR                  S0 5      n[	        U[
        5      (       aF  UR                  S5      S:X  d   eUR                  S5      S	:X  d   eUR                  S5      S:X  d   egggg)z-Test updating SPANN collection configurationsr   r   r   )r   r   r   test_spann_updatesr   r   r  r   )r   r   r   r   r   r   Nr   )r   initial_spannr   update_spannr   r   r   s          r%    test_configuration_spann_updatesr    s    LLN /M
 ##!. $ D .L
 	4M 	KKmK, ++MM488$(("5lD))##K0C777##O4:::##G,888  !56D++MM488$(("5lD))##K0C777##O4:::##G,888 * 9}r)   c                 &   U R                  5         SSSSSSS.nU R                  SS	U0S
9n[        [        SSS9S9nUR	                  US9  UR
                  nU(       a  [        U[        5      (       a  UR                  S	0 5      n[        U[        5      (       a  UR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eU R                  S5      nUR
                  nU(       a  [        U[        5      (       a  UR                  S	0 5      n[        U[        5      (       a  UR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   egggg)z;Test updating SPANN configuration from JSON and applying itr   r   r   r     r   )r   r   r   r   r   r   test_spann_json_updater   r   r  r   r   r   )r   r   r   r   r   r   r   r   N)
r   r   r   r   r   r   r   r   r   r   )r   r  r   r   r   r   s         r%   test_spann_update_from_jsonr    s7    LLN /M ##%. $ D
 2&
M 	KKmK, ++MM488$(("5lD))##K0C777##O4:::  ##G,888##$56#===##O4:::##N3r999  !9:D++MM488$(("5lD))##K0C777##O4:::  ##G,888##$56#===##O4:::##N3r999 * 9}r)   c                  J   SSSSSSS.n SS	S
.n[        X5      nUR                  S5      S:X  d   eUR                  S5      S	:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S5      S:X  d   eg)z8Test the overwrite_spann_configuration function directlyr   r   r   r  r   r   )r   r   r   r   r   r   r  r   r  r   r   r   r   r   r   N)r   r   )original_configr   updated_configs      r%   "test_overwrite_spann_configurationr    s     +O /M 3?RN o."444k*c111 g&(222n-333/0C777o."444r)   c                     U R                  5         SSS.nU R                  SSU0S9nSS0nS	S
0nUUS.n[        R                  " [        5         UR                  US9  SSS5        g! , (       d  f       g= f)zMTest that HNSW and SPANN configurations cannot both be specified in an updater   r   )r   r   test_exclusive_updater   r   r   r   r   r  r   r   N)r   r   r   r   r   r   )r   r   r   r   r  r   s         r%   .test_exclusive_update_hnsw_spann_configurationr  2  s     LLN -L ##$|, $ D 	R,K 	.L 4M 
z	"-0 
#	"	"s   A((
A6c                 0   U R                  5         U R                  SS9nUc   eUR                  c   e[        UR                  5      nUc   eUR	                  S5      nUc   eUR	                  S5      S:X  d   eUR	                  S5      S:X  d   eUR	                  S	5      S
:X  d   eUR	                  S5      S:X  d   eUR	                  S5      S:X  d   eUR	                  S5      b   eUR	                  S5      nUc   eUR                  5       S:X  d   eg)z.Test creating a collection with default valuestest_default_creationr   Nr   r   rm   r   r   r   r   r   sync_threshold  r   r   r   )r   r   r   r   r   rH   )r   r   rd   r   r   s        r%    test_default_collection_creationr   R  s*   
LLN##)@#AD""...4T5L5LMF**V$K"""??7#t+++??,-444???+r111??;'3...??+,444::g&&&	(	)B>>779	!!!r)   c                      SSSSSSS.SSS	0 S
.S.n [         R                  " [        5         [        U 5        SSS5        g! , (       d  f       g= f)z9Test that on an invalid configuration, an error is raisedrm   r   r   g333333?r  )r   r   r   r   resize_factorr  Nr]   knownrH   typerd   r   r   r   )r   r   r   r   )invalid_configs    r%   test_invalid_configurationr(  k  sW     " "
 
&N  
z	"/? 
#	"	"s   A
Ac                 "   U R                  5         U R                  SS9nSSS0 S.0n[        UR                  SUSSSUR                  UR
                  S	9nUc   eUR                  S:X  d   eUR                  U:X  d   eX1l        [        R                  " [        5         UR                  S
/S/S9  SSS5        [        R                  " [        5         UR                  S/SS9  SSS5        g! , (       d  f       NC= f! , (       d  f       g= f)z
When an invalid confiugration is used, collection create, get, list_collections should all pass
Only when trying to use the collection should an error be reaised
test_invalid_configr   r   r]   r#  r$  test_invalid_config_collectionNidrH   r   serialized_schemar   	dimensiontenantdatabaser   r   r   r   r   )r   r   CollectionModelr-  r0  r1  rH   r   r   r   r   r   r   r   )r   r   invalid_config_jsoninvalid_collections       r%   /test_collection_load_with_invalid_configurationr5    s   
 LLN ##)>#?D 	
 )77-.{{	 )))""&FFFF004GGGG$K	z	"cUvh/ 
# 
z	"

x1
5 
#	" 
#	" 
#	"s   C/D /
C= 
Dc                    U R                  5         S[        SS90nU R                  SUS9nUR                  nUR                  nSU;   d   eUR                  S5      nUR                  S5      nUc   eUc   eUR                  S5      S:X  d   eUR                  S	5      S
:X  d   eUR                  5       S
:X  d   eUR                  5       UR                  S5      :X  d   eg)zHTest that configuration_json and configuration properties are consistentr      rg   test_config_consistencyr   Nr%  r#  rH   r]   rd   )r   rN   r   r   r   r   rH   ra   )r   rd   r   r  config_processedef_jsonef_processeds          r%   =test_configuration_json_vs_configuration_property_consistencyr<    s    LLN 	5!<-F ##& $ D ))K));... oo23G#''(<=L###;;v')));;v+---+---""$H(====r)   c                 b   U R                  5         U R                  SS9nUR                  nUR                  nSU;   d   eUR	                  S5      nUR	                  S5      nUc   eUc   eUR	                  S5      S:X  d   eUR	                  S5      S:X  d   eUR                  5       S:X  d   eg)	zPTest that default configuration_json and configuration properties are consistenttest_default_config_consistencyr   r   Nr%  r#  rH   r   )r   r   r   r   r   rH   )r   r   r  r9  r:  r;  s         r%   Etest_default_configuration_json_vs_configuration_property_consistencyr?    s     LLN ##)J#KD ))K));... oo23G#''(<=L###;;v')));;v)+++)+++r)   c                 L   U R                  5         U R                  SS9nSSS0 S.0SSSS0S	.0S
S0S
S0SS0S./n[        U5       GH  u  p4[        UR                  SU 3USSSUR
                  UR                  S9nXQl        UR                  UR                  :X  d   eUR                  SU 3:X  d   eUR                  U:X  d   e[        R                  " [        5         UR                    SSS5        [        R                  " [        5         UR                  S/S/S9  SSS5        [        R                  " [        5         UR                  S/SS9  SSS5        [        R                  " [        5         UR!                  S/S/S9  SSS5        [        R                  " [        5         UR#                  S/5        SSS5        GM     g! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N|= f! , (       d  f       GM  = f)z
Test that invalid configurations allow list_collections, get_collection to succeed,
but fail when _embed is called (during add, query, upsert operations)
test_invalid_operationsr   r   nonexistent_efr#  r$  rP   rr   )r%  rd   r   rm   r   r%  legacyr&  test_invalid_config_Nr,  r   r   r   r   r   )r   r   	enumerater2  r-  r0  r1  r   rH   r   r   r   r   r   r   r   upsert_embed)r   r   invalid_configsir'  invalid_collection_models         r%   9test_invalid_configuration_operations_succeed_until_embedrK    s    LLN ##)B#CD !(#	
 ! !*#	
 dOx(#)8"4	
%-O2 '7#2ww's+-";;]]	$
  / ww255555yy21#6666&&.888]]:& ' ]]:&HH#6(H3 ' ]]:&JJF8qJ9 ' ]]:&KKSEfXK6 ' ]]:&KK! '&A 8( '& '& '& '& '&s<   !GG G19H.H
G	 
G.	1
G?	
H	
H#	c                 N   U R                  5         U R                  SS[        SS90S9nSSSSS0S	.0nX!R                  l        UR
                  S:X  d   eUR                  c   eUR                  U:X  d   eUR                  c   eUR                  c   e[        R                  " [        5         UR                  S/S/S9  S
S
S
5        [        R                  " [        5         UR                  S/SS9  S
S
S
5        [        R                  " [        5         UR                  S/S/S9  S
S
S
5        [        R                  " [        5         UR                  nS
S
S
5        g
! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N`= f! , (       d  f       g
= f)zj
Test that get_collection works even with invalid configurations,
but operations that require _embed fail
test_get_invalidr   r   rg   r   nonexistent_functionr#  rP   r$  Nr   ztest docr   r   r   )r   r   rN   r   r   rH   r-  r0  r1  r   r   r   r   r   rF  r   )r   
valid_collr'  _s       r%   .test_get_collection_with_invalid_configurationrQ  2  s|   
 LLN ))+-D-KL * J 	*aj
N ,:( ??0000==$$$((N:::(((*** 
z	"F8
|< 
# 
z	"fX; 
# 
z	"vh:,? 
# 
z	"$$ 
#	" 
#	" 
#	" 
#	" 
#	"s0   /E#$E4FF#
E14
F
F
F$c                    U R                  5         U R                  S[        SS9S9nUc   eUR                  R	                  S5      nUc   eUR                  5       S:X  d   eUR                  5       SS0:X  d   eU R                  S[        SS9S9nUc   eUR                  R	                  S5      nUc   eUR                  5       S:X  d   eUR                  5       SS0:X  d   eU R                  SS	9nUR                  R	                  S5      nUc   eUR                  5       S:X  d   eUR                  5       SS0:X  d   eg)
z0Test creating a collection with no EF in config.test_no_configrr   rg   r   Nr   r]   rP   r   	r   r   rN   r   r   rH   ra   get_or_create_collectionr   r   r   r   s      r%   test_ef_no_configrW  b  sb   
LLN##2Ia2P $ D 					 4	5B>>779###==?uaj(((**2Ia2P + D 					 4	5B>>779###==?uaj(((  &6 7D					 4	5B>>779###==?uaj(((r)   c                    U R                  5         U R                  S[        SS9SSS00S9nUc   eUR                  R	                  S	5      nUc   eUR                  5       S
:X  d   eUR                  5       SS0:X  d   eU R                  S[        SS9SSS00S9nUc   eUR                  R	                  S	5      nUc   eUR                  5       S
:X  d   eUR                  5       SS0:X  d   eU R                  SS9nUR                  R	                  S	5      nUc   eUR                  5       S
:X  d   eUR                  5       SS0:X  d   eg)zATest creating a collection with EF in parameter, no EF in config. test_ef_with_config_exists_no_efrr   rg   r   r   r   rH   r   r   Nr   r]   rP   r   rT  rV  s      r%   rY  rY  ~  s|   
LLN##/2q923 $ D
 					 4	5B>>779###==?uaj(((**/2q923 + D
 					 4	5B>>779###==?uaj(((  &H ID					 4	5B>>779###==?uaj(((r)   c           	         U R                  5         U R                  S[        SS9SS0[        SS9S.S9nUc   eUR                  R	                  S	5      nUc   eUR                  5       S
:X  d   eUR                  5       SS0:X  d   eU R                  S[        SS9SS0[        SS9S.S9nUc   eUR                  R	                  S	5      nUc   eUR                  5       S
:X  d   eUR                  5       SS0:X  d   eU R                  SS9nUR                  R	                  S	5      nUc   eUR                  5       S
:X  d   eUR                  5       SS0:X  d   eg)zQTest creating a collection with EF in parameter, EF in config. They are the same."test_ef_with_config_exists_with_efrr   rg   r   r   r   rZ  Nr   r]   rP   r   rT  rV  s      r%   (test_ef_with_config_exists_with_ef_validr]    s   
LLN##12q9h'"9a"@
 $ D 					 4	5B>>779###==?uaj(((**12q9h'"9a"@
 + D 					 4	5B>>779###==?uaj(((  &J KD					 4	5B>>779###==?uaj(((r)   c           
          U R                  5         [        R                  " [        5         U R	                  S[        SS9SS0[        SS9S.S9  SSS5        g! , (       d  f       g= f)	zRTest creating a collection with EF in parameter, EF in config. They are different.r\  rr   rg   r   r   r   rZ  N)r   r   r   r   r   rN   rv   r   s    r%   1test_create_ef_with_config_exists_with_ef_invalidr`    sV    
LLN	z	"  561= (+&>1&E 	! 	
 
#	"	"   %A
A'c           
          U R                  5         [        R                  " [        5         U R	                  S[        SS9SS0[        SS9S.S9  SSS5        g! , (       d  f       g= f)	zJTest get_or_create with EF in parameter, EF in config. They are different.r\  rr   rg   r   r   r   rZ  N)r   r   r   r   rU  rN   rv   r_  s    r%   8test_get_or_create_ef_with_config_exists_with_ef_invalidrc    sV    
LLN	z	"''561= (+&>1&E 	( 	
 
#	"	"ra  c                     U R                  5         U R                  SSS0[        SS9S.S9  [        R                  " [
        5         U R                  S[        SS9S9  S	S	S	5        g	! , (       d  f       g	= f)
zKTest get_collection with EF in parameter, EF in config. They are different.r\  r   r   rr   rg   r   r   r   N)r   r   rv   r   r   r   r   rN   r_  s    r%   9test_get_collection_ef_with_config_exists_with_ef_invalidre    sp     LLN
1h'":q"A
   
z	"561= 	 	
 
#	"	"s   A((
A6c           
      8   U R                  5         U R                  S[        SS9S9nUc   eUR                  R	                  S5      nUc   eUR                  5       S:X  d   eUR                  5       SS0:X  d   e[        R                  " [        5         U R                  S[        SS9S[        SS90S	9  SSS5        [        R                  " [        5         U R                  S[        SS9S9  SSS5        g! , (       d  f       NI= f! , (       d  f       g= f)
z
After creating a collection with an embedding function,
get_or_create should raise an error before and after retrieval, if they had provided
a different embedding function or if it differs from the persisted one.
'test_get_or_create_after_create_with_efrr   rg   r   Nr   r]   rP   rZ  )r   r   rN   r   r   rH   ra   r   r   r   rU  rv   rV  s      r%   rg  rg    s    LLN##62q9 $ D 					 4	5B>>779###==?uaj(((	z	"'':7A>/1HQ1OP 	( 	
 
# 
z	"'':7A> 	( 	
 
#	" 
#	" 
#	"s   "C:D:
D
Dc                       \ rS rSrSS\S\4S jjrS\S\4S jr	\
S\4S j5       rS\\\4   4S	 jr\
S
\\\4   SS 4S j5       rS\4S jrS\\   4S jrSrg)#DefaultSpaceCustomEmbeddingFunctioni  
model_namerP   c                     X l         Xl        g r!   rS   _model_name)r$   rj  rP   s      r%   r&   ,DefaultSpaceCustomEmbeddingFunction.__init__  s    	%r)   r*   r   c                     [        [        [        R                  " S/U R                  -  /[        R
                  S95      $ rX   rY   r5   s     r%   r6   ,DefaultSpaceCustomEmbeddingFunction.__call__  r[   r)   c                      g)Ndefault_space_custom_efr"   r"   r)   r%   rH   (DefaultSpaceCustomEmbeddingFunction.name  s    (r)   c                 4    U R                   U R                  S.$ )Nrj  rP   )rm  rS   r#   s    r%   ra   .DefaultSpaceCustomEmbeddingFunction.get_config  s    "..tyyAAr)   rd   c                 "    [        U S   U S   S9$ )Nrj  rP   ru  )ri  rh   s    r%   ri   5DefaultSpaceCustomEmbeddingFunction.build_from_config"  s     3l+
 	
r)   c                 j    U R                   S:X  a  gU R                   S:X  a  gU R                   S:X  a  gg)Ni_want_cosiner   	i_want_l2rm   	i_want_ipiprm  r#   s    r%   rn   1DefaultSpaceCustomEmbeddingFunction.default_space*  s8    .,,r)   c                     U R                   S:X  a  S/$ U R                   S:X  a  S/$ U R                   S:X  a  S/$ U R                   S:X  a  / SQ$ / SQ$ )	Nrz  r   r{  rm   r|  r}  i_want_anythingr   rm   r}  r~  r#   s    r%   supported_spaces4DefaultSpaceCustomEmbeddingFunction.supported_spaces4  s]    .:,6M,6M!22))))r)   rl  Nrq   )r:   r;   r<   r=   rL   rt   r&   r
   r   r6   rK   rH   r   r   ra   ri   r	   rn   r   r  r>   r"   r)   r%   ri  ri    s    &3 &S &Qj QZ Q )# ) )BDcN B 
S#X
	.
 
u 
*$u+ 
*r)   ri  c                    U R                  5         U R                  S[        SSS9S9nUc   eUR                  R	                  S5      nUc   eUR                  5       S:X  d   eUR                  5       SSS.:X  d   eUR                  5       S:X  d   eUR                  5       S/:X  d   e[        (       a8  UR                  R	                  S	5      nUc   eUR	                  S
5      S:X  d   eO7UR                  R	                  S5      nUc   eUR	                  S
5      S:X  d   eU R                  S[        SSS9S9nUc   eUR                  R	                  S5      nUc   eUR                  5       S:X  d   eUR                  5       SSS.:X  d   eUR                  5       S:X  d   eUR                  5       S/:X  d   e[        (       a8  UR                  R	                  S	5      nUc   eUR	                  S
5      S:X  d   eO7UR                  R	                  S5      nUc   eUR	                  S
5      S:X  d   eU R                  S[        SSS9S9nUc   eUR                  R	                  S5      nUc   eUR                  5       S:X  d   eUR                  5       SSS.:X  d   eUR                  5       S:X  d   eUR                  5       S/:X  d   e[        (       a8  UR                  R	                  S	5      nUc   eUR	                  S
5      S:X  d   eO7UR                  R	                  S5      nUc   eUR	                  S
5      S:X  d   eU R                  S[        SSS9S9nUc   eUR                  R	                  S5      nUc   eUR                  5       S:X  d   eUR                  5       SSS.:X  d   eUR                  5       S:X  d   eUR                  5       / SQ:X  d   e[        (       a8  UR                  R	                  S	5      nUc   eUR	                  S
5      S:X  d   eg UR                  R	                  S5      nUc   eUR	                  S
5      S:X  d   eg )N,test_default_space_custom_embedding_functionrz  rr   ru  r   r   rr  r   r   r   r   /test_default_space_custom_embedding_function_l2r{  rm   /test_default_space_custom_embedding_function_ipr|  r}  5test_default_space_custom_embedding_function_anythingr  r  )r   r   ri  r   r   rH   ra   rn   r  r   rU  r   r   r   r   r   s        r%   6test_default_space_custom_embedding_function_no_configr  A  s   
LLN##;>&A
 $ D 					 4	5B>>7791111==?_QGGGG))) XJ...((,,V4&&&w'8333))--g6'''(H444**>>"
 + D 					 4	5B>>7791111==?[CCCC%%% TF***((,,V4&&&w'4///))--g6'''(D000**>>"
 + D 					 4	5B>>7791111==?[CCCC%%% TF***((,,V4&&&w'4///))--g6'''(D000**D>(a
 + D 					 4	5B>>7791111==?->qIIII))) $::::((,,V4&&&w'8333))--g6'''(H444r)   c                    U R                  5         [        (       a  U R                  S[        SSS9SSS00S9nOU R                  S[        SSS9S	SS00S9nUc   eUR                  R                  S
5      nUc   eUR                  5       S:X  d   eUR                  5       SSS.:X  d   eUR                  5       S:X  d   eUR                  5       / SQ:X  d   e[        (       a8  UR                  R                  S5      nUc   eUR                  S5      S:X  d   eg UR                  R                  S	5      nUc   eUR                  S5      S:X  d   eg )N>test_default_space_custom_embedding_function_with_valid_configr  rr   ru  r   r   rm   rZ  r   r   rr  r   r  )
r   r   r   ri  r   r   rH   ra   rn   r  r  s        r%   r  r    s    LLN''QB,!  "GT?3 ( 
 ''QB,!  #WdO4 ( 
 					 4	5B>>7791111==?->qIIII))) $::::((,,V4&&&w'4///))--g6'''(D000r)   c           	      J   U R                  5         [        R                  " SS9 n[        R                  " S5        [        (       a  U R                  S[        SSS9SS	S
00S9nOU R                  S[        SSS9SS	S
00S9n[        U5      S:  d   eU Vs/ s H  n[        UR                  5      PM     nn[        S U 5       5      (       d   eUc   eUR                  R                  S5      nUc   eUR                  5       S:X  d   e[        (       a8  UR                  R                  S5      nUc   eUR                  S	5      S
:X  d   eO7UR                  R                  S5      nUc   eUR                  S	5      S
:X  d   eS S S 5        g s  snf ! , (       d  f       g = f)NTrecordalways@test_default_space_custom_embedding_function_with_invalid_configrz  rr   ru  r   r   rm   rZ  r   r   c              3   H   #    U  H  nS UR                  5       ;   v   M     g7fzspace l2 is not supportedNlower.0msgs     r%   	<genexpr>Stest_default_space_custom_embedding_function_with_invalid_config.<locals>.<genexpr>         
BR3'399;6BR    "r   rr  )r   warningscatch_warningssimplefilterr   rU  ri  r   rL   messageanyr   r   rH   r   wr   warningwarning_messagesr   r   r   s           r%   r  r    s    LLN		 	 	-h'!!22W#F.A$  &7 3 D 22W#F.A$  '$8 3 D 1vzz@ABWC0B 
BR
 
 
 	
 
 ##$89~~wwy5555!!,,008K***??7+t333--11':L+++##G,444M 
.	-* C+ 
.	-s   A2FF6CFF
F"c                 R   U R                  5         U R                  S[        SSS9SS0S9nUc   eUR                  R	                  S5      nUc   eUR                  5       S	:X  d   eUR                  5       SSS.:X  d   eUR                  5       S
:X  d   eUR                  5       / SQ:X  d   e[        (       a8  UR                  R	                  S5      nUc   eUR	                  S5      S:X  d   eg UR                  R	                  S5      nUc   eUR	                  S5      S:X  d   eg )N:test_default_space_custom_embedding_function_with_metadatar  rr   ru  r   r}  rH   r   r   r   rr  r   r  r   r   r   
r   r   ri  r   r   rH   ra   rn   r  r   r  s        r%   r  r    sC    LLN##I>(a
 % $ D 					 4	5B>>7791111==?->qIIII))) $::::((,,V4&&&w'4///))--g6'''(D000r)   c           	         U R                  5         [        R                  " SS9 n[        R                  " S5        U R	                  S[        SSS9SS	0S
9n[        U5      S:  d   eU Vs/ s H  n[        UR                  5      PM     nn[        S U 5       5      (       d   eUc   eUR                  R                  S5      nUc   eUR                  5       S:X  d   eUR                  5       SSS.:X  d   eUR                  5       S:X  d   eUR                  5       S/:X  d   e[         (       a8  UR                  R                  S5      nUc   eUR                  S5      S	:X  d   eO7UR                  R                  S5      nUc   eUR                  S5      S	:X  d   eS S S 5        g s  snf ! , (       d  f       g = f)NTr  r  Btest_default_space_custom_embedding_function_with_invalid_metadatarz  rr   ru  r   rm   r  r   c              3   H   #    U  H  nS UR                  5       ;   v   M     g7fr  r  r  s     r%   r  Utest_default_space_custom_embedding_function_with_invalid_metadata.<locals>.<genexpr>#  r  r  r   rr  r   r   r   r   )r   r  r  r  r   ri  r   rL   r  r  r   r   rH   ra   rn   r  r   r  s           r%   r  r    s    LLN		 	 	-h'''UB*  #D) ( 
 1vzz@ABWC0B 
BR
 
 
 	
 
 ##$89~~wwy5555}}"KKKK!X---""$
222!!,,008K***??7+t333--11':L+++##G,444A 
.	- C 
.	-s   AF/,F*DF/*F//
F=c           	      \   U R                  5         U R                  SSSS00[        SSS9SS	0S
9nUc   eUR                  R	                  S5      nUc   eUR                  5       S:X  d   eUR                  5       SSS.:X  d   eUR                  5       S:X  d   eUR                  5       / SQ:X  d   e[        (       a8  UR                  R	                  S5      nUc   eUR	                  S5      S:X  d   eg UR                  R	                  S5      nUc   eUR	                  S5      S:X  d   eg )NEtest_default_space_custom_embedding_function_with_metadata_and_configr   r   r}  r  rr   ru  r   rm   )rH   r   r   r   r   rr  r   r  r   r  r  s        r%   r  r  9  sO    LLN##T/>(a
 % $ D 					 4	5B>>7791111==?->qIIII))) $::::((,,V4&&&w'4///))--g6'''(D000r)   c                        \ rS rSr% \\S'   Srg)"CustomEmbeddingFunctionQueryConfigiX  taskr"   N)r:   r;   r<   r=   rL   __annotations__r>   r"   r)   r%   r  r  X  s    
Ir)   r  c            
           \ rS rSr  SS\S\S\S\\   4S jjrS\	S	\
4S
 jrS\	S	\
4S jr\S	\4S j5       rS	\\\4   4S jr\S\\\4   S	S 4S j5       rS	\4S jrS	\\   4S jrSrg)&CustomEmbeddingFunctionWithQueryConfigi\  Nr  rj  rP   query_configc                 4    X0l         X l        Xl        X@l        g r!   )rS   rm  _task_query_config)r$   r  rj  rP   r  s        r%   r&   /CustomEmbeddingFunctionWithQueryConfig.__init__^  s     	%
)r)   r*   r   c                     [        [        [        R                  " S/U R                  -  /[        R
                  S95      $ rX   rY   r5   s     r%   r6   /CustomEmbeddingFunctionWithQueryConfig.__call__j  r[   r)   c                     U R                   b_  U R                   R                  S5      S:X  a@  [        [        [        R
                  " S/U R                  -  /[        R                  S95      $ U R                  U5      $ )Nr  r   r.   r/   )	r  r   r   r   r2   r3   rS   r4   r6   r5   s     r%   embed_query2CustomEmbeddingFunctionWithQueryConfig.embed_querym  s`    )d.@.@.D.DV.LPW.W
BHHsedii.?-@

$STT==''r)   c                      g)Ncustom_ef_with_query_configr"   r"   r)   r%   rH   +CustomEmbeddingFunctionWithQueryConfig.names  s    ,r)   c                 `    U R                   U R                  U R                  U R                  S.$ )Nrj  rP   r  r  )rm  rS   r  r  r#   s    r%   ra   1CustomEmbeddingFunctionWithQueryConfig.get_configw  s,    **99JJ ..	
 	
r)   rd   c                     U R                  S5      nU R                  S5      nU R                  S5      nU R                  S5      nUb  Uc   S5       e[        XX4S9$ )Nrj  rP   r  r  zThis code should not be reachedr  )r   r  )rd   rj  rP   r  r  s        r%   ri   8CustomEmbeddingFunctionWithQueryConfig.build_from_config  sc     ZZ-
jjzz&!zz.1;;;55!
 	
r)   c                     gNr   r"   r#   s    r%   rn   4CustomEmbeddingFunctionWithQueryConfig.default_space  s    r)   c                     S/$ r  r"   r#   s    r%   r  7CustomEmbeddingFunctionWithQueryConfig.supported_spaces  s
    zr)   )rS   rm  r  r  )rr   N)r:   r;   r<   r=   rL   rt   r   r  r&   r
   r   r6   r  rK   rH   r   r   ra   ri   r	   rn   r   r  r>   r"   r)   r%   r  r  \  s     EI
*
* 
* 	
*
 AB
*Qj QZ Q( (
 ( -# - -
DcN 
 
S#X
	1
 
u $u+ r)   r  c           
         U R                  5         U R                  S[        SSSSS0S9S9nUc   eUR                  R	                  S	5      nUc   eUR                  5       S
:X  d   eUR                  5       SSSSS0S.:X  d   eUR                  5       S:X  d   eUR                  5       S/:X  d   e[        R                  " UR                  SS9[        R                  " / SQ/[        R                  S95      (       d   eg )N0test_custom_embedding_function_with_query_configdocumentr  rr   r  r   )r  rj  rP   r  r   r   r  r  r   How many people in Berlin?r*   )r.   r.   r.   r/   )r   r   r  r   r   rH   ra   rn   r  r2   array_equalr  r3   r4   rV  s      r%   r  r    s   
LLN##?A( '*	
 $ D 					 4	5B>>7795555==?')	    ))) XJ...>>
9:
/""**5   r)   c                    Sn[        [        R                  " U5      5      nUc   eUR                  S5      c   eUR                  S5      nUc   eUR	                  5       SSSS S.:X  d   eUR                  5       S:X  d   eUR                  5       S/:X  d   e[        R                  " UR                  SS	9[        R                  " / S
Q/[        R                  S95      (       d   eg )Nz
    {
        "embedding_function": {
            "type": "known",
            "name": "custom_ef_with_query_config",
            "config": {"model_name": "i_want_anything", "dim": 3, "task": "document"}
        }
    }
    r   r  rr   r  r  r   r  r  )r-   r-   r-   r/   )r   r  r  r   ra   rn   r  r2   r  r  r3   r4   )r   json_stringrd   r   s       r%   Ntest_deserializing_custom_embedding_function_with_query_config_no_query_configr    s    K 5TZZ5LMF::*+777	(	)B>>==?'	    ))) XJ...>>
9:
/""**5   r)   )r   r   r   Nr9   )Wr   typingr   r   r   r   numpyr2   r  chromadb.api.typesr   r   r	   r
   chromadb.apir   %chromadb.api.collection_configurationr   r   r   r   r   r   r   r   r   r  "chromadb.utils.embedding_functionsr   chromadb.test.conftestr   r   r   chromadb.typesr   r2  r   r   r   r@   rN   rv   r   r   r   r   r   r   r   r   r   r   markskipifr   r   r   r
  r  r  r  r  r   r(  r5  r<  r?  rK  rQ  rW  rY  r]  r`  rc  re  rg  ri  r  r  r  r  r  r  r  r  r  r  r"   r)   r%   <module>r     s    ( (    #
 
 
  J 2 U 8 &J/
; J	&7
&C 	 /
;  , 0<  ,$9 $ $<$Y $4 $<& &t &: 9    F5	 5d 5$,:I ,:$ ,:^)(X0Y 04 0.4"9 4" 4"n;"Y ;"4 ;"| *3MN( O(V
I 
$ 
49*) 9* 9*xM?) M? M?` *3MN*9Y *94 *9 O*9Z *3MN8:	 8:d 8: O8:v5@ *3MN19 1 1 O1>"Y "4 "2@,*6I *6$ *6Z>>	>@,,	,2H"H"	H"V-%9 -% -%`)i )D )8)Y )4 )@#)Y #)4 #)L
i 
D 

Y 
SW 


	
&
I 
$ 
> +**;J*G +* +*\\59 \5QU \5~$1$1	$1N*5*5	*5Z11	1<$5$5	$5N11	1>  6->z-J 6 6rY 4 :	r)   