
    g                    t   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jD                  d      Z#dZ$dZ%d1dZ&d2dZ' G d d e      Z( G d! d"e(      Z)d# Z* G d$ d%e      Z+ G d& d'e      Z, e,       Z-d( Z. G d) d*e      Z/ e/       Z0 ejb                  d+      d,        Z2 G d- d.eejf                        Z4 G d/ d0e4      Z5y)3    )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_traverseFTc                x    |j                  dd      rt               }n
t               } |j                  | |fi |S )Nuse_proxiesF)getColIdentityComparatorStrategyTraversalComparatorStrategycompare)obj1obj2kwstrategys       Y/var/www/api/v1/venv_getwork_v1/lib/python3.12/site-packages/sqlalchemy/sql/traversals.pyr"   r"   ,   s:    	vvmU#02.08D$-"--    c                   t        j                  |       D ]n  }t        |d      st        |d      s|j                          t        j                  ||j                  d       t        j                  ||j                  d       p y )N_generate_cache_attrs_traverse_internals#_generated_copy_internals_traversal!_generated_get_children_traversal)r   walk_subclasseshasattrr*   _copy_internalsgenerate_dispatchr+   _get_children)target_hierarchyclss     r'   _preconfigure_traversalsr5   6   sz    ##$453/0W&6
 %%'--''5
 ++''3 6r(   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y)HasShallowCopyzattribute-wide operations that are useful for classes that use
    __slots__ and therefore can't operate on their attributes in a dictionary.


     c                     y Nr8   )selfothers     r'   !_generated_shallow_copy_traversalz0HasShallowCopy._generated_shallow_copy_traversalS       #r(   c                     y r:   r8   )r;   ds     r'   &_generated_shallow_from_dict_traversalz5HasShallowCopy._generated_shallow_from_dict_traversalU   s    r(   c                     y r:   r8   r;   s    r'   $_generated_shallow_to_dict_traversalz3HasShallowCopy._generated_shallow_to_dict_traversalY   r>   r(   c                r    dj                  d |D              }d| d| d}t        j                  |i |      S )N
c              3  2   K   | ]  \  }}d | d|   yw)z
    other.z = self.Nr8   .0attrname_s      r'   	<genexpr>z8HasShallowCopy._generate_shallow_copy.<locals>.<genexpr>a   s)      
0! 
(8*50   def z(self, other):
joinr   _exec_code_in_envr4   internal_dispatchmethod_namecode	meth_texts        r'   _generate_shallow_copyz%HasShallowCopy._generate_shallow_copy[   sK     yy 
0
 
 ;-'7vR@	,,YKHHr(   c                r    dj                  d |D              }d| d| d}t        j                  |i |      S )Nz,
c              3  2   K   | ]  \  }}d | d|   yw)z    'z': self.Nr8   rH   s      r'   rL   z;HasShallowCopy._generate_shallow_to_dict.<locals>.<genexpr>n   s)      
0! H:XhZ00rM   rN   z(self):
    return {z}
