
    Ng{                        d dl Z d dlZd dlZd dlmZmZ d dlmZmZm	Z	m
Z
mZmZmZmZmZmZ d dlmZ d dlZd dlmZ d dlmZ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& d dl'm(Z(m)Z)m*Z*m+Z+ d dl,m-Z-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: d dl;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD d dlEmFZFmGZG d dlHmIZI d dlJmKZK d dlLmMZMmNZN d dlOmPZP d dlQmRZR d dlSmTZTmUZUmVZV d dlWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZb dZcdZddedefdZ G d d          Zedeejf                 d e
ejg                 dejf        fd!Zhdeejf                 d"e
ejg                 dejf        fd#Zid$ejj        dej&        fd%Zkd&ejl        d'emdejl        fd(ZndS ))    N)OrderedDictdefaultdict)
AnyCallableDictListOptionalSequenceTupleUnionget_argsSet)deepcopy)grpc)	constructto_jsonable_python)common_types)get_args_subscribed)
GrpcToRest)models)PointIdsListScoredPoint)DistanceExtendedPointIdSparseVector
OrderValue)reciprocal_rank_fusiondistribution_based_score_fusion)ContextPairContextQueryDenseQueryVectorDiscoveryQueryDistanceOrder	RecoQuerycalculate_context_scorescalculate_discovery_scorescalculate_distancecalculate_recommend_best_scoresdistance_to_order)	MultiQueryVectorMultiRecoQueryMultiDiscoveryQueryMultiContextQueryMultiContextPaircalculate_multi_distance%calculate_multi_recommend_best_scores calculate_multi_discovery_scorescalculate_multi_context_scores)JsonPathItemparse_json_path)to_order_value)calculate_payload_mask)value_by_key
parse_uuid)set_value_by_key)CollectionPersistence)empty_sparse_vectorsort_sparse_vectorvalidate_sparse_vector)SparseContextPairSparseContextQuerySparseDiscoveryQuerySparseQueryVectorSparseRecoQuerycalculate_distance_sparsecalculate_sparse_context_scores!calculate_sparse_discovery_scores&calculate_sparse_recommend_best_scoresmerge_positive_and_negative_avg
sparse_avg g  >xreturnc                     	 t          j        t          j        | d                    S # t          $ r1 t          j        t          j        | dt                              cY S w xY w)NT)	allow_nan)rM   default)jsonloadsdumps	Exception_to_jsonable_pythonrJ   s    `/var/www/html/ai-engine/env/lib/python3.11/site-packages/qdrant_client/local/local_collection.pyr   r   T   sn    Vz$*Q$777888 V V Vz$*Q$@STTTUUUUUVs   '* 8A%$A%c            !       ,   e Zd ZdZ	 	 ddej        dee         deddfdZ	e
d	eeej        f         deeeej        f         eeej        f         f         fd
            ZddZdededdfdZdededdfdZedededefd            ZdededefdZddZedeee         eeee         f         eee                  eeeee                  f         ej        ej        eeeef         eeef         e eee f         ej!        f         deeeeee ej!        f         f         fd            Z"dedej        fdZ#edededefd            Z$edededefd            Z%e	 dde&de'egef         d ede&fd!            Z(e	 dde)d#eee*e         ej+        f         dee)         fd$            Z,	 	 dd%ed#eee*e         ej+        f         d&edeej-                 fd'Z.	 dd%ed(eee*e         df         deej/                 fd)Z0	 dd*eej1                 dee         de2j3        fd+Z4	 	 	 	 	 	 ddeee         eeee         f         eee                  eeeee                  f         ej        ej        eeeef         eeeef         e eee f         ej!        f         d-eej1                 d.ed/ee         d#eee*e         ej+        f         d(eee*e         f         d0ee         deej5                 fd1Z6	 	 	 	 	 	 	 	 	 dd3eej7                 d4eeej8                          d-eej1                 d.ed/ed#eee*e         ej+        f         d(eee*e         f         d0ee         d5ee         d6e&dej9        fd7Z:d4ej8        d/edeej5                 fd8Z;	 	 	 	 	 dd9eeej5                          d3ej7        d.ed/ed5ee         d-eej1                 d0ee         d#eee*e         ej+        f         d(eee*e         f         deej5                 fd:Z<	 	 	 	 	 	 	 	 dd3eej7                 d5ee         d-eej1                 d.ee         d/ee         d#eee*e         ej+        f         d(eee*e         f         d0ee         deej5                 fd;Z=	 	 	 	 	 	 	 	 	 	 	 dd=ed3eej>        ee         eee                  ej        ej7        ej!        ej?        df         d5ee         d4eej8        eej8                 df         d-eej1                 d.ed>ed#eee*e         ej+        f         d(eee*e         f         d0ee         d?eej@                 d@ed          dejA        fdAZB	 	 	 	 	 	 	 	 ddee*e         eee                  eeeejC        eDeEeFej!        f         f         ej        ej        eDeEeFej!        f	         d=ed-eej1                 d.ed>ed#eee*e         ej+        f         d(eee*e         f         d0ee         d?eej@                 d@ed          dejA        fdCZG	 	 ddedDeej1                 d.edejH        fdEZI	 	 ddFe*ej>                 d#eee*e         ej+        f         d(eee*e         f         deejJ                 fdGZK	 	 	 	 	 	 	 ddHee*ejL                          dIee*ejL                          dJeejM                 d-eej1                 d5ee         dKed          dLee         deeee                  eee                  eej                 eej                 eeee                           eeee                           ej1        f         fdMZNe
dNeee                  dOeee                  dej!        fdP            ZOe
dNeej                 dOeej                 dej        fdQ            ZP	 	 	 	 	 	 	 ddHee*ejL                          dIee*ejL                          d-eej1                 d5ee         dKed          dLee         dJeejM                 deeeDeEeFej        ej!        f         ej1        f         fdRZQ	 	 	 	 	 	 	 	 	 	 	 	 ddHee*ejL                          dIee*ejL                          d-eej1                 d.ed/ed#eee*e         ej+        f         d(eee*e         f         d0ee         d5ee         dKed          dLee         dJeejM                 deej5                 fdSZR	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd=edHee*ejL                          dIee*ejL                          d-eej1                 d.ed>ed0ee         d#eee*e         ej+        f         d(eee*e         f         d5ee         dKed          dLee         d?eej@                 d@ed          dJeejM                 dejA        f dTZS	 	 	 	 dd-eej1                 d.edUed5ee         dejT        f
dVZU	 	 	 	 dd-eej1                 d.edUed5ee         dejV        f
dWZW	 	 	 	 dd-eej1                 d.edUed5ee         deeeX         eee5                  f         f
dXZYe
dYeejL                 dZd dedeejC        ej>        f         fd[            ZZd\eej[                 dZd dedeee[         ee\         ee]         eej>                 f         fd]Z^	 	 	 	 	 	 ddYeejL                 d\ee*ej[                          d-eej1                 d5ee         dKed          dLee         deeejC                 ee[         ee\         ee]         ej1        f         fd^Z_	 	 	 	 	 	 	 	 	 	 	 ddYeejL                 d\ee*ej[                          d-eej1                 d.ed/ed#eee*e         ej+        f         d(eee*e         f         d5ee         dKed          dLee         d0ee         deej5                 fd_Z`ed`ejX        deeef         fda            Za	 	 	 	 	 	 ddbeej1                 d.edceejb                 d/eej>                 d#eee*e         ej+        f         d(eee*e         f         deeejJ                 eej>                 f         fddZcddeeej1                 dejd        fdfZe	 	 	 	 	 ddbeej1                 d.ed/eej>                 d#eee*e         ej+        f         d(eee*e         f         deeejJ                 eej>                 f         fdgZf	 	 	 	 ddcejb        dbeej1                 d.ed#eee*e         ej+        f         d(eee*e         f         deeejJ                 eej>                 f         fdhZg	 	 dd.ed-eej1                 d#eee*e         ej+        f         d(eee*e         f         deej5                 f
diZhdjeji        ddfdkZjdjeji        ddfdlZkdjeji        ddfdmZldnee*eji                 ejm        f         ddfdoZnd%ed	eeeee         ef         f         ddfdpZodne*ejp                 ddfdqZqd	e*e         dreej1        eejX                 ejr        ejs        f         ddfdsZtdFeej>                 ddfdtZuduej1        deejX                 fdvZvdreej1        eejX                 ejr        ejs        f         deejX                 fdwZwdreej1        eejX                 ejr        ejs        f         ddfdxZxd`ejX        ddfdyZy	 ddej-        dreej1        eejX                 ejr        ejs        f         dee         ddfdzZzdej-        dreej1        eejX                 ejr        ejs        f         ddfd{Z{d|e*e         dreej1        eejX                 ejr        ejs        f         ddfd}Z|dreej1        eejX                 ejr        ejs        f         ddfd~Z}de*ej~                 ddfdZdedej        ddfdZdej        fdZdS )LocalCollectionzb
    LocalCollection is a class that represents a collection of vectors in the local storage.
    NFconfiglocationforce_disable_check_same_threadrK   c                 F   |                      |j                  \  | _        | _        |j        }d | j                                        D             | _        |d |                                D             ni | _        i | _        d | j        D             | _        g | _        t          j
        dt                    | _        t          | j                                                  t          | j                                                  z   t          | j                                                  z   | _        d | j        D             | _        i | _        g | _        |du| _        d| _        || _        |t-          ||          | _        |                                  dS )a2  
        Create or load a collection from the local storage.
        Args:
            location: path to the collection directory. If None, the collection will be created in memory.
            force_disable_check_same_thread: force disable check_same_thread for sqlite3 connection. default: False
        c                 d    i | ]-\  }}|t          j        d |j        ft           j                  .S r   dtype)npzerossizefloat32.0nameparamss      rU   
<dictcomp>z,LocalCollection.__init__.<locals>.<dictcomp>p   sF     5
 5
 5
f "(Av{+2:>>>5
 5
 5
    Nc                     i | ]\  }}|g 	S  rk   rd   s      rU   rh   z,LocalCollection.__init__.<locals>.<dictcomp>u   s    HHH,$T2HHHri   c                     i | ]}|g S rk   rk   re   rf   s     rU   rh   z,LocalCollection.__init__.<locals>.<dictcomp>|   s-     @
 @
 @
D"@
 @
 @
ri   r   r^   c                 F    i | ]}|t          j        d t                    S r]   )r`   ra   boolrm   s     rU   rh   z,LocalCollection.__init__.<locals>.<dictcomp>   s6     #
 #
 #
.2D"(1D)))#
 #
 #
ri   )_resolve_vectors_configvectorsvectors_configmultivectors_configsparse_vectorsitemssparse_vectors_idfmultivectorspayloadr`   ra   ro   deletedlistkeys_all_vectors_keysdeleted_per_vectoridsids_inv
persistentstoragerX   r:   load_vectors)selfrX   rY   rZ   sparse_vectors_configs        rU   __init__zLocalCollection.__init__`   s    9=8T8TN9
 9
5T5 !' 55
 5
 $ 3 9 9 ; ;5
 5
 5
 %0 IH*?*E*E*G*GHHHH 	  	@
 @
!%!9@
 @
 @
 .0x...""$$%%4&++--../4$))++,,- 	
