
    'Xhɲ                    h   d dl Z d dlZd dlZd dlmZmZ d dlmZmZm	Z	m
Z
mZmZ 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l0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= d dl>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZI d dlJmKZKmLZL d dlMmNZN d dlOmPZP d dlQmRZRmSZS d dlTmUZU d dlVmWZW d dlXmYZYmZZZm[Z[ d dl\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZh dZidZjdedefdZ G d d       Zkd!e	ej                     d"emej                     dej                  fd#Zod!e	ej                     d$emej                     dej                  fd%Zpd&ej                  dejH                  fd'Zrd(ej                  d)etdej                  fd*Zuy)+    N)OrderedDictdefaultdict)AnyCallableOptionalSequenceUnion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)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)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)rP   default)jsonloadsdumps	Exception_to_jsonable_pythonrM   s    N/RAG/venv/lib/python3.12/site-packages/qdrant_client/local/local_collection.pyr   r   X   sP    Vzz$**Q$788 Vzz$**Q$@STUUVs   ), 8A'&A'c            !       !   e Zd ZdZdZ	 	 ddej                  dee   de	ddfdZ
ed	eeej                  f   deeeej                  f   eeej                  f   f   fd
       ZddZdededdfdZdededdfdZedededefd       ZdededefdZddZedeee   eeee   f   eee      eeeee      f   ej:                  ej<                  eeeef   eee f   e!eee!f   ejD                  f   deeeee e!ejD                  f   f   fd       Z#dedej                  fdZ$ededede	fd       Z%ededede	fd       Z&e	 dde'de(ege	f   dede'fd        Z)e	 dded!ee	e*e   ejV                  f   dee   fd"       Z,	 	 dd#ed!ee	e*e   ejV                  f   d$e	deejZ                     fd%Z.	 dd#ed&ee	e*e   df   deej^                     fd'Z0	 dd(eejb                     dee   de2jf                  fd)Z4d*edeee	f   fd+Z5	 	 	 	 	 	 ddeee   eeee   f   eee      eeeee      f   ej:                  ej<                  eeeef   e eee f   e!eee!f   ejD                  f   d,eejb                     d-ed.ee   d!ee	e*e   ejV                  f   d&ee	e*e   f   d/ee   deejl                     fd0Z7	 	 	 	 	 	 	 	 	 dd1eejp                     d2eeejr                        d,eejb                     d-ed.ed!ee	e*e   ejV                  f   d&ee	e*e   f   d/ee   d3ee   d4e'dejt                  fd5Z;d2ejr                  deejl                     fd6Z<	 	 	 	 	 dd7eeejl                        d1ejp                  d-ed.ed3ee   d,eejb                     d/ee   d!ee	e*e   ejV                  f   d&ee	e*e   f   deejl                     fd8Z=	 	 	 	 	 	 	 	 dd1eejp                     d3ee   d,eejb                     d-ee   d.ee   d!ee	e*e   ejV                  f   d&ee	e*e   f   d/ee   deejl                     fd9Z>	 	 	 	 	 	 	 	 	 	 	 dd:ed1eej~                  ee   eee      ej"                  ejp                  ejD                  ej                  ej                  ej                  df
   d3ee   d2eejr                  eejr                     df   d,eejb                     d-ed;ed!ee	e*e   ejV                  f   d&ee	e*e   f   d/ee   d<eej                     d=ed    dej                  fd>ZE	 	 	 	 	 	 	 	 ddee*e   eee      eeeej                  eGeHeIejD                  f   f   ej:                  ej<                  eGeHeIejD                  f	   d:ed,eejb                     d-ed;ed!ee	e*e   ejV                  f   d&ee	e*e   f   d/ee   d<eej                     d=ed    dej                  fd?ZJ	 	 dded@eejb                     d-edej                  fdAZL	 	 ddBe*ej~                     d!ee	e*e   ejV                  f   d&ee	e*e   f   deej                     fdCZN	 	 	 	 	 	 	 ddDee*ej                        dEee*ej                        dFeej                     d,eejb                     d3ee   dGed    dHee   deeee      eee      eej"                     eej"                     eeee         eeee         ejb                  f   fdIZQedJeee      dKeee      dejD                  fdL       ZRedJeej"                     dKeej"                     dej"                  fdM       ZSedJeeee         dKeeee         deee      fdN       ZT	 	 	 	 	 	 	 ddDee*ej                        dEee*ej                        d,eejb                     d3ee   dGed    dHee   dFeej                     deeeGeHeIej"                  ejD                  f   ejb                  f   fdOZU	 	 	 	 	 	 	 	 	 	 	 	 ddDee*ej                        dEee*ej                        d,eejb                     d-ed.ed!ee	e*e   ejV                  f   d&ee	e*e   f   d/ee   d3ee   dGed    dHee   dFeej                     deejl                     fdPZV	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd:edDee*ej                        dEee*ej                        d,eejb                     d-ed;ed/ee   d!ee	e*e   ejV                  f   d&ee	e*e   f   d3ee   dGed    dHee   d<eej                     d=ed    dFeej                     dej                  f dQZW	 	 	 	 dd,eejb                     d-edRed3ee   dej                  f
dSZY	 	 	 	 dd,eejb                     d-edRed3ee   dej                  f
dTZ[	 	 	 	 dd,eejb                     d-edRed3ee   deee\   eee6      f   f
dUZ]edVeej                     dWd dedeej                  eej~                     f   fdX       Z^dYeej                     dWd dedeee_   ee`   eea   eej~                     f   fdZZb	 	 	 	 	 	 ddVeej                     dYee*ej                        d,eejb                     d3ee   dGed    dHee   deeej                     ee_   ee`   eea   ejb                  f   fd[Zc	 	 	 	 	 	 	 	 	 	 	 ddVeej                     dYee*ej                        d,eejb                     d-ed.ed!ee	e*e   ejV                  f   d&ee	e*e   f   d3ee   dGed    dHee   d/ee   deejl                     fd\Zded]ej                  deeef   fd^       Ze	 	 	 	 	 	 dd_eejb                     d-ed`eej                     d.eej~                     d!ee	e*e   ejV                  f   d&ee	e*e   f   deeej                     eej~                     f   fdaZgddbeejb                     dej                  fdcZi	 	 	 	 	 dd_eejb                     d-ed.eej~                     d!ee	e*e   ejV                  f   d&ee	e*e   f   deeej                     eej~                     f   fddZj	 	 	 	 dd`ej                  d_eejb                     d-ed!ee	e*e   ejV                  f   d&ee	e*e   f   deeej                     eej~                     f   fdeZk	 	 dd-ed,eejb                     d!ee	e*e   ejV                  f   d&ee	e*e   f   deejl                     f
dfZl	 	 	 	 	 	 ddeee   eeee      f   dgej                  d3ee   d,eejb                     d-ed.ee   d!ee	e*e   ejV                  f   d&ee	e*e   f   d/ee   deejl                     fdhZndieejl                     deee   eeee      f   d3edjed-edeejl                     fdkZod1ej                  dleeejl                        d-ed!ee	e*e   ejV                  f   d&ee	e*e   f   deejl                     fdmZqdnej                  ddfdoZsdnej                  ddfdpZtdnej                  ddfdqZudree*ej                     ej                  f   ddfdsZwd#ed	eeeee   eeee      f   f   ddfdtZxdre*ej                     ddfduZzd	e*e   dveejb                  eej                     ej                  ej                  f   ddfdwZ}dBeej~                     ddfdxZ~dyejb                  deej                     fdzZdveejb                  eej                     ej                  ej                  f   deej                     fd{Zdveejb                  eej                     ej                  ej                  f   ddfd|Zd]ej                  ddfd}Z	 ddejZ                  dveejb                  eej                     ej                  ej                  f   dee   ddfd~ZdejZ                  dveejb                  eej                     ej                  ej                  f   ddfdZde*e   dveejb                  eej                     ej                  ej                  f   ddfdZdveejb                  eej                     ej                  ej                  f   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_threadrN   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]   r^   sparse_vectors_confignameparamss          rX   __init__zLocalCollection.__init__f   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rc   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_NAMErg   )rc   rd   re   r|   r}   s        rX   rb   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   )rx   closerz   s    rX   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   )rl   r   intindicesrz   r   r   idxs       rX   _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   rl   r   s       rX   _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      rX   _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)	countrl   getzipr   r   r   appendr   )
rz   r   r   num_docs
new_values	idf_storer   valuedocument_frequencyidfs
             rX   _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 )Nr`   r   )!rx   r   rq   	enumerateloadru   idrv   r   rn   r   r   r   r   rc   rr   r   rh   onesrd   rj   rk   rf   r=   rm   arrayrg   ri   lenro   rt   r   rp   )rz   rc   rf   rm   deleted_idsr   pointloaded_vectorall_dense_vector_namesr|   vall_sparse_vector_namesall_multivector_namesnamed_vectorsr   s                  rX   ry   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   tuplerq   rh   r   ndarrayr   typesNamedVectorr|   r   NamedSparseVectorr
   r   r*   
ValueErrortype)r   r   r|   queryr   s        rX   _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\   rc   dictr   r   r   r   )rz   r|   s     rX   get_vector_paramsz!LocalCollection.get_vector_paramsP  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      rX   	<genexpr>z9LocalCollection._check_include_pattern.<locals>.<genexpr>y       D&Cda16&C   )replacesplitallr   r   r   r   pattern_parts	key_partss        rX   _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      rX   r   z9LocalCollection._check_exclude_pattern.<locals>.<genexpr>  r   r   )r   r   r   r   r   r   s        rX   _check_exclude_patternz&LocalCollection._check_exclude_pattern{  sc    w<#c("T288=KKT*005	Dc-&CDDDr   rn   	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 )NrL   r   z[])r   r   rg   _filter_payloadrq   r   r   )
r   rn   r   r   resnew_pathr   r   	res_arrayr   s
             rX   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    rX   <lambda>zDLocalCollection._process_payload.<locals>.<lambda>.<locals>.<lambda>      (B(B7C(Pr   )anymapr   r   r   s   `rX   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    rX   r   zDLocalCollection._process_payload.<locals>.<lambda>.<locals>.<lambda>  r   r   )r   r   includer   s   `rX   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    rX   r   zDLocalCollection._process_payload.<locals>.<lambda>.<locals>.<lambda>  s    C,F,FwPS,T(Tr   )r   r   excluder   s   `rX   r   z2LocalCollection._process_payload.<locals>.<lambda>  s    CT$,,r   )r   ro   rq   r   r   PayloadSelectorIncludePayloadSelectorExclude)r   rn   r   s   ` `rX   _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   )rn   r   r   )rz   r   r   r   rn   processed_payloads         rX   _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   )	rc   rt   tolistrf   rm   r   rq   r   r   )rz   r   r  r|   dense_vectorsrf   rm   all_vectorss           rX   _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  rv   rt   )r8   rn   rv   rt   rp   )rz   r  r   payload_maskmasks        rX   _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)rt   rg   )rz   r  
