
    3i/                     6   S SK Jr  S SKJrJrJrJrJrJr  S SK	J
r
  S SKJr  S SKJr  S SKJrJr  S SKJr  S SKJr  S S	KJrJrJr  S S
KJrJrJrJrJrJ r J!r!J"r"J#r#J$r$  S SK%J&r&  S SK'r'S SK(J)r)J*r*J+r+  S SK,r,S SK-r.\,R^                  " \05      r1Sr2 " S S\5      r3g)    )override)OptionalSequenceDictSetListcast)UUID)VectorReader)Consumer)SystemSettings)Batch)
HnswParams)OpenTelemetryClientOpenTelemetryGranularitytrace_method)
	LogRecordRequestVersionContextVectorEmbeddingRecordVectorQueryVectorQueryResultSeqIdSegmentMetadata	OperationVector)InvalidDimensionExceptionN)ReadWriteLock
ReadRWLockWriteRWLocki  c            
         ^  \ rS rSr% \\S'   \\S'   \\   \S'   \\   \S'   \\S'   \	\S'   \\
R                     \S'   \\   \S	'   \\S
'   \\S'   \\S'   \\\4   \S'   \\\4   \S'   \\\4   \S'   \\S'   S\S\4S jr\\S\S\\   4S j5       5       r\" S\R6                  5      \S4U 4S jj5       5       r\" S\R6                  5      \S4U 4S jj5       5       r\" S\R6                  5      \ S5S\S\\\      S\\    4S jj5       5       r!\" S \R6                  5      \S!\"S\\\#      4S" j5       5       r$\S\4S# j5       r%\S\S\4S$ j5       r&\" S%\R6                  5      S&\SS4S' j5       r'\" S(\R6                  5      S)\S*\SS4S+ j5       r(\" S,\R6                  5      S-\)SS4S. j5       r*\" S/\R6                  5      S0\\+   SS4S1 j5       r,\S4S2 j5       r-S3r.U =r/$ )6LocalHnswSegment%   _id	_consumer_collection_subscription	_settings_params_index_dimensionality_total_elements_added_max_seq_id_lock_id_to_label_label_to_id_id_to_seq_id_opentelemtry_clientsystemsegmentc                    UR                  [        5      U l        US   U l        US   U l        S U l        UR                  U l        [        US   =(       d    0 5      U l	        S U l
        S U l        SU l        U R                  R                  5       U l        0 U l        0 U l        0 U l        [%        5       U l        UR)                  [*        5      U l        g )Nid