rO   rR   s        r'   _generate_shallow_to_dictz(HasShallowCopy._generate_shallow_to_dicth   sK     zz 
0
 
 ;-'=dV4H	,,YKHHr(   c                r    dj                  d |D              }d| d| d}t        j                  |i |      S )NrF   c              3  4   K   | ]  \  }}d | d| d  yw)z	    self.z = d['z']Nr8   rH   s      r'   rL   z=HasShallowCopy._generate_shallow_from_dict.<locals>.<genexpr>{   s+      
0! zz40s   rN   z(self, d):
rO   rR   s        r'   _generate_shallow_from_dictz*HasShallowCopy._generate_shallow_from_dictu   sJ     yy 
0
 
 ;-|D6<	,,YKHHr(   c                    | j                   }	 |j                  d   } || |       y # t        $ r& | j                  |j                  d      }||_        Y 8w xY w)NrA   )	__class____dict__KeyErrorr]   r+   rA   )r;   r@   r4   shallow_from_dicts       r'   _shallow_from_dictz!HasShallowCopy._shallow_from_dict   sj    nn
	K #8! 	$"  	K $ @ @''8!
 :KC6	K   ' ,AAc                    | j                   }	 |j                  d   } ||       S # t        $ r& | j                  |j                  d      }||_        Y 6w xY w)NrD   )r_   r`   ra   rZ   r+   rD   )r;   r4   shallow_to_dicts      r'   _shallow_to_dictzHasShallowCopy._shallow_to_dict   si    nn		G!ll6O t$$  	G"<<'')OO 8GC4	Gs   % ,AAc                    | j                   }	 |j                  d   } || |       y # t        $ r& | j                  |j                  d      }||_        Y 8w xY w)Nr=   )r_   r`   ra   rW   r+   r=   )r;   r<   r4   shallow_copys       r'   _shallow_copy_tozHasShallowCopy._shallow_copy_to   sf    nn	A<<(KLL 	T5!  	A66'')LL 5AC1	Ard   c                r    | j                   j                  | j                         }| j                  |       |S )zCreate a shallow copyr_   __new__rj   )r;   r%   cs      r'   _clonezHasShallowCopy._clone   s-    NN""4>>2a r(   N)r<   r   returnNone)r@   Dict[str, Any]rp   rq   )rp   rr   )rS   r   rT   strrp   zCallable[[Self, Self], None])rS   r   rT   rs   rp   z Callable[[Self], Dict[str, Any]])rS   r   rT   rs   rp   z&Callable[[Self, Dict[str, Any]], None])r%   r   rp   r   )__name__
__module____qualname____doc__	__slots__typingTYPE_CHECKINGr=   rA   rD   classmethodrW   rZ   r]   rc   rg   rj   ro   r8   r(   r'   r7   r7   H   s     IM	#		 	N
I1
I 
I 
&	
I 
I 
I1
I 
I 
*	
I 
I 
I1
I 
I 
0	
I 
I#$%""r(   r7   c                      e Zd ZdZdZddZy)GenerativeOnTraversalzSupplies Generative behavior but making use of traversals to shallow
    copy.

    .. seealso::

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


    r8   c                b    | j                   }|j                  |      }| j                  |       |S r:   rl   )r;   r4   ss      r'   	_generatezGenerativeOnTraversal._generate   s,    nnKKa r(   N)rp   r   )rt   ru   rv   rw   rx   r   r8   r(   r'   r}   r}      s     Ir(   r}   c                "    | j                         S r:   )ro   )elementr%   s     r'   ro   ro      s    >>r(   c                  .    e Zd ZdZd Zdd	 	 	 	 	 ddZy)HasCopyInternalsr8   c                    t               r:   NotImplementedError)r;   r%   s     r'   ro   zHasCopyInternals._clone   s    !##r(   )
omit_attrsc                   	 | j                   }t        j                  | |d      D ])  \  }}}||v r| ||| |fi |}|t	        | ||       + y# t        $ r Y yw xY w)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).

        Nr,   )r+   AttributeErrorr0   run_generated_dispatchsetattr)r;   r   r%   traverse_internalsrJ   objmethresults           r'   r0   z HasCopyInternals._copy_internals   s    	!%!9!9
 $3#I#I$&K$
Hc4 :%hc8R8%D(F3$
	  		s   A 	AAN)r   zIterable[str]r%   r   rp   rq   )rt   ru   rv   rx   ro   r0   r8   r(   r'   r   r      s.    I$ .04*47: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y)_CopyInternalsTraversalzmGenerate a _copy_internals internal traversal dispatch for classes
    with a _traverse_internals collection.c                     ||fi |S r:   r8   r;   rJ   parentr   cloner%   s         r'   visit_clauseelementz+_CopyInternalsTraversal.visit_clauseelement   s     W###r(   c                :    |D cg c]  } ||fi | c}S c c}w r:   r8   r;   rJ   r   r   r   r%   clauses          r'   visit_clauseelement_listz0_CopyInternalsTraversal.visit_clauseelement_list  &     3::'f##':::   c           
     L    t        |D cg c]  } ||fi | c}      S c c}w r:   tupler   s          r'   visit_clauseelement_tuplez1_CopyInternalsTraversal.visit_clauseelement_tuple  +     @feF)b)@AA@   !c           
     L    t        |D cg c]  } ||fi | c}      S c c}w r:   r   r   s          r'   visit_executable_optionsz0_CopyInternalsTraversal.visit_executable_options  r   r   c                :    |D ch c]  } ||fi | c}S c c}w r:   r8   r   s          r'   !visit_clauseelement_unordered_setz9_CopyInternalsTraversal.visit_clauseelement_unordered_set  r   r   c                V    |D cg c]  }t        fd|D               c}S c c}w )Nc              3  0   K   | ]  } |fi   y wr:   r8   )rI   tup_elemr   r%   s     r'   rL   zE_CopyInternalsTraversal.visit_clauseelement_tuples.<locals>.<genexpr>  s     =H%'B's   r   )r;   rJ   r   r   r   r%   elems       `` r'   visit_clauseelement_tuplesz2_CopyInternalsTraversal.visit_clauseelement_tuples  s5    
  
 ===
 	
 