has_vectorr   rp   s        rX   _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        ||      }ntA        d	|j4                         t        |tJ              r|j4                  t        j6                  j8                  k(  rtM        |||      }n|j4                  t        j6                  j<                  k(  rtO        |||      }nWtA        d	|j4                         t        |tP              rtS        |||      }n t        |tT              r$|
r|jE                   fd      }tW        ||      }nt        |tX              rt[        |||      }nt        |t\              rt_        |||      }nt        |t`              r$|
r|jE                   fd      }tc        ||      }n|t        |td              rtg        |||      }n^t        |th              r7tk        |       |
r jm                  |      }to        |      }tq        ||      }nt        dts        |              ju                  |      }tw        |      }|tx        jz                  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                  |   }|!|tx        jz                  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   rM   r|   rz   s    rX   r   z(LocalCollection.search.<locals>.<lambda>]      tGXGXYZ\`Gar   c                 (    j                  |       S r   r  r  s    rX   r   z(LocalCollection.search.<locals>.<lambda>u  r  r   c                 (    j                  |       S r   r  r  s    rX   r   z(LocalCollection.search.<locals>.<lambda>}  r  r   zUnsupported query vector type )r   r   r   scoreversionrn   r   )Gr   r   r
   rC   rf   r   r\   modifierr   ModifierIDFr   DOTr*   rh   r   r   shaperm   r   distancerc   rn   r%   r/   r"   strategyRecommendStrategy
BEST_SCOREr&   
SUM_SCORESr(   	TypeErrorrD   transform_sparserH   rK   r+   r0   r3   r    r$   rB   rG   r,   r1   r   r#   rA   rF   r-   r2   r   r?   r   r>   rE   r   r  r'   r!   BIGGER_IS_BETTERargsortinfrv   r   r   floatr   r  r   )rz   r   r  r  r  r   r  r  resultsparse_scoringrescore_idfrc   r&  scoresr  required_orderorderr   r  point_idscored_pointr|   s   `                    @rX   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 >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   rq   r   	_prefetchr   _merge_sources_query_collectionr   QueryResponse)rz   r   r:  r  r  r  r   r  r  r;  r<  
prefetchesr@  scored_pointss                 rX   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   r>  
   Fr?  rA  )r:  r   rq   r   rC  r   r   rD  r  r;  filterr  rE  )rz   r:  inner_prefetchesinner_prefetchr@  s        rX   rC  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*r@  c
           
      t   t        |t        j                        r|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                   }}| j                  |||	      }t        ||
      D ]'  \  }}|j                  |_        |j                  |_        ) |
