
    sOi                       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
 d dlmZ d dlZd dlZd dlm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" d dl#m$Z$m%Z%m&Z&m'Z' d dl(m)Z)m*Z* d dl+m,Z,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z?m@Z@ d dlAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZL d dlMmNZNmOZO d dlPmQZQ d dlRmSZSmTZT d dlUmVZVmWZW d dlXmYZY d dlZm[Z[ d dl\m]Z]m^Z^m_Z_ d dl`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZl dZmdZndedefdZ G d d       Zod!ej                  dz  d"eqej                     dej                  fd#Zsd!ej                  dz  d$eqej                     dej                  fd%Ztd&ej                  dejD                  fd'Zvd(ej                  eqej                     z  d)exddfd*Zyy)+    N)OrderedDictdefaultdict)AnyCallableSequenceget_args)deepcopy)grpc)show_warning_once)	constructto_jsonable_python)common_types)get_args_subscribed)
GrpcToRest)models)ScoredPoint)DistanceExtendedPointIdSparseVector
OrderValue)evaluate_expressionraise_non_finite_error)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calculate_recommend_sum_scorescalculate_distance_corecalculate_naive_feedback_queryNaiveFeedbackQueryFeedbackItemNaiveFeedbackCoefficients)MultiQueryVectorMultiRecoQueryMultiDiscoveryQueryMultiContextQueryMultiContextPaircalculate_multi_distance%calculate_multi_recommend_best_scores calculate_multi_discovery_scorescalculate_multi_context_scores$calculate_multi_recommend_sum_scorescalculate_multi_distance_core)JsonPathItemparse_json_path)to_order_value)calculate_payload_maskcheck_filter)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%calculate_sparse_recommend_sum_scores g  >xreturnc                     	 t        j                  t        j                  | d            S # t        $ r2 t        j                  t        j                  | dt                    cY S w xY w)NT)	allow_nan)rS   default)jsonloadsdumps	Exception_to_jsonable_pythonrP   s    k/volume1/homes/robertsu/coba/app/.venv/lib/python3.12/site-packages/qdrant_client/local/local_collection.pyr   r   W   sP    Vzz$**Q$788 Vzz$**Q$@STUUVs   ), 8A'&A'c            !       N#   e Zd ZdZdZ	 	 ddej                  dedz  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   f   z  eee      z  eeeee      f   z  ej6                  z  ej8                  z  ez  eeef   z  eeef   z  ez  eeef   z  ej@                  z  deeeez  ez  ej@                  z  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   z  ejR                  z  dedz  fd"       Z*	 	 dd#ed!ee(e   z  ejR                  z  d$edejV                  fd%Z,	 dd#ed&ee(e   z  dz  dejZ                  dz  fd'Z.	 dd(ej^                  dz  dedz  de0jb                  fd)Z2d*edeeef   fd+Z3	 	 	 	 	 	 ddee   eeee   f   z  eee      z  eeeee      f   z  ej6                  z  ej8                  z  ez  eeef   z  ez  eeef   z  ez  eeef   z  ej@                  z  d,ej^                  dz  d-ed.edz  d!ee(e   z  ejR                  z  d&ee(e   z  d/edz  deejh                     fd0Z5	 	 	 	 	 	 	 	 	 dd1ejl                  dz  d2eejn                     dz  d,ej^                  dz  d-ed.ed!ee(e   z  ejR                  z  d&ee(e   z  d/edz  d3edz  d4e%dejp                  fd5Z9d2ejn                  deejh                     fd6Z:	 	 	 	 	 dd7eeejh                        d1ejl                  d-ed.ed3edz  d,ej^                  dz  d/edz  d!ee(e   z  ejR                  z  d&ee(e   z  deejh                     fd8Z;	 	 	 	 	 	 	 	 dd1ejl                  dz  d3edz  d,ej^                  dz  d-edz  d.edz  d!ee(e   z  ejR                  z  d&ee(e   z  d/edz  deejh                     fd9Z<	 	 	 	 	 	 	 	 	 	 	 dd:ed1ejz                  ee   z  eee      z  ej                   z  ejl                  z  ej@                  z  ej|                  z  ej~                  z  ej                  z  dz  d3edz  d2ejn                  eejn                     z  dz  d,ej^                  dz  d-ed;ed!ee(e   z  ejR                  z  d&ee(e   z  d/edz  d<ej                  dz  d=d>dej                  fd?ZC	 	 	 	 	 	 	 	 dde(e   eee      z  eeej                  eEz  eFz  eGz  ej@                  z  f   z  ej6                  z  ej8                  z  eEz  eFz  eGz  ej@                  z  d:ed,ej^                  dz  d-ed;ed!ee(e   z  ejR                  z  d&ee(e   z  d/edz  d<ej                  dz  d=d>dej                  fd@ZH	 	 ddedAej^                  dz  d-edej                  fdBZJ	 	 ddCe(ejz                     d!ee(e   z  ejR                  z  d&ee(e   z  deej                     fdDZL	 	 	 	 	 	 	 ddEe(ej                     dz  dFe(ej                     dz  dGej                  dz  d,ej^                  dz  d3edz  dHd>dIedz  deeee      eee      eej                      eej                      eeee         eeee         ej^                  f   fdJZOe
dKeee      dLeee      dej@                  fdM       ZPe
dKeej                      dLeej                      dej                   fdN       ZQe
dKeeee         dLeeee         deee      fdO       ZR	 	 	 	 	 	 	 ddEe(ej                     dz  dFe(ej                     dz  d,ej^                  dz  d3edz  dHd>dIedz  dGej                  dz  deeEeFz  eGz  ej                   z  ej@                  z  ej^                  f   fdPZS	 	 	 	 	 	 	 	 	 	 	 	 ddEe(ej                     dz  dFe(ej                     dz  d,ej^                  dz  d-ed.ed!ee(e   z  ejR                  z  d&ee(e   z  d/edz  d3edz  dHd>dIedz  dGej                  dz  deejh                     fdQZT	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd:edEe(ej                     dz  dFe(ej                     dz  d,ej^                  dz  d-ed;ed/edz  d!ee(e   z  ejR                  z  d&ee(e   z  d3edz  dHd>dIedz  d<ej                  dz  d=d>dGej                  dz  dej                  f dRZU	 	 	 	 dd,ej^                  dz  d-edSed3edz  dej                  f
dTZW	 	 	 	 dd,ej^                  dz  d-edSed3edz  dej                  f
dUZY	 	 	 	 dd,ej^                  dz  d-edSed3edz  deeeZ   eee4      f   f
dVZ[e
dWej                  dz  dXd dedeej                  ejz                  dz  f   fdY       Z\dZeej                     dXd dedeee]   ee^   ee_   eejz                     f   fd[Z`	 	 	 	 	 	 ddWej                  dz  dZe(ej                     dz  d,ej^                  dz  d3edz  dHd>dIedz  deej                  dz  ee]   ee^   ee_   ej^                  f   fd\Za	 	 	 	 	 	 	 	 	 	 	 ddWej                  dz  dZe(ej                     dz  d,ej^                  dz  d-ed.ed!ee(e   z  ejR                  z  d&ee(e   z  d3edz  dHd>dIedz  d/edz  deejh                     fd]Zbed^ej                  deeef   fd_       Zc	 	 	 	 	 	 dd`ej^                  dz  d-edaej                  dz  d.ejz                  dz  d!ee(e   z  ejR                  z  d&ee(e   z  deeej                     ejz                  dz  f   fdbZeddcej^                  dz  dej                  fddZg	 	 	 	 	 dd`ej^                  dz  d-ed.ejz                  dz  d!ee(e   z  ejR                  z  d&ee(e   z  deeej                     ejz                  dz  f   fdeZh	 	 	 	 ddaej                  d`ej^                  dz  d-ed!ee(e   z  ejR                  z  d&ee(e   z  deeej                     ejz                  dz  f   fdfZi	 	 dd-ed,ej^                  dz  d!ee(e   z  ejR                  z  d&ee(e   z  deejh                     f
dgZj	 	 	 	 	 	 ddee   ez  eee      z  dhej                  d3edz  d,ej^                  dz  d-ed.edz  d!ee(e   z  ejR                  z  d&ee(e   z  d/edz  deejh                     fdiZldjeejh                     dee   ez  eee      z  d3edked-edeejh                     fdlZmd1ej                  dmeeejh                        d-ed!ee(e   z  ejR                  z  d&ee(e   z  deejh                     fdnZo	 	 	 	 	 	 ddoej                  d3edz  d,ej^                  dz  d-ed.edz  d!ee(e   z  ejR                  z  d&ee(e   z  d/edz  deejh                     fdpZqdqej                  ddfdrZsdqej                  ddfdsZt	 	 ddqej                  dtej^                  dz  duej                  dz  ddfdvZv	 	 ddwe(ej                     ej                  z  dtej^                  dz  duej                  dz  ddfdxZxd#ed	eeee   ez  eee      z  f   ddfdyZy	 ddwe(ej                     dtej^                  dz  ddfdzZ{d	e(e   d{ej^                  eej                     z  ej                  z  ej                  z  ddfd|Z~dCeejz                     ddfd}Zd~ej^                  deej                     fdZd{ej^                  eej                     z  ej                  z  ej                  z  deej                     fdZd{ej^                  eej                     z  ej                  z  ej                  z  ddfdZd^ej                  ddfdZ	 ddejV                  d{ej^                  eej                     z  ej                  z  ej                  z  dedz  ddfdZdejV                  d{ej^                  eej                     z  ej                  z  ej                  z  ddfdZde(e   d{ej^                  eej                     z  ej                  z  ej                  z  ddfdZd{ej^                  eej                     z  ej                  z  ej                  z  ddfdZde(ej                     ddfdZdedej                  ddfdZdej                  fdZy)LocalCollectionzb
    LocalCollection is a class that represents a collection of vectors in the local storage.
     N  Nconfiglocationforce_disable_check_same_threadrQ   c           	      4   | j                  |j                        \  | _        | _        |j                  }| j                  j                         D ci c]7  \  }}|t        j                  d|j                  ft        j                        9 c}}| _        |$|j                         D ci c]  \  }}|g 
 c}}ni | _        i | _
        | j                  D ci c]  }|g  c}| _        g | _        t        j                  dt              | _        t        | j                  j!                               t        | j                  j!                               z   t        | j                  j!                               z   | _        | j"                  D ci c]  }|t        j                  dt                c}| _        i | _        g | _        |du| _        d| _        || _        |t1        ||      | _        | j3                          yc c}}w c c}}w c c}w c c}w )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
        r   dtypeN)_resolve_vectors_configvectorsvectors_configmultivectors_configsparse_vectorsitemsnpzerossizefloat32sparse_vectors_idfmultivectorspayloadbooldeletedlistkeys_all_vectors_keysdeleted_per_vectoridsids_inv
persistentstorager_   r?   load_vectors)selfr_   r`   ra   sparse_vectors_confignameparamss          r[   __init__zLocalCollection.__init__e   s    9=8T8TNN9
5T5 !' 5 5 !% 3 3 9 9 ;5
 ;f "((Av{{+2::>> ;5
 %0 +@*E*E*GH*G,$T2X*GH 	  	 "&!9!9@
!9D"H!9@
 .0)+!4)@""$%4&&++-./4$$))+,- 	 7;6L6L@
6LdD"((1D))6L@
 7957"$.0;Z[DLA5

 I@
@
s   <H,H

H#Hrf   c                     i }i }t        | t        j                        r$| j                  t        | i}||fS t        | i}||fS | j                         D ]  \  }}|j                  |||<   |||<    ||fS N)
isinstancer   VectorParamsmultivector_configDEFAULT_VECTOR_NAMErj   )rf   rg   rh   r   r   s        r[   re   z'LocalCollection._resolve_vectors_config   s      gv223))5':G&D# "#666 #6w!?!#666#MMOLD&((4,2#D)'-t$	 , 222    c                 R    | j                   | j                   j                          y y r   )r{   closer}   s    r[   r   zLocalCollection.close   s!    <<#LL  $r   vectorvector_namec                     || j                   vrt        t              | j                   |<   |j                  D ]  }| j                   |   |xx   dz  cc<    y N   )ro   r   intindicesr}   r   r   idxs       r[   _update_idf_appendz"LocalCollection._update_idf_append   sN    d5553>s3CD##K0>>C##K05:5 "r   c                 Z    |j                   D ]  }| j                  |   |xx   dz  cc<    y r   )r   ro   r   s       r[   _update_idf_removez"LocalCollection._update_idf_remove   s+    >>C##K05:5 "r   dfnc                 J    t        j                  ||z
  dz   |dz   z  dz         S )N      ?r   )mathlog)clsr   r   s      r[   _compute_idfzLocalCollection._compute_idf   s)     xxR#"s(3a788r   c                 j   | j                  d       j                   }g }| j                  j                  |      }||S t        |j                  |j
                        D ]=  \  }}|j                  |d      }| j                  ||      }	|j                  ||	z         ? t        |j                  |      S )N)count_filterr   )r   values)	countro   getzipr   r   r   appendr   )
r}   r   r   num_docs
new_values	idf_storer   valuedocument_frequencyidfs
             r[   _rescore_idfzLocalCollection._rescore_idf   s    ::4:066
++//<	Mfnnfmm<JC!*sA!6##$6ACeck* =
 FNN:FFr   c                 6	   | j                   t        t              }t        t              }t        t              }g }t        | j                   j	                               D ]n  \  }}|| j
                  |j                  <   | j                  j                  |j                         | j                  j                  t        |j                        xs i        |j                  }t        |j                  t              rt        |j                  i}t        | j                  j                               }|D ]  }	|j!                  |	      }
|
||	   j                  |
       +||	   j                  t#        j$                  | j&                  |	   j(                  t"        j*                               |j                  ||	f        t        | j,                  j                               }|D ]Y  }	|j!                  |	      }
|
||	   j                  |
       +||	   j                  t/                      |j                  ||	f       [ t        | j0                  j                               }|D ]d  }	|j!                  |	      }
|
||	   j                  |
       +||	   j                  t#        j2                  g              |j                  ||	f       f q |j5                         D ]b  \  }	}t#        j2                  |      | j                  |	<   t#        j6                  t9        | j                        t:              | j<                  |	<   d |j5                         D ]h  \  }	}|| j,                  |	<   t#        j6                  t9        | j                        t:              | j<                  |	<   |D ]  }| j?                  ||	        j |j5                         D ]p  \  }	}|D cg c]  }t#        j2                  |       c}| j0                  |	<   t#        j6                  t9        | j                        t:              | j<                  |	<   r |D ]  \  }}	d| j<                  |	   |<    t#        j6                  t9        | j                        t:              | _         y y c c}w )Nrc   r   )!r{   r   rt   	enumerateloadrx   idry   r   rq   r   r   r   r   rf   ru   r   rk   onesrg   rm   rn   ri   r@   rp   arrayrj   rl   lenrr   rw   r   rs   )r}   rf   ri   rp   deleted_idsr   pointloaded_vectorall_dense_vector_namesr   vall_sparse_vector_namesall_multivector_namesnamed_vectorsr   s                  r[   r|   zLocalCollection.load_vectors   s   <<#!$'G(.N&t,LK'(9(9(;<
U%("##EHH- ##$6u}}$E$KL !& ellD1%8%,,$GM *.dll.?.?.A)B&2D%))$/A},,Q/,,GGD$7$7$=$B$B"**U $**C;7 3 +/t/B/B/G/G/I*J'3D%))$/A}&t,33A6&t,334G4IJ#**C;7 4 )-T->->-C-C-E(F%1D%))$/A}$T*11!4$T*11"((2,?#**C;7 2Q =b (/}}#m%'XXm%<T"02T\\9JRV0W''- (7
 (6';';'=#m,9##D)02T\\9JRV0W''-+F++FD9 , (> (4'9'9';#mJW*X-288F+;-*X!!$'02T\\9JRV0W''- (<
 )	T56''-c2 ) 88C$5TBDLW $H +Ys   Rquery_vectorc                    t        |t              r4|\  }}t        |t              rt        j                  |      }||fS |}||fS t        |t        j
                        rt        }|}||fS t        |t        j                        r/|j                  }t        j                  |j                        }||fS t        |t        j                        r|j                  }|j                  }||fS t        |t              rt        }t        j                  |      }||fS t        |t        t                    rt        }|}||fS t        |t        t                    rt        }|}||fS t        dt!        |             )NzUnsupported vector type )r   tuplert   rk   r   ndarrayr   typesNamedVectorr   r   NamedSparseVectorr   r   r,   
ValueErrortype)r   r   r   queryr   s        r[   _resolve_query_vector_namez*LocalCollection._resolve_query_vector_name  sz   * lE*&KD%%&%0 V|- , V|+ bjj1&D!F& V|% e&7&78$$DXXl112F  V| e&=&=>$$D!((F V| d+&DXXl+F V| h/?&@A&D!F V| h/?&@A&D!F V| 7\8J7KLMMr   r   c                    t        | j                  j                  t              r@|| j                  j                  v r| j                  j                  |   S t	        d| d      t        | j                  j                  t
        j                        r.|t        k7  rt	        d| d      | j                  j                  S t	        d| j                  j                         )NVector  is not found in the collectionzMalformed config.vectors: )r   r_   rf   dictr   r   r   r   )r}   r   s     r[   get_vector_paramsz!LocalCollection.get_vector_paramsM  s    dkk))40t{{***{{**400 74&0O!PQQdkk))6+>+>?** 74&0O!PQQ;;&&&5dkk6I6I5JKLLr   patternkeyc                     |j                  dd      j                  d      }|j                  dd      j                  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(    y wr    .0pr   s      r[   	<genexpr>z9LocalCollection._check_include_pattern.<locals>.<genexpr>v       D&Cda16&C   )replacesplitallr   r   r   r   pattern_parts	key_partss        r[   _check_include_patternz&LocalCollection._check_include_pattern\  sR    0  T288=KKT*005	Dc-&CDDDr   c                     t        |      t        |      kD  ry|j                  dd      j                  d      }|j                  dd      j                  d      }t        d t	        ||      D              S )NFr   r   r   c              3   ,   K   | ]  \  }}||k(    y wr   r   r   s      r[   r   z9LocalCollection._check_exclude_pattern.<locals>.<genexpr>~  r   r   )r   r   r   r   r   r   s        r[   _check_exclude_patternz&LocalCollection._check_exclude_patternx  sc    w<#c("T288=KKT*005	Dc-&CDDDr   rq   	predicatepathc                 p   t        |t              rNi }|dk7  r|dz   }n|}|j                         D ]*  \  }} |||z         s| j                  ||||z         ||<   , |S t        |t              rGg }|dz   }t        |      D ]0  \  }	} ||      s|j                  | j                  |||             2 |S |S )NrO   r   z[])r   r   rj   _filter_payloadrt   r   r   )
r   rq   r   r   resnew_pathr   r   	res_arrayr   s
             r[   r   zLocalCollection._filter_payload  s     gt$Crz#:%mmo
UX^,"225)XPS^TCH . J&I$;D'0
UT?$$S%8%8	4%PQ 1 Nr   with_payloadc                 @    sy t        t              r|S t        t              r j                  | fd      S t        t        j
                        r j                  | fd      S t        t        j                        r j                  | fd      S |S )Nc                 8     t        t         fd            S )Nc                 (    j                  |       S r   r   r   r   r   s    r[   <lambda>zDLocalCollection._process_payload.<locals>.<lambda>.<locals>.<lambda>      (B(B7C(Pr   )anymapr   r   r   s   `r[   r   z2LocalCollection._process_payload.<locals>.<lambda>  s    CPR^_r   c                 L     t        t         fdj                              S )Nc                 (    j                  |       S r   r   r   s    r[   r   zDLocalCollection._process_payload.<locals>.<lambda>.<locals>.<lambda>  r   r   )r   r   includer   s   `r[   r   z2LocalCollection._process_payload.<locals>.<lambda>  s    CP$,,r   c                 L     t        t         fdj                              S )Nc                 *    j                  |        S r   )r   r   s    r[   r   zDLocalCollection._process_payload.<locals>.<lambda>.<locals>.<lambda>  s    C,F,FwPS,T(Tr   )r   r   excluder   s   `r[   r   z2LocalCollection._process_payload.<locals>.<lambda>  s    CT$,,r   )r   rr   rt   r   r   PayloadSelectorIncludePayloadSelectorExclude)r   rq   r   s   ` `r[   _process_payloadz LocalCollection._process_payload  s     lD)NlD)&&  lF$A$AB&&  lF$A$AB&&  r   r   return_copyc                 b    | j                   |   }| j                  ||      }|rt        |      S |S r   )rq   r   r	   )r}   r   r   r   rq   processed_payloads         r[   _get_payloadzLocalCollection._get_payload  s9     ,,s# 11'<H.9x)*P?PPr   with_vectorsc                 z   |du s|y | j                   D ci c]5  }| j                  |   |   s!|| j                   |   |   j                         7 }}| j                  D ci c]'  }| j                  |   |   s|| j                  |   |   ) }}| j                  D ci c]5  }| j                  |   |   s!|| j                  |   |   j                         7 }}i |||}t        |t              r|D ci c]  }||v s|||    }}t        |      dk(  rt        |v r	|t           S |S c c}w c c}w c c}w c c}w )NFr   )	rf   rw   tolistri   rp   r   rt   r   r   )r}   r   r  r   dense_vectorsri   rp   all_vectorss           r[   _get_vectorszLocalCollection._get_vectors  s    5 L$8 
$**405 $,,t$S)0022$ 	 
 ++
+**405 $%%d+C00+ 	 
 ))
)**405 $##D)#.5577) 	 
 JI.ILIlD)?Kc|ttWbOb4T!22|Kc{q %8K%G2337


 ds   :D) ,D.:D34	D8>D8payload_filterc                     t        | j                  || j                  | j                        }|| j                   z  }||| j                  |    z  }|S )zo
        Calculate mask for filtered payload and non-deleted points. True - accepted, False - rejected
        )payloadsr
  ry   rw   )r:   rq   ry   rw   rs   )r}   r
  r   payload_maskmasks        r[   _payload_and_non_deleted_maskz-LocalCollection._payload_and_non_deleted_mask  s]     .\\)LL#66	
 t||m+"422;???Dr   internal_idc                 d    i }| j                   j                         D ]  \  }}||   rd||<    |S NT)rw   rj   )r}   r  
