o
    ?ÊÆhñ‚  ã                   @  sø  d dl mZ d dlmZ d dlmZ d dlZd dlmZ d dl	Z	d dl
Z
d dl
mZ d dl
mZ d dl
mZ d dl
mZ d d	l
mZ d d
l
mZ d dl
mZ d dl
mZ d dl
mZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl m!Z! e "d¡Z#dZ$dZ%d?d#d$„Z&d@d(d)„Z'G d*d+„ d+eƒZ(G d,d-„ d-e(ƒZ)d.d/„ Z*G d0d1„ d1eƒZ+G d2d3„ d3eƒZ,e,ƒ Z-d4d5„ Z.G d6d7„ d7eƒZ/e/ƒ Z0e 1d8¡d9d:„ ƒZ2G d;d<„ d<eej3ƒZ4G d=d>„ d>e4ƒZ5dS )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Úboolc                 K  s.   |  dd¡r
tƒ }ntƒ }|j| |fi |¤ŽS )NÚuse_proxiesF)ÚgetÚColIdentityComparatorStrategyÚTraversalComparatorStrategyÚcompare)r   r   r   Ústrategy© r'   úf/var/www/html/HyperOracle/crypto_trader/venv/lib/python3.10/site-packages/sqlalchemy/sql/traversals.pyr%   ,   s   r%   Útarget_hierarchyú	Type[Any]ÚNonec                 C  sP   t  | ¡D ] }t|dƒr%t|dƒr%| ¡  t ||jd¡ t ||jd¡ qd S )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_traversals6   s"   ÿýý€ör6   c                   @  sŠ   e Zd ZdZdZejrd'dd„Zd(dd„Zd)dd„Z	e
d*dd„ƒZe
d+dd„ƒZe
d,dd„ƒZd(dd„Zd)dd„Zd'd d!„Zd-d$d%„Zd&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'   Úotherr   r   r+   c                 C  ó   d S ©Nr'   )Úselfr8   r'   r'   r(   Ú!_generated_shallow_copy_traversalS   ó   z0HasShallowCopy._generated_shallow_copy_traversalÚdúDict[str, Any]c                 C  r9   r:   r'   )r;   r>   r'   r'   r(   Ú&_generated_shallow_from_dict_traversalV   ó   z5HasShallowCopy._generated_shallow_from_dict_traversalc                 C  r9   r:   r'   ©r;   r'   r'   r(   Ú$_generated_shallow_to_dict_traversal[   r=   z3HasShallowCopy._generated_shallow_to_dict_traversalÚinternal_dispatchr   Úmethod_nameÚstrúCallable[[Self, Self], None]c                 C  ó4   d  dd„ |D ƒ¡}d|› d|› d�}t |i |¡S )NÚ
c                 s  ó$   � | ]\}}d |› d|› �V  qdS )z
    other.z = self.Nr'   ©Ú.0ÚattrnameÚ_r'   r'   r(   Ú	<genexpr>d   ó
   € ÿ
ÿz8HasShallowCopy._generate_shallow_copy.<locals>.<genexpr>údef z(self, other):
©Újoinr   Ú_exec_code_in_env©r5   rD   rE   ÚcodeÚ	meth_textr'   r'   r(   Ú_generate_shallow_copy^   ó
   
þz%HasShallowCopy._generate_shallow_copyú Callable[[Self], Dict[str, Any]]c                 C  s4   d  dd„ |D ƒ¡}d|› d|› d�}t |i |¡S )Nz,
c                 s  rJ   )z    'z': self.Nr'   rK   r'   r'   r(   rO   q   rP   z;HasShallowCopy._generate_shallow_to_dict.<locals>.<genexpr>rQ   z(self):
    return {z}
rR   rU   r'   r'   r(   Ú_generate_shallow_to_dictk   rY   z(HasShallowCopy._generate_shallow_to_dictú&Callable[[Self, Dict[str, Any]], None]c                 C  rH   )NrI   c                 s  s&   � | ]\}}d |› d|› d�V  qdS )z	    self.z = d['z']Nr'   rK   r'   r'   r(   rO   ~   s
   € ÿ