#
 #
6:6L#
 #
 #
 7957"$.0;Z[[DLri   rq   c                     i }i }t          | t          j                  r| j        
t          | i}n	t          | i}||fS |                                 D ]\  }}|j        |||<   |||<   ||fS N)
isinstancer   VectorParamsmultivector_configDEFAULT_VECTOR_NAMEru   )rq   rr   rs   rf   rg   s        rU   rp   z'LocalCollection._resolve_vectors_config   s      gv233 	7)5':G&D##"5w!?!#666#MMOO 	. 	.LD&(4,2#D))'-t$$222ri   c                 J    | j         | j                                          d S d S r   )r   closer   s    rU   r   zLocalCollection.close   s,    <#L      $#ri   vectorvector_namec                     || j         vrt          t                    | j         |<   |j        D ]}| j         |         |xx         dz  cc<   d S N   )rv   r   intindicesr   r   r   idxs       rU   _update_idf_appendz"LocalCollection._update_idf_append   sg    d5553>s3C3CD#K0> 	; 	;C#K0555:5555	; 	;ri   c                 P    |j         D ]}| j        |         |xx         dz  cc<   d S r   )r   rv   r   s       rU   _update_idf_removez"LocalCollection._update_idf_remove   sD    > 	; 	;C#K0555:5555	; 	;ri   dfnc                 H    t          j        ||z
  dz   |dz   z  dz             S )Ng      ?r   )mathlog)clsr   r   s      rU   _compute_idfzLocalCollection._compute_idf   s*     xR#"s(3a7888ri   c                 J   |                      d           j         }g }| j        |         }t          |j        |j                  D ]I\  }}|                    |d          }|                     ||          }	|                    ||	z             Jt          |j        |          S )N)count_filterr   )r   values)	countrv   zipr   r   getr   appendr   )
r   r   r   num_docs
new_values	idf_storer   valuedocument_frequencyidfs
             rU   _rescore_idfzLocalCollection._rescore_idf   s    ::4:006
+K8	fnfm<< 	+ 	+JC!*sA!6!6##$6AACeck****FN:FFFFri   c                 	   | j         t          t                    }t          t                    }t          t                    }g }t          | j                                                   D ]\  }}|| j        |j        <   | j                            |j                   | j	                            t          |j	                  pi            |j        }t          |j        t                    rt          |j        i}t          | j                                                  }|D ]}	|                    |	          }
|
||	                             |
           5||	                             t#          j        | j        |	         j        t"          j                             |                    ||	f           t          | j                                                  }|D ]s}	|                    |	          }
|
||	                             |
           5||	                             t/                                 |                    ||	f           tt          | j                                                  }|D ]y}	|                    |	          }
|
||	                             |
           5||	                             t#          j        g                      |                    ||	f           z|                                D ]V\  }	}t#          j        |          | j        |	<   t#          j        t9          | j	                  t:                    | j        |	<   W|                                D ]_\  }	}|| j        |	<   t#          j        t9          | j	                  t:                    | j        |	<   |D ]}|                     ||	           `|                                D ]N\  }	}d |D             | j        |	<   t#          j        t9          | j	                  t:                    | j        |	<   O|D ]\  }}	d| j        |	         |<   t#          j        t9          | j	                  t:                    | _         d S d S )Nr^   c                 6    g | ]}t          j        |          S rk   )r`   array)re   r   s     rU   
<listcomp>z0LocalCollection.load_vectors.<locals>.<listcomp>  s"    *X*X*X28F+;+;*X*X*Xri   r   )!r   r   rz   	enumerateloadr~   idr   r   rx   r   r   r   r   rq   r{   r   r`   onesrr   rb   rc   rt   r;   rw   r   ru   ra   lenro   r}   r   ry   )r   rq   rt   rw   deleted_idsr   pointloaded_vectorall_dense_vector_namesrf   vall_sparse_vector_namesall_multivector_namesnamed_vectorsr   s                  rU   r   zLocalCollection.load_vectors   st   <#!$''G(..N&t,,LK'(9(9(;(;<< .8 .8
U%("##EH--- ##$6u}$E$E$KLLL !& elD11 H%8%,$GM *.dl.?.?.A.A)B)B&2 8 8D%))$//A},,Q////,,GD$7$=$B"*UUU   $**C;7777 +/t/B/G/G/I/I*J*J'3 8 8D%))$//A}&t,33A6666&t,334G4I4IJJJ#**C;7777 )-T->-C-C-E-E(F(F%1 8 8D%))$//A}$T*11!4444$T*11"(2,,???#**C;77778 (/}} X X#m%'Xm%<%<T"02T\9J9JRV0W0W0W'-- (6';';'='= : :#m,9#D)02T\9J9JRV0W0W0W'-+ : :F++FD9999: (4'9'9';'; X X#m*X*X-*X*X*X!$'02T\9J9JRV0W0W0W'-- ) 7 7	T56'-c228C$5$5TBBBDLLLW $#ri   query_vectorc                    t          |t                    r4|\  }}t          |t                    rt          j        |          }n5|}n1t          |t          j                  rt          }|}nt          |t          j                  r!|j	        }t          j        |j
                  }nt          |t          j                  r|j	        }|j
        }nt          |t                    rt          }t          j        |          }nwt          |t          t                              r
t          }|}nKt          |t          t                              r
t          }|}nt          dt!          |                     ||fS )NzUnsupported vector type )r   tuplerz   r`   r   ndarrayr   typesNamedVectorrf   r   NamedSparseVectorr   r!   r*   
ValueErrortype)r   r   rf   queryr   s        rU   _resolve_query_vector_namez*LocalCollection._resolve_query_vector_name  se   . lE** 	N&KD%%&& %bj11 	N&D!FFe&788 	N$DXl122FFe&=>> 	N$D!(FFd++ 
	N&DXl++FFh/?&@&@AA 	N&D!FFh/?&@&@AA 	N&D!FFL\8J8JLLMMMV|ri   rf   c                 z   t          | j        j        t                    r3|| j        j        v r| j        j        |         S t	          d| d          t          | j        j        t
          j                  r*|t          k    rt	          d| d          | j        j        S t	          d| j        j                   )NVector  is not found in the collectionzMalformed config.vectors: )r   rX   rq   dictr   r   r   r   )r   rf   s     rU   get_vector_paramsz!LocalCollection.get_vector_paramsH  s    dk)400 	Rt{***{*400 !P4!P!P!PQQQdk)6+>?? 	'*** !P4!P!P!PQQQ;&&Kdk6IKKLLLri   patternkeyc                     |                     dd                              d          }|                     dd                              d          }t          d t          ||          D                       S )a  
        >>> LocalCollection._check_include_pattern('a', 'a')
        True
        >>> LocalCollection._check_include_pattern('a.b', 'b')
        False
        >>> LocalCollection._check_include_pattern('a.b', 'a.b')
        True
        >>> LocalCollection._check_include_pattern('a.b', 'a.b.c')
        True
        >>> LocalCollection._check_include_pattern('a.b[]', 'a.b[].c')
        True
        >>> LocalCollection._check_include_pattern('a.b[]', 'a.b.c')
        False
        >>> LocalCollection._check_include_pattern('a', 'a.b')
        True
        >>> LocalCollection._check_include_pattern('a.b', 'a')
        True
        >>> LocalCollection._check_include_pattern('a', 'aa.b.c')
        False
        >>> LocalCollection._check_include_pattern('a_b', 'a')
        False
        .[.[c              3   (   K   | ]\  }}||k    V  d S r   rk   re   pr   s      rU   	<genexpr>z9LocalCollection._check_include_pattern.<locals>.<genexpr>q  *      DDda16DDDDDDri   )replacesplitallr   r   r   r   pattern_parts	key_partss        rU   _check_include_patternz&LocalCollection._check_include_patternW  sm    0  T2288==KKT**0055	DDc-&C&CDDDDDDri   c                 8   t          |          t          |          k    rdS |                    dd                              d          }|                    dd                              d          }t          d t	          ||          D                       S )NFr   r   r   c              3   (   K   | ]\  }}||k    V  d S r   rk   r   s      rU   r   z9LocalCollection._check_exclude_pattern.<locals>.<genexpr>y  r   ri   )r   r   r   r   r   r   s        rU   _check_exclude_patternz&LocalCollection._check_exclude_patterns  s    w<<#c((""5T2288==KKT**0055	DDc-&C&CDDDDDDri   rI   rx   	predicatepathc                    t          |t                    rWi }|dk    r|dz   }n|}|                                D ]0\  }} |||z             r|                     ||||z             ||<   1|S t          |t                    rSg }|dz   }t          |          D ]:\  }	} ||          r*|                    |                     |||                     ;|S |S )NrI   r   z[])r   r   ru   _filter_payloadrz   r   r   )
r   rx   r   r   resnew_pathr   r   	res_arrayr   s
             rU   r   zLocalCollection._filter_payload{  s    gt$$ 	Crzz#:%mmoo U U
U9X^,, U"225)XPS^TTCHJ&& 	I$;D'00 R R
U9T?? R$$S%8%8	4%P%PQQQNri   Twith_payloadc                 n    sd S t          t                    r|S t          t                    r                     | fd          S t          t          j                  r                     | fd          S t          t          j                  r                     | fd          S |S )Nc                 H     t          t           fd                    S )Nc                 0                         |           S r   r   r   r   r   s    rU   <lambda>zDLocalCollection._process_payload.<locals>.<lambda>.<locals>.<lambda>      (B(B7C(P(P ri   )anymapr   r   r   s   `rU   r   z2LocalCollection._process_payload.<locals>.<lambda>  s-    CPPPPPR^__  ri   c                 R     t          t           fdj                            S )Nc                 0                         |           S r   r   r   s    rU   r   zDLocalCollection._process_payload.<locals>.<lambda>.<locals>.<lambda>  r   ri   )r   r   includer   s   `rU   r   z2LocalCollection._process_payload.<locals>.<lambda>  s4    CPPPPP$,   ri   c                 R     t          t           fdj                            S )Nc                 2                         |            S r   )r   r   s    rU   r   zDLocalCollection._process_payload.<locals>.<lambda>.<locals>.<lambda>  s    C,F,FwPS,T,T(T ri   )r   r   excluder   s   `rU   r   z2LocalCollection._process_payload.<locals>.<lambda>  s4    CTTTTT$,   ri   )r   ro   rz   r   r   PayloadSelectorIncludePayloadSelectorExclude)r   rx   r   s   ` `rU   _process_payloadz LocalCollection._process_payload  s     	4lD)) 	NlD)) 	&&       lF$ABB 		&&       lF$ABB 		&&       ri   r   return_copyc                 n    | j         |         }|                     ||          }|rt          |          n|S r   )rx   r   r   )r   r   r   r  rx   processed_payloads         rU   _get_payloadzLocalCollection._get_payload  s@     ,s# 11'<HH.9Px)***?PPri   with_vectorsc                 <    |du s|d S  fd j         D             } fd j        D             } fd j        D             }i |||t          |t                    rfd|D             t                    dk    rt          v rt                   S S )NFc                     i | ];}j         |                  |j        |                                                  <S rk   )r}   rq   tolistre   rf   r   r   s     rU   rh   z0LocalCollection._get_vectors.<locals>.<dictcomp>  sV     
 
 
*405
$,t$S)0022
 
 
ri   c                 ^    i | ])}j         |                  |j        |                  *S rk   )r}   rt   r	  s     rU   rh   z0LocalCollection._get_vectors.<locals>.<dictcomp>  sK     
 
 
*405
$%d+C0
 
 
ri   c                     i | ];}j         |                  |j        |                                                  <S rk   )r}   rw   r  r	  s     rU   rh   z0LocalCollection._get_vectors.<locals>.<dictcomp>  sW     
 
 
*405
$#D)#.5577
 
 
ri   c                 *    i | ]}|v ||         S rk   rk   )re   rf   all_vectorss     rU   rh   z0LocalCollection._get_vectors.<locals>.<dictcomp>  s+    cccttWbObOb4T!2ObObObri   r   )rq   rt   rw   r   rz   r   r   )r   r   r  dense_vectorsrt   rw   r  s   ``    @rU   _get_vectorszLocalCollection._get_vectors  s    5  L$84
 
 
 
 

 
 

 
 
 
 