has_vectorr   rs   s        r[   _calculate_has_vectorz%LocalCollection._calculate_has_vector  s@    &(
$($;$;$A$A$C K;'*.
;' %D r   query_filterlimitoffsetscore_thresholdc                      j                  |      \  }g }d}	d}
t        |t        t                    r 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(  rH j$                  vrt        d d       j$                     } j'                        j(                  }nG j*                  vrt        d d       j*                     } j'                        j(                  }|d t!         j,                         }t        |t        j                        r6t!        |j"                        dk(  rt/        |||      }n>t1        |||      }n/t        |t2              r|j4                  t        j6                  j8                  k(  rt;        |||      }n|j4                  t        j6                  j<                  k(  rt?        |||      }ntA        d	|j4                         t        |tB              r|
r|jE                   fd
      }|j4                  t        j6                  j8                  k(  rtG        ||      }n?|j4                  t        j6                  j<                  k(  rtI        ||      }n
tA        d	|j4                         t        |tJ              r|j4                  t        j6                  j8                  k(  rtM        |||      }n|j4                  t        j6                  j<                  k(  rtO        |||      }nvtA        d	|j4                         t        |tP              rtS        |||      }n?t        |tT              r%|
r|jE                   fd      }tW        ||      }n
t        |tX              rt[        |||      }nt        |t\              rt_        |||      }nt        |t`              r$|
r|jE                   fd      }tc        ||      }nt        |td              rtg        |||      }n|t        |th              r7tk        |       |
r jm                  |      }to        |      }tq        ||      }n5t        |tr              rtu        |||      }nt        dtw        |              jy                  |      }t{        |      }|t|        j~                  k(  s*t        |tP        t\        t2        tX        td        tJ        f      rt        j                  |      d d d   }nt        j                  |      }||nd}|D ]  }t!        |      ||z   k\  r n||   s||   }|	r|t        j                   k(  r8 j                  |   }|!|t|        j~                  k(  r||k  r	 nb||kD  r n[t        t        j                  |t        |      d j                  ||       j                  ||            }|j                  |        ||d  S )NFzSparse vector r   T   zMultivector zDense vector r   zKRecommend strategy is expected to be either BEST_SCORE or SUM_SCORES, got: c                 (    j                  |       S r   r   rP   r   r}   s    r[   r   z(LocalCollection.search.<locals>.<lambda>Z      tGXGXYZ\`Gar   c                 (    j                  |       S r   r  r  s    r[   r   z(LocalCollection.search.<locals>.<lambda>r  r  r   c                 (    j                  |       S r   r  r  s    r[   r   z(LocalCollection.search.<locals>.<lambda>z  r  r   zUnsupported query vector type )r   r   r   scoreversionrq   r   )Ir   r   r   rF   ri   r   r_   modifierr   ModifierIDFr   DOTr,   rk   r   r   shaperp   r   distancerf   rq   r#   r1   r    strategyRecommendStrategy
BEST_SCOREr$   
SUM_SCORESr&   	TypeErrorrG   transform_sparserK   rN   r-   r2   r5   r   r"   rE   rJ   r.   r3   r   r!   rD   rI   r/   r4   r   rB   r   rA   rH   r)   r(   r   r  r%   r   BIGGER_IS_BETTERargsortinfry   r   r   floatr  r	  r   )r}   r   r  r  r  r   r  r  resultsparse_scoringrescore_idfrf   r*  scoresr  required_orderorderr   r#  point_idscored_pointr   s   `                    @r[   searchzLocalCollection.search  s   0 "<<\Jl+- lH->$?@4... >$7V!WXX))$/G{{))$/88FOO<O<OO"||H!Nh/?&@A|RZZ0S9K9K5LPQ5Q4,,, <v5T!UVV''-G--d3<<H4<<' =6U!VWWll4(G--d3<<H-C-.lBJJ/<%%&!++L'8L1,Ri0$$(@(@(K(KK8wPXY&&&*B*B*M*MM7gxX66B6K6K5LN  o6+<<=ab$$(@(@(K(KK?gV&&&*B*B*M*MM>|WU66B6K6K5LN  n5$$(@(@(K(KK>|WV^_&&&*B*B*M*MM=lGU]^66B6K6K5LN  n5/gxPF&:;+<<=ab6|WMF&9:5lGXVFl3-lGXNF&89+<<=ab4\7KF&783L'8TFl3"<0#00tD-l;L.|WEF'9:3L'8TF >tL?Q>RSTU11,D1Q*84];;;z#!
@
 JJv&tt,EJJv&E!-1C6{efn,93KE%BFF7"2||C(H*!]%C%CC..$""El))#|<((l;L MM,'= @ fgr   r   prefetchusingkwargsc
                 D   g }|t        |t              r|n|g}t        |      dkD  rF|D cg c]  }| j                  |       }}|t	        d      | j                  |||||	||||	      }n| j                  ||	||||||      }t        j                  |      S c c}w )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
        r   (Query is required for merging prefetches	sourcesr   r  r  r?  r  r   r  r  r   r?  r  r  r  r   r  r  )points)	r   rt   r   	_prefetchr   _merge_sources_query_collectionr   QueryResponse)r}   r   r>  r  r  r  r   r  r  r?  r@  
