zmc
2023-12-22 9fdbf60165db0400c2e8e6be2dc6e88138ac719a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
U
¸ý°dD‡ã@sddlmZddlmZddlmZddlZddlmZddl    Z    ddl
Z
ddl
m Z ddl
m Z ddl
m Z ddl
mZdd    l
mZdd
l
mZdd l
mZdd l
mZdd l
mZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddl m!Z!e "d¡Z#dZ$dZ%dddddœd d!„Z&d"d#d$œd%d&„Z'Gd'd(„d(eƒZ(Gd)d*„d*e(ƒZ)d+d,„Z*Gd-d.„d.eƒZ+Gd/d0„d0eƒZ,e,ƒZ-d1d2„Z.Gd3d4„d4eƒZ/e/ƒZ0e 1d5¡d6d7„ƒZ2Gd8d9„d9eej3ƒZ4Gd:d;„d;e4ƒZ5dS)<é)Ú annotations)ÚdequeN)Ú zip_longest)ÚAny)ÚCallable)ÚDeque)ÚDict)ÚIterable)ÚOptional)ÚSet)ÚTuple)ÚTypeé)Ú    operators)Ú HasCacheKey)Ú_TraverseInternalsType©Úanon_map)ÚExternallyTraversible)ÚHasTraversalDispatch)ÚHasTraverseInternalsé)Úutil)Ú langhelpers)ÚSelfZ skip_traverseFTrÚbool©Úobj1Úobj2ÚkwÚreturncKs*| dd¡rtƒ}ntƒ}|j||f|ŽS)NÚ use_proxiesF)ÚgetÚColIdentityComparatorStrategyÚTraversalComparatorStrategyÚcompare)rrrZstrategy©r&úPd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\sqlalchemy/sql/traversals.pyr%,s r%z    Type[Any]ÚNone)Útarget_hierarchyr cCsPt |¡D]@}t|dƒr
t|dƒr
| ¡t ||jd¡t ||jd¡q
dS)NÚ_generate_cache_attrsÚ_traverse_internalsÚ#_generated_copy_internals_traversalZ!_generated_get_children_traversal)rZwalk_subclassesÚhasattrr*Ú_copy_internalsZgenerate_dispatchr+Ú _get_children)r)Úclsr&r&r'Ú_preconfigure_traversals6s  ÿýýr1c@sÈeZdZdZdZejrDdddœdd„Zddd    œd
d „Zdd œd d„Z    e
ddddœdd„ƒZ e
ddddœdd„ƒZ e
ddddœdd„ƒZ ddd    œdd„Zdd œdd„Zdddœdd „Zd!dd"œ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&rr()Úotherr cCsdS©Nr&)Úselfr3r&r&r'Ú!_generated_shallow_copy_traversalSsz0HasShallowCopy._generated_shallow_copy_traversalzDict[str, Any])Údr cCsdSr4r&)r5r7r&r&r'Ú&_generated_shallow_from_dict_traversalVsz5HasShallowCopy._generated_shallow_from_dict_traversal©r cCsdSr4r&©r5r&r&r'Ú$_generated_shallow_to_dict_traversal[sz3HasShallowCopy._generated_shallow_to_dict_traversalrÚstrzCallable[[Self, Self], None])Úinternal_dispatchÚ method_namer cCs4d dd„|Dƒ¡}d|›d|›d}t |i|¡S)NÚ
css"|]\}}d|›d|›VqdS)z
    other.z = self.Nr&©Ú.0ÚattrnameÚ_r&r&r'Ú    <genexpr>dsÿz8HasShallowCopy._generate_shallow_copy.<locals>.<genexpr>údef z(self, other):
©ÚjoinrZ_exec_code_in_env©r0r=r>ÚcodeZ    meth_textr&r&r'Ú_generate_shallow_copy^s
 
þz%HasShallowCopy._generate_shallow_copyz Callable[[Self], Dict[str, Any]]cCs4d dd„|Dƒ¡}d|›d|›d}t |i|¡S)Nz,
css"|]\}}d|›d|›VqdS)z    'z': self.Nr&r@r&r&r'rDqsÿz;HasShallowCopy._generate_shallow_to_dict.<locals>.<genexpr>rEz(self):
    return {z}