+
 
 

 
 
 
 
)
 
 
 JI.ILIlD)) 	dcccc|cccK{q  %8K%G%G233ri   payload_filterc                 z    t          | j        || j                  }|| j         z  }||| j        |          z  }|S )zo
        Calculate mask for filtered payload and non-deleted points. True - accepted, False - rejected
        )payloadsr  r   )r6   rx   r   ry   r}   )r   r  r   payload_maskmasks        rU   _payload_and_non_deleted_maskz-LocalCollection._payload_and_non_deleted_mask  sU     .\)L
 
 
 t|m+"42;???Dri   
   query_filterlimitoffsetscore_thresholdc                 V                          |          \  }g }d}	d}
t          |t          t                              rd j        vrt          d d           j                 } j        j                 j        t          j	        j
        k    rd}
t          j        }d}	nt          |t          t                              s2t          |t          j                  r\t!          |j                  dk    rD j        vrt          d d           j                 }                               j        }nC j        vrt          d d           j                 }                               j        }|d t!           j                           }t          |t          j                  r>t!          |j                  dk    rt/          |||          }nAt1          |||          }n.t          |t2                    rt5          |||          }nt          |t6                    r-|
r|                     fd	          }t;          ||          }nt          |t<                    rt?          |||          }nt          |t@                    rtC          |||          }ntt          |tD                    r-|
r|                     fd
          }tG          ||          }n2t          |tH                    rtK          |||          }n
t          |tL                    rtO          |||          }nt          |tP                    r,|
r|                     fd          }tS          ||          }nt          |tT                    rtW          |||          }n{t          |tX                    rGt[          |           |
r .                    |          }t_          |          }ta          ||          }nt          dtc          |                      2                    |          }tg          |          }|th          j5        k    s4t          |t@          tL          t2          tH          tT          t<          f          rt          j6        |          d d d         }nt          j6        |          }||nd}|D ]}t!          |          ||z   k    r n||         s#||         }|	r|t          j7         k    r? j8        |         }|!|th          j5        k    r	||k     r nsn||k    r njts          t          j:        |tw          |          d <                    ||           =                    ||                    }|>                    |           ||d          S )NFzSparse vector r   T   zMultivector zDense vector r   c                 0                         |           S r   r   rJ   rf   r   s    rU   r   z(LocalCollection.search.<locals>.<lambda>D      tGXGXYZ\`GaGa ri   c                 0                         |           S r   r  r  s    rU   r   z(LocalCollection.search.<locals>.<lambda>L  r   ri   c                 0                         |           S r   r  r  s    rU   r   z(LocalCollection.search.<locals>.<lambda>T  r   ri   zUnsupported query vector type )r   r   r   scoreversionrx   r   )?r   r   r   rA   rt   r   rX   modifierr   ModifierIDFr   DOTr*   r`   r   r   shaperw   r   distancerq   rx   r'   r/   r$   r(   rB   transform_sparserF   r+   r0   r"   r&   r@   rE   r,   r1   r    r%   r?   rD   r-   r2   r   r=   r   r<   rC   r   r  r)   r#   BIGGER_IS_BETTERargsortinfr   r   r   floatr  r  r   )r   r   r  r  r  r   r  r  resultsparse_scoringrescore_idfrq   r,  scoresr  required_orderorderr   r%  point_idscored_pointrf   s   `                    @rU   searchzLocalCollection.search  s   0 "<<\JJl+- lH->$?$?@@ 	=4... !W$!W!W!WXXX)$/G{)$/8FO<OOO"|H!NNh/?&@&@AA 	=|RZ00	=589K5L5LPQ5Q5Q4,,, !U!U!U!UVVV'-G--d33<HH4<'' !V!V!V!VWWWl4(G--d33<H-C---.lBJ// %	V<%&&!+++L'8LL1,RRi00  	V4\7HUUFFo66 	V c+<<=a=a=a=a=abb;L'RRFFn55 	V:<RZ[[FFn55 	V/gxPPFF&:;; 	V c+<<=a=a=a=a=abb6|WMMFF&9:: 	V5lGXVVFFl33 	V-lGXNNFF&899 	V c+<<=a=a=a=a=abb4\7KKFF&788 
	V3L'8TTFFl33 	V"<000 E#00tDD-l;;L.|WEEFFStL?Q?QSSTTU11,D1QQ*844];;;z#!
@
 
@
; Jv&&ttt,EEJv&&E!-1 	( 	(C6{{efn,,9 3KE %BF7"2"2|C(H*!]%CCC.. / ..$"Ell))#|<<((l;;  L MM,''''fggri   r   r   prefetchusingkwargsc
                 (    g }|t          |t                    r|n|g}t          |          dk    r. fd|D             }                     ||||	||||	  	        }n                     ||	|||||          }t          j        |          S )z
        Queries points in the local collection, resolving any prefetches first.

        Assumes all vectors have been homogenized so that there are no ids in the inputs
        Nr   c                 <    g | ]}                     |          S rk   	_prefetch)re   r;  r  r   s     rU   r   z0LocalCollection.query_points.<locals>.<listcomp>  s'    SSSHt~~h77SSSri   	sourcesr   r  r  r<  r  r   r  r  r   r<  r  r  r  r   r  r  )points)r   rz   r   _merge_sources_query_collectionr   QueryResponse)r   r   r;  r  r  r  r   r  r  r<  r=  
prefetchesrC  scored_pointss   `    `        rU   query_pointszLocalCollection.query_points  s    $ 
%/$%?%?OhZJz??QSSSSS
SSSG !//))) / 0 
 
MM !22))) / 3 	 	M "-8888ri   c                     |j         |j         z   |_         g }|j        )t          |j        t                    r|j        n|j        g}t	          |          dk    rF fd|D             }                     ||j        |j         d|j        |j        dd|j	        	  	        S  
                    |j        |j        |j        |j         ddd|j	                  S )Nr   c                 <    g | ]}                     |          S rk   r@  )re   inner_prefetchr  r   s     rU   r   z-LocalCollection._prefetch.<locals>.<listcomp>  s4       ;I~v66  ri   FrB  rD  )r  r;  r   rz   r   rF  r   r<  filterr  rG  )r   r;  r  inner_prefetchesrC  s   ` `  rU   rA  zLocalCollection._prefetch  s   >%%^f4HN(%/0A4%H%Ha!!xO`Na    1$$    M]  G
 &&nnn%_"" ( 8 ' 
 
 
 ))nn%_n"" ( 8 * 	 	 	ri   rC  c
           
         t          |t          j                  r|j        t          j        j        k    rt          |||z             }
nG|j        t          j        j        k    rt          |||z             }
nt          d|j         d          d |
D             }| 
                    |||	          }t          ||
          D ]\  }}|j        |_        |j        |_        |
|d          S t                      }|D ]!}|D ]}|                    |j                   "t#          |          dk    rg S t%          |t'          |                    }|                     |||||||	|          S )N)	responsesr  zFusion method z does not existc                     g | ]	}|j         
S rk   r   )re   r   s     rU   r   z2LocalCollection._merge_sources.<locals>.<listcomp>  s    ///58///ri   )r   r  r   rD  )r   r   FusionQueryfusionFusionRRFr   DBSFr   r   retriever   rx   r   setaddr   r   _include_ids_in_filterrz   rG  )r   rC  r   r  r  r<  r  r  r   r  fusedr~   fetched_pointsfetchedscoredsources_idssourcer   filter_with_sourcess                      rU   rF  zLocalCollection._merge_sources  s    eV/00 *	|v}000.PVWWW!3337'QVY_Q_``` !O%,!O!O!OPPP 0////C!]],\ +  N $'~u#=#= / /!( '>! %%K! . .# . .EOOEH----. ;1$$	&<\4P[K\K\&]&]#--!4!!-!-$3 . 	 	 	ri   c	                    |pt           }|pd}|pd}|3|                     |||z   ||          \  }	}
d |	|d         D             S t          |t          j                  r#|                     ||j        f||||||          S t          |t          j                  r=|                     |j        j	        |j        j
        |j        j        |||||||
  
        S t          |t          j                  r2|                     |j        j        |j        j        |||||||	  	        S t          |t          j                  r"|                     |j        |||||||	          S t          |t          j                  r9|                     ||j        ||z   ||
          \  }	}
