Ë
    µŒjˆt  ã                  óÌ  — d Z ddl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mZmZ ddlZddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ  ed
g«      Zd
ZdZdZ ej>                   ej@                  d«      «      jB                  Z" ejF                   ej@                  d«      «      jB                  Z$ejJ                  jB                  Z&dd„Z'dd„Z(dd„Z)dd„Z*dd„Z+ G d„ de«      Z,y)z&Wrapper around TileDB vector database.é    )ÚannotationsN)ÚAnyÚDictÚIterableÚListÚMappingÚOptionalÚTuple)ÚDocument)Ú
Embeddings©Úguard_import)ÚVectorStore)Úmaximal_marginal_relevanceÚ	euclideanÚ	documentsÚvectorsÚuint64Úfloat32c                 ó.   — t        d«      t        d«      fS )z@Import tiledb-vector-search if available, otherwise raise error.útiledb.vector_searchÚtiledbr   © ó    úq/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/vectorstores/tiledb.pyÚdependable_tiledb_importr      s   € ô 	Ð+Ó,Ü�XÓðð r   c                ó(   — | t            j                  S )ú Get the URI of the vector index.)ÚVECTOR_INDEX_NAMEÚuri©Úgroups    r   Úget_vector_index_uri_from_groupr#   #   s   € àÔ"Ñ#×'Ñ'Ð'r   c                ó(   — | t            j                  S )z”Get the URI of the documents array from group.

    Args:
        group: TileDB group object.

    Returns:
        URI of the documents array.
    )ÚDOCUMENTS_ARRAY_NAMEr    r!   s    r   Ú"get_documents_array_uri_from_groupr&   (   s   € ð Ô%Ñ&×*Ñ*Ð*r   c                ó   — | › dt         › �S )r   Ú/)r   ©r    s    r   Úget_vector_index_urir*   4   s   € àˆU�!Ô%Ð&Ð'Ð'r   c                ó   — | › dt         › �S )z#Get the URI of the documents array.r(   )r%   r)   s    r   Úget_documents_array_urir,   9   s   € àˆU�!Ô(Ð)Ð*Ð*r   c                  ó>  — e Zd ZdZddddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d%d„Zed&d„«       Zdded	œ	 	 	 	 	 	 	 	 	 	 	 d'd
„Zddddœ	 	 	 	 	 	 	 	 	 	 	 d(d„Z	ddddœ	 	 	 	 	 	 	 	 	 	 	 d)d„Z
	 	 	 d*	 	 	 	 	 	 	 	 	 	 	 d+d„Z	 	 	 d*	 	 	 	 	 	 	 	 	 	 	 d,d„Zdddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 d-d„Z	 	 	 	 d.	 	 	 	 	 	 	 	 	 	 	 	 	 d/d„Z	 	 	 	 d.	 	 	 	 	 	 	 	 	 	 	 	 	 d0d„Zedddœ	 	 	 	 	 	 	 	 	 	 	 	 	 d1d„«       Zeddeddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d2d„«       Z	 d3	 	 	 	 	 	 	 d4d„Z	 	 	 d5	 	 	 	 	 	 	 	 	 	 	 d6d„Zeddeddddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d7d „«       Zeddeddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d8d!„«       Zeeddd"œ	 	 	 	 	 	 	 	 	 	 	 	 	 d9d#„«       Zd:d$„Zy);ÚTileDBa2  TileDB vector store.

    To use, you should have the ``tiledb-vector-search`` python package installed.

    Example:
        .. code-block:: python

            from langchain_community import TileDB
            embeddings = OpenAIEmbeddings()
            db = TileDB(embeddings, index_uri, metric)

    Ú NF)Úvector_index_uriÚdocs_array_uriÚconfigÚ	timestampÚallow_dangerous_deserializationc               ó–  — |st        d«      ‚|| _        |j                  | _        || _        || _        || _        t        d«      t        d«      }}
