Ë
    lQêj/  ã                   ó6  — d dl 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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mZmZ d d
lmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ d dl%m&Z& d dl'Z'd dl(m)Z)m*Z*m+Z+ d dl,Z,d dl-Z. e,j^                  e0«      Z1dZ2 G d„ de«      Z3y)é    )Ú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            
       ó¢  ‡ — e Zd ZU eed<   eed<   ee   ed<   ee   ed<   eed<   eed<   ee	j                     ed<   ee   ed<   eed	<   eed
<   eed<   eeef   ed<   eeef   ed<   eeef   ed<   eed<   dedefd„Zeededee   fd„«       «       Z edej4                  «      ed2ˆ fd„«       «       Z edej4                  «      ed2ˆ fd„«       «       Z edej4                  «      e	 d3dedeee      dee   fd„«       «       Z  edej4                  «      ed e!deee"      fd!„«       «       Z#edefd"„«       Z$ededefd#„«       Z% ed$ej4                  «      d%eddfd&„«       Z& ed'ej4                  «      d(ed)eddfd*„«       Z' ed+ej4                  «      d,e(ddfd-„«       Z) ed.ej4                  «      d/ee*   ddfd0„«       Z+ed2d1„«       Z,ˆ xZ-S )4Ú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                 ó¢  — |j                  t        «      | _        |d   | _        |d   | _        d | _        |j                  | _        t        |d   xs i «      | _	        d | _
        d | _        d| _        | j                  j                  «       | _        i | _        i | _        i | _        t%        «       | _        |j)                  t*        «      | _        y )NÚidÚ
collectionÚmetadatar   )Úinstancer   r%   r$   r&   r'   Úsettingsr(   r   r)   r*   r+   r,   Ú	min_seqidr-   r1   r/   r0   r   r.   Úrequirer   r2   )Úselfr3   r4   s      úl/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/chromadb/segment/impl/vector/local_hnsw.pyÚ__init__zLocalHnswSegment.__init__=   s²   € ØŸ™¬Ó2ˆŒØ˜4‘=ˆŒØ" <Ñ0ˆÔØ!ˆÔØŸ™ˆŒÜ! '¨*Ñ"5Ò";¸Ó<ˆŒàˆŒØ#ˆÔØ%&ˆÔ"ØŸ>™>×3Ñ3Ó5ˆÔàˆÔØˆÔØˆÔä"“_ˆŒ
Ø$*§N¡NÔ3FÓ$GˆÕ!ó    r8   Úreturnc                 ó0   — t        j                  | «      }|S ©N)r   Úextract)r8   Úsegment_metadatas     r>   Úpropagate_collection_metadataz.LocalHnswSegment.propagate_collection_metadataQ   s   € ô &×-Ñ-¨hÓ7ÐØÐr@   zLocalHnswSegment.startNc                 óÊ   •— t         ‰| �  «        | j                  rH| j                  «       }| j                  j                  | j                  | j                  |¬«      | _        y y )N)Ústart)ÚsuperrH   r&   Ú	max_seqidr%   Ú	subscribeÚ_write_recordsr'   )r=   Úseq_idÚ	__class__s     €r>   rH   zLocalHnswSegment.startX   sW   ø€ ô 	‰‰ŒØ×ÒØ—^‘^Ó%ˆFØ!%§¡×!9Ñ!9Ø× Ñ  $×"5Ñ"5¸Vð ":ó "ˆDÕð r@   zLocalHnswSegment.stopc                 ó†   •— t         ‰| �  «        | j                  r&| j                  j	                  | j                  «       y y rC   )rI   Ústopr'   r%   Úunsubscribe)r=   rN   s    €r>   rP   zLocalHnswSegment.stopb   s4   ø€ ô 	‰‰ŒØ×ÒØ�N‰N×&Ñ& t×'9Ñ'9Õ:ð r@   zLocalHnswSegment.get_vectorsÚrequest_version_contextÚidsc                 óÞ  — |€$t        | j                  j                  «       «      }n6g }|D ]/  }|| j                  v sŒ|j	                  | j                  |   «       Œ1 g }| j
                  �‚t        t        t           t        j                  | j
                  j                  |«      «      «      }t        ||«      D ]0  \  }}| j                  |   }|j	                  t        ||¬«      «       Œ2 |S )N)r6   Ú	embedding)Úlistr0   Úkeysr/   Úappendr*   r	   r   r   ÚnpÚarrayÚ	get_itemsÚzipr   )	r=   rR   rS   Úlabelsr6   ÚresultsÚvectorsÚlabelÚvectors	            r>   Úget_vectorszLocalHnswSegment.get_vectorsi   sá   € ð ˆ;Ü˜$×+Ñ+×0Ñ0Ó2Ó3‰FàˆFØò 9�Ø˜×*Ñ*Ò*Ø—M‘M $×"3Ñ"3°BÑ"7Õ8ð9ð ˆØ�;‰;Ð"ÜÜœÑ ¤"§(¡(¨4¯;©;×+@Ñ+@ÀÓ+HÓ"IóˆGô "% V¨WÓ!5ò O‘��vØ×&Ñ& uÑ-�Ø—‘Ô4¸ÀfÔMÕNðOð ˆr@   zLocalHnswSegment.query_vectorsÚqueryc           
      ó4  ‡— | j                   €%t        t        |d   «      «      D �cg c]  }g ‘Œ c}S |d   }t        | j                  «      }||kD  r t        j                  d|› d|› d|› �«       |}t        «       Š|d   }|�E|D �ch c]   }|| j                  v sŒ| j                  |   ’Œ" c}Št        ‰«      |k  rt        ‰«      }dt        dt        fˆfd	„}|d   }t        | j                  «      5  | j                   j                  t        j                  |t        j                  ¬
