
    uiVm                     ,   d dl 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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 d d
l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*m+Z+m,Z, d dl-m.Z. d dl/m0Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8Z8d dl9Z9 e9j:        e;          Z< G d de          Z=de#de>fdZ?de>de#fdZ@dee&ee'e&f         eee	e&         f         f         de+de3fdZAdee&e	e&         f         dee'ef         de+de3fdZBdS )    )	OptionalSequenceAnyTuplecast	GeneratorUnionDictList)MetadataReader)Consumer)System)SegmentInclusionExclusionOperator)SqliteDB)override)CursorParameterValueget_sql)OpenTelemetryClientOpenTelemetryGranularitytrace_method)	WhereWhereDocumentMetadataEmbeddingRecord	LogRecordSeqId	OperationUpdateMetadataLiteralValueWhereOperator)UUID)TableTables)QueryBuilderN)	Criterion)groupby)reducec                   P   e Zd ZU eed<   eed<   eed<   eed<   ee         ed<   ee         ed<   de	de
fd	Z ed
ej                  ed<d                        Z edej                  ed<d                        Z edej                  edefd                        Z edej                  edefd                        Z edej                  e	 	 	 	 	 d=dee         dee         deee                  dee         dee         dee         fd                        Zdededeeddf         fdZ edej                  dee e!d f                  defd!            Z" ed"ej                  ded#e#d$e$ddfd%            Z% ed&ej                  ded'ed(e&ddfd)            Z' ed*ej                  ded'ed(e&ddfd+            Z( ed,ej                  ded#e#ddfd-            Z) ed.ej                  ded#e#ddfd/            Z* ed0ej                  d1ee#         ddfd2            Z+ ed3ej                  deded4e,d5e,de-f
d6            Z. ed7ej                  deded4e,d8e,d5e,de-fd9            Z/ ed:ej                  ed<d;                        Z0dS )>SqliteMetadataSegment	_consumer_db_id_opentelemetry_client_collection_id_subscriptionsystemsegmentc                     |                     t                    | _        |                     t                    | _        |d         | _        |                    t                    | _        |d         | _	        d S )Nid
collection)
instancer   r,   r   r+   r-   requirer   r.   r/   )selfr1   r2   s      X/var/www/icac/venv/lib/python3.11/site-packages/chromadb/segment/impl/metadata/sqlite.py__init__zSqliteMetadataSegment.__init__3   s[    ??8,,224=%+^^4G%H%H"%l3    zSqliteMetadataSegment.startreturnNc                     | j         rB|                                 }| j                            | j         | j        |          | _        d S d S )N)collection_id
consume_fnstart)r/   	max_seqidr+   	subscribe_write_metadatar0   )r8   seq_ids     r9   r@   zSqliteMetadataSegment.start:   s\      	^^%%F!%!9!9"1/ ": " "D	 	r;   zSqliteMetadataSegment.stopc                 V    | j         r!| j                            | j                    d S d S N)r0   r+   unsubscribe)r8   s    r9   stopzSqliteMetadataSegment.stopE   s8      	;N&&t'9:::::	; 	;r;   zSqliteMetadataSegment.max_seqidc                    t          d          }| j                                                            |                              |j                                      |j        t          | j        	                    | j
                            k              }t          |          \  }}| j                                        5 }|                    ||                                          }|%| j                                        cd d d            S t#          |d                   cd d d            S # 1 swxY w Y   d S )N