|j                  |¬«      5  |j                  | j                  d«      }|dk7  r|n
t        |«      | _        |dk7  r|n
t        |«      | _        |j                  «        |j                  | j                  d«      }|j                  j!                  d«      | _        |j                  «        || _        | j"                  dk(  rD |
j&                  j(                  d| j                  | j                  | j$                  d	œ|	¤Ž| _        nR| j"                  d
k(  rC |
j,                  j.                  d| j                  | j                  | j$                  d	œ|	¤Ž| _        ddd«       y# 1 sw Y   yxY w)a†  Initialize with necessary components.

        Args:
            allow_dangerous_deserialization: whether to allow deserialization
                of the data which involves loading data using pickle.
                data can be modified by malicious actors to deliver a
                malicious payload that results in execution of
                arbitrary code on your machine.
        aŒ  TileDB relies on pickle for serialization and deserialization. This can be dangerous if the data is intercepted and/or modified by malicious actors prior to being de-serialized. If you are sure that the data is safe from modification, you can  set allow_dangerous_deserialization=True to proceed. Loading of compromised data using pickle can result in execution of arbitrary code on your machine.r   r   ©Úctx_or_configÚrr/   Ú
index_typeÚFLAT)r    r2   r3   ÚIVF_FLATNr   )Ú
ValueErrorÚ	embeddingÚembed_queryÚembedding_functionÚ	index_uriÚmetricr2   r   Ú	scope_ctxÚGroupr#   r0   r&   r1   ÚcloseÚmetaÚgetr9   r3   Ú
flat_indexÚ	FlatIndexÚvector_indexÚivf_flat_indexÚIVFFlatIndex)Úselfr=   r@   rA   r0   r1   r2   r3   r4   ÚkwargsÚ	tiledb_vsr   Úindex_groupr"   s                 r   Ú__init__zTileDB.__init__L   s´  € ñ, /Üð2óð ð #ˆŒØ"+×"7Ñ"7ˆÔØ"ˆŒØˆŒØˆŒô Ð/Ó0Ü˜Ó"ð ˆ	ð ×Ñ¨FÐÕ3Ø Ÿ,™, t§~¡~°sÓ;ˆKð $ rÒ)ñ !ä4°[ÓAð Ô!ð " RÒ'ñ ä7¸ÓDð Ôð
 ×ÑÔØ—L‘L ×!6Ñ!6¸Ó<ˆEØ#Ÿj™jŸn™n¨\Ó:ˆDŒOØ�K‰KŒMØ&ˆDŒNØ�‰ &Ò(Ø$B I×$8Ñ$8×$BÑ$Bð %Ø×-Ñ-ØŸ;™;Ø"Ÿn™nñ%ð ñ	%�Õ!ð —‘ JÒ.Ø$I I×$<Ñ$<×$IÑ$Ið %Ø×-Ñ-ØŸ;™;Ø"Ÿn™nñ%ð ñ	%�Ô!÷3 4×3Ñ3ús   Á#EF?Æ?Gc                ó   — | j                   S ©N)r=   )rL   s    r   Ú
embeddingszTileDB.embeddings–   s   € à�~‰~Ðr   é   )ÚkÚfilterÚscore_thresholdc          
     óì  ‡— t        d«      }g }|j                  | j                  d| j                  | j                  ¬«      }t        ||«      D �]g  \  }	}
|	dk(  r|
dk(  rŒ|	t        k(  r
|
t        k(  rŒ%||	   }|�t        |d   «      dk(  rt        d|	› d|› �«      ‚|j                  d	«      }t        t        |d   d   «      ¬
«      Š|�ht        j                  t        j                   |j#                  «       «      j%                  t        j&                  «      j)                  «       «      }|‰_        |�o|j-                  «       D ��ci c]  \  }}|t/        |t0        «      s|gn|“Œ }}}t3        ˆfd„|j-                  «       D «       «      s�Œ@|j5                  ‰|
f«       �ŒU|j5                  ‰|
f«       �Œj |j7                  «        |D ��
cg c]  \  }}
|
|k  sŒ||
f‘Œ }}}
|d| S c c}}w c c}
}w )a  Turns TileDB results into a list of documents and scores.

        Args:
            ids: List of indices of the documents in the index.
            scores: List of distances of the documents in the index.
            k: Number of Documents to return. Defaults to 4.
            filter (Optional[Dict[str, Any]]): Filter by metadata. Defaults to None.
            score_threshold: Optional, a floating point value to filter the
                resulting set of retrieved docs
        Returns:
            List of Documents and scores.
        r   r8   ©r3   r2   r   NÚtextzCould not find document for id z, got Úmetadata)Úpage_contentc              3  ó^   •K  — | ]$  \  }}‰j                   j                  |«      |v –— Œ& y ­wrR   )r[   rF   )Ú.0ÚkeyÚvalueÚ
