
    _jm                        d dl Z d dlmZmZmZmZ d dlZd dlZd dl	m
Z
mZmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZm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# d d
lm$Z$m%Z%  G d de
e                   Z& G d de
e                   Z'e G d de
e                               Z(e G d de
e                               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/dFdZ0deddfdZ1deddfdZ2deddfd Z3e j4        5                    ee !          dFd"            Z6deddfd#Z7deddfd$Z8deddfd%Z9e j4        5                    ee !          deddfd&            Z:e j4        5                    ee !          deddfd'            Z;dGd(Z<e j4        5                    ee !          deddfd)            Z=deddfd*Z>dGd+Z?deddfd,Z@deddfd-ZAdeddfd.ZBdeddfd/ZCdeddfd0ZDdeddfd1ZEdeddfd2ZFdeddfd3ZGdeddfd4ZHdeddfd5ZIdeddfd6ZJdeddfd7ZKe G d8 d9e
e                               ZLdeddfd:ZMdeddfd;ZNdeddfd<ZOdeddfd=ZPdeddfd>ZQdeddfd?ZR G d@ dAe%          ZSe G dB dCe
e                               ZTdeddfdDZUdeddfdEZVdS )H    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                   &    e Zd ZddZdedefdZdS )LegacyEmbeddingFunctionreturnNc                     d S N selfs    w/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/chromadb/test/configurations/test_collection_configuration.py__init__z LegacyEmbeddingFunction.__init__            inputc                 n    t          t          t          j        ddggt          j                            S N      ?       @dtyper   r   nparrayfloat32r#   r(   s     r$   __call__z LegacyEmbeddingFunction.__call__#   )    J3*RZ H H HIIIr'   r   N)__name__
__module____qualname__r%   r
   r   r4   r!   r'   r$   r   r      sR           Jj JZ J J J J J Jr'   r   c                   B    e Zd ZddZdedefdZedefd            Z	dS )LegacyEmbeddingFunctionWithNamer   Nc                     d S r    r!   r"   s    r$   r%   z(LegacyEmbeddingFunctionWithName.__init__(   r&   r'   r(   c                 n    t          t          t          j        ddggt          j                            S r*   r/   r3   s     r$   r4   z(LegacyEmbeddingFunctionWithName.__call__+   r5   r'   c                      dS )N	legacy_efr!   r!   r'   r$   namez$LegacyEmbeddingFunctionWithName.name.       {r'   r6   )
r7   r8   r9   r%   r
   r   r4   staticmethodstrr@   r!   r'   r$   r;   r;   '   sw           Jj JZ J J J J #    \  r'   r;   c                       e Zd ZddefdZdedefdZede	fd            Z
dee	ef         fdZed	ee	ef         dd fd
            ZdefdZdS )CustomEmbeddingFunction   dimc                     || _         d S r    _dimr#   rG   s     r$   r%   z CustomEmbeddingFunction.__init__5       			r'   r(   r   c                 |    t          t          t          j        dg| j        z  gt          j                            S Nr+   r-   r   r   r0   r1   rJ   r2   r3   s     r$   r4   z CustomEmbeddingFunction.__call__8   /    J3%$)*;)<BJ O O OPPPr'   c                      dS )N	custom_efr!   r!   r'   r$   r@   zCustomEmbeddingFunction.name;   rA   r'   c                     d| j         iS NrG   rI   r"   s    r$   
get_configz"CustomEmbeddingFunction.get_config?       ty!!r'   configc                 .    t          | d                   S NrG   rG   )rE   rW   s    r$   build_from_configz)CustomEmbeddingFunction.build_from_configB   s    &6%=9999r'   c                     dS Nl2r!   r"   s    r$   default_spacez%CustomEmbeddingFunction.default_spaceF       tr'   NrF   r7   r8   r9   intr%   r
   r   r4   rB   rC   r@   r   r   rU   r\   r	   r`   r!   r'   r$   rE   rE   3   s         C    Qj QZ Q Q Q Q #    \"DcN " " " " :$sCx. :5N : : : \:u      r'   rE   c                       e Zd ZddefdZdedefdZede	fd            Z
dee	ef         fdZed	ee	ef         dd fd
            ZdefdZdS )CustomEmbeddingFunction2   rG   c                     || _         d S r    rI   rK   s     r$   r%   z!CustomEmbeddingFunction2.__init__L   rL   r'   r(   r   c                 |    t          t          t          j        dg| j        z  gt          j                            S )Nr,   r-   rO   r3   s     r$   r4   z!CustomEmbeddingFunction2.__call__O   rP   r'   c                      dS )N
custom_ef2r!   r!   r'   r$   r@   zCustomEmbeddingFunction2.nameR   s    |r'   c                     d| j         iS rT   rI   r"   s    r$   rU   z#CustomEmbeddingFunction2.get_configV   rV   r'   rW   c                 .    t          | d                   S rY   )rf   r[   s    r$   r\   z*CustomEmbeddingFunction2.build_from_configY   s    'F5M::::r'   c                     dS r^   r!   r"   s    r$   r`   z&CustomEmbeddingFunction2.default_space]   ra   r'   N)rg   rc   r!   r'   r$   rf   rf   J   s         C    Qj QZ Q Q Q Q #    \"DcN " " " " ;$sCx. ;5O ; ; ; \;u      r'   rf   clientr   c                     |                                   |                     dt                                }t          |j        j                  }|r/t          |t                    r|                    d          }|J nJ d|             | 	                    dt                                }|
                    dgdg	           |                    dgd
          }t          |d                   d
k    sJ dS zETest creating and getting collections with legacy embedding functionstest_legacyr@   embedding_functionrt   NFzconfig: 1testids	documents   query_texts	n_resultsrx   )resetcreate_collectionr   r   _modelconfiguration_json
isinstancedictgetget_collectionaddquerylenro   collrW   efcoll2resultss         r$   test_legacy_embedding_functionr   a   s   
LLNNN ##244 $  D 5T[5STTF **VT** *ZZ,--zzzz))))))) !!244 "  E 
II3%F8I,,,kkvh!k<<Gwu~!######r'   c                     |                                   |                     dt                                }t          |j        j                  }|r/t          |t                    r|                    d          }|J nJ d|             | 	                    dt                                }|
                    dgdg	           |                    dgd
          }t          |d                   d