«      ||r|nd ¬«      \  }	}
g }t        t        |	«      «      D ]£  }g }t        |	|   |
|   «      D ]y  \  }}| j                   |   }|d   r3t        j                  | j                   j#                  |g«      d   «      }nd }|j%                  t'        ||j)                  «       |¬«      «       Œ{ |j%                  |«       Œ¥ |cd d d «       S c c}w c c}w # 1 sw Y   y xY w)Nr_   ÚkzNumber of requested results z- is greater than number of elements in index z, updating n_results = Úallowed_idsr`   rA   c                 ó   •— | ‰v S rC   © )r`   r]   s    €r>   Úfilter_functionz7LocalHnswSegment.query_vectors.<locals>.filter_functionœ   s   ø€ Ø˜F�?Ð"r@   )Údtype)re   ÚfilterÚinclude_embeddingsr   )r6   ÚdistancerU   )r*   ÚrangeÚlenr/   ÚloggerÚwarningÚsetÚintÚboolr    r.   Ú	knn_queryrY   rZ   Úfloat32r\   r0   r[   rX   r   Úitem)r=   rc   Ú_re   ÚsizerS   r6   ri   Úquery_vectorsÚresult_labelsÚ	distancesÚall_resultsÚresult_ir^   r`   rm   rU   r]   s                    @r>   rz   zLocalHnswSegment.query_vectors„   s3  ø€ ð
 �;‰;ÐÜ %¤c¨%°	Ñ*:Ó&;Ó <Ö=˜1’BÒ=Ð=à�#‰JˆÜ�4×$Ñ$Ó%ˆàˆtŠ8Ü�N‰NØ.¨q¨cÐ1^Ð_cÐ^dÐd{ð  }Að  |Bð  Côð ˆAä›5ˆØ�MÑ"ˆØˆ?Ø69ÖU°¸RÀ4×CTÑCTÒ=T�d×'Ñ'¨Ó+ÒUˆFÜ�6‹{˜QŠÜ˜“K�ð	#¤3ð 	#¬4õ 	#ð ˜iÑ(ˆä˜Ÿ
™
Ó#ñ !	Ø'+§{¡{×'<Ñ'<Ü—‘˜¬b¯j©jÔ9ØÙ*-‘°4ð (=ó (Ñ$ˆM˜9ð :<ˆKÜ!¤# mÓ"4Ó5ò ,�Ø35�Ü'*Ø! (Ñ+¨Y°xÑ-@ó(ò ‘O�E˜8ð ×*Ñ*¨5Ñ1�BØÐ1Ò2Ü$&§H¡HØ ŸK™K×1Ñ1°5°'Ó:¸1Ñ=ó%™	ð %)˜	Ø—N‘NÜ)Ø!Ø%-§]¡]£_Ø&/ôõðð" ×"Ñ" 7Õ+ð',ð* ÷C!	ñ !	ùò/ >ùò V÷!	ð !	ús   §	HÂH	ÂH	Ã4DHÈHc                 ó   — | j                   S rC   )r-   ©r=   s    r>   rJ   zLocalHnswSegment.max_seqidÄ   s   € à×ÑÐr@   c                 ó,   — t        | j                  «      S rC   )ro   r/   )r=   rR   s     r>   ÚcountzLocalHnswSegment.countÈ   s   € ä�4×$Ñ$Ó%Ð%r@   zLocalHnswSegment._init_indexÚdimensionalityc                 óŠ  — t        j                  | j                  j                  |¬«      }|j	                  t
        | j                  j                  | j                  j                  ¬«       |j                  | j                  j                  «       |j                  | j                  j                  «       || _        || _        y )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_indexzLocalHnswSegment._init_indexÌ   s�   € ô —‘Ø—,‘,×$Ñ$¨.ô