s   &c           
     d    |j                         D ci c]  \  }}| ||fi | c}}S c c}}w r:   )itemsr;   rJ   r   r   r   r%   keyvalues           r'   visit_string_clauseelement_dictz7_CopyInternalsTraversal.visit_string_clauseelement_dict  s6     ;B--/J/JCU5'B''/JJJs   ,c                0    t        fd|D              S )Nc              3  v   K   | ]0  \  }}}}|	 |fi nd |	 |fi nd |	 |fi nd |f 2 y wr:   r8   )rI   targetonclausefrom_flagsr   r%   s        r'   rL   zA_CopyInternalsTraversal.visit_setup_join_tuple.<locals>.<genexpr>%  sg      
 5<05% (.'9f##t)1)=h%"%4&+&7e"r"T	 5<s   69r   r   s       ``r'   visit_setup_join_tuplez._CopyInternalsTraversal.visit_setup_join_tuple"  s!      
 5<
 
 	
r(   c                ,     | j                   |||fi |S r:   r   )r;   rJ   r   r   r%   s        r'   visit_memoized_select_entitiesz6_CopyInternalsTraversal.visit_memoized_select_entities/  s    -t--hN2NNr(   c           
     t    |D cg c]%  \  }}t        |d      r	 ||fi |n| ||fi |f' c}}S c c}}w N__clause_element__r/   r   s           r'   visit_dml_ordered_valuesz0_CopyInternalsTraversal.visit_dml_ordered_values2  s]     &

 &
U s$89 #$$e"r" &

 
	
 

s   *4c           
         |j                         D ci c]$  \  }}t        |d      r	 ||fi |n| ||fi |& c}}S c c}}w r   )r   r/   r   s           r'   visit_dml_valuesz(_CopyInternalsTraversal.visit_dml_valuesB  s]    
 &mmo	
 .
U %,C1E$Fc R CU!b!"-	
 	
 
s   )Ac           
     t    fd}|D cg c]  }|D cg c]
  } ||       c} c}}S c c}w c c}}w )Nc           
     P   t        | t        t        f      r%| D cg c]  }t        |d      r	 |fi n| c}S t        | t              rN| j                         D ci c]2  \  }}t        |d      r	 |fi n|t        |d      r	 |fi n|4 c}}S J c c}w c c}}w r   )
isinstancelistr   r/   dictr   )r   r   r   r   r%   s      r'   copyz<_CopyInternalsTraversal.visit_dml_multi_values.<locals>.copyO  s    $u. "& "& #5*>? e*r*"# "&  D$' '+jjl '3
U #3(<= c(R(  #5*>? e*r*"# '3  u/s   B 7B"r8   )	r;   rJ   r   r   r   r%   r   sequencesub_elements	       ``   r'   visit_dml_multi_valuesz._CopyInternalsTraversal.visit_dml_multi_valuesJ  sF    
	: $
# 3;;(;T+(;#
 	
;
s   	4/44c                    |S r:   r8   r   s         r'   visit_propagate_attrsz-_CopyInternalsTraversal.visit_propagate_attrso  s	     r(   N)rt   ru   rv   rw   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r(   r'   r   r      s    . 06$ 06; 06B 06B 06; 06
 06K 06