k    sJ dS rq   )r~   r   r;   r   r   r   r   r   r   r   r   r   r   r   s         r$   (test_legacy_embedding_function_with_namer      s   
LLNNN ##:<< $  D 5T[5STTF **VT** *ZZ,--zzzz))))))) !!:<< "  E 
II3%F8I,,,kkvh!k<<Gwu~!######r'   c                    |                                   dddd}|                     d|          }t          |j        j                  }|rt          |t                    rt          t          |	                    di                     }t          |	                    d                    t          d          k    sJ |	                    d	          dk    sJ |	                    d
          dk    sJ |	                    d          dk    sJ |	                    d          }|J |                                dk    sJ dS dS dS )z5Test creating collections with legacy metadata formatcosine   
   )
hnsw:spacezhnsw:construction_efzhnsw:Mtest_legacy_metadata)r@   metadatahnswspaceef_constructionmax_neighbors	ef_searchd   rt   Ndefault)r~   r   r   r   r   r   r   r   r   r   rC   r@   )ro   legacy_metadatar   rW   hnsw_configr   s         r$   r   r      sf   
LLNNN  # O
 ###  $  D 5T[5STTF 	&*VT** 	&2FJJvr4J4JKK;??7++,,H====011S8888//25555{++s2222ZZ,--~~~wwyyI%%%%	& 	& 	& 	& &%r'   c                 "   |                                   dddddd}|t          d          d	}|                     d
|          }t          |j        j                  }|rt          |t                    rt          t          |
                    di                     }|
                    di           }|
                    d          dk    sJ |
                    d          dk    sJ |
                    d          dk    sJ |J dS dS dS )z7Test creating collections with new configuration formatr   r   r         )r   r   r   r   num_threads   rZ   r   rt   test_new_configr@   configurationr   rt   r   r   r   N)r~   rE   r   r   r   r   r   r   r   r   r   )ro   r   rW   r   loaded_configr   s         r$   test_new_configurationr      sS   
LLNNN , ,K 5!<<<- -F
 ## $  D <& M  M488 2M4E4Efb4Q4QRR3R88w''83333011S8888//25555~~~    ~r'   c                     |                                   t          j        t                    5 }ddd}|                     dd|i           dt          |j                  v sJ 	 ddd           dS # 1 swxY w Y   dS )	z)Test validation of invalid configurationsr   )r   r   test_invalidr   r   zinvalid valueN)r~   pytestraises	Exceptionr   rC   value)ro   excinfoinvalid_hnsws      r$   test_invalid_configurationsr      s    
LLNNN 
y	!	! 
5W!1
 1
 	  !<0 	! 	
 	
 	

 #gm"4"444444
5 
5 
5 
5 
5 
5 
5 
5 
5 
5 
5 
5 
5 
5 
5 
5 
5 
5s   7A33A7:A7c                    |                                   dddd}|                     dd|i          }dd	d
}d|i}|                    |           |j        }|rt	          |t
                    r|                    di           }t	          |t
                    rl|                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                     d          }|j        }|rt	          |t
                    r|                    di           }t	          |t
                    rp|                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ dS dS dS dS )'Test updating collection configurationsr   rz   r   r   r   r   test_updatesr   r   r   r   )r   r   r   r   r   r   r   r      r@   Nr~   r   modifyr   r   r   r   r   )ro   initial_hnswr   update_hnswupdate_configr   r   s          r$   test_hnsw_configuration_updatesr      s=   
LLNNN - -L
 ##|, $  D , ,K
 	4M 	KKmK,,, +M :M488 :#''33k4(( 	:??;//25555??7++x7777??#455<<<<???33r9999  n 55D+M :M488 :#''33k4(( 	:??;//25555??7++x7777??#455<<<<???33r9999: : : :	: 	: :9r'   client_factoriesr   c                    |                                  }|                                 dddd}|t          d          d}|                    d|	           |                                  }|                    d
          }t          |j        j                  }|rt          |t                    rt          t          |                    di                     }|                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          }|J |                                dk    sJ dS dS dS )z5Test configuration persistence across client restartsr   r   r   )r   r   r   r   rZ   r   test_persist_configr   r   r   r   r   r   r   rt   NrR   )create_client_from_systemr~   rE   r   r   r   r   r   r   r   r   r   r   r@   )r   ro   r   rW   client2r   r   r   s           r$   test_configuration_persistencer     s    7799F
LLNNN , ,K 5!<<<- -F
 "     88::G!!" "  D <& M  	(M488 	(2M4E4Efb4Q4QRRw''83333011S8888//25555{++s2222344~~~wwyyK''''	( 	( 	( 	( ('r'   c                 :   |                                   dddd}|                     dd|i          }|j        j        J |j        j                            d          }|J |                    d	          dk    sJ |                    d
          dk    sJ dS )r   r   r   r   r   r   r   r   Nr   r   )r~   r   r   r   r   )ro   r   r   r   s       r$    test_configuration_result_formatr   J  s    