ÿz=HasShallowCopy._generate_shallow_from_dict.<locals>.<genexpr>rQ   z(self, d):
rR   rU   r'   r'   r(   Ú_generate_shallow_from_dictx   rY   z*HasShallowCopy._generate_shallow_from_dictc                 C  óJ   | j }z|jd }W n ty   |  |jd¡}||_Y nw || |ƒ d S )Nr@   )Ú	__class__Ú__dict__ÚKeyErrorr]   r-   r@   )r;   r>   r5   Úshallow_from_dictr'   r'   r(   Ú_shallow_from_dict…   s   ÿþ
úz!HasShallowCopy._shallow_from_dictc                 C  sH   | j }z
|jd }W || ƒS  ty#   |  |jd¡}||_Y || ƒS w )NrC   )r_   r`   ra   r[   r-   rC   )r;   r5   Úshallow_to_dictr'   r'   r(   Ú_shallow_to_dict—   s   ÿ	úÿúzHasShallowCopy._shallow_to_dictc                 C  r^   )Nr<   )r_   r`   ra   rX   r-   r<   )r;   r8   r5   Úshallow_copyr'   r'   r(   Ú_shallow_copy_to¨   s   ÿ
ûzHasShallowCopy._shallow_copy_tor   r   c                 K  s   | j  | j ¡}|  |¡ |S )zCreate a shallow copy©r_   Ú__new__rg   )r;   r   Úcr'   r'   r(   Ú_clone¶   s   
zHasShallowCopy._cloneN)r8   r   r   r+   )r>   r?   r   r+   )r   r?   )rD   r   rE   rF   r   rG   )rD   r   rE   rF   r   rZ   )rD   r   rE   rF   r   r\   )r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__ÚtypingÚTYPE_CHECKINGr<   r@   rC   ÚclassmethodrX   r[   r]   rc   re   rg   rk   r'   r'   r'   r(   r7   H   s"    





r7   c                   @  s   e Zd ZdZdZddd„ZdS )	ÚGenerativeOnTraversalz˜Supplies Generative behavior but making use of traversals to shallow
    copy.

    .. seealso::

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


    r'   r   r   c                 C  s   | j }| |¡}|  |¡ |S r:   rh   )r;   r5   Úsr'   r'   r(   Ú	_generateÊ   s   

zGenerativeOnTraversal._generateN)r   r   )rl   rm   rn   ro   rp   rv   r'   r'   r'   r(   rt   ½   s    
rt   c                 K  s   |   ¡ S r:   )rk   )Úelementr   r'   r'   r(   rk   Ñ   ó   rk   c                   @  s(   e Zd ZdZdd„ Zddœddd„ZdS )ÚHasCopyInternalsr'   c                 K  ó   t ƒ ‚r:   ©ÚNotImplementedError)r;   r   r'   r'   r(   rk   Ø   ó   zHasCopyInternals._clone)Ú
omit_attrsr~   úIterable[str]r   r   r   r+   c                K  sx   z| j }W n
 ty   Y dS w t | |d¡D ]"\}}}||v r!q|dur9||| |fi |¤Ž}|dur9t| ||ƒ qdS )at  Reassign internal elements to be clones of themselves.

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

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

        Nr.   )r-   ÚAttributeErrorr2   Úrun_generated_dispatchÚsetattr)r;   r~   r   Útraverse_internalsrM   ÚobjÚmethÚresultr'   r'   r(   r2   Û   s    
þÿ€÷z HasCopyInternals._copy_internalsN)r~   r   r   r   r   r+   )rl   rm   rn   rp   rk   r2   r'   r'   r'   r(   ry   Õ   s
    ÿry   c                   @  s¨   e Zd ZdZefdd„Zefdd„Zefdd„Zefdd	„Zefd
