� k\�g�����ddlmZddlmZddlmZddlZddlmZddl 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!ej"d��Z#dZ$dZ%d:d#�Z&d;d'�Z'Gd(�d)e��Z(Gd*�d+e(��Z)d,�Z*Gd-�d.e��Z+Gd/�d0e��Z,e,��Z-d1�Z.Gd2�d3e��Z/e/��Z0ej1d4��d5���Z2Gd6�d7eej3��Z4Gd8�d9e4��Z5dS)<�)� 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 ��|�dd��rt��}nt��}|j||fi|��S)N� use_proxiesF)�get�ColIdentityComparatorStrategy�TraversalComparatorStrategy�compare)rrr�strategys �i/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/sqlalchemy/sql/traversals.pyr'r',sM�� �v�v�m�U�#�#�1�0�2�2���.�0�0�� �8� �D�$� -� -�"� -� -�-��target_hierarchy� Type[Any]�Nonec� �tj|��D]x}t|d��rft|d��rV|���t�||jd��t�||jd���ydS)N�_generate_cache_attrs�_traverse_internals�#_generated_copy_internals_traversal�!_generated_get_children_traversal)r�walk_subclasses�hasattrr/�_copy_internals�generate_dispatchr0� _get_children)r+�clss r)�_preconfigure_traversalsr96s����#�$4�5�5���� �3�/� 0� 0� �W� �&�6 �6 � � � %� %� '� '� '� � -� -���'�5� � � � � +� +���'�3� � � ���r*c��eZdZdZdZejr dd�Zdd �Zdd �Z e d d���Z e d!d���Z e d"d���Z dd�Zdd�Zdd�Zd#d�ZdS)$�HasShallowCopyz�attribute-wide operations that are useful for classes that use __slots__ and therefore can't operate on their attributes in a dictionary. ��otherrr r-c��dS�Nr<)�selfr=s r)�!_generated_shallow_copy_traversalz0HasShallowCopy._generated_shallow_copy_traversalS����r*�d�Dict[str, Any]c��dSr?r<)r@rCs r)�&_generated_shallow_from_dict_traversalz5HasShallowCopy._generated_shallow_from_dict_traversalUs���3r*c��dSr?r<�r@s r)�$_generated_shallow_to_dict_traversalz3HasShallowCopy._generated_shallow_to_dict_traversalYrBr*�internal_dispatchr� method_name�str�Callable[[Self, Self], None]c�~�d�d�|D����}d|�d|�d�}tj|i|��S)N� c3�,K�|]\}}d|�d|��V��dS)z other.z = self.Nr<��.0�attrname�_s r)� <genexpr>z8HasShallowCopy._generate_shallow_copy.<locals>.<genexpr>asJ���� � ���!� 6�� 5� 5�8� 5� 5� � � � � � r*�def z(self, other): ��joinr�_exec_code_in_env�r8rJrK�code� meth_texts r)�_generate_shallow_copyz%HasShallowCopy._generate_shallow_copy[sc�� �y�y� � �0� � � � � ��A�;�@�@��@�@�@� ��,�Y��K�H�H�Hr*� Callable[[Self], Dict[str, Any]]c�~�d�d�|D����}d|�d|�d�}tj|i|��S)Nz, c3�,K�|]\}}d|�d|��V��dS)z 'z': self.Nr<rQs r)rUz;HasShallowCopy._generate_shallow_to_dict.<locals>.<genexpr>nsJ���� � ���!� 1�H� 0� 0�h� 0� 0� � � � � � r*rVz(self): return {z} rWrZs r)�_generate_shallow_to_dictz(HasShallowCopy._generate_shallow_to_dicthsc�� �z�z� � �0� � � � � ��I�;�H�H�d�H�H�H� ��,�Y��K�H�H�Hr*�&Callable[[Self, Dict[str, Any]], None]c�~�d�d�|D����}d|�d|�d�}tj|i|��S)NrOc3�.K�|]\}}d|�d|�d�V��dS)z self.z = d['z']Nr<rQs r)rUz=HasShallowCopy._generate_shallow_from_dict.<locals>.<genexpr>{sM���� � ���!� 5�� 4� 4�� 4� 4� 4� � � � � � r*rVz (self, d): rWrZs r)�_generate_shallow_from_dictz*HasShallowCopy._generate_shallow_from_dictusb�� �y�y� � �0� � � � � ��=�;�<�<�D�<�<�<� ��,�Y��K�H�H�Hr*c��|j} |jd}n2#t$r%|�|jd��}||_YnwxYw|||��dS)NrF)� __class__�__dict__�KeyErrorrer0rF)r@rCr8�shallow_from_dicts r)�_shallow_from_dictz!HasShallowCopy._shallow_from_dict�s����n�� K� #� �8�!� � ��� K� K� K� $� @� @��'�8�!�!� � :K�C� 6� 6� 6�  K���� ��$��"�"�"�"�"�� �,A�Ac��|j} |jd}n2#t$r%|�|jd��}||_YnwxYw||��S)NrI)rgrhrirar0rI)r@r8�shallow_to_dicts r)�_shallow_to_dictzHasShallowCopy._shallow_to_dict�s����n�� G�!�l�6��O�O��� G� G� G�"�<�<��'�)O���O�8G�C� 4� 4� 4�  G���� ��t�$�$�$rlc��|j} |jd}n2#t$r%|�|jd��}||_YnwxYw|||��dS)NrA)rgrhrir]r0rA)r@r=r8� shallow_copys r)�_shallow_copy_tozHasShallowCopy._shallow_copy_to�s����n�� A��<�(K�L�L�L��� A� A� A��6�6��'�)L���L�5A�C� 1� 1� 1�  A���� � �T�5�!�!�!�!�!rlrrc �n�|j�|j��}|�|��|S)zCreate a shallow copy�rg�__new__rr)r@r�cs r)�_clonezHasShallowCopy._clone�s2�� �N� "� "�4�>� 2� 2�� ���a� � � ��r*N)r=rr r-)rCrDr r-)r rD)rJrrKrLr rM)rJrrKrLr r^)rJrrKrLr rb)rrr r)�__name__� __module__� __qualname__�__doc__� __slots__�typing� TYPE_CHECKINGrArFrI� classmethodr]rarerkrorrrwr<r*r)r;r;Hs�������� �I� ��N�M�M�M�M� � � � � N�M�M�M�� I� I� I��[� I�� I� I� I��[� I�� I� I� I��[� I�#�#�#�#�$%�%�%�%�" "� "� "� "������r*r;c��eZdZdZdZdd�ZdS)�GenerativeOnTraversalz�Supplies Generative behavior but making use of traversals to shallow copy. .. seealso:: :class:`sqlalchemy.sql.base.Generative` r<r rc�h�|j}|�|��}|�|��|Sr?rt)r@r8�ss r)� _generatezGenerativeOnTraversal._generate�s3���n�� �K�K�� � �� ���a� � � ��r*N)r r)rxryrzr{r|r�r<r*r)r�r��s9���������I������r*r�c �*�|���Sr?)rw)�elementrs r)rwrw�s�� �>�>� � �r*c�&�eZdZdZd�Zdd�d d �Zd S) �HasCopyInternalsr<c ��t���r?��NotImplementedError)r@rs r)rwzHasCopyInternals._clone�s��!�#�#�#r*)� omit_attrsr�� Iterable[str]rrr r-c ��� |j}n#t$rYdSwxYwt�||d��D]+\}}}||vr� |�||||fi|��}|�t |||���,dS)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). Nr1)r0�AttributeErrorr5�run_generated_dispatch�setattr)r@r�r�traverse_internalsrS�obj�meth�results r)r5z HasCopyInternals._copy_internals�s��� �!%�!9� � ��� � � � �F�F� ����$3�#I�#I� �$�&K�$ �$ � 4� 4� �H�c�4��:�%�%������h��c�8�8�R�8�8���%��D�(�F�3�3�3�� 4� 4s � � �N)r�r�rrr r-)rxryrzr|rwr5r<r*r)r�r��sK�������I�$�$�$�.0�4�4�4�4�4�4�4�4r*r�c��eZdZdZefd�Zefd�Zefd�Zefd�Zefd�Z efd�Z efd�Z efd �Z d �Z efd �Zefd �Zefd �Zefd�ZdS)�_CopyInternalsTraversalzmGenerate a _copy_internals internal traversal dispatch for classes with a _traverse_internals collection.c ��||fi|��Sr?r<�r@rS�parentr��cloners r)�visit_clauseelementz+_CopyInternalsTraversal.visit_clauseelement�s���u�W�#�#��#�#�#r*c �$�����fd�|D��S)Nc�"��g|] }�|fi����� Sr<r<�rR�clauser�rs ��r)� <listcomp>zD_CopyInternalsTraversal.visit_clauseelement_list.<locals>.<listcomp>�+���:�:�:����f�#�#��#�#�:�:�:r*r<r�s ``r)�visit_clauseelement_listz0_CopyInternalsTraversal.visit_clauseelement_list�#����;�:�:�:�:�'�:�:�:�:r*c �>���t��fd�|D����S)Nc�"��g|] }�|fi����� Sr<r<r�s ��r)r�zE_CopyInternalsTraversal.visit_clauseelement_tuple.<locals>.<listcomp> �+���@�@�@�f�e�e�F�)�)�b�)�)�@�@�@r*��tupler�s ``r)�visit_clauseelement_tuplez1_CopyInternalsTraversal.visit_clauseelement_tuple�,�����@�@�@�@�@��@�@�@�A�A�Ar*c �>���t��fd�|D����S)Nc�"��g|] }�|fi����� Sr<r<r�s ��r)r�zD_CopyInternalsTraversal.visit_executable_options.<locals>.<listcomp>r�r*r�r�s ``r)�visit_executable_optionsz0_CopyInternalsTraversal.visit_executable_options r�r*c �$�����fd�|D��S)Nc�"��h|] }�|fi����� Sr<r<r�s ��r)� <setcomp>zL_CopyInternalsTraversal.visit_clauseelement_unordered_set.<locals>.<setcomp>r�r*r<r�s ``r)�!visit_clauseelement_unordered_setz9_CopyInternalsTraversal.visit_clauseelement_unordered_setr�r*c �$�����fd�|D��S)Nc�H��g|]}t��fd�|D������S)c3�*�K�|] }�|fi���V��dSr?r<)rR�tup_elemr�rs ��r)rUzP_CopyInternalsTraversal.visit_clauseelement_tuples.<locals>.<listcomp>.<genexpr>s5�����=�=�H�%�%��'�'�B�'�'�=�=�=�=�=�=r*r�)rR�elemr�rs ��r)r�zF_CopyInternalsTraversal.visit_clauseelement_tuples.<locals>.<listcomp>sI��� � � �� �=�=�=�=�=��=�=�=� =� =� � � r*r<r�s ``r)�visit_clauseelement_tuplesz2_CopyInternalsTraversal.visit_clauseelement_tupless4���� � � � � �� � � � r*c �H�����fd�|���D��S)Nc�*��i|]\}}|�|fi�����Sr<r<�rR�key�valuer�rs ��r)� <dictcomp>zK_CopyInternalsTraversal.visit_string_clauseelement_dict.<locals>.<dictcomp> s1���J�J�J�J�C���U�U�5�'�'�B�'�'�J�J�Jr*��itemsr�s ``r)�visit_string_clauseelement_dictz7_CopyInternalsTraversal.visit_string_clauseelement_dicts,����K�J�J�J�J�'�-�-�/�/�J�J�J�Jr*c �>���t��fd�|D����S)Nc3�p�K�|]0\}}}}|� �|fi���nd|� �|fi���nd|� �|fi���nd|fV��1dSr?r<)rR�target�onclause�from_�flagsr�rs ��r)rUzA_CopyInternalsTraversal.visit_setup_join_tuple.<locals>.<genexpr>%s������ � �1���5�%� (.�'9���f�#�#��#�#�#�t�)1�)=���h�%�%�"�%�%�%�4�&+�&7���e�"�"�r�"�"�"�T��  � � � � � � r*r�r�s ``r)�visit_setup_join_tuplez._CopyInternalsTraversal.visit_setup_join_tuple"sE����� � � � � �5<� � � � � � r*c �"�|j|||fi|��Sr?�r�)r@rSr�r�rs r)�visit_memoized_select_entitiesz6_CopyInternalsTraversal.visit_memoized_select_entities/s!��-�t�-�h���N�N�2�N�N�Nr*c �$�����fd�|D��S)Nc�^��g|])\}}t|d��r �|fi���n|�|fi���f��*S��__clause_element__�r4r�s ��r)r�zD_CopyInternalsTraversal.visit_dml_ordered_values.<locals>.<listcomp>6ss���  �  �  ���U� �s�$8�9�9��E�E�#�$�$��$�$�$����e�"�"�r�"�"�  �  �  �  r*r<r�s ``r)�visit_dml_ordered_valuesz0_CopyInternalsTraversal.visit_dml_ordered_values2s6����  �  �  �  �  �&�  �  �  � r*c �H�����fd�|���D��S)Nc�\��i|](\}}t|d��r �|fi���n|�|fi�����)Sr�r�r�s ��r)r�z<_CopyInternalsTraversal.visit_dml_values.<locals>.<dictcomp>Csk��� � � ���U�%,�C�1E�$F�$F�O���c� � �R� � � �C��u�U�!�!�b�!�!� � � r*r�r�s ``r)�visit_dml_valuesz(_CopyInternalsTraversal.visit_dml_valuesBs>���� � � � � �&�m�m�o�o�  � � � r*c �0������fd���fd�|D��S)Nc����t|ttf��r��fd�|D��St|t��r!��fd�|���D��SJ�)Nc�F��g|]}t|d��r �|fi���n|��Sr�r�)rRr�r�rs ��r)r�zP_CopyInternalsTraversal.visit_dml_multi_values.<locals>.copy.<locals>.<listcomp>QsU������ �#�5�*>�?�?�#���e�*�*�r�*�*�*�"� ��r*c���i|]:\}}t|d��r �|fi���n|t|d��r �|fi���n|��;Sr�r�r�s ��r)r�zP_CopyInternalsTraversal.visit_dml_multi_values.<locals>.copy.<locals>.<dictcomp>Zs���� � � �#��U�#�3�(<�=�=�!���c�(�(�R�(�(�(� �#�5�*>�?�?�#���e�*�*�r�*�*�*�"� � � r*)� isinstance�listr��dictr�)r�r�rs ��r)�copyz<_CopyInternalsTraversal.visit_dml_multi_values.<locals>.copyOs�����$��u� �.�.� ������ "&� �����D�$�'�'� � � � � � �'+�j�j�l�l� � � � ��ur*c�,��g|]}�fd�|D����S)c�&��g|] }�|����Sr<r<)rR� sub_elementr�s �r)r�zM_CopyInternalsTraversal.visit_dml_multi_values.<locals>.<listcomp>.<listcomp>ks#��� ;� ;� ;�;�T�T�+� � � ;� ;� ;r*r<)rR�sequencer�s �r)r�zB_CopyInternalsTraversal.visit_dml_multi_values.<locals>.<listcomp>js=��� � � �� <� ;� ;� ;�(� ;� ;� ;� � � r*r<)r@rSr�r�r�rr�s ``@r)�visit_dml_multi_valuesz._CopyInternalsTraversal.visit_dml_multi_valuesJsN�����  � � � � � �6 � � � �#� � � � r*c ��|Sr?r<r�s r)�visit_propagate_attrsz-_CopyInternalsTraversal.visit_propagate_attrsos ���r*N)rxryrzr{rwr�r�r�r�r�r�r�r�r�r�r�r�r�r<r*r)r�r��sk������.�.�06�$�$�$�$� 06�;�;�;�;� 06�B�B�B�B� 06�B�B�B�B� 06�;�;�;�;� 06� � � � �06�K�K�K�K� 06�  �  �  �  �O�O�O�06� � � � � AG� � � � �06�# �# �# �# �L06������r*r�c��t|d��rFt|dd��s5|���}t|d��rt|dd���5|S)Nr��is_clause_elementF)r4�getattrr�)r�s r)�_flatten_clauseelementr�xsv�� �'�/� 0� 0�/���$�e�:�:�/��,�,�.�.�� �'�/� 0� 0�/���$�e�:�:�/� �Nr*c�l�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z d�Z d �Z d �Z d �Z d �Zd �Zd�Zd�Zd�ZdS)�_GetChildrenTraversalzqGenerate a _children_traversal internal traversal dispatch for classes with a _traverse_internals collection.c ��dS�Nr<r<�r@r�rs r)�visit_has_cache_keyz)_GetChildrenTraversal.visit_has_cache_key�s ���rr*c ��|fSr?r<r�s r)r�z)_GetChildrenTraversal.visit_clauseelement�s ���z�r*c ��|Sr?r<r�s r)r�z._GetChildrenTraversal.visit_clauseelement_list�����r*c ��|Sr?r<r�s r)r�z/_GetChildrenTraversal.visit_clauseelement_tuple�r�r*c �@�tj�|��Sr?)� itertools�chain� from_iterabler�s r)r�z0_GetChildrenTraversal.visit_clauseelement_tuples�s����,�,�W�5�5�5r*c ��dSr�r<r�s r)�,visit_fromclause_canonical_column_collectionzB_GetChildrenTraversal.visit_fromclause_canonical_column_collection�����rr*c �*�|���Sr?)�valuesr�s r)r�z5_GetChildrenTraversal.visit_string_clauseelement_dict�s���~�~���r*c ��|Sr?r<r�s r)�visit_fromclause_ordered_setz2_GetChildrenTraversal.visit_fromclause_ordered_set�r�r*c ��|Sr?r<r�s r)r�z7_GetChildrenTraversal.visit_clauseelement_unordered_set�r�r*c+��K�|D][\}}}}|�|V�t|t��st|��V�|�&t|t��st|��V��\dSr?)r�rLr�)r@r�rr�r�r�r�s r)r�z,_GetChildrenTraversal.visit_setup_join_tuple�s�����.5� 7� 7� *�F�H�e�U�� �� � � ��f�c�*�*� 5�,�V�4�4�4�4�4��#�J�x��,E�,E�#�,�X�6�6�6�6�6�� 7� 7r*c ��|j|fi|��Sr?r�r�s r)r�z4_GetChildrenTraversal.visit_memoized_select_entities�s��-�t�-�g�<�<��<�<�<r*c+�JK�|D]\}}t|d��r|V�|V��dS)Nr�r�)r@r�r�k�vs r)r�z._GetChildrenTraversal.visit_dml_ordered_values�sJ����� � �D�A�q��q�.�/�/� ������G�G�G�G� � r*c+�K�d�|D��}|�|��}t|��D] }||V�� |D]}|V�||V��dS)Nc�2�h|]}t|d���|��Sr�r�)rRrs r)r�z9_GetChildrenTraversal.visit_dml_values.<locals>.<setcomp>�s(��N�N�N�Q�W�Q�8L�-M�-M�N�q�N�N�Nr*)�symmetric_difference�sorted)r@r�r� expr_values� str_valuesrs r)r�z&_GetChildrenTraversal.visit_dml_values�s�����N�N�'�N�N�N� � �5�5�g�>�>� �� �#�#� � �A��!�*� � � � �� � �A��G�G�G��!�*� � � � � � r*c ��dSr�r<r�s r)r�z,_GetChildrenTraversal.visit_dml_multi_values�r�r*c ��dSr�r<r�s r)r�z+_GetChildrenTraversal.visit_propagate_attrs�r�r*N)rxryrzr{r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r<r*r)r�r��s�������.�.���� ���������6�6�6���� � � ������� 7� 7� 7�=�=�=���� ����������r*r�zsqlalchemy.sql.elementsc �x�t|tjjj��r|�|��}|Sr?)r�r� preloaded� sql_elements�_anonymous_label� apply_map)r��namerrs r)�_resolve_name_for_comparer�s2���$���3�D�E�E�(��~�~�h�'�'�� �Kr*c�(�eZdZdZd�Zd�Zd8d �Zd �Zd �Zd�Z d�Z d�Z d�Z d�Z d�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd �Zd!�Zd"�Zd#�Zd$�Zd%�Z d&�Z!d'�Z"d(�Z#d)�Z$d*�Z%d+�Z&d,�Z'd-�Z(d.�Z)d/�Z*d0�Z+d1�Z,d2�Z-d3�Z.d4�Z/d5�Z0d6�Z1d7S)9r&)�stack�cacherc�R�t��|_t��|_dSr?)rr�setrrHs r)�__init__z$TraversalComparatorStrategy.__init__�s#�� �G�G� � � �U�U�� � � r*c�:�t��t��fSr?rrHs r)�_memoized_attr_anon_mapz3TraversalComparatorStrategy._memoized_attr_anon_map�s��� � �H�J�J�'�'r*rrrrrr r!c �x�|j}|j}|�dd��}|�||f��|�r{|���\}}||ur�|�|�dS||f|vr�,|�||f��|j} | |jkrdSt|d| zd��} | r | ||fi|��} | turdS| tur��nd} t|j |j d���D]�\\} } \}}|s | dks|dkr�| |ks| |urdS| | vr�,| �J�| �J�|�J�|� | ��}|� J|j �d|j| �d ����tj| ��|��}tj|��|��}|�|�dS��|�dS|| ||||fi|��}|turdS��|��{d S) N�compare_annotationsFz compare_%sr<�NN�� fillvalue� _annotationsz has no dispatch for '�'T)rrr$�append�popleft�add�__visit_name__r��COMPARE_FAILED� SKIP_TRAVERSErr0�dispatchrg�_dispatch_lookup�operator� attrgetter)r@rrrrrr�left�right� visit_namer��attributes_compared� left_attrname�left_visit_sym�right_attrname�right_visit_symr'� left_child� right_child� comparisons r)r'z#TraversalComparatorStrategy.compare�s��� � ��� �� �f�f�%:�E�B�B�� � � �d�D�\�"�"�"��M !��-�-�/�/�K�D�%��u�}�}�������u����%�'�'�� �I�I�t�U�m� $� $� $��,�J��U�1�1�1��u��4�� �!:�D�A�A�D�� )�&*�d�4��&=�&=�"�&=�&=�#�&�.�8�8� �5�(�M�9�9��:�')�#� ��(��)�&����- !�- !��/���1��� +��"�n�4�4�&�.�8�8��"�^�3�3�%�_�<�<� �5�5�"�&9�9�9��%�1�1�1�$�0�0�0�%�1�1�1��=�=��8�8���+�+��~�A�A��-�n�=�A�A�A�,�+�+�@�X�0��?�?��E�E� �A�h�1�.�A�A�%�H�H� ��%�"�.�$�u�u� � �(� �5�5�%�X�!�4��U�K���KM��� ���/�/� �5�5�0�Y�M !�^�tr*c �H�|���}|j||fi|��Sr?)rgr')r@rrr� comparators r)� compare_innerz)TraversalComparatorStrategy.compare_inner@s.���^�^�%�%� �!�z�!�$��3�3��3�3�3r*c ��|�|jdg��|�|jdg��krtSdS�Nrr)�_gen_cache_keyrr%�r@rS� left_parentr+� right_parentr,rs r)r�z/TraversalComparatorStrategy.visit_has_cache_keyDsX�� � � �t�}�Q�/�� 4� 4��8L�8L� �M�!� �b�9 �9 � � �"� !� � r*c �~�|�|�dd��|�dd����S)N�plugin_subject)r8r$r<s r)r�z1TraversalComparatorStrategy.visit_propagate_attrsLs?���!�!� �H�H�%�t� ,� ,�e�i�i�8H�$�.O�.O� � � r*c ��t||d���D]k\}}|� |� tcS�|� tcS|�|jdg��|�|jdg��kr tcS�ldS�Nrrr)rr%r;r� r@rSr=r+r>r,r�l�rs r)�visit_has_cache_key_listz4TraversalComparatorStrategy.visit_has_cache_key_listSs��� ��e�t�<�<�<� &� &�D�A�q��y��=�)�)�)�)����%�%�%�%����� �a� 0�"�5�5��9I�9I�� �a� �"�:�:���&�%�%�%�� &� &r*c �&�t||d���D]}\}}|� |� tcS�|� tcS|jr!|�|jdg��n||jr!|�|jdg��n|kr tcS�~dSrB)rr%�_is_has_cache_keyr;rrCs r)r�z4TraversalComparatorStrategy.visit_executable_optionsds��� ��e�t�<�<�<� &� &�D�A�q��y��=�)�)�)�)����%�%�%�%��&��� � ���q�!1�2�6�6�6���&��� � ���q�!1�2�6�6�6����&�%�%�%�� &� &r*c �>�|j�||f��dSr?)rr!r<s r)r�z/TraversalComparatorStrategy.visit_clauseelement{s$�� � ���4��-�(�(�(�(�(r*c �n�t||d���D]!\}}|j�||f���"dS�Nr�rrr!) r@rSr=r+r>r,r�lcol�rcols r)r�zHTraversalComparatorStrategy.visit_fromclause_canonical_column_collection�sM��&�d�E�T�B�B�B� ,� ,�J�D�$� �J� � �t�T�l� +� +� +� +� ,� ,r*c ��dSr?r<r<s r)�*visit_fromclause_derived_column_collectionzFTraversalComparatorStrategy.visit_fromclause_derived_column_collection�s �� �r*c ���tt|��t|��d���D]<\}}||kr tcS|j�||||f���=dSrK)rrr%rr!) r@rSr=r+r>r,r�lstr�rstrs r)r�z;TraversalComparatorStrategy.visit_string_clauseelement_dict�s���&� �4�L�L�&��-�-�4� � � � 9� 9�J�D�$��t�|�|�%�%�%�%� �J� � �t�D�z�5��;�7� 8� 8� 8� 8�  9� 9r*c ��t||d���D]F\}}|�|� tcSt||d���D]!\} } |j�| | f���"�GdSrK�rr%rr!) r@rSr=r+r>r,r�ltup�rtuprDrEs r)r�z6TraversalComparatorStrategy.visit_clauseelement_tuples�s���&�d�E�T�B�B�B� *� *�J�D�$��|�t�|�%�%�%�%�#�D�$�$�?�?�?� *� *���1�� �!�!�1�a�&�)�)�)�)� *�  *� *r*c �n�t||d���D]!\}}|j�||f���"dSrKrLrCs r)r�z4TraversalComparatorStrategy.visit_clauseelement_list��M�� ��e�t�<�<�<� &� &�D�A�q� �J� � �q�!�f� %� %� %� %� &� &r*c �n�t||d���D]!\}}|j�||f���"dSrKrLrCs r)r�z5TraversalComparatorStrategy.visit_clauseelement_tuple�rYr*c �8�|�|duSt��}|D]M}t|���|��D](}|j||fi|��r|�|��n�)�Nt |��t |��cxkot |��kncSr?)r� differencer8r#�len)r@�seq1�seq2r� completedr�� other_clauses r)�_compare_unordered_sequencesz8TraversalComparatorStrategy._compare_unordered_sequences�s��� �<��4�<� �!$��� �� � �F� #�D� � � 4� 4�Y� ?� ?� � � �%�4�%�f�l�A�A�b�A�A���M�M�,�/�/�/��E����9�~�~��T���7�7�7�7�c�$�i�i�7�7�7�7�7r*c � �|j||fi|��Sr?)rbr<s r)r�z=TraversalComparatorStrategy.visit_clauseelement_unordered_set�s!��1�t�0��u�C�C��C�C�Cr*c �n�t||d���D]!\}}|j�||f���"dSrKrLrCs r)r�z8TraversalComparatorStrategy.visit_fromclause_ordered_set�rYr*c ��||kSr?r<r<s r)� visit_stringz(TraversalComparatorStrategy.visit_string�����u�}�r*c ��||kSr?r<r<s r)�visit_string_listz-TraversalComparatorStrategy.visit_string_list�rgr*c �$�tt|�����t|�����d���D]�\}}||kr tcS||||} } t |t ��} t |t ��} | rP| rN| �|jdg��| �|jdg��kr tcS��| | kr tcS| | kr tcS��dS)Nrrrr)rr�keysr%r�rr;r) r@rSr=r+r>r,r�lk�rk�lv�rv�lhc�rhcs r)�visit_string_multi_dictz3TraversalComparatorStrategy.visit_string_multi_dict�s3��"� �4�9�9�;�;� � ��� � � � �!5�!5�� � � � &� &�F�B���R�x�x�%�%�%�%��"�X�u�R�y��B��T�;�/�/�C��U�K�0�0�C�� &�s� &��$�$��M�!�$�b����&�&�t�}�Q�'7��<�<�=�=�*�)�)�)�=�����%�%�%�%��r���%�%�%�%��# &� &r*c ��t|t��}t|t��}|rO|rM|�|jdg��|�|jdg��krtSdS||krtS||kSr:)r�rr;rr%) r@rSr=r+r>r,rrprqs r)� visit_multiz'TraversalComparatorStrategy.visit_multi�s�����{�+�+���� �,�,�� � !�3� !��"�"�� �a� �"����%�%�d�m�A�&6��;�;�<�<�&�%�<�<��C�Z�Z�!� !��5�=� r*c �n�t|||jdfi|��t|||jdfi|��kSr:)rrr<s r)�visit_anon_namez+TraversalComparatorStrategy.visit_anon_name�s^��)� ��t�}�Q�/� � �35� � � &� �%���q�!1� � �57� � � � r*c ��||kSr?r<r<s r)� visit_booleanz)TraversalComparatorStrategy.visit_boolean�rgr*c ��||kSr?r<r<s r)�visit_operatorz*TraversalComparatorStrategy.visit_operatorrgr*c �,�|�|��Sr?)�_compare_type_affinityr<s r)� visit_typez&TraversalComparatorStrategy.visit_types���*�*�5�1�1�1r*c ��||kSr?r<r<s r)�visit_plain_dictz,TraversalComparatorStrategy.visit_plain_dict rgr*c ��||kSr?r<r<s r)�visit_dialect_optionsz1TraversalComparatorStrategy.visit_dialect_optionsrgr*c �6�|r|r|j|jkS||kSr?)�_annotations_cache_keyr<s r)�visit_annotations_keyz1TraversalComparatorStrategy.visit_annotations_keys5�� � !�E� !��2��6�7� � �5�=� r*c �j�td�|D����td�|D����kS)Nc3�.K�|]\}}|j|fV��dSr?��__code__�rR�fn�c_keys r)rUzITraversalComparatorStrategy.visit_with_context_options.<locals>.<genexpr>"s-����@�@�i�b�%�b�k�5�)�@�@�@�@�@�@r*c3�.K�|]\}}|j|fV��dSr?r�r�s r)rUzITraversalComparatorStrategy.visit_with_context_options.<locals>.<genexpr>"sF����J �J �%.�R��R�[�%� �J �J �J �J �J �J r*r�r<s r)�visit_with_context_optionsz6TraversalComparatorStrategy.visit_with_context_optionssW���@�@�4�@�@�@�@�@�E�J �J �27�J �J �J �E �E � � r*c ��||kSr?r<r<s r)�visit_plain_objz+TraversalComparatorStrategy.visit_plain_obj&rgr*c �8�|� |�tS|j|jkSr?)r%rr<s r)�visit_named_ddl_elementz3TraversalComparatorStrategy.visit_named_ddl_element+s$�� �<�� �%�%��y�E�J�&�&r*c ��t||d���D]6\\}}\} } || kr tcS|j�|| f���7dS�NrrrU) r@rSr=r+r>r,r�l_clause�l_str�r_clause�r_strs r)�visit_prefix_sequencez1TraversalComparatorStrategy.visit_prefix_sequence4sx��5@� �%�<�5 �5 �5 � 8� 8� 0� �X�u�0��%���~�~�%�%�%�%�� �!�!�8�X�"6�7�7�7�7�  8� 8r*c ��t||d���D]r\\}}} } \} } } }| |kr tcS|j�|| f��|j�|| f��|j�| | f���sdS)N)NNNNrrU)r@rSr=r+r>r,r�l_target� l_onclause�l_from�l_flags�r_target� r_onclause�r_from�r_flagss r)r�z2TraversalComparatorStrategy.visit_setup_join_tuple?s�����u�0H� I� I� I� 0� 0� � 3�X�z�6�7� 3�X�z�6�7��'�!�!�%�%�%�%� �J� � �x��2� 3� 3� 3� �J� � �z�:�6� 7� 7� 7� �J� � �v�v�.� /� /� /� /� 0� 0r*c �&�|j|||||fi|��Sr?r�r<s r)r�z:TraversalComparatorStrategy.visit_memoized_select_entitiesMs3��.�t�-� �k�4��u� � �@B� � � r*c ��t|d����}t|d����}t||d���D]U\\} } \} } | | kr tcS|| | f|| | fkr tcS|j�| | f���VdS)Nc�,�|dj|dfSr:��fullname�r�s r)�<lambda>zCTraversalComparatorStrategy.visit_table_hint_list.<locals>.<lambda>Ws��4��7�3C�T�!�W�2M�r*)r�c�,�|dj|dfSr:r�r�s r)r�zCTraversalComparatorStrategy.visit_table_hint_list.<locals>.<lambda>Ys��T�!�W�%5�t�A�w�$?�r*rr)rrr%rr!) r@rSr=r+r>r,r� left_keys� right_keys�ltable�ldialect�rtable�rdialects r)�visit_table_hint_listz1TraversalComparatorStrategy.visit_table_hint_listTs����4�%M�%M�N�N�N� �� �?�?� � � � �7B� �z�\�7 �7 �7 � 4� 4� 2� �V�X� 2����8�#�#�%�%�%�%��v�x�(�)�U�F�H�3E�-F�F�F�%�%�%�%�� �!�!�6�6�"2�3�3�3�3� 4� 4r*c ��||kSr?r<r<s r)�visit_statement_hint_listz5TraversalComparatorStrategy.visit_statement_hint_listergr*c ��t���r?r�r<s r)�visit_unknown_structurez3TraversalComparatorStrategy.visit_unknown_structurejs��"�#�#�#r*c �r�t||d���D]#\\}}\} } |j|| fi|��s tcS�$dSr�)r�_compare_dml_values_or_cer%) r@rSr=r+r>r,rrlrnrmros r)r�z4TraversalComparatorStrategy.visit_dml_ordered_valuesosr�� #.� �%�<�# �# �# � &� &� �H�R��h�r�2�2�4�1�"�b�?�?�B�?�?� &�%�%�%�%� &� &� &r*c ��t|d��}t|d��}||krdS|r|j||fi|��sdS|s||krdS|j||fi|��sdSdS)Nr�FT)r4r8)r@rnror�lvce�rvces r)r�z5TraversalComparatorStrategy._compare_dml_values_or_cezs����r�/�0�0���r�/�0�0�� �4�<�<��5� � �,�$�,�R��:�:�r�:�:� ��5�� �"��(�(��5�#��#�B��1�1�b�1�1� ��5��tr*c ��|�"|� t|��t|��krtSt|tj��r0t ||��D]\}}|j||fi|��s tcS�dSt|tj��rtSt |���|�����D];\\} }\} }|j| | fi|��s tcS|j||fi|��s tcS�<dSr?)r]r%r��collections_abc�Sequence�zipr�r�) r@rSr=r+r>r,rrnrorlrms r)r�z,TraversalComparatorStrategy.visit_dml_values�sO�� �<�5�=�C��I�I��U���,C�,C�!� !� �d�O�4� 5� 5� *��d�E�*�*� *� *���B�5�t�5�b�"�C�C��C�C�*�)�)�)�)�*� *� *����7� 8� 8� *�!� !� '*�$�*�*�,�,�� � � � �&F�&F� *� *�"���R�(�2�r�5�t�5�b�"�C�C��C�C�*�)�)�)�)�5�t�5�b�"�C�C��C�C�*�)�)�)�)�*� *� *r*c ���t||d���D]N\}}|�|� tcSt||d���D])\} } |j||| || fi|��tur tccS�*�OdSrK)rr%r�) r@rSr=r+r>r,r�lseq�rseq�ld�rds r)r�z2TraversalComparatorStrategy.visit_dml_multi_values�s���&�d�E�T�B�B�B� *� *�J�D�$��|�t�|�%�%�%�%�%�d�D�D�A�A�A� *� *���B�)�D�)� �+�r�<����GI���&�&�&� *�)�)�)�)�)� &� *� *� *r*c ��|j|jur@tj|j��r$|j|j|jfi|��rddgSt SdgSt S)Nr)�clauses)r)r�is_associativerbr�r%�r@r+r,rs r)�compare_expression_clauselistz9TraversalComparatorStrategy.compare_expression_clauselist�st�� �=�E�N� *� *��'�� �6�6� $�4�4�4��L�%�-���35���*�'� �2�2�)�)�"�|�#�!� !r*c � �|j||fi|��Sr?)r�r�s r)�compare_clauselistz.TraversalComparatorStrategy.compare_clauselist�s��1�t�1�$��D�D��D�D�Dr*c �H�|j|jkr�tj|j��ro|j|j|jfi|��r|j|j|jfi|��s2|j|j|jfi|��r|j|j|jfi|��rgd�St SddgSt S)N)r)�negater+r,r)r�)r)r�is_commutativer8r+r,r%r�s r)�compare_binaryz*TraversalComparatorStrategy.compare_binary�s��� �=�E�N� *� *��'�� �6�6� .�&�D�&�t�y�%�*�C�C��C�C� *�*��*�4�:�u�{�I�I�b�I�I� *�'�D�&�t�y�%�+�D�D��D�D� *� +��*�4�:�u�z�H�H�R�H�H� *�C�B�B�B�)�)�"�H�-�-�!� !r*c ��|�dd��}|�dd��}|rg}nddg}|s|�d��|S)N� compare_keysT�compare_values�callabler�r�)�popr!)r@r+r,rr�r��omits r)�compare_bindparamz-TraversalComparatorStrategy.compare_bindparam�sc���v�v�n�d�3�3� ���� 0�$�7�7�� � )��D�D���(�D�� � �K�K�� � � �� r*N)rrrrrrr r!)2rxryrzr|rrr'r8r�r�rFr�r�r�rPr�r�r�r�rbr�r�rfrirrrtrvrxrzr}rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r<r*r)r&r&�s�������,�I����(�(�(�\�\�\�\�|4�4�4�"�"�"� � � �&�&�&�"&�&�&�.)�)�)� ,�,�,�  � � � 9�9�9�*�*�*�&�&�&� &�&�&� 8� 8� 8�D�D�D� &�&�&� ��� ��� &�&�&�. !� !� !� � � ���� ��� 2�2�2� ��� ��� !� !� !� � � ���� '�'�'� 8� 8� 8� 0� 0� 0� � � �4�4�4�"��� $�$�$� &� &� &� � � �*�*�*�.*�*�*� "� "� "�E�E�E�"�"�"�$ � � � � r*r&c�*�eZdZ dd�Zd�Zd�Zd�ZdS) r%Tr<c ���|f}|r||vr||�|��}|D]K}|r|�|��r tcSt|��t|��kr tcS�LtS)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�oths r)�compare_column_elementz4ColIdentityComparatorStrategy.compare_column_element�s����X� � � >�5�K�/�/�$�U�+�1�1�*�=�=�J�� "� "�C�� %�t�2�2�3�7�7� %�$�$�$�$��d���t�E�{�{�*�*�$�$�$�$�+�"� !r*c � �|j||fi|��Sr?�r�r�s r)�compare_columnz,ColIdentityComparatorStrategy.compare_column����*�t�*�4��=�=�"�=�=�=r*c � �|j||fi|��Sr?r�r�s r)� compare_labelz+ColIdentityComparatorStrategy.compare_label�r�r*c �&�||urtntSr?)r&r%r�s r)� compare_tablez+ColIdentityComparatorStrategy.compare_table�s��!%�� � �}�}�>�Ar*N)Tr<)rxryrzr�r�r�r�r<r*r)r%r%�s]������9;�"�"�"�"�(>�>�>�>�>�>�B�B�B�B�Br*r%)rrrrrrr r!)r+r,r r-)6� __future__r� collectionsr�collections.abc�abcr�r�rr)r}rrrr r r r r r�r� cache_keyr�visitorsrrrrrrr� util.typingr�symbolr&r%�COMPARE_SUCCEEDEDr'r9r;r�rwr�r�r5r�r�r7�preload_moduler� MemoizedSlotsr&r%r<r*r)�<module>r�s���#�"�"�"�"�"�������)�)�)�)�)�)�����!�!�!�!�!�!����� � � � �������������������������������������������������������������"�"�"�"�"�"�,�,�,�,�,�,�������+�+�+�+�+�+�*�*�*�*�*�*�*�*�*�*�*�*��������������������� �O�,�,� �����.�.�.�.�����$o�o�o�o�o�)�o�o�o�d�����N����(���#4�#4�#4�#4�#4�+�#4�#4�#4�Lz�z�z�z�z�2�z�z�z�z*�)�+�+�����D�D�D�D�D�0�D�D�D�N&�%�'�'� ����.�/�/���0�/��L�L�L�L�L�"6��8J�L�L�L�^B�B�B�B�B�$?�B�B�B�B�Br*
Memory