LLNNN - -L
 ##|, $  D
 ;)555+044V<<K"""??;''2----??7##x//////r'   c                    |                                   i }|t          d          d}t          r|                     d|          }t	          |j        j                  }|rt          |t                    rt          t          |                    di                     }|                    d          }|                    d          d	k    sJ |                    d
          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |J dS dS dS |                     d|          }t	          |j        j                  }|rt          |t                    rt          t          |                    di                     }|                    d          }|                    d          d	k    sJ |                    d
          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |J dS dS dS )9Test creating collections with SPANN configuration formatr   rZ   spannrt   test_spann_configr   r   rt   r   r_   r   r   r   r   r   Nr   r   @   search_nprobe   write_nprober~   rE   r   r   r   r   r   r   r   r   r   r   r   ro   spann_configrW   r   r   hnsw_config_loadedr   spann_config_loadeds           r$   test_empty_spann_configurationr   a  s   
LLNNN .0L5!<<<- -F
  )"''$  ( 
 
 @K*
 
  		"Zt<< 		"!%'):):62)F)F" " ""#788B%))'22d::::%))*;<<CCCC%))+66#====%))/::b@@@@>>>		" 		" 		" 		" ">''$  ( 
 
 @K*
 
  	"Zt<< 	""&(-*;*;GR*H*H# # ""#788B&**733t;;;;&**+<==DDDD&**;773>>>>&**?;;rAAAA&**?;;sBBBB&**>::cAAAA>>>	" 	" 	" 	" ">r'   c                    |                                   ddddddd}|t          d          d}t          r|                     d	|
          }t	          |j        j                  }|rt          |t                    rt          t          |                    di                     }|                    d          }|                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |J dS dS dS |                     d	|
          }t	          |j        j                  }|rt          |t                    rt          t          |                    di                     }|                    d          }|                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |J dS dS dS )r   r   r   r   r   r   )r   r   r   r   r   r   rZ   r   r   r   r   rt   r   r   r   r   r   Nr   r   r   r   r   r   s           r$   test_spann_configurationr     s   
LLNNN . .L 5!<<<- -F
  )"''$  ( 
 
 @K*
 
  		"Zt<< 		"!%'):):62)F)F" " ""#788B%))'22h>>>>%))*;<<CCCC%))+66#====%))/::b@@@@>>>		" 		" 		" 		" ">''$  ( 
 
 @K*
 
  	"Zt<< 	""&(-*;*;GR*H*H# # ""#788B&**733x????&**+<==DDDD&**;773>>>>&**?;;rAAAA&**?;;q@@@@&**>::b@@@@>>>	" 	" 	" 	" ">r'   )reasonc                    |                                  }|                                 dddddd}|t          d          d}|                    d|	           |                                  }|                    d
          }t          |j        j                  }|rt          |t                    rt          t          |                    di                     }|                    d          }|                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |J dS dS dS )z;Test SPANN configuration persistence across client restartsr   r   r   r   )r   r   r   r   r   rZ   r   test_persist_spann_configr   r   r   rt   r   r   r   r   r   N)r   r~   rE   r   r   r   r   r   r   r   r   r   r   )r   ro   r   rW   r   r   r   r   s           r$   $test_spann_configuration_persistencer     s    7799F
LLNNN . .L 5!<<<- -F
 (    
 88::G!!( "  D <& M  M488 4m6G6GQS6T6TUU344((H4444 122c999900B666600A5555//25555~~~    ~r'   c                     |                                   ddd}ddd}t          j        t          d          5  |                     d||d	
           ddd           dS # 1 swxY w Y   dS )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   )ro   r   r   s      r$   'test_exclusive_hnsw_spann_configurationr     s    
LLNNN , ,K
 . .L 
z)Q	R	R	R 
 
  ##%  	! 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   A""A&)A&c                    |                                   ddi}d|i}t          r|                     d|          }t          |j        j                  }|rt          |t                    rt          t          |
                    di                     }|
                    d          dk    sJ |
                    d          dk    sJ |
                    d	          dk    sJ |
                    d
          dk    sJ |
                    d          }|J |                                dk    sJ dS dS dS |                     d|          }t          |j        j                  }|rt          |t                    r t          t          |
                    di                     }|
                    d          dk    sJ |
                    d          dk    sJ |
                    d
          dk    sJ |
                    d	          dk    sJ |
                    d          dk    sJ |
                    d          dk    sJ |
                    d          }|J |                                dk    sJ dS dS dS )z,Test the default values for SPANN parametersr   r   r   test_spann_defaultsr   r   r   r   r   r   r   rt   Nr   r   r   r   r   )r~   r   r   r   r   r   r   r   r   r   r   r@   r   r   s           r$   test_spann_default_parametersr     s	   
LLNNN 	.L 	-F  -*''&  ( 
 
 @K*
 
  	*Zt<< 	*!%'):):62)F)F" " &))'22h>>>>%))*;<<CCCC%))+66#====%))/::b@@@@""#788B>>>7799	))))	* 	* 	* 	* *)''&  ( 
 
 @K*
 
  	*Zt<< 	*"&(-*;*;GR*H*H# # '**733x????&**+<==DDDD&**?;;rAAAA&**;773>>>>&**?;;sBBBB&**>::cAAAA""#788B>>>7799	))))	* 	* 	* 	* *)r'   c                 L   |                                   d}t          t          j        |                    }i }|                    d          +t          t          |                    d                    |d<   |                    d          |                    d          |d<   t          r|                     d|          }t          |j	        j
                  }|rt          |t                    rt          t          |                    di                     }|                    d          }|                    d          d	k    sJ |                    d
          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |J dS dS dS |                     d|          }t          |j	        j
                  }|rt          |t                    rt          t          |                    di                     }|                    d          d	k    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d
          dk    sJ |                    d          dk    sJ dS dS dS )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   Nrt   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   )	ro   config_jsoncollection_configcreate_configr   r   r   r   r   s	            r$   test_spann_json_serializationr   X  s   
LLNNNK( @
;@W@WXX 46MW%%1!%$&7&;&;G&D&D"
 "
g 122>.?.C.C /
 /
*+  '?''"' ( 
 
 @K*
 
  		"Zt<< 		"!%'):):62)F)F" " ""#788B%))'22h>>>>%))*;<<CCCC%))+66#====%))/::b@@@@>>>		" 		" 		" 		" "> ''"' ( 
 
 @K*
 
  	?Zt<< 	?"&(-*;*;GR*H*H# # '**733x????&**?;;q@@@@&**>::b@@@@&**+<==DDDD&**;773>>>>	? 	? 	? 	? ?>r'   c                 H   |                                   dddd}|                     dd|i          }dd	d
}d|i}|                    |           |j        }|rt	          |t
                    r||                    di           }t	          |t
                    rQ|                    d          dk    sJ |                    d          d	k    sJ |                    d          dk    sJ |                     d          }|j        }|rt	          |t
                    r~|                    di           }t	          |t
                    rU|                    d          dk    sJ |                    d          d	k    sJ |                    d          dk    sJ dS dS dS dS )z-Test updating SPANN collection configurationsr   r   r   )r   r   r   test_spann_updatesr   r   r   r   )r   r   r   r   r   r   Nr   )ro   initial_spannr   update_spannr   r   r   s          r$    test_configuration_spann_updatesr     s    LLNNN / /M
 ##!. $  D . .L
 	4M 	KKmK,,, +M 9M488 9$(("55lD)) 	9##K00C7777##O44::::##G,,8888  !566D+M 9M488 9$(("55lD)) 	9##K00C7777##O44::::##G,,88889 9 9 9	9 	9 98r'   c                    |                                   ddddddd}|                     dd	|i
          }t          t          dd                    }|                    |           |j        }|rt          |t                    r|                    d	i           }t          |t                    r|                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ | 	                    d          }|j        }|rt          |t                    r|                    d	i           }t          |t                    r|                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ dS dS dS dS )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   )ro   r   r   r   r   r   s         r$   test_spann_update_from_jsonr     s    LLNNN / /M ##%. $  D
 2&
 
 
  M 	KKmK,,, +M :M488 :$(("55lD)) 		:##K00C7777##O44::::  ##G,,8888##$566#====##O44::::##N33r9999  !9::D+M :M488 :$(("55lD)) 		:##K00C7777##O44::::  ##G,,8888##$566#====##O44::::##N33r9999: : : :		: 		: :9r'   c                     ddddddd} dd	d
}t          | |          }|                    d          dk    sJ |                    d          d	k    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ dS )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?MRRN o.."4444k**c1111 g&&(2222n--3333/00C7777o.."444444r'   c                    |                                   ddd}|                     dd|i          }ddi}d	d
i}||d}t          j        t                    5  |                    |           ddd           dS # 1 swxY w Y   dS )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   )ro   r   r   r   r   r   s         r$   .test_exclusive_update_hnsw_spann_configurationr  2  s    LLNNN - -L ##$|, $  D 	R,K 	.L 4 4M 
z	"	" 1 1-0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s   A==BBc                 x   |                                   |                     d          }|J |j        J t          |j                  }|J |                    d          }|J |                    d          dk    sJ |                    d          dk    sJ |                    d	          d
k    sJ |                    d          dk    sJ |                    d          dk    sJ |                    d          J |                    d          }|J |                                dk    sJ dS )z.Test creating a collection with default valuestest_default_creationr   Nr   r   r_   r   r   r   r   r   sync_threshold  r   rt   r   )r~   r   r   r   r   r@   )ro   r   rW   r   r   s        r$    test_default_collection_creationr	  R  s_   
LLNNN##)@#AAD"...4T5LMMF**V$$K"""??7##t++++??,--4444???++r1111??;''3....??+,,4444::g&&&	(	)	)B>>>7799	!!!!!!r'   c                      dddddddddd	i d
d} t          j        t                    5  t          |            ddd           dS # 1 swxY w Y   dS )z9Test that on an invalid configuration, an error is raisedr_   r   r   g333333?r  )r   r   r   r   resize_factorr  NrR   knownr@   typerW   r   r   rt   )r   r   r   r   )invalid_configs    r$   test_invalid_configurationr  k  s     " "
 
 
 
