
    3fi                       U 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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 dd
lmZ ddlm Z m!Z! erddl"m#Z# e jH                  de jJ                  diZ&de'd<   dddddddZ(dddZ)dZ*dZ+dddZ,e jH                  Z-d Z.d!e'd"<   d#Z/d!e'd$<   d%Z0d!e'd&<   d'Z1d!e'd(<   d)Z2d*e'd+<    ed,d-d.d/d01       G d2 d3e             Z3y)4zSAP HANA Cloud Vector Engine    )annotationsN)	TYPE_CHECKINGAnyCallableDictIterableListOptionalPatternTuple)
deprecated)Document)
Embeddings)run_in_executor)VectorStore)Self)DistanceStrategymaximal_marginal_relevance)dbapi)COSINE_SIMILARITYDESC)
L2DISTANCEASCdictHANA_DISTANCE_FUNCTION=z<><z<=>z>=)z$eqz$nez$ltz$ltez$gtz$gteINzNOT IN)z$inz$ninz$betweenz$likeANDOR)z$andz$or
EMBEDDINGSstrdefault_table_nameVEC_TEXTdefault_content_columnVEC_METAdefault_metadata_column
VEC_VECTORdefault_vector_columnintdefault_vector_column_lengthz0.3.23z1.0zThis class is deprecated and will be removed in a future version. Please use HanaDB from the langchain_hana package instead. See https://github.com/SAP/langchain-integration-for-sap-hana-cloud for details.z"from langchain_hana import HanaDB;F)sinceremovalmessagealternativependingc            	         e Zd ZU dZeeeeee	fdd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d#dZ
d$dZ	 	 d%	 	 	 	 	 	 	 	 	 d&dZed'd       Zed(d       Zed)d	       Zed*d
       Z ej(                  d      Zded<   ed+d       Ze	 	 	 	 d,d       Zd-dZ	 	 	 	 d.	 	 	 	 	 	 	 	 	 d/dZ	 	 d%	 	 	 	 	 	 	 	 	 d0dZeddeeeeee	fdd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d1d       Z	 d2	 	 	 	 	 	 	 d3dZ	 d2	 	 	 	 	 	 	 d4dZ	 d2	 	 	 	 	 	 	 d5dZ 	 d2	 	 	 	 	 	 	 d6dZ!	 d2	 	 	 	 	 	 	 d7dZ"d8dZ#d8dZ$	 d%	 	 	 	 	 d9dZ%	 d%	 	 	 	 	 d9dZ&	 	 	 	 d:	 	 	 	 	 	 	 	 	 	 	 d;dZ'd<dZ(	 	 	 	 d:	 	 	 	 	 	 	 	 	 	 	 d=dZ)	 	 	 d>	 	 	 	 	 	 	 	 	 d?d Z*ed@d!       Z+dAd"Z,y)BHanaDBa  SAP HANA Cloud Vector Engine

    **DEPRECATED**: This class is deprecated and will no longer be maintained.
    Please use HanaDB from the langchain_hana package instead. It offers an
    improved implementation and full support.

    The prerequisite for using this class is the installation of the ``hdbcli``
    Python package.

    The HanaDB vectorstore can be created by providing an embedding function and
    an existing database connection. Optionally, the names of the table and the
    columns to use.
    N)specific_metadata_columnsc	          	     6   t         j                  j                  d      t        d      d}
t        j                         D ]	  }||u sd}
 |
st        dj                  |            || _        || _	        || _
        t        j                  |      | _        t        j                  |      | _        t        j                  |      | _        t        j                  |      | _        t        j#                  |      | _        t        j'                  |	xs g       | _        | j+                  | j                        sd| j                   d| j                   d| j                   d| j                    d		}| j$                  d