O 06
  AG 
 06#
L 06r(   r   c                    t        | d      r7t        | dd      s*| j                         } t        | d      rt        | dd      s*| S )Nr   is_clause_elementF)r/   getattrr   )r   s    r'   _flatten_clauseelementr   x  sO    
'/
0$e: ,,. '/
0$e:
 Nr(   c                  j    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y)_GetChildrenTraversalzqGenerate a _children_traversal internal traversal dispatch for classes
    with a _traverse_internals collection.c                     yNr8   r8   r;   r   r%   s      r'   visit_has_cache_keyz)_GetChildrenTraversal.visit_has_cache_key  s     r(   c                    |fS r:   r8   r   s      r'   r   z)_GetChildrenTraversal.visit_clauseelement  s
    zr(   c                    |S r:   r8   r   s      r'   r   z._GetChildrenTraversal.visit_clauseelement_list      r(   c                    |S r:   r8   r   s      r'   r   z/_GetChildrenTraversal.visit_clauseelement_tuple  r   r(   c                @    t         j                  j                  |      S r:   )	itertoolschainfrom_iterabler   s      r'   r   z0_GetChildrenTraversal.visit_clauseelement_tuples  s    ,,W55r(   c                     yr   r8   r   s      r'   ,visit_fromclause_canonical_column_collectionzB_GetChildrenTraversal.visit_fromclause_canonical_column_collection      r(   c                "    |j                         S r:   )valuesr   s      r'   r   z5_GetChildrenTraversal.visit_string_clauseelement_dict  s    ~~r(   c                    |S r:   r8   r   s      r'   visit_fromclause_ordered_setz2_GetChildrenTraversal.visit_fromclause_ordered_set  r   r(   c                    |S r:   r8   r   s      r'   r   z7_GetChildrenTraversal.visit_clauseelement_unordered_set  r   r(   c              +     K   |D ]K  \  }}}}|| t        |t              st        |       |.t        |t              r?t        |       M y wr:   )r   rs   r   )r;   r   r%   r   r   r   r   s          r'   r   z,_GetChildrenTraversal.visit_setup_join_tuple  sS     .5*FHeU fc*,V44#Jx,E,X66 /6s   0AAAc                (     | j                   |fi |S r:   r   r   s      r'   r   z4_GetChildrenTraversal.visit_memoized_select_entities  s    -t--g<<<r(   c              +  H   K   |D ]  \  }}t        |d      r| |  y wr   r   )r;   r   r%   kvs        r'   r   z._GetChildrenTraversal.visit_dml_ordered_values  s)     DAqq./G s    "c              +     K   |D ch c]  }t        |d      s| }}|j                  |      }t        |      D ]	  }||     |D ]  }| ||     y c c}w wr   )r/   symmetric_differencesorted)r;   r   r%   r   expr_values
str_valuess         r'   r   z&_GetChildrenTraversal.visit_dml_values  sl     ")N'QWQ8L-Mq'N 55g>

#A!* $AG!*  Os   AAAAAc                     yr   r8   r   s      r'   r   z,_GetChildrenTraversal.visit_dml_multi_values  r   r(   c                     yr   r8   r   s      r'   r   z+_GetChildrenTraversal.visit_propagate_attrs  r   r(   N)rt   ru   rv   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r(   r'   r   r     sR    .6 	7=r(   r   zsqlalchemy.sql.elementsc                    t        |t        j                  j                  j                        r|j                  |      }|S r:   )r   r   	preloadedsql_elements_anonymous_label	apply_map)r   namer   r%   s       r'   _resolve_name_for_comparer     s/    $33DDE~~h'Kr(   c                  6   e Zd ZdZd Zd Z	 	 	 	 	 	 	 	 d1d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*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1y0)2r!   )stackcacher   c                @    t               | _        t               | _        y r:   )r   r   setr   rC   s    r'   __init__z$TraversalComparatorStrategy.__init__  s     G 	
 U