ˆð 	×ÑÜ)Ø ŸL™L×8Ñ8Ø�l‰l�n‰nð 	ô 	
ð
 	�‰�T—\‘\×+Ñ+Ô,Ø×Ñ˜dŸl™l×6Ñ6Ô7àˆŒØ-ˆÕr@   zLocalHnswSegment._ensure_indexÚnr†   c                 óÒ  — | j                   s|| _        | j                  |«       n/|| j                  k7  r t        d|› d�d| j                  › d�z   «      ‚t	        t
        j                  | j                   «      }| j                  |z   |j                  «       kD  rOt        | j                  |z   | j                  j                  z  «      }|j                  t        |t        «      «       yy)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_elementsrs   r)   Úresize_factorÚresize_indexÚmaxr�   )r=   r•   r†   r“   Únew_sizes        r>   Ú_ensure_indexzLocalHnswSegment._ensure_indexÞ   sÙ   € ð �{Š{Ø#&ˆDÔ Ø×Ñ˜SÕ!à�d×*Ñ*Ò*Ü/Ø)¨#¨Ð.DÐEØ(¨×)=Ñ)=Ð(>¸aÐ@ñAóð ô
 ”W—]‘] D§K¡KÓ0ˆà×&Ñ&¨Ñ*¨e×.DÑ.DÓ.FÒFÜØ×+Ñ+¨aÑ/°4·<±<×3MÑ3MÑMóˆHð ×Ñœs 8Ô-=Ó>Õ?ð	 Gr@   zLocalHnswSegment._apply_batchÚbatchc                 óL  — |j                  «       }|j                  «       }|j                  |«      }dgt        |«      z  }t        |«      dkD  r˜t	        t
        j                  | j                  «      }t        t        |«      «      D ]]  }||   }|| j                  vrŒ| j                  |   }	|j                  |	«       | j                  |= | j                  |	= | j                  |= Œ_ t        |«      dkD  �r/| j                  |j                  t        |d   «      «       | j                  dz   }
t        t        |«      «      D ]3  }||   | j                  vr|
||<   |
dz  }
Œ| j                  ||      ||<   Œ5 t	        t
        j                  | j                  «      }|j!                  ||«       t#        |«      D ]J  \  }}|j%                  |«      d   | j                  |<   ||   | j                  |<   || j                  ||   <   ŒL | xj                  |j                  z  c_        yy)z4Apply a batch of changes, as atomically as possible.r   é   Ú
