
    h1                    Z   d Z ddlmZ ddlmZ ddlmZ ddlm	Z	 ddlm
Z
 ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ  G d dej*                        Z G d dej.                        Z G d dej.                        Z e       Z e       Z G d d      ZddZy)zEvaluation functions used **INTERNALLY** by ORM DML use cases.


This module is **private, for internal use by SQLAlchemy**.

.. versionchanged:: 2.0.4 renamed ``EvaluatorCompiler`` to
   ``_EvaluatorCompiler``.

    )annotations)Type   )exc)LoaderCallableStatus)PassiveFlag   )inspect)and_)	operators)Concatenable)Integer)Numeric)warn_deprecatedc                      e Zd Zy)UnevaluatableErrorN)__name__
__module____qualname__     AD:\EasyAligner\venv\Lib\site-packages\sqlalchemy/orm/evaluator.pyr   r   %   s    r   r   c                      e Zd Zd Zd Zy)	_NoObjectc                     y Nr   selfargkws      r   operatez_NoObject.operate*       r   c                     y r   r   r   s      r   reverse_operatez_NoObject.reverse_operate-   r"   r   Nr   r   r   r!   r$   r   r   r   r   r   )       r   r   c                      e Zd Zd Zd Zy)_ExpiredObjectc                    | S r   r   r   s      r   r!   z_ExpiredObject.operate2       r   c                    | S r   r   r   s      r   r$   z_ExpiredObject.reverse_operate5   r*   r   Nr%   r   r   r   r(   r(   1   r&   r   r(   c                      e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZeZeZeZeZeZeZeZeZeZeZeZ d Z!d Z"d Z#d Z$d Z%d Z&d Z'y)_EvaluatorCompilerNc                    || _         y r   )
target_cls)r   r/   s     r   __init__z_EvaluatorCompiler.__init__>   s	    $r   c                    |rt        |g| }t        | d|j                   d       }|s!t        dt	        |      j
                          ||      S )Nvisit_Cannot evaluate )r   getattr__visit_name__r   typer   )r   clauseclausesmeths       r   processz_EvaluatorCompiler.processA   sa    &+7+Ftvf&;&;%<=tD$"4<#8#8"9:  F|r   c                8    | j                  |j                        S r   )r:   elementr   r7   s     r   visit_groupingz!_EvaluatorCompiler.visit_groupingL   s    ||FNN++r   c                    d S )Nc                     y r   r   objs    r   <lambda>z/_EvaluatorCompiler.visit_null.<locals>.<lambda>P       4r   r   r=   s     r   
visit_nullz_EvaluatorCompiler.visit_nullO       r   c                    d S )Nc                     y)NFr   rA   s    r   rC   z0_EvaluatorCompiler.visit_false.<locals>.<lambda>S   s    5r   r   r=   s     r   visit_falsez_EvaluatorCompiler.visit_falseR   s      r   c                    d S )Nc                     y)NTr   rA   s    r   rC   z/_EvaluatorCompiler.visit_true.<locals>.<lambda>V   rD   r   r   r=   s     r   
visit_truez_EvaluatorCompiler.visit_trueU   rF   r   c                   	 |j                   d   }| j                  r8t	        | j                  |j
                        st        d|j
                         |j                          	 |j                  |   j                  }|j                  |   j                  fd}|S # t        $ r}t        d|       |d }~ww xY w# t        j                  $ r}t        d|       |d }~ww xY w)NparentmapperzCannot evaluate column: z0Can't evaluate criteria against alternate class zCannot evaluate expression: c                    | t         S t        |       }|j                  }j                  ||t        j
                        }|t        j                  u rt        S |S )N)passive)	
_NO_OBJECTr
   dictgetr   PASSIVE_NO_FETCHr   PASSIVE_NO_RESULT_EXPIRED_OBJECT)rB   statedict_valueimpls       r   get_corresponding_attrz?_EvaluatorCompiler.visit_column.<locals>.get_corresponding_attr   s\    {!!CLEJJEHHuk&B&B  E ,>>>&&Lr   )_annotationsKeyErrorr   r/   
issubclassclass__check_configure_columntopropertykeyorm_excUnmappedColumnErrorclass_managerrZ   )r   r7   rN   kerb   errr[   rZ   s          @r   visit_columnz_EvaluatorCompiler.visit_columnX   s   	!..~>L ??:OO\00$
 %##/#6#6"79 
 	%%'	008<<C ))#.33	 &%c  	$*6(3	4 ** 	$.se4	s/   B  'C   	B=)B88B= C'C""C'c                $    | j                  |      S r   visit_clauselistr=   s     r   visit_tuplez_EvaluatorCompiler.visit_tuple       $$V,,r   c                $    | j                  |      S r   rj   r=   s     r   visit_expression_clauselistz._EvaluatorCompiler.visit_expression_clauselist   rm   r   c                $   |j                   D cg c]  }| j                  |       }}dj                  j                  j	                  d       d}t        | |d       }|r ||j                  ||      S t        d|j                         c c}w )Nr2   __clauselist_opz)Cannot evaluate clauselist with operator )r8   r:   operatorr   rstripr4   r   )r   r7   