rFrHr&r&r'Ú_generate_shallow_to_dictks
 
þz(HasShallowCopy._generate_shallow_to_dictz&Callable[[Self, Dict[str, Any]], None]cCs4d dd„|Dƒ¡}d|›d|›d}t |i|¡S)Nr?css$|]\}}d|›d|›dVqdS)z        self.z = d['z']Nr&r@r&r&r'rD~sÿz=HasShallowCopy._generate_shallow_from_dict.<locals>.<genexpr>rEz (self, d):
rFrHr&r&r'Ú_generate_shallow_from_dictxs
 
þz*HasShallowCopy._generate_shallow_from_dictcCsL|j}z|jd}Wn(tk
r<| |jd¡}||_YnX|||ƒdS)Nr8)Ú    __class__Ú__dict__ÚKeyErrorrLr+r8)r5r7r0Zshallow_from_dictr&r&r'Ú_shallow_from_dict…sÿþ z!HasShallowCopy._shallow_from_dictcCsF|j}z|jd}Wn(tk
r<| |jd¡}||_YnX||ƒS)Nr;)rMrNrOrKr+r;)r5r0Zshallow_to_dictr&r&r'Ú_shallow_to_dict—sÿÿ zHasShallowCopy._shallow_to_dictcCsL|j}z|jd}Wn(tk
r<| |jd¡}||_YnX|||ƒdS)Nr6)rMrNrOrJr+r6)r5r3r0Z shallow_copyr&r&r'Ú_shallow_copy_to¨sÿ zHasShallowCopy._shallow_copy_tor)rr cKs|j |j¡}| |¡|S)zCreate a shallow copy©rMÚ__new__rR)r5rÚcr&r&r'Ú_clone¶s
zHasShallowCopy._cloneN)Ú__name__Ú
__module__Ú __qualname__Ú__doc__Ú    __slots__ÚtypingÚ TYPE_CHECKINGr6r8r;Ú classmethodrJrKrLrPrQrRrVr&r&r&r'r2Hs    r2c@s"eZdZdZdZddœdd„ZdS)ÚGenerativeOnTraversalz˜Supplies Generative behavior but making use of traversals to shallow
    copy.
 
    .. seealso::
 
        :class:`sqlalchemy.sql.base.Generative`
 
 
    r&rr9cCs|j}| |¡}| |¡|Sr4rS)r5r0Úsr&r&r'Ú    _generateÊs
 
zGenerativeOnTraversal._generateN)rWrXrYrZr[rar&r&r&r'r_½s
r_cKs| ¡Sr4)rV)Úelementrr&r&r'rVÑsrVc@s0eZdZdZdd„Zddœddddœd    d
„Zd S) ÚHasCopyInternalsr&cKs
tƒ‚dSr4©ÚNotImplementedError)r5rr&r&r'rVØszHasCopyInternals._clone)Ú
omit_attrsz Iterable[str]rr()rfrr cKsvz
|j}Wntk
r YdSXt ||d¡D]@\}}}||krDq0|dk    r0||||f|Ž}|dk    r0t|||ƒq0dS)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+ÚAttributeErrorr.Zrun_generated_dispatchÚsetattr)r5rfrZtraverse_internalsrBÚobjÚmethÚresultr&r&r'r.Ûs
ÿz HasCopyInternals._copy_internalsN)rWrXrYr[rVr.r&r&r&r'rcÕsÿrcc@s¨eZdZdZefdd„Zefdd„Zefdd„Zefdd    „Zefd
d „Z    efd d „Z
efdd„Z efdd„Z dd„Z efdd„Zefdd„Zefdd„Zefdd„ZdS)Ú_CopyInternalsTraversalzmGenerate a _copy_internals internal traversal dispatch for classes
    with a _traverse_internals collection.cKs ||f|ŽSr4r&©r5rBÚparentrbÚclonerr&r&r'Úvisit_clauseelementÿsz+_CopyInternalsTraversal.visit_clauseelementc s‡‡fdd„|DƒS)Ncsg|]}ˆ|fˆŽ‘qSr&r&©rAÚclause©rorr&r'Ú
