
    LKia)                        S SK Jr  S SKJrJrJrJrJrJr  S SK	r	S SK
JrJrJr  S SKrS SK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Jr  S S
KJrJrJrJ r J!r!  S SK"J#r#J$r$J%r%J&r&J'r'  S SK(J)r)J*r*  S SK+r+S SK,J-r-  S SK.J/r/  \+R`                  " 5       S:w  a  S SK1r1O\+R`                  " 5       S:X  a  S SK2r2\Rf                  S\Rh                  S\Rj                  S0r6 " S S\5      r7S\S\ S\S\4S jr8g)    )Lock)SegmentImplementationSegmentManagerMetadataReaderSegmentTypeVectorReaderSN)SegmentLRUCache
BasicCacheSegmentCache)System	get_class)SysDB)override)PersistentLocalHnswSegment)OpenTelemetryClientOpenTelemetryGranularitytrace_method)
Collection	OperationSegmentSegmentScopeMetadata)DictTypeSequenceOptionalcast)UUIDuuid4)LRUCache)get_directory_sizeWindowsz;chromadb.segment.impl.metadata.sqlite.SqliteMetadataSegmentz8chromadb.segment.impl.vector.local_hnsw.LocalHnswSegmentzMchromadb.segment.impl.vector.local_persistent_hnsw.PersistentLocalHnswSegmentc                     ^  \ rS rSr% \\S'   \\S'   \\S'   \\	\
4   \S'   \\	\4   \S'   \R                  r\\S'   \\S'   \\S	'   S
\4U 4S jjr\" S\R*                  5      S\SS4S j5       r\S'U 4S jj5       r\S'U 4S jj5       r\S'U 4S jj5       r\" S\R*                  5      \S\S\\   4S j5       5       r\" S\R*                  5      \S\	S\\	   4S j5       5       rS\	S\4S jr \" S\R*                  5      S\	S\!S\4S j5       r"\" S\R*                  5      S\	S\#\$   S\$4S  j5       r%\" S!\R*                  5      \S\	S"\&SS4S# j5       5       r'S\S\#\
   4S$ jr(S\S\
4S% jr)S&r*U =r+$ )(LocalSegmentManager2   _sysdb_system_opentelemetry_client
_instances#_vector_instances_file_handle_cache_vector_segment_type_lock_max_file_handlessystemc                 F  >^  [         TT ]  U5        T R                  [        5      T l        UT l        UR                  [        5      T l        [        R                  " [        5      T l        0 T l        [        R                  [        5       0T l        UR"                  R$                  S:X  a]  UR"                  R&                  S:  aC  [)        UR"                  R&                  U 4S jU 4S jS9T R                   [        R*                  '   O%[        5       T R                   [        R*                  '   [-        5       T l        T R
                  R"                  R                  S5      (       a  [0        R2                  T l        [6        R8                  " 5       S:w  a-  [:        R<                  " [:        R>                  5      S   T l         O-[B        RD                  RF                  RI                  5       T l         T R@                  [J        RL                  " 5       -  n[O        US S	9T l(        g g )
NLRUr   c                 &   > TR                  U5      $ N)callback_cache_evict)kvselfs     e/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/chromadb/segment/impl/manager/local.py<lambda>.LocalSegmentManager.__init__.<locals>.<lambda>N   s    d&?&?&B    c                 &   > TR                  U 5      $ r3   )_get_segment_disk_size)r5   r7   s    r8   r9   r:   O   s    D$?$?$Br;   )capacitycallback	size_funcis_persistentr#   c                 "    UR                  5       $ r3   )close_persistent_index)_r6   s     r8   r9   r:   d   s    Q5M5M5Or;   )r?   ))super__init__requirer   r'   r(   r   r)   logging	getLogger__name__loggerr*   r   METADATAr   segment_cachesettingschroma_segment_cache_policychroma_memory_limit_bytesr
   VECTORr   r-   r   HNSW_LOCAL_PERSISTEDr,   platformr/   resource	getrlimitRLIMIT_NOFILEr.   ctypeswindllmsvcrt_getmaxstdior   get_file_handle_countr!   r+   )r7   r/   segment_limit	__class__s   `  r8   rF   LocalSegmentManager.__init__>   s    ll5)%+^^4G%H"''1!!:<@
 OO775@99A=6EBBBB7D|223 7AlD|223V
 <<  ((99(3(H(HD% I-)1););H<R<R)STU)V&)/)=)=)J)J)L&&&-CCEF 
 8@(O8D4 :r;   z(LocalSegmentManager.callback_cache_evictsegmentreturnNc                     US   nU R                   R                  SU 35        U R                  U5      nUR                  5         U R                  US   	 g )N
collectionzLRU cache evict collection id)rK   info	_instancestopr*   )r7   r_   collection_idinstances       r8   r4   (LocalSegmentManager.callback_cache_evictg   sO    
  -6}oFG>>'*OOGDM*r;   c                    > U R                   R                  5        H  nUR                  5         M     [        TU ]	  5         g r3   )r*   valuesstartrE   r7   rh   r]   s     r8   rl   LocalSegmentManager.startr   s-    ..0HNN 1r;   c                    > U R                   R                  5        H  nUR                  5         M     [        TU ]	  5         g r3   )r*   rk   rf   rE   rm   s     r8   rf   LocalSegmentManager.stopx   s,    ..0HMMO 1r;   c                   > U R                   R                  5        H#  nUR                  5         UR                  5         M%     0 U l         U R                  [
        R                     R                  5         [        TU ]  5         g r3   )	r*   rk   rf   reset_staterM   r   rQ   resetrE   rm   s     r8   rr   LocalSegmentManager.reset_state~   s`    ..0HMMO  " 1 <../557r;   z7LocalSegmentManager.prepare_segments_for_new_collectionrb   c                     [        U R                  [        R                  U5      n[        [        R
                  [        R                  U5      nX#/$ r3   )_segmentr,   r   rQ   r   SQLITErL   )r7   rb   vector_segmentmetadata_segments       r8   #prepare_segments_for_new_collection7LocalSegmentManager.prepare_segments_for_new_collection   sL     "%%|':':J
 $ 5 5z
 11r;   z#LocalSegmentManager.delete_segmentsrg   c                    U R                   R                  US9nU GH=  nUS   U R                  ;   a  US   [        R                  R
                  :X  a'  U R                  U[        5      nUR                  5         OGUS   [        R                  R
                  :X  a&  U R                  U[        5      nUR                  5         U R                  US   	 US   [        R                  L a,  U R                  [        R                     R                  U5        US   [        R                  L d  GM  U R                  [        R                     R                  U5        GM@     U Vs/ s H  oUS   PM	     sn$ s  snf )N)rb   rc   typescope)r'   get_segmentsr*   r   rR   valueget_segmentr   deleterw   r   r   rQ   rM   poprL   )r7   rg   segmentsr_   rh   ss         r8   delete_segments#LocalSegmentManager.delete_segments   s-    ;;++}+EGt}/6?k&F&F&L&LL#//|LHOO%V_(:(:(@(@@#//~NHOO%OOGDM2w<#6#66""<#6#67;;MJw<#8#88""<#8#89==mL   "**A$***s   "E3c           	      ,   U R                   R                  U[        R                  S9n[	        U5      S:X  a  g[        [        R                  R                  U R                  R                  R                  S5      [        US   S   5      5      5      nU$ )Nrb   r~   r   persist_directoryrc   )r'   r   r   rQ   lenr"   ospathjoinr(   rN   rG   str)r7   rg   r   sizes       r8   r=   *LocalSegmentManager._get_segment_disk_size   s    ;;++$L,?,? , 
 x=A!GGLL%%--.ABHQK%&
 r;   z&LocalSegmentManager._get_segment_sysdbr~   c                    ^ U R                   R                  XS9n[        [        R	                  5        Vs/ s H  oDR
                  PM     sn5      m[        [        U4S jU5      5      nU$ s  snf )Nr   c                    > U S   T;   $ Nr}    )r   known_typess    r8   r9   8LocalSegmentManager._get_segment_sysdb.<locals>.<lambda>   s    &	[(@r;   )r'   r   setSEGMENT_TYPE_IMPLSkeysr   nextfilter)r7   rg   r~   r   r5   r_   r   s         @r8   _get_segment_sysdb&LocalSegmentManager._get_segment_sysdb   s`    
 ;;++}+R,>,C,C,EF,Eq77,EFGv@(KL Gs   A-zLocalSegmentManager.get_segmentr}   c                    U[         :X  a  [        R                  nO)U[        :X  a  [        R                  nO[        SU 35      eU R                  U   R                  U5      nUc/  U R                  X5      nU R                  U   R                  X5        U R                     U R                  U5      nS S S 5        [        [        W5      $ ! , (       d  f       N= f)NzInvalid segment type: )r   r   rL   r   rQ   
ValueErrorrM   getr   r   r-   re   r   r	   )r7   rg   r}   r~   r_   rh   s         r8   r   LocalSegmentManager.get_segment   s    
 >! ))E\! ''E5dV<==$$U+//>?--mCGu%))-A ZZ~~g.H Ax   Zs   !C
Cz'LocalSegmentManager.hint_use_collection	hint_typec                 2   [         [        4 H  nU R                  X5      nU[        :X  d  M   U R                  R                  R                  S5      (       d  ML  [        [        U5      nUR                  5         U R                  R                  X5        M     g )NrA   )r   r   r   r(   rN   rG   r   r   open_persistent_indexr+   r   )r7   rg   r   r}   rh   s        r8   hint_use_collection'LocalSegmentManager.hint_use_collection   st     $\2D''<H |#(=(=(E(Eo(V(V :HE..088<<]U 3r;   c                 P    [         [        US   5         n[        U[        5      nU$ r   )r   r   r   r   )r7   r_   	classnameclss       r8   _clsLocalSegmentManager._cls   s'    &{76?'CD		#89
r;   c                     US   U R                   ;  aE  U R                  U5      nU" U R                  U5      nUR                  5         X0R                   US   '   U R                   US      $ )Nrc   )r*   r   r(   rl   )r7   r_   r   rh   s       r8   re   LocalSegmentManager._instance   s]    4=/))G$C4<<1HNN-5OOGDM*wt}--r;   )
r*   r-   r.   r)   r'   r(   r+   r,   rK   rM   )r`   N),rJ   
__module____qualname____firstlineno__r   __annotations__r   r   r   r   r   r!   r   r   HNSW_LOCAL_MEMORYr,   r   intrF   r   r   OPERATION_AND_SEGMENTr   r4   r   rl   rf   rr   r   r   rz   r   r=   r   r   r   r	   r   r   r   r   re   __static_attributes____classcell__)r]   s   @r8   r%   r%   2   s`   MO..T0011)1((*  )4(E(E+EK'v 'R 2 66+G + +	+  
  
   A 66 	2$	2	'		2 	
	2 - 66 +T +htn + 	
+"D S  0 66 \ g 	 ) 66! !T!W ! !	!& 1 66 V V) VPT V 	
VG -B(C 
. .-B . .r;   r%   r}   r~   rb   r`   c           	          [        [        U    [        5      nUR                  nSnU(       a  UR	                  U5      n[        [        5       U R                  UUR                  U0 S9$ )zRCreate a metadata dict, propagating metadata correctly for the given segment type.N)rc   r}   r~   rb   metadata
file_paths)	r   r   r   r   propagate_collection_metadatar   r    r   rc   )r}   r~   rb   r   collection_metadatar   s         r8   rv   rv      sc    
&t,.C
DC$--#'H445HI7ZZ== r;   )9	threadingr   chromadb.segmentr   r   r   r   r   r	   rH   )chromadb.segment.impl.manager.cache.cacher
   r   r   r   chromadb.configr   r   chromadb.db.systemr   	overridesr   2chromadb.segment.impl.vector.local_persistent_hnswr    chromadb.telemetry.opentelemetryr   r   r   chromadb.typesr   r   r   r   r   typingr   r   r   r   r   uuidr   r    rS   chromadb.utils.lru_cacher!   chromadb.utils.directoryr"   r/   rT   rW   rw   r   rR   r   r%   rv   r   r;   r8   <module>r      s       
 
 - $  
 R Q 7 7   - 7 ??	!__)# U!!#]$$&u I.. I.X; |  PW r;   