collectionmetadatar   )instancer   r&   r%   r'   r(   settingsr)   r   r*   r+   r,   r-   	min_seqidr.   r2   r0   r1   r   r/   requirer   r3   )selfr4   r5   s      a/home/james-whalen/.local/lib/python3.13/site-packages/chromadb/segment/impl/vector/local_hnsw.py__init__LocalHnswSegment.__init__=   s    24="<0!!'*"5";<#%&">>335"_
$*NN3F$G!    r9   returnc                 2    [         R                  " U 5      nU$ N)r   extract)r9   segment_metadatas     r?   propagate_collection_metadata.LocalHnswSegment.propagate_collection_metadataQ   s     &--h7rB   zLocalHnswSegment.startNc                    > [         TU ]  5         U R                  (       aE  U R                  5       nU R                  R                  U R                  U R                  US9U l        g g )N)start)superrK   r'   	max_seqidr&   	subscribe_write_recordsr(   )r>   seq_id	__class__s     r?   rK   LocalHnswSegment.startX   sW     	^^%F!%!9!9  $"5"5V ": "D rB   zLocalHnswSegment.stopc                    > [         TU ]  5         U R                  (       a&  U R                  R	                  U R                  5        g g rE   )rL   stopr(   r&   unsubscribe)r>   rQ   s    r?   rT   LocalHnswSegment.stopb   s4     	NN&&t'9'9: rB   zLocalHnswSegment.get_vectorsrequest_version_contextidsc                    Uc$  [        U R                  R                  5       5      nO:/ nU H2  nX@R                  ;   d  M  UR	                  U R                  U   5        M4     / nU R
                  b  [        [        [           [        R                  " U R
                  R                  U5      5      5      n[        X65       H,  u  pxU R                  U   nUR	                  [        XHS95        M.     U$ )N)r7   	embedding)listr1   keysr0   appendr+   r	   r   r   nparray	get_itemszipr   )	r>   rW   rX   labelsr7   resultsvectorslabelvectors	            r?   get_vectorsLocalHnswSegment.get_vectorsi   s     ;$++0023FF***MM$"3"3B"78  ;;" "((4;;+@+@+H"IG "%V!5&&u-4MN "6 rB   zLocalHnswSegment.query_vectorsqueryc                 ^  ^ U R                   c(  [        [        US   5      5       Vs/ s H  n/ PM     sn$ US   n[        U R                  5      nX4:  a   [        R                  SU SU SU 35        Un[        5       mUS   nUbK  U Vs1 s H#  ofU R                  ;   d  M  U R                  U   iM%     snm[        T5      U:  a  [        T5      nS[        S[        4U4S	 jjnUS   n[        U R                  5         U R                   R                  [        R                  " U[        R                  S
9UU(       a  UOS S9u  p/ n[        [        U	5      5       H  n/ n[        X   X   5       H|  u  pU R                   U   nUS   (       a4  [        R                  " U R                   R#                  U/5      S   5      nOS nUR%                  ['        UUR)                  5       US95        M~     UR%                  U5        M     UsS S S 5        $ s  snf s  snf ! , (       d  f       g = f)Nrd   kzNumber of requested results z- is greater than number of elements in index z, updating n_results = allowed_idsre   rC   c                    > U T;   $ rE    )re   rb   s    r?   filter_function7LocalHnswSegment.query_vectors.<locals>.filter_function   s    F?"rB   )dtype)rk   filterinclude_embeddingsr   )r7   distancerZ   )r+   rangelenr0   loggerwarningsetintboolr    r/   	knn_queryr^   r_   float32ra   r1   r`   r]   r   item)r>   ri   _rk   sizerX   r7   ro   query_vectorsresult_labels	distancesall_resultsresult_irc   re   rt   rZ   rb   s                    @r?   r   LocalHnswSegment.query_vectors   s!   
 ;; %c%	*:&; <= <1B <==#J4$$%8NN.qc1^_c^dd{  }A  |B  C A5M"?69Uc4CTCT=T+d''+cUF6{QK	#3 	#4 	# i(

#'+{{'<'<bjj9*-4 (= ($M :<K!#m"4535'*!+Y-@(OE **51B12$&HH KK115':1=%	 %)	NN)!%-]]_&/(" ""7+' 6* C $#/ > V $#s   HH#HD	H
H,c                     U R                   $ rE   )r.   r>   s    r?   rM   LocalHnswSegment.max_seqid   s    rB   c                 ,    [        U R                  5      $ rE   )rv   r0   )r>   rW   s     r?   countLocalHnswSegment.count   s    4$$%%rB   zLocalHnswSegment._init_indexdimensionalityc                 |   [         R                  " U R                  R                  US9nUR	                  [
        U R                  R                  U R                  R                  S9  UR                  U R                  R                  5        UR                  U R                  R                  5        X l        Xl        g )N)spacedim)max_elementsef_constructionM)hnswlibIndexr*   r   
init_indexDEFAULT_CAPACITYconstruction_efr   set_ef	search_efset_num_threadsnum_threadsr+   r,   )r>   r   indexs      r?   _init_indexLocalHnswSegment._init_index   s     ,,$$.
 	) LL88llnn 	 	

 	T\\++,dll667-rB   zLocalHnswSegment._ensure_indexnr   c                    U R                   (       d  X l        U R                  U5        O/X R                  :w  a   [        SU S3SU R                   S3-   5      e[	        [
        R                  U R                   5      nU R                  U-   UR                  5       :  aO  [        U R                  U-   U R                  R                  -  5      nUR                  [        U[        5      5        gg)zCCreate or resize the index as necessary to accomodate N new recordszDimensionality of (z) does not match indexzdimensionality ()N)r+   r,   r   r   r	   r   r   r-   get_max_elementsrz   r*   resize_factorresize_indexmaxr   )r>   r   r   r   new_sizes        r?   _ensure_indexLocalHnswSegment._ensure_index   s     {{#& S!***/)#.DE()=)=(>a@A 
 W]]DKK0&&*e.D.D.FF++a/4<<3M3MMH s8-=>?	 GrB   zLocalHnswSegment._apply_batchbatchc                 R   UR                  5       nUR                  5       nUR                  U5      nS/[        U5      -  n[        U5      S:  a  [	        [
        R                  U R                  5      n[        [        U5      5       H_  nX'   nXR                  ;  a  M  U R                  U   n	UR                  U	5        U R                  U	 U R                  U		 U R                  U	 Ma     [        U5      S:  Ga-  U R                  UR                  [        US   5      5        U R                  S-   n
[        [        U5      5       H3  nX7   U R                  ;  a  XU'   U
S-  n
M   U R                  X7      XW'   M5     [	        [
        R                  U R                  5      nUR!                  XE5        [#        U5       HG  u  pxUR%                  U5      S   U R                  U'   XW   U R                  U'   XR                  XW   '   MI     U =R                  UR                  -  sl        gg)z4Apply a batch of changes, as atomically as possible.r      
log_offsetN)get_deleted_idsget_written_idsget_written_vectorsrv   r	   r   r   r+   ru   r0   mark_deletedr1   r2   r   	add_countr-   	add_items	enumerate
get_record)r>   r   deleted_idswritten_idsvectors_to_writelabels_to_writer   ir7   re   
next_labels              r?   _apply_batchLocalHnswSegment._apply_batch   s    ++-++- 44[A#$4 55{a4E3{+, ^...))"-""5)%%b)%%e,&&r* - {au4DQ4G0HI33a7J3{+,>):)::)3A&!OJ)-):):;>)JO& - 4E OO,> #;/).)9)9")=l)K""2&(7(:!!"%8:!!/"45 0 &&%//9&/  rB   zLocalHnswSegment._write_recordsrecordsc                    U R                   (       d  [        S5      e[        U R                  5         [	        5       nU GH`  n[        U R                  US   5      U l        US   S   nUS   S   nU R                  R                  US5      nU[        R                  :X  a4  U(       a  UR                  U5        M|  [        R                  SU 35        M  U[        R                  :X  aA  US   S   b6  Ub  UR                  U5        M  [        R                  S	US   S    35        M  M  U[        R                  :X  a7  U(       d  UR                  US
5        GM  [        R                  SU 35        GM6  U[        R                   :X  d  GMM  UR                  X6SL5        GMc     U R#                  U5        SSS5        g! , (       d  f       g= f)z&Add a batch of embeddings to the indexz*Cannot add embeddings to stopped componentr   recordr7   	operationNz$Delete of nonexisting embedding ID: rZ   z$Update of nonexisting embedding ID: FzAdd of existing embedding ID: )_runningRuntimeErrorr!   r/   r   r   r.   r0   getr   DELETEapplyrw   rx   UPDATEADDUPSERTr   )r>   r   r   r   r7   opre   s          r?   rO   LocalHnswSegment._write_records"  s}    }}KLL $GE!#&t'7'79M#N H%d+H%k2))--b$7)))F+)MbT'RS9+++h'4@ ,!KK/"NN"FvhGWX\G]F^ _	 A 9==( FE2)Gt'LM9+++KKT(9:5 "8 e$? %$$s   EF>)F>>
Gc                     [        5       erE   )NotImplementedErrorr   s    r?   deleteLocalHnswSegment.deleteJ  s    !##rB   )r'   r&   r,   r%   r0   r2   r+   r1   r/   r.   r3   r*   r)   r(   r-   )rC   NrE   )0__name__
__module____qualname____firstlineno__r
   __annotations__r   r   r   r   r   r   rz   r   r   r   strr   r   r   r@   staticmethodr   r   rH   r   r   ALLrK   rT   r   r   r   rg   r   r   r   rM   r   r   r   r   r   r   rO   r   __static_attributes____classcell__)rQ   s   @r?   r#   r#   %   s   	I$D>!W]]##c]"sCx. sCx.  U
##--Hv H H(    Xh=O     
 *,D,H,HI  J )+C+G+GH;  I;
 02J2N2NO (,!6 hsm$ 
'	(	  P2 24L4P4PQ< <	(,-	.<  R<|  5     &-B &s & & 02J2N2NO.# .$ . P." 24L4P4PQ@s @ @ @ R@( 13K3O3OP,:% ,:D ,: Q,:\ 35M5Q5QR%%hy&9 %%d %% S%%N $ $rB   r#   )4	overridesr   typingr   r   r   r   r   r	   uuidr
   chromadb.segmentr   chromadb.ingestr   chromadb.configr   r   "chromadb.segment.impl.vector.batchr   (chromadb.segment.impl.vector.hnsw_paramsr    chromadb.telemetry.opentelemetryr   r   r   chromadb.typesr   r   r   r   r   r   r   r   r   r   chromadb.errorsr   r   chromadb.utils.read_write_lockr   r    r!   loggingnumpyr^   	getLoggerr   rw   r   r#   rn   rB   r?   <module>r      sq     < <  ) $ , 4 ? 
   6  Q Q  			8	$ g$| g$rB   