HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/local/lib/python3.10/dist-packages/sqlalchemy/sql/__pycache__/traversals.cpython-310.pyc
o

���g���@s�ddlmZddlmZddlmZddlZddlmZddl	Z	ddl
Z
ddl
mZddl
mZddl
m
Z
ddl
mZdd	l
mZdd
l
mZddl
mZddl
mZdd
l
mZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddl m!Z!e�"d�Z#dZ$dZ%d?d#d$�Z&d@d(d)�Z'Gd*d+�d+e�Z(Gd,d-�d-e(�Z)d.d/�Z*Gd0d1�d1e�Z+Gd2d3�d3e�Z,e,�Z-d4d5�Z.Gd6d7�d7e�Z/e/�Z0e�1d8�d9d:��Z2Gd;d<�d<eej3�Z4Gd=d>�d>e4�Z5dS)A�)�annotations)�dequeN)�zip_longest)�Any)�Callable)�Deque)�Dict)�Iterable)�Optional)�Set)�Tuple)�Type�)�	operators)�HasCacheKey)�_TraverseInternalsType��anon_map)�ExternallyTraversible)�HasTraversalDispatch)�HasTraverseInternals�)�util)�langhelpers)�Self�
skip_traverseFT�obj1r�obj2�kw�return�boolcKs.|�dd�r
t�}nt�}|j||fi|��S)N�use_proxiesF)�get�ColIdentityComparatorStrategy�TraversalComparatorStrategy�compare)rrr�strategy�r'�D/usr/local/lib/python3.10/dist-packages/sqlalchemy/sql/traversals.pyr%,sr%�target_hierarchy�	Type[Any]�NonecCsPt�|�D] }t|d�r%t|d�r%|��t�||jd�t�||jd�qdS)N�_generate_cache_attrs�_traverse_internals�#_generated_copy_internals_traversal�!_generated_get_children_traversal)r�walk_subclasses�hasattrr,�_copy_internals�generate_dispatchr-�
_get_children)r)�clsr'r'r(�_preconfigure_traversals6s"�����r6c@s�eZdZdZdZejrd'dd�Zd(dd�Zd)d
d�Z	e
d*dd��Ze
d+dd��Ze
d,dd��Z
d(dd�Zd)dd�Zd'd d!�Zd-d$d%�Zd&S).�HasShallowCopyz�attribute-wide operations that are useful for classes that use
    __slots__ and therefore can't operate on their attributes in a dictionary.


    r'�otherrrr+cC�dS�Nr')�selfr8r'r'r(�!_generated_shallow_copy_traversalS�z0HasShallowCopy._generated_shallow_copy_traversal�d�Dict[str, Any]cCr9r:r')r;r>r'r'r(�&_generated_shallow_from_dict_traversalUsz5HasShallowCopy._generated_shallow_from_dict_traversalcCr9r:r'�r;r'r'r(�$_generated_shallow_to_dict_traversalYr=z3HasShallowCopy._generated_shallow_to_dict_traversal�internal_dispatchr�method_name�str�Callable[[Self, Self], None]cC�4d�dd�|D��}d|�d|�d�}t�|i|�S)N�
cs�$�|]
\}}d|�d|��VqdS)z
    other.z = self.Nr'��.0�attrname�_r'r'r(�	<genexpr>a�
��
�z8HasShallowCopy._generate_shallow_copy.<locals>.<genexpr>�def z(self, other):
��joinr�_exec_code_in_env�r5rCrD�code�	meth_textr'r'r(�_generate_shallow_copy[�

�z%HasShallowCopy._generate_shallow_copy� Callable[[Self], Dict[str, Any]]cCs4d�dd�|D��}d|�d|�d�}t�|i|�S)Nz,
csrI)z    'z': self.Nr'rJr'r'r(rNnrOz;HasShallowCopy._generate_shallow_to_dict.<locals>.<genexpr>rPz(self):
    return {z}