d„Z	efdd„Z
efdd„Zefdd„Zdd„ Zefdd„Zefdd„Zefdd„Zefdd„ZdS )Ú_CopyInternalsTraversalzmGenerate a _copy_internals internal traversal dispatch for classes
    with a _traverse_internals collection.c                 K  s   ||fi |¤ŽS r:   r'   ©r;   rM   Úparentrw   Úcloner   r'   r'   r(   Úvisit_clauseelementÿ   ó   z+_CopyInternalsTraversal.visit_clauseelementc                   ó   ‡ ‡fdd„|D ƒS )Nc                   ó   g | ]
}ˆ |fi ˆ¤Ž‘qS r'   r'   ©rL   Úclause©rŠ   r   r'   r(   Ú
<listcomp>  ó    zD_CopyInternalsTraversal.visit_clauseelement_list.<locals>.<listcomp>r'   rˆ   r'   r‘   r(   Úvisit_clauseelement_list  ó   z0_CopyInternalsTraversal.visit_clauseelement_listc                   ó   t ‡ ‡fdd„|D ƒƒS )Nc                   rŽ   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_tuplec                   r–   )Nc                   rŽ   r'   r'   r�   r‘   r'   r(   r’     r“   zD_CopyInternalsTraversal.visit_executable_options.<locals>.<listcomp>r—   rˆ   r'   r‘   r(   Úvisit_executable_options  rš   z0_CopyInternalsTraversal.visit_executable_optionsc                   r�   )Nc                   s   h | ]
}ˆ |fi ˆ¤Ž’qS r'   r'   r�   r‘   r'   r(   Ú	<setcomp>  r“   zL_CopyInternalsTraversal.visit_clauseelement_unordered_set.<locals>.<setcomp>r'   rˆ   r'   r‘   r(   Ú!visit_clauseelement_unordered_set  r•   z9_CopyInternalsTraversal.visit_clauseelement_unordered_setc                   r�   )Nc                   s$   g | ]}t ‡ ‡fd d„|D ƒƒ‘qS )c                 3  s    � | ]}ˆ |fi ˆ¤ŽV  qd S r:   r'   )rL   Útup_elemr‘   r'   r(   rO     s   € zP_CopyInternalsTraversal.visit_clauseelement_tuples.<locals>.<listcomp>.<genexpr>r—   )rL   Úelemr‘   r'   r(   r’     s    ÿÿzF_CopyInternalsTraversal.visit_clauseelement_tuples.<locals>.<listcomp>r'   rˆ   r'   r‘   r(   Úvisit_clauseelement_tuples  s   þz2_CopyInternalsTraversal.visit_clauseelement_tuplesc                   ó   ‡ ‡fdd„|  ¡ D ƒS )Nc                   s"   i | ]\}}|ˆ |fi ˆ¤Ž“qS r'   r'   ©rL   ÚkeyÚvaluer‘   r'   r(   Ú
<dictcomp>#  s   " zK_CopyInternalsTraversal.visit_string_clauseelement_dict.<locals>.<dictcomp>©Úitemsrˆ   r'   r‘   r(   Úvisit_string_clauseelement_dict   rš   z7_CopyInternalsTraversal.visit_string_clauseelement_dictc                   r–   )Nc                 3  sl   � | ]1\}}}}|d urˆ |fi ˆ¤Žnd |d ur!ˆ |fi ˆ¤Žnd |d ur.ˆ |fi ˆ¤Žnd |fV  qd S r:   r'   )rL   ÚtargetÚonclauseÚfrom_Úflagsr‘   r'   r(   rO   (  s   € 
ûü
ÿzA_CopyInternalsTraversal.visit_setup_join_tuple.<locals>.<genexpr>r—   rˆ   r'   r‘   r(   Úvisit_setup_join_tuple%  s   ùz._CopyInternalsTraversal.visit_setup_join_tuplec                 K  s   | j |||fi |¤ŽS r:   ©r™   )r;   rM   r‰   rw   r   r'   r'   r(   Úvisit_memoized_select_entities2  s   z6_CopyInternalsTraversal.visit_memoized_select_entitiesc                   r�   )Nc                   s>   g | ]\}}t |d ƒrˆ |fi ˆ¤Žn|ˆ |fi ˆ¤Žf‘qS ©Ú__clause_element__©r1   r¢   r‘   r'   r(   r’   9  s    üÿüÿzD_CopyInternalsTraversal.visit_dml_ordered_values.<locals>.<listcomp>r'   rˆ   r'   r‘   r(   Úvisit_dml_ordered_values5  s   ùz0_CopyInternalsTraversal.visit_dml_ordered_valuesc                   r¡   )Nc                   s<   i | ]\}}t |d ƒrˆ |fi ˆ¤Žn|ˆ |fi ˆ¤Ž“qS r°   r²   r¢   r‘   r'   r(   r¥   D  s
    þýz<_CopyInternalsTraversal.visit_dml_values.<locals>.<dictcomp>r¦   rˆ   r'   r‘   r(   Úvisit_dml_valuesC  s   üz(_CopyInternalsTraversal.visit_dml_valuesc                   s    ‡ ‡fdd„‰‡fdd„|D ƒS )Nc                   sH   t | ttfƒr‡ ‡fdd„| D ƒS t | tƒr"‡ ‡fdd„|  ¡ D ƒS J ‚)Nc                   s*   g | ]}t |d ƒrˆ |fi ˆ¤Žn|‘qS r°   r²   )rL   r¤   r‘   r'   r(   r’   R  s    þÿýzP_CopyInternalsTraversal.visit_dml_multi_values.<locals>.copy.<locals>.<listcomp>c                   sJ   i | ]!\}}t |d ƒrˆ |fi ˆ¤Žn|t |d ƒr!ˆ |fi ˆ¤Žn|“qS r°   r²   r¢   r‘   r'   r(   r¥   Y  s    
ùÿÿøzP_CopyInternalsTraversal.visit_dml_multi_values.<locals>.copy.<locals>.<dictcomp>)Ú
isinstanceÚlistr˜   Údictr§   ©rŸ   r‘   r'   r(   ÚcopyP  s   ü