v r|dz  }n|d| j$                   dz  }	 | j                  j-                         }|j/                  |       |j1                          | j3                  | j                  | j                  ddg       | j3                  | j                  | j                  ddg       | j3                  | j                  | j                   dg| j$                         | j(                  D ]  }| j3                  | j                  |         y # j1                          w xY w)NhdbclizTCould not import hdbcli python package. Please install it with `pip install hdbcli`.FT!Unsupported distance_strategy: {}zCREATE TABLE "z"("z
" NCLOB, "z" REAL_VECTOR )r+   r   );(z));NCLOBNVARCHARREAL_VECTOR)	importlibutil	find_specImportErrorr   keys
ValueErrorformat
connection	embeddingdistance_strategyr4   _sanitize_name
table_namecontent_columnmetadata_columnvector_column_sanitize_intvector_column_length#_sanitize_specific_metadata_columnsr5   _table_existscursorexecuteclose_check_column)selfrE   rF   rG   rI   rJ   rK   rL   rN   r5   valid_distancekeysql_strcurcolumn_names                  i/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_community/vectorstores/hanavector.py__init__zHanaDB.__init__a   sq    >>##H-5? 
 )..0 	&C''!%	& 3::;LM  %"!2 //
;$33NC%44_E#22=A$*$8$89M$N!)/)S)S%+*
&
 !!$//2  1 2''( )(() *&&'~7  ((G34Qt889==oo,,.G$		 	4??D,?,?':AVW4??D,@,@7JBWXOOO%%		
  99 	=Kt<	= 		s   +J Jc                &   d}	 | j                   j                         }|j                  ||       |j                         r-|j	                         }|d   d   dk(  r	 |j                          y|j                          y# j                          w xY w)NzUSELECT COUNT(*) FROM SYS.TABLES WHERE SCHEMA_NAME = CURRENT_SCHEMA AND TABLE_NAME = ?r      TF)rE   rQ   rR   has_result_setfetchallrS   )rU   rI   rX   rY   rowss        r[   rP   zHanaDB._table_exists   s{    " 		//((*CKK*.!!#||~71:?IIKCIIK IIKs   AA> >Bc                   d}	 | j                   j                         }|j                  |||f       |j                         r||j	                         }t        |      dk(  rt        d| d      |r!|d   d   |vrt        d| d|d   d          |9|dkD  r4|d   d   |k7  r)t        d| d|d   d    d|       t        d| d      |j                          y # j                          w xY w)	Nz~SELECT DATA_TYPE_NAME, LENGTH FROM SYS.TABLE_COLUMNS WHERE SCHEMA_NAME = CURRENT_SCHEMA AND TABLE_NAME = ? AND COLUMN_NAME = ?r   zColumn z does not existz has the wrong type: r^   z has the wrong length: z expected: )rE   rQ   rR   r_   r`   lenAttributeErrorrS   )rU   rI   rZ   column_typecolumn_lengthrX   rY   ra   s           r[   rT   zHanaDB._check_column   s"   5 	
	//((*CKK*k!:;!!#||~t9>(7;-)OPPAwqz4,%k]2GQPQ
|T  !,1BAwqz]2,%k]2I$q'RS* V))69 
 %w{m?%KLLIIKCIIKs   C	C C0c                    | j                   S N)rF   rU   s    r[   
embeddingszHanaDB.embeddings   s    ~~    c                0    t        j                  dd|       S )Nz[^a-zA-Z0-9_] )resub)	input_strs    r[   rH   zHanaDB._sanitize_name   s     vv&I66rk   c                z    t        t        |             }|dk  rt        d| d      t        t        |             S )Nr+   Value (z) must not be smaller than -1)r,   r#   rC   )	input_intvalues     r[   rM   zHanaDB._sanitize_int   s;    C	N#2:wug-JKLL3y>""rk   c                R    | D ]!  }t        |t              rt        d| d       | S )Nrr   z) does not have type float)
isinstancefloatrC   )rF   rt   s     r[   _sanitize_list_floatzHanaDB._sanitize_list_float   s:     	NEeU+ 75'1K!LMM	N rk   z^[_a-zA-Z][_a-zA-Z0-9]*$r   _compiled_patternc                    | j                         D ]/  }t        j                  j                  |      r#t	        d|        | S )NzInvalid metadata key )rB   r4   ry   matchrC   )metadatarW   s     r[   _sanitize_metadata_keyszHanaDB._sanitize_metadata_keys   sG    ==? 	@C++11#6 #8!>??	@ rk   c                d    g }| D ](  }t         j                  |      }|j                  |       * |S rh   )r4   rH   append)r5   metadata_columnscsanitized_names       r[   rO   z*HanaDB._sanitize_specific_metadata_columns  s?     * 	4A#2215N##N3	4  rk   c                ~    g }|si g fS | j                   D ]#  }|j                  |j                  |d              % ||fS rh   )r5   r   get)rU   r|   special_metadatarZ   s       r[   _split_off_special_metadataz"HanaDB._split_off_special_metadata  sR    r6M99 	EK##HLLd$CD	E )))rk   c           	        t         | j                     d   }| j                   d| d}|rt        j	                  |      n|}i }i }|<t        j                  |      }d|cxk  rdk  st        d       t        d      ||d<   |<t        j                  |      }d	|cxk  rd
k  st        d       t        d      ||d<   |<t        j                  |      }d	|cxk  rd
k  st        d       t        d      ||d<   |rt        j                  |      nd}	|rt        j                  |      nd}
d| d| j                   d| j                   d| d	}|	r	|d|	 dz  }|
r	|d|
 dz  }|dz  }| j                  j                         }	 |j                  |       |j                          y# |j                          w xY w)a  
        Creates an HNSW vector index on a specified table and vector column with
        optional build and search configurations. If no configurations are provided,
        default parameters from the database are used. If provided values exceed the
        valid ranges, an error will be raised.
        The index is always created in ONLINE mode.

        Args:
            m: (Optional) Maximum number of neighbors per graph node
                (Valid Range: [4, 1000])
            ef_construction: (Optional) Maximal candidates to consider when building
                                the graph (Valid Range: [1, 100000])
            ef_search: (Optional) Minimum candidates for top-k-nearest neighbor
                                queries (Valid Range: [1, 100000])
            index_name: (Optional) Custom index name. Defaults to
                        <table_name>_<distance_strategy>_idx
        r   __idxN   i  z M must be in the range [4, 1000]Mr^   i z/efConstruction must be in the range [1, 100000]efConstructionz)efSearch must be in the range [1, 100000]efSearchrm   zCREATE HNSW VECTOR INDEX z ON "" ("z") SIMILARITY FUNCTION  zBUILD CONFIGURATION 'z' zSEARCH CONFIGURATION 'zONLINE )r   rG   rI   r4   rH   rM   rC   jsondumpsrL   rE   rQ   rR   rS   )rU   mef_construction	ef_search