<listcomp>szD_CopyInternalsTraversal.visit_clauseelement_list.<locals>.<listcomp>r&rmr&rsr'Úvisit_clauseelement_listsz0_CopyInternalsTraversal.visit_clauseelement_listc st‡‡fdd„|DƒƒS)Ncsg|]}ˆ|fˆŽ‘qSr&r&rqrsr&r'rt szE_CopyInternalsTraversal.visit_clauseelement_tuple.<locals>.<listcomp>©Útuplermr&rsr'Úvisit_clauseelement_tuple    sz1_CopyInternalsTraversal.visit_clauseelement_tuplec st‡‡fdd„|DƒƒS)Ncsg|]}ˆ|fˆŽ‘qSr&r&rqrsr&r'rtszD_CopyInternalsTraversal.visit_executable_options.<locals>.<listcomp>rvrmr&rsr'Úvisit_executable_optionssz0_CopyInternalsTraversal.visit_executable_optionsc s‡‡fdd„|DƒS)Ncsh|]}ˆ|fˆŽ’qSr&r&rqrsr&r'Ú    <setcomp>szL_CopyInternalsTraversal.visit_clauseelement_unordered_set.<locals>.<setcomp>r&rmr&rsr'Ú!visit_clauseelement_unordered_setsz9_CopyInternalsTraversal.visit_clauseelement_unordered_setc s‡‡fdd„|DƒS)Ncs$g|]}t‡‡fdd„|Dƒƒ‘qS)c3s|]}ˆ|fˆŽVqdSr4r&)rAZtup_elemrsr&r'rDszP_CopyInternalsTraversal.visit_clauseelement_tuples.<locals>.<listcomp>.<genexpr>rv)rAÚelemrsr&r'rtsÿzF_CopyInternalsTraversal.visit_clauseelement_tuples.<locals>.<listcomp>r&rmr&rsr'Úvisit_clauseelement_tupless þz2_CopyInternalsTraversal.visit_clauseelement_tuplesc s‡‡fdd„| ¡DƒS)Ncsi|]\}}|ˆ|fˆŽ“qSr&r&©rAÚkeyÚvaluersr&r'Ú
<dictcomp>#szK_CopyInternalsTraversal.visit_string_clauseelement_dict.<locals>.<dictcomp>©Úitemsrmr&rsr'Úvisit_string_clauseelement_dict sz7_CopyInternalsTraversal.visit_string_clauseelement_dictc st‡‡fdd„|DƒƒS)Nc3s^|]V\}}}}|dk    r"ˆ|fˆŽnd|dk    r8ˆ|fˆŽnd|dk    rNˆ|fˆŽnd|fVqdSr4r&)rAÚtargetÚonclauseÚfrom_Úflagsrsr&r'rD(s 
ûüzA_CopyInternalsTraversal.visit_setup_join_tuple.<locals>.<genexpr>rvrmr&rsr'Úvisit_setup_join_tuple%sùz._CopyInternalsTraversal.visit_setup_join_tuplecKs|j|||f|ŽSr4©rx)r5rBrnrbrr&r&r'Úvisit_memoized_select_entities2sz6_CopyInternalsTraversal.visit_memoized_select_entitiesc s‡‡fdd„|DƒS)Ncs6g|].\}}t|dƒr"ˆ|fˆŽn|ˆ|fˆŽf‘qS©Ú__clause_element__©r-r~rsr&r'rt9s üÿ
üzD_CopyInternalsTraversal.visit_dml_ordered_values.<locals>.<listcomp>r&rmr&rsr'Úvisit_dml_ordered_values5s ùz0_CopyInternalsTraversal.visit_dml_ordered_valuesc s‡‡fdd„| ¡DƒS)Ncs4i|],\}}t|dƒr"ˆ|fˆŽn|ˆ|fˆŽ“qSrŒrŽr~rsr&r'rDsþz<_CopyInternalsTraversal.visit_dml_values.<locals>.<dictcomp>r‚rmr&rsr'Úvisit_dml_valuesCs üz(_CopyInternalsTraversal.visit_dml_valuesc s ‡‡fdd„‰‡fdd„|DƒS)NcsPt|ttfƒr"‡‡fdd„|DƒSt|tƒrD‡‡fdd„| ¡DƒSdsLt‚dS)Ncs&g|]}t|dƒrˆ|fˆŽn|‘qSrŒrŽ)rAr€rsr&r'rtRsþÿzP_CopyInternalsTraversal.visit_dml_multi_values.<locals>.copy.<locals>.<listcomp>csBi|]:\}}t|dƒr"ˆ|fˆŽn|t|dƒr:ˆ|fˆŽn|“qSrŒrŽr~rsr&r'rYs
ùÿÿzP_CopyInternalsTraversal.visit_dml_multi_values.<locals>.copy.<locals>.<dictcomp>F)Ú
isinstanceÚlistrwÚdictrƒÚAssertionError©r|rsr&r'ÚcopyPs ü
 