d |	|d         D             S t          |t          j                  rM|j        t          j        j        k    r|                     ||z   |||          S t1          d|j                   t          |t          j                  rt5          d          |                     ||f||||||          S )z_
        Performs the query on the collection, assuming it didn't have any prefetches.
        r  r   N)scroll_filterr  r   r  c                 ,    g | ]}t          |          S rk   record_to_scored_pointre   records     rU   r   z5LocalCollection._query_collection.<locals>.<listcomp>F  !    RRRv*622RRRri   r   r  r  r  r   r  r  )
positivenegativestrategyr<  r  r  r  r   r  r  )	targetcontextr<  r  r  r  r   r  r  )rr  r<  r  r  r  r   r  r  )rf  order_byr  r   r  c                 ,    g | ]}t          |          S rk   rh  rj  s     rU   r   z5LocalCollection._query_collection.<locals>.<listcomp>}  rl  ri   )r  r  r   r  zUnknown Sample variant: z(Cannot perform fusion without prefetches)r   scrollr   r   NearestQueryr:  nearestRecommendQuery	recommendrn  ro  rp  DiscoverQuerydiscoverrq  rr  r    OrderByQueryrs  SampleQuerysampleSampleRANDOM_sample_randomlyr   rU  AssertionError)r   r   r<  r  r  r  r   r  r  records_s              rU   rG  z!LocalCollection._query_collection,  s    ,,1=*fn))	 %  JGQ SRAQRRRRv233 M	;;#U]3))) /     v455 C	>>111))) / "    v344 6	==~,.))) / ! 
 
 
 v233 *	==))) / ! 	 	 	 v233 	*fn)) %  JGQ SRAQRRRRv122 	|v}333,,&.!-!-!-	 -    !!JEL!J!JKKKv122 	 !KLLL ;;#U^))) /    ri      group_by
group_sizewith_lookupwith_lookup_collectionc           
         t          | j                  }|Rt          |t                    r-g }|D ]'}|                    t          ||                     |}(nt          ||          }|                     ||||t          | j                  d|	|
          }t                      }|j        D ]}t          |j	        t                    st          |j	        |          }|5t          t          d |D                                 }|                     |j	        |          |_	        |D ]^}||vrt          j        |g           ||<   t          ||         j                  |k    r>||         j                            |           _t          |                                          d |         }t          |t$                    rt          j        |d d           }|Q|O|D ]L}|                    |j        g|j        |j                  }t1          t3          |          d           |_        Mt          j        |          S )NT)r   r  r;  r<  r  r   r  r  c              3   R   K   | ]"}t          |t          t          f          |V  #d S r   r   strr   re   r   s     rU   r   z/LocalCollection.query_groups.<locals>.<genexpr>  6      #Y#Y!z!cSVZ?X?X#YA#Y#Y#Y#Y#Y#Yri   r   hits
collectionr   r  r~   r   r  groups)r   r   r   rz   r   set_prefetch_limit_recursivelyrK  r   rE  rx   r   r7   r[  r   r   
PointGroupr  r   r  
WithLookuprZ  r   r   r  nextiterlookupGroupsResult)r   r  r   r<  r;  r  r  r  r   r  r  r  r  	max_limittmpr   rE  r  r   group_valuesgroup_valuegroups_resultgroupr  s                           rU   query_groupszLocalCollection.query_groups  s   0 %%	(D)) O! # #AJJ=aKKLLL"HH# :(INN""%dl##%+ # 	
 	
 ] 	7 	7EemT22 'x@@L##Y#Y|#Y#Y#Y Y YZZL 11%-NNEM+ 7 7f,,*0*;{QS*T*T*TF;'vk*/00J>>{#(//66667 26fmmoo1F1Fvv1Nk3'' 	 +&!!  K "'='I& 8 8/88
!,!9!,!9 9  
  $DLL$77"-8888ri   r   c                    |                      ||t          | j                  d||          }t                      }|D ]}t	          |j        t                    st          |j        |          }|5t          t          d |D                                 }| 
                    |j        |          |_        |D ]^}||vrt          j        |g           ||<   t          ||         j                  |k    r>||         j                            |           _t          |                                          d |         }t	          |	t                     rt          j        |	d d           }	|	Q|
O|D ]L}|
                    |j        g|	j        |	j                  }t-          t/          |          d           |_        Mt          j        |          S )NT)r   r  r  r   r  r  c              3   R   K   | ]"}t          |t          t          f          |V  #d S r   r  r  s     rU   r   z0LocalCollection.search_groups.<locals>.<genexpr>"  r  ri   r  r  r  r  )r:  r   r   r   r   rx   r   r7   rz   r[  r   r   r  r  r   r   r  r  rZ  r   r   r  r  r  r  r  )r   r   r  r  r  r  r   r  r  r  r  rE  r  r   r  r  r  r  r  s                      rU   search_groupszLocalCollection.search_groups  s   @ %%dl##%+  
 
  	7 	7EemT22 'x@@L##Y#Y|#Y#Y#Y Y YZZL 11%-NNEM+ 7 7f,,*0*;{QS*T*T*TF;'vk*/00J>>{#(//66667 26fmmoo1F1Fvv1Nk3'' 	 +&!!  K "'='I& 8 8/88
!,!9!,!9 9  
  $DLL$77"-8888ri   facet_filterc                    t          t                    }|                     |          }t          | j                  D ]\  }}||         st          |t                    s$t          ||          }|7t                      }	|D ]`}
t          |
          t          t          j                  vr+t          |
          }|rt          |          }
|	                    |
           a|	D ]}
||
xx         dz  cc<   d t!          |                                d           d |         D             }t          j        |          S )Nr   c                 @    g | ]\  }}t          j        ||           S ))r   r   )r   FacetValueHit)re   r   r   s      rU   r   z)LocalCollection.facet.<locals>.<listcomp>k  s<     
 
 
u  uE:::
 
 
ri   c                 $    | d          | d         fS )Nr   r   rk   rT   s    rU   r   z'LocalCollection.facet.<locals>.<lambda>p  s    !uadm ri   r   )r  )r   r   r  r   rx   r   r   r7   r[  r   r   r   
FacetValuer8   r  r\  sortedru   FacetResponse)r   r   r  r  
facet_hitsr  r   rx   r   
values_setr   as_uuidr  s                rU   facetzLocalCollection.facetC  s    3>c2B2B
11,??%dl33 	# 	#LC9 gt,, !'3//F~ 14J  	" 	"77"5e6F"G"GGG %Q-- %GAq!!!! # #1"#
 
 &  ""++! ! ! uf	!
 
 
 "----ri   r~   c                 
   g }|D ]}}|| j         vr| j         |         }| j        |         dk    r+|                    t          j        ||                     ||          |                     ||                               ~|S )Nr   r   rx   r   )r~   ry   r   r   Recordr  r  )r   r~   r   r  r2  r8  r   s          rU   rZ  zLocalCollection.retrievev  s      	 	Htx''(8$C|C A%%MM --c<@@,,S,??      ri   rn  ro  rp  lookup_from_collectionlookup_from_vector_namec           
          dt           t          j                 dt          t          t          t
                            t          t          j                 t          t          t          t
                                     f         dd f fd}||n ||nt          }	||n|	||ng }||ng }|t          j	        j
        k    r#t          |          dk    rt          d          nJ|t          j	        j        k    r5t          |          dk    r"t          |          dk    rt          d          g }
g }g }g }g }g }g j        v }j        v }|r j         |||            |||           nA|r j         |||            |||           nj         |||
            |||           t#          |          }|