evaluatorsdispatchr9   s        r   rk   z#_EvaluatorCompiler.visit_clauselist   s    9?Hvdll6*
H V__--44S9:.I 	 tXt,V<<$;FOO;LM  Is   Bc                d   | j                  |j                        }| j                  |j                        }d|j                  j                  j                  d       d}t        | |d       }|r ||j                  |||      S t        dt        |      j                   d|j                         )Nr2   rq   
_binary_opr3    with operator )	r:   leftrightrs   r   rt   r4   r   r6   )r   r7   	eval_left
eval_rightrv   r9   s         r   visit_binaryz_EvaluatorCompiler.visit_binary   s    LL-	\\&,,/
FOO44;;C@ALtXt,JGG$"4<#8#8"9 :"OO,. r   c                    fd}|S )Nc                f    d}D ]&  } ||       }|t         u rt         c S |r y|xs |d u }( |ry yNFTrV   )rB   has_nullsub_evaluaterY   ru   s       r   evaluatez;_EvaluatorCompiler.visit_or_clauselist_op.<locals>.evaluate   sI    H *$S)O+**#4u} !+ r   r   r   rs   ru   r7   r   s     `  r   visit_or_clauselist_opz)_EvaluatorCompiler.visit_or_clauselist_op   s    	 r   c                    fd}|S )Nc                d    D ]*  } ||       }|t         u rt         c S |r||t        u r y  y yr   )rV   rQ   )rB   r   rY   ru   s      r   r   z<_EvaluatorCompiler.visit_and_clauselist_op.<locals>.evaluate   s?     *$S)O+**}(;#  !+ r   r   r   s     `  r   visit_and_clauselist_opz*_EvaluatorCompiler.visit_and_clauselist_op   s    
	 r   c                    fd}|S )Nc                    g }D ]7  } ||       }|t         u rt         c S ||t        u r y |j                  |       9 t        |      S r   )rV   rQ   appendtuple)rB   valuesr   rY   ru   s       r   r   zA_EvaluatorCompiler.visit_comma_op_clauselist_op.<locals>.evaluate   sQ    F *$S)O+**]ez&9e$ !+ = r   r   r   s     `  r   visit_comma_op_clauselist_opz/_EvaluatorCompiler.visit_comma_op_clauselist_op   s    		! r   c                t    |j                   r| j                  ||||      S t        d|j                  d      )NzCustom operator zR can't be evaluated in Python unless it specifies a callable using `.python_impl`.)python_impl_straight_evaluater   opstringr   rs   r|   r}   r7   s        r   visit_custom_op_binary_opz,_EvaluatorCompiler.visit_custom_op_binary_op   sP     **)Z  %"8#4#4"7 8" " r   c                    fd}|S )Nc                Z     |       } |       }|t         u s|t         u rt         S ||k(  S r   r   rB   left_val	right_valr|   r}   s      r   r   z7_EvaluatorCompiler.visit_is_binary_op.<locals>.evaluate   5     ~H"3I?*i?.J&&y((r   r   r   rs   r|   r}   r7   r   s     ``  r   visit_is_binary_opz%_EvaluatorCompiler.visit_is_binary_op       	) r   c                    fd}|S )Nc                Z     |       } |       }|t         u s|t         u rt         S ||k7  S r   r   r   s      r   r   z;_EvaluatorCompiler.visit_is_not_binary_op.<locals>.evaluate   r   r   r   r   s     ``  r   visit_is_not_binary_opz)_EvaluatorCompiler.visit_is_not_binary_op   r   r   c                    fd}|S )Nc                     |       } |       }|t         u s|t         u rt         S ||y   |        |             S r   r   )rB   r   r   r|   r}   rs   s      r   r   z7_EvaluatorCompiler._straight_evaluate.<locals>.evaluate   sM     ~H"3I?*i?.J&&!Y%6IcNJsO<<r   r   r   s    ```  r   r   z%_EvaluatorCompiler._straight_evaluate   s    	= r   c                f   |j                   j                  j                  t        t        fvs,|j
                  j                  j                  t        t        fvrFt        d|j                   d|j                   j                   d|j
                  j                         | j                  ||||      S )NzCannot evaluate math operator "" for datatypes , )	rz   r6   _type_affinityr   r   r{   r   r   r   r   s        r   _straight_evaluate_numeric_onlyz2_EvaluatorCompiler._straight_evaluate_numeric_only  s     ;;**3
 
 \\--gw5GG$1(2C2C1D E#[[--.b1B1B0CE 
 &&xJOOr   c                ,    | j                  d |||      S )Nc                    | t         ur| |v S d S r   rQ   abs     r   rC   z:_EvaluatorCompiler.visit_in_op_binary_op.<locals>.<lambda>(  s    1J#6a@D@r   r   r   s        r   visit_in_op_binary_opz(_EvaluatorCompiler.visit_in_op_binary_op&  s!    &&@	
 	
r   c                ,    | j                  d |||      S )Nc                    | t         ur| |vS d S r   r   r   s     r   rC   z>_EvaluatorCompiler.visit_not_in_op_binary_op.<locals>.<lambda>2  s    q
':!DDr   r   r   s        r   visit_not_in_op_binary_opz,_EvaluatorCompiler.visit_not_in_op_binary_op.  s#     &&D	
 	
r   c                p   t        |j                  j                  j                  t              r.t        |j
                  j                  j                  t              sFt        d|j                   d|j                  j                   d|j
                  j                         | j                  d |||      S )Nz&Cannot evaluate concatenate operator "r   r   c                    | |z   S r   r   r   s     r   rC   z>_EvaluatorCompiler.visit_concat_op_binary_op.<locals>.<lambda>F  s    Qr   )	r^   rz   r6   r   r   r{   r   r   r   r   s        r   visit_concat_op_binary_opz,_EvaluatorCompiler.visit_concat_op_binary_op8  s     KK++\
FLL--<<lK$%%& '#[[--.b1B1B0CE  &&	:v
 	