|d  S t        |t        j                        r| j!                  ||||z   ||	      }||d  S t#               }|D ]$  }|D ]  }|j%                  |j                          & t'        |      dk(  rg S t)        |t+        |            }| j-                  |||||||	|      S c c}w )N)	responsesr  zFusion method z does not exist)r   r  )r   prefetches_resultsr  r   r  r   rA  )r   r   FusionQueryfusionFusionRRFr   DBSFr   r   r   retriever   rn   r   FormulaQuery_rescore_with_formulasetaddr   _include_ids_in_filterrq   rE  )rz   r@  r   r  r  r;  r  r  r   r  fusedr   ru   fetched_pointsfetchedscoredrescoredsources_idssourcefilter_with_sourcess                       rX   rD  zLocalCollection._merge_sources   s    eV//0||v}}000.PVW!3!337'QVY_Q_` >%,,!OPP *//588C/!]],\ + N $'~u#=!( ' $> >!v22311#*fn)) 2 H FG$$ %K!#EOOEHH- $ " ;1$	&<\4P[K\&]#--!4!!-!-$3 . 	 	C 0s   (F5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t;        d      t        |t        j<                        rt;        d      | j                  ||f||||||      S c c}w c c}w )z_
        Performs the query on the collection, assuming it didn't have any prefetches.
        rK  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  )rl  r;  r  r  r  r   r  r  )rf  order_byr  r   r  )r  r  r   r  zUnknown Sample variant: z(Cannot perform fusion without prefetchesz)Cannot perform formula without prefetches)r   scrollrecord_to_scored_pointr   r   NearestQueryrg  _search_with_mmrnearestr9  RecommendQuery	recommendri  rj  r'  DiscoverQuerydiscoverrk  rl  r   OrderByQueryrm  SampleQuerysampleSampleRANDOM_sample_randomlyr   rR  AssertionErrorrX  )rz   r   r;  r  r  r  r   r  r  records_records               rX   rE  z!LocalCollection._query_collectiond  sA    ,,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 !KLLv223 !LMM ;;#U^))) /   k SH Ss   L Lgroup_by
group_sizewith_lookupwith_lookup_collectionc           
      F   t        | j                        }|Ct        |t              r'g }|D ]  }|j	                  t        ||             |}! n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,                  |j.                        }t1        t3        |      d       |_        Q t        j6                  |      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     rX   r   z/LocalCollection.query_groups.<locals>.<genexpr>       #Y|!z!cSVZ?XA|   %%r   hits