index_namedistance_func_namedefault_index_namebuild_configsearch_configbuild_config_strsearch_config_strrX   rY   s                r[   create_hnsw_indexzHanaDB.create_hnsw_index  s   2 4D4J4JKAN $02D1ETJ 2<F!!*-AS 	  =$$Q'ANdN !CDD # !CDD !L &$22?CO2F2 !RSS 3 !RSS-<L)*  ,,Y7I,f, !LMM - !LMM(1M*% 8D4::l39FDJJ}5B (
|58I J##$ %##5"6a9 	 ./?.@CCG /0A/B"EEG 	9oo$$&	KK IIKCIIKs   F- -F?c                R   |$| j                   j                  t        |            }g }t        |      D ]  \  }}|r||   ni }| j	                  |      \  }}	|r||   n| j                   j                  |g      d   }
|j                  |t        j                  t        j                  |            ddj                  t        t        |
             dg|	        | j                  j                         }	 dj                  | j                        }|rd|z   dz   }d| j                    d	| j"                   d| j$                   d| j&                   d| d
dt)        | j                        z   d}|j+                  ||       |j-                          g S # |j-                          w xY w)a  Add more texts to the vectorstore.

        Args:
            texts (Iterable[str]): Iterable of strings/text to add to the vectorstore.
            metadatas (Optional[List[dict]], optional): Optional list of metadatas.
                Defaults to None.
            embeddings (Optional[List[List[float]]], optional): Optional pre-generated
                embeddings. Defaults to None.

        Returns:
            List[str]: empty list
        r   [,]z", "z, ""zINSERT INTO "r   z") VALUES (?, ?, TO_REAL_VECTOR (?)z, ?r9   )rF   embed_documentslist	enumerater   r   r   r   r4   r}   joinmapr#   rE   rQ   r5   rI   rJ   rK   rL   rc   executemanyrS   )rU   texts	metadatasrj   kwargs