result_docs      €r   Ú	<genexpr>z/TileDB.process_index_results.<locals>.<genexpr>È   s3   øè ø€ ð á&4™
˜˜Uð ×'Ñ'×+Ñ+¨CÓ0°EÔ9Ù&4ùs   ƒ*-)r   Úopenr1   r3   r2   ÚzipÚ
MAX_UINT64ÚMAX_FLOAT_32Úlenr<   rF   r   ÚstrÚpickleÚloadsÚnpÚarrayÚtolistÚastypeÚuint8Útobytesr[   ÚitemsÚ
isinstanceÚlistÚallÚappendrD   )rL   ÚidsÚscoresrU   rV   rW   r   ÚdocsÚ
docs_arrayÚidxÚscoreÚdocÚpickled_metadatar[   r_   r`   ra   s                   @r   Úprocess_index_resultszTileDB.process_index_resultsš   sì  ø€ ô* ˜hÓ'ˆØˆØ—[‘[Ø×Ñ °·±ÀtÇ{Á{ð !ó 
ˆ
ô ˜c 6×*‰JˆC�Ø�aŠx˜E QšJØØ”jÒ  U¬lÒ%:ØØ˜S‘/ˆCØˆ{œc # f¡+Ó.°!Ò3Ü Ð#BÀ3À%ÀvÈcÈUÐ!SÓTÐTØ"Ÿw™w zÓ2ÐÜ!¬s°3°v±;¸q±>Ó/BÔCˆJØÐ+Ü!Ÿ<™<Ü—H‘HÐ-×4Ñ4Ó6Ó7×>Ñ>¼r¿x¹xÓH×PÑPÓRó�ð '/�
Ô#ØÐ!ð '-§l¡l¤nôá&4™
˜˜Uð ¬
°5¼$Ô(?˜%™ÀUÑJØ&4ð ñ ô ó à&,§l¡l¤nóö ð —K‘K ¨UÐ 3Ö4à—‘˜Z¨Ð/Ö0ð5 +ð6 	×ÑÔÙ/3ÔP©t¡  e°uÀÓ7O��e’¨tˆÑPØ�B�Qˆxˆùóùó Qs   Å G*ÇG0ÇG0é   ©rU   rV   Úfetch_kc               ó€  — d|v r|j                  d«      }nt        } | j                  j                  t	        j
                  t	        j
                  |«      j                  t        j                  «      g«      j                  t        j                  «      fd|€|n|i|¤Ž\  }}| j                  |d   |d   |||¬«      S )a[  Return docs most similar to query.

        Args:
            embedding: Embedding vector to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            filter (Optional[Dict[str, Any]]): Filter by metadata. Defaults to None.
            fetch_k: (Optional[int]) Number of Documents to fetch before filtering.
                      Defaults to 20.
            **kwargs: kwargs to be passed to similarity search. Can include:
                nprobe: Optional, number of partitions to check if using IVF_FLAT index
                score_threshold: Optional, a floating point value to filter the
                    resulting set of retrieved docs

        Returns:
            List of documents most similar to the query text and distance
            in float for each. Lower score represents more similarity.
        rW   rU   r   ©rv   rw   rV   rU   rW   )	ÚpopÚ	MAX_FLOATrI   Úqueryrk   rl   rn   r   r~   )	rL   r=   rU   rV   r�   rM   rW   ÚdÚis	            r   Ú&similarity_search_with_score_by_vectorz-TileDB.similarity_search_with_score_by_vectorÓ   s·   € ð4  Ñ&Ø$Ÿj™jÐ):Ó;‰Oä'ˆOØ&ˆt× Ñ ×&Ñ&Ü�H‰H”b—h‘h˜yÓ)×0Ñ0´·±Ó<Ð=Ó>×EÑEÄbÇjÁjÓQñ
à�>‰a wð
ð ñ
‰ˆˆ1ð
 ×)Ñ)Ø�!‘˜Q˜q™T¨&°AÀð *ó 
ð 	
r   c               óV   — | j                  |«      } | j                  |f|||dœ|¤Ž}|S )a  Return docs most similar to query.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.
            fetch_k: (Optional[int]) Number of Documents to fetch before filtering.
                      Defaults to 20.

        Returns:
            List of documents most similar to the query text with
            Distance as float. Lower score represents more similarity.
        r€   )r?   r‰   )rL   r†   rU   rV   r�   rM   r=   rx   s           r   Úsimilarity_search_with_scorez#TileDB.similarity_search_with_scoreú   sH   € ð, ×+Ñ+¨EÓ2ˆ	Ø:ˆt×:Ñ:Øð
àØØñ	
ð
 ñ
ˆð ˆr   c                óf   —  | j                   |f|||dœ|¤Ž}|D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )aâ  Return docs most similar to embedding vector.

        Args:
            embedding: Embedding to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.
            fetch_k: (Optional[int]) Number of Documents to fetch before filtering.
                      Defaults to 20.

        Returns:
            List of Documents most similar to the embedding.
        r€   )r‰   )	rL   r=   rU   rV   r�   rM   Údocs_and_scoresr|   Ú_s	            r   Úsimilarity_search_by_vectorz"TileDB.similarity_search_by_vector  sP   € ð( F˜$×EÑEØð
àØØñ	
ð
 ñ
ˆñ #2Ô2¡/™˜˜Q’ /Ò2Ð2ùÓ2ó   �-c                óf   —  | j                   |f|||dœ|¤Ž}|D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )aË  Return docs most similar to query.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            filter: (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.
            fetch_k: (Optional[int]) Number of Documents to fetch before filtering.
                      Defaults to 20.

        Returns:
            List of Documents most similar to the query.
        r€   )r‹   )	rL   r†   rU   rV   r�   rM   r�   r|   rŽ   s	            r   Úsimilarity_searchzTileDB.similarity_search7  sK   € ð( <˜$×;Ñ;Øð
Ø˜v¨wñ
Ø:@ñ
ˆñ #2Ô2¡/™˜˜Q’ /Ò2Ð2ùÓ2r�   ç      à?©rU   r�   Úlambda_multrV   c               óº  — d|v r|j                  d«      }nt        } | j                  j                  t	        j
                  t	        j
                  |«      j                  t        j                  «      g«      j                  t        j                  «      fd|€|n|dz  i|¤Ž\  }}	| j                  |	d   |d   ||€|n|dz  |¬«      }
|
D ��cg c].  \  }}| j                  j                  |j                  g«      d   ‘Œ0 }}}t        t	        j
                  |gt        j                  ¬«      |||¬«      }g }|D ]  }|j                  |
|   «       Œ |S c c}}w )az  Return docs and their similarity scores selected using the maximal marginal
            relevance.

        Maximal marginal relevance optimizes for similarity to query AND diversity
        among selected documents.

        Args:
            embedding: Embedding to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            fetch_k: Number of Documents to fetch before filtering to
                     pass to MMR algorithm.
            lambda_mult: Number between 0 and 1 that determines the degree
                        of diversity among the results with 0 corresponding
                        to maximum diversity and 1 to minimum diversity.
                        Defaults to 0.5.
        Returns:
            List of Documents and similarity scores selected by maximal marginal
                relevance and score for each.
        rW   rU   é   r   rƒ   ©Údtype)rU   r•   )r„   r…   rI   r†   rk   rl   rn   r   r~   r=   Úembed_documentsr\   r   ru   )rL   r=   rU   r�   r•   rV   rM   rW   rw   ÚindicesÚresultsr|   rŽ   rS   Úmmr_selectedr�   rˆ   s                    r   Ú2max_marginal_relevance_search_with_score_by_vectorz9TileDB.max_marginal_relevance_search_with_score_by_vectorP  s_  € ð:  Ñ&Ø$Ÿj™jÐ):Ó;‰Oä'ˆOØ1˜$×+Ñ+×1Ñ1Ü�H‰H”b—h‘h˜yÓ)×0Ñ0´·±Ó<Ð=Ó>×EÑEÄbÇjÁjÓQñ
à˜‰g¨W°q©[ð
ð ñ
‰ˆ�ð
 ×,Ñ,Ø˜‘
Ø˜!‘9ØØ˜‰g¨W°q©[Ø+ð -ó 
ˆñ QXô
ÙPWÁfÀcÈ1ˆD�N‰N×*Ñ*¨C×,<Ñ,<Ð+=Ó>¸qÓAÐPWð 	ñ 
ô 2Ü�H‰H�i�[¬¯
©
Ô3ØØØ#ô	
ˆð ˆÛˆAØ×"Ñ" 7¨1¡:Õ.ð àÐùó
s   Ã3Ec                óh   —  | j                   |f||||dœ|¤Ž}|D ��	cg c]  \  }}	|‘Œ	 c}	}S c c}	}w )a  Return docs selected using the maximal marginal relevance.

        Maximal marginal relevance optimizes for similarity to query AND diversity
        among selected documents.

        Args:
            embedding: Embedding to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            fetch_k: Number of Documents to fetch before filtering to
                     pass to MMR algorithm.
            lambda_mult: Number between 0 and 1 that determines the degree
                        of diversity among the results with 0 corresponding
                        to maximum diversity and 1 to minimum diversity.
                        Defaults to 0.5.
        Returns:
            List of Documents selected by maximal marginal relevance.
        r”   )rž   )
rL   r=   rU   r�   r•   rV   rM   r�   r|   rŽ   s
             r   Ú'max_marginal_relevance_search_by_vectorz.TileDB.max_marginal_relevance_search_by_vector‹  sS   € ð4 R˜$×QÑQØð
àØØ#Øñ
ð ñ
ˆñ #2Ô2¡/™˜˜Q’ /Ò2Ð2ùÓ2s   ž.c                óX   — | j                  |«      } | j                  |f||||dœ|¤Ž}|S )a  Return docs selected using the maximal marginal relevance.

        Maximal marginal relevance optimizes for similarity to query AND diversity
        among selected documents.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            fetch_k: Number of Documents to fetch before filtering (if needed) to
                     pass to MMR algorithm.
            lambda_mult: Number between 0 and 1 that determines the degree
                        of diversity among the results with 0 corresponding
                        to maximum diversity and 1 to minimum diversity.
                        Defaults to 0.5.
        Returns:
            List of Documents selected by maximal marginal relevance.
        r”   )r?   r    )	rL   r†   rU   r�   r•   rV   rM   r=   rx   s	            r   Úmax_marginal_relevance_searchz$TileDB.max_marginal_relevance_search¯  sK   € ð4 ×+Ñ+¨EÓ2ˆ	Ø;ˆt×;Ñ;Øð
àØØ#Øñ
ð ñ
ˆð ˆr   T)Ú	metadatasr2   c               ó  — t        d«      t        d«      }}|j                  |¬«      5  	 |j                  |«       |j	                  |d«      }
t        |
j                  «      }t        |
j                  «      }|dk(  r |j                  j                  ||||¬«       n$|dk(  r|j                  j                  ||||¬«       |
j                  |t        ¬«       |j                  d	d
t        dz
  ft        j                   t        j"                  «      ¬«      }|j%                  |«      }|j'                  dt        j                   d«      d¬«      }|g}|r3|j'                  dt        j(                  d¬«      }|j+                  |«       |j-                  |dd|¬«      }|j.                  j                  ||«       |
j                  |t0        ¬«       |
j3                  «        d d d «       y # |j                  $ r}	|	‚d }	~	ww xY w# 1 sw Y   y xY w)Nr   r   r6   Úwr:   )r    Ú
dimensionsÚvector_typer2   r;   )ÚnameÚidr   é   )r¨   Údomainr™   rZ   ÚU1T)r¨   r™   Úvarr[   F)r«   ÚsparseÚallows_duplicatesÚattrs)r   rB   Úgroup_createÚTileDBErrorrC   r*   r    r,   rG   ÚcreaterJ   Úaddr   ÚDimre   rk   r™   r   ÚDomainÚAttrro   ru   ÚArraySchemaÚArrayr%   rD   )Úclsr@   r9   r¦   r§   r£   r2   rN   r   Úerrr"   r0   Údocs_uriÚdimÚdomÚ	text_attrr°   Úmetadata_attrÚschemas                      r   r³   zTileDB.createÔ  sð  € ô Ð/Ó0Ü˜Ó"ð ˆ	ð ×Ñ¨FÐÕ3ðØ×#Ñ# IÔ.ð —L‘L ¨CÓ0ˆEÜ3°E·I±IÓ>ÐÜ.¨u¯y©yÓ9ˆHØ˜VÒ#Ø×$Ñ$×+Ñ+Ø(Ø)Ø +Ø!ð	 ,õ ð ˜zÒ)Ø×(Ñ(×/Ñ/Ø(Ø)Ø +Ø!ð	 0ô ð �I‰IÐ&Ô->ˆIÔ?ð
 —*‘*ØØœ:¨™>Ð*Ü—h‘hœrŸy™yÓ)ð ó ˆCð
 —-‘- Ó$ˆCàŸ™¨´r·x±xÀ³~È4˜ÓPˆIØ�KˆEÙØ &§¡°Ä2Ç8Á8ÐQU Ó V�Ø—‘˜]Ô+Ø×'Ñ'ØØØ"'Øð	 (ó ˆFð �L‰L×Ñ ¨&Ô1Ø�I‰I�hÔ%9ˆIÔ:Ø�K‰KŒM÷_ 4Ð3øð ×%Ñ%ò Ø�	ûðú÷ 4Ð3ús.   ©H «G'¼F"H Ç'G=Ç6G8Ç8G=Ç=H È H	r:   r   )r£   rv   rA   r9   r2   Úindex_timestampc               ó*  — |t         vrt        d|› dt        t         «      › �«      ‚t        d«      t        d«      }}t	        j
                  |«      j                  t        j                  «      }| j                  |||j                  d   |j                  |d u|	¬«       |j                  |	¬«      5  |st        d«      ‚t        |«      }t        |«      }|€3|D �cg c](  }t        t        j                   d	t"        dz
  «      «      ‘Œ* }}t	        j
                  |«      j                  t        j$                  «      } |j&                  j(                  d|||||
d	k7  r|
nd |	d
œ|¤Ž |j+                  |d«      5 }|€Lt	        j,                  t/        |«      t        j$                  ¬«      }t1        t/        |«      «      D ]  }|||<   Œ	 i }t	        j
                  |«      |d<   |�st	        j2                  t/        |«      gt4        ¬«      }d	}|D ]B  }t	        j6                  t9        j:                  |«      t        j<                  ¬«      ||<   |dz  }ŒD ||d<   |||<   d d d «       d d d «        | d||||	dœ|¤ŽS c c}w # 1 sw Y   Œ#xY w# 1 sw Y   Œ'xY w)NzUnsupported distance metric: z. Expected one of r   r   rª   )r@   r9   r¦   r§   r£   r2   r6   z3embeddings must be provided to build a TileDB indexr   )r9   r@   Úinput_vectorsÚexternal_idsrÂ   r2   r¥   r˜   rZ   r[   )r=   r@   rA   r2   r   )ÚINDEX_METRICSr<   rs   r   rk   rl   rn   r   r³   Úshaper™   rB   r*   r,   rh   ÚrandomÚrandintre   r   Ú	ingestionÚingestrc   Úzerosrg   ÚrangeÚemptyÚobjectÚ
frombufferri   Údumpsro   )rº   ÚtextsrS   r=   r@   r£   rv   rA   r9   r2   rÂ   rM   rN   r   rÄ   r0   r¼   rŽ   rÅ   ÚArˆ   ÚdatarÀ   r[   s                           r   Ú__fromzTileDB.__from  s‡  € ð  œÑ&Üà3°F°8ð <'Ü'+¬MÓ':Ð&;ð=óð ô Ð/Ó0Ü˜Ó"ð ˆ	ô Ÿ™ Ó,×3Ñ3´B·J±JÓ?ˆØ�
‰
ØØ!Ø$×*Ñ*¨1Ñ-Ø%×+Ñ+Ø tÐ+Øð 	ô 	
ð ×Ñ¨FÐÕ3ÙÜ Ð!VÓWÐWä3°IÓ>ÐÜ.¨yÓ9ˆHØˆ{ÙGLÓMÁuÀ!”sœ6Ÿ>™>¨!¬Z¸!©^Ó<Õ=Àu�ÐMÜŸ8™8 C›=×/Ñ/´·	±	Ó:ˆLà&ˆI×Ñ×&Ñ&ð Ø%Ø*Ø+Ø)Ø3BÀaÒ3G¡ÈTØñð òð —‘˜X sÔ+¨qØÐ'Ü#%§8¡8¬C°«J¼b¿i¹iÔ#H�LÜ"¤3 u£:Ö.˜Ø*+˜ Qšð /à�Ü!Ÿx™x¨›��V‘ØÐ(Ü$&§H¡H¬c°)«nÐ-=ÄVÔ$L�MØ�AÛ$-˜Ü+-¯=©=Ü"ŸL™L¨Ó2¼"¿(¹(ô,˜ aÑ(ð ˜Q™™ð	 %.ð
 (5�D˜Ñ$à"&��,‘÷# ,÷' 4ñJ ð 
ØØØØñ	
ð
 ñ
ð 	
ùò= N÷ ,Ð+ú÷' 4Ð3ús8   Â1*J	Ã-I8ÄA0J	Å8C#I=ÉJ	É8J	É=J	ÊJ	Ê	Jc                ó¼   — t        j                  |«      j                  t         j                  «      }| j                  j                  ||dk7  r|¬«       yd¬«       y)am  Delete by vector ID or other criteria.

        Args:
            ids: List of ids to delete.
            timestamp: Optional timestamp to delete with.
            **kwargs: Other keyword arguments that subclasses might use.

        Returns:
            Optional[bool]: True if deletion is successful,
            False otherwise, None if not implemented.
        r   N)rÅ   r3   T)rk   rl   rn   r   rI   Údelete_batch)rL   rv   r3   rM   rÅ   s        r   ÚdeletezTileDB.deletee  s_   € ô —x‘x “}×+Ñ+¬B¯I©IÓ6ˆØ×Ñ×&Ñ&Ø%¸iÈ1ºn°ð 	'ô 	
ð ð SWð 	'ô 	
ð r   c           
     óö  — t        d«      }| j                  j                  t        |«      «      }|€3|D �cg c](  }t	        t        j                  dt        dz
  «      «      ‘Œ* }}t        j                  |«      j                  t        j                  «      }	t        j                  t        |«      d¬«      }
t        t        |«      «      D ]-  }t        j                  ||   t        j                  ¬«      |
|<   Œ/ | j                   j#                  |
|	|dk7  r|nd¬«       i }t        j                  |«      |d<   |�st        j                  t        |«      gt$        ¬«      }d}|D ]B  }t        j&                  t)        j*                  |«      t        j,                  ¬«      ||<   |dz  }ŒD ||d	<   |j/                  | j0                  d
|dk7  r|nd| j2                  ¬«      }|||	<   |j5                  «        |S c c}w )aè  Run more texts through the embeddings and add to the vectorstore.

        Args:
            texts: Iterable of strings to add to the vectorstore.
            metadatas: Optional list of metadatas associated with the texts.
            ids: Optional ids of each text object.
            timestamp: Optional timestamp to write new texts with.
            kwargs: vectorstore specific parameters

        Returns:
            List of ids from adding the texts into the vectorstore.
        r   Nr   rª   ÚOr˜   )r   rÅ   r3   rZ   r[   r¥   rY   )r   r=   rš   rs   rh   rÈ   rÉ   re   rk   rl   rn   r   rÎ   rg   rÍ   r   rI   Úupdate_batchrÏ   rÐ   ri   rÑ   ro   rc   r1   r2   rD   )rL   rÒ   r£   rv   r3   rM   r   rS   rŽ   rÅ   r   rˆ   rx   rÀ   r[   ry   s                   r   Ú	add_textszTileDB.add_textsz  s«  € ô( ˜hÓ'ˆØ—^‘^×3Ñ3´D¸³KÓ@ˆ
Øˆ;ÙCHÓIÁ5¸a”3”v—~‘~ a¬°a©Ó8Õ9À5ˆCÐIä—x‘x “}×+Ñ+¬B¯I©IÓ6ˆÜ—(‘(œC 
›O°CÔ8ˆÜ”s˜:“Ö'ˆAÜŸ™ *¨Q¡-´r·z±zÔBˆG�AŠJð (à×Ñ×&Ñ&ØØ%Ø#,°¢>‘i°tð 	'ô 	
ð ˆÜ—x‘x “ˆˆV‰ØÐ ÜŸH™H¤c¨)£nÐ%5¼VÔDˆMØˆAÛ%�Ü#%§=¡=´·±¸hÓ1GÌrÏxÉxÔ#X�˜aÑ Ø�Q‘‘ð &ð  -ˆD�Ñà—[‘[Ø×ÑØØ#,°¢>‘i°tØ—;‘;ð	 !ó 
ˆ
ð $(ˆ
�<Ñ Ø×ÑÔØˆ
ùò= Js   ¶-G6z/tmp/tiledb_arrayc
                ób   — g }|j                  |«      } | j                  d||||||||||	dœ
|
¤ŽS )a’  Construct a TileDB index from raw documents.

        Args:
            texts: List of documents to index.
            embedding: Embedding function to use.
            metadatas: List of metadata dictionaries to associate with documents.
            ids: Optional ids of each text object.
            metric: Metric to use for indexing. Defaults to "euclidean".
            index_uri: The URI to write the TileDB arrays
            index_type: Optional,  Vector index type ("FLAT", IVF_FLAT")
            config: Optional, TileDB config
            index_timestamp: Optional, timestamp to write new texts with.

        Example:
            .. code-block:: python

                from langchain_community import TileDB
                from langchain_community.embeddings import OpenAIEmbeddings
                embeddings = OpenAIEmbeddings()
                index = TileDB.from_texts(texts, embeddings)
        ©
rÒ   rS   r=   r£   rv   rA   r@   r9   r2   rÂ   r   )rš   Ú_TileDB__from)rº   rÒ   r=   r£   rv   rA   r@   r9   r2   rÂ   rM   rS   s               r   Ú
from_textszTileDB.from_texts±  sZ   € ðF ˆ
Ø×.Ñ.¨uÓ5ˆ
Øˆs�z‰zð 
ØØ!ØØØØØØ!ØØ+ñ
ð ñ
ð 	
r   c               ó˜   — |D �cg c]  }|d   ‘Œ	 }}|D �cg c]  }|d   ‘Œ	 }} | j                   d||||||||||	dœ
|
¤ŽS c c}w c c}w )a  Construct TileDB index from embeddings.

        Args:
            text_embeddings: List of tuples of (text, embedding)
            embedding: Embedding function to use.
            index_uri: The URI to write the TileDB arrays
            metadatas: List of metadata dictionaries to associate with documents.
            metric: Optional, Metric to use for indexing. Defaults to "euclidean".
            index_type: Optional, Vector index type ("FLAT", IVF_FLAT")
            config: Optional, TileDB config
            index_timestamp: Optional, timestamp to write new texts with.

        Example:
            .. code-block:: python

                from langchain_community import TileDB
                from langchain_community.embeddings import OpenAIEmbeddings
                embeddings = OpenAIEmbeddings()
                text_embeddings = embeddings.embed_documents(texts)
                text_embedding_pairs = list(zip(texts, text_embeddings))
                db = TileDB.from_embeddings(text_embedding_pairs, embeddings)
        r   rª   rÞ   r   )rß   )rº   Útext_embeddingsr=   r@   r£   rv   rA   r9   r2   rÂ   rM   ÚtrÒ   rS   s                 r   Úfrom_embeddingszTileDB.from_embeddingsä  s}   € ñJ  /Ó/™˜!��1“˜ˆÐ/Ù$3Ó4¡O˜q�a˜“d Oˆ
Ð4àˆs�z‰zð 
ØØ!ØØØØØØ!ØØ+ñ
ð ñ
ð 	
ùò 0ùÚ4s
   …A—A)rA   r2   r3   c          	     ó   —  | d|||||dœ|¤ŽS )a}  Load a TileDB index from a URI.

        Args:
            index_uri: The URI of the TileDB vector index.
            embedding: Embeddings to use when generating queries.
            metric: Optional, Metric to use for indexing. Defaults to "euclidean".
            config: Optional, TileDB config
            timestamp: Optional, timestamp to use for opening the arrays.
        )r=   r@   rA   r2   r3   r   r   )rº   r@   r=   rA   r2   r3   rM   s          r   ÚloadzTileDB.load  s/   € ñ( ð 
ØØØØØñ
ð ñ
ð 	
r   c                óF   —  | j                   j                  di |¤Ž| _         y )Nr   )rI   Úconsolidate_updates)rL   rM   s     r   rè   zTileDB.consolidate_updates7  s    € ØA˜D×-Ñ-×AÑAÑKÀFÑKˆÕr   )r=   r   r@   rh   rA   rh   r0   rh   r1   rh   r2   úOptional[Mapping[str, Any]]r3   r   r4   ÚboolrM   r   )ÚreturnzOptional[Embeddings])rv   z	List[int]rw   úList[float]rU   ÚintrV   úOptional[Dict[str, Any]]rW   Úfloatrë   úList[Tuple[Document, float]])r=   rì   rU   rí   rV   rî   r�   rí   rM   r   rë   rð   )r†   rh   rU   rí   rV   rî   r�   rí   rM   r   rë   rð   )rT   Nr   )r=   rì   rU   rí   rV   rî   r�   rí   rM   r   rë   úList[Document])r†   rh   rU   rí   rV   rî   r�   rí   rM   r   rë   rñ   )r=   rì   rU   rí   r�   rí   r•   rï   rV   rî   rM   r   rë   rð   )rT   r   r“   N)r=   rì   rU   rí   r�   rí   r•   rï   rV   rî   rM   r   rë   rñ   )r†   rh   rU   rí   r�   rí   r•   rï   rV   rî   rM   r   rë   rñ   )r@   rh   r9   rh   r¦   rí   r§   znp.dtyper£   rê   r2   ré   rë   ÚNone)rÒ   ú	List[str]rS   zList[List[float]]r=   r   r@   rh   r£   úOptional[List[dict]]rv   úOptional[List[str]]rA   rh   r9   rh   r2   ré   rÂ   rí   rM   r   rë   r.   )Nr   )rv   rõ   r3   rí   rM   r   rë   zOptional[bool])NNr   )rÒ   zIterable[str]r£   rô   rv   rõ   r3   rí   rM   r   rë   ró   )rÒ   ró   r=   r   r£   rô   rv   rõ   rA   rh   r@   rh   r9   rh   r2   ré   rÂ   rí   rM   r   rë   r.   )râ   zList[Tuple[str, List[float]]]r=   r   r@   rh   r£   rô   rv   rõ   rA   rh   r9   rh   r2   ré   rÂ   rí   rM   r   rë   r.   )r@   rh   r=   r   rA   rh   r2   ré   r3   r   rM   r   rë   r.   )rM   r   rë   rò   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rP   ÚpropertyrS   r…   r~   r‰   r‹   r�   r’   rž   r    r¢   Úclassmethodr³   ÚDEFAULT_METRICrß   rØ   rÜ   rà   rä   ræ   rè   r   r   r   r.   r.   >   s-  „ ñð& !#Ø Ø.2ØØ05ñHàðHð ðHð ð	Hð ðHð ðHð ,ðHð ðHð *.ðHð óHðT òó ðð Ø+/Ø!*ñ7àð7ð ð7ð
 ð7ð )ð7ð ð7ð 
&ó7ðz Ø+/Øñ%
àð%
ð ð	%
ð
 )ð%
ð ð%
ð ð%
ð 
&ó%
ðV Ø+/Øñàðð ð	ð
 )ðð ðð ðð 
&óðF Ø+/Øð3àð3ð ð3ð )ð	3ð
 ð3ð ð3ð 
ó3ð@ Ø+/Øð3àð3ð ð3ð )ð	3ð
 ð3ð ð3ð 
ó3ð: ØØ Ø+/ñ9àð9ð ð	9ð
 ð9ð ð9ð )ð9ð ð9ð 
&ó9ð| ØØ Ø+/ð"3àð"3ð ð"3ð ð	"3ð
 ð"3ð )ð"3ð ð"3ð 
ó"3ðN ØØ Ø+/ð#àð#ð ð#ð ð	#ð
 ð#ð )ð#ð ð#ð 
ó#ðJ ð Ø.2ñ=àð=ð ð=ð ð	=ð
 ð=ð ð=ð ,ð=ð 
ò=ó ð=ð~ ð +/Ø#'Ø$Ø Ø.2Ø ñN
àðN
ð &ðN
ð ð	N
ð
 ðN
ð (ðN
ð !ðN
ð ðN
ð ðN
ð ,ðN
ð ðN
ð ðN
ð 
òN
ó ðN
ðb ABðØ&ðØ:=ðØMPðà	óð0 +/Ø#'Øð5àð5ð (ð5ð !ð	5ð
 ð5ð ð5ð 
ó5ðn ð
 +/Ø#'Ø$Ø,Ø Ø.2Ø ð0
àð0
ð ð0
ð (ð	0
ð
 !ð0
ð ð0
ð ð0
ð ð0
ð ,ð0
ð ð0
ð ð0
ð 
ò0
ó ð0
ðd ð +/Ø#'Ø$Ø Ø.2Ø ñ3
à6ð3
ð ð3
ð ð	3
ð (ð3
ð !ð3
ð ð3
ð ð3
ð ,ð3
ð ð3
ð ð3
ð 
ò3
ó ð3
ðj ð %Ø.2Øñ
àð
ð ð
ð
 ð
ð ,ð
ð ð
ð ð
ð 
ò
ó ð
ô8Lr   r.   )rë   r   )r"   r   rë   rh   )r    rh   rë   rh   )-rù   Ú
__future__r   ri   rÈ   ÚsysÚtypingr   r   r   r   r   r	   r
   Únumpyrk   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.utilsr   Úlangchain_core.vectorstoresr   Ú&langchain_community.vectorstores.utilsr   Ú	frozensetrÆ   rü   r%   r   Úiinfor™   Úmaxre   Úfinforf   Ú
float_infor…   r   r#   r&   r*   r,   r.   r   r   r   Ú<module>r     sÆ   ðÙ ,å "ã Û Û 
ß F× FÑ Fã Ý -Ý 0Ý -Ý 3å Má˜;˜-Ó(€Ø€Ø"Ð ØÐ ØˆR�X‰X�h�b—h‘h˜xÓ(Ó)×-Ñ-€
Øˆr�x‰x˜˜Ÿ™ Ó+Ó,×0Ñ0€Ø�N‰N×Ñ€	óó(ó
	+ó(ó
+ô
zLˆ[õ zLr   