öz<_CopyInternalsTraversal.visit_dml_multi_values.<locals>.copycsg|]}‡fdd„|Dƒ‘qS)csg|] }ˆ|ƒ‘qSr&r&)rAZ sub_element©r–r&r'rtjszM_CopyInternalsTraversal.visit_dml_multi_values.<locals>.<listcomp>.<listcomp>r&)rAÚsequencer—r&r'rtisÿzB_CopyInternalsTraversal.visit_dml_multi_values.<locals>.<listcomp>r&rmr&)ror–rr'Úvisit_dml_multi_valuesKs
þz._CopyInternalsTraversal.visit_dml_multi_valuescKs|Sr4r&rmr&r&r'Úvisit_propagate_attrsnsz-_CopyInternalsTraversal.visit_propagate_attrsN)rWrXrYrZrVrprurxryr{r}r„r‰r‹rrr™ršr&r&r&r'rlûs2ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
    ÿ
ÿ
ÿ
     ÿ
$ÿrlcCs$t|dƒr t|ddƒs | ¡}q|S)NrZis_clause_elementF)r-Úgetattrr)rbr&r&r'Ú_flatten_clauseelementws ÿ
rœc@sˆeZdZdZdd„Zdd„Zdd„Zdd    „Zd
d „Zd d „Z    dd„Z
dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zd S)!Ú_GetChildrenTraversalzqGenerate a _children_traversal internal traversal dispatch for classes
    with a _traverse_internals collection.cKsdS©Nr&r&©r5rbrr&r&r'Úvisit_has_cache_key„sz)_GetChildrenTraversal.visit_has_cache_keycKs|fSr4r&rŸr&r&r'rpŠsz)_GetChildrenTraversal.visit_clauseelementcKs|Sr4r&rŸr&r&r'rusz._GetChildrenTraversal.visit_clauseelement_listcKs|Sr4r&rŸr&r&r'rxsz/_GetChildrenTraversal.visit_clauseelement_tuplecKs tj |¡Sr4)Ú    itertoolsÚchainÚ from_iterablerŸr&r&r'r}“sz0_GetChildrenTraversal.visit_clauseelement_tuplescKsdSržr&rŸr&r&r'Ú,visit_fromclause_canonical_column_collection–szB_GetChildrenTraversal.visit_fromclause_canonical_column_collectioncKs| ¡Sr4)ÚvaluesrŸr&r&r'r„™sz5_GetChildrenTraversal.visit_string_clauseelement_dictcKs|Sr4r&rŸr&r&r'Úvisit_fromclause_ordered_setœsz2_GetChildrenTraversal.visit_fromclause_ordered_setcKs|Sr4r&rŸr&r&r'r{Ÿsz7_GetChildrenTraversal.visit_clauseelement_unordered_setcksT|D]J\}}}}|dk    r|Vt|tƒs2t|ƒV|dk    rt|tƒst|ƒVqdSr4)r‘r<rœ)r5rbrr…r†r‡rˆr&r&r'r‰¢s
 