r   c                ,    | j                  d |||      S )Nc                $    | j                  |      S r   )
startswithr   s     r   rC   zB_EvaluatorCompiler.visit_startswith_op_binary_op.<locals>.<lambda>M  s    ar   r   r   s        r   visit_startswith_op_binary_opz0_EvaluatorCompiler.visit_startswith_op_binary_opI  s      &&()Z
 	
r   c                ,    | j                  d |||      S )Nc                $    | j                  |      S r   )endswithr   s     r   rC   z@_EvaluatorCompiler.visit_endswith_op_binary_op.<locals>.<lambda>T  s    Ar   r   r   s        r   visit_endswith_op_binary_opz._EvaluatorCompiler.visit_endswith_op_binary_opP  s      &&&	:v
 	
r   c                    | j                  |j                        |j                  t        j                  u rfd}|S t        dt        |      j                   d|j                         )Nc                <     |       }|t         u rt         S |y | S r   r   )rB   rY   
eval_inners     r   r   z0_EvaluatorCompiler.visit_unary.<locals>.evaluate[  s*    "3O+**] y r   r3   ry   )r:   r<   rs   r   invr   r6   r   )r   r7   r   r   s      @r   visit_unaryz_EvaluatorCompiler.visit_unaryW  sd    \\&..1
??imm+! O tF|445 6#__-/
 	
r   c                `    |j                   r|j                         n|j                  fdS )Nc                    S r   r   )rB   vals    r   rC   z4_EvaluatorCompiler.visit_bindparam.<locals>.<lambda>n  s    3r   )callablerY   )r   r7   r   s     @r   visit_bindparamz"_EvaluatorCompiler.visit_bindparami  s%    ??//#C,,Cr   r   )(r   r   r   r0   r:   r>   rE   rI   rL   rh   rl   ro   rk   r~   r   r   r   r   r   r   r   r   visit_add_binary_opvisit_mul_binary_opvisit_sub_binary_opvisit_mod_binary_opvisit_truediv_binary_opvisit_lt_binary_opvisit_le_binary_opvisit_ne_binary_opvisit_gt_binary_opvisit_ge_binary_opvisit_eq_binary_opr   r   r   r   r   r   r   r   r   r   r-   r-   =   s    %	, ! 4&l-- P :999=++++++


"


$r   r-   c                Z    | dk(  rt        dd       t        S t        dt        d|       )NEvaluatorCompilerzDirect use of 'EvaluatorCompiler' is not supported, and this name will be removed in a future release.  '_EvaluatorCompiler' is for internal use onlyz2.0zmodule z has no attribute )r   r-   AttributeErrorr   )names    r   __getattr__r   q  s>    ""< 		
 "!wxl2DTHMNNr   N)r   strreturnzType[_EvaluatorCompiler])__doc__
__future__r   typingr    r   rc   baser   r   r
   sqlr   r   sql.sqltypesr   r   r   utilr   InvalidRequestErrorr   ColumnOperatorsr   r(   rQ   rV   r-   r   r   r   r   <module>r      s    #   &      ' " " "	00 		)) Y..  [
 "q qh	
Or   