collectionr   r  ru   r   r  groups)r   rv   r   rq   r   set_prefetch_limit_recursivelyrI  r   rB  rn   r   r9   rZ  r   r   
PointGroupr  r   r  
WithLookuprW  r   r   r  nextiterlookupGroupsResult)rz   r  r   r;  r:  r  r  r  r   r  r  r  r  	max_limittmpr   rB  r  r   group_valuesgroup_valuegroups_resultgroupr  s                           rX   query_groupszLocalCollection.query_groups  s   4 %	(D)!AJJ=aKL"H " :(IN""%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     rX   r   z0LocalCollection.search_groups.<locals>.<genexpr>k  r  r  r  r  r  r  )r9  r   rv   r   r   rn   r   r9   rq   rZ  r   r   r  r  r   r   r  r  rW  r   r   r  r  r  r  r  )rz   r   r  r  r  r  r   r  r  r  r  rB  r  r   r  r  r  r  r  s                      rX   search_groupszLocalCollection.search_groups8  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   rW   s    rX   r   z'LocalCollection.facet.<locals>.<lambda>  s    !uadmr   r   )r   r   )r  )r   r   r  r   rn   r   r   r9   rZ  r   r   r   
FacetValuer:   r  r[  sortedrg   r   FacetValueHitFacetResponse)rz   r   r  r  
facet_hitsr  r   rn   r   
values_setr   as_uuidr   r   r  s                  rX   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ru   c                    g }|D ]z  }|| j                   vr| j                   |   }| j                  |   dk(  r4|j                  t        j                  || j                  ||      | j                  ||                   | |S )Nr   r   rn   r   )ru   rp   r   r   Recordr   r  )rz   ru   r   r  r1  r7  r   s          rX   rW  zLocalCollection.retrieve  s     Htxx'((8$C||C A%MM --c<@,,S,?   r   ri  rj  r'  lookup_from_collectionlookup_from_vector_namec           
          dt         t        j                     dt        t        t        t
              t        t        j                     t        t        t        t
                 f   dd f fd}||n ||nt        }	||n|	||ng }||ng }|t        j                  j                  k(  rt        |      dk(  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accrN   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   PointIdru   r   rh   r   r  r   )
r  r  exampler   vecr  collection_vectorsmentioned_idsrz   r   s
        rX   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   VectorInputr	   rq   r0  r   r   r   r(  AVERAGE_VECTORr   r   r)  r*  rf   rm   rc   ignore_mentioned_ids_filter)rz   ri  rj  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   `                 @@@@rX   _preprocess_recommend_inputz+LocalCollection._preprocess_recommend_input  s   $	(v112	(tDK($v/B/B*CT$tTY{J[E\\]	( 	( 	(( 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)rh   stackr   mean)r  r  positive_vectors_npnegative_vectors_npmean_positive_vectorr   s         rX   _recommend_average_densez(LocalCollection._recommend_average_dense:  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   r?   r>   rJ   rI   )r  r  ir   r  mean_negative_vectors         rX   _recommend_average_sparsez)LocalCollection._recommend_average_sparseK  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         rX   _recommend_average_multiz(LocalCollection._recommend_average_multia  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)ri  rj  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"   rD   r+   )rz   ri  rj  r  r;  r  r  r'  r  r  r  r  multi_positive_vectorsmulti_negative_vectorsedited_query_filterr   s                   rX   _construct_recommend_queryz*LocalCollection._construct_recommend_querym  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 )Nrh  )r  r   r9  )rz   ri  rj  r  r  r  r   r  r  r;  r  r  r'  r   r  r  s                   rX   rt  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  )rz   r  ri  rj  r  r  r  r  r   r  r;  r  r  r  r  r'  r   r  r  s                      rX   recommend_groupsz LocalCollection.recommend_groups  s    $  (389P9P9_9_,0,K,K"#-
)) */):@S!!/>,!%%+##9 " 
 	
r   ry  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  ry  r;  )offsets_rowoffsets_colr4  ru   )_search_distance_matrixr   r   r   r  r   SearchMatrixOffsetsResponse)rz   r  r  ry  r;  ru   
all_scoresr  r  r   r7  offset_by_id
row_offsetrH  r8  r4  sample_scoresr  s                     rX   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  rq   r   r   r   SearchMatrixPairr   r  SearchMatrixPairsResponse)rz   r  r  ry  r;  ru   r  r  	sample_idr  sample_scores              rX   search_matrix_pairsz#LocalCollection.search_matrix_pairs4  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   rW   s    rX   r   z9LocalCollection._search_distance_matrix.<locals>.<lambda>f  s    r   r  )r   r  r  r   r  )r   r|  r   ru   r   r   r  r   r   r\  r   r   r9  )rz   r  r  ry  r;  samplesr  
candidates	candidateru   r4  sampled_id_indexsampledr  rM   ids_to_includessampling_filtersampled_vectorsearch_vectorsamples_scoress                       rX   r  z'LocalCollection._search_distance_matrixK  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;rk  r  c                    | /t        | t        j                        rt        j                  |       n| } t        | t        t        j                              r| |j                  vrt        d|  d      |j                  |    }||j                  v r$|j                  |   |   j                         }|| fS ||j                  v r|j                  |   |   }|| fS |j                  |   |   j                         }|| fS | d fS r  )r   r   TargetVectorr   convert_target_vectorr
   r   r  ru   r   rc   r  rf   rm   )rk  r  r   r   target_vectors        rX   _preprocess_targetz"LocalCollection._preprocess_target  s    !j9J9J&K ,,V4 	
 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   rl  c                    |D cg c]3  }t        |t        j                        rt        j                  |      n|5 }}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/        t1        |      t1        |      t1        |      g      dkD  rt        d      ||||fS c c}w )Nr  r   r   r   )ri  rj  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)r   r   ContextExamplePairr   convert_context_example_pairri  rj  r
   r   r  ru   r   rc   r  rf   rm   r   r   r@   rq   r0  r   r.   sumro   )rz   rl  r  r   pairr  dense_context_vectorssparse_context_vectorsmulti_context_vectorspair_vectorsr  r   r   s                rX   _preprocess_contextz#LocalCollection._preprocess_context  s     
   dD$;$;< 77=   	 
  "!# "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bO
s   8K	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  rq   r  r   r  )rz   rk  rl  r  r;  r  r  r  r  r   r  	target_idr  r  r  r  s                   rX   _preprocess_discoverz$LocalCollection._preprocess_discover  s     >'9::/E/Q+W[
).):@S '2 $& 	 $(#:#:6:{#[ 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  rh  )r  r   rq   r0  r    r,   r   rB   r   r   rA   r-   r   r9  )rz   rk  rl  r  r  r  r   r  r;  r  r  r  r  r  r  r  r  r   r  s                      rX   rv  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   r7  c                     t        |t              r|dfS t        |t              rd|fS t        dt	        |             )Nr   rL   zIncompatible point id type: )r   r  r   r+  r   )r   r7  s     rX   _universal_idzLocalCollection._universal_idX  sB    h$Q;#&x<6tH~6FGHHr   rf  rm  c                     t        | j                        dk(  rg d fS || j                  |||||      S |t        d      | j	                  |||||      S )Nr   )rf  r  r  r   r  zGOffset is not supported in conjunction with `order_by` scroll parameter)rm  rf  r  r   r  )r   ru   _scroll_by_idr   _scroll_by_value)rz   rf  r  rm  r  r   r  s          rX   rn  zLocalCollection.scroll`  s     txx=At8O%%+)) &   Y  $$'%% % 
 	