prefetchesrD  scored_pointss                 r[   query_pointszLocalCollection.query_points  s    & 
%/$%?hZJz?Q@JK
Ht~~h/
GK} !KLL !//))) / 0 
M !22))) / 3 	M ""-88= Ls   Bc                 ^   g }|j                   3t        |j                   t              r|j                   n|j                   g}t        |      dkD  r|D cg c]  }| j	                  |       }}|j
                  t        d      | j                  ||j
                  |j                  |j                  ndd|j                  |j                  dd|j                  	      S | j                  |j
                  |j                  |j                  |j                  ddd|j                        S c c}w )Nr   rB  
   FrC  rE  )r>  r   rt   r   rG  r   r   rH  r  r?  filterr  rI  )r}   r>  inner_prefetchesinner_prefetchrD  s        r[   rG  zLocalCollection._prefetch  s%   (%/0A0A4%H!!xO`O`Na   1$L\]L\.t~~n5L\G]~~% !KLL &&nn(0(Bhnnnn%__"" ( 8 8 ' 
 
 ))nnnn%__nn"" ( 8 8 * 	 	' ^s   D*rD  c
           
         t        |t        j                  t        j                  f      rgt        |t        j                        r;t	        |||z   |j
                  j                  |j
                  j                        }
n|j                  t        j                  j                  k(  rt	        |||z         }
nQ|j                  t        j                  j                  k(  rt        |||z         }
nt        d|j                   d      ||
D cg c]  }|j                  |k\  s| }
}|
D cg c]  }|j                   }}| j!                  |||	      }t#        ||
      D ]'  \  }}|j$                  |_        |j&                  |_        ) |
|d  S t        |t        j(                        r?| j+                  ||||z   ||	      }|D cg c]  }||j                  |k\  s| }}||d  S t-               }|D ]$  }|D ]  }|j/                  |j                          & t1        |      dk(  rg S t3        |t5        |            }| j7                  |||||||	|      S c c}w c c}w c c}w )	N)	responsesr  ranking_constant_kweights)rT  r  zFusion method z does not exist)r   r  )r   prefetches_resultsr  r   r  r   rE  )r   r   FusionQueryRrfQueryr   rrfkrV  fusionFusionRRFDBSFr   r   r#  r   retriever   rq   r   FormulaQuery_rescore_with_formulasetaddr   _include_ids_in_filterrt   rI  )r}   rD  r   r  r  r?  r  r  r   r  fusedr   r   rx   fetched_pointsfetchedscoredrescoredsources_idssourcefilter_with_sourcess                        r[   rH  zLocalCollection._merge_sources  s^    ef00&//BC%1.%&.',yy{{!II--	 <<6==#4#442WETZN[E\\V]]%7%77;")E %~ell^?%STT *$)HEqQWW-GEH *//588C/!]],\ + N $'~u#=!( ' $> >!v22311#*fn)) 2 H ,4q8%7NRWR]R]apRp8HqFG$$ %K!#EOOEHH- $ " ;1$	&<\4P[K\&]#--!4!!-!-$3 . 	 	M I 0( rs   I%I/I"
I'!I'c	                    |xs t         }|xs d}|xs d}|7| j                  |||z   ||      \  }	}
|	|d D cg c]  }t        |       c}S t        |t        j
                        r^|j                  .| j                  |j                  |j                  |||||||	      S | j                  ||j                  f||||||      S t        |t        j                        rW| j                  |j                  j                  |j                  j                  |j                  j                  |||||||
      S t        |t        j                        rB| j!                  |j                   j"                  |j                   j$                  |||||||	      S t        |t        j&                        r#| j!                  |j$                  |||||||	      S t        |t        j(                        rB| j                  ||j*                  ||z   ||
      \  }	}
|	|d D cg c]  }t        |       c}S t        |t        j,                        rT|j.                  t        j0                  j2                  k(  r| j5                  ||||      S t7        d|j.                         t        |t        j8                        rt7        d      t        |t        j:                        rt7        d      t        |t        j<                        rt7        d      t        |t        j>                        r#| jA                  |jB                  |||||||      S | j                  ||f||||||      S c c}w c c}w )z_
        Performs the query on the collection, assuming it didn't have any prefetches.
        rO  r   N)scroll_filterr  r   r  )	r   mmrr  r  r  r?  r   r  r  r   r  r  r  r   r  r  )
positivenegativer+  r?  r  r  r  r   r  r  )	targetcontextr?  r  r  r  r   r  r  )ru  r?  r  r  r  r   r  r  )ro  order_byr  r   r  )r  r  r   r  zUnknown Sample variant: z(Cannot perform fusion without prefetchesz)Cannot perform formula without prefetchesz+Cannot perform RRF query without prefetches)relevance_feedbackr?  r  r  r  r   r  r  )"r   scrollrecord_to_scored_pointr   r   NearestQueryrp  _search_with_mmrnearestr=  RecommendQuery	recommendrr  rs  r+  DiscoverQuerydiscoverrt  ru  r   OrderByQueryrv  SampleQuerysampleSampleRANDOM_sample_randomlyr   rX  ra  rY  RelevanceFeedbackQuery_relevance_feedbackrw  )r}   r   r?  r  r  r  r   r  r  records_records               r[   rI  z!LocalCollection._query_collections  s    ,,1=*fn))	 % JGQ BIAQRAQv*62AQRRv223yy$,,!&		!-!!-!-$3 - 
 
 ;;#U]]3))) /    v445>>111111))) / "   v334==~~,,..))) / ! 
 
 v223==))) / ! 	 	 v223*fn)) % JGQ BIAQRAQv*62AQRRv112||v}}333,,!-!-!-	 -   !#;ELL>!JKKv112GHHv223HIIv/JKKv<<=++#(#;#;))) / , 	 	 ;;#U^))) /   E SH Ss   M"M'group_by
group_sizewith_lookupwith_lookup_collectionzLocalCollection | Nonec           
         t        | j                        }|t        |      }t        ||       | j	                  ||||t        | j                        d|	|
      }t               }|j                  D ]  }t        |j                  t              st        |j                  |      }|7t        t        d |D                    }| j                  |j                  |      |_        |D ]Z  }||vrt        j                  |g       ||<   t        ||   j                         |k\  r=||   j                   j#                  |       \  t        |j%                               d | }t        |t&              rt        j(                  |d d       }|V|T|D ]O  }|j+                  |j,                  g|j.                  |j0                        }t3        t5        |      d       |_        Q t        j8                  |      S )NT)r   r  r>  r?  r  r   r  r  c              3   N   K   | ]  }t        |t        t        f      s|  y wr   r   strr   r   r   s     r[   r   z/LocalCollection.query_groups.<locals>.<genexpr>1       #Y|!z!cSVZ?XA|   %%r   hits