r(   c                *    t               t               fS r:   r   rC   s    r'   _memoized_attr_anon_mapz3TraversalComparatorStrategy._memoized_attr_anon_map  s    
HJ''r(   c                b   | j                   }| j                  }|j                  dd      }|j                  ||f       |ro|j	                         \  }}||u r||y||f|v r'|j                  ||f       |j                  }	|	|j                  k7  ryt        | d|	z  d       }
|
r |
||fi |}|t        u ry|t        u rd}t        |j                  |j                  d      D ]  \  \  }}\  }}|s|dk(  s|dk(  r||k7  s||ur y||v r)|J |J |J | j                  |      }|$J | j                   d| j                  |    d	        t        j                   |      |      } t        j                   |      |      }|| y| y ||||||fi |}|t        u s y |roy
)Ncompare_annotationsFz
compare_%sr8   NN	fillvalue_annotationsz has no dispatch for ''T)r   r   r   appendpopleftadd__visit_name__r   COMPARE_FAILEDSKIP_TRAVERSEr   r+   dispatchr_   _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  sA    



 ff%:EBdD\"--/KD%u}%'IItUm$,,JU1114
!:DAD&*4&="&=#&.8 (M9 ')#
 (())&/1 +"n4&.8 "^3%_< "&99%111$000%111==8+ ~~& '--n=>aA+ @X00?E
Ah11.A%H%".$  ( %!4UKKM
 / UG ^ r(   c                J    | j                         } |j                  ||fi |S r:   )r_   r"   )r;   r#   r$   r%   
comparators        r'   compare_innerz)TraversalComparatorStrategy.compare_inner@  s(    ^^%
!z!!$333r(   c                    |j                  | j                  d   g       |j                  | j                  d   g       k7  rt        S y Nr   r   )_gen_cache_keyr   r  r;   rJ   left_parentr  right_parentr  r%   s          r'   r   z/TraversalComparatorStrategy.visit_has_cache_keyD  sJ     t}}Q/48L8LMM!b9
 
 "!
r(   c                f    | j                  |j                  dd       |j                  dd             S )Nplugin_subject)r"  r   r&  s          r'   r   z1TraversalComparatorStrategy.visit_propagate_attrsL  s4     !!HH%t,eii8H$.O
 	
r(   c                    t        ||d       D ]c  \  }}||t        c S |t        c S |j                  | j                  d   g       |j                  | j                  d   g       k7  s]t        c S  y Nr  r   r   )r   r  r%  r   	r;   rJ   r'  r  r(  r  r%   lrs	            r'   visit_has_cache_key_listz4TraversalComparatorStrategy.visit_has_cache_key_listS  sz      et<DAqy=))%%a 0"59I9Ia ":  &% =r(   c                $   t        ||d       D ]  \  }}||t        c S |t        c S |j                  r|j                  | j                  d   g       n||j                  r|j                  | j                  d   g       n|k7  syt        c S  y r,  )r   r  _is_has_cache_keyr%  r   r-  s	            r'   r   z4TraversalComparatorStrategy.visit_executable_optionsd  s      et<DAqy=))%% &&   q!126 &&   q!126 &%% =r(   c                >    | j                   j                  ||f       y r:   )r   r  r&  s          r'   r   z/TraversalComparatorStrategy.visit_clauseelement{  s     	

4-(r(   c                j    t        ||d       D ]"  \  }}| j                  j                  ||f       $ y Nr  r   r   r  )	r;   rJ   r'  r  r(  r  r%   lcolrcols	            r'   r   zHTraversalComparatorStrategy.visit_fromclause_canonical_column_collection  s2     &dETBJD$JJtTl+ Cr(   c                     y r:   r8   r&  s          r'   *visit_fromclause_derived_column_collectionzFTraversalComparatorStrategy.visit_fromclause_derived_column_collection  s     	r(   c                    t        t        |      t        |      d       D ]5  \  }}||k7  rt        c S | j                  j	                  ||   ||   f       7 y r5  )r   r   r  r   r  )	r;   rJ   r'  r  r(  r  r%   lstrrstrs	            r'   r   z;TraversalComparatorStrategy.visit_string_clauseelement_dict  sT     &4L&-4
JD$ t|%%JJtDz5;78
r(   c                    t        ||d       D ]D  \  }}||t        c S t        ||d       D ]"  \  }	}
| j                  j                  |	|
f       $ F y r5  r   r  r   r  )r;   rJ   r'  r  r(  r  r%   ltuprtupr.  r/  s              r'   r   z6TraversalComparatorStrategy.visit_clauseelement_tuples  sY     &dETBJD$|t|%%#D$$?1

