o
    [hA                     @   st   d dl Z ddlmZ ddlmZ ddlmZ G dd deZedd	 d
D Z	edd	 dD Z
G dd deZdS )    N   )inspect)util)	operatorsc                   @   s   e Zd ZdS )UnevaluatableErrorN)__name__
__module____qualname__ r
   r
   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/sqlalchemy/orm/evaluator.pyr      s    r   c                 c       | ]}t t|V  qd S Ngetattrr   .0opr
   r
   r   	<genexpr>   
    
r   )addmulsubdivmodtruedivltlenegtgeeqc                 c   r   r   r   r   r
   r
   r   r   &   r   )	Zlike_opZ
notlike_opZilike_opZnotilike_opZ
between_opZin_opZnotin_opZendswith_opZ	concat_opc                   @   sf   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )EvaluatorCompilerNc                 C   s
   || _ d S r   )
target_cls)selfr"   r
   r
   r   __init__7   s   
zEvaluatorCompiler.__init__c                 C   s0   t | d|j d }|stdt|j ||S )Nzvisit_%szCannot evaluate %s)r   Z__visit_name__r   typer   )r#   clausemethr
   r
   r   process:   s   zEvaluatorCompiler.processc                 C   s   |  |jS r   )r(   elementr#   r&   r
   r
   r   visit_groupingB   s   z EvaluatorCompiler.visit_groupingc                 C      dd S )Nc                 S   s   d S r   r
   objr
   r
   r   <lambda>F       z.EvaluatorCompiler.visit_null.<locals>.<lambda>r
   r*   r
   r
   r   
visit_nullE      zEvaluatorCompiler.visit_nullc                 C   r,   )Nc                 S      dS )NFr
   r-   r
   r
   r   r/   I   r0   z/EvaluatorCompiler.visit_false.<locals>.<lambda>r
   r*   r
   r
   r   visit_falseH   r2   zEvaluatorCompiler.visit_falsec                 C   r,   )Nc                 S   r3   )NTr
   r-   r
   r
   r   r/   L   r0   z.EvaluatorCompiler.visit_true.<locals>.<lambda>r
   r*   r
   r
   r   
visit_trueK   r2   zEvaluatorCompiler.visit_truec                    s   d|j v r"|j d }| jrt| j|jstd|j |j| j}n|j}| jr8|t| jjv r8t	
d|  ntd| t|  fddS )Nparentmapperz2Can't evaluate criteria against alternate class %szEvaluating non-mapped column expression '%s' onto ORM instances; this is a deprecated use case.  Please make use of the actual mapped columns in ORM-evaluated UPDATE / DELETE expressions.zCannot evaluate column: %sc                    s    | S r   r
   r-   Zget_corresponding_attrr
   r   r/   i   s    z0EvaluatorCompiler.visit_column.<locals>.<lambda>)Z_annotationsr"   
issubclassclass_r   Z_columntopropertykeyr   Zcolumn_attrsr   warnoperator
attrgetter)r#   r&   r6   r:   r
   r7   r   visit_columnN   s.   


zEvaluatorCompiler.visit_columnc                    sX   t t| j|j |jtju r fdd}|S |jtju r% fdd}|S td|j )Nc                    s8   d} D ]}|| }|r dS |p|d u }q|rd S dS NFTr
   )r.   Zhas_nullsub_evaluatevalueZ
evaluatorsr
   r   evaluateo   s   z4EvaluatorCompiler.visit_clauselist.<locals>.evaluatec                    s.    D ]}|| }|s|d u r d S  dS qdS r?   r
   )r.   r@   rA   rB   r
   r   rC   |   s   z+Cannot evaluate clauselist with operator %s)	listmapr(   Zclausesr<   r   or_and_r   r#   r&   rC   r
   rB   r   visit_clauselistk   s   z"EvaluatorCompiler.visit_clauselistc                    s   t t| j|j|jg\ |jtju r fdd}|S tju r- fdd}|S t	v r; fdd}|S t
dt|j|jf )Nc                    s    | | kS r   r
   r-   	eval_left
eval_rightr
   r   rC         z0EvaluatorCompiler.visit_binary.<locals>.evaluatec                    s    | | kS r   r
   r-   rJ   r
   r   rC      rM   c                    s6    | }| }|d u s|d u rd S  | | S r   r
   )r.   Zleft_valZ	right_valrK   rL   r<   r
   r   rC      s
   #Cannot evaluate %s with operator %s)rD   rE   r(   leftrightr<   r   is_Zisnot_straight_opsr   r%   r   rH   r
   rN   r   visit_binary   s$   

zEvaluatorCompiler.visit_binaryc                    s@   |  |j |jtju r fdd}|S tdt|j|jf )Nc                    s    | }|d u r
d S | S r   r
   )r.   rA   Z
eval_innerr
   r   rC      s   z/EvaluatorCompiler.visit_unary.<locals>.evaluaterO   )r(   r)   r<   r   invr   r%   r   rH   r
   rU   r   visit_unary   s   zEvaluatorCompiler.visit_unaryc                    s"   |j r|   n|j  fddS )Nc                    s    S r   r
   r-   valr
   r   r/      r0   z3EvaluatorCompiler.visit_bindparam.<locals>.<lambda>)callablerA   r*   r
   rX   r   visit_bindparam   s   
z!EvaluatorCompiler.visit_bindparamr   )r   r   r	   r$   r(   r+   r1   r4   r5   r>   rI   rT   rW   r[   r
   r
   r
   r   r!   6   s    
!r!   )r<    r   r   sqlr   	Exceptionr   setrS   Z_notimplemented_opsobjectr!   r
   r
   r
   r   <module>   s   