collectionr   r  rx   r   r  groups)r   ry   r	   set_prefetch_limit_iterativelyrM  r   rF  r   rq   r   r<   rt   rc  r   r   
PointGroupr  r   r   r  
WithLookupr`  r   r   r  nextiterlookupGroupsResult)r}   r  r   r?  r>  r  r  r  r   r  r  r  r  	max_limitrF  r  r   group_valuesgroup_valuegroups_resultgroupr  s                         r[   query_groupszLocalCollection.query_groups  s   4 %	H +8Y?""%dll#%+ # 	
 ]]EemmT2'x@L##Y|#Y YZL 11%--NEM+f,*0*;*;{QS*TF;'vk*//0J>{#((//6  , #* 26fmmo1Fv1Nk3' ++&!!K "'='I&/88
!,!9!9!,!9!9 9 
  $DL$7 ' ""-88r   c                 z   | j                  ||t        | j                        d||      }t               }|D ]  }t	        |j
                  t              st        |j
                  |      }|7t        t        d |D                    }| j                  |j
                  |      |_        |D ]Z  }||vrt        j                  |g       ||<   t        ||   j                        |k\  r=||   j                  j                  |       \  t        |j                               d | }t	        |	t               rt        j"                  |	d d       }	|	V|
T|D ]O  }|
j%                  |j&                  g|	j(                  |	j*                        }t-        t/        |      d       |_        Q t        j2                  |      S )NT)r   r  r  r   r  r  c              3   N   K   | ]  }t        |t        t        f      s|  y wr   r  r  s     r[   r   z0LocalCollection.search_groups.<locals>.<genexpr>|  r  r  r  r  r  r  )r=  r   ry   r   r   rq   r   r<   rt   rc  r   r   r  r  r   r   r  r  r`  r   r   r  r  r  r  r  )r}   r   r  r  r  r  r   r  r  r  r  rF  r  r   r  r  r  r  r  s                      r[   search_groupszLocalCollection.search_groupsR  s   . %%dll#%+  
 EemmT2'x@L##Y|#Y YZL 11%--NEM+f,*0*;*;{QS*TF;'vk*//0J>{#((//6  , * 26fmmo1Fv1Nk3' ++&!!K "'='I&/88
!,!9!9!,!9!9 9 
  $DL$7 ' ""-88r   facet_filterc                 r   t        t              }| j                  |      }t        | j                        D ]  \  }}||   st        |t              st        ||      }|,t               }	|D ]P  }
t        |
      t        t        j                        vr(t        |
      }|rt        |      }
|	j                  |
       R |	D ]  }
||
xx   dz  cc<     t!        |j#                         d       d | D cg c]  \  }}t%        j&                  ||       }}}t        j(                  |      S c c}}w )Nr   c                     | d    | d   fS )Nr   r   r   rZ   s    r[   r   z'LocalCollection.facet.<locals>.<lambda>  s    !uadmr   r   )r   r   )r  )r   r   r  r   rq   r   r   r<   rc  r   r   r   
FacetValuer=   r  rd  sortedrj   r   FacetValueHitFacetResponse)r}   r   r  r  
facet_hitsr  r   rq   r   
values_setr   as_uuidr   r   r  s                  r[   facetzLocalCollection.facet  s=    3>c2B
11,?%dll3LC9gt,!'3/F~ 14J 7"5e6F6F"GG %Q-GAq!   1"  7 4@ !'  "+! u	!
!u   uE:! 	 
 ""--
s   9!D3rx   c                 z   g }|D cg c])  }t        |t        j                        rt        |      n|+ }}|D ]z  }|| j                  vr| j                  |   }| j
                  |   dk(  r4|j                  t        j                  || j                  ||      | j                  ||                   | |S c c}w )Nr   r   rq   r   )r   uuidUUIDr  rx   rs   r   r   Recordr  r	  )r}   rx   r   r  r5  id_r;  r   s           r[   r`  zLocalCollection.retrieve  s     JMN#3:c4995s3x3>#NHtxx'((8$C||C A%MM --c<@,,S,?   # Os   .B8rr  rs  r+  lookup_from_collectionlookup_from_vector_namec                     dt         t        j                     dt        t        t              t        t        j
                     z  t        t        t        t                 z  dd f fd}||n ||nt        }	||n|	||ng }||ng }|t        j                  j                  k(  rt        |      dk(  rlt        d      |t        j                  j                  k(  s|t        j                  j                  k(  r't        |      dk(  rt        |      dk(  rt        d      g }
g }g }g }g }g }g j                  v }j                  v }|rj                   |||        |||       n?|rj                   |||        |||       nj                    |||
        |||       t#        |      }|
||||||fS )NexamplesaccrQ   c                    | D ]  }t        |t        t        j                              r|j                  vrt        d| d      j                  |   }	   |   }t        |t        j                        r|j                         }|j                  |       k(  sj                  |       |j                  |        y NPoint r   )
r   r   r   PointIdrx   r   rk   r   r  r   )
r  r  exampler   vecr  collection_vectorsmentioned_idsr}   r   s
        r[   examples_into_vectorszJLocalCollection._preprocess_recommend_input.<locals>.examples_into_vectors  s     $gx'>?jnn4(6':Y)Z[[$..1C,[9#>C!#rzz2!jjlJJsO!T)%,,W5JJw' $r   r   zPositive list is emptyz&No positive or negative examples given)r   r   VectorInputrt   r4  r   r   r   r,  AVERAGE_VECTORr   r   r-  r.  ri   rp   rf   ignore_mentioned_ids_filter)r}   rr  rs  r+  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   `                 @@@@r[   _preprocess_recommend_inputz+LocalCollection._preprocess_recommend_input  s   $	(v112	(d5k"T&*=*=%>>d4PU;FWAXX	( 	( 	(( 0F/Q+W[
).):@S '2 $& 	  (38'38 u..===8}! !9:://:::522===8}!c(mq&8 !IJJ /1.0=?=?9;9;/1
 9 99z666!+!:!:!(,CD!(,CD!+!8!8!(,AB!(,AB!+!3!3!(,<=!(,<= 3<O ##!!
 	
r   r  r  c                     t        j                  |       }t        |      dkD  rt        j                  |      nd }t        j                  |d      }|||z   t        j                  |d      z
  }|S |}|S )Nr   axis)rk   stackr   mean)r  r  positive_vectors_npnegative_vectors_npmean_positive_vectorr   s         r[   _recommend_average_densez(LocalCollection._recommend_average_denseK  s     !hh'78<?@P<QTU<Ubhh'78[_!ww':C*$';;bggFY`a>bb 
  *Fr   c                    t        |       D ]  \  }}t        |       t        |      | |<     t        |      D ]  \  }}t        |       t        |      ||<     t        |       }|rt        |      }t	        ||      }|S |}|S r   )r   rB   rA   rM   rL   )r  r  ir   r  mean_negative_vectors         r[   _recommend_average_sparsez)LocalCollection._recommend_average_sparse\  s    
 ##34IAv"6*"4V"<Q 5 ##34IAv"6*"4V"<Q 5  **:;#-.>#? 45IK_`F  *Fr   c                     | D cg c]  }|D ]  }|  }}}t        |      dkD  r.|D ])  }|D ]"  }|j                  |D cg c]  }|  c}       $ + |S c c}}w c c}w Nr   )r   r   )r  r  multi_vectorr   recommend_vectorr   s         r[   _recommend_average_multiz(LocalCollection._recommend_average_multir  s{     8Hc7G|VbFFVbF7Gc 1$ 0*F$++,HeV,HI + !1   d -Is   A 
Ac           	         ||nt         j                  j                  }| j                  |||||||      \  }}	}
}}}}|t         j                  j                  k(  rS|r| j	                  ||	      }||fS |
r| j                  |
|      }||fS |r| j                  ||      }||fS t        d      |t         j                  j                  k(  s|t         j                  j                  k(  rQ|s|	rt        ||	|      }||fS |
s|rt        |
||      }||fS |s|rt        |||      }||fS t        d| d      t        d| dt         j                         )Nz9No positive examples given with 'average_vector' strategy)rr  rs  r+  z-No positive or negative examples given with 'z
' strategyz
strategy `z+` is not a valid strategy, choose one from )r   r,  r  r  r  r  r  r   r-  r.  r    rG   r-   )r}   rr  rs  r  r?  r  r  r+  r  r  r  r  multi_positive_vectorsmulti_negative_vectorsedited_query_filterr   s                   r[   _construct_recommend_queryz*LocalCollection._construct_recommend_query~  s     (389P9P9_9_ ,,"#
	
##"" u..===#<<$$ \ 000U )#==++ R 000K (#<<*,B H 000A !!\]] //:::522===#3(--% 2 000) ),C.44% & 000 (+A-33%  000 !CH:ZX  XJ&QRWRiRiQjk r   c           	      ~    | j                  ||||	|
||      \  }}|	|	nt        }| j                  ||f||||||      S )Nrq  )r  r   r=  )r}   rr  rs  r  r  r  r   r  r  r?  r  r  r+  r   r  r  s                   r[   r~  zLocalCollection.recommend  so     -1,K,K"#-
)) */):@S{{/>,%%+  
 	
r   c                     ||nt         j                  j                  }| j                  ||||
|||      \  }}|
|
nt        }| j                  ||f||||||	|||
      S )N)
r   r  r  r  r  r   r  r  r  r  )r   r,  r  r  r   r  )r}   r  rr  rs  r  r  r  r  r   r  r?  r  r  r  r  r+  r   r  r  s                      r[   recommend_groupsz LocalCollection.recommend_groups  s    $  (389P9P9_9_,0,K,K"#-
)) */):@S!!/>,!%%+##9 " 
 	
r   r  c                    | j                  ||||      \  }}g }g }t        |      D 	
ci c]  \  }	}
|
|	
 }}	}
t        |      D ];  \  }}|D ]1  }|j                  |       |j                  ||j                            3 = g }|D ]$  }|D ]  }|j                  |j                          & t        j                  ||||      S c c}
}	w )Nr  r  r  r?  )offsets_rowoffsets_colr8  rx   )_search_distance_matrixr   r   r   r#  r   SearchMatrixOffsetsResponse)r}   r  r  r  r?  rx   
all_scoresr  r  r   r;  offset_by_id
row_offsetrL  r<  r8  sample_scoresr#  s                     r[   search_matrix_offsetsz%LocalCollection.search_matrix_offsets#  s     66%U6 7 
Z ;DS>J>-#x#>J)2:)>%J -"":.""<#@A !. *? 'M&ekk* ' ( 00##	
 	
 Ks   Cc           	          | j                  ||||      \  }}g }t        t        ||            D ]G  \  }}	|	D ]=  }
|j                  t	        j
                  ||