!!1a&) @	 Cr(   c                j    t        ||d       D ]"  \  }}| j                  j                  ||f       $ y r5  r6  r-  s	            r'   r   z4TraversalComparatorStrategy.visit_clauseelement_list  1      et<DAqJJq!f% =r(   c                j    t        ||d       D ]"  \  }}| j                  j                  ||f       $ y r5  r6  r-  s	            r'   r   z5TraversalComparatorStrategy.visit_clauseelement_tuple  rC  r(   c                   ||d u S t               }|D ]H  }t        |      j                  |      D ])  } | j                  ||fi |s|j                  |        H J t	        |      t	        |      cxk(  xr t	        |      k(  S c S r:   )r   
differencer"  r  len)r;   seq1seq2r%   	completedr   other_clauses          r'   _compare_unordered_sequencesz8TraversalComparatorStrategy._compare_unordered_sequences  s    <4<!$	F #D	 4 4Y ?%4%%flAbAMM,/ !@ 
 9~T7c$i7777r(   c                *     | j                   ||fi |S r:   )rL  r&  s          r'   r   z=TraversalComparatorStrategy.visit_clauseelement_unordered_set  s     1t00uCCCr(   c                j    t        ||d       D ]"  \  }}| j                  j                  ||f       $ y r5  r6  r-  s	            r'   r   z8TraversalComparatorStrategy.visit_fromclause_ordered_set  rC  r(   c                    ||k(  S r:   r8   r&  s          r'   visit_stringz(TraversalComparatorStrategy.visit_string       u}r(   c                    ||k(  S r:   r8   r&  s          r'   visit_string_listz-TraversalComparatorStrategy.visit_string_list  rQ  r(   c                   t        t        |j                               t        |j                               d      D ]  \  }}||k7  rt        c S ||   ||   }
}	t	        |t
              }t	        |t
              }|rJ|rH|	j                  | j                  d   g       |
j                  | j                  d   g       k7  st        c S ||k7  rt        c S |	|
k7  st        c S  y )Nr  r  r   r   )r   r   keysr  r   r   r%  r   )r;   rJ   r'  r  r(  r  r%   lkrklvrvlhcrhcs                r'   visit_string_multi_dictz3TraversalComparatorStrategy.visit_string_multi_dict  s     "499;

