
    [h                       d dl mZ d dlmZ d dlmZ d dlZd dlmZ d dl	Z	d dl
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 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!  ej"        d          Z#dZ$dZ%d:d#Z&d;d'Z' G d( d)e          Z( G d* d+e(          Z)d, Z* G d- d.e          Z+ G d/ d0e          Z, e,            Z-d1 Z. G d2 d3e          Z/ e/            Z0 ej1        d4          d5             Z2 G d6 d7eej3                  Z4 G d8 d9e4          Z5dS )<    )annotations)dequeN)zip_longest)Any)Callable)Deque)Dict)Iterable)Optional)Set)Tuple)Type   )	operators)HasCacheKey)_TraverseInternalsTypeanon_map)ExternallyTraversible)HasTraversalDispatch)HasTraverseInternals   )util)langhelpers)Selfskip_traverseFTobj1r   obj2kwreturnboolc                    |                     dd          rt                      }nt                      } |j        | |fi |S )Nuse_proxiesF)getColIdentityComparatorStrategyTraversalComparatorStrategycompare)r   r   r   strategys       h/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/sqlalchemy/sql/traversals.pyr'   r'   ,   sM    	vvmU## 1022.008D$--"---    target_hierarchy	Type[Any]Nonec                    t          j        |           D ]x}t          |d          rft          |d          rV|                                 t                              ||j        d           t                              ||j        d           yd S )N_generate_cache_attrs_traverse_internals#_generated_copy_internals_traversal!_generated_get_children_traversal)r   walk_subclasseshasattrr/   _copy_internalsgenerate_dispatchr0   _get_children)r+   clss     r)   _preconfigure_traversalsr9   6   s    #$455  3/00 	W&6
 6
 	 %%'''--'5  
 ++'3   r*   c                      e Zd ZdZdZej        rddZdd
ZddZ	e
d d            Ze
d!d            Ze
d"d            ZddZddZddZd#dZdS )$HasShallowCopyzattribute-wide operations that are useful for classes that use
    __slots__ and therefore can't operate on their attributes in a dictionary.


     otherr   r    r-   c                    d S Nr<   )selfr=   s     r)   !_generated_shallow_copy_traversalz0HasShallowCopy._generated_shallow_copy_traversalS         r*   dDict[str, Any]c                    d S r?   r<   )r@   rC   s     r)   &_generated_shallow_from_dict_traversalz5HasShallowCopy._generated_shallow_from_dict_traversalU   s    3r*   c                    d S r?   r<   r@   s    r)   $_generated_shallow_to_dict_traversalz3HasShallowCopy._generated_shallow_to_dict_traversalY   rB   r*   internal_dispatchr   method_namestrCallable[[Self, Self], None]c                ~    d                     d |D                       }d| d| d}t          j        |i |          S )N
c              3  ,   K   | ]\  }}d | d| V  dS )z
    other.z = self.Nr<   .0attrname_s      r)   	<genexpr>z8HasShallowCopy._generate_shallow_copy.<locals>.<genexpr>a   sJ       
 
! 655855
 
 
 
 
 
r*   def z(self, other):
joinr   _exec_code_in_envr8   rJ   rK   code	meth_texts        r)   _generate_shallow_copyz%HasShallowCopy._generate_shallow_copy[   sc     yy 
 
0
 
 
 
 
 A;@@@@@	,YKHHHr*    Callable[[Self], Dict[str, Any]]c                ~    d                     d |D                       }d| d| d}t          j        |i |          S )Nz,
c              3  ,   K   | ]\  }}d | d| V  dS )z    'z': self.Nr<   rQ   s      r)   rU   z;HasShallowCopy._generate_shallow_to_dict.<locals>.<genexpr>n   sJ       
 
! 1H00h00
 
 
 
 
 
r*   rV   z(self):
    return {z}
rW   rZ   s        r)   _generate_shallow_to_dictz(HasShallowCopy._generate_shallow_to_dicth   sc     zz 
 
0
 
 
 
 
 I;HHdHHH	,YKHHHr*   &Callable[[Self, Dict[str, Any]], None]c                ~    d                     d |D                       }d| d| d}t          j        |i |          S )NrO   c              3  .   K   | ]\  }}d | d| dV  dS )z	    self.z = d['z']Nr<   rQ   s      r)   rU   z=HasShallowCopy._generate_shallow_from_dict.<locals>.<genexpr>{   sM       
 
! 544444
 
 
 
 
 
r*   rV   z(self, d):
rW   rZ   s        r)   _generate_shallow_from_dictz*HasShallowCopy._generate_shallow_from_dictu   sb     yy 
 
0
 
 
 
 
 =;<<D<<<	,YKHHHr*   c                    | j         }	 |j        d         }n2# t          $ r% |                     |j        d          }||_        Y nw xY w || |           d S )NrF   )	__class____dict__KeyErrorre   r0   rF   )r@   rC   r8   shallow_from_dicts       r)   _shallow_from_dictz!HasShallowCopy._shallow_from_dict   s    n
	K #8!  	K 	K 	K $ @ @'8! !
 :KC666	K 	$"""""    ,AAc                    | j         }	 |j        d         }n2# t          $ r% |                     |j        d          }||_        Y nw xY w ||           S )NrI   )rg   rh   ri   ra   r0   rI   )r@   r8   shallow_to_dicts      r)   _shallow_to_dictzHasShallowCopy._shallow_to_dict   s    n		G!l6OO  	G 	G 	G"<<')O O 8GC444	G t$$$rl   c                    | j         }	 |j        d         }n2# t          $ r% |                     |j        d          }||_        Y nw xY w || |           d S )NrA   )rg   rh   ri   r]   r0   rA   )r@   r=   r8   shallow_copys       r)   _shallow_copy_tozHasShallowCopy._shallow_copy_to   s    n	A<(KLLL 	A 	A 	A66')L L 5AC111	A 	T5!!!!!rl   r   r   c                n    | j                             | j                   }|                     |           |S )zCreate a shallow copyrg   __new__rr   )r@   r   cs      r)   _clonezHasShallowCopy._clone   s2    N""4>22a   r*   N)r=   r   r    r-   )rC   rD   r    r-   )r    rD   )rJ   r   rK   rL   r    rM   )rJ   r   rK   rL   r    r^   )rJ   r   rK   rL   r    rb   )r   r   r    r   )__name__
__module____qualname____doc__	__slots__typingTYPE_CHECKINGrA   rF   rI   classmethodr]   ra   re   rk   ro   rr   rw   r<   r*   r)   r;   r;   H   s         I NMMMM	 	 	 	 	NMMM
I 
I 
I [
I 
I 
I 
I [
I 
I 
I 
I [
I# # # #$% % % %"" " " "     r*   r;   c                      e Zd ZdZdZddZdS )GenerativeOnTraversalzSupplies Generative behavior but making use of traversals to shallow
    copy.

    .. seealso::

        :class:`sqlalchemy.sql.base.Generative`


    r<   r    r   c                h    | j         }|                    |          }|                     |           |S r?   rt   )r@   r8   ss      r)   	_generatezGenerativeOnTraversal._generate   s3    nKKa   r*   N)r    r   )rx   ry   rz   r{   r|   r   r<   r*   r)   r   r      s9          I     r*   r   c                *    |                                  S r?   )rw   )elementr   s     r)   rw   rw      s    >>r*   c                  &    e Zd ZdZd Zdddd
ZdS )HasCopyInternalsr<   c                    t                      r?   NotImplementedError)r@   r   s     r)   rw   zHasCopyInternals._clone   s    !###r*   )
omit_attrsr   Iterable[str]r   r   r    r-   c                   	 | j         }n# t          $ r Y dS w xY wt                              | |d          D ]+\  }}}||v r| ||| |fi |}|t	          | ||           ,dS )at  Reassign internal elements to be clones of themselves.

        Called during a copy-and-traverse operation on newly
        shallow-copied elements to create a deep copy.

        The given clone function should be used, which may be applying
        additional transformations to the element (i.e. replacement
        traversal, cloned traversal, annotations).

        Nr1   )r0   AttributeErrorr5   run_generated_dispatchsetattr)r@   r   r   traverse_internalsrS   objmethresults           r)   r5   z HasCopyInternals._copy_internals   s    	!%!9 	 	 	FF	 $3#I#I$&K$
 $
 		4 		4Hc4 :%%hc88R88%D(F333		4 		4s   
 
N)r   r   r   r   r    r-   )rx   ry   rz   r|   rw   r5   r<   r*   r)   r   r      sK        I$ $ $ .04 4 4 4 4 4 4 4r*   r   c                      e Zd ZdZefdZefdZefdZefdZefdZ	efdZ
efdZefd	Zd
 ZefdZefdZefdZefdZdS )_CopyInternalsTraversalzmGenerate a _copy_internals internal traversal dispatch for classes
    with a _traverse_internals collection.c                     ||fi |S r?   r<   r@   rS   parentr   cloner   s         r)   visit_clauseelementz+_CopyInternalsTraversal.visit_clauseelement   s     uW#####r*   c                $    fd|D             S )Nc                "    g | ]} |fi S r<   r<   rR   clauser   r   s     r)   
<listcomp>zD_CopyInternalsTraversal.visit_clauseelement_list.<locals>.<listcomp>  +    :::f####:::r*   r<   r   s       ``r)   visit_clauseelement_listz0_CopyInternalsTraversal.visit_clauseelement_list  #     ;::::'::::r*   c                >    t          fd|D                       S )Nc                "    g | ]} |fi S r<   r<   r   s     r)   r   zE_CopyInternalsTraversal.visit_clauseelement_tuple.<locals>.<listcomp>	  +    @@@feeF))b))@@@r*   tupler   s       ``r)   visit_clauseelement_tuplez1_CopyInternalsTraversal.visit_clauseelement_tuple  ,     @@@@@@@@AAAr*   c                >    t          fd|D                       S )Nc                "    g | ]} |fi S r<   r<   r   s     r)   r   zD_CopyInternalsTraversal.visit_executable_options.<locals>.<listcomp>  r   r*   r   r   s       ``r)   visit_executable_optionsz0_CopyInternalsTraversal.visit_executable_options  r   r*   c                $    fd|D             S )Nc                "    h | ]} |fi S r<   r<   r   s     r)   	<setcomp>zL_CopyInternalsTraversal.visit_clauseelement_unordered_set.<locals>.<setcomp>  r   r*   r<   r   s       ``r)   !visit_clauseelement_unordered_setz9_CopyInternalsTraversal.visit_clauseelement_unordered_set  r   r*   c                $    fd|D             S )Nc                H    g | ]}t          fd |D                       S )c              3  *   K   | ]} |fi V  d S r?   r<   )rR   tup_elemr   r   s     r)   rU   zP_CopyInternalsTraversal.visit_clauseelement_tuples.<locals>.<listcomp>.<genexpr>  s5      ==H%%''B''======r*   r   )rR   elemr   r   s     r)   r   zF_CopyInternalsTraversal.visit_clauseelement_tuples.<locals>.<listcomp>  sI     
 
 
 ==========
 
 
r*   r<   r   s       ``r)   visit_clauseelement_tuplesz2_CopyInternalsTraversal.visit_clauseelement_tuples  s4    
 
 
 
 

 
 
 	
r*   c                H    fd|                                 D             S )Nc                *    i | ]\  }}| |fi S r<   r<   rR   keyvaluer   r   s      r)   
<dictcomp>zK_CopyInternalsTraversal.visit_string_clauseelement_dict.<locals>.<dictcomp>   s1    JJJJCUU5''B''JJJr*   itemsr   s       ``r)   visit_string_clauseelement_dictz7_CopyInternalsTraversal.visit_string_clauseelement_dict  s,     KJJJJ'--//JJJJr*   c                >    t          fd|D                       S )Nc              3  p   K   | ]0\  }}}}|	 |fi nd |	 |fi nd |	 |fi nd |fV  1d S r?   r<   )rR   targetonclausefrom_flagsr   r   s        r)   rU   zA_CopyInternalsTraversal.visit_setup_join_tuple.<locals>.<genexpr>%  s       
 
 15% (.'9f#####t)1)=h%%"%%%4&+&7e""r"""T	
 
 
 
 
 
r*   r   r   s       ``r)   visit_setup_join_tuplez._CopyInternalsTraversal.visit_setup_join_tuple"  sE      
 
 
 
 
 5<
 
 
 
 
 	
r*   c                "     | j         |||fi |S r?   r   )r@   rS   r   r   r   s        r)   visit_memoized_select_entitiesz6_CopyInternalsTraversal.visit_memoized_select_entities/  s!    -t-hNN2NNNr*   c                $    fd|D             S )Nc                ^    g | ])\  }}t          |d           r	 |fi n| |fi f*S __clause_element__r4   r   s      r)   r   zD_CopyInternalsTraversal.visit_dml_ordered_values.<locals>.<listcomp>6  ss     

 

 

 U s$899EE#$$$$$e""r""

 

 

r*   r<   r   s       ``r)   visit_dml_ordered_valuesz0_CopyInternalsTraversal.visit_dml_ordered_values2  s6    

 

 

 

 

 &

 

 

 
	
r*   c                H    fd|                                 D             S )Nc                \    i | ](\  }}t          |d           r	 |fi n| |fi )S r   r   r   s      r)   r   z<_CopyInternalsTraversal.visit_dml_values.<locals>.<dictcomp>C  sk     
 
 
 U %,C1E$F$FOc  R   CuU!!b!!
 
 
r*   r   r   s       ``r)   visit_dml_valuesz(_CopyInternalsTraversal.visit_dml_valuesB  s>    
 
 
 
 
 &mmoo	
 
 
 	
r*   c                0    fdfd|D             S )Nc                    t          | t          t          f          rfd| D             S t          | t                    r!fd|                                 D             S J )Nc                F    g | ]}t          |d           r	 |fi n|S r   r   )rR   r   r   r   s     r)   r   zP_CopyInternalsTraversal.visit_dml_multi_values.<locals>.copy.<locals>.<listcomp>Q  sU         #5*>??#e**r***"	  r*   c                    i | ]:\  }}t          |d           r	 |fi n|t          |d           r	 |fi n|;S r   r   r   s      r)   r   zP_CopyInternalsTraversal.visit_dml_multi_values.<locals>.copy.<locals>.<dictcomp>Z  s        #U #3(<==!c((R(((  #5*>??#e**r***"  r*   )
isinstancelistr   dictr   )r   r   r   s    r)   copyz<_CopyInternalsTraversal.visit_dml_multi_values.<locals>.copyO  s    $u..      "&    D$''      '+jjll    r*   c                ,    g | ]}fd |D             S )c                &    g | ]} |          S r<   r<   )rR   sub_elementr   s     r)   r   zM_CopyInternalsTraversal.visit_dml_multi_values.<locals>.<listcomp>.<listcomp>k  s#    ;;;;TT+;;;r*   r<   )rR   sequencer   s     r)   r   zB_CopyInternalsTraversal.visit_dml_multi_values.<locals>.<listcomp>j  s=     
 
 
 <;;;(;;;
 
 
r*   r<   )r@   rS   r   r   r   r   r   s       ``@r)   visit_dml_multi_valuesz._CopyInternalsTraversal.visit_dml_multi_valuesJ  sN    
	 	 	 	 	 	6
 
 
 
#
 
 
 	
r*   c                    |S r?   r<   r   s         r)   visit_propagate_attrsz-_CopyInternalsTraversal.visit_propagate_attrso  s	     r*   N)rx   ry   rz   r{   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r<   r*   r)   r   r      sk       . . 06$ $ $ $ 06; ; ; ; 06B B B B 06B B B B 06; ; ; ; 06
 
 
 
 06K K K K 06
 
 
 
O O O 06
 
 
 
  AG 
 
 
 
 06#
 #
 #
 #
L 06     r*   r   c                    t          | d          rFt          | dd          s5|                                 } t          | d          rt          | dd          5| S )Nr   is_clause_elementF)r4   getattrr   )r   s    r)   _flatten_clauseelementr   x  sv    
'/
0
0 /$e: : / ,,.. '/
0
0 /$e: : /
 Nr*   c                  l    e 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S )_GetChildrenTraversalzqGenerate a _children_traversal internal traversal dispatch for classes
    with a _traverse_internals collection.c                    dS Nr<   r<   r@   r   r   s      r)   visit_has_cache_keyz)_GetChildrenTraversal.visit_has_cache_key  s	     rr*   c                    |fS r?   r<   r   s      r)   r   z)_GetChildrenTraversal.visit_clauseelement  s
    zr*   c                    |S r?   r<   r   s      r)   r   z._GetChildrenTraversal.visit_clauseelement_list      r*   c                    |S r?   r<   r   s      r)   r   z/_GetChildrenTraversal.visit_clauseelement_tuple  r   r*   c                @    t           j                            |          S r?   )	itertoolschainfrom_iterabler   s      r)   r   z0_GetChildrenTraversal.visit_clauseelement_tuples  s    ,,W555r*   c                    dS r   r<   r   s      r)   ,visit_fromclause_canonical_column_collectionzB_GetChildrenTraversal.visit_fromclause_canonical_column_collection      rr*   c                *    |                                 S r?   )valuesr   s      r)   r   z5_GetChildrenTraversal.visit_string_clauseelement_dict  s    ~~r*   c                    |S r?   r<   r   s      r)   visit_fromclause_ordered_setz2_GetChildrenTraversal.visit_fromclause_ordered_set  r   r*   c                    |S r?   r<   r   s      r)   r   z7_GetChildrenTraversal.visit_clauseelement_unordered_set  r   r*   c              +     K   |D ][\  }}}}||V  t          |t                    st          |          V  |&t          |t                    st          |          V  \d S r?   )r   rL   r   )r@   r   r   r   r   r   r   s          r)   r   z,_GetChildrenTraversal.visit_setup_join_tuple  s      .5 	7 	7*FHeU fc** 5,V44444#Jx,E,E#,X66666	7 	7r*   c                     | j         |fi |S r?   r   r   s      r)   r   z4_GetChildrenTraversal.visit_memoized_select_entities  s    -t-g<<<<<r*   c              +  J   K   |D ]\  }}t          |d          r|V  |V  d S )Nr   r   )r@   r   r   kvs        r)   r   z._GetChildrenTraversal.visit_dml_ordered_values  sJ       	 	DAqq.// GGGG	 	r*   c              +     K   d |D             }|                     |          }t          |          D ]}||         V  |D ]}|V  ||         V  d S )Nc                2    h | ]}t          |d           |S r   r   )rR   r  s     r)   r   z9_GetChildrenTraversal.visit_dml_values.<locals>.<setcomp>  s(    NNNQWQ8L-M-MNqNNNr*   )symmetric_differencesorted)r@   r   r   expr_values
str_valuesr  s         r)   r   z&_GetChildrenTraversal.visit_dml_values  s      NN'NNN 55g>>

## 	 	A!* 	 	AGGG!*	 	r*   c                    dS r   r<   r   s      r)   r   z,_GetChildrenTraversal.visit_dml_multi_values  r   r*   c                    dS r   r<   r   s      r)   r   z+_GetChildrenTraversal.visit_propagate_attrs  r   r*   N)rx   ry   rz   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r<   r*   r)   r   r     s        . .        6 6 6           	7 	7 	7= = =          r*   r   zsqlalchemy.sql.elementsc                x    t          |t          j        j        j                  r|                    |          }|S r?   )r   r   	preloadedsql_elements_anonymous_label	apply_map)r   namer   r   s       r)   _resolve_name_for_comparer    s2    $3DEE (~~h''Kr*   c                  (   e Zd ZdZd Zd Zd8d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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*d0 Z+d1 Z,d2 Z-d3 Z.d4 Z/d5 Z0d6 Z1d7S )9r&   )stackcacher   c                R    t                      | _        t                      | _        d S r?   )r   r  setr  rH   s    r)   __init__z$TraversalComparatorStrategy.__init__  s#     GG 	
 UU


r*   c                :    t                      t                      fS r?   r   rH   s    r)   _memoized_attr_anon_mapz3TraversalComparatorStrategy._memoized_attr_anon_map  s    

HJJ''r*   r   r   r   r   r   r    r!   c                x   | j         }| j        }|                    dd          }|                    ||f           |r{|                                \  }}||u r||dS ||f|v r,|                    ||f           |j        }	|	|j        k    rdS t          | d|	z  d           }
|
r  |
||fi |}|t          u rdS |t          u rnd}t          |j        |j        d          D ]\  \  }}\  }}|s|dk    s|dk    r||k    s||ur dS ||v r,|J |J |J |                     |          }| J | j         d| j        |          d	             t          j        |          |          } t          j        |          |          }|| dS | dS  ||||||fi |}|t          u r dS |{d
S )Ncompare_annotationsFz
compare_%sr<   NN	fillvalue_annotationsz has no dispatch for ''T)r  r  r$   appendpopleftadd__visit_name__r   COMPARE_FAILEDSKIP_TRAVERSEr   r0   dispatchrg   _dispatch_lookupoperator
attrgetter)r@   r   r   r   r  r  r  leftright
visit_namer   attributes_comparedleft_attrnameleft_visit_symright_attrnameright_visit_symr'  
left_childright_child
comparisons                       r)   r'   z#TraversalComparatorStrategy.compare  s    

 ff%:EBBdD\""" M	!--//KD%u}}u%''IItUm$$$,JU111u4
!:DAAD )&*d4&=&="&=&=#&.88 5(M99 : ')#
 ()&  -! -! /1 + "n44&.88 "^33%_<< 55"&999%111$000%111==88++~ A A-n=A A A ,++ @X0??EE
Ah1.AA%HH%".$uu  ( 55%X!4UK KM 
 // 55 0Y  M	!^ tr*   c                H    |                                  } |j        ||fi |S r?   )rg   r'   )r@   r   r   r   
comparators        r)   compare_innerz)TraversalComparatorStrategy.compare_inner@  s.    ^^%%
!z!$33333r*   c                    |                     | j        d         g           |                     | j        d         g           k    rt          S d S Nr   r   )_gen_cache_keyr   r%  r@   rS   left_parentr+  right_parentr,  r   s          r)   r   z/TraversalComparatorStrategy.visit_has_cache_keyD  sX     t}Q/448L8LM!b9
 9
 
 
 "!
 
r*   c                ~    |                      |                    dd           |                    dd                     S )Nplugin_subject)r8  r$   r<  s          r)   r   z1TraversalComparatorStrategy.visit_propagate_attrsL  s?     !!HH%t,,eii8H$.O.O
 
 	
r*   c                   t          ||d           D ]k\  }}||	t          c S |	t          c S |                    | j        d         g           |                    | j        d         g           k    r	t          c S ld S Nr  r   r   )r   r%  r;  r   	r@   rS   r=  r+  r>  r,  r   lrs	            r)   visit_has_cache_key_listz4TraversalComparatorStrategy.visit_has_cache_key_listS  s      et<<< 	& 	&DAqy=))))%%%%a 0"559I9Ia ": :   &%%%	& 	&r*   c                &   t          ||d           D ]}\  }}||	t          c S |	t          c S |j        r!|                    | j        d         g           n||j        r!|                    | j        d         g           n|k    r	t          c S ~d S rB  )r   r%  _is_has_cache_keyr;  r   rC  s	            r)   r   z4TraversalComparatorStrategy.visit_executable_optionsd  s      et<<< 	& 	&DAqy=))))%%%% &  q!12666 &  q!12666  &%%%	& 	&r*   c                >    | j                             ||f           d S r?   )r  r!  r<  s          r)   r   z/TraversalComparatorStrategy.visit_clauseelement{  s$     	
4-(((((r*   c                n    t          ||d           D ]!\  }}| j                            ||f           "d S Nr  r   r  r!  )	r@   rS   r=  r+  r>  r,  r   lcolrcols	            r)   r   zHTraversalComparatorStrategy.visit_fromclause_canonical_column_collection  sM     &dETBBB 	, 	,JD$JtTl++++	, 	,r*   c                    d S r?   r<   r<  s          r)   *visit_fromclause_derived_column_collectionzFTraversalComparatorStrategy.visit_fromclause_derived_column_collection  s	     	r*   c                    t          t          |          t          |          d           D ]<\  }}||k    r	t          c S | j                            ||         ||         f           =d S rK  )r   r  r%  r  r!  )	r@   rS   r=  r+  r>  r,  r   lstrrstrs	            r)   r   z;TraversalComparatorStrategy.visit_string_clauseelement_dict  s     &4LL&--4
 
 
 	9 	9JD$ t||%%%%JtDz5;78888	9 	9r*   c                    t          ||d           D ]F\  }}||	t          c S t          ||d           D ]!\  }	}
| j                            |	|
f           "Gd S rK  r   r%  r  r!  )r@   rS   r=  r+  r>  r,  r   ltuprtuprD  rE  s              r)   r   z6TraversalComparatorStrategy.visit_clauseelement_tuples  s     &dETBBB 	* 	*JD$|t|%%%%#D$$??? * *1
!!1a&))))*		* 	*r*   c                n    t          ||d           D ]!\  }}| j                            ||f           "d S rK  rL  rC  s	            r)   r   z4TraversalComparatorStrategy.visit_clauseelement_list  M      et<<< 	& 	&DAqJq!f%%%%	& 	&r*   c                n    t          ||d           D ]!\  }}| j                            ||f           "d S rK  rL  rC  s	            r)   r   z5TraversalComparatorStrategy.visit_clauseelement_tuple  rY  r*   c                8   ||d u S t                      }|D ]M}t          |                              |          D ](} | j        ||fi |r|                    |            n)Nt	          |          t	          |          cxk    ot	          |          k    nc S r?   )r  
differencer8  r#  len)r@   seq1seq2r   	completedr   other_clauses          r)   _compare_unordered_sequencesz8TraversalComparatorStrategy._compare_unordered_sequences  s    <4<!$	 	 	F #D		 4 4Y ? ?  %4%flAAbAA MM,///E 9~~T7777c$ii77777r*   c                      | j         ||fi |S r?   )rb  r<  s          r)   r   z=TraversalComparatorStrategy.visit_clauseelement_unordered_set  s!     1t0uCCCCCr*   c                n    t          ||d           D ]!\  }}| j                            ||f           "d S rK  rL  rC  s	            r)   r   z8TraversalComparatorStrategy.visit_fromclause_ordered_set  rY  r*   c                    ||k    S r?   r<   r<  s          r)   visit_stringz(TraversalComparatorStrategy.visit_string       u}r*   c                    ||k    S r?   r<   r<  s          r)   visit_string_listz-TraversalComparatorStrategy.visit_string_list  rg  r*   c                $   t          t          |                                          t          |                                          d          D ]\  }}||k    r	t          c S ||         ||         }
}	t	          |t
                    }t	          |t
                    }|rP|rN|	                    | j        d         g           |
                    | j        d         g           k    r	t          c S ||k    r	t          c S |	|
k    r	t          c S d S )Nr  r  r   r   )r   r  keysr%  r   r   r;  r   )r@   rS   r=  r+  r>  r,  r   lkrklvrvlhcrhcs                r)   visit_string_multi_dictz3TraversalComparatorStrategy.visit_string_multi_dict  s3    "499;;

!5!5
 
 
 	& 	&FB Rxx%%%%"XuRyBT;//CUK00C &s &$$M!$b &&t}Q'7<<= = *)))= %%%%r%%%% #	& 	&r*   c                   t          |t                    }t          |t                    }|rO|rM|                    | j        d         g           |                    | j        d         g           k    rt          S d S ||k    rt          S ||k    S r:  )r   r   r;  r   r%  )	r@   rS   r=  r+  r>  r,  r   rp  rq  s	            r)   visit_multiz'TraversalComparatorStrategy.visit_multi  s     {++,, 	!3 	!""a " %%dmA&6;;< < &%< < CZZ!!5= r*   c                n    t          ||| j        d         fi |t          ||| j        d         fi |k    S r:  )r  r   r<  s          r)   visit_anon_namez+TraversalComparatorStrategy.visit_anon_name  s^     )t}Q/
 
35
 
&%q!1
 
57
 

 	
r*   c                    ||k    S r?   r<   r<  s          r)   visit_booleanz)TraversalComparatorStrategy.visit_boolean  rg  r*   c                    ||k    S r?   r<   r<  s          r)   visit_operatorz*TraversalComparatorStrategy.visit_operator   rg  r*   c                ,    |                     |          S r?   )_compare_type_affinityr<  s          r)   
visit_typez&TraversalComparatorStrategy.visit_type  s     **5111r*   c                    ||k    S r?   r<   r<  s          r)   visit_plain_dictz,TraversalComparatorStrategy.visit_plain_dict
  rg  r*   c                    ||k    S r?   r<   r<  s          r)   visit_dialect_optionsz1TraversalComparatorStrategy.visit_dialect_options  rg  r*   c                6    |r|r|j         |j         k    S ||k    S r?   )_annotations_cache_keyr<  s          r)   visit_annotations_keyz1TraversalComparatorStrategy.visit_annotations_key  s5      	!E 	!267
 5= r*   c                j    t          d |D                       t          d |D                       k    S )Nc              3  .   K   | ]\  }}|j         |fV  d S r?   __code__rR   fnc_keys      r)   rU   zITraversalComparatorStrategy.visit_with_context_options.<locals>.<genexpr>"  s-      @@ib%bk5)@@@@@@r*   c              3  .   K   | ]\  }}|j         |fV  d S r?   r  r  s      r)   rU   zITraversalComparatorStrategy.visit_with_context_options.<locals>.<genexpr>"  sF       J
 J
%.RR[% J
 J
 J
 J
 J
 J
r*   r   r<  s          r)   visit_with_context_optionsz6TraversalComparatorStrategy.visit_with_context_options  sW     @@4@@@@@E J
 J
27J
 J
 J
 E
 E
 
 	
r*   c                    ||k    S r?   r<   r<  s          r)   visit_plain_objz+TraversalComparatorStrategy.visit_plain_obj&  rg  r*   c                8    |	|t           S |j        |j        k    S r?   )r%  r  r<  s          r)   visit_named_ddl_elementz3TraversalComparatorStrategy.visit_named_ddl_element+  s$     < %%yEJ&&r*   c                    t          ||d          D ]6\  \  }}\  }	}
||
k    r	t          c S | j                            ||	f           7d S Nr  r  rU  )r@   rS   r=  r+  r>  r,  r   l_clausel_strr_clauser_strs              r)   visit_prefix_sequencez1TraversalComparatorStrategy.visit_prefix_sequence4  sx     5@%<5
 5
 5
 	8 	80Xu0% ~~%%%%
!!8X"67777	8 	8r*   c                   t          ||d          D ]r\  \  }}}	}
\  }}}}|
|k    r	t          c S | j                            ||f           | j                            ||f           | j                            |	|f           sd S )N)NNNNr  rU  )r@   rS   r=  r+  r>  r,  r   l_target
l_onclausel_froml_flagsr_target
r_onclauser_fromr_flagss                  r)   r   z2TraversalComparatorStrategy.visit_setup_join_tuple?  s     u0HIII	0 	0 
3Xz673Xz67'!!%%%%Jx2333Jz:6777Jvv.////	0 	0r*   c                &     | j         |||||fi |S r?   r   r<  s          r)   r   z:TraversalComparatorStrategy.visit_memoized_select_entitiesM  s3     .t-k4u
 
@B
 
 	
r*   c                   t          |d           }t          |d           }t          ||d          D ]U\  \  }	}
\  }}|
|k    r	t          c S ||	|
f         |||f         k    r	t          c S | j                            |	|f           Vd S )Nc                ,    | d         j         | d         fS r:  fullnamer   s    r)   <lambda>zCTraversalComparatorStrategy.visit_table_hint_list.<locals>.<lambda>W  s    473CT!W2M r*   )r   c                ,    | d         j         | d         fS r:  r  r  s    r)   r  zCTraversalComparatorStrategy.visit_table_hint_list.<locals>.<lambda>Y  s    T!W%5tAw$? r*   r  r  )r  r   r%  r  r!  )r@   rS   r=  r+  r>  r,  r   	left_keys
right_keysltableldialectrtablerdialects                r)   visit_table_hint_listz1TraversalComparatorStrategy.visit_table_hint_listT  s     4%M%MNNN	??
 
 

 7Bz\7
 7
 7
 	4 	42VX 2 8##%%%%vx()UFH3E-FFF%%%%
!!66"23333	4 	4r*   c                    ||k    S r?   r<   r<  s          r)   visit_statement_hint_listz5TraversalComparatorStrategy.visit_statement_hint_liste  rg  r*   c                    t                      r?   r   r<  s          r)   visit_unknown_structurez3TraversalComparatorStrategy.visit_unknown_structurej  s     "###r*   c                r    t          ||d          D ]#\  \  }}\  }	}
 | j        ||	fi |s	t          c S $d S r  )r   _compare_dml_values_or_cer%  )r@   rS   r=  r+  r>  r,  r   rl  rn  rm  ro  s              r)   r   z4TraversalComparatorStrategy.visit_dml_ordered_valueso  sr    
 #.%<#
 #
 #
 	& 	&HRhr2 241"b??B?? &%%%%&	& 	&r*   c                    t          |d          }t          |d          }||k    rdS |r | j        ||fi |sdS |s||k    rdS  | j        ||fi |sdS dS )Nr   FT)r4   r8  )r@   rn  ro  r   lvcervces         r)   r  z5TraversalComparatorStrategy._compare_dml_values_or_cez  s    r/00r/004<<5 	,$,R::r:: 	5 	"((5##B11b11 	5tr*   c                   |"| t          |          t          |          k    rt          S t          |t          j                  r0t          ||          D ]\  }} | j        ||fi |s	t          c S d S t          |t          j                  rt          S t          |                                |                                          D ];\  \  }	}\  }
} | j        |	|
fi |s	t          c S  | j        ||fi |s	t          c S <d S r?   )r]  r%  r   collections_abcSequencezipr  r   )r@   rS   r=  r+  r>  r,  r   rn  ro  rl  rm  s              r)   r   z,TraversalComparatorStrategy.visit_dml_values  sO    <5=CIIU,C,C!!dO455 	*dE** * *B5t5b"CCCC *))))** * 788 	*!! '*$**,,&F&F * *"R(2r5t5b"CCCC *))))5t5b"CCCC *))))** *r*   c           	         t          ||d           D ]N\  }}||	t          c S t          ||d           D ])\  }	}
 | j        |||	||
fi |t          u rt          c c S *Od S rK  )r   r%  r   )r@   rS   r=  r+  r>  r,  r   lseqrseqldrds              r)   r   z2TraversalComparatorStrategy.visit_dml_multi_values  s     &dETBBB 	* 	*JD$|t|%%%%%dDDAAA * *B)D) +r< GI  && &
 *)))))&*		* 	*r*   c                    |j         |j         u r@t          j        |j                   r$ | j        |j        |j        fi |rddgS t
          S dgS t
          S )Nr)  clauses)r)  r   is_associativerb  r  r%  r@   r+  r,  r   s       r)   compare_expression_clauselistz9TraversalComparatorStrategy.compare_expression_clauselist  st    =EN**'66 $444L%- 35  * '	22))"|#!!r*   c                      | j         ||fi |S r?   )r  r  s       r)   compare_clauselistz.TraversalComparatorStrategy.compare_clauselist  s    1t1$DDDDDr*   c                H   |j         |j         k    rt          j        |j                   ro | j        |j        |j        fi |r | j        |j        |j        fi |s2 | j        |j        |j        fi |r | j        |j        |j        fi |rg dS t          S ddgS t          S )N)r)  negater+  r,  r)  r  )r)  r   is_commutativer8  r+  r,  r%  r  s       r)   compare_binaryz*TraversalComparatorStrategy.compare_binary  s    =EN**'66 .&D&ty%*CCCC	***4:u{IIbII	* 'D&ty%+DDDD		*
 +*4:uzHHRHH	* CBBB))"H--!!r*   c                    |                     dd          }|                     dd          }|rg }nddg}|s|                    d           |S )Ncompare_keysTcompare_valuescallabler   r   )popr!  )r@   r+  r,  r   r  r  omits          r)   compare_bindparamz-TraversalComparatorStrategy.compare_bindparam  sc    vvnd33 0$77 	)DD (D 	KKr*   N)r   r   r   r   r   r   r    r!   )2rx   ry   rz   r|   r  r  r'   r8  r   r   rF  r   r   r   rP  r   r   r   r   rb  r   r   rf  ri  rr  rt  rv  rx  rz  r}  r  r  r  r  r  r  r  r   r   r  r  r  r   r  r   r   r  r  r  r  r<   r*   r)   r&   r&     s       ,I  ( ( (\ \ \ \|4 4 4" " "
 
 
& & &"& & &.) ) )
, , ,  
9 9 9* * *& & && & &
8 
8 
8D D D
& & &  
  
& & &.! ! !
 
 
  
  
2 2 2
  
  
	! 	! 	!
 
 
  
' ' '	8 	8 	80 0 0
 
 
4 4 4"  
$ $ $
	& 	& 	&  * * *.* * * " " "E E E" " "$    r*   r&   c                  *    e Zd Z	 ddZd Zd Zd ZdS )	r%   Tr<   c                    |f}|r||v r||                              |          }|D ]K}|r|                    |          r	t          c S t          |          t          |          k    r	t          c S Lt          S )zCompare ColumnElements using proxies and equivalent collections.

        This is a comparison strategy specific to the ORM.
        )unionshares_lineager&  hashr%  )r@   r+  r,  r#   equivalentsr   
to_compareoths           r)   compare_column_elementz4ColIdentityComparatorStrategy.compare_column_element  s     X
 	>5K//$U+11*==J 	" 	"C %t22377 %$$$$dtE{{**$$$$ + "!r*   c                      | j         ||fi |S r?   r  r  s       r)   compare_columnz,ColIdentityComparatorStrategy.compare_column      *t*4=="===r*   c                      | j         ||fi |S r?   r  r  s       r)   compare_labelz+ColIdentityComparatorStrategy.compare_label  r  r*   c                &    ||u rt           nt          S r?   )r&  r%  r  s       r)   compare_tablez+ColIdentityComparatorStrategy.compare_table  s     !%}}>Ar*   N)Tr<   )rx   ry   rz   r  r  r  r  r<   r*   r)   r%   r%     s]        9;" " " "(> > >> > >B B B B Br*   r%   )r   r   r   r   r   r   r    r!   )r+   r,   r    r-   )6
__future__r   collectionsr   collections.abcabcr  r   r   r)  r}   r   r   r   r	   r
   r   r   r   r    r   	cache_keyr   visitorsr   r   r   r   r   r   r   util.typingr   symbolr&  r%  COMPARE_SUCCEEDEDr'   r9   r;   r   rw   r   r   r5   r   r   r7   preload_moduler  MemoizedSlotsr&   r%   r<   r*   r)   <module>r     s   # " " " " "       ) ) ) ) ) )     ! ! ! ! ! !                                                               " " " " " " , , , , , ,       + + + + + + * * * * * * * * * * * *                   O,, . . . .   $o o o o o) o o od    N   (  #4 #4 #4 #4 #4+ #4 #4 #4Lz z z z z2 z z zz *)++  D D D D D0 D D DN &%'' .//  0/L L L L L"68J L L L^B B B B B$? B B B B Br*   