j                  |
j                               ? I t	        j                  |      S )Nr  )abr#  )pairs)	r  rt   r   r   r   SearchMatrixPairr   r#  SearchMatrixPairsResponse)r}   r  r  r  r?  rx   r  r  	sample_idr  sample_scores              r[   search_matrix_pairsz#LocalCollection.search_matrix_pairsE  s     66%U6 7 
Z (,Sj-A(B$I} -**#|l>P>P !. )C ..
 	
r   c                    g }||nt         }| j                  t        | j                        |d|      }|D ]0  }t        |      |k(  r n |j                   |j                  |       2 t        |      dk  rg g fS t        |d       }|D cg c]  }|j                   }	}g }
t        |      D ]  \  }}t        |	      D cg c]  \  }}||k7  s| }}}t        ||      }|j                  }t        |t              r||   n|}| j                  ||f||dd      }|
j                  |        |	|
fS c c}w c c}}w )NFr  c                     | j                   S r   )r   rZ   s    r[   r   z9LocalCollection._search_distance_matrix.<locals>.<lambda>w  s    r   r  )r   r  r  r   r  )r   r  r   rx   r   r   r  r   r   re  r   r   r=  )r}   r  r  r  r?  samplesr  
candidates	candidaterx   r8  sampled_id_indexsampledr  rP   ids_to_includessampling_filtersampled_vectorsearch_vectorsamples_scoress                       r[   r  z'LocalCollection._search_distance_matrix\  sm    &().):@S **M<0E

 $I7|v%+y) $ w<!r6M n5'./wVvyyw/*, *37);%g/8~W~VaFVAVq~OW4\?SO$^^N nd3 45# 
 "[[3]C,"" ) N MM.)! *<$ F{- 0
 Xs   D6D;D;rt  r  c                    t        | t        t        j                              r| |j                  vrt        d|  d      |j                  |    }||j                  v r$|j                  |   |   j                         }|| fS ||j                  v r|j                  |   |   }|| fS |j                  |   |   j                         }|| fS | d fS r  )
r   r   r   r  rx   r   rf   r  ri   rp   )rt  r  r   r   target_vectors        r[   _preprocess_vector_inputz(LocalCollection._preprocess_vector_input  s     fhu}}56Z^^+ 6&1P!QRR..(Cj000 * 2 2; ? D K K M !&(( 
 9 99 * 9 9+ Fs K !&(( !+ 7 7 DS I P P R &((t|r   ru  c                    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                  |   |   j                         }nA||j                  v r|j                  |   |   }n |j                  |   |   j                         }|	j                  |       || k(  s|j                  |
       |	j                  |
        t        |	d   t              r7t        |	d   t              r$|j                  t        |	d   |	d                ft        |	d   t              rt        |	d   t              rt        |	d   d   t               r:t        |	d   d   t               r$|j                  t#        |	d   |	d                t        |	d   d   t              r:t        |	d   d   t              r$|j                  t%        |	d   |	d                ,t        d      t        d       t'        t)        |      t)        |      t)        |      g      dkD  rt        d      ||||fS )Nr  r   r   r   )rr  rs  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)rr  rs  r   r   r   r  rx   r   rf   r  ri   rp   r   r   rC   rt   r4  r   r0   sumrr   )r}   ru  r  r   r  dense_context_vectorssparse_context_vectorsmulti_context_vectorspairpair_vectorsr  r   r   s                r[   _preprocess_contextz#LocalCollection._preprocess_context  s   
  "!# "DL MM4==9gx'>?jnn4(6':Y)Z[[$..1C"j&8&88!+!3!3K!@!E!L!L!N$
(A(AA!+!:!:;!G!L!+!8!8!Ec!J!Q!Q!S ''/!T)%,,W5 ''0# :& ,q/<8ZQ> '--%|AVWY LOT2z,q/SW7Xl1oa0%8ZUVXYHZ\a=b)00#\!_|TUW  Q 2D9jVWYZI[]a>b)00(,q/LYZO\ %g  !c S \ /0././  [  %&<>SUbbbr   c                    ||st        d      ||n| }||nt        }||n|}	| j                  |||	      \  }
}|t        |      ng }| j	                  |||	      \  }}}}||| k(  r|j                  |       t        ||      }|
||||fS )NNo target or context given)r   r   r  rt   r  r   r  )r}   rt  ru  r  r?  r  r  r  r  r   r  	target_idr  r  r  r  s                   r[   _preprocess_discoverz$LocalCollection._preprocess_discover  s     >'9::/E/Q+W[
).):@S '2 $& 	 $(#@#@U`#a y#*#6$w-B $$Wj+F 	\57Lm  Z4%7  + 3<O !"!
 	
r   c           	         | j                  |||||	|
      \  }}}}}|et        |t              r-t        |d   t              rt	        ||      }npt        ||      }nct        |t              rt        ||      }nFt        d      ||rt        |      }n+||rt        |      }n||rt        |      }nt        d      ||nt        }| j                  ||f||||||      S )Nr   zUnsupported target vector typer!  rq  )r#  r   rt   r4  r   r.   r   rE   r   r   rD   r/   r   r=  )r}   rt  ru  r  r  r  r   r  r?  r  r  r  r  r  r  r  r  r   r  s                      r[   r  zLocalCollection.discover  s   ( %%"#
	
!"! $-.mA.6#1-AV#WL#6}F[#\LM<83MCYZ !ABB "'<'(=>L"'=-.DEL"'<,-BCL9::).):@S{{/>,%%+  
 	
r   r;  c                     t        |t              r|dfS t        |t              rd|fS t        dt	        |             )Nr   rO   zIncompatible point id type: )r   r  r   r/  r   )r   r;  s     r[   _universal_idzLocalCollection._universal_idZ  sB    h$Q;#&x<6tH~6FGHHr   ro  rv  c                     t        | j                        dk(  rg d fS || j                  |||||      S |t        d      | j	                  |||||      S )Nr   )ro  r  r  r   r  zGOffset is not supported in conjunction with `order_by` scroll parameter)rv  ro  r  r   r  )r   rx   _scroll_by_idr   _scroll_by_value)r}   ro  r  rv  r  r   r  s          r[   rx  zLocalCollection.scrollb  s     txx=At8O%%+)) &   Y  $$'%% % 
 	
r   r   c                 v    | j                  |      }t        j                  t        j                  |            S )N)r   )r  r   CountResultrk   count_nonzero)r}   r   r  s      r[   r   zLocalCollection.count  s.    11,?!!(8(8(>??r   c                     t         j                  j                          fd      }g } j                  |      }|D ]  \  }	}
|$ j	                  |	       j	                  |      k  r,t        |      |dz   k\  r nO||
   sE|j                  t        j                  |	 j                  |
|       j                  |
|                    t        |      |kD  r|d | ||   j                  fS |d fS )Nc                 ,    j                  | d         S r  )r&  )rP   r}   s    r[   r   z/LocalCollection._scroll_by_id.<locals>.<lambda>  s    D<N<NqQRt<Tr   r  r   r  )r  rx   rj   r  r&  r   r   r   r  r  r	  r   )r}   ro  r  r  r   r  
sorted_idsr5  r  r;  r   s   `          r[   r(  zLocalCollection._scroll_by_id  s     DHHNN,2TU
%'11-@'MHc!d&8&8&BTEWEWX^E_&_6{eai'9MM --c<@,,S,? ($ v;&5>6%=#3#3334<r   c                 `   t        |t        j                        rt        j                  |      }t        |t
              rt        j                  |      }g }| j                  j                         D ]T  \  }}t        | j                  |   |j                        }	|	,|	D ]$  }
t        |
      }||j                  |||f       & V |j                  |j                  nt        j                  j                   }|t        j                  j"                  k(  }|j%                  d |       | j'                  |      }g }t        |j(                        }t+               }|D ]  \  }
}}|F|t        j                  j                   k(  r|
|k  r$,|t        j                  j"                  k(  r|
|kD  rOt-        |      |k\  r |d fS ||   sh|
|f|v ro|j/                  |
|f       |j                  t        j0                  || j3                  ||      | j5                  ||      |
              |d fS )Nr  c                     | d   S r  r   rZ   s    r[   r   z2LocalCollection._scroll_by_value.<locals>.<lambda>  s    1r   r   reverse)r   rq   r   order_value)r   r
   OrderByr   convert_order_byr  r   rx   rj   r<   rq   r   r9   r   	direction	DirectionASCDESCsortr  
start_fromrc  r   rd  r  r  r	  )r}   rv  ro  r  r   r  value_and_idsexternal_idr  payload_valuesr   ordering_valuer7  should_reverser  r5  r<  seen_tupless                     r[   r)  z LocalCollection._scroll_by_value  s    h-!228<Hh$~~(3HGI(,(8$K)$,,{*CX\\RN% (!/!6!-!((.+{)ST ( )9 +3*<*<*HH&&fN^N^NbNb	"f&6&6&;&;; 	~~F11-@%'#H$7$78
 @Cu/<+E;% 0 0 4 44z) &"2"2"7"77z) 6{e#& t|# ${#{2OOUK01MM" --k<H,,[,G %	) 0=: t|r   c                    | j                  |      }t        j                  j                  t	        | j
                              }t        j                  |      }g }|D ]  }	t	        |      |k\  r |S ||	   s| j                  |	   }
t        t        j                  |
t        d      d| j                  |	|      | j                  |	|            }|j                  |        |S )N      ?r   r"  )r  rk   randomrandr   rx   r2  ry   r   r   r   r4  r  r	  r   )r}   r  r  r   r  r  random_scoresrandom_orderr5  r   r;  r<  s               r[   r  z LocalCollection._sample_randomly  s     11,?		s488}5zz-0*,C6{e#$ ! 9||C(H$""Cj))#|<((l;L MM,'%  ( r   rp  c
           	          |j                   |j                   n|}
|xs t        }| j                  ||f||
||||	      }|j                  |j                  nd}d|z
  }| j	                  |||||      S )Nrq  r   rD  )candidates_limitr   r=  	diversity_mmr)r}   r   rp  r?  r  r  r  r   r  r  search_limitsearch_resultsrK  lambda_s                 r[   r{  z LocalCollection._search_with_mmr  s     03/C/C/Os++UZ,,.%%%+ % 
 &)]]%>CMMC		/yyuguMMr   rN  rO  c                 d   |dk  s|dkD  rt        d      |sg S i }g }g }g }	|D ]  }
| j                  |
j                     }| j                  ||g      }t	        |t
              r|j                  |      }|j                  |       |j                  |
j                         |	j                  |
        i }|D 
ci c]  }
|
j                  |
 }}