z,_GetChildrenTraversal.visit_setup_join_tuplecKs|j|f|ŽSr4rŠrŸr&r&r'r‹­sz4_GetChildrenTraversal.visit_memoized_select_entitiescks(|D]\}}t|dƒr|V|VqdS)NrrŽ)r5rbrÚkÚvr&r&r'r°s 
z._GetChildrenTraversal.visit_dml_ordered_valuescksNdd„|Dƒ}| |¡}t|ƒD]}||Vq |D]}|V||Vq4dS)NcSsh|]}t|dƒr|’qSrŒrŽ)rAr§r&r&r'rz·s
z9_GetChildrenTraversal.visit_dml_values.<locals>.<setcomp>)Úsymmetric_differenceÚsorted)r5rbrZ expr_valuesZ
str_valuesr§r&r&r'r¶s
  z&_GetChildrenTraversal.visit_dml_valuescKsdSržr&rŸr&r&r'r™Àsz,_GetChildrenTraversal.visit_dml_multi_valuescKsdSržr&rŸr&r&r'ršÃsz+_GetChildrenTraversal.visit_propagate_attrsN)rWrXrYrZr rprurxr}r¤r„r¦r{r‰r‹rrr™ršr&r&r&r'r€s  
rzsqlalchemy.sql.elementscKst|tjjjƒr| |¡}|Sr4)r‘rZ    preloadedZ sql_elementsZ_anonymous_labelZ    apply_map)rbÚnamerrr&r&r'Ú_resolve_name_for_compareÊs
r¬c@sŒeZdZdZdd„Zdd„Zddddd    œd
d „Zd d „Zdd„Zdd„Z    dd„Z
dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Zd8d9„Zd:d;„Zd<d=„Zd>d?„Z d@dA„Z!dBdC„Z"dDdE„Z#dFdG„Z$dHdI„Z%dJdK„Z&dLdM„Z'dNdO„Z(dPdQ„Z)dRdS„Z*dTdU„Z+dVdW„Z,dXdY„Z-dZd[„Z.d\d]„Z/d^d_„Z0d`da„Z1dbS)cr$)ÚstackÚcachercCstƒ|_tƒ|_dSr4)rr­Úsetr®r:r&r&r'Ú__init__Õsûz$TraversalComparatorStrategy.__init__cCs tƒtƒfSr4rr:r&r&r'Ú_memoized_attr_anon_mapÞsz3TraversalComparatorStrategy._memoized_attr_anon_maprrrrcKsä|j}|j}| dd¡}| ||f¡|rà| ¡\}}||krDq&n"|dksT|dkrXdS||f|krfq&| ||f¡|j}    |    |jkrˆdSt|d|    dƒ}
|
rÂ|
||f|Ž} | tkr¶dS| t    krÆq&nd} t
|j |j ddD]\\} } \}}|s| dksØ|dkrqØ| |ks| |k    rdS| | kr*qØ| dk    s8t ‚| dk    sFt ‚|dk    sTt ‚|  | ¡}|dk    s„t |j›d|j| ›d    ƒ‚t | ¡|ƒ}t |¡|ƒ}|dkrº|dk    rØdSqØ|| ||||f|Ž}|tkrØdSqØq&d
S) NÚcompare_annotationsFz
compare_%sr&©NN©Ú    fillvalueZ _annotationsz has no dispatch for 'ú'T)r­r®r"ÚappendÚpopleftÚaddZ__visit_name__r›ÚCOMPARE_FAILEDÚ SKIP_TRAVERSErr+r”ÚdispatchrMZ_dispatch_lookupÚoperatorÚ
attrgetter)r5rrrr­r®r²ÚleftÚrightZ
visit_namerjZattributes_comparedZ left_attrnameZleft_visit_symZright_attrnameZright_visit_symr¼Z
left_childZ right_childZ
comparisonr&r&r'r%ásŒ   
ýýÿþÿþ
 
 ÿ
ÿÿ
z#TraversalComparatorStrategy.comparecKs| ¡}|j||f|ŽSr4)rMr%)r5rrrZ
comparatorr&r&r'Ú compare_inner=sz)TraversalComparatorStrategy.compare_innercKs,| |jdg¡| |jdg¡kr(tSdS©Nrr)Ú_gen_cache_keyrrº©r5rBÚ left_parentr¿Ú right_parentrÀrr&r&r'r As
ÿz/TraversalComparatorStrategy.visit_has_cache_keycKs| | dd¡| dd¡¡S)NZplugin_subject)rÁr"rÄr&r&r'ršIs
 