||||||fS )NexamplesaccrK   c                    | D ]}t          |t          t          j                            r|j        vrt          d| d          j        |         }	         |         }t          |t          j                  r|                                }|	                    |           k    r	                    |           |	                    |           d S NPoint r   )
r   r   r   PointIdr~   r   r`   r   r  r   )
r  r  exampler   vecr  collection_vectorsmentioned_idsr   r   s
        rU   examples_into_vectorszJLocalCollection._preprocess_recommend_input.<locals>.examples_into_vectors  s     $ ( (gx'>'>?? (jn44()Z')Z)Z)Z[[[$.1C,[9#>C!#rz22 +!jjllJJsOOO!T))%,,W555JJw''''( (ri   r   zPositive list is emptyz&No positive or negative examples given)r
   r   VectorInputr   r   r1  r   r   r   RecommendStrategyAVERAGE_VECTORr   r   
BEST_SCORErt   rw   rq   ignore_mentioned_ids_filter)r   rn  ro  rp  r  r<  r  r  r  search_in_vector_namepositive_vectorsnegative_vectorssparse_positive_vectorssparse_negative_vectorspositive_multivectorsnegative_multivectorssparsemultir  r  r  r   s   `                 @@@@rU   _preprocess_recommend_inputz+LocalCollection._preprocess_recommend_input  sz   $	(v12	(tDK($v/B*CT$tTY{J[E\\]	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(& 0F/Q++W[
).):@S '2 $#& 	  (388'388 u.===8}}!! !9::: "0;;;8}}!!c(mmq&8&8 !IJJJ /1.0=?=?9;9;/1
 99z66 	>!+!:!!(,CDDD!!(,CDDDD 	>!+!8!!(,ABBB!!(,ABBBB!+!3!!(,<===!!(,<=== 3<OO ##!!
 	
ri   r  r  c                     t          j        |           }t          |          dk    rt          j        |          nd }t          j        |d          }|||z   t          j        |d          z
  }n|}|S )Nr   axis)r`   stackr   mean)r  r  positive_vectors_npnegative_vectors_npmean_positive_vectorr   s         rU   _recommend_average_densez(LocalCollection._recommend_average_dense  s     !h'788<?@P<Q<QTU<U<Ubh'7888[_!w':CCC*$';;bgFY`a>b>b>bb F *Fri   c                 D   t          |           D ]&\  }}t          |           t          |          | |<   't          |          D ]&\  }}t          |           t          |          ||<   't          |           }|r t          |          }t	          ||          }n|}|S r   )r   r=   r<   rH   rG   )r  r  ir   r  mean_negative_vectors         rU   _recommend_average_sparsez)LocalCollection._recommend_average_sparse  s    
 ##344 	= 	=IAv"6***"4V"<"<Q"#344 	= 	=IAv"6***"4V"<"<Q)*:;; 	*#-.>#?#? 45IK_``FF)Fri   c           	      R   ||nt           j        j        }|                     |||||||          \  }}	}
}}}}|t           j        j        k    rR|r|                     ||	          }n|
r|                     |
|          }n|rt          d          t          d          |t           j        j        k    rQ|s|	rt          ||	          }nZ|
s|rt          |
|          }nD|s|rt          ||          }n.t          d          t          d| dt           j                   ||fS )NzjMultivectors do not support recommend average, consider using strategy=models.RecommendStrategy.BEST_SCOREz9No positive examples given with 'average_vector' strategyrn  ro  zANo positive or negative examples given with 'best_score' strategyz
strategy `z+` is not a valid strategy, choose one from )r   r  r  r  r  r  	TypeErrorr   r  r$   rB   r+   )r   rn  ro  r  r<  r  r  rp  r  r  r  r  multi_positive_vectorsmulti_negative_vectorsedited_query_filterr   s                   rU   _construct_recommend_queryz*LocalCollection._construct_recommend_query  s     (3889P9_ ,,"#
 
	
##"" u.=== ^#<<$$    ) ^#==++    ( ^C  
 !!\]]]0;;; #3 (--      ) ,C .4?V      ( +A -3>T      !W   kXkkRWRikk   000ri   c           	          |                      ||||	|
||          \  }}|	|	nt          }|                     ||f||||||          S )Nrm  )r  r   r:  )r   rn  ro  r  r  r  r   r  r  r<  r  r  rp  r   r  r  s                   rU   ry  zLocalCollection.recommenda  s{     -1,K,K"#-
 -
)) */):@S{{/>,%%+  
 
 	
ri   c                     ||nt           j        j        }|                     ||||
|||          \  }}|
|
nt          }|                     ||f||||||	|||
  
        S )N)
r   r  r  r  r  r   r  r  r  r  )r   r  r  r  r   r  )r   r  rn  ro  r  r  r  r  r   r  r<  r  r  r  r  rp  r   r  r  s                      rU   recommend_groupsz LocalCollection.recommend_groups  s    $  (3889P9_,0,K,K"#-
 -
)) */):@S!!/>,!%%+##9 " 
 
 	
ri   r~  c                    |                      ||||          \  }}g }g }d t          |          D             }	t          |          D ]?\  }
}|D ]7}|                    |
           |                    |	|j                            8@g }|D ]!}|D ]}|                    |j                   "t          j        ||||          S )Nr  r  r~  r<  c                     i | ]\  }}||	S rk   rk   )re   r   r8  s      rU   rh   z9LocalCollection.search_matrix_offsets.<locals>.<dictcomp>  s    JJJ-#x#JJJri   )offsets_rowoffsets_colr5  r~   )_search_distance_matrixr   r   r   r%  r   SearchMatrixOffsetsResponse)r   r  r  r~  r<  r~   
all_scoresr  r  offset_by_id
row_offsetrJ  r9  r5  sample_scoresr%  s                   rU   search_matrix_offsetsz%LocalCollection.search_matrix_offsets  s     66%U6 7 
 
Z JJ9S>>JJJ)2:)>)> 	B 	B%J - B B"":...""<#@AAAAB
 ' 	+ 	+M& + +ek****+ 0##	
 
 
 	
ri   c           	          |                      ||||          \  }}g }t          t          ||                    D ]>\  }}	|	D ]6}
|                    t	          j        ||
j        |
j                             7?t	          j        |          S )Nr  )abr%  )pairs)	r  rz   r   r   r   SearchMatrixPairr   r%  SearchMatrixPairsResponse)r   r  r  r~  r<  r~   r  r  	sample_idr  sample_scores              rU   search_matrix_pairsz#LocalCollection.search_matrix_pairs  s     66%U6 7 
 
Z (,Sj-A-A(B(B 	 	$I} -  *#|l>P      .
 
 
 	
ri   c                    g }||nt           }|                     t          | j                  |d|          }|D ]3}t          |          |k    r n|j        |                    |           4t          |          dk     rg g fS t          |d           }d |D             }	g }
t          |          D ]\  }fdt          |	          D             }t          ||          }|j        }t          |t                    r||         n|}|                     ||f||dd          }|
                    |           |	|
fS )NFr  c                     | j         S r   rT  rT   s    rU   r   z9LocalCollection._search_distance_matrix.<locals>.<lambda>  s     ri   r  c                     g | ]	}|j         
S rk   rT  )re   r~  s     rU   r   z;LocalCollection._search_distance_matrix.<locals>.<listcomp>  s    ///Vvy///ri   c                 &    g | ]\  }}|k    |S rk   rk   )re   r  rJ   sampled_id_indexs      rU   r   z;LocalCollection._search_distance_matrix.<locals>.<listcomp>  s(    WWWVaFVAVAVqAVAVAVri   )r   r  r  r   r  )r   r  r   r~   r   r   r  r   r]  r   r   r:  )r   r  r  r~  r<  samplesr  
candidates	candidater~   r5  sampledids_to_includessampling_filtersampled_vectorsearch_vectorsamples_scoresr  s                    @rU   r  z'LocalCollection._search_distance_matrix  s    &().):@S **MM<0E
 

 $ 	* 	*I7||v%%+y))) w<<!r6M nn555//w///*, *37);); 	* 	*%gWWWWy~~WWWO4\?SSO$^N nd33$455# 
 "[[3]C,"" )  N MM.))))F{ri   rq  r  c                    | .t          | t          j                  rt          j        |           n| } t          | t          t          j                            r| |j        vrt          d|  d          |j        |          }||j
        v r&|j
        |         |                                         }nB||j        v r|j        |         |         }n%|j        |         |                                         }|| fS | d fS r  )r   r   TargetVectorr   convert_target_vectorr   r   r  r~   r   rq   r  rt   rw   )rq  r  r   r   target_vectors        rU   _preprocess_targetz"LocalCollection._preprocess_target   s    !j9J&K&K! ,V444 	
 fhu}5566 	)Z^++ !Q&!Q!Q!QRRR.(Cj000 * 2; ? D K K M M
 999 * 9+ Fs K * 7 DS I P P R R &((t|ri   rr  c                 Z   d |D             }g }g }g }g }|D ]}g }	|j         |j        fD ]
}
t          |
t          t          j                            r|
|j        vrt          d|
 d          |j        |
         }||j        v r&|j        |         |         	                                }nB||j
        v r|j
        |         |         }n%|j        |         |         	                                }|	                    |           || k    r|                    |
           |	                    |
           t          |	d         t                    rMt          |	d         t                    r2|                    t          |	d         |	d                              t          |	d         t                    rt          |	d         t                    rt          |	d         d         t                     rSt          |	d         d         t                     r2|                    t#          |	d         |	d                              2t          |	d         d         t                    rSt          |	d         d         t                    r2|                    t%          |	d         |	d                              t          d          t          d          t'          t)          |          t)          |          t)          |          g          dk    rt          d          ||||fS )	Nc                 n    g | ]2}t          |t          j                  rt          j        |          n|3S rk   )r   r   ContextExamplePairr   convert_context_example_pair)re   pairs     rU   r   z7LocalCollection._preprocess_context.<locals>.<listcomp>@  sO     
 
 
  dD$;<<
7===	
 
 
ri   r  r   r   r   r  zMContext example pair must be of the same type: dense, sparse or multi vectorszIAll context example pairs must be either dense or sparse or multi vectors)rn  ro  r   r   r   r  r~   r   rq   r  rt   rw   r   r   r>   rz   r1  r   r.   sumro   )r   rr  r  r   r  dense_context_vectorssparse_context_vectorsmulti_context_vectorsr  pair_vectorsr  r   r   s                rU   _preprocess_contextz#LocalCollection._preprocess_context:  s   
 
  
 
 
  "!# " +	 +	DL M4=9 1 1gx'>'>?? 1jn44()Z')Z)Z)Z[[[$.1C"j&888!+!3K!@!E!L!L!N!N$
(AAA!+!:;!G!L!+!8!Ec!J!Q!Q!S!S ''///!T))%,,W555 ''0000,q/<88 ZQ> >  '--%|AVWYYY    LOT22 z,q/SW7X7X l1oa0%88 ZUVXYHZ\a=b=b )00#\!_|TUWWW     Q 2D99 jVWYZI[]a>b>b )00(,q/LYZO\\\    %g   !c  
 /00.//.//    [   %&<>SUbbbri   c                 P   ||st          d          ||n| }||nt          }||n|}	|                     |||	          \  }
}|t          |          ng }|                     |||	          \  }}}}||| k    r|                    |           t          ||          }|
||||fS )NNo target or context given)r   r   r  rz   r  r   r  )r   rq  rr  r  r<  r  r  r  r  r   r  	target_idr  r  r  r  s                   rU   _preprocess_discoverz$LocalCollection._preprocess_discover  s    >'>9:::/E/Q++W[
).):@S '2 $#& 	 $(#:#:6:{#[#[ y#*#6$w---B $$Wj+FF 	\57Lm  Z4%7%7  +++ 3<OO !"!
 	
ri   c           	      <   |                      |||||	|
          \  }}}}}|t          |t                    r=t          |d         t                    rt	          ||          }nt          ||          }nt          |t                    rt          ||          }nZt          d          ||rt          |          }n7||rt          |          }n#||rt          |          }nt          d          ||nt          }|                     ||f||||||          S )Nr   zUnsupported target vector typer   rm  )r"  r   rz   r1  r"   r,   r   r@   r   r    r?   r-   r   r:  )r   rq  rr  r  r  r  r   r  r<  r  r  r  r  r  r  r  r  r   r  s                      rU   r{  zLocalCollection.discover  sr   ( %%"#
 
	