|| j                  vr| j                  |      j                  nd }t	        |t              st        j                  |      n
t        |      }t        ||      D ]  \  }}t	        |t               rt	        |d   t"              rt        j                  |      }t	        |t        j$                        st        j                  |      }t'        |||      j)                         }t'        ||t        j*                  d d f   |      j)                         d   ||<   nt	        |t              r@t-        ||d      j)                         }t-        ||gd      j)                         d   ||<   nt        j                  |      }t	        |d   t        j$                        s"|D cg c]  }t        j                  |       }}t/        |||      j)                         }t/        ||g|      j)                         d   ||<   t1        t3        |            D ]  }||   ||||   f<     |d   g}|dd  }t3        |      |k  rt3        |      dkD  rg }|D ]P  }||   }g }|D ]  }|j                  |||f           t5        |      }||z  d|z
  |z  z
  }|j                  |       R t7        |D cg c]  }t        j8                  |       c}      rn`t        j:                  |      j=                         }|j                  |j?                  |             t3        |      |k  rt3        |      dkD  r|D cg c]  }||   	 c}S c c}
w c c}w c c}w c c}w )N        rD  z&MMR lambda must be between 0.0 and 1.0r   T)empty_is_zeror   ) r   rx   r   r	  r   r   r   r   ri   r   r*  r   rk   r   rA   r   rt   r4  r   r'   r  newaxisrH   r6   ranger   maxr   isneginfargmaxitempop) r}   rN  r   r?  rO  r  candidate_distance_matrixcandidate_vectorscandidate_idsr  r   r   candidate_vectorquery_raw_similaritiesid_to_pointr*  candidate_idcandidate_vector_npnearest_candidatesmultivecr  selectedpending
mmr_scores
pending_idrelevance_scoresimilarities_to_selectedselected_idmax_similarity_to_selected	mmr_scoresimbest_candidate_indexs                                    r[   rL  zLocalCollection._mmr:  sf    S=GcMEFFI
  	" /1
 $E((588$C#00ug>*D1#3#7#7#> $$%56  *e$ $ GI4BCN5uxxNC 7<4CVCV6VD""5)22\` 	
 lL9 HH\"#L1 	 /2-AR.S*L**D1jAQRSATV[6\&(hh/?&@#!"3RZZ@(*1B(C%%<'):H&&( # 8O "5bjj!m"Dh8&(18&|4 ,l;%>$%"&& &(	 #
 8Q %&"&8 &(1	8&|4 ')hh/?&@#!"3A"6

CL](^L]();L]%(^%B'%& &(	 #
 8U #6"78&(18&|4 3}-.N`abNc)<q9I*JK /G /TL "!$%#(me#Gq(8J%
"8"D+-(#+K,331:{2KL $, .11I-J*o-wB\0\\  !!), & -78ZcS!Z8 #%99Z#8#=#=#? OOGKK(<=>+ (me#Gq(8. ?GGhlL)hGGU DH )_@ 9 Hs   9P<P#P(P-rW  c                 \   |D cg c]  }t        d |D               }}|j                  xs i }t               }	|D ]$  }|D ]  }
|	j                  |
j                          & g }|	D ]  }| j
                  |   }| j                  |d      xs i }| j                  |      }t        |j                  |||||      }t        j                         5  t        j                  d       t        j                  |      }t        j                  |      st!        | d|        d d d        t#        t$        j&                  |t)              d| j                  ||      | j+                  ||            }
|j-                  |
        |j/                  d d	       |d | S c c}w # 1 sw Y   xY w)
Nc              3   L   K   | ]  }|j                   |j                  f  y wr   )r   r#  )r   r   s     r[   r   z8LocalCollection._rescore_with_formula.<locals>.<genexpr>  s     ?hU%((EKK(hs   "$T)
expressionr;  r8  rq   r  defaultsignorez
 as f32 = r   r"  c                     | j                   S r   )r#  rZ   s    r[   r   z7LocalCollection._rescore_with_formula.<locals>.<lambda>  s    AGGr   r2  )r   rr  rc  rd  r   rx   r  r  r   formulawarningscatch_warningssimplefilterrk   rn   isfiniter   r   r   r   r4  r	  r   r;  )r}   r   rW  r  r   r  r>  prefetches_scoresrr  points_to_rescorer   rj  r;  r  rq   r  r#  	score_f32s                     r[   rb  z%LocalCollection._rescore_with_formula  s    Qc
PbHD?h??Pb 	 
 >>'R9<*H!!%%ehh/ " +
 .0)H((8,K''T:@bG33K@J' ==!(%!E ((*%%h/JJu-	{{9-*eWJyk+JK	 +
 ""I&))+|D((lCE OOE"5 *8 	+T:W
4 +*s   FAF""F+	rw  c	           	         ||nt         }	| j                  |j                  | |	      \  }
}g }||j                  |       g }|j                  D ][  }| j                  |j
                  | |	      \  }}||j                  |       |j                  t        ||j                               ] t        ||      }|j                  }t        |t        j                        r`|j                  }t        |j                  |j                   |j"                        }t%        |
||      }| j'                  |	|f||||||      S t)        d|       )N)r   r#  )r  r  c)rt  feedbackcoefficientsrq  zUnsupported feedback strategy: )r   r  rt  r   r  r  DistFeedbackItemr#  r  r+  r   r   NaiveFeedbackStrategynaiver+   r  r  r~  r)   r=  r   )r}   rw  r?  r  r  r  r   r  r  r   r  r"  r  feedback_itemsrX  example_vector
example_idr+  r   r  naive_querys                        r[   r  z#LocalCollection._relevance_feedback  s\     %0e6I#'#@#@%%t[$
 y 02   +13&//D)-)F)FdK*&NJ %$$Z0!!"2.PTPZPZ"[\ 0 3<O%..h < <=^^F4vxx688vxxXL,$')K
 ;;);7))) /    >xjIJJr   r   c                    t        |j                  t        j                        rt	        |j                        |_        | j
                  |j                     }t        |j                  t        |j                        ni       | j                  |<   t        |j                  t              rt        |j                  i}n|j                  }| j                  j                         D ]  \  }}|j                  |      }|| j                  |      }t!        j"                  |      j%                         rJ d       |j&                  t(        j*                  j,                  k(  rBt         j.                  j1                  |      }|t2        kD  rt!        j4                  |      |z  n|}|| j                  |   |<   d| j6                  |   |<   d| j6                  |   |<    | j8                  j                         D ]  \  }}|j                  |      }| j6                  |   |   }	|	s$| j8                  |   |   }
| j;                  |
|       |7|| j8                  |   |<   d| j6                  |   |<   | j=                  ||       d| j6                  |   |<    | j>                  j                         D ]  \  }}|j                  |      }|| j                  |      }t!        j"                  |      j%                         rJ d       |j&                  t(        j*                  j,                  k(  rWt         j.                  j1                  |d      d d t         j@                  f   }|t!        jB                  |dk7  |t2              z  }t!        j4                  |      | j>                  |   |<   d| j6                  |   |<   d| j6                  |   |<     d| jD                  |<   y )NVector contains NaN valuesr   r   r!  r  rQ  )#r   r   r  r  r  rx   r	   rq   r   r   rt   r   rf   rj   r   r   rk   isnanr   r*  r   r   COSINElinalgnormEPSILONr   rw   ri   r   r   rp   rS  wherers   )r}   r   r   rf   r   _named_vectorsr   r   r  was_deletedprevious_vector_named_vectorvector_norms                r[   _update_pointzLocalCollection._update_point	  s@   ehh		*588}EHhhuxx $161Ju}}-PR
S ellD)*ELL9GllG ,0<<+=+=+?'K[[-F!//<88F+//1O3OO1??foo&<&<<99>>&1D8<wRXXf-4FF17[)#.<=''4S9<=''4S9 ,@ ,0+>+>+D+D+F'K[[-F11+>sCK"&"5"5k"B3"G''E!8>##K05<=''4S9''<<=''4S9 ,G +/*;*;*A*A*C&K[[-F!//<88F+//1O3OO1??foo&<&<<"$))..b."A!RZZ-"PKbhh{c'9;PPF68hhv6F!!+.s3<=''4S9<=''4S9 +D Sr   c                 n   t        | j                        }t        |j                  t        j
                        rt        |j                        |_        || j                  |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"                  j%                         D ]  \  }}|j'                  |      }|j(                  d   |k  r+t        j*                  ||dz  dz   |j(                  d   f      }|Xt        j,                  |j(                  d         }|||<   t        j                  | j.                  |   d      | j.                  |<   nt        j0                  |t        j2                        }t        j4                  |      j7                         rJ d       | j9                  |      }	|	j:                  t<        j>                  j@                  k(  r/t        jB                  jE                  |      }
|
tF        kD  r||
z  n|}|||<   t        j                  | j.                  |   d      | j.                  |<   || j"                  |<    | jH                  j%                         D ]  \  }}|j'                  |      }t        |      |k  r:|t        |      z
  dz   }tK        |      D ]  }|j                  tM                       |@tM               }|||<   t        j                  | j.                  |   d      | j.                  |<   nG|||<   | jO                  ||       t        j                  | j.                  |   d      | j.                  |<   || jH                  |<    | jP                  j%                         D ]  \  }}|j'                  |      }t        |      |k  rE|t        |      z
  dz   }tK        |      D ]&  }|j                  t        j0                  g              ( |Jt        j0                  g       ||<   t        j                  | j.                  |   d      | j.                  |<   nt        j0                  |t        j2                        }t        j4                  |      j7                         rJ d       | j9                  |      }	|	j:                  t<        j>                  j@                  k(  rWt        jB                  jE                  |d      d d t        jR                  f   }|t        jT                  |d	k7  |tF              z  }|||<   t        j                  | j.                  |   d      | j.                  |<   || jP                  |<    y )
Nz)Payload and ids_inv must be the same sizer   r  r   rc   r  r!  r  rQ  )+r   rx   r   r   r  r  r  ry   r   rq   r	   r   rk   rs   r   rt   r   rf   rj   r   r)  resizer   rw   r   rn   r  r   r   r*  r   r   r  r  r  r  ri   rT  r@   r   rp   rS  r  )r}   r   r   rf   r   r   r   fake_vector	vector_npr   r  diffr  r  s                 r[   
_add_pointzLocalCollection._add_pointP	  s   $((mehh		*588}EH EHH%%--:S'6Y[\	
 4<< C$55b7bb5yyq1ellD)*ELL9GllG +/,,*<*<*>&K[[-F""1%, "		-#'A+}GZGZ[\G]9^ _~ ggm&9&9!&<=%0c"79yy++K8!8''4 HHV2::>	88I.224R6RR4//<??foo&<&<<99>>)4D487N	D 0	I%.c"79yy++K8!8''4 )6DLL%3 +?8 +/*=*=*C*C*E&K[[-F=!S(S//!3tA!(()<)>? % ~13%0c"79yy++K8!8''4 &,c"''<79yy++K8!8''4 0=D,+ +F0 +/*;*;*A*A*C&K[[-F=!S(S//!3tA!(("6 % ~%'XXb\c"79yy++K8!8''4 HHV2::>	88I.224R6RR4//<??foo&<&<<"$))..."DQ

]"SK+*<k7!SSI%.c"79yy++K8!8''4 .;Dk*3 +Dr   update_filterupdate_modec                    t        |j                  t              r 	 t        j                  |j                        }t        |j                  t              ri }|j                  j                         D ]K  \  }}|| j                  vrt        d|       t        |t              s3t        |       t        |      ||<   M |j                  j                  |       nt        | j                  j!                               }	t        | j"                  j!                               }
|	r|	dgk7  s|
r|
dgk7  rt        d|	 d|
       | j                  s| j"                  st        d      t        |j                  t        j                        rt        |j                        |_        |j                  | j$                  v r|t&        j(                  j*                  k(  ry | j$                  |j                     }| j,                  |   sZ|Xi }| j.                  j                         D ]  \  }}||   rd||<    t1        || j2                  |   | j4                  |   |      sy | j7                  |       n/|t&        j(                  j8                  k(  ry | j;                  |       | j<                  | j<                  j?                  |       y y # t
        $ r}t        d|j                   d      |d }~ww xY w)	Nz	Point id z is not a valid UUID-Wrong input: Not existing vector name error: rO   zbWrong input: Unnamed vectors are not allowed when a collection has named vectors or multivectors: z, z+Wrong input: Not existing vector name errorT) r   r   r  r  r  r   r   r   rj   rv   r   rB   rA   updatert   rf   ru   rp   rx   r   
UpdateModeINSERT_ONLYrs   rw   r;   rq   ry   r  UPDATE_ONLYr  r{   persist)r}   r   r  r  _uuideupdated_sparse_vectorsr   r   vector_namesmultivector_namesr   r  rs   s                 r[   _upsert_pointzLocalCollection._upsert_point	  s    ehh$T		%((+ ellD)%'"',||'9'9';#Vd&<&<<$'TU`Ta%bccfl3*62:LV:T*;7 (< LL 67 1 1 34L $T%6%6%;%;%= >"!5!&7B4&? x#nB'8&9;  <<(9(9 !NOOehh		*588}EH88txxf//;;;((588$C<<$)B
,0,C,C,I,I,K(K"3<26
;/ -L $!4<<#4dll36G  u%f//;;;OOE"<<#LL  ' $e  T 9UXXJ6J!KLRSSTs   K 	K-K((K-rF  c                    t        |t              r|D ]  }| j                  |||        nt        |t        j                        r|}t        |j
                  t              rt        |j
                  i}n|j
                  }t        |j                        D ]r  \  }}d }	|j                  |j                  |   }	|j                         D 