rQrTr'r'r(�_generate_shallow_to_dicthrXz(HasShallowCopy._generate_shallow_to_dict�&Callable[[Self, Dict[str, Any]], None]cCrG)NrHcss&�|]\}}d|�d|�d�VqdS)z	    self.z = d['z']Nr'rJr'r'r(rN{s
��
�z=HasShallowCopy._generate_shallow_from_dict.<locals>.<genexpr>rPz(self, d):
rQrTr'r'r(�_generate_shallow_from_dicturXz*HasShallowCopy._generate_shallow_from_dictcC�J|j}z|jd}Wnty|�|jd�}||_Ynw|||�dS)Nr@)�	__class__�__dict__�KeyErrorr\r-r@)r;r>r5�shallow_from_dictr'r'r(�_shallow_from_dict�s��
�z!HasShallowCopy._shallow_from_dictcCsH|j}z
|jd}W||�Sty#|�|jd�}||_Y||�Sw)NrB)r^r_r`rZr-rB)r;r5�shallow_to_dictr'r'r(�_shallow_to_dict�s�	���zHasShallowCopy._shallow_to_dictcCr])Nr<)r^r_r`rWr-r<)r;r8r5�shallow_copyr'r'r(�_shallow_copy_to�s�
�zHasShallowCopy._shallow_copy_torrcKs|j�|j�}|�|�|S)zCreate a shallow copy�r^�__new__rf)r;r�cr'r'r(�_clone�s
zHasShallowCopy._cloneN)r8rrr+)r>r?rr+)rr?)rCrrDrErrF)rCrrDrErrY)rCrrDrErr[)rrrr)�__name__�
__module__�__qualname__�__doc__�	__slots__�typing�
TYPE_CHECKINGr<r@rB�classmethodrWrZr\rbrdrfrjr'r'r'r(r7Hs"





r7c@seZdZdZdZddd�ZdS)	�GenerativeOnTraversalz�Supplies Generative behavior but making use of traversals to shallow
    copy.

    .. seealso::

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


    r'rrcCs|j}|�|�}|�|�|Sr:rg)r;r5�sr'r'r(�	_generate�s