r   r   c                 v    | j                  |      }t        j                  t        j                  |            S )N)r   )r  r   CountResultrh   count_nonzero)rz   r   r  s      rX   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  )rM   rz   s    rX   r   z/LocalCollection._scroll_by_id.<locals>.<lambda>  s    D<N<NqQRt<Tr   r  r   r  )r  ru   rg   r  r  r   r   r   r  r   r  r   )rz   rf  r  r  r   r  
sorted_idsr1  r  r7  r   s   `          rX   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   rW   s    rX   r   z2LocalCollection._scroll_by_value.<locals>.<lambda>  s    1r   r   reverse)r   rn   r   order_value)r   r   OrderByr   convert_order_byr  r   ru   rg   r9   rn   r   r7   r   	direction	DirectionASCDESCsortr  
start_fromrZ  r   r[  r  r   r  )rz   rm  rf  r  r   r  value_and_idsexternal_idr  payload_valuesr   ordering_valuer.  should_reverser  r1  r3  seen_tupless                     rX   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 )Nr   r  )r  rh   randomrandr   ru   r.  rv   r   r   r   r0  r   r  r   )rz   r  r  r   r  r  random_scoresrandom_orderr1  r   r7  r8  s               rX   r|  z LocalCollection._sample_randomly  s     11,?		s488}5zz-0*,C6{e#$ ! 9||C(H$""Ah))#|<((l;L MM,'%  ( r   rg  c
           	          |j                   |j                   n|}
|xs t        }| j                  ||f||
||||	      }|j                  |j                  nd}d|z
  }| j	                  |||||      S )Nrh  r         ?)candidates_limitr   r9  	diversity_mmr)rz   r   rg  r;  r  r  r  r   r  r  search_limitsearch_resultsrB  lambda_s                 rX   rq  z LocalCollection._search_with_mmr  s      03/C/C/Os++UZ,,.%%%+ % 
 &)]]%>CMMC		/yyuguMMr   rE  rF  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        r@  z&MMR lambda must be between 0.0 and 1.0r   T)empty_is_zeror   ) r   ru   r   r  r   r   r   r   rf   r   r&  r   rh   r   r>   r   rq   r0  r   r)   r  newaxisrE   r4   ranger   maxr   isneginfargmaxitempop) rz   rE  r   r;  rF  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                                    rX   rC  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-rQ  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     rX   r   z8LocalCollection._rescore_with_formula.<locals>.<genexpr>  s     ?hU%((EKK(hs   "$T)
expressionr7  r4  rn   r  defaultsignorez
 as f32 = r   r  c                     | j                   S r   )r  rW   s    rX   r   z7LocalCollection._rescore_with_formula.<locals>.<lambda>  s    AGGr   r)  )r   ri  rZ  r[  r   ru   r   r  r   formulawarningscatch_warningssimplefilterrh   rk   isfiniter   r   r   r   r0  r  r   r2  )rz   r   rQ  r  r   r  r:  prefetches_scoresri  points_to_rescorer   ra  r7  r  rn   r  r  	score_f32s                     rX   rY  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+	r   c                 :   | 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(                  j+                  |      }|t,        kD  rt        j.                  |      |z  n|}|| j                  |   |<   d| j0                  |   |<   d| j0                  |   |<    | j2                  j                         D ]  \  }}|j                  |      }| j0                  |   |   }	|	s$| j2                  |   |   }
| j5                  |
|       |7|| j2                  |   |<   d| j0                  |   |<   | j7                  ||       d| j0                  |   |<    | j8                  j                         D ]  \  }}|j                  |      }|| j                  |      }t        j                  |      j                         rJ d       |j                   t"        j$                  j&                  k(  rWt        j(                  j+                  |d      d d t        j:                  f   }|t        j<                  |dk7  |t,              z  }t        j.                  |      | j8                  |   |<   d| j0                  |   |<   d| j0                  |   |<     d| j>                  |<   y )NVector contains NaN valuesr   r   r  r  rH  ) ru   r   r   rn   r   r   r   rq   r   rc   rg   r   r   rh   isnanr   r&  r   r   COSINElinalgnormEPSILONr   rt   rf   r   r   rm   rJ  whererp   )rz   r   r   rc   r   _named_vectorsr   r}   ry  was_deletedprevious_vector_named_vectorvector_norms                rX   _update_pointzLocalCollection._update_point  s   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                    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        j*                  |t        j,                        }t        j.                  |      j1                         rJ d       | j3                  |      }	|	j4                  t6        j8                  j:                  k(  r/t        j<                  j?                  |      }
|
t@        kD  r||
z  n|}|||<   t        j                  | j(                  |   d      | j(                  |<   || j                  |<    | jB                  j                         D ]  \  }}|j!                  |      }t        |      |k  r:|t        |      z
  dz   }tE        |      D ]  }|j	                  tG                       |@tG               }|||<   t        j                  | j(                  |   d      | j(                  |<   nG|||<   | jI                  ||       t        j                  | j(                  |   d      | j(                  |<   || jB                  |<    | jJ                  j                         D ]  \  }}|j!                  |      }t        |      |k  rE|t        |      z
  dz   }tE        |      D ]&  }|j	                  t        j*                  g              ( |Jt        j*                  g       ||<   t        j                  | j(                  |   d      | j(                  |<   nt        j*                  |t        j,                        }t        j.                  |      j1                         rJ d       | j3                  |      }	|	j4                  t6        j8                  j:                  k(  rWt        j<                  j?                  |d      d d t        jL                  f   }|t        jN                  |d	k7  |t@              z  }|||<   t        j                  | j(                  |   d      | j(                  |<   || jJ                  |<    y )
Nz)Payload and ids_inv must be the same sizer   r  r   r`   ru  r  r  rH  )(r   ru   r   rv   r   rn   r   r   rh   rp   r   r   rq   r   rc   rg   r   r%  resizer   rt   r   rk   rv  r   r   r&  r   r   rw  rx  ry  rz  rf   rK  r=   r   rm   rJ  r{  )rz   r   r   rc   r   r   r   fake_vector	vector_npr}   ry  diffr  r  s                 rX   
_add_pointzLocalCollection._add_point	  s   $((m 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   c                    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      |j                  | j$                  v r| j'                  |       n| 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: rL   zbWrong input: Unnamed vectors are not allowed when a collection has named vectors or multivectors: z, z+Wrong input: Not existing vector name error)r   r   r  uuidUUIDr   r   r   rg   rs   r   r?   r>   updaterq   rc   rr   rm   ru   r  r  rx   persist)	rz   r   _uuideupdated_sparse_vectorsr   r   vector_namesmultivector_namess	            rX   _upsert_pointzLocalCollection._upsert_pointz	  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88txxu%OOE"<<#LL  ' $C  T 9UXXJ6J!KLRSSTs   G	 		G1G,,G1rB  c                     t        |t              r|D ]  }| j                  |        nt        |t        j                        r|}t        |j
                  t              rt        |j
                  i}n|j
                  }t        |j                        D ]o  \  }}d }|j                  |j                  |   }|j                         D 	ci c]  \  }}	||	|    }
}}	| j                  t        j                  |||
             q nt        dt        |             t        | j                        | j                  kD  r9t!        d| j                  ddt        | j                         dt"        dd	       y y c c}	}w )