& &N  
z	"	" @ @/???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s   AAAc           
      (   |                                   |                     d          }dddi di}t          |j        d|ddd|j        |j        	          }|J |j        dk    sJ |j        |k    sJ ||_        t          j
        t                    5  |                    d
gdg           ddd           n# 1 swxY w Y   t          j
        t                    5  |                    dgd           ddd           dS # 1 swxY w Y   dS )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   rt   rR   r  r  test_invalid_config_collectionNidr@   r   serialized_schemar   	dimensiontenantdatabaseru   rv   rw   rz   r{   )r~   r   CollectionModelr  r  r  r@   r   r   r   r   r   r   r   )ro   r   invalid_config_jsoninvalid_collections       r$   /test_collection_load_with_invalid_configurationr    s   
 LLNNN ##)>#??D 	
 
 )7-.{	 	 	 )))"&FFFFF04GGGGG$DK	z	"	" 0 0cUvh///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
z	"	" 6 6

x1
5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s$   B==CC!DDDc                    |                                   dt          d          i}|                     d|          }|j        }|j        }d|v sJ |                    d          }|                    d          }|J |J |                    d          dk    sJ |                    d	          d
k    sJ |                                d
k    sJ |                                |                    d          k    sJ dS )zHTest that configuration_json and configuration properties are consistentrt      rZ   test_config_consistencyr   Nr  r  r@   rR   rW   )r~   rE   r   r   r   r   r@   rU   )ro   rW   r   r   config_processedef_jsonef_processeds          r$   =test_configuration_json_vs_configuration_property_consistencyr%    s7    LLNNN 	5!<<<-F ##& $  D )K);.... oo233G#''(<==L###;;v'))));;v+----+----""$$H(=(=======r'   c                    |                                   |                     d          }|j        }|j        }d|v sJ |                    d          }|                    d          }|J |J |                    d          dk    sJ |                    d          dk    sJ |                                dk    sJ dS )	zPTest that default configuration_json and configuration properties are consistenttest_default_config_consistencyr   rt   Nr  r  r@   r   )r~   r   r   r   r   r@   )ro   r   r   r"  r#  r$  s         r$   Etest_default_configuration_json_vs_configuration_property_consistencyr(    s     LLNNN ##)J#KKD )K);.... oo233G#''(<==L###;;v'))));;v)++++)++++++r'   c                 6   |                                   |                     d          }dddi diddddid	id
did
diddidg}t          |          D ]\  }}t          |j        d| |ddd|j        |j                  }||_        |j        |j        k    sJ |j        d| k    sJ |j	        |k    sJ t          j        t                    5  |j         ddd           n# 1 swxY w Y   t          j        t                    5  |                    dgdg           ddd           n# 1 swxY w Y   t          j        t                    5  |                    dgd           ddd           n# 1 swxY w Y   t          j        t                    5  |                    dgdg           ddd           n# 1 swxY w Y   t          j        t                    5  |                    dg           ddd           n# 1 swxY w Y   dS )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   rt   nonexistent_efr  r  rG   rF   )r  rW   r   r_   r   r  legacyr  test_invalid_config_Nr  ru   rv   rw   rz   r{   )r~   r   	enumerater  r  r  r  r   r@   r   r   r   r   r   r   r   upsert_embed)ro   r   invalid_configsir  invalid_collection_models         r$   9test_invalid_configuration_operations_succeed_until_embedr4    s    LLNNN ##)B#CCD !(# #	
 ! !*# #	
 dOx(#)8"4	
 	
%-O2 '77 !" !">#2w+++-";]	$
 	$
 	$
  / w255555y61666666&.8888]:&& 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]:&& 	4 	4HH#6(H333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 ]:&& 	: 	:JJF8qJ999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: ]:&& 	7 	7KKSEfXK666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 ]:&& 	" 	"KK!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"A!" !"sZ   C((C,	/C,	D22D6	9D6	E;;E?	E?	GG		G		)HH	H	c                 >   |                                   |                     ddt          d          i          }dddddid	i}||j        _        |j        dk    sJ |j        J |j        |k    sJ |j        J |j        J t          j
        t                    5  |                    dgdg           d