ÿz1TraversalComparatorStrategy.visit_propagate_attrsc    Kstt||ddD]`\}}|dkr2|dk    rtSqn|dkrBtS| |jdg¡| |jdg¡krtSqdS©Nr´rr)rrºrÃr©    r5rBrÅr¿rÆrÀrÚlÚrr&r&r'Úvisit_has_cache_key_listPsÿz4TraversalComparatorStrategy.visit_has_cache_key_listc    Ksˆt||ddD]t\}}|dkr2|dk    rtSqn|dkrBtS|jrZ| |jdg¡n||jrt| |jdg¡n|krtSqdSrÇ)rrºZ_is_has_cache_keyrÃrrÈr&r&r'ryasÿÿù    z4TraversalComparatorStrategy.visit_executable_optionscKs|j ||f¡dSr4)r­r·rÄr&r&r'rpxsz/TraversalComparatorStrategy.visit_clauseelementc    Ks,t||ddD]\}}|j ||f¡qdS©Nr´©rr­r·)    r5rBrÅr¿rÆrÀrZlcolZrcolr&r&r'r¤}szHTraversalComparatorStrategy.visit_fromclause_canonical_column_collectioncKsdSr4r&rÄr&r&r'Ú*visit_fromclause_derived_column_collectionƒszFTraversalComparatorStrategy.visit_fromclause_derived_column_collectionc    KsLtt|ƒt|ƒddD]0\}}||kr.tS|j ||||f¡qdSrÌ)rrªrºr­r·)    r5rBrÅr¿rÆrÀrZlstrZrstrr&r&r'r„ˆsÿz;TraversalComparatorStrategy.visit_string_clauseelement_dictc Ks\t||ddD]H\}}|dks&|dkr.tSt||ddD]\}    }
|j |    |
f¡q<qdSrÌ©rrºr­r·) r5rBrÅr¿rÆrÀrZltupZrtuprÉrÊr&r&r'r}’s
z6TraversalComparatorStrategy.visit_clauseelement_tuplesc    Ks,t||ddD]\}}|j ||f¡qdSrÌrÍrÈr&r&r'ruœsz4TraversalComparatorStrategy.visit_clauseelement_listc    Ks,t||ddD]\}}|j ||f¡qdSrÌrÍrÈr&r&r'rx¢sz5TraversalComparatorStrategy.visit_clauseelement_tuplecKsv|dkr|dkStƒ}|D]6}t|ƒ |¡D]"}|j||f|Žr,| |¡qq,qt|ƒt|ƒkopt|ƒkSSr4)r¯Ú
differencerÁr¹Úlen)r5Zseq1Zseq2rZ    completedrrZ other_clauser&r&r'Ú_compare_unordered_sequences¨s
z8TraversalComparatorStrategy._compare_unordered_sequencescKs|j||f|ŽSr4)rÒrÄr&r&r'r{´sz=TraversalComparatorStrategy.visit_clauseelement_unordered_setc    Ks,t||ddD]\}}|j ||f¡qdSrÌrÍrÈr&r&r'r¦¹sz8TraversalComparatorStrategy.visit_fromclause_ordered_setcKs||kSr4r&rÄr&r&r'Ú visit_string¿sz(TraversalComparatorStrategy.visit_stringcKs||kSr4r&rÄr&r&r'Úvisit_string_listÄsz-TraversalComparatorStrategy.visit_string_listc Ks¸tt| ¡ƒt| ¡ƒddD]”\}}||kr6tS||||}    }
t|tƒ} t|tƒ} | r’| r’|     |jdg¡|
 |jdg¡kr²tSq| | kr¢tS|    |
krtSqdS)Nr³r´rr)rrªÚkeysrºr‘rrÃr) r5rBrÅr¿rÆrÀrÚlkÚrkÚlvÚrvÚlhcÚrhcr&r&r'Úvisit_string_multi_dictÉs,
 
ÿ
 
ÿþ
z3TraversalComparatorStrategy.visit_string_multi_dictc    Ks^t|tƒ}t|tƒ}|rF|rF| |jdg¡| |jdg¡krZtSn||krRtS||kSdSrÂ)r‘rrÃrrº)    r5rBrÅr¿rÆrÀrrÚrÛr&r&r'Ú visit_multiás
 
ÿþz'TraversalComparatorStrategy.visit_multicKs,t|||jdf|Žt|||jdf|ŽkSrÂ)r¬rrÄr&r&r'Úvisit_anon_nameñsÿÿÿÿþz+TraversalComparatorStrategy.visit_anon_namecKs||kSr4r&rÄr&r&r'Ú visit_booleanúsz)TraversalComparatorStrategy.visit_booleancKs||kSr4r&rÄr&r&r'Úvisit_operatorÿsz*TraversalComparatorStrategy.visit_operatorcKs
| |¡Sr4)Z_compare_type_affinityrÄr&r&r'Ú
visit_typesz&TraversalComparatorStrategy.visit_typecKs||kSr4r&rÄr&r&r'Úvisit_plain_dict    sz,TraversalComparatorStrategy.visit_plain_dictcKs||kSr4r&rÄr&r&r'Úvisit_dialect_optionssz1TraversalComparatorStrategy.visit_dialect_optionscKs |r|r|j|jkS||kSdSr4)Z_annotations_cache_keyrÄr&r&r'Úvisit_annotations_keys ÿÿz1TraversalComparatorStrategy.visit_annotations_keycKs$tdd„|Dƒƒtdd„|DƒƒkS)Ncss|]\}}|j|fVqdSr4)Ú__code__)rAÚfnZc_keyr&r&r'rD!szITraversalComparatorStrategy.visit_with_context_options.<locals>.<genexpr>rvrÄr&r&r'Úvisit_with_context_optionssÿz6TraversalComparatorStrategy.visit_with_context_optionscKs||kSr4r&rÄr&r&r'Úvisit_plain_obj%sz+TraversalComparatorStrategy.visit_plain_objcKs |dkr|dk    rtS|j|jkSr4)rºr«rÄr&r&r'Úvisit_named_ddl_element*sz3TraversalComparatorStrategy.visit_named_ddl_elementc KsDt||ddD]0\\}}\}    }
||
kr.tS|j ||    f¡qdS©Nr³r´rÏ) r5rBrÅr¿rÆrÀrZl_clauseZl_strZr_clauseZr_strr&r&r'Úvisit_prefix_sequence3sÿz1TraversalComparatorStrategy.visit_prefix_sequencecKslt||ddD]X\\}}}    }
\} } } }|
|kr6tS|j || f¡|j || f¡|j |    | f¡qdS)N)NNNNr´rÏ)r5rBrÅr¿rÆrÀrZl_targetZ
l_onclauseZl_fromZl_flagsZr_targetZ
r_onclauseZr_fromZr_flagsr&r&r'r‰>s ý
 
z2TraversalComparatorStrategy.visit_setup_join_tuplecKs|j|||||f|ŽSr4rŠrÄr&r&r'r‹Lsÿÿz:TraversalComparatorStrategy.visit_memoized_select_entitiesc Ks„t|dd„d}t|dd„d}t||ddD]P\\}    }
\} } |
| krNtS||    |
f|| | fkrntS|j |    | f¡q.dS)NcSs|dj|dfSr©Úfullnamer•r&r&r'Ú<lambda>VózCTraversalComparatorStrategy.visit_table_hint_list.<locals>.<lambda>)rcSs|dj|dfSrÂrìr•r&r&r'rîXrïr³r´)rªrrºr­r·) r5rBrÅr¿rÆrÀrZ    left_keysZ
right_keysZltableZldialectZrtableZrdialectr&r&r'Úvisit_table_hint_listSsÿÿz1TraversalComparatorStrategy.visit_table_hint_listcKs||kSr4r&rÄr&r&r'Úvisit_statement_hint_listdsz5TraversalComparatorStrategy.visit_statement_hint_listcKs
tƒ‚dSr4rdrÄr&r&r'Úvisit_unknown_structureisz3TraversalComparatorStrategy.visit_unknown_structurec Ks<t||ddD](\\}}\}    }
|j||    f|ŽstSqdSrê)rÚ_compare_dml_values_or_cerº) r5rBrÅr¿rÆrÀrrÖrØr×rÙr&r&r'rnsÿz4TraversalComparatorStrategy.visit_dml_ordered_valuescKs`t|dƒ}t|dƒ}||kr dS|r8|j||f|Žs8dS|sH||krHdS|j||f|Žs\dSdS)NrFT)r-rÁ)r5rØrÙrZlvceZrvcer&r&r'róys
 
 z5TraversalComparatorStrategy._compare_dml_values_or_cec KsÆ|dks |dks t|ƒt|ƒkr$tSt|tjƒr^t||ƒD] \}}|j||f|Žs:tSq:ndt|tjƒrntSt| ¡| ¡ƒD]@\\}    }\}
}|j|    |
f|Žs¨tS|j||f|Žs€tSq€dSr4)rÑrºr‘Úcollections_abcÚSequenceÚziprórƒ) r5rBrÅr¿rÆrÀrrØrÙrÖr×r&r&r'r‡s    "z,TraversalComparatorStrategy.visit_dml_valuesc Ksrt||ddD]^\}}|dks&|dkr.tSt||ddD].\}    }
|j|||    ||
f|Žtkr<tSq<qdSrÌ)rrºr) r5rBrÅr¿rÆrÀrZlseqZrseqZldÚrdr&r&r'r™žs"ÿÿýÿz2TraversalComparatorStrategy.visit_dml_multi_valuescKsJ|j|jkrBt |j¡r:|j|j|jf|Žr4ddgStSqFdgSntSdS)Nr½Úclauses)r½rZis_associativerÒrørº©r5r¿rÀrr&r&r'Úcompare_expression_clauselist®s  ÿÿz9TraversalComparatorStrategy.compare_expression_clauselistcKs|j||f|ŽSr4)rúrùr&r&r'Úcompare_clauselist¼sz.TraversalComparatorStrategy.compare_clauselistcKsŒ|j|jkr„t |j¡rz|j|j|jf|Žr@|j|j|jf|Žsh|j|j|jf|Žrt|j|j|jf|ŽrtddddgStSqˆddgSntSdS)Nr½Únegater¿rÀ)r½rZis_commutativerÁr¿rÀrºrùr&r&r'Úcompare_binary¿s  ÿþüû 
z*TraversalComparatorStrategy.compare_binarycKs<| dd¡}| dd¡}|r"g}nddg}|s8| d¡|S)NÚ compare_keysTÚcompare_valuesÚcallabler€r)Úpopr·)r5r¿rÀrrþrÿZomitr&r&r'Úcompare_bindparamÑs  
z-TraversalComparatorStrategy.compare_bindparamN)2rWrXrYr[r°r±r%rÁr ršrËryrpr¤rÎr„r}rurxrÒr{r¦rÓrÔrÜrÝrÞrßràrárârãrärçrèrérër‰r‹rðrñròrrórr™rúrûrýrr&r&r&r'r$Òs^    \
 
            r$c@s.eZdZd dd„Zdd„Zdd„Zd    d
„Zd S) r#Tr&cKs\|f}|r ||kr || |¡}|D]2}|r>| |¡r>tSt|ƒt|ƒkr$tSq$tS)z…Compare ColumnElements using proxies and equivalent collections.
 
        This is a comparison strategy specific to the ORM.
        N)ÚunionZshares_lineager»Úhashrº)r5r¿rÀr!Z equivalentsrZ
to_compareZothr&r&r'Úcompare_column_elementâs 
z4ColIdentityComparatorStrategy.compare_column_elementcKs|j||f|ŽSr4©rrùr&r&r'Úcompare_columnösz,ColIdentityComparatorStrategy.compare_columncKs|j||f|ŽSr4rrùr&r&r'Ú compare_labelùsz+ColIdentityComparatorStrategy.compare_labelcKs||kr tStSr4)r»rºrùr&r&r'Ú compare_tableüsz+ColIdentityComparatorStrategy.compare_tableN)Tr&)rWrXrYrrrr    r&r&r&r'r#ás ÿ
r#)6Ú
__future__rÚ collectionsrÚcollections.abcÚabcrôr¡rr½r\rrrrr    r
r r r ÚrÚ    cache_keyrZvisitorsrrrrrrrZ util.typingrÚsymbolr»rºZCOMPARE_SUCCEEDEDr%r1r2r_rVrcrlr.rœrr/Zpreload_moduler¬Z MemoizedSlotsr$r#r&r&r&r'Ú<module>    s^                       
 
u&y    G