
    Ng                         d Z ddlmZmZ ddlmZmZmZmZm	Z	m
Z
 ej        dej        dej        dej        dej        dej        d	ej        d
iZej        gZdeeeef         dedefdZ G d de
          ZdS )zELogic for converting internal query language to a valid Milvus query.    )TupleUnion)
Comparator
Comparison	OperationOperatorStructuredQueryVisitorz==>z>=<z<=inlikevalue
comparatorreturnc                 ~    t          | t                    r|t          j        u rd|  dS d|  dS t          |           S )a  Convert a value to a string and add double quotes if it is a string.

    It required for comparators involving strings.

    Args:
        value: The value to convert.
        comparator: The comparator.

    Returns:
        The converted value as a string.
    "z%")
isinstancestrr   LIKE)r   r   s     i/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/query_constructors/milvus.pyprocess_valuer      sQ     % 
(( !u===   u<<< 5zz    c                       e Zd ZdZ	 ej        ej        ej        gZ	 e	j
        e	j        e	j        e	j        e	j        e	j        e	j        gZdeee	f         defdZdedefdZdedefdZd	edeeef         fd
ZdS )MilvusTranslatorzCTranslate Milvus internal query language elements to valid filters.funcr   c                     |                      |           |j        }t          |t                    rt          |         }| S )N)_validate_funcr   r   r   COMPARATOR_TO_BER)selfr   r   s      r   _format_funczMilvusTranslator._format_funcF   sA    D!!!
dJ'' 	,%d+Ezr   	operationc                     |j         t          v r[t          |j                  dk    rC                     |j                   }|dz   |j        d                                        z   dz   S |j         t          v rt          d|j         j         d           fd|j        D             }                     |j                   }dd|z   dz                       |          z   dz   S )	N   (r   )r   z&" can have only one argument in Milvusc                 :    g | ]}|                               S  )accept).0argr    s     r   
<listcomp>z4MilvusTranslator.visit_operation.<locals>.<listcomp>V   s%    DDDCJJt$$DDDr    )	operatorUNARY_OPERATORSlen	argumentsr!   r)   
ValueErrorr   join)r    r"   r.   argss   `   r   visit_operationz MilvusTranslator.visit_operationM   s    00S9L5M5MQR5R5R(();<<Hc>I$7$:$A$A$$G$GG#MM?22TI&,TTT   EDDD	0CDDDD(();<<H#.3.44T:::S@@r   
comparisonc                     |                      |j                  }t          |j        |j                  }|j        }d|z   dz   |z   dz   |z   dz   S )Nz( r-   z ))r!   r   r   r   	attribute)r    r6   r   processed_valuer8   s        r   visit_comparisonz!MilvusTranslator.visit_comparisonZ   sY    &&z'<==
'
(8*:OPP(	i#%
2S8?JTQQr   structured_queryc                 `    |j         i }nd|j                             |           i}|j        |fS )Nexpr)filterr)   query)r    r;   kwargss      r   visit_structured_queryz'MilvusTranslator.visit_structured_querya   s>     "*FF.5<<TBBCF%v--r   N)__name__
__module____qualname____doc__r   ANDNOTORallowed_operatorsr   EQGTGTELTLTEINr   allowed_comparatorsr   r   r!   r   r5   r   r:   r	   r   dictrA   r(   r   r   r   r   5   s       MM.!x|X[A0x';!<     A As A A A AR: R# R R R R. /.	sDy	. . . . . .r   r   N)rE   typingr   r   langchain_core.structured_queryr   r   r   r   r	   r
   rJ   rK   rL   rM   rN   rO   r   r   rG   r/   intfloatr   r   r   r(   r   r   <module>rV      s!   K K                        M4M3NDM3NDM4OV  <.sE3/ Z C    43. 3. 3. 3. 3.w 3. 3. 3. 3. 3.r   