öz<_CopyInternalsTraversal.visit_dml_multi_values.<locals>.copyc                   s   g | ]}‡ fd d„|D ƒ‘qS )c                   s   g | ]}ˆ |ƒ‘qS r'   r'   )rL   Úsub_element©r¹   r'   r(   r’   j  s    zM_CopyInternalsTraversal.visit_dml_multi_values.<locals>.<listcomp>.<listcomp>r'   )rL   Úsequencer»   r'   r(   r’   i  s    ÿÿzB_CopyInternalsTraversal.visit_dml_multi_values.<locals>.<listcomp>r'   rˆ   r'   )rŠ   r¹   r   r(   Úvisit_dml_multi_valuesK  s   
þz._CopyInternalsTraversal.visit_dml_multi_valuesc                 K  s   |S r:   r'   rˆ   r'   r'   r(   Úvisit_propagate_attrsn  rA   z-_CopyInternalsTraversal.visit_propagate_attrsN)rl   rm   rn   ro   rk   r‹   r”   r™   r›   r�   r    r¨   r­   r¯   r³   r´   r½   r¾   r'   r'   r'   r(   r‡   û   s4    
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ	
ÿ
ÿ
ÿ	
ÿ$ÿr‡   c                 C  s8   t | dƒrt| ddƒs|  ¡ } t | dƒrt| ddƒr| S )Nr±   Úis_clause_elementF)r1   Úgetattrr±   )rw   r'   r'   r(   Ú_flatten_clauseelementw  s   ÿýÿrÁ   c                   @  sˆ   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd S )!Ú_GetChildrenTraversalzqGenerate a _children_traversal internal traversal dispatch for classes
    with a _traverse_internals collection.c                 K  ó   dS ©Nr'   r'   ©r;   rw   r   r'   r'   r(   Úvisit_has_cache_key„  s   z)_GetChildrenTraversal.visit_has_cache_keyc                 K  s   |fS r:   r'   rÅ   r'   r'   r(   r‹   Š  r}   z)_GetChildrenTraversal.visit_clauseelementc                 K  ó   |S r:   r'   rÅ   r'   r'   r(   r”   �  r=   z._GetChildrenTraversal.visit_clauseelement_listc                 K  rÇ   r:   r'   rÅ   r'   r'   r(   r™   �  r=   z/_GetChildrenTraversal.visit_clauseelement_tuplec                 K  s   t j |¡S r:   )Ú	itertoolsÚchainÚfrom_iterablerÅ   r'   r'   r(   r    “  ó   z0_GetChildrenTraversal.visit_clauseelement_tuplesc                 K  rÃ   rÄ   r'   rÅ   r'   r'   r(   Ú,visit_fromclause_canonical_column_collection–  r=   zB_GetChildrenTraversal.visit_fromclause_canonical_column_collectionc                 K  s   |  ¡ S r:   )ÚvaluesrÅ   r'   r'   r(   r¨   ™  rx   z5_GetChildrenTraversal.visit_string_clauseelement_dictc                 K  rÇ   r:   r'   rÅ   r'   r'   r(   Úvisit_fromclause_ordered_setœ  r=   z2_GetChildrenTraversal.visit_fromclause_ordered_setc                 K  rÇ   r:   r'   rÅ   r'   r'   r(   r�   Ÿ  r=   z7_GetChildrenTraversal.visit_clauseelement_unordered_setc                 k  sV   � |D ]%\}}}}|d ur|V  t |tƒst|ƒV  |d ur(t |tƒs(t|ƒV  qd S r:   )rµ   rF   rÁ   )r;   rw   r   r©   rª   r«   r¬   r'   r'   r(   r­   ¢  s   €


€øz,_GetChildrenTraversal.visit_setup_join_tuplec                 K  s   | j |fi |¤ŽS r:   r®   rÅ   r'   r'   r(   r¯   ­  s   z4_GetChildrenTraversal.visit_memoized_select_entitiesc                 k  s*   � |D ]\}}t |dƒr|V  |V  qd S )Nr±   r²   )r;   rw   r   ÚkÚvr'   r'   r(   r³   °  s   €
ýz._GetChildrenTraversal.visit_dml_ordered_valuesc                 k  sP   � dd„ |D ƒ}|  |¡}t|ƒD ]}|| V  q|D ]
}|V  || V  qd S )Nc                 S  s   h | ]	}t |d ƒr|’qS r°   r²   )rL   rÏ   r'   r'   r(   rœ   ·  s    z9_GetChildrenTraversal.visit_dml_values.<locals>.<setcomp>)Úsymmetric_differenceÚsorted)r;   rw   r   Úexpr_valuesÚ
str_valuesrÏ   r'   r'   r(   r´   ¶  s   €
þz&_GetChildrenTraversal.visit_dml_valuesc                 K  rÃ   rÄ   r'   rÅ   r'   r'   r(   r½   À  r=   z,_GetChildrenTraversal.visit_dml_multi_valuesc                 K  rÃ   rÄ   r'   rÅ   r'   r'   r(   r¾   Ã  r=   z+_GetChildrenTraversal.visit_propagate_attrsN)rl   rm   rn   ro   rÆ   r‹   r”   r™   r    rÌ   r¨   rÎ   r�   r­   r¯   r³   r´   r½   r¾   r'   r'   r'   r(   rÂ   €  s"    
rÂ   zsqlalchemy.sql.elementsc                 K  s   t |tjjjƒr| |¡}|S r:   )rµ   r   Ú	preloadedÚsql_elementsÚ_anonymous_labelÚ	apply_map)rw   Únamer   r   r'   r'   r(   Ú_resolve_name_for_compareÊ  s   
rÚ   c                   @  s‚  e Zd ZdZdd„ Zdd„ Zdfdd„Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Zd=d>„ Zd?d@„ ZdAdB„ 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Úcacher   c                 C  s   t ƒ | _tƒ | _d S r:   )r   rÛ   ÚsetrÜ   rB   r'   r'   r(   Ú__init__Õ  s   ûz$TraversalComparatorStrategy.__init__c                 C  s   t ƒ t ƒ fS r:   r   rB   r'   r'   r(   Ú_memoized_attr_anon_mapÞ  rË   z3TraversalComparatorStrategy._memoized_attr_anon_mapr   r   r   r   r   r   r    c                 K  sÔ  | j }| j}| dd¡}| ||f¡ |rè| ¡ \}}||u r q|d u s(|d u r*dS ||f|v r1q| ||f¡ |j}	|	|jkrBdS t| d|	 d ƒ}
|
ra|
||fi |¤Ž}|tu r[dS |t	u r`qnd}t
|j|jdd�D ]y\\}}\}}|s|dks~|dkrql||ks‡||urŠ dS ||v r�ql|d us•J ‚|d us›J ‚|d us¡J ‚|  |¡}|d us¸J | j› d| j| › d	�ƒ‚t |¡|ƒ}t |¡|ƒ}|d u rÒ|d urÑ dS ql||||||fi |¤Ž}|tu rå dS ql|sd
S )NÚcompare_annotationsFz
compare_%sr'   ©NN©Ú	fillvalueÚ_annotationsz has no dispatch for 'ú'T)rÛ   rÜ   r"   ÚappendÚpopleftÚaddÚ__visit_name__rÀ   ÚCOMPARE_FAILEDÚSKIP_TRAVERSEr   r-   Údispatchr_   Ú_dispatch_lookupÚoperatorÚ
attrgetter)r;   r   r   r   rÛ   rÜ   rà   ÚleftÚrightÚ
visit_namer…   Úattributes_comparedÚleft_attrnameÚleft_visit_symÚright_attrnameÚright_visit_symrì   Ú
left_childÚright_childÚ
comparisonr'   r'   r(   r%   á  s†   
ÿýý

ÿÿ
ÿÿÿ¶Mz#TraversalComparatorStrategy.comparec                 K  s   |   ¡ }|j||fi |¤ŽS r:   )r_   r%   )r;   r   r   r   Ú
comparatorr'   r'   r(   Úcompare_inner=  s   z)TraversalComparatorStrategy.compare_innerc                 K  s,   |  | jd g ¡|  | jd g ¡krtS d S ©Nr   r   )Ú_gen_cache_keyr   rê   ©r;   rM   Úleft_parentrð   Úright_parentrñ   r   r'   r'   r(   rÆ   A  s
   
ÿýz/TraversalComparatorStrategy.visit_has_cache_keyc                 K  s   |   | dd ¡| dd ¡¡S )NÚplugin_subject)rü   r"   rÿ   r'   r'   r(   r¾   I  s   ÿz1TraversalComparatorStrategy.visit_propagate_attrsc           	      K  sr   t ||d d�D ]/\}}|d u r|d urt  S q|d u r t  S | | jd g ¡| | jd g ¡kr6t  S qd S ©Nrâ   r   r   )r   rê   rþ   r   ©	r;   rM   r   rð   r  rñ   r   ÚlÚrr'   r'   r(   Úvisit_has_cache_key_listP  s   
ÿý÷z4TraversalComparatorStrategy.visit_has_cache_key_listc           	      K  s†   t ||d d�D ]9\}}|d u r|d urt  S q|d u r t  S |jr,| | jd g ¡n||jr9| | jd g ¡n|kr@t  S qd S r  )r   rê   Ú_is_has_cache_keyrþ   r   r  r'   r'   r(   r›   a  s"   ÿÿù	÷÷z4TraversalComparatorStrategy.visit_executable_optionsc                 K  s   | j  ||f¡ d S r:   )rÛ   ræ   rÿ   r'   r'   r(   r‹   x  r•   z/TraversalComparatorStrategy.visit_clauseelementc           	      K  ó,   t ||d d�D ]\}}| j ||f¡ qd S ©Nrâ   ©r   rÛ   ræ   )	r;   rM   r   rð   r  rñ   r   ÚlcolÚrcolr'   r'   r(   rÌ   }  ó   ÿzHTraversalComparatorStrategy.visit_fromclause_canonical_column_collectionc                 K  r9   r:   r'   rÿ   r'   r'   r(   Ú*visit_fromclause_derived_column_collectionƒ  rA   zFTraversalComparatorStrategy.visit_fromclause_derived_column_collectionc           	      K  sL   t t|ƒt|ƒd d�D ]\}}||krt  S | j || || f¡ qd S r
  )r   rÒ   rê   rÛ   ræ   )	r;   rM   r   rð   r  rñ   r   ÚlstrÚrstrr'   r'   r(   r¨   ˆ  s   ÿûz;TraversalComparatorStrategy.visit_string_clauseelement_dictc                 K  s\   t ||d d�D ]$\}}|d u s|d u rt  S t ||d d�D ]\}	}
| j |	|
f¡ qqd S r
  ©r   rê   rÛ   ræ   )r;   rM   r   rð   r  rñ   r   ÚltupÚrtupr  r  r'   r'   r(   r    ’  s   ÿüz6TraversalComparatorStrategy.visit_clauseelement_tuplesc           	      K  r	  r
  r  r  r'   r'   r(   r”   œ  r  z4TraversalComparatorStrategy.visit_clauseelement_listc           	      K  r	  r
  r  r  r'   r'   r(   r™   ¢  r  z5TraversalComparatorStrategy.visit_clauseelement_tuplec                 K  sz   |d u r|d u S t ƒ }|D ]}t |ƒ |¡D ]}| j||fi |¤Žr)| |¡  nqqt|ƒt|ƒ  ko:t|ƒkS   S r:   )rÝ   Ú
differencerü   rè   Úlen)r;   Úseq1Úseq2r   Ú	completedr�   Úother_clauser'   r'   r(   Ú_compare_unordered_sequences¨  s   
þ€$z8TraversalComparatorStrategy._compare_unordered_sequencesc                 K  s   | j ||fi |¤ŽS r:   )r  rÿ   r'   r'   r(   r�   ´  r•   z=TraversalComparatorStrategy.visit_clauseelement_unordered_setc           	      K  r	  r
  r  r  r'   r'   r(   rÎ   ¹  r  z8TraversalComparatorStrategy.visit_fromclause_ordered_setc                 K  ó   ||kS r:   r'   rÿ   r'   r'   r(   Úvisit_string¿  ó   z(TraversalComparatorStrategy.visit_stringc                 K  r  r:   r'   rÿ   r'   r'   r(   Úvisit_string_listÄ  r  z-TraversalComparatorStrategy.visit_string_listc                 K  s¸   t t| ¡ ƒt| ¡ ƒdd�D ]J\}}||krt  S || || }	}
t|tƒ}t|tƒ}|rI|rI|	 | jd g ¡|
 | jd g ¡krHt  S q||krQt  S |	|
krYt  S qd S )Nrá   râ   r   r   )r   rÒ   Úkeysrê   rµ   r   rþ   r   )r;   rM   r   rð   r  rñ   r   ÚlkÚrkÚlvÚrvÚlhcÚrhcr'   r'   r(   Úvisit_string_multi_dictÉ  s,   ÿ


ÿþýÿïz3TraversalComparatorStrategy.visit_string_multi_dictc           	      K  s\   t |tƒ}t |tƒ}|r$|r$| | jd g ¡| | jd g ¡kr"tS d S ||kr*tS ||kS rý   )rµ   r   rþ   r   rê   )	r;   rM   r   rð   r  rñ   r   r%  r&  r'   r'   r(   Úvisit_multià  s   


ÿþýz'TraversalComparatorStrategy.visit_multic                 K  s4   t ||| jd fi |¤Žt ||| jd fi |¤ŽkS rý   )rÚ   r   rÿ   r'   r'   r(   Úvisit_anon_nameï  s   ÿÿÿÿþz+TraversalComparatorStrategy.visit_anon_namec                 K  r  r:   r'   rÿ   r'   r'   r(   Úvisit_booleanø  r  z)TraversalComparatorStrategy.visit_booleanc                 K  r  r:   r'   rÿ   r'   r'   r(   Úvisit_operatorý  r  z*TraversalComparatorStrategy.visit_operatorc                 K  s
   |  |¡S r:   )Ú_compare_type_affinityrÿ   r'   r'   r(   Ú
visit_type  s   
z&TraversalComparatorStrategy.visit_typec                 K  r  r:   r'   rÿ   r'   r'   r(   Úvisit_plain_dict  r  z,TraversalComparatorStrategy.visit_plain_dictc                 K  r  r:   r'   rÿ   r'   r'   r(   Úvisit_dialect_options  r  z1TraversalComparatorStrategy.visit_dialect_optionsc                 K  s   |r
|r
|j |j kS ||kS r:   )Ú_annotations_cache_keyrÿ   r'   r'   r(   Úvisit_annotations_key  s   ÿÿz1TraversalComparatorStrategy.visit_annotations_keyc                 K  s$   t dd„ |D ƒƒt dd„ |D ƒƒkS )Nc                 s  s   � | ]
\}}|j |fV  qd S r:   )Ú__code__)rL   ÚfnÚc_keyr'   r'   r(   rO     s   € zITraversalComparatorStrategy.visit_with_context_options.<locals>.<genexpr>r—   rÿ   r'   r'   r(   Úvisit_with_context_options  s   
ÿz6TraversalComparatorStrategy.visit_with_context_optionsc                 K  r  r:   r'   rÿ   r'   r'   r(   Úvisit_plain_obj#  r  z+TraversalComparatorStrategy.visit_plain_objc                 K  s    |d u r
|d ur
t S |j|jkS r:   )rê   rÙ   rÿ   r'   r'   r(   Úvisit_named_ddl_element(  s   z3TraversalComparatorStrategy.visit_named_ddl_elementc                 K  sD   t ||dd�D ]\\}}\}	}
||
krt  S | j ||	f¡ qd S ©Nrá   râ   r  )r;   rM   r   rð   r  rñ   r   Úl_clauseÚl_strÚr_clauseÚr_strr'   r'   r(   Úvisit_prefix_sequence1  s   ÿúz1TraversalComparatorStrategy.visit_prefix_sequencec                 K  sl   t ||dd�D ],\\}}}	}
\}}}}|
|krt  S | j ||f¡ | j ||f¡ | j |	|f¡ qd S )N)NNNNrâ   r  )r;   rM   r   rð   r  rñ   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_tuplec                 K  s   | j |||||fi |¤ŽS r:   r®   rÿ   r'   r'   r(   r¯   J  s
   
ÿÿz:TraversalComparatorStrategy.visit_memoized_select_entitiesc                 K  s„   t |dd„ d�}t |dd„ d�}t||dd�D ](\\}	}
\}}|
|kr't  S ||	|
f |||f kr7t  S | j |	|f¡ qd S )Nc                 S  ó   | d j | d fS rý   ©Úfullnamer¸   r'   r'   r(   Ú<lambda>T  ó    zCTraversalComparatorStrategy.visit_table_hint_list.<locals>.<lambda>)r£   c                 S  rF  rý   rG  r¸   r'   r'   r(   rI  V  rJ  rá   râ   )rÒ   r   rê   rÛ   ræ   )r;   rM   r   rð   r  rñ   r   Ú	left_keysÚ
right_keysÚltableÚldialectÚrtableÚrdialectr'   r'   r(   Úvisit_table_hint_listQ  s   ÿÿøz1TraversalComparatorStrategy.visit_table_hint_listc                 K  r  r:   r'   rÿ   r'   r'   r(   Úvisit_statement_hint_listb  r  z5TraversalComparatorStrategy.visit_statement_hint_listc                 K  rz   r:   r{   rÿ   r'   r'   r(   Úvisit_unknown_structureg  s   z3TraversalComparatorStrategy.visit_unknown_structurec                 K  s@   t ||dd�D ]\\}}\}	}
| j||	fi |¤Žst  S qd S r8  )r   Ú_compare_dml_values_or_cerê   )r;   rM   r   rð   r  rñ   r   r!  r#  r"  r$  r'   r'   r(   r³   l  s   ÿÿýz4TraversalComparatorStrategy.visit_dml_ordered_valuesc                 K  sh   t |dƒ}t |dƒ}||krdS |r| j||fi |¤ŽsdS |s&||kr&dS | j||fi |¤Žs2dS dS )Nr±   FT)r1   rü   )r;   r#  r$  r   ÚlvceÚrvcer'   r'   r(   rT  w  s   

z5TraversalComparatorStrategy._compare_dml_values_or_cec                 K  sÔ   |d u s|d u st |ƒt |ƒkrtS t|tjƒr2t||ƒD ]\}}| j||fi |¤Žs/t  S qd S t|tjƒr:tS t| ¡ | ¡ ƒD ]$\\}	}\}
}| j|	|
fi |¤ŽsYt  S | j||fi |¤Žsgt  S qCd S r:   )r  rê   rµ   Úcollections_abcÚSequenceÚziprT  r§   )r;   rM   r   rð   r  rñ   r   r#  r$  r!  r"  r'   r'   r(   r´   …  s"    ÿÿ"ÿýz,TraversalComparatorStrategy.visit_dml_valuesc                 K  sv   t ||d d�D ]1\}}|d u s|d u rt  S t ||d d�D ]\}	}
| j|||	||
fi |¤Žtu r7t    S qqd S r
  )r   rê   r´   )r;   rM   r   rð   r  rñ   r   ÚlseqÚrseqÚldÚrdr'   r'   r(   r½   œ  s   
ÿÿýûþüz2TraversalComparatorStrategy.visit_dml_multi_valuesc                 K  sF   |j |j u r!t |j ¡r| j|j|jfi |¤ŽrddgS tS dgS tS )Nrî   Úclauses)rî   r   Úis_associativer  r^  rê   ©r;   rð   rñ   r   r'   r'   r(   Úcompare_expression_clauselist¬  s   ÿÿz9TraversalComparatorStrategy.compare_expression_clauselistc                 K  ó   | j ||fi |¤ŽS r:   )ra  r`  r'   r'   r(   Úcompare_clauselistº  ó   z.TraversalComparatorStrategy.compare_clauselistc                 K  s�   |j |j krFt |j ¡rB| j|j|jfi |¤Žr$| j|j|jfi |¤Žs<| j|j|jfi |¤Žr@| j|j|jfi |¤Žr@g d¢S tS ddgS tS )N)rî   Únegaterð   rñ   rî   re  )rî   r   Úis_commutativerü   rð   rñ   rê   r`  r'   r'   r(   Úcompare_binary½  s   ÿþüûz*TraversalComparatorStrategy.compare_binaryc                 K  s<   |  dd¡}|  dd¡}|rg }nddg}|s| d¡ |S )NÚcompare_keysTÚcompare_valuesÚcallabler¤   r£   )Úpopræ   )r;   rð   rñ   r   rh  ri  Úomitr'   r'   r(   Úcompare_bindparamÏ  s   
z-TraversalComparatorStrategy.compare_bindparamN)r   r   r   r   r   r   r   r    )2rl   rm   rn   rp   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/  r1  r5  r6  r7  r=  r­   r¯   rQ  rR  rS  r³   rT  r´   r½   ra  rc  rg  rm  r'   r'   r'   r(   r$   Ò  s`    	
\

		r$   c                   @  s0   e Zd Z	ddd„Zdd„ Zdd„ Zd	d