d
d
           n# 1 swxY w Y   t          j
        t                    5  |                    dgd           d
d
d
           n# 1 swxY w Y   t          j
        t                    5  |                    dgdg           d
d
d
           n# 1 swxY w Y   t          j
        t                    5  |j        }d
d
d
           d
S # 1 swxY w Y   d
S )zv
    Test that get_collection works even with invalid configurations,
    but operations that require _embed fail
    test_get_invalidrt   rg   rZ   r   nonexistent_functionr  rG   r  Nrv   ztest docrw   rz   r{   )r~   r   rE   r   r   r@   r  r  r  r   r   r   r   r   r/  r   )ro   
valid_collr  _s       r$   .test_get_collection_with_invalid_configurationr:  2  s   
 LLNNN ))+-D-K-K-KL *  J 	*aj
 
N ,:J( ?00000=$$$(N::::(((*** 
z	"	" = =F8
|<<<= = = = = = = = = = = = = = = 
z	"	" < <fX;;;< < < < < < < < < < < < < < < 
z	"	" @ @vh:,???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 
z	"	" % %$% % % % % % % % % % % % % % % % % %sH    CC
C
*DDD3EE E=FFFc                    |                                   |                     dt          d                    }|J |j                            d          }|J |                                dk    sJ |                                ddik    sJ |                     dt          d                    }|J |j                            d          }|J |                                dk    sJ |                                ddik    sJ |                     d	          }|j                            d          }|J |                                dk    sJ |                                ddik    sJ dS )
z0Test creating a collection with no EF in config.test_no_configrF   rZ   rs   Nrt   rR   rG   r   	r~   r   rE   r   r   r@   rU   get_or_create_collectionr   ro   r   r   s      r$   test_ef_no_configr@  b  s   
LLNNN##2Ia2P2P2P $  D 				 4	5	5B>>>7799####==??uaj((((**2Ia2P2P2P +  D 				 4	5	5B>>>7799####==??uaj((((  &6 77D				 4	5	5B>>>7799####==??uaj((((((r'   c                 
   |                                   |                     dt          d          dddii          }|J |j                            d	          }|J |                                d
k    sJ |                                ddik    sJ |                     dt          d          dddii          }|J |j                            d	          }|J |                                d
k    sJ |                                ddik    sJ |                     d          }|j                            d	          }|J |                                d
k    sJ |                                ddik    sJ dS )zATest creating a collection with EF in parameter, no EF in config. test_ef_with_config_exists_no_efrF   rZ   r   r   r   r@   rt   r   Nrt   rR   rG   r   r=  r?  s      r$   rB  rB  ~  s   
LLNNN##/2q99923 $  D
 				 4	5	5B>>>7799####==??uaj((((**/2q99923 +  D
 				 4	5	5B>>>7799####==??uaj((((  &H IID				 4	5	5B>>>7799####==??uaj((((((r'   c                 F   |                                   |                     dt          d          ddit          d          d          }|J |j                            d	          }|J |                                d
k    sJ |                                ddik    sJ |                     dt          d          ddit          d          d          }|J |j                            d	          }|J |                                d
k    sJ |                                ddik    sJ |                     d          }|j                            d	          }|J |                                d
k    sJ |                                ddik    sJ dS )zQTest creating a collection with EF in parameter, EF in config. They are the same."test_ef_with_config_exists_with_efrF   rZ   r   r   r   rC  Nrt   rR   rG   r   r=  r?  s      r$   (test_ef_with_config_exists_with_ef_validrF    s   
LLNNN##12q999h'"9a"@"@"@
 
 $  D 				 4	5	5B>>>7799####==??uaj((((**12q999h'"9a"@"@"@
 
 +  D 				 4	5	5B>>>7799####==??uaj((((  &J KKD				 4	5	5B>>>7799####==??uaj((((((r'   c           	         |                                   t          j        t                    5  |                     dt          d          ddit          d          d           ddd           dS # 1 swxY w Y   dS )	zRTest creating a collection with EF in parameter, EF in config. They are different.rE  rF   rZ   r   r   r   rC  N)r~   r   r   r   r   rE   rf   ro   s    r$   1test_create_ef_with_config_exists_with_ef_invalidrI    s    