max_seq_idr   )r#   r,   querybuilderfrom_selectrD   where
segment_idr   
uuid_to_dbr-   r   txexecutefetchoner+   	min_seqid_decode_seq_id)r8   tqsqlparamscurresults          r9   rA   zSqliteMetadataSegment.max_seqidK   s_    ,H!!##U1XXVAHU1<>$(2E2Edh2O2O#P#PPQQ	 	
 ajjVX[[]] 	1c[[f--6688F~~//11		1 	1 	1 	1 	1 	1 	1 	1 &fQi00	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   AD6D66D:=D:zSqliteMetadataSegment.countc                 h   t          d          }| j                                                            |                              |j        t          | j                            | j                            k              	                    t          j        |j                            }t          |          \  }}| j                                        5 }|                    ||                                          d         }t#          t$          |          cd d d            S # 1 swxY w Y   d S )N
embeddingsr   )r#   r,   rK   rL   rN   rO   r   rP   r-   rM   fnCountr4   r   rQ   rR   rS   r   int)r8   embeddings_trW   rX   rY   rZ   r[   s          r9   countzSqliteMetadataSegment.count^   s6    \**H!!##U<  U'>$(:M:Mdh:W:W+X+XX  VBH\_--.. 	
 ajjVX[[]] 	%c[[f--6688;FV$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   AD''D+.D+z"SqliteMetadataSegment.get_metadatarN   where_documentidslimitoffsetc           
         t          ddd          \  }}}|pd}|pd}|dk     rt          d          | j                                                            |                              |                              |j        |j        k                                  |j        |j	        |j
        |j        |j        |j        |j        |j                                      |j	                  }	||| j                                                            |                              |j                                      |                              |j        |j        k                                  |j	                                      |j        t)          | j                            | j                            k                                              }
|r+|
                    |                     |
|||                    }
|r,|
                    |                     |
||||                    }
|:|
                    |j	                            t)          |                              }
|
                    |          }
|
                    |          }
|	                    |j                            |
                    }	n1| j                                                            |                              |j                                      |j        t)          | j                            | j                            k                                  |j	                                      |                              |          }|:|                    |j	                            t)          |                              }|	                    |j                            |                    }	| j                                        5 }t=          |                     ||	                    cddd           S # 1 swxY w Y   dS )zQuery for embedding metadata.r]   embedding_metadataembedding_fulltext_searchl    r   zLimit cannot be negativeN) r$   
ValueErrorr,   rK   rL   	left_joinonr4   rM   embedding_idrD   keystring_value	int_valuefloat_value
bool_valueorderbyjoinrN   rO   r   rP   r-   distinct_where_map_criterion_where_doc_criterionisinre   rf   rQ   list_records)r8   rN   rc   rd   re   rf   ra   
metadata_t
fulltext_trW   
metadata_qembeddings_qrZ   s                r9   get_metadataz"SqliteMetadataSegment.get_metadatao   s    06.0K0
 0
,j* "11997888 %%''|$$:&&LOz}455V)#'$&%	 	 W\.//# 	
,  :%%''z""
&&l##LOz}455233 +%dh&9&9$(&C&CDDE     '----"E:|  

  '----"NJ