Nr  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   rq   r  r   Batchrc   r   r   ru   r	  rg   PointStructr   r   r   LARGE_DATA_THRESHOLDr   UserWarning)rz   rB  r   batchrc   r   r7  rn   r|   r   r   s              rX   upsertzLocalCollection.upsert	  sZ   fd#""5)  -E%--..>--!*599!5X>>-#nnS1G6=mmoFo74$#,oF""&&# '% "6 1$v,@AAtxx=4444OPTPiPijkOl m77:488}o Fnn %, 5 Gs   
E: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   r`   ru  r  r  rH  )rg   rs   r   rt   r   r   r?   rf   r   r>   r   rh   r   rk   rv  r   r   rc   r&  r   r   rw  rx  ry  rz  rJ  r{  rm   )rz   r   rc   r   r   
old_vector
new_vectorr  r}   ry  r  s              rX   _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 ]g  }|j                   }| j                  |   }|j                  }t        |t              r	t
        |i}n|}| j                  ||       | j                  |       i y r   )r   ru   r   r   rq   r   r  _persist_by_id)rz   rB  r   r7  r   vector_structfixed_vectorss          rX   update_vectorszLocalCollection.update_vectors	  sc    ExxH((8$C!LLM-.!4m D -&&sM:) r   selectorc                     | j                  |      }|D ];  }| j                  |   }|D ]  }d| j                  |   |<    | j                  |       = y r   )_selector_to_idsru   rt   r  )rz   rc   r  ru   r7  r   r   s          rX   delete_vectorszLocalCollection.delete_vectors	  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   )ru   rp   rx   delete)rz   ru   r7  r   s       rX   _delete_idszLocalCollection._delete_ids
  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  ru   rg   )rz   r  r  r7  r   ru   s         rX   _filter_to_idszLocalCollection._filter_to_ids
  sH    11-@-1XX^^-=K-=MHccx-=K
 Ls
   AAc                 `   t        |t              r|S t        |t        j                        r| j	                  |      S t        |t        j
                        r|j                  S t        |t        j                        r| j	                  |j                        S t        dt        |             )NzUnsupported selector type: )r   rq   r   Filterr  PointIdsListrB  FilterSelectorrL  r   r   )rz   r  s     rX   r  z LocalCollection._selector_to_ids
  s     h%O&--0&&x00&"5"56??"&"7"78&&x77:4>:JKLLr   c                 H    | j                  |      }| j                  |       y r   )r  r  )rz   r  ru   s      rX   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  )rx   ru   r   r  r   r  r  )rz   r7  r   r   s       rX   r  zLocalCollection._persist_by_id6
  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)rn   r   rr   )r  r   r   r6   ru   rn   r;   r  )	rz   rn   r  r   ru   jsonable_payloadrr   r7  r   s	            rX   set_payloadzLocalCollection.set_payload@
  s     ##H-#$6w$?@EH__S-AZ^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  ru   r   r   rn   r  )rz   rn   r  ru   r7  r   s         rX   overwrite_payloadz!LocalCollection.overwrite_payloadZ
  sX     ##H-H((8$C ();G)D E KDLL) r   rr   c                     | j                  |      }|D ]Y  }| j                  |   }|D ]2  }|| j                  |   v s| j                  |   j                  |       4 | j	                  |       [ y r   )r  ru   rn   rP  r  )rz   rr   r  ru   r7  r   r   s          rX   delete_payloadzLocalCollection.delete_payloadj
  sn     ##H-H((8$C$,,s++LL%))#.  ) r   c                     | j                  |      }|D ]1  }| j                  |   }i | j                  |<   | j                  |       3 y r   )r  ru   rn   r  )rz   r  ru   r7  r   s        rX   clear_payloadzLocalCollection.clear_payload|
  sH     ##H-H((8$C "DLL) r   update_operationsc                    |D ]k  }t        |t        j                        rt        |j                  t        j                        r&| j                  |j                  j
                         ht        |j                  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*                  |       ot        |t        j,                        r| j/                  |j.                         t        |t        j0                        r'| j3                  |j2                  j                         t        |t        j4                        rV|j6                  j                  xs |j6                  j                  }| j7                  |j6                  j8                  |       Wt        dt        |              y )NzUnsupported upsert type: zUnsupported update operation: )r   r   UpsertOperationr  PointsBatchr  