LLNNN	z	"	" 
 
  561=== (+&>1&E&E&E  	! 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
   :A55A9<A9c           	         |                                   t          j        t                    5  |                     dt          d          ddit          d          d           ddd           dS # 1 swxY w Y   dS )	zJTest get_or_create with EF in parameter, EF in config. They are different.rE  rF   rZ   r   r   r   rC  N)r~   r   r   r   r>  rE   rf   rH  s    r$   8test_get_or_create_ef_with_config_exists_with_ef_invalidrL    s    
LLNNN	z	"	" 
 
''561=== (+&>1&E&E&E  	( 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
rJ  c                 0   |                                   |                     dddit          d          d           t          j        t
                    5  |                     dt          d                     d	d	d	           d	S # 1 swxY w Y   d	S )
zKTest get_collection with EF in parameter, EF in config. They are different.rE  r   r   rF   rZ   r   r   rs   N)r~   r   rf   r   r   r   r   rE   rH  s    r$   9test_get_collection_ef_with_config_exists_with_ef_invalidrN    s     LLNNN
1h'":q"A"A"A
 
     
z	"	" 
 
561=== 	 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   &BBBc           	         |                                   |                     dt          d                    }|J |j                            d          }|J |                                dk    sJ |                                ddik    sJ t          j        t                    5  | 
                    dt          d          dt          d          i	           ddd           n# 1 swxY w Y   t          j        t                    5  | 
                    dt          d                     ddd           dS # 1 swxY w Y   dS )
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_efrF   rZ   rs   Nrt   rR   rG   rC  )r~   r   rE   r   r   r@   rU   r   r   r   r>  rf   r?  s      r$   rP  rP    s    LLNNN##62q999 $  D 				 4	5	5B>>>7799####==??uaj((((	z	"	" 
 
'':7A>>>/1HQ1O1O1OP 	( 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
z	"	" 
 
'':7A>>> 	( 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s$   +7C..C25C2&EE	E	c                       e Zd ZddedefdZdedefdZe	defd            Z
deeef         fd	Ze	d
eeef         dd fd            ZdefdZdee         fdZdS )#DefaultSpaceCustomEmbeddingFunctionrF   
model_namerG   c                 "    || _         || _        d S r    )rJ   _model_name)r#   rS  rG   s      r$   r%   z,DefaultSpaceCustomEmbeddingFunction.__init__  s    	%r'   r(   r   c                 |    t          t          t          j        dg| j        z  gt          j                            S rN   rO   r3   s     r$   r4   z,DefaultSpaceCustomEmbeddingFunction.__call__  rP   r'   c                      dS )Ndefault_space_custom_efr!   r!   r'   r$   r@   z(DefaultSpaceCustomEmbeddingFunction.name  s    ((r'   c                      | j         | j        dS )NrS  rG   )rU  rJ   r"   s    r$   rU   z.DefaultSpaceCustomEmbeddingFunction.get_config  s    ".tyAAAr'   rW   c                 <    t          | d         | d                   S )NrS  rG   rZ  )rR  r[   s    r$   r\   z5DefaultSpaceCustomEmbeddingFunction.build_from_config"  s)     3l+
 
 
 	
r'   c                 T    | j         dk    rdS | j         dk    rdS | j         dk    rdS dS )Ni_want_cosiner   	i_want_l2r_   	i_want_ipiprU  r"   s    r$   r`   z1DefaultSpaceCustomEmbeddingFunction.default_space*  s@    ..8,,4,,48r'   c                 |    | j         dk    rdgS | j         dk    rdgS | j         dk    rdgS | j         dk    rg dS g dS )	Nr]  r   r^  r_   r_  r`  i_want_anythingr   r_   r`  ra  r"   s    r$   supported_spacesz4DefaultSpaceCustomEmbeddingFunction.supported_spaces4  si    ..:,,6M,,6M!222))))))))r'   Nrb   )r7   r8   r9   rC   rd   r%   r
   r   r4   rB   r@   r   r   rU   r\   r	   r`   r   re  r!   r'   r$   rR  rR    s$       & &3 &S & & & &Qj QZ Q Q Q Q )# ) ) ) \)BDcN B B B B 
S#X
	.
 
 
 \
u    
*$u+ 
* 
* 
* 
* 
* 
*r'   rR  c                 	   |                                   |                     dt          dd                    }|J |j                            d          }|J |                                dk    sJ |                                dddk    sJ |                                dk    sJ |                                dgk    sJ t          r:|j                            d	          }|J |                    d
          dk    sJ n9|j                            d          }|J |                    d
          dk    sJ | 
                    dt          dd                    }|J |j                            d          }|J |                                dk    sJ |                                dddk    sJ |                                dk    sJ |                                dgk    sJ t          r:|j                            d	          }|J |                    d
          dk    sJ n9|j                            d          }|J |                    d
          dk    sJ | 
                    dt          dd                    }|J |j                            d          }|J |                                dk    sJ |                                dddk    sJ |                                dk    sJ |                                dgk    sJ t          r:|j                            d	          }|J |                    d
          dk    sJ n9|j                            d          }|J |                    d
          dk    sJ | 
                    dt          dd                    }|J |j                            d          }|J |                                dk    sJ |                                dddk    sJ |                                dk    sJ |                                g dk    sJ t          r;|j                            d	          }|J |                    d
          dk    sJ d S |j                            d          }|J |                    d
          dk    sJ d S )N,test_default_space_custom_embedding_functionr]  rF   rZ  rs   rt   rX  r   r   r   r   /test_default_space_custom_embedding_function_l2r^  r_   /test_default_space_custom_embedding_function_ipr_  r`  5test_default_space_custom_embedding_function_anythingrc  rd  )r~   r   rR  r   r   r@   rU   r`   re  r   r>  ro   r   r   r   r   s        r$   6test_default_space_custom_embedding_function_no_configrl  A  s   
LLNNN##;>&A
 
 
 $  D 				 4	5	5B>>>779911111==??_QGGGGGG))))  XJ.... 5(,,V44&&&w''833333)--g66'''((H4444**>>"
 
 
 +  D 				 4	5	5B>>>779911111==??[CCCCCC%%%%  TF**** 1(,,V44&&&w''4/////)--g66'''((D0000**>>"
 
 
 +  D 				 4	5	5B>>>779911111==??[CCCCCC%%%%  TF**** 1(,,V44&&&w''4/////)--g66'''((D0000**D>(a
 
 
 +  D 				 4	5	5B>>>779911111==??->qIIIIII))))  $:$:$::::: 5(,,V44&&&w''8333333)--g66'''((H444444r'   c                    |                                   t          r,|                     dt          dd          dddii          }n+|                     dt          dd          d	ddii          }|J |j                            d
          }|J |                                dk    sJ |                                dddk    sJ |                                dk    sJ |	                                g dk    sJ t          r;|j                            d          }|J |                    d          dk    sJ d S |j                            d	          }|J |                    d          dk    sJ d S )N>test_default_space_custom_embedding_function_with_valid_configrc  rF   rZ  r   r   r_   rC  r   rt   rX  r   rd  )
r~   r   r   rR  r   r   r@   rU   r`   re  rk  s        r$   rn  rn    s    LLNNN 
''QB,!      "GT?3 ( 
 
 ''QB,!      #WdO4 ( 
 
 				 4	5	5B>>>779911111==??->qIIIIII))))  $:$:$::::: 1(,,V44&&&w''4//////)--g66'''((D000000r'   c                 R   |                                   t          j        d          5 }t          j        d           t          r,|                     dt          dd          dd	d
ii          }n+|                     dt          dd          dd	d
ii          }t          |          dk    sJ d |D             }t          d |D                       sJ |J |j	        
                    d          }|J |                                dk    sJ t          r:|j	        
                    d          }|J |
                    d	          d