ci c]  \  }
}|
||    }}
}| j                  t        j                  ||	|      ||       t nt        dt        |             t        | j                        | j                  kD  r9t!        d| j                  ddt        | j                         dt"        dd	
       y y c c}}
w )N)r  r  r  zUnsupported type: z=Local mode is not recommended for collections with more than ,z% points. Current collection contains zd points. Consider using Qdrant in Docker or Qdrant Cloud for better performance with large datasets.zlarge-local-collection   )categoryr   
stacklevel)r   rt   r  r   Batchrf   r   r   rx   r  rj   PointStructr   r   r   LARGE_DATA_THRESHOLDr   UserWarning)r}   rF  r  r  r   batchrf   r   r;  rq   r   r   r   s                r[   upsertzLocalCollection.upsert	  sq    fd#""5S^"_  -E%--..>--!*599!5X>>-#nnS1G6=mmoFo74$#,oF""&&# '%
 #0 + #  "6" 1$v,@AAtxx=4444OPTPiPijkOl m77:488}o Fnn %, 5 Gs   F c                 B   |j                         D ]  \  }}|| j                  vrt        d|       d| j                  |   |<   t	        |t
              r_t        |       | j                  |   |   }| j                  ||       t        |      }|| j                  |   |<   | j                  ||       t        j                  |t        j                        }t        j                  |      j                         rJ d       | j!                  |      }|| j"                  v rj|j$                  t&        j(                  j*                  k(  r/t        j,                  j/                  |      }	|	t0        kD  r||	z  n|}|| j"                  |   |<   ||j$                  t&        j(                  j*                  k(  rWt        j,                  j/                  |d      d d t        j2                  f   }
|t        j4                  |
dk7  |
t0              z  }|| j6                  |   |<    y )Nr  r   rc   r  r!  r  rQ  )rj   rv   r   rw   r   r   rB   ri   r   rA   r   rk   r   rn   r  r   r   rf   r*  r   r   r  r  r  r  rS  r  rp   )r}   r   rf   r   r   
old_vector
new_vectorr  r   r  r  s              r[   _update_named_vectorsz%LocalCollection._update_named_vectors
  s    $+==?K$"8"88 #PQ\P]!^__89D##K05&,/&v.!00=cB
''
K@/7
8B##K05''
K@rzz:Ixx	*..0N2NN0++K8Fdll*??foo&<&<<99>>)4D487N	D 0	I1:[)#.??foo&<&<<"$))..."DQ

]"SK+*<k7!SSI6?!!+.s37 $3r   c                 &   |D ]  }t        |j                  t        j                        rt	        |j                        n|j                  }| j
                  |   }|j                  }t        |t              r	t        |i}n|}| j                  |   s[|Yi }| j                  j                         D ]  \  }	}
|
|   rd||	<    t        || j                  |   | j                  |   |      s y | j                  ||       | j!                  |        y r  )r   r   r  r  r  rx   r   rt   r   rs   rw   rj   r;   rq   ry   r  _persist_by_id)r}   rF  r  r   r;  r   vector_structfixed_vectorsr  r   rs   s              r[   update_vectorszLocalCollection.update_vectors?
  s     E(2588TYY(Gs588}UXXH((8$C!LLM-.!4m D -<<$)B
,0,C,C,I,I,K(K"3<26
;/ -L $!4<<#4dll36G  &&sM:)' r   selectorc                     | j                  |      }|D ];  }| j                  |   }|D ]  }d| j                  |   |<    | j                  |       = y r   )_selector_to_idsrx   rw   r  )r}   rf   r  rx   r;  r   r   s          r[   delete_vectorszLocalCollection.delete_vectorsW
  sY     ##H-H((8$C&<=''4S9  ')	 r   c                     |D ]/  }|| j                   v s| j                   |   }d| j                  |<   1 | j                  2|D ],  }|| j                   v s| j                  j                  |       . y y r   )rx   rs   r{   delete)r}   rx   r;  r   s       r[   _delete_idszLocalCollection._delete_idsh
  sm    H488#hhx($%S! 
 <<#txx'LL''1   $r   delete_filterc                     | j                  |      }| j                  j                         D cg c]  \  }}||   s| }}}|S c c}}w r   )r  rx   rj   )r}   r  r  r;  r   rx   s         r[   _filter_to_idszLocalCollection._filter_to_idss
  sH    11-@-1XX^^-=K-=MHccx-=K
 Ls
   AAc                 @   t        |t              r5|D cg c])  }t        |t        j                        rt	        |      n|+ c}S t        |t
        j                        r| j                  |      S t        |t
        j                        r?|j                  D cg c])  }t        |t        j                        rt	        |      n|+ c}S t        |t
        j                        r| j                  |j                        S t        dt        |             c c}w c c}w )NzUnsupported selector type: )r   rt   r  r  r  r   Filterr  PointIdsListrF  FilterSelectorrP  r   r   )r}   r  r  s      r[   r  z LocalCollection._selector_to_idsx
  s     h%OWXx
3		 :CHCxXX&--0&&x00&"5"56OW_
3		 :CHC__&"7"78&&x77:4>:JKLL Y `s   .D.Dc                 H    | j                  |      }| j                  |       y r   )r  r  )r}   r  rx   s      r[   r  zLocalCollection.delete
  s"     ##H-r   c                     | j                   f| j                  |   }t        j                  || j	                  |dd      | j                  |d            }| j                   j                  |       y y )NTF)r   r   )r  r  )r{   rx   r   r  r  r	  r  )r}   r;  r   r   s       r[   r  zLocalCollection._persist_by_id
  sn    <<#((8$C&&))#De)T((4(@E
 LL  ' $r   c                 T   | j                  |      }t        t        |            }|t        |      nd }|D ]o  }| j                  |   }|!i | j
                  |   || j
                  |<   n*| j
                  |   t        | j
                  |   ||       | j                  |       q y )N)rq   r   ru   )r  r	   r   r8   rx   rq   r>   r  )	r}   rq   r  r   rx   jsonable_payloadru   r;  r   s	            r[   set_payloadzLocalCollection.set_payload
  s     ##H-#$6w$?@BE//#*>W[H((8$C|$Mt||C'8$M<L$MS!<<$0$T\\#->FV]ab) r   c                     | j                  |      }|D ]G  }| j                  |   }t        t        |            xs i | j                  |<   | j                  |       I y r   )r  rx   r	   r   rq   r  )r}   rq   r  rx   r;  r   s         r[   overwrite_payloadz!LocalCollection.overwrite_payload
  sX     ##H-H((8$C ();G)D E KDLL) r   ru   c                     | j                  |      }|D ]Y  }| j                  |   }|D ]2  }|| j                  |   v s| j                  |   j                  |       4 | j	                  |       [ y r   )r  rx   rq   rY  r  )r}   ru   r  rx   r;  r   r   s          r[   delete_payloadzLocalCollection.delete_payload
  sn     ##H-H((8$C$,,s++LL%))#.  ) r   c                     | j                  |      }|D ]1  }| j                  |   }i | j                  |<   | j                  |       3 y r   )r  rx   rq   r  )r}   r  rx   r;  r   s        r[   clear_payloadzLocalCollection.clear_payload
  sH     ##H-H((8$C "DLL) r   update_operationsc                    |D ]u  }t        |t        j                        r|j                  }t        |t        j                        r(| j                  |j
                  |j                         lt        |t        j                        r(| j                  |j                  |j                         t        dt        |j                               t        |t        j                        r| j                  |j                         t        |t        j                        rk|j                  j                  xs |j                  j                  }| j                  |j                  j                   ||j                  j"                         t        |t        j$                        rV|j&                  j                  xs |j&                  j                  }| j'                  |j&                  j                   |       t        |t        j(                        rV|j*                  j                  xs |j*                  j                  }| j+                  |j*                  j,                  |       kt        |t        j.                        r| j1                  |j0                         t        |t        j2                        r5|j4                  }| j5                  |j                  |j                         t        |t        j6                        rV|j8                  j                  xs |j8                  j                  }| j9                  |j8                  j:                  |       at        dt        |              y )N)r  zUnsupported upsert type: zUnsupported update operation: )r   r   UpsertOperationr  PointsBatchr  r  
PointsListrF  r   r   DeleteOperationr  SetPayloadOperationr  rP  rq   r   OverwritePayloadOperationr  DeletePayloadOperationr  ru   ClearPayloadOperationr  UpdateVectorsOperationr  DeleteVectorsOperationr  r   )r}   r  	update_opupsert_structpoints_selectorr  s         r[   batch_update_pointsz#LocalCollection.batch_update_points
  s    +I)V%;%;< ) 0 0mV-?-?@KK 3 3=C^C^K_v/@/@AKK 4 4MD_D_K`$'@iFVFVAW@X%YZZIv'='=>I,,-Iv'A'AB"+"7"7">">"^)BWBWB^B^  ))11?IDYDYD]D] Iv'G'GH//66\):U:U:\:\   &&y'B'B'J'JO\Iv'D'DE,,33Vy7O7O7V7V   ##I$<$<$A$A?SIv'C'CD""9#:#:;Iv'D'DE!*!9!9##"))9U9U $  Iv'D'DE,,33Vy7O7O7V7V   ##I$<$<$C$C_U #A$y/AR!STTO +r   
new_configc                 p    || j                   vrt        d| d      || j                  j                   |<   y )Nr   z! does not exist in the collection)ri   r   r_   )r}   r   r  s      r[   update_sparse_vectors_configz,LocalCollection.update_sparse_vectors_config  s;     d111w{m3TUVV2<"";/r   c                    t        j                  t         j                  j                  t         j                  j
                  d| j                         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 | j                  j&                              S )Nr   r   )rf   shard_numberreplication_factorwrite_consistency_factoron_disk_payloadri      d   i'  )mef_constructfull_scan_threshold    )wal_capacity_mbwal_segments_aheadg?i  r^      )deleted_thresholdvacuum_min_vector_numberdefault_segment_numberindexing_thresholdflush_interval_secmax_optimization_threads)r   hnsw_config
