
    _j                        d dl Z 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 d dlmZ  G d de
e	                   Zd	efd
Zd	efdZej         e            fde
e	         d	eej        ddf         fd            Z e            ddfdej        de
e	         deded	df
dZej        j        dej        d	dfd            ZdS )    N)	Generatorcast)
EmbeddableEmbeddingFunction
EmbeddingsImageDocument)hashing_embedding_function)_exact_distances)Settingsc                   &    e Zd ZddZdedefdZdS )hashing_multimodal_efreturnNc                 F    t          dt          j                  | _        d S )N
   )dimdtype)r
   npfloat64_hef)selfs    `/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/chromadb/test/ef/test_multimodal_ef.py__init__zhashing_multimodal_ef.__init__   s    .2RZHHH			    inputc                     d |D             }t          j        |                     |                    }|t           j                            |dd          z  }t          t          |                                          S )Nc                 ,    g | ]}t          |          S  str.0is     r   
<listcomp>z2hashing_multimodal_ef.__call__.<locals>.<listcomp>   s    ***qCFF***r      T)axiskeepdims)r   arrayr   linalgnormr   r   tolist)r   r   to_texts
embeddingss       r   __call__zhashing_multimodal_ef.__call__   sl    **E***Xdii1122
 	binnZa$nGGG
J
 1 1 3 3444r   )r   N)__name__
__module____qualname__r   r   r   r.   r   r   r   r   r      sN        I I I I5j 5Z 5 5 5 5 5 5r   r   r   c                  \    t           j                            dddt           j                  S )Nr      )r   r      )sizer   )r   randomrandintint64r   r   r   random_imager9   !   s#    9Q+RXFFFr   c                  8    t          t                                S )N)r    r9   r   r   r   random_documentr;   %   s    |~~r   
default_efc              #     K   t                      }t          j                            d          rbt          j                            dd          }t	          t          j                            dd                    }d|_        ||_        ||_        t          j	        |          }|
                    d| 	          }|V  |                                 d S )
NCHROMA_INTEGRATION_TEST_ONLYCHROMA_SERVER_HOST	localhostCHROMA_SERVER_HTTP_PORTr   zchromadb.api.fastapi.FastAPI)settingsmultimodal_collection)nameembedding_function)r   osenvirongetintchroma_api_implchroma_server_http_portchroma_server_hostchromadbClientcreate_collectionclear_system_cache)r<   rB   hostportclient
collections         r   rC   rC   )   s       zzH	z~~455 +z~~2K@@2:>>";Q??@@#A +/(&*#_h///F))$ *  J 
r   r   r4   rC   
n_examplesn_query_resultsc                    t           j                                        }t           j                            d           d t	                    D             d t	                    D             } ||          }d t	          dz            D             d t	                    D             } ||          }t          j        t          d          5  |                     d         |d         |d         	           d d d            n# 1 swxY w Y   |                     |
           |                     |           | 	                    dg          }	t          |	d                   t                    t                    z   k    sJ t          |	d                   D ]^\  }
}|v s|v sJ |	d         J |v r-|	d         |
         |                    |                   k    sJ |v r|	d         |
         J _t                      } ||g          }t          |||z             \  }}fd|d         d |         D             }t                      } ||g          }t          |||z             \  }}fd|d         d |         D             }t          j        t                    5  |                     |g|g           d d d            n# 1 swxY w Y   |                     |g|dg          }|d         d         |k    sJ |                     |g|dg          }|d         d         |k    sJ t           j                            |           d S )Nr   c                 ,    g | ]}t          |          S r   r   r!   s     r   r$   z#test_multimodal.<locals>.<listcomp>H   s    333AQ333r   c                 *    g | ]}t                      S r   )r9   r"   _s     r   r$   z#test_multimodal.<locals>.<listcomp>I   s    888lnn888r   c                 ,    g | ]}t          |          S r   r   r!   s     r   r$   z#test_multimodal.<locals>.<listcomp>L   s    FFFqCFFFFFr      c                 *    g | ]}t                      S r   )r;   rZ   s     r   r$   z#test_multimodal.<locals>.<listcomp>M   s    >>>q"">>>r   z|Exactly one of (images|documents|uris)(?:, (images|documents|uris))?(?:, (images|documents|uris))? must be provided in add\.)match)ids	documentsimagesr`   ra   r`   rb   ra   )includer`   c                 B    g | ]}|k     r|         n
|z           S r   r   r"   r#   document_ids	image_idsrU   s     r   r$   z#test_multimodal.<locals>.<listcomp>s   sB     " " " J	!LZ,H" " "r   c                 B    g | ]}|k     r|         n
|z           S r   r   rg   s     r   r$   z#test_multimodal.<locals>.<listcomp>~   sB     % % % J	!LZ,H% % %r   )query_imagesquery_texts)rk   	n_resultsre   )rl   rm   re   )r   r6   	get_stateseedrangepytestraises
ValueErroraddrH   len	enumerateindexr9   r   r;   query	set_state)rC   r<   rU   rV   random_staterb   image_embeddingsra   document_embeddings
get_resultr#   idquery_imagequery_image_embeddingimage_neighbor_indicesr[   nearest_image_neighbor_idsquery_documentquery_document_embeddingdocument_neighbor_indicesnearest_document_neighbor_idsquery_resultrh   ri   s     `                   @@r   test_multimodalr   >   s    9&&((LINN133z!2!2333I88eJ&7&7888F!z&))FFE*a*n$E$EFFFL>>E*,=,=>>>I$*Y// 
 N
 
 
 
 

 	!!!	!VAY 	" 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 ,)DDD)F;;; '**K=*AAJz% !!S%6%6Y%GGGGG:e,-- 6 62\!!R9____+&222k*1-<;M;Mb;Q;Q1RRRRR??k*1-555 ..K&J}55 0/2EE! !A" " " " " "'*+;O+;<" " " %&&N)z>*:;;#3 "25H"H$ $ q% % % % % %*1-.>.>?% % %! 
z	"	" 
 
##%^4D 	$ 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 )..!]o} /  L q!%????? )..#$+ /  L q!%BBBBBI%%%%%s$   +DDDK((K,/K,c                    t                      }t                      }d}|                     ||           |                     ||           |                     |dg          }|d         J |d         d         J d S )N0rc   rd   ra   )r`   re   r   )r;   r9   rt   updaterH   )rC   documentimager~   r}   s        r   !test_multimodal_update_with_imager      s       HNNE	B"999  R 666&**rK=*IIJk"...k"1%-----r   )rF   typingr   r   numpyr   rq   rM   chromadb.api.typesr   r   r   r   r	   !chromadb.test.property.strategiesr
   !chromadb.test.property.invariantsr   chromadb.configr   r   r9   r;   fixture
CollectionrC   rI   r   markxfailr   r   r   r   <module>r      s7   				 " " " " " " " "                    I H H H H H > > > > > > $ $ $ $ $ $

5 
5 
5 
5 
5-j9 
5 
5 
5Ge G G G G     0E0E0G0G   !*- x"D$./       , 1F0E0G0G	X& X&#.X&!*-X& X& 	X&
 
X& X& X& X&v .#..	. . . . . .r   