!"! $-.. CmA.66 ]#1-AV#W#WLL#6}F[#\#\LLM<88 C3MCYZZ !ABBB "'<"'(=>>LL"'="-.DEELL"'<",-BCCLL9:::).):@S{{/>,%%+  
 
 	
ri   r8  c                     t          |t                    r|dfS t          |t                    rd|fS t          dt	          |                     )Nr   rI   zIncompatible point id type: )r   r  r   r  r   )r   r8  s     rU   _universal_idzLocalCollection._universal_id  sW    h$$ 	 Q;#&& 	 x<GtH~~GGHHHri   rf  rs  c                     t          | j                  dk    rg d fS ||                     |||||          S |t          d          |                     |||||          S )Nr   )rf  r  r  r   r  zGOffset is not supported in conjunction with `order_by` scroll parameter)rs  rf  r  r   r  )r   r~   _scroll_by_idr   _scroll_by_value)r   rf  r  rs  r  r   r  s          rU   ru  zLocalCollection.scroll  s     tx==At8O%%+)) &    Y   $$'%% % 
 
 	
ri   r   c                 z    |                      |          }t          j        t          j        |                    S )N)r   )r  r   CountResultr`   count_nonzero)r   r   r  s      rU   r   zLocalCollection.count&  s4    11,??!(8(>(>????ri   c                 8    t           j                                         fd          }g }                     |          }|D ]\  }	}
|-                     |	                               |          k     r4t          |          |dz   k    r n\||
         sU|                    t          j        |	 	                    |
|           
                    |
|                               t          |          |k    r|d |         ||         j        fS |d fS )Nc                 :                         | d                   S Nr   )r%  )rJ   r   s    rU   r   z/LocalCollection._scroll_by_id.<locals>.<lambda>3  s    D<N<NqQRt<T<T ri   r  r   r  )r  r~   ru   r  r%  r   r   r   r  r  r  r   )r   rf  r  r  r   r  
sorted_idsr2  r  r8  r   s   `          rU   r'  zLocalCollection._scroll_by_id+  s@    DHNN,,2T2T2T2TUUU
%'11-@@' 	 	MHc!d&8&8&B&BTEWEWX^E_E_&_&_6{{eai''9 MM --c<@@,,S,??      v;;&5&>6%=#3334<ri   c                    t          |t          j                  rt          j        |          }t          |t
                    rt          j        |          }g }| j                                        D ]V\  }}t          | j
        |         |j                  }	|	(|	D ]+}
t          |
          }||                    |||f           ,W|j        |j        nt          j        j        }|t          j        j        k    }|                    d |           |                     |          }g }t          |j                  }|D ]\  }
}}|9|t          j        j        k    r|
|k     r$n|t          j        j        k    r|
|k    rAt+          |          |k    r n\||         s_|                    t          j        ||                     ||          |                     ||                               |d fS )Nr  c                     | d         S r.  rk   rT   s    rU   r   z2LocalCollection._scroll_by_value.<locals>.<lambda>p  s
    1 ri   )r   reverser  )r   r   OrderByr   convert_order_byr  r   r~   ru   r7   rx   r   r5   r   	direction	DirectionASCDESCsortr  
start_fromr   r  r  r  )r   rs  rf  r  r   r  value_and_idsexternal_idinternal_idpayload_valuesr   ordering_valuer5  should_reverser  r2  r:  s                    rU   r(  z LocalCollection._scroll_by_valueP  s7    h-- 	=!28<<Hh$$ 	4~(333HGI(,(8(8 
	U 
	U$K)$,{*CX\RRN% ( U U!/!6!6!-!((.+{)STTTU
 +3*<*HH&&fN^Nb	"f&6&;; 	~~~FFF11-@@%'#H$788
/< 	 	+E;% 0 444z))  *&"2"777z)) 6{{e##$ MM" --k<HH,,[,GG      t|ri   c                    |                      |          }t          j                            t	          | j                            }t          j        |          }g }|D ]}	t	          |          |k    r n||	         s | j        |	         }
t          t          j
        |
t          d          d|                     |	|          |                     |	|                    }|                    |           |S )Nr   r$  )r  r`   randomrandr   r~   r/  r   r   r   r   r1  r  r  r   )r   r  r  r   r  r  random_scoresrandom_orderr2  r   r8  r9  s               rU   r  z LocalCollection._sample_randomly  s     11,??	s48}}55z-00*, 	( 	(C6{{e##9 |C(H$"Ahh))#|<<((l;;  L MM,''''ri   r   c                    | j         |j                 }t          |j        t	          |j                  ni           | j        |<   t          |j        t                    rt          |j        i}n|j        }| j	        
                                D ]\  }}|                    |          }||                     |          }t          j        |                                          r
J d            |j        t"          j        j        k    rCt          j                            |          }|t,          k    rt          j        |          |z  n|}|| j	        |         |<   d| j        |         |<   d| j        |         |<   | j        
                                D ]\  }}|                    |          }| j        |         |         }	|	s)| j        |         |         }
|                     |
|           |7|| j        |         |<   d| j        |         |<   |                     ||           d| j        |         |<   | j        
                                D ]\  }}|                    |          }||                     |          }t          j        |                                          r
J d            |j        t"          j        j        k    rWt          j                            |d          d d t          j        f         }|t          j        |dk    |t,                    z  }t          j        |          | j        |         |<   d| j        |         |<   d| j        |         |<   d| j        |<   d S )NVector contains NaN valuesr   r   r#  r          ) r~   r   r   rx   r   r   r   rz   r   rq   ru   r   r   r`   isnanr   r,  r   r   COSINElinalgnormEPSILONr   r}   rt   r   r   rw   newaxiswherery   )r   r   r   rq   r   _named_vectorsr   rg   rL  was_deletedprevious_vector_named_vectorvector_norms                rU   _update_pointzLocalCollection._update_point  s^   hux $161Ju}---PR
 
S elD)) 	#*EL9GGlG ,0<+=+=+?+? 	> 	>'K[[--F!//<<8F++//11OO3OOOO?fo&<<<9>>&11D8<wRXf--44FF17[)#.<='4S99<='4S99 ,0+>+D+D+F+F 	> 	>'K[[--F1+>sCK F"&"5k"B3"G''EEE!8>#K05<='4S9''<<<<<='4S99 +/*;*A*A*C*C 	> 	>&K[[--F!//<<8F++//11OO3OOOO?fo&<<<"$)..b."A"A!!!RZ-"PKbh{c'9;PPPF68hv6F6F!+.s3<='4S99<='4S99Sri   c                 2   t          | j                  }|| j        |j        <   | j                            |j                   | j                            t          |j        t          |j                  ni                      t          | j                  t          | j                  k    s
J d            t          j        | j	        d          | _	        t          |j        t                    rt          |j        i}n|j        }| j                                        D ]~\  }}|                    |          }|j        d         |k    r(t          j        ||dz  dz   |j        d         f          }|Mt          j        |j        d                   }|||<   t          j        | j        |         d          | j        |<   t          j        |          }t          j        |                                          r
J d            |                     |          }	|	j        t4          j        j        k    r1t          j                            |          }
|
t>          k    r||
z  n|}|||<   || j        |<   t          j        | j        |         d          | j        |<   | j                                         D ]\  }}|                    |          }t          |          |k    rH|t          |          z
  dz   }tC          |          D ]#}|                    tE                                 $|<tE                      }|||<   t          j        | j        |         d          | j        |<   |||<   | #                    ||           || j         |<   t          j        | j        |         d          | j        |<   | j$                                        D ]\  }}|                    |          }t          |          |k    rN|t          |          z
  dz   }tC          |          D ])}|                    t          j        g                      *|@t          j        g           ||<   t          j        | j        |         d          | j        |<   t          j        |          }t          j        |                                          r
