
    D_i                    &   S r SSKJr  SSKJrJr  SSKJr  SSKJ	r	J
r
  SSKJr  \	(       a  SSKJr   " S S	\5      rSS
 jr " S S\5      r " S S\\5      r " S S\\5      r " S S\\5      r " S S\5      r " S S\5      r " S S\5      rg)z7Internal representation of a structured query language.    )annotations)ABCabstractmethod)Enum)TYPE_CHECKINGAny)	BaseModel)Sequencec                      \ rS rSr% SrSrS\S'    SrS\S'    SS jr\	SS	 j5       r
\	SS
 j5       r\	SS j5       rSrg)Visitor   z=Defines interface for IR translation using a visitor pattern.NzSequence[Comparator] | Noneallowed_comparatorszSequence[Operator] | Noneallowed_operatorsc                @   [        U[        5      (       a9  U R                  b,  XR                  ;  a  SU SU R                   3n[        U5      e[        U[        5      (       a;  U R
                  b-  XR
                  ;  a  SU SU R
                   3n[        U5      eg g g )NzReceived disallowed operator z. Allowed comparators are zReceived disallowed comparator )
isinstanceOperatorr   
ValueError
Comparatorr   )selffuncmsgs      Y/home/james-whalen/.local/lib/python3.13/site-packages/langchain_core/structured_query.py_validate_funcVisitor._validate_func   s    tX&&&&2222 0v 6##'#9#9":<  S/!tZ((((4444 2$ 8##'#;#;"<>  S/! 5 5 )    c                    g)zFTranslate an Operation.

Args:
    operation: Operation to translate.
N )r   	operations     r   visit_operationVisitor.visit_operation-       r   c                    g)zHTranslate a Comparison.

Args:
    comparison: Comparison to translate.
Nr   )r   
comparisons     r   visit_comparisonVisitor.visit_comparison5   r!   r   c                    g)zXTranslate a StructuredQuery.

Args:
    structured_query: StructuredQuery to translate.
Nr   )r   structured_querys     r   visit_structured_queryVisitor.visit_structured_query=   r!   r   r   )r   zOperator | ComparatorreturnNone)r   	Operationr*   r   )r#   
Comparisonr*   r   )r'   StructuredQueryr*   r   )__name__
__module____qualname____firstlineno____doc__r   __annotations__r   r   r   r   r$   r(   __static_attributes__r   r   r   r   r      sd    G7;4;.3707,",      r   r   c                    Sn[        U 5       HJ  u  p#UR                  5       (       a  US:w  a  USUR                  5       -   -  nM8  XR                  5       -  nML     U$ )zConvert a name into snake_case. r   _)	enumerateisupperlower)name
snake_caseichars       r   _to_snake_caser@   F   sS    JT?<<>>a1f#

,,J**,&J	 #
 r   c                  "    \ rS rSrSrSS jrSrg)ExprQ   zBase class for all expressions.c                f    [        US[        U R                  R                  5       35      " U 5      $ )z[Accept a visitor.

Args:
    visitor: visitor to accept.

Returns:
    result of visiting.
visit_)getattrr@   	__class__r/   )r   visitors     r   acceptExpr.acceptT   s2     w&8O8O)P(Q RS
 	
r   r   N)rH   r   r*   r   )r/   r0   r1   r2   r3   rI   r5   r   r   r   rB   rB   Q   s
    )
r   rB   c                  $    \ rS rSrSrSrSrSrSrg)r   b   zEnumerator of the operations.andornotr   N)	r/   r0   r1   r2   r3   ANDORNOTr5   r   r   r   r   r   b   s    '
C	B
Cr   r   c                  @    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrg)r   j   z'Enumerator of the comparison operators.eqnegtgteltltecontainlikeinninr   N)r/   r0   r1   r2   r3   EQNEGTGTELTLTECONTAINLIKEINNINr5   r   r   r   r   r   j   s7    1	B	B	B
C	B
CGD	B
Cr   r   c                      \ rS rSrSrSrg)FilterDirectivey   zFiltering expression.r   N)r/   r0   r1   r2   r3   r5   r   r   r   rj   rj   y   s    r   rj   c                  j   ^  \ rS rSr% SrS\S'    S\S'    S\S'              SU 4S	 jjrS
rU =r$ )r-   }   zComparison to a value.r   
comparatorstr	attributer   valuec                ,   > [         TU ]  " SXUS.UD6  g)zCreate a Comparison.

Args:
    comparator: The comparator to use.
    attribute: The attribute to compare.
    value: The value to compare to.
)rn   rp   rq   Nr   super__init__)r   rn   rp   rq   kwargsrG   s        r   ru   Comparison.__init__   s$     	 	
!e	
GM	
r   r   )
rn   r   rp   ro   rq   r   rv   r   r*   r+   	r/   r0   r1   r2   r3   r4   ru   r5   __classcell__rG   s   @r   r-   r-   }   sQ      N#J"
$
14
=@
LO
	
 
r   r-   c                  Z   ^  \ rS rSr% SrS\S'    S\S'            S	U 4S jjrSrU =r$ )
r,      z(Logical operation over other directives.r   operatorlist[FilterDirective]	argumentsc                *   > [         TU ]  " SXS.UD6  g)zmCreate an Operation.

Args:
    operator: The operator to use.
    arguments: The arguments to the operator.
)r}   r   Nr   rs   )r   r}   r   rv   rG   s       r   ru   Operation.__init__   s     	J(J6Jr   r   )r}   r   r   r~   rv   r   r*   r+   rx   rz   s   @r   r,   r,      sH    2$$(
K 
K-B
KNQ
K	
K 
Kr   r,   c                  n   ^  \ rS rSr% SrS\S'    S\S'    S\S'     S         SU 4S	 jjjrS
rU =r$ )r.      zStructured query.ro   queryFilterDirective | Nonefilter
int | Nonelimitc                ,   > [         TU ]  " SXUS.UD6  g)zCreate a StructuredQuery.

Args:
    query: The query string.
    filter: The filtering expression.
    limit: The limit on the number of results.
)r   r   r   Nr   rs   )r   r   r   r   rv   rG   s        r   ru   StructuredQuery.__init__   s     	Ku5KFKr   r   )N)
r   ro   r   r   r   r   rv   r   r*   r+   rx   rz   s   @r   r.   r.      sf    J"") !	LL 'L 	L
 L 
L Lr   r.   N)r<   ro   r*   ro   )r3   
__future__r   abcr   r   enumr   typingr   r   pydanticr	   collections.abcr
   r   r@   rB   ro   r   r   rj   r-   r,   r.   r   r   r   <module>r      s    = " #  % (4c 4n
9 
"sD d  dC  
 
4K K*Ld Lr   