zGenerativeOnTraversal._generateN)rr)rkrlrmrnrorur'r'r'r(rs�s
rscKs|��Sr:)rj)�elementrr'r'r(rj��rjc@s(eZdZdZdd�Zdd�ddd�Zd
S)�HasCopyInternalsr'cK�t��r:��NotImplementedError)r;rr'r'r(rj��zHasCopyInternals._clone)�
omit_attrsr}�
Iterable[str]rrrr+cKsxz|j}Wn
tyYdSwt�||d�D]"\}}}||vr!q|dur9||||fi|��}|dur9t|||�qdS)atReassign 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-�AttributeErrorr2�run_generated_dispatch�setattr)r;r}r�traverse_internalsrL�obj�meth�resultr'r'r(r2�s 
����z HasCopyInternals._copy_internalsN)r}r~rrrr+)rkrlrmrorjr2r'r'r'r(rx�s
�rxc@s�eZdZdZefdd�Zefdd�Zefdd�Zefdd	�Zefd
d�Z	efdd
�Z
efdd�Zefdd�Zdd�Z
efdd�Zefdd�Zefdd�Zefdd�ZdS)�_CopyInternalsTraversalzmGenerate a _copy_internals internal traversal dispatch for classes
    with a _traverse_internals collection.cKs||fi|��Sr:r'�r;rL�parentrv�clonerr'r'r(�visit_clauseelement��z+_CopyInternalsTraversal.visit_clauseelementc���fdd�|D�S)Nc�g|]
}�|fi����qSr'r'�rK�clause�r�rr'r(�
<listcomp>�zD_CopyInternalsTraversal.visit_clauseelement_list.<locals>.<listcomp>r'r�r'r�r(�visit_clauseelement_list�z0_CopyInternalsTraversal.visit_clauseelement_listc�t��fdd�|D��S)Ncr�r'r'r�r�r'r(r�	r�zE_CopyInternalsTraversal.visit_clauseelement_tuple.<locals>.<listcomp>��tupler�r'r�r(�visit_clauseelement_tuple�z1_CopyInternalsTraversal.visit_clauseelement_tuplecr�)Ncr�r'r'r�r�r'r(r�r�zD_CopyInternalsTraversal.visit_executable_options.<locals>.<listcomp>r�r�r'r�r(�visit_executable_optionsr�z0_CopyInternalsTraversal.visit_executable_optionscr�)Ncsh|]
}�|fi����qSr'r'r�r�r'r(�	<setcomp>r�zL_CopyInternalsTraversal.visit_clauseelement_unordered_set.<locals>.<setcomp>r'r�r'r�r(�!visit_clauseelement_unordered_setr�z9_CopyInternalsTraversal.visit_clauseelement_unordered_setcr�)Ncs$g|]}t��fdd�|D���qS)c3s �|]}�|fi���VqdSr:r')rK�tup_elemr�r'r(rNs�zP_CopyInternalsTraversal.visit_clauseelement_tuples.<locals>.<listcomp>.<genexpr>r�)rK�elemr�r'r(r�s��zF_CopyInternalsTraversal.visit_clauseelement_tuples.<locals>.<listcomp>r'r�r'r�r(�visit_clauseelement_tupless�z2_CopyInternalsTraversal.visit_clauseelement_tuplesc���fdd�|��D�S)Ncs"i|]
\}}|�|fi����qSr'r'�rK�key�valuer�r'r(�
<dictcomp> s"zK_CopyInternalsTraversal.visit_string_clauseelement_dict.<locals>.<dictcomp>��itemsr�r'r�r(�visit_string_clauseelement_dictr�z7_CopyInternalsTraversal.visit_string_clauseelement_dictcr�)Nc3sl�|]1\}}}}|dur�|fi���nd|dur!�|fi���nd|dur.�|fi���nd|fVqdSr:r')rK�target�onclause�from_�flagsr�r'r(rN%s�
��
�zA_CopyInternalsTraversal.visit_setup_join_tuple.<locals>.<genexpr>r�r�r'r�r(�visit_setup_join_tuple"s�z._CopyInternalsTraversal.visit_setup_join_tuplecKs|j|||fi|��Sr:�r�)r;rLr�rvrr'r'r(�visit_memoized_select_entities/sz6_CopyInternalsTraversal.visit_memoized_select_entitiescr�)Ncs>g|]\}}t|d�r�|fi���n|�|fi���f�qS��__clause_element__�r1r�r�r'r(r�6s	����zD_CopyInternalsTraversal.visit_dml_ordered_values.<locals>.<listcomp>r'r�r'r�r(�visit_dml_ordered_values2s	�z0_CopyInternalsTraversal.visit_dml_ordered_valuescr�)Ncs<i|]\}}t|d�r�|fi���n|�|fi����qSr�r�r�r�r'r(r�Cs
��z<_CopyInternalsTraversal.visit_dml_values.<locals>.<dictcomp>r�r�r'r�r(�visit_dml_valuesBs�z(_CopyInternalsTraversal.visit_dml_valuescs ��fdd���fdd�|D�S)NcsHt|ttf�r��fdd�|D�St|t�r"��fdd�|��D�SJ�)Ncs*g|]}t|d�r�|fi���n|�qSr�r�)rKr�r�r'r(r�Qs���zP_CopyInternalsTraversal.visit_dml_multi_values.<locals>.copy.<locals>.<listcomp>csJi|]!\}}t|d�r�|fi���n|t|d�r!�|fi���n|�qSr�r�r�r�r'r(r�Zs
����zP_CopyInternalsTraversal.visit_dml_multi_values.<locals>.copy.<locals>.<dictcomp>)�
isinstance�listr��dictr��r�r�r'r(�copyOs�

�z<_CopyInternalsTraversal.visit_dml_multi_values.<locals>.copycsg|]}�fdd�|D��qS)csg|]}�|��qSr'r')rK�sub_element�r�r'r(r�kszM_CopyInternalsTraversal.visit_dml_multi_values.<locals>.<listcomp>.<listcomp>r')rK�sequencer�r'r(r�js��zB_CopyInternalsTraversal.visit_dml_multi_values.<locals>.<listcomp>r'r�r')r�r�rr(�visit_dml_multi_valuesJs
�z._CopyInternalsTraversal.visit_dml_multi_valuescKs|Sr:r'r�r'r'r(�visit_propagate_attrso�z-_CopyInternalsTraversal.visit_propagate_attrsN)rkrlrmrnrjr�r�r�r�r�r�r�r�r�r�r�r�r�r'r'r'r(r��s4
�
�
�
�
�
�	
�
�

�	
�&�r�cCs8t|d�rt|dd�s|��}t|d�rt|dd�r|S)Nr��is_clause_elementF)r1�getattrr�)rvr'r'r(�_flatten_clauseelementxs���r�c@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zd S)!�_GetChildrenTraversalzqGenerate a _children_traversal internal traversal dispatch for classes
    with a _traverse_internals collection.cK�dS�Nr'r'�r;rvrr'r'r(�visit_has_cache_key�sz)_GetChildrenTraversal.visit_has_cache_keycKs|fSr:r'r�r'r'r(r��r|z)_GetChildrenTraversal.visit_clauseelementcK�|Sr:r'r�r'r'r(r���z._GetChildrenTraversal.visit_clauseelement_listcKr�r:r'r�r'r'r(r��r�z/_GetChildrenTraversal.visit_clauseelement_tuplecKstj�|�Sr:)�	itertools�chain�
from_iterabler�r'r'r(r���z0_GetChildrenTraversal.visit_clauseelement_tuplescKr�r�r'r�r'r'r(�,visit_fromclause_canonical_column_collection�r�zB_GetChildrenTraversal.visit_fromclause_canonical_column_collectioncKs|��Sr:)�valuesr�r'r'r(r��rwz5_GetChildrenTraversal.visit_string_clauseelement_dictcKr�r:r'r�r'r'r(�visit_fromclause_ordered_set�r�z2_GetChildrenTraversal.visit_fromclause_ordered_setcKr�r:r'r�r'r'r(r��r�z7_GetChildrenTraversal.visit_clauseelement_unordered_setcksV�|D]%\}}}}|dur|Vt|t�st|�V|dur(t|t�s(t|�VqdSr:)r�rEr�)r;rvrr�r�r�r�r'r'r(r��s�


��z,_GetChildrenTraversal.visit_setup_join_tuplecKs|j|fi|��Sr:r�r�r'r'r(r��sz4_GetChildrenTraversal.visit_memoized_select_entitiescks*�|D]\}}t|d�r|V|VqdS)Nr�r�)r;rvr�k�vr'r'r(r��s�
�z._GetChildrenTraversal.visit_dml_ordered_valuescksP�dd�|D�}|�|�}t|�D]}||Vq|D]
}|V||VqdS)NcSsh|]	}t|d�r|�qSr�r�)rKr�r'r'r(r��sz9_GetChildrenTraversal.visit_dml_values.<locals>.<setcomp>)�symmetric_difference�sorted)r;rvr�expr_values�
str_valuesr�r'r'r(r��s�
�z&_GetChildrenTraversal.visit_dml_valuescKr�r�r'r�r'r'r(r��r�z,_GetChildrenTraversal.visit_dml_multi_valuescKr�r�r'r�r'r'r(r��r�z+_GetChildrenTraversal.visit_propagate_attrsN)rkrlrmrnr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r'r'r'r(r��s"
r�zsqlalchemy.sql.elementscKst|tjjj�r
|�|�}|Sr:)r�r�	preloaded�sql_elements�_anonymous_label�	apply_map)rv�namerrr'r'r(�_resolve_name_for_compare�s
r�c@s�eZdZdZdd�Zdd�Zdfd
d�Zdd�Zdd�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Zd=d>�Zd?d@�ZdAdB�Z dCdD�Z!dEdF�Z"dGdH�Z#dIdJ�Z$dKdL�Z%dMdN�Z&dOdP�Z'dQdR�Z(dSdT�Z)dUdV�Z*dWdX�Z+dYdZ�Z,d[d\�Z-d]d^�Z.d_d`�Z/dadb�Z0dcdd�Z1deS)gr$)�stack�cachercCst�|_t�|_dSr:)rr��setr�rAr'r'r(�__init__�s�z$TraversalComparatorStrategy.__init__cCst�t�fSr:rrAr'r'r(�_memoized_attr_anon_map�r�z3TraversalComparatorStrategy._memoized_attr_anon_maprrrrrrr cKs�|j}|j}|�dd�}|�||f�|r�|��\}}||ur q|dus(|dur*dS||f|vr1q|�||f�|j}	|	|jkrBdSt|d|	d�}
|
ra|
||fi|��}|tur[dS|t	ur`qnd}t
|j|jdd�D]�\\}}
\}}|s|dks~|dkrql||ks�|
|ur�dS||vr�ql|
dus�J�|dus�J�|dus�J�|�|
�}|dus�J|j
�d|j|
�d	���t�|�|�}t�|�|�}|dur�|dur�dSql|dur�dS||||||fi|��}|tur�dSql|sd
S)N�compare_annotationsFz
compare_%sr'�NN��	fillvalue�_annotationsz has no dispatch for '�'T)r�r�r"�append�popleft�add�__visit_name__r��COMPARE_FAILED�
SKIP_TRAVERSErr-�dispatchr^�_dispatch_lookup�operator�
attrgetter)r;rrrr�r�r��left�right�
visit_namer��attributes_compared�
left_attrname�left_visit_sym�right_attrname�right_visit_symr��
left_child�right_child�
comparisonr'r'r(r%�s�
���

��
����Oz#TraversalComparatorStrategy.comparecKs|��}|j||fi|��Sr:)r^r%)r;rrr�
comparatorr'r'r(�
compare_inner@sz)TraversalComparatorStrategy.compare_innercKs,|�|jdg�|�|jdg�krtSdS�Nrr)�_gen_cache_keyrr��r;rL�left_parentr��right_parentr�rr'r'r(r�Ds

��z/TraversalComparatorStrategy.visit_has_cache_keycKs|�|�dd�|�dd��S)N�plugin_subject)r�r"rr'r'r(r�Ls�z1TraversalComparatorStrategy.visit_propagate_attrsc	Ksrt||dd�D]/\}}|dur|durtSq|dur tS|�|jdg�|�|jdg�kr6tSqdS�Nr�rr)rr�r�r�	r;rLrr�rr�r�l�rr'r'r(�visit_has_cache_key_listSs
���z4TraversalComparatorStrategy.visit_has_cache_key_listc	Ks�t||dd�D]9\}}|dur|durtSq|dur tS|jr,|�|jdg�n||jr9|�|jdg�n|kr@tSqdSr)rr��_is_has_cache_keyr�rrr'r'r(r�ds"���	��z4TraversalComparatorStrategy.visit_executable_optionscKs|j�||f�dSr:)r�r�rr'r'r(r�{r�z/TraversalComparatorStrategy.visit_clauseelementc	K�,t||dd�D]\}}|j�||f�qdS�Nr��rr�r�)	r;rLrr�rr�r�lcol�rcolr'r'r(r����zHTraversalComparatorStrategy.visit_fromclause_canonical_column_collectioncKr9r:r'rr'r'r(�*visit_fromclause_derived_column_collection�r�zFTraversalComparatorStrategy.visit_fromclause_derived_column_collectionc	KsLtt|�t|�dd�D]\}}||krtS|j�||||f�qdSr)rr�r�r�r�)	r;rLrr�rr�r�lstr�rstrr'r'r(r��s��z;TraversalComparatorStrategy.visit_string_clauseelement_dictcKs\t||dd�D]$\}}|dus|durtSt||dd�D]\}	}
|j�|	|
f�qqdSr�rr�r�r�)r;rLrr�rr�r�ltup�rtuprrr'r'r(r��s��z6TraversalComparatorStrategy.visit_clauseelement_tuplesc	Kr
rrrr'r'r(r��rz4TraversalComparatorStrategy.visit_clauseelement_listc	Kr
rrrr'r'r(r��rz5TraversalComparatorStrategy.visit_clauseelement_tuplecKsz|dur|duSt�}|D]}t|��|�D]}|j||fi|��r)|�|�nqq
t|�t|�ko:t|�kSSr:)r��
differencer�r��len)r;�seq1�seq2r�	completedr��other_clauser'r'r(�_compare_unordered_sequences�s
��$z8TraversalComparatorStrategy._compare_unordered_sequencescKs|j||fi|��Sr:)rrr'r'r(r��r�z=TraversalComparatorStrategy.visit_clauseelement_unordered_setc	Kr
rrrr'r'r(r��rz8TraversalComparatorStrategy.visit_fromclause_ordered_setcK�||kSr:r'rr'r'r(�visit_string��z(TraversalComparatorStrategy.visit_stringcKrr:r'rr'r'r(�visit_string_list�rz-TraversalComparatorStrategy.visit_string_listc
Ks�tt|���t|���dd�D]J\}}||krtS||||}	}
t|t�}t|t�}|rI|rI|	�|jdg�|
�|jdg�krHtSq||krQtS|	|
krYtSqdS)Nr�r�rr)rr��keysr�r�rr�r)
r;rLrr�rr�r�lk�rk�lv�rv�lhc�rhcr'r'r(�visit_string_multi_dict�s,�


�����z3TraversalComparatorStrategy.visit_string_multi_dictc	Ks\t|t�}t|t�}|r$|r$|�|jdg�|�|jdg�kr"tSdS||kr*tS||kSr�)r�rr�rr�)	r;rLrr�rr�rr&r'r'r'r(�visit_multi�s


���z'TraversalComparatorStrategy.visit_multicKs4t|||jdfi|��t|||jdfi|��kSr�)r�rrr'r'r(�visit_anon_name�s�����z+TraversalComparatorStrategy.visit_anon_namecKrr:r'rr'r'r(�
visit_boolean�rz)TraversalComparatorStrategy.visit_booleancKrr:r'rr'r'r(�visit_operatorrz*TraversalComparatorStrategy.visit_operatorcKs
|�|�Sr:)�_compare_type_affinityrr'r'r(�
visit_types
z&TraversalComparatorStrategy.visit_typecKrr:r'rr'r'r(�visit_plain_dict
rz,TraversalComparatorStrategy.visit_plain_dictcKrr:r'rr'r'r(�visit_dialect_optionsrz1TraversalComparatorStrategy.visit_dialect_optionscKs|r
|r
|j|jkS||kSr:)�_annotations_cache_keyrr'r'r(�visit_annotations_keys��z1TraversalComparatorStrategy.visit_annotations_keycKs$tdd�|D��tdd�|D��kS)Ncss�|]
\}}|j|fVqdSr:)�__code__)rK�fn�c_keyr'r'r(rN"s�zITraversalComparatorStrategy.visit_with_context_options.<locals>.<genexpr>r�rr'r'r(�visit_with_context_optionss
�z6TraversalComparatorStrategy.visit_with_context_optionscKrr:r'rr'r'r(�visit_plain_obj&rz+TraversalComparatorStrategy.visit_plain_objcKs |dur
|dur
tS|j|jkSr:)r�r�rr'r'r(�visit_named_ddl_element+sz3TraversalComparatorStrategy.visit_named_ddl_elementcKsDt||dd�D]\\}}\}	}
||
krtS|j�||	f�qdS�Nr�r�r)r;rLrr�rr�r�l_clause�l_str�r_clause�r_strr'r'r(�visit_prefix_sequence4s��z1TraversalComparatorStrategy.visit_prefix_sequencecKslt||dd�D],\\}}}	}
\}}}
}|
|krtS|j�||f�|j�||f�|j�|	|
f�qdS)N)NNNNr�r)r;rLrr�rr�r�l_target�
l_onclause�l_from�l_flags�r_target�
r_onclause�r_from�r_flagsr'r'r(r�?s�

�z2TraversalComparatorStrategy.visit_setup_join_tuplecKs|j|||||fi|��Sr:r�rr'r'r(r�Ms

��z:TraversalComparatorStrategy.visit_memoized_select_entitiesc
Ks�t|dd�d�}t|dd�d�}t||dd�D](\\}	}
\}}|
|kr'tS||	|
f|||fkr7tS|j�|	|f�qdS)NcS�|dj|dfSr���fullnamer�r'r'r(�<lambda>W�zCTraversalComparatorStrategy.visit_table_hint_list.<locals>.<lambda>)r�cSrGr�rHr�r'r'r(rJYrKr�r�)r�rr�r�r�)
r;rLrr�rr�r�	left_keys�
right_keys�ltable�ldialect�rtable�rdialectr'r'r(�visit_table_hint_listTs���z1TraversalComparatorStrategy.visit_table_hint_listcKrr:r'rr'r'r(�visit_statement_hint_listerz5TraversalComparatorStrategy.visit_statement_hint_listcKryr:rzrr'r'r(�visit_unknown_structurejsz3TraversalComparatorStrategy.visit_unknown_structurecKs@t||dd�D]\\}}\}	}
|j||	fi|��stSqdSr9)r�_compare_dml_values_or_cer�)r;rLrr�rr�rr"r$r#r%r'r'r(r�os���z4TraversalComparatorStrategy.visit_dml_ordered_valuescKsht|d�}t|d�}||krdS|r|j||fi|��sdS|s&||kr&dS|j||fi|��s2dSdS)Nr�FT)r1r�)r;r$r%r�lvce�rvcer'r'r(rUzs

z5TraversalComparatorStrategy._compare_dml_values_or_cecKs�|dus|dust|�t|�krtSt|tj�r2t||�D]\}}|j||fi|��s/tSqdSt|tj�r:tSt|��|���D]$\\}	}\}
}|j|	|
fi|��sYtS|j||fi|��sgtSqCdSr:)rr�r��collections_abc�Sequence�ziprUr�)r;rLrr�rr�rr$r%r"r#r'r'r(r��s" ��"��z,TraversalComparatorStrategy.visit_dml_valuescKsvt||dd�D]1\}}|dus|durtSt||dd�D]\}	}
|j|||	||
fi|��tur7tSqqdSr)rr�r�)r;rLrr�rr�r�lseq�rseq�ld�rdr'r'r(r��s
������z2TraversalComparatorStrategy.visit_dml_multi_valuescKsF|j|jur!t�|j�r|j|j|jfi|��rddgStSdgStS)Nr��clauses)r�r�is_associativerr_r��r;r�r�rr'r'r(�compare_expression_clauselist�s��z9TraversalComparatorStrategy.compare_expression_clauselistcK�|j||fi|��Sr:)rbrar'r'r(�compare_clauselist��z.TraversalComparatorStrategy.compare_clauselistcKs�|j|jkrFt�|j�rB|j|j|jfi|��r$|j|j|jfi|��s<|j|j|jfi|��r@|j|j|jfi|��r@gd�StSddgStS)N)r��negater�r�r�rf)r�r�is_commutativer�r�r�r�rar'r'r(�compare_binary�s����z*TraversalComparatorStrategy.compare_binarycKs<|�dd�}|�dd�}|rg}nddg}|s|�d�|S)N�compare_keysT�compare_values�callabler�r�)�popr�)r;r�r�rrirj�omitr'r'r(�compare_bindparam�s
z-TraversalComparatorStrategy.compare_bindparamN)rrrrrrrr )2rkrlrmror�r�r%r�r�r�rr�r�r�rr�r�r�r�rr�r�rr r(r)r*r+r,r.r/r0r2r6r7r8r>r�r�rRrSrTr�rUr�r�rbrdrhrnr'r'r'r(r$�s`	
^

		r$c@s0eZdZ	ddd�Zdd�Zdd�Zd	d
�ZdS)
r#Tr'cKs\|f}|r||vr||�|�}|D]}|r|�|�rtSt|�t|�kr+tSqtS)z�Compare 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�othr'r'r(�compare_column_element�s�z4ColIdentityComparatorStrategy.compare_column_elementcKrcr:�rurar'r'r(�compare_column�rez,ColIdentityComparatorStrategy.compare_columncKrcr:rvrar'r'r(�
compare_label�rez+ColIdentityComparatorStrategy.compare_labelcKs||urtStSr:)r�r�rar'r'r(�
compare_table�r�z+ColIdentityComparatorStrategy.compare_tableN)Tr')rkrlrmrurwrxryr'r'r'r(r#�s
�r#)rrrrrrrr )r)r*rr+)6�
__future__r�collectionsr�collections.abc�abcrXr�rr�rprrrrr	r
rrr
�r�	cache_keyr�visitorsrrrrrrr�util.typingr�symbolr�r��COMPARE_SUCCEEDEDr%r6r7rsrjrxr�r2r�r�r4�preload_moduler��
MemoizedSlotsr$r#r'r'r'r(�<module>s`



r&}	G