J d            |                     |          }	|	j        t4          j        j        k    rWt          j                            |d          d d t          j%        f         }|t          j&        |dk    |t>                    z  }|||<   || j$        |<   t          j        | j        |         d          | j        |<   d S )	Nz)Payload and ids_inv must be the same sizer   r  r   rG  r#  r  rH  )'r   r~   r   r   r   rx   r   r   r`   ry   r   r   rz   r   rq   ru   r   r+  resizer   r}   r   rI  r   r   r,  r   r   rJ  rK  rL  rM  rt   ranger;   r   rw   rN  rO  )r   r   r   rq   r   r   r   fake_vector	vector_nprg   rL  diffr  rT  s                 rU   
_add_pointzLocalCollection._add_point  sZ   $(mm EH%%%%-:S'666Y[\\	
 	
 	
 4<  C$5$55557b555yq11elD)) 	#*EL9GGlG +/,*<*<*>*> 	 	&K[[--F"1%,, "	-#'A+}GZ[\G]9^ _ _~ gm&9!&<==%0c"79y+K8!8 8'44 HV,,	8I..2244RR6RRRR//<<?fo&<<<9>>)44D487NN	D 0 0	I%.c",9[)79y+K8!8 8'44
 +/*=*C*C*E*E 	 	&K[[--F=!!S((S///!3t @ @A!(()<)>)>????~133%0c"79y+K8!8 8'44 &,c"''<<<3@#K079y+K8!8 8'44
 +/*;*A*A*C*C 	 	&K[[--F=!!S((S///!3t 7 7A!(("6666~%'Xb\\c"79y+K8!8 8'44 HV,,	8I..2244RR6RRRR//<<?fo&<<<"$)..."D"DQQQ
]"SK+*<k7!S!SSI%.c"1>!+.79y+K8!8 8'44-	 	ri   c                    t          |j        t                    rF	 t          j        |j                  }n+# t
          $ r}t          d|j         d          |d }~ww xY wt          |j        t                    ri }|j                                        D ]V\  }}|| j	        vrt          d|           t          |t                    r!t          |           t          |          ||<   W|j                            |           nt          | j                                                  }t          | j                                                  }|r|dgk    s	|r|dgk    rt          d| d|           | j        s| j        st          d          |j        | j        v r|                     |           n|                     |           | j        | j                            |           d S d S )Nz	Point id z is not a valid UUIDz-Wrong input: Not existing vector name error: rI   zbWrong input: Unnamed vectors are not allowed when a collection has named vectors or multivectors: z, z+Wrong input: Not existing vector name error)r   r   r  uuidUUIDr   r   r   ru   r|   r   r=   r<   updaterz   rq   r{   rw   r~   rU  r\  r   persist)	r   r   _uuideupdated_sparse_vectorsr   r   vector_namesmultivector_namess	            rU   _upsert_pointzLocalCollection._upsert_pointI  sE   eh$$ 	TT	%(++ T T T !KUX!K!K!KLLRSST elD)) 	Q%'"',|'9'9';'; U U#Vd&<<<$%bU`%b%bcccfl33 U*6222:LV:T:T*;7L 67777 1 1 3 344L $T%6%;%;%=%= > > "!5!5! "6&7B4&?&? ;#; ;'8; ;   < Q(9 Q !OPPP8txu%%%%OOE"""<#L  ''''' $#s   6 
A AArE  c                 4   t          |t                    r|D ]}|                     |           d S t          |t          j                  r|}t          |j        t                    rt          |j        i}n|j        }t          |j                  D ]e\  }d }|j	        |j	                 }fd|
                                D             }|                     t          j        |||                     fd S t          dt          |                     )Nc                 (    i | ]\  }}||         S rk   rk   )re   rf   r   r   s      rU   rh   z*LocalCollection.upsert.<locals>.<dictcomp>  s#    FFF74$#FFFri   r  zUnsupported type: )r   rz   rg  r   Batchrq   r   r   r~   r  ru   PointStructr   r   )	r   rE  r   batchrq   r8  rx   r   r   s	           @rU   upsertzLocalCollection.upsertr  sD   fd## 	B * *""5))))* *-- 	BE%-.. (.>-!*59!5!5  X>-#nS1GFFFFgmmooFFF""&# '%       @$v,,@@AAAri   c                    |                                 D ]\  }}t          |t                    rnt          |           | j        |         |         }|                     ||           t          |          }|| j        |         |<   |                     ||           nN|| j        v r#t          j
        |          | j        |         |<   n"t          j
        |          | j        |         |<   d| j        |         |<   d S r.  )ru   r   r   r=   rt   r   r<   r   rq   r`   r   rw   r}   )r   r   rq   r   r   
old_vector
new_vectors          rU   _update_named_vectorsz%LocalCollection._update_named_vectors  s    $+==?? 	: 	:K&,// 
G&v...!0=cB
''
K@@@/77
8B#K05''
K@@@@,,13&1A1A[)#..68hv6F6F!+.s389D#K055	: 	:ri   c                     |D ]i}|j         }| j        |         }|j        }t          |t                    r
t
          |i}n|}|                     ||           |                     |           jd S r   )r   r~   r   r   rz   r   rq  _persist_by_id)r   rE  r   r8  r   vector_structfixed_vectorss          rU   update_vectorszLocalCollection.update_vectors  s     		* 		*ExH(8$C!LM-.. .!4m D -&&sM:::))))		* 		*ri   selectorc                     |                      |          }|D ]9}| j        |         }|D ]}d| j        |         |<   |                     |           :d S r   )_selector_to_idsr~   r}   rs  )r   rq   rw  r~   r8  r   r   s          rU   delete_vectorszLocalCollection.delete_vectors  sw     ##H-- 	* 	*H(8$C& > ><='4S99))))		* 	*ri   c                     |D ]}| j         |         }d| j        |<   | j        |D ]}| j                            |           d S d S r   )r~   ry   r   delete)r   r~   r8  r   s       rU   _delete_idszLocalCollection._delete_ids  sn     	" 	"H(8$C !DL<# . .##H---- $#. .ri   delete_filterc                 |    |                      |          fd| j                                        D             }|S )Nc                 *    g | ]\  }}|         |S rk   rk   )re   r8  r   r  s      rU   r   z2LocalCollection._filter_to_ids.<locals>.<listcomp>  s&    KKKMHccKxKKKri   )r  r~   ru   )r   r~  r~   r  s      @rU   _filter_to_idszLocalCollection._filter_to_ids  s@    11-@@KKKKTX^^-=-=KKK
ri   c                 v   t          |t                    r|S t          |t          j                  r|                     |          S t          |t          j                  r|j        S t          |t          j                  r|                     |j                  S t          dt          |                     )NzUnsupported selector type: )r   rz   r   Filterr  r   rE  FilterSelectorrO  r   r   )r   rw  s     rU   ry  z LocalCollection._selector_to_ids  s     h%% 		MO&-00 	M&&x000&"566 	M?"&"788 	M&&x777K4>>KKLLLri   c                 Z    |                      |          }|                     |           d S r   )ry  r}  )r   rw  r~   s      rU   r|  zLocalCollection.delete  s1     ##H--ri   c                     | j         k| j        |         }t          j        ||                     |dd          |                     |d                    }| j                             |           d S d S )NTF)r   r  )r  r  )r   r~   r   rk  r  r  ra  )r   r8  r   r   s       rU   rs  zLocalCollection._persist_by_id  s    <#(8$C&))#De)TT((4(@@  E
 L  ''''' $#ri   c                 h   |                      |          }t          t          |                    }|t          |          nd }|D ]j}| j        |         }|i | j        |         || j        |<   n*| j        |         t          | j        |         ||           |                     |           kd S )N)rx   r   r{   )ry  r   r   r4   r~   rx   r9   rs  )	r   rx   rw  r   r~   jsonable_payloadr{   r8  r   s	            rU   set_payloadzLocalCollection.set_payload  s     ##H--#$6w$?$?@@EH__S-A-A-AZ^ 	* 	*H(8$C|$Mt|C'8$M<L$MS!!<$0$T\#->FV]abbbb))))	* 	*ri   c                     |                      |          }|D ]J}| j        |         }t          t          |                    pi | j        |<   |                     |           Kd S r   )ry  r~   r   r   rx   rs  )r   rx   rw  r~   r8  r   s         rU   overwrite_payloadz!LocalCollection.overwrite_payload	  su     ##H-- 	* 	*H(8$C ();G)D)D E E KDL))))	* 	*ri   r{   c                     |                      |          }|D ]X}| j        |         }|D ]1}|| j        |         v r | j        |                             |           2|                     |           Yd S r   )ry  r~   rx   poprs  )r   r{   rw  r~   r8  r   r   s          rU   delete_payloadzLocalCollection.delete_payload	  s     ##H-- 	* 	*H(8$C / /$,s+++L%))#...))))	* 	*ri   c                     |                      |          }|D ].}| j        |         }i | j        |<   |                     |           /d S r   )ry  r~   rx   rs  )r   rw  r~   r8  r   s        rU   clear_payloadzLocalCollection.clear_payload0	  s_     ##H-- 	* 	*H(8$C "DL))))	* 	*ri   update_operationsc                    |D ]}t          |t          j                  rt          |j        t          j                  r |                     |j        j                   \t          |j        t          j                  r |                     |j        j                   t          dt          |j                             t          |t          j
                  r|                     |j                   t          |t          j                  r:|j        j        p|j        j        }|                     |j        j        |           Ht          |t          j                  r:|j        j        p|j        j        }|                     |j        j        |           t          |t          j                  r:|j        j        p|j        j        }|                     |j        j        |           t          |t          j                  r|                     |j                   &t          |t          j                  r!|                     |j        j                   at          |t          j                  r:|j        j        p|j        j        }|                     |j        j        |           t          dt          |                     d S )NzUnsupported upsert type: zUnsupported update operation: )r   r   UpsertOperationrm  PointsBatchrl  
PointsListrE  r   r   DeleteOperationr|  SetPayloadOperationr  rO  rx   OverwritePayloadOperationr  DeletePayloadOperationr  r{   ClearPayloadOperationr  UpdateVectorsOperationrv  DeleteVectorsOperationrz  r   )r   r  	update_oppoints_selectors       rU   batch_update_pointsz#LocalCollection.batch_update_points?	  s    + !	U !	UI)V%;<<  Ui.0BCC [KK	 0 67777	 0&2CDD [KK	 0 78888$%YiFVAWAW%Y%YZZZIv'=>> UI,----Iv'ABB U"+"7">"^)BWB^  !6!>PPPPIv'GHH U/6\):U:\   &&y'B'JO\\\\Iv'DEE U,3Vy7O7V   ##I$<$A?SSSSIv'CDD 
U""9#:;;;;Iv'DEE U##I$<$CDDDDIv'DEE U,3Vy7O7V   ##I$<$C_UUUU !S$y//!S!STTTC!	U !	Uri   
new_configc                 \    || j         vrt          d| d          || j        j         |<   d S )Nr   z! does not exist in the collection)rt   r   rX   )r   r   r  s      rU   update_sparse_vectors_configz,LocalCollection.update_sparse_vectors_configf	  sA     d111U{UUUVVV2<";///ri   c                    t          j        t           j        j        t           j        j        d d|                                 j        di t          j        t          j        | j	        j
        | j	        j        | j	        j        | j	        j        | j	        j        | j	        j                  t          j        ddd          t          j        dd	          t          j        d
ddddd          d                     S )Nr   r   )rq   shard_numberreplication_factorwrite_consistency_factoron_disk_payloadrt      d   i'  )mef_constructfull_scan_threshold    )wal_capacity_mbwal_segments_aheadg?i  i N     )deleted_thresholdvacuum_min_vector_numberdefault_segment_numberindexing_thresholdflush_interval_secmax_optimization_threads)rg   hnsw_config
wal_configoptimizer_configquantization_config)statusoptimizer_statusvectors_countindexed_vectors_countpoints_countsegments_countpayload_schemarX   )r   CollectionInfoCollectionStatusGREENOptimizersStatusOneOfOKr   CollectionConfigCollectionParamsrX   rq   r  r  r  r  rt   
HnswConfig	WalConfigOptimizersConfigr   s    rU   infozLocalCollection.infon	  s   $*0#9<"#+*. K/!%!9'+{'E-1[-Q$(K$?#';#=   #-!$(-  
 "+$&'(   "(!8&)-1+,','(-." " " %)5  $
 $
 $
 $	
ri   )NF)rK   N)rI   )T)TT)Fr   )Nr  NTFN)	NNNr  r   TFNN)NNNTF)NNNNNFFN)NNNNr  r  TFNNN)Nr  r   TFNNN)Nr  )TF)NNNNNNN)NNNr  r   TFNNNNN)NNNr  r   NTFNNNNNN)Nr  r  N)NNNNNN)NNNr  r   TFNNNN)Nr  NNTF)Nr  NTF)Nr  TF)__name__
__module____qualname____doc__r   CreateCollectionr	   r  ro   r   staticmethodr   r   r   rp   r   r   r   r   classmethodr   r1  r   r   r   r   r   r   r   r   r!   rA   r*   
NumpyArrayr   r   r   r   r   r   r   r   r
   PayloadSelectorr   Payloadr  VectorStructr  r  r`   r   r  r   r:  QueryPrefetchrH  rK  rA  rF  rG  r  DocumentWithLookupInterfacer  r  Vectorr$   rB   r+   r  r  r  r  rZ  r  r  r  r  r  r  ry  r  r  r  r  r   r   r  r  r   r>   r.   r  r"  r{  r%  r3  ru  r*  r   r'  r(  r  rk  rU  r\  rg  rj  rm  rq  PointVectorsrv  r  r   rz  r}  r  ry  r|  rs  r  r  r  r  UpdateOperationr  SparseVectorParamsr  r  r  rk   ri   rU   rW   rW   [   s/         #'05	0 0'0 3-0 *.	0
 
0 0 0 0d 3c6../3	tC,,-tC9L4L/MM	N3 3 3 \3(! ! ! !; ;C ;D ; ; ; ;; ;C ;D ; ; ; ; 9c 9c 9e 9 9 9 [9
G< 
Gc 
Gl 
G 
G 
G 
GLC LC LC LC\ 1K#tE{"#e#tDK(()##''(#(()#''(
1  
U#%68H%JZZ[[
!1 1 1 [1fMc Mf.A M M M M ES Es Et E E E [E6 ES Es Et E E E [E IK &.ud{&;CF	   [0  KO) )) D(3-1FFG) 
$	) ) ) [)\ KO 	Q QQ D(3-1FFGQ 	Q
 
&.	!Q Q Q Q JO! !!&+D(3-,E&F!	&%	&! ! ! !L &*  / c] 
	   T 04 $JN38+/-O OK#tE{"#e#tDK(()##''(#(()#''(
O" u|,#O$ %O& 'O( D(3-1FFG)O* D(3-/0+O, "%-O. 
f 	!/O O O Of (,37/3JN38+/#39 39$39 4/039 u|,	39
 39 39 D(3-1FFG39 D(3-/039 "%39 }39 39 
	39 39 39 39j&%. &# &$uGXBY & & & &\  $/3+/JN386 6d5,-.6 {6 	6
 6 }6 u|,6 "%6 D(3-1FFG6 D(3-/06 
e	 6 6 6 6t (,#/3# $JO38+/h h$h }h u|,	h
 }h h D(3-1FFGh D(3-/0h "%h 
e	 h h h hl #FJ/3JN38+/;?>B-W9 W9W9 MKeKN	
W9 }W9 U^(<dBCW9 u|,W9  !W9" #W9$ D(3-1FFG%W9& D(3-/0'W9( "%)W9* e78+W9, !)): ;-W9. 
	/W9 W9 W9 W9` 15KO38+/;?>B=R9 R9UOeM#"$	&	 ##
R9, -R9. v}-/R90 1R92 3R94 D(3-1GGH5R96 D(3-/07R98 "%9R9: e78;R9< !)): ;=R9> 
	?R9 R9 R9 R9n 04	1. 1.1. u|,1. 	1.
 
	1. 1. 1. 1.l KO38	 em$ D(3-1FFG D(3-/0	
 
fm	   8 <@;?6:/3#>B15[
 [
8F$678[
 8F$678[
 523	[

 u|,[
 }[
 !)): ;[
 "*#[
 
T%[T%[V !V !T$u+T$u+	
[
 [
 [
 [
z tE{+?CDK?P		   \  v23v23 
	   \. <@;?/3#>B156:K1 K18F$678K1 8F$678K1 u|,	K1
 }K1 !)): ;K1 "*#K1 523K1 
i.&:MuO__`	
K1 K1 K1 K1^ <@;?/3JN38+/#>B156:"
 "
8F$678"
 8F$678"
 u|,	"

 "
 "
 D(3-1FFG"
 D(3-/0"
 "%"
 }"
 !)): ;"
 "*#"
 523"
 
f 	!"
 "
 "
 "
N <@;?04+/KO38#>B15;?>B6:!+
 +
+
 8F$678+
 8F$678	+

 v}-+
 +
 +
 "%+
 D(3-1GGH+
 D(3-/0+
 }+
 !)): ;+
 "*#+
 e78+
 !)): ;+
  523!+
" 
	#+
 +
 +
 +
^ 04# 
  
u|, 
  
 	 

 } 
 
	* 
  
  
  
H 04#
 
u|,
 
 	

 }
 
	(
 
 
 
2 04#3 3u|,3 3 	3
 }3 
tO$d4+<&==	>3 3 3 3j +,:KZ]	v}em+	,   \2NcF./Nc=NNc]`Nc	[4 12D9I4JDQVQ^L__
Nc Nc Nc Ncd 04:>/3#>B15-
 -
+,-
 (6#567-
 u|,	-

 }-
 !)): ;-
 "*#-
 
[		
-
 -
 -
 -
b 04:>/3JN38#>B15+/?
 ?
+,?
 (6#567?
 u|,	?

 ?
 ?
 D(3-1FFG?
 D(3-/0?
 }?
 !)): ;?
 "*#?
 "%?
 
f 	!?
 ?
 ?
 ?
B IV%; Ic3h I I I [I 15,0*.JN38"
 "
-"
 "
 5=)	"

 '"
 D(3-1FFG"
 D(3-/0"
 
tEL!8EM#::	;"
 "
 "
 "
H@ @(5<"8 @FDV @ @ @ @ 15*.JN38#  # -#  #  '	# 
 D(3-1FFG#  D(3-/0#  
tEL!8EM#::	;#  #  #  # P 15JN38? ?-?  -? 	?
 D(3-1FFG? D(3-/0? 
tEL!8EM#::	;? ? ? ?J KO38! !! u|,! D(3-1FFG	!
 D(3-/0! 
e	 ! ! ! !F76#5 7$ 7 7 7 7rZ 2 Zt Z Z Z Zx'(6#5 '($ '( '( '( '(RBU8F,>#?#MN BSW B B B B8::!%c5el1J+K&K!L:	: : : :"
*Xe.@%A 
*d 
* 
* 
* 
**#* M'(!!
* 
* * * *".tEM2 .t . . . .EL T&BX=Y    
MM'(!!
M 
f$	%M M M M(
M'(!!

 

 
 
 
(v'= ($ ( ( ( (& "* ** M'(!!
* c]* 
* * * *4** M'(!!
* 
* * * * *sm* M'(!!
* 
* * * *$*M'(!!
* 
* * * *%U#E$9:%U 
%U %U %U %UN==,2,E=	= = = =%
f+ %
 %
 %
 %
 %
 %
ri   rW   r  r  c                     t          |          dk    r| S t          j        |          }| t          j        |g          } n9t	          |           } | j        	|g| _        n| j                            |           | S )Nr   has_id)must_not)r   r   HasIdConditionr  r   r  r   )r  r  ignore_mentioned_idss      rU   r  r  	  s     =Q!0FFF}/C.DEEE  -- (%9$:L!!!(()=>>>ri   r~   c                     t          |          dk    r| S t          j        |          }| t          j        |g          } n9t	          |           } | j        	|g| _        n| j                            |           | S )Nr   r  )must)r   r   r  r  r   r  r   )r  r~   include_idss      rU   r]  r]  	  s     3xx1}}'s333K};-888  --$!,L$$[111ri   rk  c                 ^    t          j        | j        dd| j        | j        | j                  S )Nr   )r   r&  r%  rx   r   order_value)r   r   r   rx   r   r  )rk  s    rU   ri  ri  	  s7    9}&   ri   r;  r  c                     | ct          | j        t                    r't          j        fd| j        D                       S t          j        t                                S d S )Nc                 0    g | ]}t          |          S rk   )r  )re   r   r  s     rU   r   z2set_prefetch_limit_recursively.<locals>.<listcomp>	  s$    ^^^q8EBB^^^ri   )r  r;  )r   r;  rz   r   r  )r;  r  s    `rU   r  r  	  sx    h'.. 	@>^^^^HL]^^^   
 >???? ri   )orO   r   r^  collectionsr   r   typingr   r   r   r   r	   r
   r   r   r   r   copyr   numpyr`   qdrant_clientr   qdrant_client._pydantic_compatr   r   rS   qdrant_client.conversionsr   r   &qdrant_client.conversions.common_typesr   $qdrant_client.conversions.conversionr   qdrant_client.httpr   qdrant_client.http.modelsr   r    qdrant_client.http.models.modelsr   r   r   r   qdrant_client.hybrid.fusionr   r   qdrant_client.local.distancesr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   #qdrant_client.local.multi_distancesr*   r+   r,   r-   r.   r/   r0   r1   r2   $qdrant_client.local.json_path_parserr3   r4   qdrant_client.local.order_byr5   #qdrant_client.local.payload_filtersr6   +qdrant_client.local.payload_value_extractorr7   r8   (qdrant_client.local.payload_value_setterr9   qdrant_client.local.persistencer:   qdrant_client.local.sparser;   r<   r=   $qdrant_client.local.sparse_distancesr>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r   rM  rW   r  r  r  r]  r  ri  r  r   r  rk   ri   rU   <module>r     s      0 0 0 0 0 0 0 0                                  & & & & & & _ _ _ _ _ _ _ _ ; ; ; ; ; ; F F F F F F ; ; ; ; ; ; % % % % % % ? ? ? ? ? ? ? ? ` ` ` ` ` ` ` ` ` ` ` ` _ _ _ _ _ _ _ _                         
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 O N N N N N N N 7 7 7 7 7 7 F F F F F F P P P P P P P P E E E E E E A A A A A A         
                           
V# V# V V V Vx$
 x$
 x$
 x$
 x$
 x$
 x$
 x$
vI5<(9=em9L
\   ,5<(/3EM/B
\   ,5< E4E    @U^ @C @EN @ @ @ @ @ @ri   