o
    g                     @   s  d dl mZmZ d dlZd dlZd dlZd dlmZm	Z	m
Z
mZmZ d dlmZ d dlmZ G dd de	e Zdefd	d
ZdefddZeje fde	e deejddf fddZe ddfdejde	e dededdf
ddZejjdejddfddZdS )    )	GeneratorcastN)
EmbeddableEmbeddingFunction
EmbeddingsImageDocument)hashing_embedding_function)_exact_distancesc                   @   s(   e Zd ZdddZdedefddZdS )	hashing_multimodal_efreturnNc                 C   s   t dtjd| _d S )N
   )dimdtype)r	   npfloat64_hef)self r   Z/var/www/visachat/venv/lib/python3.10/site-packages/chromadb/test/ef/test_multimodal_ef.py__init__   s   zhashing_multimodal_ef.__init__inputc                 C   sB   dd |D }t | |}|t jj|ddd }tt| S )Nc                 S      g | ]}t |qS r   str.0ir   r   r   
<listcomp>       z2hashing_multimodal_ef.__call__.<locals>.<listcomp>   T)axiskeepdims)r   arrayr   linalgnormr   r   tolist)r   r   to_texts
embeddingsr   r   r   __call__   s   zhashing_multimodal_ef.__call__)r   N)__name__
__module____qualname__r   r   r   r)   r   r   r   r   r      s    
r   r   c                   C   s   t jjdddt jdS )Nr      )r   r      )sizer   )r   randomrandintint64r   r   r   r   random_image   s   r3   c                   C   s
   t t S )N)r   r3   r   r   r   r   random_document#   s   
r4   
default_efc                 c   s*    t  }|jd| d}|V  |  d S )Nmultimodal_collection)nameembedding_function)chromadbClientcreate_collectionclear_system_cache)r5   client
collectionr   r   r   r6   '   s   r6   r   r.   
n_examplesn_query_resultsc                    s  t j }t jd dd tD dd tD }||}dd td D  dd tD }||}tjtdd	 | jd |d |d d
 W d    n1 sZw   Y  | j |d | j|d | j	dgd}	t
|	d t
 t
 ksJ t|	d D ]7\}
}| v s|v sJ |	d d usJ | v r|	d |
 | | ksJ |v r|	d |
 d u sJ qt }||g}t||| \}} fdd|d d | D }t }||g}t||| \}} fdd|d d | D }tt | j|g|gd W d    n	1 s w   Y  | j|g|dgd}|d d |ks:J | j|g|dgd}|d d |ksOJ t j| d S )Nr   c                 S   r   r   r   r   r   r   r   r   >   r   z#test_multimodal.<locals>.<listcomp>c                 S      g | ]}t  qS r   )r3   r   _r   r   r   r   ?       c                 S   r   r   r   r   r   r   r   r   B   r      c                 S   rA   r   )r4   rB   r   r   r   r   C   rD   z|Exactly one of (images|documents|uris)(?:, (images|documents|uris))?(?:, (images|documents|uris))? must be provided in add\.)match)ids	documentsimagesrG   rH   rG   rI   rH   )includerG   c                    (   g | ]}|k r| n |  qS r   r   r   document_ids	image_idsr?   r   r   r   i       c                    rM   r   r   r   rN   r   r   r   t   rQ   )query_imagesquery_texts)rR   	n_resultsrL   )rS   rT   rL   )r   r0   	get_stateseedrangepytestraises
ValueErroraddgetlen	enumerateindexr3   r
   r4   query	set_state)r6   r5   r?   r@   random_staterI   image_embeddingsrH   document_embeddings
get_resultr   idquery_imagequery_image_embeddingimage_neighbor_indicesrC   nearest_image_neighbor_idsquery_documentquery_document_embeddingdocument_neighbor_indicesnearest_document_neighbor_idsquery_resultr   rN   r   test_multimodal4   st   

 



rp   c                 C   sd   t  }t }d}| j||d | j||d | j|dgd}|d d us&J |d d d u s0J d S )N0rJ   rK   rH   )rG   rL   r   )r4   r3   r[   updater\   )r6   documentimagerf   re   r   r   r   !test_multimodal_update_with_image   s   ru   )typingr   r   numpyr   rX   r9   chromadb.api.typesr   r   r   r   r   !chromadb.test.property.strategiesr	   !chromadb.test.property.invariantsr
   r   r3   r4   fixture
Collectionr6   intrp   markxfailru   r   r   r   r   <module>   sJ    
[