L  

 '-- -22>#3F3FGG 
 $))%00J#**622J,,Z8899AA %%''|$$(( +%dh&9&9$(&C&CDDE  233u  +11 -22>#3F3FGG    ,,\::;;AX[[]] 	/cc1--..	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   #QQQrZ   rW   c              #      K   t          |          \  }}|                    ||           t          |j        d          }t	          |d           }|D ])\  }}|                     t          |                    V  *dS )zqGiven a cursor and a QueryBuilder, yield a generator of records. Assumes
        cursor returns rows in ID order.Nc                 ,    t          | d                   S )Nr   )r`   )rs    r9   <lambda>z0SqliteMetadataSegment._records.<locals>.<lambda>   s    QqT r;   )r   rR   iterrS   r'   _recordry   )	r8   rZ   rW   rX   rY   cur_iteratorgroup_iterator_groups	            r9   rz   zSqliteMetadataSegment._records   s       ajjVC   CL$// /B/BCC& 	, 	,HAu,,tE{{++++++	, 	,r;   zSqliteMetadataSegment._recordrows.c                     |d         dd         \  }}}i }|D ]=}|dd         \  }}}	}
}||||<   |	|	||<   "|
|
||<   *||dk    rd||<   8d||<   >t          ||pd          S )zUGiven a list of DB rows with the same ID, construct a
        MetadataEmbeddingRecordr   N      TF)r4   metadata)r   )r8   r   r   rm   rD   r   rowrn   ro   rp   rq   rr   s               r9   r   zSqliteMetadataSegment._record   s     #'q'"1"+< 	* 	*CDGGACy+z' ,& )( +'??$(HSMM$)HSM&%
 
 
 	
r;   z$SqliteMetadataSegment._insert_recordrecordupsertc           
      l   t          d          }| j                                                            |                              |j        |j        |j                                      |j        t          | j        
                    | j                            k                                  |j        t          |d         d                   k                                  t          | j        
                    | j                            t          |d         d                   t          t          |d                                       }t          |          \  }}|dz   }	 |                    ||                                          d         }ng# t"          j        $ rU |r&t'          d|                     ||                    cY S t*                              d|d         d                     Y dS w xY w|d         d	         r%|                     |||d         d	                    dS dS )
z2Add or update a single EmbeddingRecord into the DBr]   operation_recordr4   
log_offsetzRETURNING idr   Nz!Insert of existing embedding ID: r   )r#   r,   rK   intocolumnsrO   rm   rD   rN   r   rP   r-   insert_encode_seq_idr   rR   rS   sqlite3IntegrityErrorr   _update_recordloggerwarning_update_metadata)	r8   rZ   r   r   rV   rW   rX   rY   r4   s	            r9   _insert_recordz$SqliteMetadataSegment._insert_record  s    ,H!!##T!WWWQ\1>18<<U1<>$(2E2Edh2O2O#P#PPQQU1>^F;M4Nt4T%U%UUVV
&48..tx88996"45d;<<>&*>??@@
 
 	
 ajjVN"	S&))2244Q7BB% 	 	 	 	D$"5"5c6"B"BCCCCCZ?Q8RSW8XZZ  
 	 $%j1 	S!!#r62D+Ej+QRRRRR	S 	Ss   +.F 5G>)G>=G>z&SqliteMetadataSegment._update_metadatar4   r   c                     t          d          }d |                                D             }|r| j                                                            |                              |j        t          |          k                                  |j        	                    t          |                              
                                }t          |          \  }}|                    ||           |                     |||           dS )z0Update the metadata for a single EmbeddingRecordrh   c                     g | ]	\  }}||
S rF    ).0kvs      r9   
<listcomp>z:SqliteMetadataSegment._update_metadata.<locals>.<listcomp>,  s    AAA41aqyQyyyr;   N)r#   itemsr,   rK   rL   rN   r4   r   rn   rx   deleter   rR   _insert_metadata)	r8   rZ   r4   r   rV   	to_deleterW   rX   rY   s	            r9   r   z&SqliteMetadataSegment._update_metadata&  s    
 &''AA8>>#3#3AAA	 		%%%''qqt~b11122quzz.";";<<==  "!**KCKKV$$$c2x00000r;   z&SqliteMetadataSegment._insert_metadatac                    
 t          d          
 j                                                            
                              
j        
j        
j        
j        
j	        
j
                  }                                D ]b\  }}t          |t                    rB|                    t                    t          |          t          |          ddd          }]t          |t                     rB|                    t                    t          |          dddt          |                    }t          |t"                    rC|                    t                    t          |          dt          |          dd          }t          |t$                    rA|                    t                    t          |          ddt          |          d          }dt'          |          \  }}|                    dd          }|r                    ||           dv rt          d          
d	 
fd}		  |	             dS # t,          j        $ r  j                                                            
                              
j        t                    k                                              }t'          |          \  }}                    ||            |	             Y dS w xY wdS )
z@Insert or update each metadata row for a single embedding recordrh   NINSERTINSERT OR REPLACEchroma:documentri   r<   c                  T   j                                                                                           j        j                                      t                    t          d                             } t          |           \  }}	                    ||           d S )Nr   )
r,   rK   r   r   rowidro   r   r   r   rR   )rW   rX   rY   rZ   r4   r   r8   rV   s      r9   insert_into_fulltext_searchzKSqliteMetadataSegment._insert_metadata.<locals>.insert_into_fulltext_search{  s    H))++T!WWWQWan55V&r**&x0A'BCC 	  &ajjVC(((((r;   r<   N)r#   r,   rK   r   r   r4   rn   ro   rp   rq   rr   r   
isinstancestrr   r   boolr`   floatr   replacerR   r   r   rL   rN   r   r   )r8   rZ   r4   r   rW   rn   valuerX   rY   r   rV   s   ````      @r9   r   z&SqliteMetadataSegment._insert_metadata:  s   
 &''H!!##T!WWW  	
 #..** %	 %	JC%%% $HH"2&&"3''"5))  E4(( HH"2&&"3''"5))  E3'' HH"2&&"3''"5))  E5)) HH"2&&"3''"5))  ajjVkk($788 	%KKV$$$((122A) ) ) ) ) ) ) ) ) ).++-----) 	. 	. 	.H))++U1XXU17nR&8&8899VXX	  &ajjVC(((++------	.% )(s   
