
    Zi`                     &   d dl mZmZ d dlmZ d dlmZ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 d dlmZ d d	lmZmZmZ d
ee         dee         fdZd
ee         dee         fdZd
ee         dee         fdZ G d de          ZdS )    )OptionalSequence)	overrides)	GetResultMetadataQueryResult)System)Executor)	CountPlanGetPlanKNNPlan)MetadataReaderVectorReader)LocalSegmentManager)
CollectionVectorQueryVectorQueryResultmetadatareturnc                     | sdS i }|                                  D ]\  }}|                    d          s|||<    t          |          dk    rdS |S )z[Remove any chroma-specific metadata keys that the client shouldn't see from a metadata map.Nzchroma:r   )items
startswithlen)r   resultkvs       ^/root/projects/butler/venv/lib64/python3.11/site-packages/chromadb/execution/executor/local.py_clean_metadatar      sj     tF    1||I&& 	F1I
6{{atM    c                 <    | rd| v rt          | d                   S dS )z2Retrieve the document (if any) from a Metadata mapzchroma:documentNstrr   s    r   _docr$      s0      0%118-.///4r   c                 <    | rd| v rt          | d                   S dS )z-Retrieve the uri (if any) from a Metadata mapz
chroma:uriNr!   r#   s    r   _urir&   #   s.      +LH,,8L)***4r   c                        e Zd ZU eed<   def fdZedede	fd            Z
ededefd            Zededefd            Zd	edefd
Zd	edefdZ xZS )LocalExecutor_managersystemc                     t                                          |           |                     t                    | _        d S N)super__init__requirer   r)   )selfr*   	__class__s     r   r.   zLocalExecutor.__init__.   s3       %899r   planr   c                 z    |                      |j        j                                      |j        j                  S r,   )_metadata_segmentscan
collectioncountversion)r0   r2   s     r   r7   zLocalExecutor.count2   s.    %%di&:;;AA$)BSTTTr   c           	         |                      |j        j                                      |j        j        |j        j        |j        j        |j        j        |j	        j	        |j	        j
        d          }d |D             }d }d }d }d }t                      }|j        j        rt          |          dk    rK|                     |j        j                                      ||j        j                  }	d |	D             }nt                      }|                    d           |j        j        r!d |D             }|                    d	           |j        j        r!d
 |D             }|                    d           |j        j        r!d |D             }|                    d           t+          ||||d ||          S )NTrequest_version_contextwherewhere_documentidslimitoffsetinclude_metadatac                     g | ]
}|d          S id .0rs     r   
<listcomp>z%LocalExecutor.get.<locals>.<listcomp>B   s    (((1qw(((r   r   )r>   r;   c                     g | ]
}|d          S 	embeddingrE   )rG   r   s     r   rI   z%LocalExecutor.get.<locals>.<listcomp>N   s    >>>an>>>r   
embeddingsc                 8    g | ]}t          |d                    S r#   )r$   rF   s     r   rI   z%LocalExecutor.get.<locals>.<listcomp>T   s$    >>>a
m,,>>>r   	documentsc                 8    g | ]}t          |d                    S r#   )r&   rF   s     r   rI   z%LocalExecutor.get.<locals>.<listcomp>X   s$    999AD:''999r   urisc                 8    g | ]}t          |d                    S r#   )r   rF   s     r   rI   z%LocalExecutor.get.<locals>.<listcomp>\   s$    IIIA:77IIIr   	metadatas)r>   rM   rO   rQ   datarS   included)r4   r5   r6   get_metadatar8   filterr<   r=   user_idsr?   r@   list
projectionrL   r   _vector_segmentget_vectorsappenddocumenturir   r   )
r0   r2   recordsr>   rM   rO   rQ   rS   rU   vectorss
             r   getzLocalExecutor.get6   s   (()=>>KK$(I$5+#;5$*":$! L 
 
 )((((
		66?$ 	*7||a..ty/CDDPPTY5F Q   ?>g>>>

!VV
OOL)))?# 	)>>g>>>IOOK(((? 	$99999DOOF###?# 	)IIIIIIOOK((( !
 
 
 	
r   c           
         d }|j         j        s|j         j        s|j         j        rm|                     |j        j                                      |j        j        |j         j        |j         j        |j         j        d dd          }d |D             }g gt          |j
        j                  z  }|t          |          dk    rot          |j
        j        |j
        j        ||j        j        d |j        j                  }|                     |j        j                                      |          }d |D             }d }d }d }	d }
d }t%                      }|j        j        r!d |D             }|                    d           |j        j        r!d	 |D             }|                    d
           |j        j        s|j        j        s|j        j        rt%          t1          d |D                                 }|                     |j        j                                      |j        j        d d |d dd          }d |D             |j        j        r#fd|D             }|                    d           |j        j        r#fd|D             }	|                    d           |j        j        r#fd|D             }
|                    d           t3          ||||	d |
||          S )Nr   Fr:   c                     g | ]
}|d          S rC   rE   rF   s     r   rI   z%LocalExecutor.knn.<locals>.<listcomp>w   s    8881qw888r   )ra   r   allowed_idsinclude_embeddingsoptionsr;   c                 &    g | ]}d  |D             S )c                     g | ]
}|d          S rC   rE   rF   s     r   rI   z0LocalExecutor.knn.<locals>.<listcomp>.<listcomp>   s    (((A$(((r   rE   rG   r   s     r   rI   z%LocalExecutor.knn.<locals>.<listcomp>   s'    <<<V(((((<<<r   c                 &    g | ]}d  |D             S )c                     g | ]
}|d          S rK   rE   rF   s     r   rI   z0LocalExecutor.knn.<locals>.<listcomp>.<listcomp>   s    :::a1[>:::r   rE   rj   s     r   rI   z%LocalExecutor.knn.<locals>.<listcomp>   s'    NNNv::6:::NNNr   rM   c                 &    g | ]}d  |D             S )c                     g | ]
}|d          S )distancerE   rF   s     r   rI   z0LocalExecutor.knn.<locals>.<listcomp>.<listcomp>   s    888A!J-888r   rE   rj   s     r   rI   z%LocalExecutor.knn.<locals>.<listcomp>   s'    LLLV88888LLLr   	distancesc                     g | ]	}|D ]}|
S rE   rE   )rG   r   rD   s      r   rI   z%LocalExecutor.knn.<locals>.<listcomp>   s%    "I"I"I&&"I"IB2"I"I"I"Ir   Tc                 ,    i | ]}|d          |d         S )rD   r   rE   rF   s     r   
<dictcomp>z%LocalExecutor.knn.<locals>.<dictcomp>   s"    OOOagq}OOOr   c                 ,    g | ]}fd |D             S )c                 V    g | ]%}t                              |d                     &S r,   )r$   rb   rG   rD   metadata_by_ids     r   rI   z0LocalExecutor.knn.<locals>.<listcomp>.<listcomp>   1    IIIBT.,,R6677IIIr   rE   rG   r   rw   s     r   rI   z%LocalExecutor.knn.<locals>.<listcomp>   s>        JIII&III  r   rO   c                 ,    g | ]}fd |D             S )c                 V    g | ]%}t                              |d                     &S r,   )r&   rb   rv   s     r   rI   z0LocalExecutor.knn.<locals>.<listcomp>.<listcomp>   rx   r   rE   ry   s     r   rI   z%LocalExecutor.knn.<locals>.<listcomp>   s>        JIII&III  r   rQ   c                 ,    g | ]}fd |D             S )c                 V    g | ]%}t                              |d                     &S r,   )r   rb   rv   s     r   rI   z0LocalExecutor.knn.<locals>.<listcomp>.<listcomp>   s1    TTTr_^%7%7D%A%ABBTTTr   rE   ry   s     r   rI   z%LocalExecutor.knn.<locals>.<listcomp>   s>        UTTTVTTT  r   rS   )r>   rM   rO   rQ   rT   rS   rp   rU   )rW   rX   r<   r=   r4   r5   r6   rV   r8   r   knnrM   r   fetchrZ   rL   r[   query_vectorsrY   r]   rankr^   r   r_   setr   )r0   r2   prefiltered_idsr`   knnsqueryr>   rM   rO   rQ   rS   rp   rU   
merged_idshydrated_recordsrw   s                  @r   r~   zLocalExecutor.knnj   s   ; 
	94;#4 
	98R 
	9,,TY-ABBOO(,	(9k'#{9K(!& P  G 98888O79dSAT=U=U6U
 "c/&:&:Q&>&>+(.+#'?#<(,	(9  E ''	(<==KKERRD<<t<<<
			66?$ 	*NNNNNJOOL)))? 	)LLtLLLIOOK(((?# "	-t'? "	-4?CV "	-c"I"IC"I"I"IJJKKJ#55	$   l(,	(9#!%     PO>NOOON' -   "%  	 ,,," (   "%   '''' -   "%  	 ,,, !	
 	
 	
 		
r   r6   c                 L    | j                             |j        t                    S r,   )r)   get_segmentrD   r   r0   r6   s     r   r4   zLocalExecutor._metadata_segment   s    }((GGGr   c                 L    | j                             |j        t                    S r,   )r)   r   rD   r   r   s     r   r[   zLocalExecutor._vector_segment   s    }((EEEr   )__name__
__module____qualname__r   __annotations__r	   r.   r   r   intr7   r   r   rb   r   r   r~   r   r   r4   r   r[   __classcell__)r1   s   @r   r(   r(   +   s>        !!!!:v : : : : : : U) U U U U YU 1
 1
I 1
 1
 1
 Y1
f \
 \
K \
 \
 \
 Y\
|HJ H> H H H HF* F F F F F F F F Fr   r(   N)typingr   r   r   chromadb.api.typesr   r   r   chromadb.configr	   $chromadb.execution.executor.abstractr
   "chromadb.execution.expression.planr   r   r   chromadb.segmentr   r   #chromadb.segment.impl.manager.localr   chromadb.typesr   r   r   r   r"   r$   r&   r(   rE   r   r   <module>r      s   % % % % % % % %       ? ? ? ? ? ? ? ? ? ? " " " " " " 9 9 9 9 9 9 J J J J J J J J J J 9 9 9 9 9 9 9 9 C C C C C C E E E E E E E E E E
hx0 
Xh5G 
 
 
 
8H% (3-    8H% (3-    bF bF bF bF bFH bF bF bF bF bFr   