!5
FB Rx%%"XuRyBT;/CUK0Cs$$MM!$b&&t}}Q'7<= *)%%r%%%
r(   c                    t        |t              }t        |t              }|rH|rF|j                  | j                  d   g       |j                  | j                  d   g       k7  rt        S y ||k7  rt        S ||k(  S r$  )r   r   r%  r   r  )	r;   rJ   r'  r  r(  r  r%   rZ  r[  s	            r'   visit_multiz'TraversalComparatorStrategy.visit_multi  s     {+,3""a "%%dmmA&6;< &%< CZ!!5= r(   c                p    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  sN     )t}}Q/
35
&%q!1
57

 	
r(   c                    ||k(  S r:   r8   r&  s          r'   visit_booleanz)TraversalComparatorStrategy.visit_boolean  rQ  r(   c                    ||k(  S r:   r8   r&  s          r'   visit_operatorz*TraversalComparatorStrategy.visit_operator   rQ  r(   c                $    |j                  |      S r:   )_compare_type_affinityr&  s          r'   
visit_typez&TraversalComparatorStrategy.visit_type  s     **511r(   c                    ||k(  S r:   r8   r&  s          r'   visit_plain_dictz,TraversalComparatorStrategy.visit_plain_dict
  rQ  r(   c                    ||k(  S r:   r8   r&  s          r'   visit_dialect_optionsz1TraversalComparatorStrategy.visit_dialect_options  rQ  r(   c                F    |r|r|j                   |j                   k(  S ||k(  S r:   )_annotations_cache_keyr&  s          r'   visit_annotations_keyz1TraversalComparatorStrategy.visit_annotations_key  s1     E22667
 5= r(   c                L    t        d |D              t        d |D              k(  S )Nc              3  >   K   | ]  \  }}|j                   |f  y wr:   __code__rI   fnc_keys      r'   rL   zITraversalComparatorStrategy.visit_with_context_options.<locals>.<genexpr>"  s     @4ib%bkk5)4   c              3  >   K   | ]  \  }}|j                   |f  y wr:   rq  rs  s      r'   rL   zITraversalComparatorStrategy.visit_with_context_options.<locals>.<genexpr>"  s"      J
27YRR[[% %rv  r   r&  s          r'   visit_with_context_optionsz6TraversalComparatorStrategy.visit_with_context_options  s3     @4@@E J
27J
 E
 
 	
r(   c                    ||k(  S r:   r8   r&  s          r'   visit_plain_objz+TraversalComparatorStrategy.visit_plain_obj&  rQ  r(   c                H    ||t         S |j                  |j                  k(  S r:   )r  r   r&  s          r'   visit_named_ddl_elementz3TraversalComparatorStrategy.visit_named_ddl_element+  s(     < %%yyEJJ&&r(   c                    t        ||d      D ]5  \  \  }}\  }	}
||
k7  rt        c S | j                  j                  ||	f       7 y Nr  r  r?  )r;   rJ   r'  r  r(  r  r%   l_clausel_strr_clauser_strs              r'   visit_prefix_sequencez1TraversalComparatorStrategy.visit_prefix_sequence4  sP     5@%<5
0Xu0% ~%%

!!8X"675
r(   c                   t        ||d      D ]s  \  \  }}}	}
\  }}}}|
|k7  rt        c S | j                  j                  ||f       | j                  j                  ||f       | j                  j                  |	|f       u y )N)NNNNr  r?  )r;   rJ   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
3Xz673Xz67'!%%JJx23JJz:67JJvv./ Jr(   c                0     | j                   |||||fi |S r:   r   r&  s          r'   r   z:TraversalComparatorStrategy.visit_memoized_select_entitiesM  s,     .t--k4u
@B
 	
r(   c                    t        |d       }t        |d       }t        ||d      D ]L  \  \  }	}
\  }}|
|k7  rt        c S ||	|
f   |||f   k7  rt        c S | j                  j	                  |	|f       N y )Nc                *    | d   j                   | d   fS r$  fullnamer   s    r'   <lambda>zCTraversalComparatorStrategy.visit_table_hint_list.<locals>.<lambda>W  s    473C3CT!W2Mr(   )r   c                *    | d   j                   | d   fS r$  r  r  s    r'   r  zCTraversalComparatorStrategy.visit_table_hint_list.<locals>.<lambda>Y  s    T!W%5%5tAw$?r(   r  r  )r   r   r  r   r  )r;   rJ   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N	?

 7Bz\7
2VX 2 8#%%vx()UFH3E-FF%%

!!66"237
r(   c                    ||k(  S r:   r8   r&  s          r'   visit_statement_hint_listz5TraversalComparatorStrategy.visit_statement_hint_liste  rQ  r(   c                    t               r:   r   r&  s          r'   visit_unknown_structurez3TraversalComparatorStrategy.visit_unknown_structurej  s     "##r(   c                t    t        ||d      D ]'  \  \  }}\  }	}
 | j                  ||	fi |r!t        c S  y r~  )r   _compare_dml_values_or_cer  )r;   rJ   r'  r  r(  r  r%   rV  rX  rW  rY  s              r'   r   z4TraversalComparatorStrategy.visit_dml_ordered_valueso  sF    
 #.%<#