k    sJ n9|j	        
                    d          }|J |
                    d	          d
k    sJ d d d            d S # 1 swxY w Y   d S )NTrecordalways@test_default_space_custom_embedding_function_with_invalid_configr]  rF   rZ  r   r   r_   rC  r   r   c                 6    g | ]}t          |j                  S r!   rC   message.0warnings     r$   
<listcomp>zTtest_default_space_custom_embedding_function_with_invalid_config.<locals>.<listcomp>  "    BBBWC00BBBr'   c              3   B   K   | ]}d |                                 v V  dS zspace l2 is not supportedNlowerrx  msgs     r$   	<genexpr>zStest_default_space_custom_embedding_function_with_invalid_config.<locals>.<genexpr>  A       
 
;>'399;;6
 
 
 
 
 
r'   rt   rX  )r~   warningscatch_warningssimplefilterr   r>  rR  r   anyr   r   r@   ro   wr   warning_messagesr   r   r   s          r$   rs  rs    s\    LLNNN		 	-	-	- &5h'''! 	22W#F.A$ $ $  &7 3  DD 22W#F.A$ $ $  '$8 3  D 1vvzzzzBBBBB 
 
BR
 
 
 
 
 	
 	
 	
 ##$899~~~wwyy55555! 	5,0088K***??7++t33333-11'::L+++##G,,4444M&5 &5 &5 &5 &5 &5 &5 &5 &5 &5 &5 &5 &5 &5 &5 &5 &5 &5s   E%FF #F c                    |                                   |                     dt          dd          ddi          }|J |j                            d          }|J |                                d	k    sJ |                                dddk    sJ |                                d
k    sJ |                                g dk    sJ t          r;|j                            d          }|J |                    d          dk    sJ d S |j                            d          }|J |                    d          dk    sJ d S )N:test_default_space_custom_embedding_function_with_metadatarc  rF   rZ  r   r`  r@   rt   r   rt   rX  r   rd  r   r   r   
r~   r   rR  r   r   r@   rU   r`   re  r   rk  s        r$   r  r    s    LLNNN##I>(a
 
 
 % $  D 				 4	5	5B>>>779911111==??->qIIIIII))))  $:$:$::::: 1(,,V44&&&w''4//////)--g66'''((D000000r'   c                    |                                   t          j        d          5 }t          j        d           |                     dt          dd          dd	i
          }t          |          dk    sJ d |D             }t          d |D                       sJ |J |j        	                    d          }|J |
                                dk    sJ |                                dddk    sJ |                                dk    sJ |                                dgk    sJ t          r:|j        	                    d          }|J |	                    d          d	k    sJ n9|j        	                    d          }|J |	                    d          d	k    sJ d d d            d S # 1 swxY w Y   d S )NTrp  rr  Btest_default_space_custom_embedding_function_with_invalid_metadatar]  rF   rZ  r   r_   r  r   c                 6    g | ]}t          |j                  S r!   ru  rw  s     r$   rz  zVtest_default_space_custom_embedding_function_with_invalid_metadata.<locals>.<listcomp>"  r{  r'   c              3   B   K   | ]}d |                                 v V  dS r}  r~  r  s     r$   r  zUtest_default_space_custom_embedding_function_with_invalid_metadata.<locals>.<genexpr>#  r  r'   rt   rX  r   r   r   r   )r~   r  r  r  r   rR  r   r  r   r   r@   rU   r`   re  r   r  s          r$   r  r    sg    LLNNN		 	-	-	-  5h'''''UB*      #D) ( 
 
 1vvzzzzBBBBB 
 
BR
 
 
 
 
 	
 	
 	
 ##$899~~~wwyy55555}}"K"KKKKK!!X----""$$