sql_paramsitextr|   extracted_special_metadatarF   rY    specific_metadata_columns_stringrX   s                 r[   	add_textszHanaDB.add_textsk  s   ( 77UDJ 
 ' 	GAt'0y|bH373S3S40H0
  1^^33TF;A> 
 JJv==hGHS)!456a8 0		( oo$$&	/5{{..0, 0<<sB 1  0T5H5H4I J(() *&&'q)I(J K33t==>>?r	C  OOGZ0IIK	 IIKs   8B
F F&c               L     | |||||||	|
|	      }|j                  ||       |S )a*  Create a HanaDB instance from raw documents.
        This is a user-friendly interface that:
            1. Embeds documents.
            2. Creates a table if it does not yet exist.
            3. Adds the documents to the table.
        This is intended to be a quick way to get started.
        )	rE   rF   rG   rI   rJ   rK   rL   rN   r5   )r   )clsr   rF   r   rE   rG   rI   rJ   rK   rL   rN   r5   instances                r[   
from_textszHanaDB.from_texts  s@    0 !/!)+'!5&?

 	5),rk   c                `    | j                  |||      }|D cg c]  \  }}|	 c}}S c c}}w )am  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: A dictionary of metadata fields and values to filter by.
                    Defaults to None.

        Returns:
            List of Documents most similar to the query
        )querykfilter)similarity_search_with_score)rU   r   r   r   docs_and_scoresdocr   s          r[   similarity_searchzHanaDB.similarity_search  s:     ;;1V < 
 #22Q222   *c                `    | j                   j                  |      }| j                  |||      S )a  Return documents and score values most similar to query.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            filter: A dictionary of metadata fields and values to filter by.
                    Defaults to None.

        Returns:
            List of tuples (containing a Document and a score) that are
            most similar to the query
        rF   r   r   )rF   embed_query&similarity_search_with_score_by_vector)rU   r   r   r   rF   s        r[   r   z#HanaDB.similarity_search_with_score  s7     NN..u5	::1V ; 
 	
rk   c                   g }t         j                  |      }t         j                  |      }t        | j                     d   }ddj                  t        t        |            z   dz   }d| d| j                   d| j                   d| j                   d	| d
| j                   d| j                   d}dt        | j                     d    }| j                  |      \  }	}
|ft        |
      z   }||	z   }||z   }	 | j                  j                         }|j!                  ||       |j#                         rn|j%                         }|D ]Y  }t'        j(                  |d         }t+        |d   |      }t         j-                  |d         }|j/                  ||d   |f       [ |j1                          |S # j1                          w xY w)a  Return docs most similar to the given embedding.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            filter: A dictionary of metadata fields and values to filter by.
                    Defaults to None.

        Returns:
            List of Documents most similar to the query and
            score and the document's embedding vector for each
        r   r   r   r   zSELECT TOP z  "z",   "z",   TO_NVARCHAR("z"),   z("z#", TO_REAL_VECTOR (?)) AS CS FROM "r   z order by CS r^   )page_contentr|         )r4   rM   rx   r   rG   r   r   r#   rJ   rK   rL   rI   _create_where_by_filtertuplerE   rQ   rR   r_   r`   r   loadsr   _parse_float_array_from_stringr   rS   )rU   rF   r   r   resultr   embedding_as_strrX   	order_str	where_strquery_tuplequery_paramsrY   ra   rowjsr   result_vectors                     r[   1similarity_search_with_score_and_vector_by_vectorz8HanaDB.similarity_search_with_score_and_vector_by_vector  s      #//	:	3D4J4JKAN#c9*=!>>D!$%%& '&&' ("001 2#$Bt'9'9&: ;__%Q( 	 $$:4;Q;Q$RST$U#VW	!%!=!=f!E	;(*U;-??I%I%	//((*CKK.!!#||~ @CCF+B"ADC$*$I$I#a&$QMMM3A">?	@ IIK IIKs   9B*F5 5Gc                d    | j                  |||      }|D cg c]  }|d   |d   f c}S c c}w )a  Return docs most similar to the given embedding.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            filter: A dictionary of metadata fields and values to filter by.
                    Defaults to None.

        Returns:
            List of Documents most similar to the query and score for each
        r   r   r^   )r   )rU   rF   r   r   whole_resultresult_items         r[   r   z-HanaDB.similarity_search_with_score_by_vector)  sF     MM1V N 
 EQQ[QQ0QQQs   -c                `    | j                  |||      }|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: A dictionary of metadata fields and values to filter by.
                    Defaults to None.

        Returns:
            List of Documents most similar to the query vector.
        r   )r   )rU   rF   r   r   r   r   r   s          r[   similarity_search_by_vectorz"HanaDB.similarity_search_by_vector<  s;     EE1V F 
 #22Q222r   c                H    g }d}|r| j                  |      \  }}d|z   }||fS )Nrm   z WHERE )_process_filter_object)rU   r   r   r   s       r[   r   zHanaDB._create_where_by_filterO  s9    !#	%)%@%@%H"I{!I-I+%%rk   c                   g }d}|rt        |j                               D ]  \  }}||   }|dk7  r|dz  }|t        v rQt        |   }|}t        |      D ]7  \  }	}
|	dk7  r	|d| dz  }| j                  |
      \  }}|d|z   dz   z  }||z  }9 od}d}t	        |t
              r|j                  |rd	nd
       nt	        |t              st	        |t              r|j                  |       nt	        |t              rt        t        |            }||   }|t        v rt        |   }t	        |t
              r|j                  |rd	nd
       nft	        |t              rd}|j                  |       nAt	        |t              r$d|v r |d   dk(  rd}|j                  |d          n|j                  |       n|t        k(  r1|d   }|d   }d}d}|j                  |       |j                  |       n|t         k(  rd}|j                  |       n|t"        v rwt"        |   }t	        |t$              rMt        |      D ]>  \  }}|dk(  rd}|dz   }|t'        |      dz
  k(  r|dz   }n|dz   }|j                  |       @ n6t)        d| d|       t)        d|       t)        dt+        |             || j,                  v rd| dnd| j.                   d| d}|| d| d| z  } ||fS )Nrm   r   z AND r   r:   )r   ?truefalsezCAST(? as float)typedatezCAST(? as DATE)r^   BETWEENz? AND ?LIKEr   zUnsupported value for z: zUnsupported operator: zUnsupported filter data-type: z "r   zJSON_VALUE(z, '$.z'))r   rB   LOGICAL_OPERATORS_TO_SQLr   rv   boolr   r,   r#   r   nextiterCOMPARISONS_TO_SQLrw   r   BETWEEN_OPERATORLIKE_OPERATORIN_OPERATORS_TO_SQLr   rc   rC   r   r5   rK   )rU   r   r   r   r   rW   filter_valuelogical_operatorlogical_operandsjlogical_operandwhere_str_logicalquery_tuple_logicaloperator	sql_param
special_opspecial_valbetween_from
between_to
list_entryselectors                        r[   r   zHanaDB._process_filter_objectW  sj   	#FKKM2 ZB3%c{6(I 22'?'D$'3$.78H.I ;*?6%1-=,>a)@@I !77H-/!S+<%<s%BB	#'::; 	lD1&&v7Kc2js6S&&|4d3!%d<&8!9J".z":K!%77#5j#A%k48'..v'R'U;(:I'..{;&{D9 &+ 5 +F 3v = ):I'..{6/BC'..{;#'77'21~%0^
#,$-	#**<8#**:6#}4#)#**;7#'::#6z#B%k481:;1G ?:#$603I,5O	#$[)9A)=#>09CI09CI + 2 2: >? #-"8
"[M R#  )+A*)NOO$8l9K8LM  d<<< QK&t';';&<E#bI 
 z8*Ai[AA	uZBx +%%rk   c                (   |t        d      |t        d      | j                  |      \  }}d| j                   d| }	 | j                  j	                         }|j                  ||       |j                          y# j                          w xY w)a  Delete entries by filter with metadata values

        Args:
            ids: Deletion with ids is not supported! A ValueError will be raised.
            filter: A dictionary of metadata fields and values to filter by.
                    An empty filter ({}) will delete all entries in the table.

        Returns:
            Optional[bool]: True, if deletion is technically successful.
            Deletion of zero entries, due to non-matching filters is a success.
        z!Deletion via ids is not supportedz4Parameter 'filter' is required when calling 'delete'zDELETE FROM "z" T)rC   r   rI   rE   rQ   rR   rS   )rU   idsr   r   r   rX   rY   s          r[   deletezHanaDB.delete  s     ?@AA>STT!%!=!=f!E	;!$//!2"YK@	//((*CKK-IIK IIKs   ,A? ?Bc                P   K   t        d| j                  ||       d{   S 7 w)zDelete by vector ID or other criteria.

        Args:
            ids: List of ids to delete.

        Returns:
            Optional[bool]: True if deletion is successful,
            False otherwise, None if not implemented.
        N)r   r   )r   r   )rU   r   r   s      r[   adeletezHanaDB.adelete  s#      %T4;;COOOOs   &$&c                d    | j                   j                  |      }| j                  |||||      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: search query text.
            k: Number of Documents to return. Defaults to 4.
            fetch_k: Number of Documents to fetch 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.
            filter: Filter on metadata properties, e.g.
                            {
                                "str_property": "foo",
                                "int_property": 123
                            }
        Returns:
            List of Documents selected by maximal marginal relevance.
        )rF   r   fetch_klambda_multr   )rF   r   'max_marginal_relevance_search_by_vector)rU   r   r   r  r  r   rF   s          r[   max_marginal_relevance_searchz$HanaDB.max_marginal_relevance_search  s?    : NN..u5	;;# < 
 	
rk   c                f    | dd }|j                  d      D cg c]  }t        |       c}S c c}w )Nr^   r+   r   )splitrw   )array_as_stringarray_wo_bracketsxs      r[   r   z%HanaDB._parse_float_array_from_string  s2    +Ab1"3"9"9#">?Qa???s   .c                    | j                  |||      }|D cg c]  }|d   	 }}t        t        j                  |      |||      }	|	D 
cg c]
  }
||
   d    c}
S c c}w c c}
w )Nr   r   )r  r   r   )r   r   nparray)rU   rF   r   r  r  r   r   r   rj   mmr_doc_indexesr   s              r[   r  z.HanaDB.max_marginal_relevance_search_by_vector  s~     MM76 N 
 9EEk!nE
E4HHY
 -<<qQ"<< F
 =s   AA$c                T   K   t        d| j                  ||||       d{   S 7 w)z:Return docs selected using the maximal marginal relevance.N)rF   r   r  r  )r   r  )rU   rF   r   r  r  s        r[   (amax_marginal_relevance_search_by_vectorz/HanaDB.amax_marginal_relevance_search_by_vector#  s7      %88#
 
 	
 
s   (&(c                    | S rh    )distances    r[   _cosine_relevance_score_fnz!HanaDB._cosine_relevance_score_fn4  s    rk   c                    | j                   t        j                  k(  rt        j                  S | j                   t        j
                  k(  rt        j                  S t        dj                  | j                               )a  
        The 'correct' relevance function
        may differ depending on a few things, including:
        - the distance / similarity metric used by the VectorStore
        - the scale of your embeddings (OpenAI's are unit normed. Many others are not!)
        - embedding dimensionality
        - etc.

        Vectorstores should define their own selection based method of relevance.
        r8   )	rG   r   COSINEr4   r  EUCLIDEAN_DISTANCE_euclidean_relevance_score_fnrC   rD   ri   s    r[   _select_relevance_score_fnz!HanaDB._select_relevance_score_fn8  sg     !!%5%<%<<444##'7'J'JJ7773::4;Q;QR rk   )rE   dbapi.ConnectionrF   r   rG   r   rI   r#   rJ   r#   rK   r#   rL   r#   rN   r,   r5   Optional[List[str]])rI   r#   returnr   )NN)
rI   r#   rZ   r#   re   zOptional[list[str]]rf   Optional[int]r  None)r  r   )rp   r#   r  r#   )rs   anyr  r,   )rF   List[float]r  r  )r|   r   r  r   )r5   	List[str]r  r   )r|   r   r  zTuple[dict, list])NNNN)
r   r  r   r  r   r  r   zOptional[str]r  r  )
r   zIterable[str]r   Optional[List[dict]]rj   zOptional[List[List[float]]]r   r   r  r   )r   r   rF   r   r   r!  rE   r  rG   r   rI   r#   rJ   r#   rK   r#   rL   r#   rN   r,   r5   r  r  r   )r   N)r   r#   r   r,   r   Optional[dict]r  List[Document])r   r#   r   r,   r   r"  r  List[Tuple[Document, float]])rF   r  r   r,   r   r"  r  z)List[Tuple[Document, float, List[float]]])rF   r  r   r,   r   r"  r  r$  )rF   r  r   r,   r   r"  r  r#  )r   r"  r  zTuple[str, list[Any]])r   r  r   r"  r  zOptional[bool])r            ?N)r   r#   r   r,   r  r,   r  rw   r   r"  r  r#  )r  r#   r  r  )rF   r  r   r,   r  r,   r  rw   r   r"  r  r#  )r   r%  r&  )
rF   r  r   r,   r  r,   r  rw   r  r#  )r  rw   r  rw   )r  zCallable[[float], float])-__name__
__module____qualname____doc__default_distance_strategyr$   r&   r(   r*   r-   r\   rP   rT   propertyrj   staticmethodrH   rM   rx   rn   compilery   __annotations__r}   rO   r   r   r   classmethodr   r   r   r   r   r   r   r   r   r   r  r   r  r  r  r  r  rk   r[   r4   r4   F   s   $ /H,462$@F= :>F=$F= F= ,	F=
 F= F= F= F= "F= $7F=P( ,0'+%% % )	%
 %% 
%N   7 7 # #   ",,F!GwG   #, 	   
*  )-#'$(QQ 'Q !	Q
 "Q 
Ql +/26	@@ (@ 0	@
 @ 
@D 
 +/'+.G,462$@# :>## # (	#
 %# ,# # # # # "# $7# 
# #L @D33 3.<3	3( @D

 
.<
	%
* LP-$-),-:H-	2-` LPR$R),R:HR	%R( LP3$3),3:H3	3&&`&F IM&7E	B IMP&P7EP	P"  !%$
$
 $
 	$

 $
 $
 
$
L@  !%== = 	=
 = = 
=*  

 
 	

 
 

"  rk   r4   )4r*  
__future__r   importlib.utilr>   r   rn   typingr   r   r   r   r   r	   r
   r   r   numpyr  langchain_core._apir   langchain_core.documentsr   langchain_core.embeddingsr   langchain_core.runnables.configr   langchain_core.vectorstoresr   typing_extensionsr   &langchain_community.vectorstores.utilsr   r   r7   r   r  r  r   r/  r   r   r   r   r   r+  r$   r&   r(   r*   r-   r4   r  rk   r[   <module>r<     s/   " "   	
 
 
  * - 0 ; 3 "
  :'')>       
  $)$7  -33 & C &(  ()  )) s )$& c & 
	
 5x[ xxrk   