„ ZdS )r#   Tr'   c                 K  s\   |f}|r||v r||   |¡}|D ]}|r| |¡rt  S t|ƒt|ƒkr+t  S qtS )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_elementc                 K  rb  r:   ©rt  r`  r'   r'   r(   Úcompare_columnô  rd  z,ColIdentityComparatorStrategy.compare_columnc                 K  rb  r:   ru  r`  r'   r'   r(   Úcompare_label÷  rd  z+ColIdentityComparatorStrategy.compare_labelc                 K  s   ||u rt S tS r:   )rë   rê   r`  r'   r'   r(   Úcompare_tableú  rŒ   z+ColIdentityComparatorStrategy.compare_tableN)Tr'   )rl   rm   rn   rt  rv  rw  rx  r'   r'   r'   r(   r#   ß  s    
ÿr#   )r   r   r   r   r   r   r   r    )r)   r*   r   r+   )6Ú
__future__r   Úcollectionsr   Úcollections.abcÚabcrW  rÈ   r   rî   rq   r   r   r   r   r	   r
   r   r   r   Ú r   Ú	cache_keyr   Úvisitorsr   r   r   r   r   r   r   Úutil.typingr   Úsymbolrë   rê   ÚCOMPARE_SUCCEEDEDr%   r6   r7   rt   rk   ry   r‡   r2   rÁ   rÂ   r4   Úpreload_modulerÚ   ÚMemoizedSlotsr$   r#   r'   r'   r'   r(   Ú<module>   s`   



u&y	G
    