
    -h]              	          S SK Jr  S SK Jr  S SKrS SKrSSKJr  SSKJr  SSKJ	r	  SS	KJ
r
  SS
KJr  SSK
Jr  SSK
Jr  SSK
Jr  \
R                   " S5      rSrSr\
R                   " S5      r\
R                   " S5      r\
R                   " S5      r\
R                   " S5      r\
R                   " S5      r\
R                   " S5      rS rS r " S S\5      r " S S\\5      r " S S\" SSS /5      5      rS! r  " S" S#\5      r!\!" 5       r" " S$ S%\5      r# " S& S'\	5      r$\$" 5       r%S( r& " S) S*\	5      r'\'" 5       r(\
RR                  " S+5      S, 5       r* " S- S.\+5      r, " S/ S0\	\
RZ                  5      r. " S1 S2\.5      r/g)3    )deque)
namedtupleN   )	operators)ExtendedInternalTraversal)InternalTraversal   )util)inspect)collections_abc)HasMemoized)py37skip_traverseFTno_cachecache_in_placecall_gen_cache_keystatic_cache_keypropagate_attrs	anon_namec                     UR                  SS5      (       a  [        5       nO
[        5       nUR                  " X40 UD6$ )Nuse_proxiesF)getColIdentityComparatorStrategyTraversalComparatorStrategycompare)obj1obj2kwstrategys       nC:\Users\ROHAN GUPTA\OneDrive\Desktop\mathbuddy-assessment\venv\Lib\site-packages\sqlalchemy/sql/traversals.pyr   r       s9    	vvmU##02.0D-"--    c                    [         R                  " U 5       Hh  n[        US5      (       d  M  UR                  5         [        R                  UUR                  S5        [        R                  UUR                  S5        Mj     g )N_traverse_internals#_generated_copy_internals_traversal!_generated_get_children_traversal)r
   walk_subclasseshasattr_generate_cache_attrs_copy_internalsgenerate_dispatchr#   _get_children)target_hierarchyclss     r    _preconfigure_traversalsr.   )   sn    ##$453-..%%'--''5
 ++''3 6r!   c                       \ rS rSrSr\rSrSr Sr	 Sr
\S 5       r\R                  " S5      S 5       rS	 r\S
 5       rSrg)HasCacheKey9   zpMixin for objects which can produce a cache key.

.. seealso::

    :class:`.CacheKey`

    :ref:`sql_caching`

TN c                 <   U R                   R                  SS5      n[        U5      nU(       a3  [        U SS5      nUc   U R                  n[        R                  XS5      $ U R                   R                  SS5      nUcf  U R                   R                  SS5      nUcG  [        U l        Uc3  U R                  (       a"  [        R                  " SU R                  -  SS9  [        $ [        R                  XS5      $ ! [
         a    [        U l        [        s $ f = f)	zgenerate cache key dispatcher for a new class.

This sets the _generated_cache_key_traversal attribute once called
so should only be called once per class.

inherit_cacheN_cache_key_traversal_generated_cache_key_traversalr#   a  Class %s will not make use of SQL compilation caching as it does not set the 'inherit_cache' attribute to ``True``.  This can have significant performance implications including some performance degradations in comparison to prior SQLAlchemy versions.  Set this attribute to True if this object can make use of the cache key generated by the superclass.  Alternatively, this attribute may be set to False which will disable this warning.cprf)code)__dict__r   boolgetattrr#   AttributeErrorNO_CACHEr6   _cache_key_traversal_visitorr*   _hierarchy_supports_cachingr
   warn__name__)r-   r4   inheritr5   s       r    r(   !HasCacheKey._generate_cache_attrsh   s*    (($?}%#*30F#M #+$+.+B+B( 0AA+K  $'<<#3#3&$  $+'*||'7'7)4($ (/9AC6%-;;			4 8;||	E "( $O/AA+K S & $9AC6#O$s    C= =DDsqlalchemy.sql.elementsc                    [        U 5      nU R                  nX1;   a  X   U4$ [        UR                  5      =X'   nU=R                  S-  sl         UR                  S   nU[        L a
  SU[        '   gXT4nU" U [        5       GH  u  pn
U	c  M  U
[        L a(  U	R                  nU[        L a  SU[        '     gXxU4-  nM=  U
[        L aM  [        R                  R                  n[        XR                   5      (       a  U	R#                  U5      n	XxU	4-  nM  U
[$        L a  UUU	R'                  X5      4-  nM  U	(       d  M  U
[(        L a  XxU	4-  nM  U
[*        L a,  UUU	S   U	S   (       a  U	S   R'                  X5      OS4-  nGM  U
[,        R.                  L a8  U R0                  (       a  XpR2                  -  nGM8  XpR5                  U5      -  nGMN  U
[,        R6                  L d&  U
[,        R8                  L d  U
[,        R:                  L a3  UU[=        U	 Vs/ s H  nUR'                  X5      PM     sn5      4-  nGM  Xz" XXU5      -  nGM     U$ ! [
         a    UR                  5       n GNf = fs  snf )a  return an optional cache key.

The cache key is a tuple which can contain any series of
objects that are hashable and also identifies
this object uniquely within the presence of a larger SQL expression
or statement, for the purposes of caching the resulting query.

The cache key should be based on the SQL compiled structure that would
ultimately be produced.   That is, two structures that are composed in
exactly the same way should produce the same cache key; any difference
in the structures that would affect the SQL string or the type handlers
should result in a different cache key.

If a structure cannot produce a useful cache key, the NO_CACHE
symbol should be added to the anon_map and the method should
return None.

r   r6   TNcompile_state_pluginplugin_subject)id	__class__strindexr9   KeyErrorr(   r=   r>   STATIC_CACHE_KEY_static_cache_key	ANON_NAMEr
   	preloadedsql_elements
isinstance_anonymous_label	apply_mapCALL_GEN_CACHE_KEY_gen_cache_keyCACHE_IN_PLACEPROPAGATE_ATTRSr   dp_annotations_key!_gen_static_annotations_cache_key_annotations_cache_key_gen_annotations_cache_keydp_clauseelement_listdp_clauseelement_tupledp_memoized_select_entitiestuple)selfanon_map
bindparamsidselfr-   id_
dispatcherresultattrnameobjmethsckelementselems                 r    rV   HasCacheKey._gen_cache_key   s   * Dnn$c** &)%88HsNNaN	5&FGJ !!%HX $..$
H4  ++//Ch-1*#o-FY&#~~::H!#'@'@AA!mmH5o-F// **8@ F S~-S/10$ 67  ##34   01@@ ( "&#  !2!E!EE  AA"&A&AAF"&E&Eh&OOF 1 G GG#4#K#KK,HHI $! 14!"03 %)$7$7$M03!"#  $$4:# G$
L k  	5
 224J	5V!"s   I I2I/.I/c                 h    / n[        5       nU R                  X!5      n[        U;   a  g[        X15      $ )a  return a cache key.

The cache key is a tuple which can contain any series of
objects that are hashable and also identifies
this object uniquely within the presence of a larger SQL expression
or statement, for the purposes of caching the resulting query.

The cache key should be based on the SQL compiled structure that would
ultimately be produced.   That is, two structures that are composed in
exactly the same way should produce the same cache key; any difference
in the structures that would affect the SQL string or the type handlers
should result in a different cache key.

The cache key returned by this method is an instance of
:class:`.CacheKey`, which consists of a tuple representing the
cache key, as well as a list of :class:`.BindParameter` objects
which are extracted from the expression.   While two expressions
that produce identical cache key tuples will themselves generate
identical SQL strings, the list of :class:`.BindParameter` objects
indicates the bound values which may have different values in
each one; these bound parameters must be consulted in order to
execute the statement with the correct parameters.

a :class:`_expression.ClauseElement` structure that does not implement
a :meth:`._gen_cache_key` method and does not implement a
:attr:`.traverse_internals` attribute will not be cacheable; when
such an element is embedded into a larger structure, this method
will return None, indicating no cache key is available.

Nrb   rV   r=   CacheKey)ra   rc   	_anon_mapkeys       r    _generate_cache_keyHasCacheKey._generate_cache_key  s7    @ 
J	!!)8y C,,r!   c                 h    / n[        5       nUR                  X25      n[        U;   a  g [        XB5      $ Nrp   )r-   ri   rc   rr   rs   s        r    _generate_cache_key_for_object*HasCacheKey._generate_cache_key_for_objectG  s4    
J	  7y C,,r!   )rA   
__module____qualname____firstlineno____doc__r=   r5   _is_has_cache_keyr?   r4   	__slots__classmethodr(   r
   preload_modulerV   rt   rx   __static_attributes__r2   r!   r    r0   r0   9   s     $"& M( I: :x 
23v 4vp'-R - -r!   r0   c                   8    \ rS rSr\R
                  S 5       rSrg)MemoizedHasCacheKeyiS  c                 ,    [         R                  U 5      $ rw   )r0   rt   ra   s    r    rt   'MemoizedHasCacheKey._generate_cache_keyT  s    ..t44r!   r2   N)rA   rz   r{   r|   r   memoized_instancemethodrt   r   r2   r!   r    r   r   S  s    ((5 )5r!   r   c                   ^    \ rS rSrSrS rS rS rS r\	S 5       r
S rS	 rS
 rS rS rSrg)rq   iY  zxThe key used to identify a SQL statement construct in the
SQL compilation cache.

.. seealso::

    :ref:`sql_caching`

c                     g)z7CacheKey itself is not hashable - hash the .key portionNr2   r   s    r    __hash__CacheKey.__hash__c  s     r!   c                 *  ^ U R                   U;  a  [        U5      =XR                   '   nOXR                      nU R                  (       d  [        U4S j[	        T5       5       5      nO[        U4S jU R                   5       5      n[        XE45      $ )ae  Generate an "offline string" form of this :class:`.CacheKey`

The "offline string" is basically the string SQL for the
statement plus a repr of the bound parameter values in series.
Whereas the :class:`.CacheKey` object is dependent on in-memory
identities in order to work as a cache key, the "offline" version
is suitable for a cache that will work for other processes as well.

The given ``statement_cache`` is a dictionary-like object where the
string form of the statement itself will be cached.  This dictionary
should be in a longer lived scope in order to reduce the time spent
stringifying statements.


c              3   .   >#    U  H
  nTU   v   M     g 7frw   r2   ).0rs   
parameterss     r    	<genexpr>-CacheKey.to_offline_string.<locals>.<genexpr>~  s     N;MC
3;Ms   c              3   p   >#    U  H+  nTR                  UR                  UR                  5      v   M-     g 7frw   )r   rs   value)r   	bindparamr   s     r    r   r     s.       !0I y}}ioo>>!0s   36)rs   rJ   rc   r`   sortedrepr)ra   statement_cache	statementr   sql_strparam_tuples      `  r    to_offline_stringCacheKey.to_offline_stringh  sy      88?*25i.@OHH%%hh/GN6*;MNNK  !%  K
 W*++r!   c                 F    [        U R                  UR                  :H  5      $ rw   )r:   rs   ra   others     r    __eq__CacheKey.__eq__  s    DHH		)**r!   c                 6    U R                   UR                   :X  + $ rw   rs   r   s     r    __ne__CacheKey.__ne__  s    HH		**r!   c                 T    [        U/ 5      n[        U/ 5      nUR                  U5      $ rw   )rq   _diff)r-   leftrightck1ck2s        r    _diff_tuplesCacheKey._diff_tuples  s(    tR ub!yy~r!   c              #     #    U R                   nUR                   n/ nSn X#pvU H  nXh   nXx   nM     [        [        R                  " Xg5      5       Ht  u  nu  pX:  a  M  X:w  d  M  [	        U	[
        5      (       a(  [	        U
[
        5      (       a  UR                  U5          O7SSR                  S U 5       5      UU	U
4-  v   Mv     UR                  S5      ng M  7f)Nr   zkey%s[%d]:  %s != %s c              3   ,   #    U  H
  nS U-  v   M     g7f)z[%d]Nr2   )r   re   s     r    r   ,CacheKey._whats_different.<locals>.<genexpr>  s     #BESFSLEs   )	rs   	enumerater
   zip_longestrR   r`   appendjoinpop)ra   r   k1k2stackpickup_indexs1s2idxe1e2s              r    _whats_differentCacheKey._whats_different  s     XXYYWW  "+4+;+;B+C!DXb%8!"e,,B1F1FS)4GG#BE#BB	8   "E  %yy}- s   A"C(A6Cc                 B    SR                  U R                  U5      5      $ )N, )r   r   r   s     r    r   CacheKey._diff  s    yy..u566r!   c                    U R                   /n/ n[        5       nSnU(       Ga  UR                  S5      nXSL a   UR                  SUS-  -  S-   5        US-  nO[	        U[
        5      (       aW  U(       d  UR                  SUS-   S-  -  S-   5        OUS-  n[        U5      U/-   U-   nUR                  SUS-  -  S-   5        Oq[	        U[        5      (       a1  S	[        U5      R                  < S
[        [        U5      5      < S3nO[        U5      nUR                  SUS-  -  S-   U-   S-   5        U(       a  GM  SSR                  U5      < S3$ )Nr   r    r	   z),r   z()(<z object at >z  r   zCacheKey(key=
))rs   objectr   r   rR   r`   listr0   typerA   hexrH   r   r   )ra   r   outputsentinelindentrm   repr_s          r    __str__CacheKey.__str__  s5   
899Q<Dsfqj1T9:!D%((MM36A:*:#;t"CDaKF J(3e;EMM3&1*#5"<=dK00T
++BtHE
 !JEsfqj1T9EADHI) e, &*YYv%688r!   c                     SSK Jn  U" 5       nU R                   Vs0 s H  o3R                  U-  UR                  _M     sn$ s  snf )zused for testingr   )prefix_anon_map)compilerr   rc   rs   effective_value)ra   r   rr   bs       r    _generate_param_dictCacheKey._generate_param_dict  s=     	.#%	>BooNo	!1#4#44oNNNs   #Ac                     [        UR                  U R                  5       VVs0 s H  u  p4UR                  UR                  _M     nnnUR	                  U5      $ s  snnf rw   )ziprc   rs   r   params)ra   original_cache_keytarget_elementkv	translates         r    _apply_params_to_element!CacheKey._apply_params_to_element  s\     .994??K
K EE177NK 	 

 $$Y//
s   #Ar2   N)rA   rz   r{   r|   r}   r   r   r   r   r   r   r   r   r   r   r   r   r2   r!   r    rq   rq   Y  sI    
,>++  
>79<O0r!   rq   rs   rc   c                 "    U R                  5       $ rw   )_clone)elementr   s     r    r   r     s    >>r!   c                   2   \ rS rSr\=rr\R                  r	\R                  r\R                  r\R                  r\=r=r=rr\r\r\r\rS rS rS rS rS r S r!S r"S	 r#S
 r$S r%S r&S r'S r(S r)S r*S r+S r,S r-S r.S r/S r0S r1S r2S r3S r4Sr5g)	_CacheKeyi  c                 &    [        S U 5       5      $ )Nc              3   B   #    U  H  u  pUR                   U4v   M     g 7frw   __code__r   fnc_keys      r    r   7_CacheKey.visit_with_context_options.<locals>.<genexpr>   s     ?3ibbkk5)3   r`   ra   rh   ri   parentrb   rc   s         r    visit_with_context_options$_CacheKey.visit_with_context_options  s     ?3???r!   c                 :    U[        U5      R                  XE5      4$ rw   )r   rV   r   s         r    visit_inspectable_CacheKey.visit_inspectable  s    '#,55hKLLr!   c                     [        U5      $ rw   r   r   s         r    visit_string_list_CacheKey.visit_string_list  s    Szr!   c                 X    U[        U[        5      (       a  UR                  XE5      4$ U4$ rw   rR   r0   rV   r   s         r    visit_multi_CacheKey.visit_multi  s;    #{++ x4
 	
 	
 	
r!   c                 6   ^^ U[        UU4S jU 5       5      4$ )Nc              3   v   >#    U  H.  n[        U[        5      (       a  UR                  TT5      OUv   M0     g 7frw   r  r   rm   rb   rc   s     r    r   -_CacheKey.visit_multi_list.<locals>.<genexpr>  s@        D dK00 ##Hj9  s   69r   r   s       ``r    visit_multi_list_CacheKey.visit_multi_list  s'       	 
 	
r!   c                 F   ^^ U(       d  gU[        UU4S jU 5       5      4$ )Nr2   c              3   P   >#    U  H  n[        UU4S  jU 5       5      v   M     g7f)c              3   H   >#    U  H  nUR                  TT5      v   M     g 7frw   rV   r  s     r    r   A_CacheKey.visit_has_cache_key_tuples.<locals>.<genexpr>.<genexpr>#  s(       ( ''*== (s   "Nr   )r   tup_elemrb   rc   s     r    r   7_CacheKey.visit_has_cache_key_tuples.<locals>.<genexpr>"  s3      
 !$H	   (   !$s   #&r   r   s       ``r    visit_has_cache_key_tuples$_CacheKey.visit_has_cache_key_tuples  s/      
 !$ 	
 		
r!   c                 F   ^^ U(       d  gU[        UU4S jU 5       5      4$ )Nr2   c              3   F   >#    U  H  oR                  TT5      v   M     g 7frw   r  r  s     r    r   5_CacheKey.visit_has_cache_key_list.<locals>.<genexpr>2  s     L%%h
;;s   !r   r   s       ``r    visit_has_cache_key_list"_CacheKey.visit_has_cache_key_list+  s&     LLL
 	
r!   c                 F   ^^ U(       d  gU[        UU4S jU 5       5      4$ )Nr2   c              3   n   >#    U  H*  nUR                   (       d  M  UR                  TT5      v   M,     g 7frw   )r~   rV   r  s     r    r   5_CacheKey.visit_executable_options.<locals>.<genexpr><  s3      D)) :##Hj99s   55r   r   s       ``r    visit_executable_options"_CacheKey.visit_executable_options5  s-       
 	
r!   c           	      f    U R                  X Vs/ s H  n[        U5      PM     snX4U5      $ s  snf rw   )r  r   )ra   rh   ri   r   rb   rc   os          r    visit_inspectable_list _CacheKey.visit_inspectable_listC  s6     ,,3/3awqz3/:
 	
/s   .
c                 (    U R                  XX4U5      $ rw   )r  r   s         r    visit_clauseelement_tuples$_CacheKey.visit_clauseelement_tuplesJ  s     ..6Z
 	
r!   c           
      t    U(       d  gU[        U Vs/ s H  ofR                  XE5      PM     sn5      4$ s  snf Nr2   r`   rV   )ra   rh   ri   r   rb   rc   rm   s          r    visit_fromclause_ordered_set&_CacheKey.visit_fromclause_ordered_setQ  s:     M&&x<MN
 	
Ms   5
c                     U(       d  gU Vs/ s H  ofR                  XE5      PM     nnU[        [        U5      5      4$ s  snf r'  )rV   r`   r   )ra   rh   ri   r   rb   rc   rm   
cache_keyss           r    !visit_clauseelement_unordered_set+_CacheKey.visit_clauseelement_unordered_set[  sS     BE
BE$5# 	 
 z"
 	

s   ?c                     XR                   4$ rw   )namer   s         r    visit_named_ddl_element!_CacheKey.visit_named_ddl_elementj  s     ((##r!   c                     U(       d  gU[        U VVs/ s H  u  pgUR                  XE5      U4PM     snn5      4$ s  snnf r'  r(  )ra   rh   ri   r   rb   rc   clausestrvals           r    visit_prefix_sequence_CacheKey.visit_prefix_sequenceo  sU       +.*- **8@&I*-
 	
s   <c                 @   ^^^ SU;   m[        UUU4S jU 5       5      $ )Nlegacyc              3   x  >#    U  H  u  pp4T(       a  [        U[        5      (       a  UOUR                  TT5      T(       a  [        U[        5      (       a  UOUb  UR                  TT5      OS Ub  UR                  TT5      OS [        [	        U5       Vs/ s H  oUXE   4PM
     sn5      4v   M     g s  snf 7frw   )rR   rJ   rV   r`   r   )	r   targetonclausefrom_flagsrs   rb   rc   	is_legacys	         r    r   3_CacheKey.visit_setup_join_tuple.<locals>.<genexpr>  s      
 5805 FC!8!8 **8Z@Hc!:!:  ' ,,XzB$ $$Xz:F5MBMSUZ(MBC 58 Cs   BB:B5&B:r   )ra   rh   ri   r   rb   rc   r?  s       ``@r    visit_setup_join_tuple _CacheKey.visit_setup_join_tuple  s+     (	 
 58
 
 	
r!   c                     U(       d  gU[        UR                  5        VVVs/ s H  u  u  pgnUR                  XE5      UU4PM     snnn5      4$ s  snnnf r'  )r`   itemsrV   )	ra   rh   ri   r   rb   rc   r4  dialect_nametexts	            r    visit_table_hint_list_CacheKey.visit_table_hint_list  sm       9<		 9D4.	 --hC$
 9D	
 	
s   #Ac           	      `    U[        [        U5       Vs/ s H  ofX&   4PM
     sn5      4$ s  snf rw   r`   r   ra   rh   ri   r   rb   rc   rs   s          r    visit_plain_dict_CacheKey.visit_plain_dict  s,    %F3K HKSsxK HIJJ Hs   +
c                 D   ^ U[        U4S j[        T5       5       5      4$ )Nc           
   3      >#    U  H7  nU[        [        TU   5       Vs/ s H  nUTU   U   4PM     sn5      4v   M9     g s  snf 7frw   rJ  )r   rE  rs   ri   s      r    r   2_CacheKey.visit_dialect_options.<locals>.<genexpr>  sd       %0L ! (.c,.?'@'@ !#l"3C"89'@ %0s   AAArJ  r   s     `   r    visit_dialect_options_CacheKey.visit_dialect_options  s-       %+3K 
 	
r!   c                 L   ^^^ U[        UUU4S j[        T5       5       5      4$ )Nc              3   R   >#    U  H  nUTU   R                  TT5      4v   M     g 7frw   r  )r   rs   rb   rc   ri   s     r    r   <_CacheKey.visit_string_clauseelement_dict.<locals>.<genexpr>  s.      &C c#h--h
CD&   $'rJ  r   s     ` ``r    visit_string_clauseelement_dict)_CacheKey.visit_string_clauseelement_dict  s+      !#; 
 	
r!   c           
      z   ^^ U[        UU4S j[        U5       Vs/ s H  ofX&   4PM
     sn 5       5      4$ s  snf )Nc              3   ~   >#    U  H2  u  pU[        U[        5      (       a  UR                  TT5      OU4v   M4     g 7frw   r  r   rs   r   rb   rc   s      r    r   4_CacheKey.visit_string_multi_dict.<locals>.<genexpr>  sG       #KJC !%55 ((:>	 #K   :=rJ  rK  s       `` r    visit_string_multi_dict!_CacheKey.visit_string_multi_dict  sG       ?ESk"Jks?k"J 
 	
 #Ks   8c                 J   ^^ U[        UU4S jUR                   5       5      4$ )Nc              3   L   >#    U  H  u  pUR                  TT5      v   M     g 7frw   r  )r   r   colrb   rc   s      r    r   I_CacheKey.visit_fromclause_canonical_column_collection.<locals>.<genexpr>  s*      -FA ""8Z88-s   !$)r`   _collectionr   s       ``r    ,visit_fromclause_canonical_column_collection6_CacheKey.visit_fromclause_canonical_column_collection  s+    
  !oo 
 	
r!   c                     SU[         '   gNTr2   r=   r   s         r    visit_unknown_structure!_CacheKey.visit_unknown_structure  s     "r!   c                 6   ^^ U[        UU4S jU 5       5      4$ )Nc              3      >#    U  H>  u  p[        US 5      (       a  UR                  TT5      OUUR                  TT5      4v   M@     g7f__clause_element__Nr'   rV   r[  s      r    r   5_CacheKey.visit_dml_ordered_values.<locals>.<genexpr>  sS       #&JC	 s$899 &&x<((:>	 #&s   AA	r   r   s       ``r    visit_dml_ordered_values"_CacheKey.visit_dml_ordered_values  s)       #& 
 	
r!   c                 ,  ^^^ [         (       a  U[        UUU4S jT 5       5      4$ T Vs1 s H  n[        US5      (       d  M  UiM     nnU(       a
  ST[        '   gUR	                  T5      nU[        UUU4S j[        U5       5       5      4$ s  snf )Nc              3      >#    U  H?  n[        US 5      (       a  UR                  TT5      OUTU   R                  TT5      4v   MA     g7frn  rp  r   r   rb   rc   ri   s     r    r   -_CacheKey.visit_dml_values.<locals>.<genexpr>  sU       !	 #1&:;; ((:>A--h
C	 !s   AA
ro  Tr2   c              3   R   >#    U  H  nUTU   R                  TT5      4v   M     g 7frw   r  rv  s     r    r   rw    s.      / A--h
CD/rV  )r   r`   r'   r=   symmetric_differencer   )	ra   rh   ri   r   rb   rc   r   expr_values
str_valuess	     ` ``   r    visit_dml_values_CacheKey.visit_dml_values  s    4   !   '*NcWQ8L-M1cKN &*"$99#>J  #J/   Os   BBc                     SU[         '   grh  ri  r   s         r    visit_dml_multi_values _CacheKey.visit_dml_multi_values  s     "r!   r2   N)6rA   rz   r{   r|   rU   visit_has_cache_keyvisit_clauseelementr   r]   visit_clauseelement_listrY   visit_annotations_keyr^   visit_clauseelement_tupler_   visit_memoized_select_entitiesrW   visit_stringvisit_booleanvisit_operatorvisit_plain_objvisit_statement_hint_listrM   
visit_typerO   visit_anon_namerX   visit_propagate_attrsr   r   r   r  r
  r  r  r  r!  r$  r)  r-  r1  r6  rA  rG  rL  rQ  rW  r^  re  rj  rr  r|  r  r   r2   r!   r    r   r     s     1CB-0FF-@@ 1 H H55 # ,::L :: .!JO+@
M
	

 





$

 
.
(K
&	

 


  Dr!   r   c                   $    \ rS rSrS rSS jrSrg)HasCopyInternalsi*  c                     [        5       erw   NotImplementedError)ra   r   s     r    r   HasCopyInternals._clone+  s    !##r!   r2   c                      U R                   n[        R                  XS5       H-  u  pEnXA;   a  M  Uc  M  U" X@U40 UD6nUc  M!  [	        XU5        M/     g! [         a     gf = f)aD  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#   r<   r)   run_generated_dispatchsetattr)ra   
omit_attrsr   traverse_internalsrh   ri   rj   rg   s           r    r)    HasCopyInternals._copy_internals.  sz    	!%!9!9
 $3#I#I&K$
H4 %hc8R8%DF3$
	  		s   A 
A#"A#N)r2   )rA   rz   r{   r|   r   r)   r   r2   r!   r    r  r  *  s    $4r!   r  c                       \ rS rSrSr\4S jr\4S jr\4S jr\4S jr	\4S jr
\4S jr\4S	 jr\4S
 jrS r\4S jr\4S jr\4S jr\4S jrSrg)_CopyInternalsiL  ziGenerate a _copy_internals internal traversal dispatch for classes
with a _traverse_internals collection.c                     U" U40 UD6$ rw   r2   ra   rh   r   r   cloner   s         r    r  "_CopyInternals.visit_clauseelementP  s     W###r!   c                 >    U Vs/ s H  od" U40 UD6PM     sn$ s  snf rw   r2   ra   rh   r   r   r  r   r4  s          r    r  '_CopyInternals.visit_clauseelement_listU  &     3::'f##':::   c           
      P    [        U Vs/ s H  od" U40 UD6PM     sn5      $ s  snf rw   r   r  s          r    r  (_CopyInternals.visit_clauseelement_tupleZ  +     @feF)b)@AA@   #c           
      P    [        U Vs/ s H  od" U40 UD6PM     sn5      $ s  snf rw   r   r  s          r    r  '_CopyInternals.visit_executable_options_  r  r  c                 >    U Vs1 s H  od" U40 UD6iM     sn$ s  snf rw   r2   r  s          r    r-  0_CopyInternals.visit_clauseelement_unordered_setd  r  r  c                 ^   ^^ U Vs/ s H  n[        UU4S jU 5       5      PM     sn$ s  snf )Nc              3   6   >#    U  H  nT" U40 TD6v   M     g 7frw   r2   )r   r  r  r   s     r    r   <_CopyInternals.visit_clauseelement_tuples.<locals>.<genexpr>m  s     =H%'B's   r   )ra   rh   r   r   r  r   rm   s       `` r    r$  )_CopyInternals.visit_clauseelement_tuplesi  s5    
  
 ===
 	
 
s    *c                 N   ^^ [        UU4S jUR                  5        5       5      $ )Nc              3   >   >#    U  H  u  pUT" U40 TD64v   M     g 7frw   r2   )r   rs   r   r  r   s      r    r   A_CopyInternals.visit_string_clauseelement_dict.<locals>.<genexpr>t  s%      
8G*#S%$$%s   )dictrD  r  s       ``r    rW  ._CopyInternals.visit_string_clauseelement_dictq  s%      
8?
 
 	
r!   c                 2   ^^ [        UU4S jU 5       5      $ )Nc              3   ~   >#    U  H2  u  pp4Ub	  T" U40 TD6OS Ub	  T" U40 TD6OS Ub	  T" U40 TD6OS U4v   M4     g 7frw   r2   )r   r;  r<  r=  r>  r  r   s        r    r   8_CopyInternals.visit_setup_join_tuple.<locals>.<genexpr>{  sb      
 5<05 (.'9f##t)1)=h%"%4&+&7e"r"T	 5<r]  r   r  s       ``r    rA  %_CopyInternals.visit_setup_join_tuplex  s!      
 5<
 
 	
r!   c                 *    U R                   " XU40 UD6$ rw   r  )ra   rh   r   r   r   s        r    r  -_CopyInternals.visit_memoized_select_entities  s    --hN2NNr!   c           
          U VVs/ s H*  u  pg[        US5      (       a	  U" U40 UD6OUU" U40 UD64PM,     snn$ s  snnf Nro  r'   ra   rh   r   r   r  r   rs   r   s           r    rr  '_CopyInternals.visit_dml_ordered_values  s^     &
 &
	 3 455 c R e"r"	 &
 	
 
s   1;c           
          UR                  5        VVs0 s H)  u  pg[        US5      (       a	  U" U40 UD6OUU" U40 UD6_M+     snn$ s  snnf r  )rD  r'   r  s           r    r|  _CopyInternals.visit_dml_values  s^    
 &mmo	
 .
 %,C1E$F$Fc R CU!b!"-	
 	
 
s   0Ac           
         ^^ UU4S jnU VVs/ s H  nU Vs/ s H
  o" U5      PM     snPM     snn$ s  snf s  snnf )Nc           
        > [        U [        [        45      (       a-  U  Vs/ s H  n[        US5      (       a	  T" U40 TD6OUPM!     sn$ [        U [        5      (       aZ  U R                  5        VVs0 s H<  u  p![        US5      (       a	  T" U40 TD6OU[        US5      (       a	  T" U40 TD6OU_M>     snn$  es  snf s  snnf r  )rR   r   r`   r'   r  rD  )rm   r   rs   r  r   s      r    copy3_CopyInternals.visit_dml_multi_values.<locals>.copy  s    $u..
 "&	 "& u&:;; %&2& "&	  D$'' '+jjl '3
 #3(<== c(R(  #5*>?? e*r*"# '3  u+s   &B;2AC r2   )	ra   rh   r   r   r  r   r  sequencesub_elements	       ``   r    r  %_CopyInternals.visit_dml_multi_values  sF    
	6 $
# 3;;(;T+(;#
 	
;
s   
:5::c                     U$ rw   r2   r  s         r    r  $_CopyInternals.visit_propagate_attrs  s	     r!   r2   N)rA   rz   r{   r|   r}   r   r  r  r  r  r-  r$  rW  rA  r  rr  r|  r  r  r   r2   r!   r    r  r  L  s    . 06$ 06; 06B 06B 06; 06
 06
 06
O 06
 AG 
 06!
H 06r!   r  c                     [        U S5      (       aG  [        U SS5      (       d5  U R                  5       n [        U S5      (       a  [        U SS5      (       d  M5  U $ )Nro  is_clause_elementF)r'   r;   ro  )r   s    r    _flatten_clauseelementr    s_    
'/
0
0$e: : ,,. '/
0
0$e: :
 Nr!   c                   r    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rSrg)_GetChildreni  zmGenerate a _children_traversal internal traversal dispatch for classes
with a _traverse_internals collection.c                     gr'  r2   ra   r   r   s      r    r   _GetChildren.visit_has_cache_key  s     r!   c                     U4$ rw   r2   r  s      r    r   _GetChildren.visit_clauseelement  s
    zr!   c                     U$ rw   r2   r  s      r    r  %_GetChildren.visit_clauseelement_list      r!   c                     U$ rw   r2   r  s      r    r  &_GetChildren.visit_clauseelement_tuple  r  r!   c                 @    [         R                  R                  U5      $ rw   )	itertoolschainfrom_iterabler  s      r    r$  '_GetChildren.visit_clauseelement_tuples  s    ,,W55r!   c                     gr'  r2   r  s      r    re  9_GetChildren.visit_fromclause_canonical_column_collection      r!   c                 "    UR                  5       $ rw   )valuesr  s      r    rW  ,_GetChildren.visit_string_clauseelement_dict  s    ~~r!   c                     U$ rw   r2   r  s      r    r)  )_GetChildren.visit_fromclause_ordered_set  r  r!   c                     U$ rw   r2   r  s      r    r-  ._GetChildren.visit_clauseelement_unordered_set  r  r!   c              +      #    U HX  u  p4pVUb  Uv   [        U[        5      (       d  [        U5      v   Uc  M4  [        U[        5      (       a  MK  [        U5      v   MZ     g 7frw   )rR   rJ   r  )ra   r   r   r;  r<  r=  r>  s          r    rA  #_GetChildren.visit_setup_join_tuple  sT     07,Vu fc**,V44#Jx,E,E,X66 18s   3A"A"A"c                 (    U R                   " U40 UD6$ rw   r  r  s      r    r  +_GetChildren.visit_memoized_select_entities   s    --g<<<r!   c              +   T   #    U H  u  p4[        US5      (       a  Uv   Uv   M      g 7fr  r  )ra   r   r   r   r   s        r    rr  %_GetChildren.visit_dml_ordered_values  s)     DAq.//G s   &(c              +      #    U Vs1 s H  n[        US5      (       d  M  UiM     nnUR                  U5      n[        U5       H	  nX   v   M     U H  nUv   X   v   M     g s  snf 7fr  )r'   ry  r   )ra   r   r   r   rz  r{  s         r    r|  _GetChildren.visit_dml_values	  sg     ")N'QWQ8L-Mq'N 55g>

#A* $AG*  Os   A*A%A%AA*c                     gr'  r2   r  s      r    r  #_GetChildren.visit_dml_multi_values  r  r!   c                     gr'  r2   r  s      r    r  "_GetChildren.visit_propagate_attrs  r  r!   r2   N)rA   rz   r{   r|   r}   r  r  r  r  r$  re  rW  r)  r-  rA  r  rr  r|  r  r  r   r2   r!   r    r  r    sR    .6 	7=r!   r  rD   c                     [        U[        R                  R                  R                  5      (       a  UR                  U5      nU$ rw   )rR   r
   rP   rQ   rS   rT   )r   r0  rb   r   s       r    _resolve_name_for_comparer    s2    $33DDEE~~h'Kr!   c                   $    \ rS rSrSrS rS rSrg)rb   i%  aA  A map that creates new keys for missing key access.

Produces an incrementing sequence given a series of unique keys.

This is similar to the compiler prefix_anon_map class although simpler.

Inlines the approach taken by :class:`sqlalchemy.util.PopulateDict` which
is otherwise usually used for this type of operation.

c                     SU l         g )Nr   rK   r   s    r    __init__anon_map.__init__1  s	    
r!   c                 b    [        U R                  5      =X'   nU =R                  S-  sl        U$ )Nr   )rJ   rK   )ra   rs   vals      r    __missing__anon_map.__missing__4  s(    djj/)	C

a

r!   r  N)rA   rz   r{   r|   r}   r  r  r   r2   r!   r    rb   rb   %  s    	r!   rb   c                      \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S- r/S.r0g/)0r   i:  )r   cacherb   c                 @    [        5       U l        [        5       U l        g rw   )r   r   setr  r   s    r    r  $TraversalComparatorStrategy.__init__=  s    W
U
r!   c                 *    [        5       [        5       4$ rw   )rb   r   s    r    _memoized_attr_anon_map3TraversalComparatorStrategy._memoized_attr_anon_mapA  s    
HJ''r!   c                 X   U R                   nU R                  nUR                  SS5      nUR                  X45        U(       Gaf  UR	                  5       u  pxXxL a  M   Ub  Uc  gXx4U;   a  M0  UR                  Xx45        UR                  n	XR                  :w  a  g[        U SU	-  S 5      n
U
(       a  U
" Xx40 UD6nU[        L a  gU[        L a  M  OSn[        R                  " UR                  UR                  SS9 H  u  u  pu  pU(       d  US:X  d  US:X  a  M  X:w  d  XLa    gX;   a  M1  U R                  U5      n[        R                  " U5      " U5      n[        R                  " U5      " U5      nUc  Ub    gM  Uc    gU" XUUU40 UD6nU[        L d  M    g   U(       a  GMf  g)	Ncompare_annotationsFz
compare_%sr2   NN	fillvalue_annotationsT)r   r  r   r   popleftadd__visit_name__r;   COMPARE_FAILEDSKIP_TRAVERSEr
   r   r#   dispatchoperator
attrgetter)ra   r   r   r   r   r  r  r   r   
visit_namerj   attributes_comparedleft_attrnameleft_visit_symright_attrnameright_visit_symr  
left_childright_child
comparisons                       r    r   #TraversalComparatorStrategy.compareD  s   



 ff%:EBd\"--/KD}%'IItm$,,J1114
!:DAD&*4&="&=#&.8 (M9 : ')#
 !!(())&/1 +"n4&.8 "3%< "9==8%00?E
&11.A%H%".$  ( %!UKKM
 / EG eN r!   c                 H    U R                  5       nUR                  " X40 UD6$ rw   )rI   r   )ra   r   r   r   
comparators        r    compare_inner)TraversalComparatorStrategy.compare_inner  s$    ^^%
!!$333r!   c                     UR                  U R                  S   / 5      UR                  U R                  S   / 5      :w  a  [        $ g Nr   r   )rV   rb   r  ra   rh   left_parentr   right_parentr   r   s          r    r  /TraversalComparatorStrategy.visit_has_cache_key  sJ     t}}Q/48L8LMM!b9
 
 "!
r!   c                 f    U R                  UR                  SS 5      UR                  SS 5      5      $ )NrG   )r%  r   r)  s          r    r  1TraversalComparatorStrategy.visit_propagate_attrs  s4     !!HH%t,eii8H$.O
 	
r!   c                     [         R                  " X5S S9 HM  u  pxUR                  U R                  S   / 5      UR                  U R                  S   / 5      :w  d  MG  [        s  $    g Nr  r   r   )r
   r   rV   rb   r  	ra   rh   r*  r   r+  r   r   lrs	            r    r  4TraversalComparatorStrategy.visit_has_cache_key_list  s_     $$TDADAa 0"59I9Ia ":  &%	 Br!   c                    [         R                  " X5S S9 Hs  u  pxUR                  (       a  UR                  U R                  S   / 5      OUUR                  (       a  UR                  U R                  S   / 5      OU:w  d  Mm  [
        s  $    g r0  )r
   r   r~   rV   rb   r  r1  s	            r    r  4TraversalComparatorStrategy.visit_executable_options  s}     $$TDADA &&   q!126 &&   q!126 &% Br!   c                 <    U R                   R                  X545        g rw   )r   r   r)  s          r    r  /TraversalComparatorStrategy.visit_clauseelement  s     	

4-(r!   c                 x    [         R                  " X5S S9 H!  u  pxU R                  R                  Xx45        M#     g Nr  r
   r   r   r   )	ra   rh   r*  r   r+  r   r   lcolrcols	            r    re  HTraversalComparatorStrategy.visit_fromclause_canonical_column_collection  s2     **4$GJDJJtl+ Hr!   c                     g rw   r2   r)  s          r    *visit_fromclause_derived_column_collectionFTraversalComparatorStrategy.visit_fromclause_derived_column_collection  s     	r!   c                     [         R                  " [        U5      [        U5      S S9 H3  u  pxXx:w  a  [        s  $ U R                  R                  X7   XX   45        M5     g r:  )r
   r   r   r  r   r   )	ra   rh   r*  r   r+  r   r   lstrrstrs	            r    rW  ;TraversalComparatorStrategy.visit_string_clauseelement_dict  sR     **4L&-4
JD |%%JJtz5;78
r!   c                     [         R                  " X5S S9 HM  u  pxUb  Uc  [        s  $ [         R                  " XxS S9 H!  u  pU R                  R	                  X45        M#     MO     g r:  r
   r   r  r   r   )ra   rh   r*  r   r+  r   r   ltuprtupr2  r3  s              r    r$  6TraversalComparatorStrategy.visit_clauseelement_tuples  s[     **4$GJD|t|%%((tD

!!1&) E	 Hr!   c                 x    [         R                  " X5S S9 H!  u  pxU R                  R                  Xx45        M#     g r:  r;  r1  s	            r    r  4TraversalComparatorStrategy.visit_clauseelement_list  2     $$TDADAJJqf% Br!   c                 x    [         R                  " X5S S9 H!  u  pxU R                  R                  Xx45        M#     g r:  r;  r1  s	            r    r  5TraversalComparatorStrategy.visit_clauseelement_tuple  rM  r!   c                 0   Uc  US L $ [        5       nU HP  n[        U5      R                  U5       H/  nU R                  " XV40 UD6(       d  M  UR                  U5          MN     MR     [	        U5      [	        U5      s=:H  =(       a    [	        U5      :H  $ s  $ rw   )r  
differencer%  r  len)ra   seq1seq2r   	completedr4  other_clauses          r    _compare_unordered_sequences8TraversalComparatorStrategy._compare_unordered_sequences  s    <4<E	F #D	 4 4Y ?%%fAbAAMM,/ !@ 
 9~T77c$i7777r!   c                 (    U R                   " X540 UD6$ rw   )rW  r)  s          r    r-  =TraversalComparatorStrategy.visit_clauseelement_unordered_set  s     00CCCr!   c                 x    [         R                  " X5S S9 H!  u  pxU R                  R                  Xx45        M#     g r:  r;  r1  s	            r    r)  8TraversalComparatorStrategy.visit_fromclause_ordered_set  rM  r!   c                 
    X5:H  $ rw   r2   r)  s          r    r  (TraversalComparatorStrategy.visit_string       }r!   c                 
    X5:H  $ rw   r2   r)  s          r    r   -TraversalComparatorStrategy.visit_string_list  r_  r!   c                 l    [        X#U R                  S   40 UD6[        XEU R                  S   40 UD6:H  $ r(  )r  rb   r)  s          r    r  +TraversalComparatorStrategy.visit_anon_name  sJ     )t}}Q/
35
&q!1
57

 	
r!   c                 
    X5:H  $ rw   r2   r)  s          r    r  )TraversalComparatorStrategy.visit_boolean  r_  r!   c                 
    X5:H  $ rw   r2   r)  s          r    r  *TraversalComparatorStrategy.visit_operator  r_  r!   c                 $    UR                  U5      $ rw   )_compare_type_affinityr)  s          r    r  &TraversalComparatorStrategy.visit_type$  s     **511r!   c                 
    X5:H  $ rw   r2   r)  s          r    rL  ,TraversalComparatorStrategy.visit_plain_dict)  r_  r!   c                 
    X5:H  $ rw   r2   r)  s          r    rQ  1TraversalComparatorStrategy.visit_dialect_options.  r_  r!   c                 X    U(       a   U(       a  UR                   UR                   :H  $ X5:H  $ rw   )r[   r)  s          r    r  1TraversalComparatorStrategy.visit_annotations_key3  s/     E22667
 = r!   c                 L    [        S U 5       5      [        S U 5       5      :H  $ )Nc              3   B   #    U  H  u  pUR                   U4v   M     g 7frw   r   r   s      r    r   ITraversalComparatorStrategy.visit_with_context_options.<locals>.<genexpr>A  s     @4ibbkk5)4r   c              3   B   #    U  H  u  pUR                   U4v   M     g 7frw   r   r   s      r    r   rs  A  s      J
27YRR[[% %r   r   r)  s          r    r   6TraversalComparatorStrategy.visit_with_context_options>  s3     @4@@E J
27J
 E
 
 	
r!   c                 
    X5:H  $ rw   r2   r)  s          r    r  +TraversalComparatorStrategy.visit_plain_objE  r_  r!   c                 L    Uc	  Ub  [         $ UR                  UR                  :H  $ rw   )r  r0  r)  s          r    r1  3TraversalComparatorStrategy.visit_named_ddl_elementJ  s(     < %%yyEJJ&&r!   c                     [         R                  " X5SS9 H3  u  u  pxu  pX:w  a  [        s  $ U R                  R	                  Xy45        M5     g Nr  r  rG  )ra   rh   r*  r   r+  r   r   l_clausel_strr_clauser_strs              r    r6  1TraversalComparatorStrategy.visit_prefix_sequenceS  sK     594D4D<5
0X0 ~%%

!!8"675
r!   c                    [         R                  " X5SS9 Hm  u  u  pxpu  ppX:w  a  [        s  $ U R                  R	                  X{45        U R                  R	                  X45        U R                  R	                  X45        Mo     g )N)NNNNr  rG  )ra   rh   r*  r   r+  r   r   l_target
l_onclausel_froml_flagsr_target
r_onclauser_fromr_flagss                  r    rA  2TraversalComparatorStrategy.visit_setup_join_tuple^  sy     d5MN
3X63X6!%%JJx23JJz67JJv./ Or!   c                 ,    U R                   " XX4U40 UD6$ rw   r  r)  s          r    r  :TraversalComparatorStrategy.visit_memoized_select_entitiesl  s&     --4u
@B
 	
r!   c                     [        US S9n[        US S9n[        R                  " XxSS9 HI  u  u  pu  pX:w  a  [        s  $ X9U
4   X[U4   :w  a  [        s  $ U R                  R                  X45        MK     g )Nc                 *    U S   R                   U S   4$ r(  fullnamerm   s    r    <lambda>CTraversalComparatorStrategy.visit_table_hint_list.<locals>.<lambda>v  s    473C3CT!W2Mr!   r   c                 *    U S   R                   U S   4$ r(  r  r  s    r    r  r  x  s    T!W%5%5tAw$?r!   r  r  )r   r
   r   r  r   r   )ra   rh   r*  r   r+  r   r   	left_keys
right_keysltableldialectrtablerdialects                r    rG  1TraversalComparatorStrategy.visit_table_hint_lists  s     4%MN	?

 7;6F6F\7
2V 2 #%%x()UH3E-FF%%

!!6"237
r!   c                 
    X5:H  $ rw   r2   r)  s          r    r  5TraversalComparatorStrategy.visit_statement_hint_list  r_  r!   c                     [        5       erw   r  r)  s          r    rj  3TraversalComparatorStrategy.visit_unknown_structure  s     "##r!   c                     [         R                  " X5SS9 H*  u  u  pxu  pU R                  " Xy40 UD6(       a  M$  [        s  $    g r{  )r
   r   _compare_dml_values_or_cer  )ra   rh   r*  r   r+  r   r   lklvrkrvs              r    rr  4TraversalComparatorStrategy.visit_dml_ordered_values  sE    
 #'"2"2<#
HRhr 11"?B??%%	#
r!   c                     [        US5      n[        US5      nXE:w  a  gU(       a  U R                  " X40 UD6(       d  gU(       d  X:w  a  gU R                  " X40 UD6(       d  gg)Nro  FT)r'   r%  )ra   r  r  r   lvcervces         r    r  5TraversalComparatorStrategy._compare_dml_values_or_ce  s_    r/0r/0<$,,R:r:"(##B1b1r!   c                    Ub  Ub  [        U5      [        U5      :w  a  [        $ [        U[        R                  5      (       a5  [        X55       H%  u  pxU R                  " Xx40 UD6(       a  M  [        s  $    g [        U[        R                  5      (       a  [        $ [        (       aw  [        UR                  5       UR                  5       5       HJ  u  u  pu  pU R                  " X40 UD6(       d  [        s  $ U R                  " Xx40 UD6(       a  MD  [        s  $    g U H8  n	X9   nX;  a  [        s  $ XY   nU R                  " Xx40 UD6(       a  M2  [        s  $    g rw   )	rR  r  rR   r   Sequencer   r  r   rD  )ra   rh   r*  r   r+  r   r   r  r  r  r  s              r    r|  ,TraversalComparatorStrategy.visit_dml_values  s!    <5=CIU,C!!dO4455d*55bCCC)) + 7788!!T
 '*$**,&F"(255bCC))55bCCC))	 'G X?))Y55bCCC)) r!   c           	          [         R                  " X5S S9 HW  u  pxUb  Uc  [        s  $ [         R                  " XxS S9 H+  u  pU R                  " XXU
40 UD6[        L d  M#  [        s  s  $    MY     g r:  )r
   r   r  r|  )ra   rh   r*  r   r+  r   r   lseqrseqldrds              r    r  2TraversalComparatorStrategy.visit_dml_multi_values  sv     **4$GJD|t|%%**4F)) rGI &&
 *) G	 Hr!   c                     UR                   UR                   L a_  [        R                  " UR                   5      (       a7  U R                  " UR                  UR                  40 UD6(       a  SS/$ [
        $ S/$ [
        $ )Nr  clauses)r  r   is_associativerW  r  r  ra   r   r   r   s       r    compare_clauselist.TraversalComparatorStrategy.compare_clauselist  sk    ==ENN*''6644LL%--35 '	22))"|#!!r!   c                    UR                   UR                   :X  a  [        R                  " UR                   5      (       a  U R                  " UR                  UR                  40 UD6(       a-  U R                  " UR
                  UR
                  40 UD6(       dZ  U R                  " UR                  UR
                  40 UD6(       a1  U R                  " UR
                  UR                  40 UD6(       a  / SQ$ [        $ SS/$ [        $ )N)r  negater   r   r  r  )r  r   is_commutativer%  r   r   r  r  s       r    compare_binary*TraversalComparatorStrategy.compare_binary  s    ==ENN*''66&&tyy%**CC**4::u{{IbI&&tyy%++DD**4::uzzHRHBB))"H--!!r!   c                     UR                  SS5      nUR                  SS5      nU(       a  / nOSS/nU(       d  UR                  S5        U$ )Ncompare_keysTcompare_valuescallabler   rs   )r   r   )ra   r   r   r   r  r  omits          r    compare_bindparam-TraversalComparatorStrategy.compare_bindparam  sK    vvnd3 0$7D (DKKr!   )r  r   N)1rA   rz   r{   r|   r   r  r	  r   r%  r  r  r  r  r  re  r@  rW  r$  r  r  rW  r-  r)  r  r   r  r  r  r  rL  rQ  r  r   r  r1  r6  rA  r  rG  r  rj  rr  r  r|  r  r  r  r  r   r2   r!   r    r   r   :  s    ,I(Ob4"
&&)
,
9*&&
8D
&




2


	!

'	80
4"
$
	&*B* ""$r!   r   c                   2    \ rS rSr SS jrS rS rS rSrg)	r   i  r2   c                     U4nU(       a  X$;   a  XB   R                  U5      nU HH  nU(       a  UR                  U5      (       a  [        s  $ [        U5      [        U5      :X  d  MB  [        s  $    [        $ )zuCompare ColumnElements using proxies and equivalent collections.

This is a comparison strategy specific to the ORM.
)unionshares_lineager  hashr  )ra   r   r   r   equivalentsr   
to_compareoths           r    compare_column_element4ColIdentityComparatorStrategy.compare_column_element	  sg     X
5/$+11*=JCt22377$$dtE{*$$	  "!r!   c                 (    U R                   " X40 UD6$ rw   r  r  s       r    compare_column,ColIdentityComparatorStrategy.compare_column      **4="==r!   c                 (    U R                   " X40 UD6$ rw   r  r  s       r    compare_label+ColIdentityComparatorStrategy.compare_label   r  r!   c                 "    XL a  [         $ [        $ rw   )r  r  r  s       r    compare_table+ColIdentityComparatorStrategy.compare_table#  s     !%}A>Ar!   N)Tr2   )	rA   rz   r{   r|   r  r  r  r  r   r2   r!   r    r   r     s    9;"(>>Br!   r   )0collectionsr   r   r  r  r   r   visitorsr   r   r
   
inspectionr   r   r   r   symbolr  r  COMPARE_SUCCEEDEDr=   rW   rU   rM   rX   rO   r   r.   r   r0   r   rq   r   r   r>   r  r  r)   r  r  r+   r   r  r  rb   MemoizedSlotsr   r   r2   r!   r    <module>r     s    "    / '    "  O, ;;z"-.[[!56 ;;12 ++/0KK$	. W-& W-t5+{ 5H0z*ul&;< H0V|) |~	  ){ 4v 4Dx& xv !"D$ DN  ./ 0t *K"3T5G5G K\B$? Br!   