I B(LLz$SqliteMetadataSegment._delete_recordc                 R   t          d          }t          d          }| j                                                            |                              |j        t          | j                            | j                            k                                  |j	        t          |d         d                   k              
                                }| j                                                            |          
                                                    |j                            | j                                                            |                              |j                                      |j        t          | j                            | j                            k                                  |j	        t          |d         d                   k                                  } |j        t!          |            t!          |          \  }}|dz   }|                    ||                                          }	|	+t$                              d|d         d                     dS |	d         }
t          d	          }| j                                                            |                              |j        t          |
          k              
                                }t!          |          \  }}|                    ||           dS )
z+Delete a single EmbeddingRecord from the DBr]   ri   r   r4    RETURNING idNz$Delete of nonexisting embedding ID: r   rh   )r#   r,   rK   rL   rN   rO   r   rP   r-   rm   r   r   rx   rM   r4   rR   r   rS   r   r   )r8   rZ   r   rV   fts_trW   q_ftsrX   rY   r[   r4   r{   s               r9   _delete_recordz$SqliteMetadataSegment._delete_record  s    ,122H!!##U1XXU1<>$(2E2Edh2O2O#P#PPQQU1>^F;M4Nt4T%U%UUVVVXX 	
 H!!##U5\\VXXU  H))++U1XXVAD\\Utx7J7J487T7T(U(UU  U)&1C*DT*JKKL   	 	& 	WU^^$$ajjVO#S&))2244>NNYv>P7QRV7WYY     B 344J %%''z""z}r(:(::;;	  "!**KCKKV$$$$$r;   z$SqliteMetadataSegment._update_recordc           	      2   t          d          }| j                                                            |                              |j        t          t          |d                                                           |j	        t          | j        
                    | j                            k                                  |j        t          |d         d                   k              }t          |          \  }}|dz   }|                    ||                                          }|+t                               d|d         d                     dS |d         }|d         d	         r%|                     |||d         d	                    dS dS )
z)Update a single EmbeddingRecord in the DBr]   r   r   r4   r   Nz$Update of nonexisting embedding ID: r   r   )r#   r,   rK   updatesetrD   r   r   rN   rO   rP   r-   rm   r   rR   rS   r   r   r   )	r8   rZ   r   rV   rW   rX   rY   r[   r4   s	            r9   r   z$SqliteMetadataSegment._update_record  sw    ,H!!##VAYYS>.9M*N*NOOPPU1<>$(2E2Edh2O2O#P#PPQQU1>^F;M4Nt4T%U%UUVV 	
 ajjVO#S&))2244>NNYv>P7QRV7WYY     B()*5 W%%c2v6H/I*/UVVVVVW Wr;   z%SqliteMetadataSegment._write_metadatarecordsc                    | j                                         5 }|D ]}| j                                                             t	          d                                        dd                              t          | j                             | j	                            t          t          |d                                       }t          |          \  }}|                    dd          }|                    ||           |d         d         t          j        k    r|                     ||d	           !|d         d         t          j        k    r|                     ||d
           V|d         d         t          j        k    r|                     ||           |d         d         t          j        k    r|                     ||           	 ddd           dS # 1 swxY w Y   dS )zWrite embedding metadata to the database. Care should be taken to ensure
        records are append-only (that is, that seq-ids should increase monotonically)rJ   rO   rD   r   r   r   r   	operationFTN)r,   rQ   rK   r   r#   r   r   r   rP   r-   r   r   r   rR   r   ADDr   UPSERTDELETEr   UPDATEr   )r8   r   rZ   r   rW   rX   rY   s          r9   rC   z%SqliteMetadataSegment._write_metadata  s	    X[[]] 	5c! 5 5H))++T%--..W\844V&tx':':48'D'DEE&~f\6J'K'KLL 	  &ajjVkk(,?@@C(((,-k:imKK''VU;;;;./<	@PPP''VT::::./<	@PPP''V4444./<	@PPP''V444+5	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   GG))G-0G-z*SqliteMetadataSegment._where_map_criterionr{   ra   c                     g }|                                 D ]\  }}|dk    rT fdt          t          t                   |          D             }|                    t          d |                     `|dk    rT fdt          t          t                   |          D             }|                    t          d |                     t          t          t          t          t          t          f         f         |          }	 j
                                                                                          j                                      j        t#          |          k                                  t%          |	                    }