2222! 	5,0088K***??7++t33333-11'::L+++##G,,4444A 5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5s   FF99F= F=c                    |                                   |                     ddddiit          dd          dd	i
          }|J |j                            d          }|J |                                dk    sJ |                                dddk    sJ |                                dk    sJ |                                g dk    sJ t          r;|j                            d          }|J |                    d          dk    sJ d S |j                            d          }|J |                    d          dk    sJ d S )NEtest_default_space_custom_embedding_function_with_metadata_and_configr   r   r`  rc  rF   rZ  r   r_   )r@   r   rt   r   rt   rX  r   rd  r   r  rk  s        r$   r  r  9  s    LLNNN##T/>(a
 
 
 % $  D 				 4	5	5B>>>779911111==??->qIIIIII))))  $:$:$::::: 1(,,V44&&&w''4//////)--g66'''((D000000r'   c                       e Zd ZU eed<   dS )"CustomEmbeddingFunctionQueryConfigtaskN)r7   r8   r9   rC   __annotations__r!   r'   r$   r  r  X  s         
IIIIIr'   r  c            
           e Zd Z	 	 ddedededee         fdZded	e	fd
Z
ded	e	fdZed	efd            Zd	eeef         fdZedeeef         d	d fd            Zd	efdZd	ee         fdZdS )&CustomEmbeddingFunctionWithQueryConfigrF   Nr  rS  rG   query_configc                 >    || _         || _        || _        || _        d S r    )rJ   rU  _task_query_config)r#   r  rS  rG   r  s        r$   r%   z/CustomEmbeddingFunctionWithQueryConfig.__init__^  s(     	%
)r'   r(   r   c                 |    t          t          t          j        dg| j        z  gt          j                            S rN   rO   r3   s     r$   r4   z/CustomEmbeddingFunctionWithQueryConfig.__call__j  rP   r'   c                     | j         [| j                             d          dk    r=t          t          t	          j        dg| j        z  gt          j                            S |                     |          S )Nr  r   r,   r-   )	r  r   r   r   r0   r1   rJ   r2   r4   r3   s     r$   embed_queryz2CustomEmbeddingFunctionWithQueryConfig.embed_querym  sf    )d.@.D.DV.L.LPW.W.W
BHsedi.?-@
$S$S$STTT=='''r'   c                      dS )Ncustom_ef_with_query_configr!   r!   r'   r$   r@   z+CustomEmbeddingFunctionWithQueryConfig.names  s    ,,r'   c                 8    | j         | j        | j        | j        dS )NrS  rG   r  r  )rU  rJ   r  r  r"   s    r$   rU   z1CustomEmbeddingFunctionWithQueryConfig.get_configw  s'    *9J .	
 
 	
r'   rW   c                     |                      d          }|                      d          }|                      d          }|                      d          }||
J d            t          ||||          S )NrS  rG   r  r  FzThis code should not be reachedr  )r   r  )rW   rS  rG   r  r  s        r$   r\   z8CustomEmbeddingFunctionWithQueryConfig.build_from_config  s     ZZ--
jjzz&!!zz.11;;;;;5!sL
 
 
 	
r'   c                     dS Nr   r!   r"   s    r$   r`   z4CustomEmbeddingFunctionWithQueryConfig.default_space  s    xr'   c                     dgS r  r!   r"   s    r$   re  z7CustomEmbeddingFunctionWithQueryConfig.supported_spaces  s
    zr'   )rF   N)r7   r8   r9   rC   rd   r   r  r%   r
   r   r4   r  rB   r@   r   r   rU   r\   r	   r`   r   re  r!   r'   r$   r  r  \  sg        EI
* 
*
* 
* 	
*
 AB
* 
* 
* 
*Qj QZ Q Q Q Q( (
 ( ( ( ( -# - - - \-
DcN 
 
 
 
 
S#X
	1
 
 
 \
u    $u+      r'   r  c           
      >   |                                   |                     dt          dddddi                    }|J |j                            d	          }|J |                                d
k    sJ |                                dddddidk    sJ |                                dk    sJ |                                dgk    sJ t          j
        |                    d          t          j        g dgt          j                            sJ d S )N0test_custom_embedding_function_with_query_configdocumentrc  rF   r  r   )r  rS  rG   r  rs   rt   r  r  r   How many people in Berlin?r(   )r,   r,   r,   r-   )r~   r   r  r   r   r@   rU   r`   re  r0   array_equalr  r1   r2   r?  s      r$   r  r    sd   
LLNNN##?A( '*	
 
 
 $  D 				 4	5	5B>>>779955555==??')	      ))))  XJ....>
9::
///""*555      r'   c                    d}t          t          j        |                    }|J |                    d          J |                    d          }|J |                                dddd dk    sJ |                                dk    sJ |                                dgk    sJ t          j        |	                    d	          t          j
        g d
gt          j                            sJ d S )Nz
    {
        "embedding_function": {
            "type": "known",
            "name": "custom_ef_with_query_config",
            "config": {"model_name": "i_want_anything", "dim": 3, "task": "document"}
        }
    }
    rt   rc  rF   r  r  r   r  r  )r+   r+   r+   r-   )r   r   r   r   rU   r`   re  r0   r  r  r1   r2   )ro   json_stringrW   r   s       r$   Ntest_deserializing_custom_embedding_function_with_query_config_no_query_configr    s*   K 5TZ5L5LMMF::*++777	(	)	)B>>>==??'	      ))))  XJ....>
9::
///""*555      r'   )r   r   r   Nr6   )Wr   typingr   r   r   r   numpyr0   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   r  r   r   r   r;   rE   rf   r   r   r   r   r   r   r   r   r   r   markskipifr   r   r   r   r   r   r  r  r	  r  r  r%  r(  r4  r:  r@  rB  rF  rI  rL  rN  rP  rR  rl  rn  rs  r  r  r  r  r  r  r  r!   r'   r$   <module>r     s    ( ( ( ( ( ( ( ( ( ( ( (                 # " " " " "
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  J J J J J J 2 2 2 2 2 2 U U U U U U U U 8 8 8 8 8 8 & & & & & & & &J J J J J/
; J J J	 	 	 	 	&7
&C 	 	 	     /
;   ,     0<   ,$9 $ $ $ $ $<$Y $4 $ $ $ $<& &t & & & &: 9          F5	 5d 5 5 5 5$,:I ,:$ ,: ,: ,: ,:^)( )( )( )(X0Y 04 0 0 0 0.4"9 4" 4" 4" 4" 4"n;"Y ;"4 ;" ;" ;" ;"| *3MNN( ( ( ON(V
I 
$ 
 
 
 
49*) 9* 9* 9* 9* 9*xM?) M? M? M? M? M?` *3MNN*9Y *94 *9 *9 *9 ON*9Z *3MNN8:	 8:d 8: 8: 8: ON8:v5 5 5 5@ *3MNN19 1 1 1 1 ON1>"Y "4 " " " "2@ @ @ @,*6I *6$ *6 *6 *6 *6Z>>	> > > >@,,	, , , ,2H"H"	H" H" H" H"V-%9 -% -% -% -% -%`)i )D ) ) ) )8)Y )4 ) ) ) )@#)Y #)4 #) #) #) #)L
i 
D 
 
 
 

Y 
SW 
 
 
 


	
 
 
 
&
I 
$ 
 
 
 
> +* +* +* +* +**;J*G +* +* +*\\59 \5QU \5 \5 \5 \5~$1$1	$1 $1 $1 $1N*5*5	*5 *5 *5 *5Z11	1 1 1 1<$5$5	$5 $5 $5 $5N11	1 1 1 1>        6 6 6 6 6->z-J 6 6 6rY 4    :	     r'   