PointsListrB  r   r   DeleteOperationr  SetPayloadOperationr  rL  rn   r   OverwritePayloadOperationr  DeletePayloadOperationr  rr   ClearPayloadOperationr  UpdateVectorsOperationr  DeleteVectorsOperationr  r   )rz   r  	update_oppoints_selectors       rX   batch_update_pointsz#LocalCollection.batch_update_points
  s|    +I)V%;%;<i..0B0BCKK	 0 0 6 67	 0 0&2C2CDKK	 0 0 7 78$'@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##I$<$<$C$CDIv'D'DE,,33Vy7O7O7V7V   ##I$<$<$C$C_U #A$y/AR!STTG +r   
new_configc                 p    || j                   vrt        d| d      || j                  j                   |<   y )Nr   z! does not exist in the collection)rf   r   r\   )rz   r   r  s      rX   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 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             S )Nr   r   )rc   shard_numberreplication_factorwrite_consistency_factoron_disk_payloadrf      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)statusoptimizer_statusvectors_countindexed_vectors_countpoints_countsegments_countpayload_schemar\   )r   CollectionInfoCollectionStatusGREENOptimizersStatusOneOfOKr   CollectionConfigCollectionParamsr\   rc   r  r  r  r  rf   
HnswConfig	WalConfigOptimizersConfigr   s    rX   infozLocalCollection.info
  s   $$**00#99<<"#++**.. KK//!%!9!9'+{{'E'E-1[[-Q-Q$(KK$?$?#';;#=#= #--!$(-
 "++$&'( "(!8!8&)-1+,','(-." %)5$
 $	
r   )NF)rN   N)rL   )T)TT)Fr   )NrK  NTFN)	NNNrK  r   TFNN)NNNTF)NNNNNFFN)NNNNrK     TFNNN)NrK  r   TFNNN)NrK  )TF)NNNNNNN)NNNrK  r   TFNNNNN)NNNrK  r   NTFNNNNNN)Nr  rK  N)NNNNNN)NNNrK  r   TFNNNN)NrK  NNTF)NrK  NTF)NrK  TF)__name__
__module____qualname____doc__r  r   CreateCollectionr   r  ro   r~   staticmethodr   r   r   rb   r   r   r   r   classmethodr   r0  r   r   ry   r	   rq   r   r   r   r   rC   r*   
NumpyArrayr   r   r   r   r   r   r   r   PayloadSelectorr   Payloadr   VectorStructr  r  rh   r   r  r  r   r9  QueryPrefetchrF  rI  rC  rD  rE  r  DocumentImageInferenceObjectWithLookupInterfacer  r  Vectorr"   rD   r+   r  r  r  r  rW  r  r(  r  r  r  r  r  rt  r  r  r  r  r  r   r  r  r   r@   r.   r  r  rv  r  r,  rn  r"  r   r  r   r|  Mmrrq  rC  rX  rY  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   rX   rZ   rZ   _   s    "
 #'05	0''0 3-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\ 1K#tE{"#e#tDK(()###''(#(()#''(