|                    j                            |
                     t          d |          S )N$andc                 @    g | ]}                     |          S r   rv   r   wra   r{   rW   r8   s     r9   r   z>SqliteMetadataSegment._where_map_criterion.<locals>.<listcomp>  =        --aJMM  r;   c                     | |z  S rF   r   xys     r9   r   z<SqliteMetadataSegment._where_map_criterion.<locals>.<lambda>  
    !a% r;   $orc                 @    g | ]}                     |          S r   r   r   s     r9   r   z>SqliteMetadataSegment._where_map_criterion.<locals>.<listcomp>  r   r;   c                     | |z  S rF   r   r   s     r9   r   z<SqliteMetadataSegment._where_map_criterion.<locals>.<lambda>  r   r;   c                     | |z  S rF   r   r   s     r9   r   z<SqliteMetadataSegment._where_map_criterion.<locals>.<lambda>  
    1q5 r;   )r   r   r   r   appendr(   r	   r    r
   r!   r,   rK   rL   rM   r4   rN   rn   r   _where_clauserx   )r8   rW   rN   r{   ra   clauser   r   criteriaexprsqs   `` ``      r9   rv   z*SqliteMetadataSegment._where_map_criterion  s    #%KKMM 	6 	6DAqF{{      !(5/155   f%7%7BBCCCCe      !(5/155   f%7%7BBCCCCE,]L5P0Q"QRTUVVH))++U:&&VJM**U:>^A->->>??U=z::;;  jm00445555((&111r;   z*SqliteMetadataSegment._where_doc_criterionr|   c                     |                                 D ]\  }}|dk    rC fdt          t          t                   |          D             }t	          d |          c S |dk    rC fdt          t          t                   |          D             }t	          d |          c S |dk    rt          t
          |          }d| d}	 j                                                                      	                    j
                                      j                            t          |	                              }
j                            |
          c S |d	k    rt          t
          |          }d| d}	 j                                                                      	                    j
                                      j                            t          |	                              }
j                            |
          c S t%          d