HRhr2 2411"b?B?%%	#
r(   c                    t        |d      }t        |d      }||k7  ry|r | j                  ||fi |sy|s||k7  ry | j                  ||fi |syy)Nr   FT)r/   r"  )r;   rX  rY  r%   lvcervces         r'   r  z5TraversalComparatorStrategy._compare_dml_values_or_cez  sl    r/0r/04<,$,,R:r:"(###B1b1r(   c                   ||t        |      t        |      k7  rt        S t        |t        j                        r1t        ||      D ]!  \  }} | j                  ||fi |rt        c S  y t        |t        j                        rt        S t        |j                         |j                               D ]C  \  \  }	}\  }
} | j                  |	|
fi |st        c S  | j                  ||fi |r=t        c S  y r:   )rG  r  r   collections_abcSequencezipr  r   )r;   rJ   r'  r  r(  r  r%   rX  rY  rV  rW  s              r'   r   z,TraversalComparatorStrategy.visit_dml_values  s     <5=CIU,C!!dO445dE*B5t55b"CC)) + 778!! '*$**,&F"R(2r5t55b"CC))5t55b"CC))	 'Gr(   c           	         t        ||d       D ]N  \  }}||t        c S t        ||d       D ],  \  }	}
 | j                  |||	||
fi |t        u s$t        c c S  P y r5  )r   r  r   )r;   rJ   r'  r  r(  r  r%   lseqrseqldrds              r'   r   z2TraversalComparatorStrategy.visit_dml_multi_values  sx     &dETBJD$|t|%%%dDDAB)D)) +r<GI &&
 *) B	 Cr(   c                    |j                   |j                   u rTt        j                  |j                         r2 | j                  |j                  |j                  fi |rddgS t
        S dgS t
        S )Nr  clauses)r  r   is_associativerL  r  r  r;   r  r  r%   s       r'   compare_expression_clauselistz9TraversalComparatorStrategy.compare_expression_clauselist  sj    ==ENN*''64444LL%--35 '	22))"|#!!r(   c                *     | j                   ||fi |S r:   )r  r  s       r'   compare_clauselistz.TraversalComparatorStrategy.compare_clauselist  s    1t11$DDDr(   c                   |j                   |j                   k(  rt        j                  |j                         r | j                  |j                  |j                  fi |r( | j                  |j
                  |j
                  fi |sP | 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_commutativer"  r  r  r  r  s       r'   compare_binaryz*TraversalComparatorStrategy.compare_binary  s    ==ENN*''6&D&&tyy%**CC***4::u{{IbI&D&&tyy%++DD***4::uzzHRHBB))"H--!!r(   c                    |j                  dd      }|j                  dd      }|rg }nddg}|s|j                  d       |S )Ncompare_keysTcompare_valuescallabler   r   )popr  )r;   r  r  r%   r  r  omits          r'   compare_bindparamz-TraversalComparatorStrategy.compare_bindparam  sK    vvnd3 0$7D (DKKr(   N)r#   r   r$   r   r%   r   rp   bool)2rt   ru   rv   rx   r  r  r"   r"  r   r   r0  r   r   r   r:  r   r   r   r   rL  r   r   rP  rS  r\  r^  r`  rb  rd  rg  ri  rk  rn  rx  rz  r|  r  r   r   r  r  r  r   r  r   r   r  r  r  r  r8   r(   r'   r!   r!     s   ,I(\#\ $\ 	\
 
\|4"
&"&.)
,
9*&&
8D
&

&.!


2


	!

'	80
4"
$
	&*.* "E"$r(   r!   c                  (    e Zd Z	 ddZd Zd Zd Zy)r    c                    |f}|r||v r||   j                  |      }|D ]<  }|r|j                  |      rt        c S t        |      t        |      k(  s6t        c S  t        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  sh     X
5K/$U+11*=JCt223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         S t        S r:   )r  r  r  s       r'   compare_tablez+ColIdentityComparatorStrategy.compare_table  s     !%}A>Ar(   N)Tr8   )rt   ru   rv   r  r  r  r  r8   r(   r'   r    r      s    9;"(>>Br(   r    )r#   r   r$   r   r%   r   rp   r  )r3   z	Type[Any]rp   rq   )6
__future__r   collectionsr   collections.abcabcr  r   r   r  ry   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"   r5   r7   r}   ro   r   r   r0   r   r   r2   preload_moduler   MemoizedSlotsr!   r    r8   r(   r'   <module>r     s-   #  )  !             " ,  + * *    O, .$o) odN (#4+ #4Lz2 zz *+D0 DN &' ./ 0L"68J8J L^B$? Br(   