wal_configoptimizer_configquantization_configmetadata)statusoptimizer_statusindexed_vectors_countpoints_countsegments_countpayload_schemar_   )r   CollectionInfoCollectionStatusGREENOptimizersStatusOneOfOKr   CollectionConfigCollectionParamsr_   rf   r  r  r  r  ri   
HnswConfig	WalConfigOptimizersConfigr  r   s    r[   infozLocalCollection.info"  s   $$**00#99<<"#++**.. KK//!%!9!9'+{{'E'E-1[[-Q-Q$(KK$?$?#';;#=#= #--!$(-
 "++$&'( "(!8!8&)-1+,','(-." %)--7$
 $	
r   )NF)rQ   N)rO   )T)TT)Fr   )NrO  NTFN)	NNNrO  r   TFNN)NNNTF)NNNNNFFN)NNNNrO     TFNNN)NrO  r   TFNNN)NrO  )TF)NNNNNNN)NNNrO  r   TFNNNNN)NNNrO  r   NTFNNNNNN)Nr  rO  N)NNNNNN)NNNrO  r   TFNNNN)NrO  NNTF)NrO  NTF)NrO  TF)NN)__name__
__module____qualname____doc__r  r   CreateCollectionr  rr   r   staticmethodr   r   r   re   r   r   r   r   classmethodr   r4  r   r   r|   rt   r   r   r   r   rF   r,   
NumpyArrayr   r   r   r   r   r   r   r   PayloadSelectorr   Payloadr  VectorStructr	  r  rk   r   r  r  r   r=  QueryPrefetchrJ  rM  rG  rH  rI  r  DocumentImageInferenceObjectWithLookupInterfacer  r  Vectorr    rG   r-   r  r  r  r  r`  r  r,  r  r  r  r  r  r~  r  r  r  r  r  r   r  r  r   rC   r0   r  r#  r  r&  r5  rx  r+  r   r(  r)  r  Mmrr{  rL  ra  rb  RelevanceFeedbackInputr  r  r  r  r  r  r  r  r  PointVectorsr  r  r  r  r  r  r  r  r  r  r  r  r  UpdateOperationr  SparseVectorParamsr  r
  r  r   r   r[   r]   r]   ^   sz    "
  $05	0''0 *0 *.	0
 
0d 3c6.../3	tC,,,-tC9L9L4L/MM	N3 3(!; ;C ;D ;; ;C ;D ; 9c 9c 9e 9 9G< Gc Gl GLC\ / KCe$%&4;  Cd5k**+, 	 
 %%&  C))*+ C**+, 	 C))*
+ /  
s$'88;KKeN^N^^^	_!/ /bMc Mf.A.A M ES Es Et E E6 ES Es Et E E IK&.ud{&;CF	 0  FJ)) Xc]*U-B-BB) 
	) )\ FJ 	QQ Xc]*U-B-BBQ 	Q
 
Q EJ!!&*Xc]&:T&A!			t	#!L #', 4Z 
	4 c4i 2 -1!EI-2(,-j KCe$%&4;  Cd5k**+, 	 
 %%&  C))*+    C**+	, 
 C))*+ j" llT)#j$ %j& d
'j( Xc]*U-B-BB)j* Xc]*+j, -j. 
f  	!/j\ %)04,0EI-2(, 79{{T!79 u~~&-79 llT)	79
 79 79 Xc]*U-B-BB79 Xc]*79 79 Tz79 79 
		79r$%.. $T%:K:K5L $X !,0(,EI-2Rd5,,-.R {{R 	R
 R TzR llT)R R Xc]*U-B-BBR Xc]*R 
e	 Rl %) ,0 !EJ-2(,D{{T!D TzD llT)	D
 TzD d
D Xc]*U-B-BBD Xc]*D D 
e	 Dh  AE,0EI-2(,8<;?1W9W9 MM5k4;    ! kk	
  nn kk ##$ 		W9 TzW9  ..4#77$>!W9" llT)#W9$ %W9& 'W9( Xc]*U-B-BB)W9* Xc]*+W9, -W9. ..5/W90 !91W92 
		3W9N .2FJ-2(,8<;?+I9uo
tE{

*_<~MPUP`P```


 

 
!
!"   	 


I9 I9 mmd*I9 I9  !I9" Xc]*V-C-CC#I9$ Xc]*%I9& 'I9( ..5)I9* !9+I9, 
		-I9\ -1	1.1. llT)1. 	1.
 
		1.l FJ-2	emm$ Xc]*U-B-BB Xc]*	
 
fmm	8 9=8<37,0 ;?.2_
6--.5_
 6--.5_
 ))D0	_

 llT)_
 Tz_
 !9_
 "%t_
 
T%[T%[V  !V  !T$u+T$u+	
_
B tE{+?CDK?P			   v223v223 
		 * 	 tDK01	 EI$tTY{J[E\	 	d5k		  	  9=8<,0 ;?.237R16--.5R1 6--.5R1 llT)	R1
 TzR1 !9R1 "%tR1 ))D0R1 
O#n4v7J7JJUM]M]]	
R1l 9=8<,0EI-2(, ;?.237"
6--.5"
 6--.5"
 llT)	"

 "
 "
 Xc]*U-B-BB"
 Xc]*"
 "
 Tz"
 !9"
 "%t"
 ))D0"
 
f  	!"
N 9=8<-1(,FJ-2 ;?.28<;?37!+
+
 6--.5+
 6--.5	+

 mmd*+
 +
 +
 +
 Xc]*V-C-CC+
 Xc]*+
 Tz+
 !9+
 "%t+
 ..5+
 !9+
  ))D0!+
" 
		#+
^ -1  
llT) 
  
 	 

 Tz 
 
	*	* 
H -1 
llT)
 
 	

 Tz
 
	(	(
2 -1 3llT)3 3 	3
 Tz3 
tO$d4+<&==	>3j ""T)7HWZ	v}}emmd22	3 &DcF../Dc=NDc]`Dc	[4 12D9I4JDQVQ^Q^L__
DcP -17;,0 ;?.2-
""T)-
 &,,-4-
 llT)	-

 Tz-
 !9-
 "%t-
 
[		
-
b -17;,0EI-2 ;?.2(,>
""T)>
 &,,-4>
 llT)	>

 >
 >
 Xc]*U-B-BB>
 Xc]*>
 Tz>
 !9>
 "%t>
 >
 
f  	!>
@ IV%;%; Ic3h I I .2)-'+EI-2"
||d*"
 "
 --$&	"

 $"
 Xc]*U-B-BB"
 Xc]*"
 
tELL!5==4#77	8"
H@%,,"5 @ASAS @ .2'+EI-2# ||d*#  #  $	# 
 Xc]*U-B-BB#  Xc]*#  
tELL!5==4#77	8# P .2EI-2H--H ||d*H 	H
 Xc]*U-B-BBH Xc]*H 
tELL!5==4#77	8H\ FJ-2!! llT)! Xc]*U-B-BB	!
 Xc]*! 
e	 !P -1!EI-2(,NE{\1De4EEN YYN Tz	N
 llT)N N d
N Xc]*U-B-BBN Xc]*N N 
f  	!N:mHV//0mH 5kL04U3DDmH 	mH
 mH mH 
f  	!mH^4 ""4  !f&8&8!9:4  	4 
 Xc]*U-B-BB4  Xc]*4  
f  	!4 t -1!EI-2(,3K"993K Tz3K llT)	3K
 3K d
3K Xc]*U-B-BB3K Xc]*3K 3K 
f  	!3Kl96#5#5 9$ 9va; 2 2 a;t a;L .2/3	=(!!=( ||d*=( %%,	=(
 
=(D .2/3	+++,v||;+ ||d*+ %%,	+
 
+Z@@!%c4;+ETRW[HY+Y&Y!Z@	@B Z^*u112*CH<<RVCV*	*0*#* MM6))*+##$ !!"	* 
*"	2tEMM2 	2t 	2ELL T&BXBX=Y 
M MM6))*+##$ !!"M 
f$$	%M(
 MM6))*+##$ !!"
 

(v'='= ($ (& ** MM6))*+##$ !!"	* 4Z* 
*4** MM6))*+##$ !!"	* 
* *sm* MM6))*+##$ !!"	* 
*$* MM6))*+##$ !!"* 
*+U#E$9$9:+U 
+UZ==,2,E,E=	=%
f++ %
r   r]   r  r  c                 f   t        |      dk(  r| S t        j                  |      }| t        j                  |g      } | S t	        |       } | J | j
                  
|g| _        | S t        | j
                  t              r| j
                  j                  |       | S | j
                  |g| _        | S )Nr   has_id)must_not)	r   r   HasIdConditionr  r	   r0  r   rt   r   )r  r  ignore_mentioned_idss      r[   r  r  J  s     =Q!00F}}/C.DE   -'''  (%9$:L!  --t4!!(()=>  &2%:%:<P$QL!r   rx   c                 f   t        |      dk(  r| S t        j                  |      }| t        j                  |g      } | S t	        |       } | J | j
                  
|g| _        | S t        | j
                  t              r| j
                  j                  |       | S | j
                  |g| _        | S )Nr   r.  )must)	r   r   r1  r  r	   r4  r   rt   r   )r  rx   include_idss      r[   re  re  b  s     3x1}''s3K}};-8   -'''$!,L  ))40$$[1  ".!2!2K @Lr   r  c                     t        j                  | j                  dd| j                  | j                  | j
                        S )Nr   rD  )r   r$  r#  rq   r   r4  )r   r   r   rq   r   r4  )r  s    r[   ry  ry  z  s9    99}}&& r   r>  r  c                 @   | g}|r|j                         }t        |t              r|j                  |       4||_        |j
                  }|Jt        |t              r|j                  |       n+t        |t        j                        r|j                  |       |ryy)z<Set .limit on all nested Prefetch objects without recursion.N)	rY  r   rt   extendr  r>  r   r"  r   )r>  r  r  currentnesteds        r[   r  r    s     ;CE
))+gt$LL!  !!>fd#LL /LL ' r   )zrU   r   r  collectionsr   r   typingr   r   r   r   copyr	   rv  numpyrk   qdrant_clientr
   $qdrant_client.common.client_warningsr   qdrant_client._pydantic_compatr   r   rY   qdrant_client.conversionsr   r   &qdrant_client.conversions.common_typesr   $qdrant_client.conversions.conversionr   qdrant_client.httpr   qdrant_client.http.modelsr    qdrant_client.http.models.modelsr   r   r   r   qdrant_client.hybrid.formular   r   qdrant_client.hybrid.fusionr   r   qdrant_client.local.distancesr   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r  r+   #qdrant_client.local.multi_distancesr,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   $qdrant_client.local.json_path_parserr7   r8   qdrant_client.local.order_byr9   #qdrant_client.local.payload_filtersr:   r;   +qdrant_client.local.payload_value_extractorr<   r=   (qdrant_client.local.payload_value_setterr>   qdrant_client.local.persistencer?   qdrant_client.local.sparser@   rA   rB   $qdrant_client.local.sparse_distancesrC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   r   r  r]   r  rt   r  r  re  r  ry  r"  r   r  r   r   r[   <module>rT     s      0     & B _ ; F ; % 1 ` ` T _         O 7 T P E A 
     
V# V# Vi+
 i+
XW,,%6:5==6I
\\0,,%,0,?
\\05<< E4E4E !nntENN33!<?!	!r   