|           t%          d          )Nr   c           	      B    g | ]}                     |          S r   rw   r   r   ra   r|   r{   rW   r8   s     r9   r   z>SqliteMetadataSegment._where_doc_criterion.<locals>.<listcomp>,  F         --1j*l   r;   c                     | |z  S rF   r   r   s     r9   r   z<SqliteMetadataSegment._where_doc_criterion.<locals>.<lambda>2  
    1q5 r;   r   c           	      B    g | ]}                     |          S r   r   r   s     r9   r   z>SqliteMetadataSegment._where_doc_criterion.<locals>.<listcomp>4  r   r;   c                     | |z  S rF   r   r   s     r9   r   z<SqliteMetadataSegment._where_doc_criterion.<locals>.<lambda>:  r   r;   z	$contains%z$not_containszUnknown where_doc operator zEmpty where_doc)r   r   r   r   r(   r   r,   rK   rL   rM   r   rN   ro   liker   r4   rx   not_likerj   )r8   rW   rN   r{   r|   ra   r   r   r   search_termr   s   `` ```     r9   rw   z*SqliteMetadataSegment._where_doc_criterion  sq    KKMM *	D *	DDAqF{{        "(="91==	   00(;;;;;e        "(="91==	   00(;;;;;k!!aLL&!hhh H))++U:&&VJ,--U:277{8S8STTUU	  "}))"-----o%%aLL&!hhh H))++U:&&VJ,--U"/889T9TUU 	  $++B///// !Bq!B!BCCC*+++r;   zSqliteMetadataSegment.deletec                    t          d          }t          d          }t          d          }| j                                                            |                                                              |j                            | j                                                            |                              |j                                      |j	        t          | j                            | j                            k                                  }| j                                                            |                                                              |j                            | j                                                            |                              |j                                      |j	        t          | j                            | j                            k                                  }| j                                                            |                                                              |j                            | j                                                            |                              |j                                      |j	        t          | j                            | j                            k                                  }| j                                        5 } |j        t!          |             |j        t!          |             |j        t!          |            d d d            d S # 1 swxY w Y   d S )Nr]   rh   ri   )r#   r,   rK   rL   r   rN   r4   rx   rM   rO   r   rP   r-   r   rQ   rR   r   )r8   rV   t1t2q0rW   r   rZ   s           r9   r   zSqliteMetadataSegment.deleteW  s    ,'((.//H!!##U2YYVXXU

H))++U1XXVAD\\Utx7J7J487T7T(U(UU 	 	 		 	  H!!##U1XXVXXU		H))++U1XXVAD\\Utx7J7J487T7T(U(UU 	 	 		 	
  H!!##U2YYVXXUH))++U1XXVAD\\Utx7J7J487T7T(U(UU 	 	 		 	 X[[]] 	%cCK((CK%%CK$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   AM--M14M1r   )NNNNN)1__name__
__module____qualname__r   __annotations__r   r"   r   r   r   r   r:   r   r   ALLr   r@   rH   r   rA   r`   rb   r   r   r   r   r   r   r   r%   r   rz   r   r   r   r   r   r   r   r   r   r   r   rC   r#   r&   rv   rw   r   r   r;   r9   r*   r*   +   s        	MMM	III....TN"""D>!!!4v 4 4 4 4 4 \/1I1MNN   X ON \.0H0LMM; ; ; X NM; \35M5QRR15 1 1 1 X SR1" \/1I1MNN%s % % % X ON% \68P8TUU "&26'+# $g/ g/g/ !/g/ hsm$	g/
 }g/ g/ 
)	*g/ g/ g/ X VUg/R,,*,	*D$6	7, , , , \13K3OPP
HU38_5 
:Q 
 
 
 QP
0 \8:R:VWW!S& !S) !ST !Sd !S !S !S XW!SF \02J2N 1F 1 1~ 1RV 1 1 1 1" \02J2N V.F V. V.~ V.RV V. V. V. V.p \8:R:VWW4%& 4%) 4% 4% 4% 4% XW4%l \8:R:VWWW& W) W W W W XWW, \9;S;WXX5x	': 5t 5 5 5 YX56 \46N6R 22&+29>2NS2	2 2 2 2: \46N6R 3,3, 3, 	3,
 3, 3, 