1  
U#%68H%JZJZZ[[
!1 1f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  KO)) D(3-1F1FFG) 
$	) )\ KO 	QQ D(3-1F1FFGQ 	Q
 
&..	!Q JO!!&+D(3-,E&F!	&%%	&!L &* / c] 
	4 c4i 2 04 $JN38+/-hK#tE{"#e#tDK(()###''(#(()#''(
h" u||,#h$ %h& 'h( D(3-1F1FFG)h* D(3-/0+h, "%-h. 
f  	!/hX (,37/3JN38+/#79$79 4/079 u||,	79
 79 79 D(3-1F1FFG79 D(3-/079 "%79 }79 79 
		79r$%.. $T%:K:K5L $X  $/3+/JN38Bd5,,-.B {{B 	B
 B }B u||,B "%B D(3-1F1FFGB D(3-/0B 
e	 BL (,#/3# $JO38+/w$w }w u||,	w
 }w w D(3-1F1FFGw D(3-/0w "%w 
e	 wN #FJ/3JN38+/;?>B1Y9Y9 MMKeKKNNKK!!	
Y9 }Y9  U^^(<dBC!Y9" u||,#Y9$ %Y9& 'Y9( D(3-1F1FFG)Y9* D(3-/0+Y9, "%-Y9. e778/Y90 !)): ;1Y92 
		3Y9d 15KO38+/;?>B=R9UOeMM#"$$	&	 ###
R9, -R9. v}}-/R90 1R92 3R94 D(3-1G1GGH5R96 D(3-/07R98 "%9R9: e778;R9< !)): ;=R9> 
		?R9n 04	1.1. u||,1. 	1.
 
		1.l KO38	emm$ D(3-1F1FFG D(3-/0	
 
fmm	8 <@;?6:/3#>B15_
8F$6$678_
 8F$6$678_
 5223	_

 u||,_
 }_
 !)): ;_
 "*#_
 
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		  	  <@;?/3#>B156:R18F$6$678R1 8F$6$678R1 u||,	R1
 }R1 !)): ;R1 "*#R1 5223R1 
i.&:M:MuO_O__`	
R1l <@;?/3JN38+/#>B156:"
8F$6$678"
 8F$6$678"
 u||,	"

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

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

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

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

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

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

 '"
 D(3-1F1FFG"
 D(3-/0"
 
tELL!8EMM#::	;"
H@(5<<"8 @FDVDV @ 15*.JN38# -#  #  '	# 
 D(3-1F1FFG#  D(3-/0#  
tELL!8EMM#::	;# P 15JN38H--H  -H 	H
 D(3-1F1FFGH D(3-/0H 
tELL!8EMM#::	;H\ KO38!! u||,! D(3-1F1FFG	!
 D(3-/0! 
e	 !X 04 $JN38+/NKe
N YYN }N u||,N N N D(3-1F1FFGN D(3-/0N "%N 
f  	!NBmHV//0mH DKtDK7HHImH 	mH
 mH mH 
f  	!mH^4 ""4  !f&8&8!9:4  	4 
 D(3-1F1FFG4  D(3-/04  
f  	!4 l76#5#5 7$ 7r^; 2 2 ^;t ^;@'(6#5#5 '($ '(R$U8F,>,>#?#MN $SW $L@@!%c5elDQUV[Q\L]1]+^&^!_@	@@
*Xe.@.@%A 
*d 
**#* MM''(!!!
* 
*"	2tEMM2 	2t 	2ELL T&BXBX=Y 
MMM''(!!!
M 
f$$	%M(
MM''(!!!

 

(v'='= ($ (& "** MM''(!!!
* c]* 
*4** MM''(!!!
* 
* *sm* MM''(!!!
* 
*$*MM''(!!!
* 
*'U#E$9$9:'U 
'UR==,2,E,E=	=%
f++ %
r   rZ   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   r  r   rq   r   )r  r  ignore_mentioned_idss      rX   r  r  
  s     =Q!00F}}/C.DE   -'''  (%9$:L!  --t4!!(()=>  &2%:%:<P$QL!r   ru   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   r  r  r   r  r   rq   r   )r  ru   include_idss      rX   r\  r\  
  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   )r   r   r  rn   r   r+  )r   r   r   rn   r   r+  )r  s    rX   ro  ro    s9    99}}&& r   r:  r  c           
          | rt        | j                  t              r9t        j                  || j                  D cg c]  }t        ||       c}      S t        j                  |t                     S y c c}w )N)r  r:  )r   r:  rq   r   r
  r  )r:  r  r   s      rX   r  r    sn    h''.>>LTL]L]^L]q8EBL]^ 
 >>??  _s   A6
)vrR   r   r  collectionsr   r   typingr   r   r   r   r	   r
   copyr   rm  numpyrh   qdrant_clientr   $qdrant_client.common.client_warningsr   qdrant_client._pydantic_compatr   r   rV   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)   #qdrant_client.local.multi_distancesr*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   $qdrant_client.local.json_path_parserr5   r6   qdrant_client.local.order_byr7   #qdrant_client.local.payload_filtersr8   +qdrant_client.local.payload_value_extractorr9   r:   (qdrant_client.local.payload_value_setterr;   qdrant_client.local.persistencer<   qdrant_client.local.sparser=   r>   r?   $qdrant_client.local.sparse_distancesr@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   r   rz  rZ   r  rq   r  r  r\  r  ro  r
  r   r  r   r   rX   <module>r8     s      0     & B _ ; F ; % 1 ` ` T _       O 7 F P E A 
     
V# V# VB*
 B*
JT5<<(9=emm9L
\\05<<(/3EMM/B
\\05<< E4E4E @U^^ @C @ENN @r   