
    Bvh                         d dl Z d dlmZmZmZ d dlmZ d dlmZm	Z	 d dl
mZmZmZ d dlmZ d dlmZmZ d dl mZ d	gZd
ee   fdZ G d d      Zy)    N)ListAnyCallable)ValidationError)	MagicMockcreate_autospec)validate_config_schemaload_schemaget_available_schemas)known_embedding_functions)	Documents
Embeddings)MonkeyPatchchroma_langchainreturnc                  `    t        j                         D  cg c]  } | t        vr|  c} S c c} w )z(Get all embedding function names to test)r   keysSKIP_EMBEDDING_FUNCTIONS)names    ]/RAG/venv/lib/python3.12/site-packages/chromadb/test/utils/test_embedding_function_schemas.pyget_embedding_function_namesr      s;     .2244D// 	4  s   +c            	           e Zd ZdZej
                  j                  d e             dede	e
gef   deddfd       ZddZed	edefd
       ZddZy)TestEmbeddingFunctionSchemasz)Test class for embedding function schemasef_namemock_embeddingsmock_common_depsr   Nc                    
 t         |   }t        |d      
t         |dg            }|
_        |j	                  |d
fd        |       }|j                         }|j                  |      }|j                         }	||	k(  s
J d|        y)	z/Test embedding function configuration roundtripT)instancetest)return_value__new__c                     S )N )clsargskwargsmock_efs      r   <lambda>zWTestEmbeddingFunctionSchemas.test_embedding_function_config_roundtrip.<locals>.<lambda>3   s    g    z)Configs don't match after recreation for N)r   r   r   __call__setattr
get_configbuild_from_config)selfr   r   r   ef_class	mock_callef_instanceconfignew_instance
new_configr'   s             @r   (test_embedding_function_config_roundtripzETestEmbeddingFunctionSchemas.test_embedding_function_config_roundtrip    s     -W5 "(T: ?F8+DE	$ 	  i!E	

 j '')  11&9!,,.
 j 	A6wi@	A r)   c                    t               D ]  }t        |      }d|vri }|d   D ]>  }|d   |   }t        |d   t              r|d   d   n|d   }| j	                  |      ||<   @ |d   D ]C  }|j                         }||= t        j                  t              5  t        ||       ddd       E  y# 1 sw Y   RxY w)z)Test that schemas enforce required fieldsrequired
propertiestyper   N)
r   r
   
isinstancelist_get_dummy_valuecopypytestraisesr   r	   r.   schema_nameschemar2   fieldfield_schema
field_typetest_configs           r   test_schema_required_fieldsz8TestEmbeddingFunctionSchemas.test_schema_required_fieldsE   s    02K -F' F
+%l3E: ",v"6= !(+%f- 
 !% 5 5j Au ,  
+$kkm&]]?3*;D 43 ,# 3( 43s   B44B=rE   c                 8    ddddi g d}|j                  | d      S )z(Get a dummy value for a given field typedummyr   g        F)stringintegernumberbooleanobjectarray)get)rE   type_maps     r   r<   z-TestEmbeddingFunctionSchemas._get_dummy_value^   s0     
 ||J00r)   c                    t               D ]  }t        |      }i }d|v rF|d   D ]>  }|d   |   }t        |d   t              r|d   d   n|d   }| j	                  |      ||<   @ |j                         }d|d<   |j                  dd      d	u st        j                  t              5  t        ||       d
d
d
        y
# 1 sw Y   xY w)z.Test that schemas reject additional propertiesr7   r8   r9   r   valueadditional_propertyadditionalPropertiesTFN)r   r
   r:   r;   r<   r=   rP   r>   r?   r   r	   r@   s           r   !test_schema_additional_propertiesz>TestEmbeddingFunctionSchemas.test_schema_additional_propertiesk   s    02K -FF V##J/E#),#7#>L &l6&:DA %V,Q/)&1 
 %)$9$9*$EF5M 0 !++-K18K-. zz0$75@]]?3*;D 43+ 3* 43s   (C  C		)r   N)__name__
__module____qualname____doc__r>   markparametrizer   strr   r   r   r   r5   rG   staticmethodr   r<   rV   r#   r)   r   r   r      s    3[[Y(D(FG"A"A "9+z"9:"A &	"A
 
"A H"AHE2 
1S 
1S 
1 
1Er)   r   )r>   typingr   r   r   
jsonschemar   unittest.mockr   r   *chromadb.utils.embedding_functions.schemasr	   r
   r   "chromadb.utils.embedding_functionsr   chromadb.api.typesr   r   r   r   r]   r   r   r#   r)   r   <module>re      sU     & & & 4 
 I 4   
d3i fE fEr)   