3, 3, 3, 3,j \02J2NOO4% 4% 4% X PO4% 4% 4%r;   r*   rD   r<   c                     |                                  dk    rt                              | dd          S |                                  dk    rt                              | dd          S t          d|            )z Encode a SeqID into a byte array@      big      zUnsupported SeqID: )
bit_lengthr`   to_bytesrj   )rD   s    r9   r   r     ss    b  ||FAu---						#	#||FB...7v77888r;   seq_id_bytesc                     t          |           dk    rt                              | d          S t          |           dk    rt                              | d          S t          dt          |                      )z Decode a byte array into a SeqIDr   r   r   zUnknown SeqID type with length )lenr`   
from_bytesrj   )r   s    r9   rU   rU     so    
<A~~lE222	\		b	 	 ~~lE222N3|;L;LNNOOOr;   r   tablec                     t          | t          t          t          t          f          r%t          t          t          d          | i|          S t          t          | 
                                                    \  }}t          |||          S )zLGiven a field name, an expression, and a table, construct a Pypika Criterion$eq)r   r   r`   r   r   r   r   r!   nextr   r   _value_criterion)r   r  operatorr   s       r9   r   r     st     $c5$/00 Hd=%88$?GGG 4

--..OHeE8U333r;   r   opc                     t           t                    r
|j        g}nCt           t                    r|dv r
|j        g}n t           t
                    r|dv r
|j        g}nt           t                    r|dv r
|j        g}nt           t                    r|dv r }t          |          dk    rt          d| d          t           d         t                    rW|dk    r'|j                            t          |                    n&|j                            t          |                    g}n%t           d         t                    rW|dk    r'|j                            t          |                    n&|j                            t          |                    g}nt           d         t
                    rW|dk    r'|j                            t          |                    n&|j                            t          |                    g}nAt           d         t                    rU|dk    r'|j                            t          |                    n&|j                            t          |                    g}nt           t                    r|dv r|dk    r'|j                            t                               n&|j                            t                               |dk    r'|j                            t                               n&|j                            t                               g}n|j        |j        g}|dk    r fd|D             }nh|d	k    r fd
|D             }nS|dk    r fd|D             }n>|dk    r fd|D             }n)|dk    r fd|D             }n|dk    r fd|D             }|d	k    rt          d |          S t          d |          S )zmReturn a criterion to compare a value with the appropriate columns given its type
    and the operation type.)r  $ne)$inz$ninr   zEmpty list for z	 operatorr
  r  c                 6    g | ]}|t                    k    S r   r   r   colr   s     r9   r   z$_value_criterion.<locals>.<listcomp>  &    BBBcSN5111BBBr;   r	  c                 6    g | ]}|t                    k    S r   r  r  s     r9   r   z$_value_criterion.<locals>.<listcomp>  r  r;   z$gtc                 6    g | ]}|t                    k    S r   r  r  s     r9   r   z$_value_criterion.<locals>.<listcomp>  &    AAASS>%000AAAr;   z$gtec                 6    g | ]}|t                    k    S r   r  r  s     r9   r   z$_value_criterion.<locals>.<listcomp>  r  r;   z$ltc                 6    g | ]}|t                    k     S r   r  r  s     r9   r   z$_value_criterion.<locals>.<listcomp>  r  r;   z$ltec                 6    g | ]}|t                    k    S r   r  r  s     r9   r   z$_value_criterion.<locals>.<listcomp>  r  r;   c                     | |z  S rF   r   r   s     r9   r   z"_value_criterion.<locals>.<lambda>  r   r;   c                     | |z  S rF   r   r   s     r9   r   z"_value_criterion.<locals>.<lambda>  r   r;   )r   r   ro   r   rr   r`   rp   r   rq   ry   r   rj   rx   r   notinr(   )r   r  r  cols_v	col_exprss   `     r9   r  r    sR    % /4"#	E4	 	  ,4R>%9%9 !	E3		 *4B.$8$8 	E5	!	! (4bN&:&:!"	E4	 	  &4R?%:%:r77a<<<r<<<===eAh$$ 	 ;; "''r(:(:;;;'--nR.@.@AAII
 a$'' 	 ;;  %%nR&8&8999%++N2,>,>??II
 a#&& 	 ;; $$^B%7%7888_**>"+=+=>>II
 a%(( 	 ;; !&&~b'9'9:::&,,^B-?-?@@I
 
E4	 	  
4R?%:%: U{{ O  !6!6777&&~e'<'<==U{{ "">%#8#8999"(()>)>??
		 !23	U{{BBBBTBBB			uBBBBTBBB			uAAAADAAA			vBBBBTBBB			uAAAADAAA			vBBBBTBBB		U{{(()444(()444r;   )Ctypingr   r   r   r   r   r   r	   r
   r   chromadb.segmentr   chromadb.ingestr   chromadb.configr   chromadb.typesr   r   chromadb.db.impl.sqliter   	overridesr   chromadb.db.baser   r   r    chromadb.telemetry.opentelemetryr   r   r   r   r   r   r   r   r   r   r    r!   uuidr"   pypikar#   r$   pypika.queriesr%   pypika.functions	functionsr^   pypika.termsr&   	itertoolsr'   	functoolsr(   r   logging	getLoggerr   r   r*   bytesr   rU   r   r  r   r;   r9   <module>r0     su   U U U U U U U U U U U U U U U U U U U U U U + + + + + + $ $ $ $ $ $ " " " " " " > > > > > > > > , , , , , ,               
         

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                       ' ' ' ' ' '       " " " " " "              		8	$	$b	% b	% b	% b	% b	%N b	% b	% b	%J95 9U 9 9 9 9P P5 P P P P4
]L()'l);;<	>4 4 4 4 4 4&H5tL112H5m778H5 H5 	H5 H5 H5 H5 H5 H5r;   