log_offsetN)Úget_deleted_idsÚget_written_idsÚget_written_vectorsro   r	   rŠ   r‹   r*   rn   r/   Úmark_deletedr0   r1   r�   Ú	add_countr,   Ú	add_itemsÚ	enumerateÚ
get_record)r=   rž   Údeleted_idsÚwritten_idsÚvectors_to_writeÚlabels_to_writer“   Úir6   r`   Ú
next_labels              r>   Ú_apply_batchzLocalHnswSegment._apply_batchó   s  € ð ×+Ñ+Ó-ˆØ×+Ñ+Ó-ˆØ ×4Ñ4°[ÓAÐØ˜#¤Ð$4Ó 5Ñ5ˆäˆ{Ó˜aÒÜœŸ™¨¯©Ó4ˆEÜœ3˜{Ó+Ó,ò 
+�Ø  ‘^�à˜T×.Ñ.Ñ.ØØ×)Ñ)¨"Ñ-�à×"Ñ" 5Ô)Ø×%Ñ% bÐ)Ø×%Ñ% eÐ,Ø×&Ñ& rÑ*ð
+ô ˆ{Ó˜aÓØ×Ñ˜uŸ™´Ð4DÀQÑ4GÓ0HÔIà×3Ñ3°aÑ7ˆJÜœ3˜{Ó+Ó,ò K�Ø˜q‘>¨×):Ñ):Ñ:Ø)3�O AÑ&Ø !‘O‘Jà)-×):Ñ):¸;Àq¹>Ñ)J�O AÒ&ðKô œŸ™¨¯©Ó4ˆEð �O‰OÐ,¨oÔ>ô # ;Ó/ò ;‘��2Ø).×)9Ñ)9¸"Ó)=¸lÑ)K�×"Ñ" 2Ñ&Ø(7¸Ñ(:�×!Ñ! "Ñ%Ø8:�×!Ñ! /°!Ñ"4Ò5ð;ð ×&Ò&¨%¯/©/Ñ9Ö&ð/  r@   zLocalHnswSegment._write_recordsÚrecordsc                 óX  — | j                   st        d«      ‚t        | j                  «      5  t	        «       }|D �]H  }t        | j                  |d   «      | _        |d   d   }|d   d   }| j                  j                  |d«      }|t        j                  k(  r-|r|j                  |«       Œut        j                  d|› �«       ŒŽ|t        j                  k(  r<|d   d   €Œª|�|j                  |«       Œ¾t        j                  d	|d   d   › �«       ŒÝ|t        j                  k(  r0|s|j                  |d
«       �Œt        j                  d|› �«       �Œ |t        j                   k(  s�Œ5|j                  ||du«       �ŒK | j#                  |«       ddd«       y# 1 sw Y   yxY w)z&Add a batch of embeddings to the indexz*Cannot add embeddings to stopped componentr¡   Úrecordr6   Ú	operationNz$Delete of nonexisting embedding ID: rU   z$Update of nonexisting embedding ID: FzAdd of existing embedding ID: )Ú_runningÚRuntimeErrorr!   r.   r   r›   r-   r/   Úgetr   ÚDELETEÚapplyrp   rq   ÚUPDATEÚADDÚUPSERTr°   )r=   r±   rž   r³   r6   Úopr`   s          r>   rL   zLocalHnswSegment._write_records"  s‡  € ð �}Š}ÜÐKÓLÐLô ˜Ÿ™Ó$ñ 	%Ü“GˆEà!ó ;�Ü#& t×'7Ñ'7¸ÀÑ9MÓ#N�Ô Ø˜HÑ% dÑ+�Ø˜HÑ% kÑ2�Ø×)Ñ)×-Ñ-¨b°$Ó7�àœ×)Ñ)Ò)ÙØŸ™ FÕ+äŸ™Ð)MÈbÈTÐ'RÕSàœ9×+Ñ+Ò+Ø˜hÑ'¨Ñ4Ñ@Ø Ð,Ø!ŸK™K¨Õ/ä"ŸN™NØ"FÀvÈhÑGWÐX\ÑG]ÐF^Ð _õð œ9Ÿ=™=Ò(Ù ØŸ™ F¨EÖ2äŸ™Ð)GÈÀtÐ'LÖMØœ9×+Ñ+Ô+Ø—K‘K ¨°TÐ(9Ö:ð5;ð8 ×Ñ˜eÔ$÷?	%÷ 	%ñ 	%ús   ­B6F Ã$B	F Å/(F Æ F)c                 ó   — t        «       ‚rC   )ÚNotImplementedErrorr€   s    r>   ÚdeletezLocalHnswSegment.deleteJ  s   € ä!Ó#Ð#r@   )rA   NrC   ).Ú__name__Ú
__module__Ú__qualname__r
   Ú__annotations__r   r   r   r   rŠ   r‹   rs   r   r   r   Ústrr   r   r   r?   Ústaticmethodr   r   rF   r   r   ÚALLrH   rP   r   r   r   rb   r   r   rz   rJ   r‚   r”   r�   r   r°   r   rL   rÀ   Ú__classcell__)rN   s   @r>   r#   r#   %   sú  ø… Ø	ƒIØÓØ˜$‘ÓØ˜D‘>Ó!ØÓØÓà�W—]‘]Ñ#Ó#Ø˜c‘]Ó"ØÓØÓàÓà�s˜C�x‘.Ó Ø�s˜C�x‘.Ó ð ˜˜U˜
Ñ#Ó#à-Ó-ðH˜vð H°ó Hð( Øð °ð  ¸XÀhÑ=Oò  ó ó ð ñ
 Ð*Ð,D×,HÑ,HÓIØôó ó Jðñ Ð)Ð+C×+GÑ+GÓHØô;ó ó Ið;ñ
 Ð0Ð2J×2NÑ2NÓOØð (,ñà!6ðð �h˜s‘mÑ$ðð 
Ð'Ñ	(ò	ó ó Pðñ2 Ð2Ð4L×4PÑ4PÓQØð<Ø ð<à	�(Ð,Ñ-Ñ	.ò<ó ó Rð<ð| ð ˜5ò  ó ð ð ð&Ð-Bð &Àsò &ó ð&ñ Ð0Ð2J×2NÑ2NÓOð.¨#ð .°$ò .ó Pð.ñ" Ð2Ð4L×4PÑ4PÓQð@˜sð @¨ð @°ò @ó Rð@ñ( Ð1Ð3K×3OÑ3OÓPð,: %ð ,:¨Dò ,:ó Qð,:ñ\ Ð3Ð5M×5QÑ5QÓRð%% h¨yÑ&9ð %%¸dò %%ó Sð%%ðN ò$ó ô$r@   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ÚnumpyrY   Ú	getLoggerrÁ   rp   r�   r#   rh   r@   r>   ú<module>rØ      ss   ðÝ ß <× <Ý Ý )Ý $ß ,Ý 4Ý ?÷ñ ÷
÷ ÷ õ 6Û ß QÑ QÛ Û à	ˆ×	Ñ	˜8Ó	$€àÐ ôg$�|õ g$r@   