PK APOCALYPSE V1

APOCALYPSE V1

Current Path : /opt/hc_python/lib/python3.12/site-packages/sqlalchemy/orm/__pycache__/
Upload File :
Current File : //opt/hc_python/lib/python3.12/site-packages/sqlalchemy/orm/__pycache__/strategies.cpython-312.pyc

�

���g:��
�	�dZddlmZddlZddlZddlmZddlmZddlmZddlm	Z	ddlm
Z
dd	lmZd
dlm
Z
d
dlmZd
d
lmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlm Z d
dl!m"Z"d
dl!m#Z#d
dl!m$Z$d
dl!m%Z%d
d lm&Z&d
d!lm'Z'd
d"l(m)Z)d
d#l*m+Z+d
d$l,m-Z-d
d%lm.Z.d
d&lm/Z/d'd(lm0Z0d'dlmZ1d'd)lm2Z2d'd*lm3Z3d'd+lm4Z4d'dlmZd'dl4mZ5d'd,l4m6Z6d'd-l7m8Z8d'd.l7m9Z9d'd/l:m;Z;e
rd
d0l<m=Z=d
d1lm>Z>d'd2l?m@Z@						ddd4�ZAej�j�d3d3�5�Gd6�d7e&��ZDe3j�ej�j�d8d3�5�Gd9�d:e&���ZFe3j�ej�j�d8�;�Gd<�d=eF���ZGe3j�ej�j�d8d8�>�ej�j�d8d8d8�?�ej�j�d8�@�GdA�dBe&�����ZHGdC�dD�ZIGdE�dFe&�ZJe3j�ej|j�d8�@�GdG�dHe&���ZKe3j�ej|j�dI�J�ej|j�d�J�GdK�dLeJ����ZLe3j�ej|j�d8�J�ej|j�dM�J�ej|j�dN�J�ej|j�dO�J�ej|j�dP�J�GdQ�dReJej�e3j��������ZOGdS�dT�ZPGdU�dVeJ�ZQej|j�dW�J�GdX�dYeQ��ZRe3j�ej|j�dZ�J�Gd[�d\eQ���ZSe3j�ej|j�d]�J�ej|j�d3�J�Gd^�d_eJ����ZTe3j�ej|j�d`�J�Gda�dbeQej����ZUdc�ZVy)ezWsqlalchemy.orm.interfaces.LoaderStrategy
   implementations, and related MapperOptions.�)�annotationsN)�Any)�Dict)�Optional)�Tuple)�
TYPE_CHECKING)�Union�)�
attributes)�exc)�
interfaces)�loading)�
path_registry)�
properties)�query)�
relationships)�
unitofwork)�util)�_DEFER_FOR_STATE)�_RAISE_FOR_STATE)�_SET_DEFERRED_EXPIRED)�ATTR_WAS_SET)�LoaderCallableStatus)�PASSIVE_OFF)�PassiveFlag)�_column_descriptions)�ORMCompileState)�ORMSelectCompileState)�QueryContext)�LoaderStrategy)�StrategizedProperty)�_state_session)�
InstanceState)�Load)�_none_only_set)�AliasedClass�)�event)�inspect)�log)�sql)�visitors)�LABEL_STYLE_TABLENAME_PLUS_COL)�Select)�Literal)�Mapper)�RelationshipProperty)�
ColumnElementFc	������g}
|xr|j�|r!|jr|
jt�|j|j
jvr;|j
j|j\��|
j��fd��|r|
jtj�|r/|j��r!|jr|
j��fd��|jD]�}||jj|j�us�+|jj|j�r�Qt!j"|j$|jf|�|||xr*|jxs|j&t(j*u|||||xs
|j,|j.d�|	��}|
D]}
|
||��
��y)Nc�H��tj||j�fi���S�N)�orm_util�_validator_events�key)�desc�prop�fn�optss  ���J/opt/hc_python/lib64/python3.12/site-packages/sqlalchemy/orm/strategies.py�<lambda>z%_register_attribute.<locals>.<lambda>\s#���x�9�9��d�h�h�� �&*� �c�2��tj|���Sr5)r�backref_listeners)r9r:�backref�uselists  ��r=r>z%_register_attribute.<locals>.<lambda>js���:�#?�#?��'�7�$r?)�parent_tokenrC�compare_function�	useobject�trackparent�typecallable�	callable_�active_history�
impl_class�send_modified_events�doc)rC�
single_parent�append�single_parent_validatorr8�parent�
validatorsr�track_cascade_events�back_populates�_effective_sync_backref�self_and_descendants�_props�get�
class_manager�_attr_has_implr�register_attribute_impl�class_�	directionr
�	ONETOMANY�viewonlyrM)r:�mapperrFrErHrI�proxy_propertyrJrK�kw�listen_hooks�mr9�hookrBr;r<rCs              @@@@r=�_register_attributerfFs�����L��(�D�L�L�G��T�'�'����3�4��x�x�4�;�;�)�)�)��;�;�)�)�$�(�(�3���D����
�	
�����J�;�;�<���%�%���t�3�3�����
�"�
(�
(���1�8�8�<�<��H�H�
�
��/�/�0�0����:��5�5��������"��!1�#�%���&�&�>��~�~��)=�)=�=�)�#�-�%�)2�]�%G�$�-�-�6G��H�H�#�$�%�D�*%���T�4� �%�3)r?)�
instrument�deferredc�6��eZdZdZdZ�fd�Z	dd�Zd�Z�xZS)�UninstrumentedColumnLoaderz�Represent a non-instrumented MapperProperty.

    The polymorphic_on argument of mapper() often results in this,
    if the argument is against the with_polymorphic selectable.

    )�columnsc�\��t�|�||�|jj|_yr5)�super�__init__�parent_propertyrk��selfrQ�strategy_key�	__class__s   �r=rnz#UninstrumentedColumnLoader.__init__�s%���
�����.��+�+�3�3��r?c�l�|jD]%}|r|j|}|j||��'yr5)rk�_append_dedupe_col_collection)	rq�
compile_state�query_entity�path�loadopt�adapter�column_collection�kwargs�cs	         r=�setup_queryz&UninstrumentedColumnLoader.setup_query�s4�����A���O�O�A�&���7�7��;L�M�r?c	��yr5��	rq�contextrwrxryr`�resultrz�
populatorss	         r=�create_row_processorz/UninstrumentedColumnLoader.create_row_processor�s��	
r?r5)	�__name__�
__module__�__qualname__�__doc__�	__slots__rnr~r��
__classcell__�rss@r=rjrj�s$�����I�4��
N�
r?rjTc�<��eZdZdZdZ�fd�Z	dd�Zd�Zd�Z�xZ	S)�ColumnLoaderz8Provide loading behavior for a :class:`.ColumnProperty`.)rk�is_compositec���t�|�||�|jj|_t	|jd�|_y)N�composite_class)rmrnrork�hasattrr�rps   �r=rnzColumnLoader.__init__�s;���
�����.��+�+�3�3���#�D�$8�$8�:K�L��r?c	��|jD]<}
|r&|r|j|
�}
|
�y|j|
}
|j|
|��>|jd}|r|j|}|�y|||j<y�Nr)rk�adapt_check_presentruro)rqrvrwrxryrzr{�memoized_populators�check_for_adaptr|r}�fetchs            r=r~zColumnLoader.setup_query�s������A��"��3�3�A�6�A��y������*�A��7�7��;L�M�����Q�����O�O�E�*�E��}��49��D�0�0�1r?c�v�d|_|jdj}|jjxs]|jdj
xsB|jduxr2|jj|jd�|ju}t|j|d|j|��y)NTrF)rFrErJ)�is_class_levelrk�typerorJ�primary_key�version_id_col�_columntopropertyrXrf�compare_values)rqr`�coltyperJs    r=�init_class_attributez!ColumnLoader.init_class_attribute�s���"����,�,�q�/�&�&��
� � �/�/�
��|�|�A��*�*�
��%�%�T�1�(��,�,�0�0��1F�1F��M��'�'�(�	�	�� � ���$�3�3�)�	
r?c	���|jD]I}	|r|j|	}	|j|	d�}
|
s�)|dj|j|
f�y|dj|jdf�y�NF�quick�expireT)rk�_getterrOr8)rqr�rwrxryr`r�rzr��col�getters           r=r�z!ColumnLoader.create_row_processorss���<�<�C���o�o�c�*���^�^�C��/�F���7�#�*�*�D�H�H�f�+=�>��
 �
�x� �'�'����4�(8�9r?�F)
r�r�r�r�r�rnr~r�r�r�r�s@r=r�r��s)���C�)�I�M��:�B
�,:r?r�)�query_expressionc�0��eZdZ�fd�Zd�Zd�Zd�Z�xZS)�ExpressionColumnLoaderc�����t�|�||�tj�j	d��t�fd�|jjD��|_y)Nc3�B�K�|]}|j�����y�wr5)�compare)�.0r}�nulls  �r=�	<genexpr>z2ExpressionColumnLoader.__init__.<locals>.<genexpr>)s!�����,
�)E�A��	�	�$���)E�s�)	rmrnr+r��label�anyrork�_have_default_expression)rqrQrrr�rss   @�r=rnzExpressionColumnLoader.__init__"sP���
�����.�
�x�x�z����%��(+�,
�)-�)=�)=�)E�)E�,
�)
��%r?c�,�d}	|r|jr
|j}	n"|jr|jj}	|	�y|	D]%}
|r|j|
}
|j	|
|��'|	d}|r|j|}|�y|||j<yr�)�_extra_criteriar�rorkru)rqrvrwrxryrzr{r�r|rkr}r�s            r=r~z"ExpressionColumnLoader.setup_query-s������w�.�.��-�-�G�
�
*�
*��*�*�2�2�G��?���A���O�O�A�&���7�7��;L�M��
��
����O�O�E�*�E��}��49��D�0�0�1r?c	��|r�|jr{|j}	|	D]I}
|r|j|
}
|j|
d�}|s�)|dj|j|f�y|dj|jdf�yyyr�)r�rkr�rOr8)rqr�rwrxryr`r�rzr�rkr�r�s            r=r�z+ExpressionColumnLoader.create_row_processorRs����w�.�.��-�-�G����!�/�/�#�.�C�����U�3����w�'�.�.����&�/A�B��
��8�$�+�+�T�X�X�t�,<�=�/�7r?c��d|_t|j|d|jdjj
d��y)NTFr)rFrE�accepts_scalar_loader)r�rfrorkr�r��rqr`s  r=r�z+ExpressionColumnLoader.init_class_attributels;��"����� � ���!�\�\�!�_�1�1�@�@�"'�	
r?)r�r�r�rnr~r�r�r�r�s@r=r�r�s���	
�#:�J>�4	
r?r�)rhrg)rhrg�	raiseload)�
do_nothingc�H��eZdZdZdZ�fd�Zd�Zd�Z	d	d�Zd�Z	d�Z
�xZS)
�DeferredColumnLoaderzAProvide loading behavior for a deferred :class:`.ColumnProperty`.)rk�groupr�c���t�|�||�t|jd�rt	d��|j
j
dd�|_|jj|_|jj|_	y)Nr�z8Deferred loading for composite types not implemented yetr�F)
rmrnr�ro�NotImplementedError�
strategy_optsrXr�rkr�rps   �r=rnzDeferredColumnLoader.__init__�su���
�����.��4�'�'�):�;�%�J��
��+�+�/�/��U�C����+�+�3�3����)�)�/�/��
r?c	
�$�|jr~|jjjr^|j|jjjvr2|j
j
d�j||||||||�y|jsZ|jr|j
j}	n|j
j}	|dj|j|	f�y|dj|jdf�y)N�)rhF�rgT�newr�F)
�
refresh_stater�_compile_options�_only_load_propsr8ro�
_get_strategyr�r�r��_raise_column_loader�_deferred_column_loaderrO)
rqr�rwrxryr`r�rzr��set_deferred_for_local_states
          r=r�z)DeferredColumnLoader.create_row_processor�s���*
�!�!��
�
�.�.�?�?����G�M�M�:�:�K�K�K�� � �.�.�;�
�"�"���������	��$�$��~�~��(�(�=�=�-�
�(�(�@�@�-�
�u��$�$�d�h�h�0L�%M�N��x� �'�'����5�(9�:r?c��d|_t|j|d|jdjj
|jd��y)NTFr)rFrErI�load_on_unexpire)r�rfrorkr�r��_load_for_stater�s  r=r�z)DeferredColumnLoader.init_class_attribute�sD��"����� � ���!�\�\�!�_�1�1�@�@��*�*�"�
	
r?c		�j�|jjr|jjs�|r8t	|j
�j
|jj�sG|r5|jr)|jjd|jzd�s|rA|j|vr3|jjd�j|||||||fi|	��y|jrt ||j<y|j"st$||j<yt&||j<y)Nzundefer_group_%sFr�)�compile_options�_render_for_subqueryro�_renders_in_subqueries�setrk�intersectionrQ�_should_undefer_in_wildcardr��
local_optsrXr8r�r~r�rr�rr)
rqrvrwrxryrzr{r��only_load_propsrbs
          r=r~z DeferredColumnLoader.setup_query�s���-�-�B�B��(�(�?�?������%�2�2��K�K�;�;��
��J�J��&�&�*�*�&����3�U�� �D�H�H��$?�
�D� � �.�.�;�
��k������!�#�
��
��
 �
 �8M��� 4� 4�5����8H��� 4� 4�5�8H��� 4� 4�5r?c�D�|jstjS|tjzstj
S|jj}|jrg|jD�cgc]Q}t|t�r?t|jt�r%|j|jk(r|j��S}}n
|jg}|D�cgc]}||jvs�|��}}t|�}|�9t!j"dt%j&|��d|j�d���|j(r|j+||d�t-j.|j|t1|�t2�tj4Scc}wcc}w)N�Parent instance zB is not bound to a Session; deferred load operation of attribute '�' cannot proceed�raise)r8r�
ATTR_EMPTYr�SQL_OK�PASSIVE_NO_RESULT�managerr`r��iterate_properties�
isinstancer!�strategyr��
unmodifiedr"�orm_exc�DetachedInstanceErrorr6�	state_strr��_invoke_raise_loadr�load_scalar_attributesr�rr)	rq�state�passive�localparent�p�toload�kr��sessions	         r=r�z$DeferredColumnLoader._load_for_state�sZ���y�y�'�2�2�2���+�+�+�'�9�9�9��m�m�*�*���:�:�%�7�7��7�A��a�!4�5��q�z�z�+?�@��G�G�t�z�z�)�	���7�
���h�h�Z�F�#�<�F�q�a�5�+;�+;�&;��F��<� ��'���?��/�/��%�%�e�,�d�h�h�8��
��>�>��#�#�E�7�G�<��&�&��L�L�%��U��[�	
�$�0�0�0��9��=s�0AF�F�.Fc�4�tjd|�d���)N�'z(' is not available due to raiseload=True��sa_exc�InvalidRequestError�rqr�r��lazys    r=r�z'DeferredColumnLoader._invoke_raise_load's���(�(�=A�C�
�	
r?r5)r�r�r�r�r�rnr�r�r~r�r�r�r�s@r=r�r�xs5���L�/�I�0�1;�f

�*�1I�f&1�P
r?r�c�8�eZdZdZddd�Zejfd�Zy)�LoadDeferredColumnsz7serializable loader object used by DeferredColumnLoaderc� �||_||_yr5)r8r�)rqr8r�s   r=rnzLoadDeferredColumns.__init__0s�����"��r?c���|j}|jj}|j|}|jrd}nd}|j|�}|j
||�S)N)�rhTr�)r�T)r�r�)r8r�r`rWr�r�r�)rqr�r�r8r�r:rrr�s        r=�__call__zLoadDeferredColumns.__call__4sc���h�h���m�m�*�*���!�!�#�&���>�>��L�F�L��%�%�l�3���'�'��w�7�7r?Nr�)r8�strr��bool)r�r�r�r�rnrrr�r�r?r=r�r�-s��A�#�'1�&<�&<�8r?r�c�,��eZdZdZdZ�fd�Zd�Z�xZS)�AbstractRelationshipLoaderz0LoaderStratgies which deal with related objects.)r`�targetrC�entityc���t�|�||�|jj|_|jj|_|jj
|_|jj|_yr5)rmrnror`rrrCrps   �r=rnz#AbstractRelationshipLoader.__init__Js^���
�����.��*�*�1�1����*�*�1�1����*�*�1�1����+�+�3�3��r?c	
�d�|jjd�j||||||||�S)N))r��	immediate)ror�r�r�s	         r=�#_immediateload_create_row_processorz>AbstractRelationshipLoader._immediateload_create_row_processorQsC���#�#�1�1�$�
�
�
���������	
�	
r?)r�r�r�r�r�rnr	r�r�s@r=rrEs���:�7�I�4�
r?rc��eZdZdZy)�DoNothingLoaderz�Relationship loader that makes no change to the object's state.

    Compared to NoLoader, this loader does not initialize the
    collection/attribute to empty/none; the usual default LazyLoader will
    take effect.

    N)r�r�r�r�r�r?r=rrjs��r?r�noload)r�c� �eZdZdZdZd�Zd�Zy)�NoLoaderzQProvide loading behavior for a :class:`.Relationship`
    with "lazy=None".

    r�c�l�d|_t|j|d|jj��y)NT)rFrH)r�rfro�collection_classr�s  r=r�zNoLoader.init_class_attribute�s0��"����� � ����-�-�>�>�		
r?c	�P���fd�}	|dj�j|	f�y)Nc����jr"tj||�j�yd|�j<yr5)rCr�init_state_collectionr8)r��dict_�rowrqs   �r=�invoke_no_loadz5NoLoader.create_row_processor.<locals>.invoke_no_load�s-����|�|��0�0���t�x�x�H�"&��d�h�h�r?r�)rOr8)
rqr�rwrxryr`r�rzr�rs
`         r=r�zNoLoader.create_row_processor�s&���	'�	�5�� � �$�(�(�N�!;�<r?N)r�r�r�r�r�r�r�r�r?r=rrvs���
�I�
�=r?r�selectr��raise_on_sql�baked_selectc����eZdZUdZdZded<ded<ded<ded<d	ed
<				d�fd�Zd�Zd
�Zd�Z	d�Z
ddddejfd�Z
d�Zejd�d��Zd�Z�xZS)�
LazyLoaderztProvide loading behavior for a :class:`.Relationship`
    with "lazy=True", that is loads when first accessed.

    )
�
_lazywhere�_rev_lazywhere�_lazyload_reverse_option�	_order_by�use_get�is_aliased_class�_bind_to_col�_equated_columns�_rev_bind_to_col�_rev_equated_columns�_simple_lazy_clause�
_raise_always�
_raise_on_sqlzColumnElement[bool]rzDict[str, ColumnElement[Any]]r"rr$�RelationshipProperty[Any]roc����t�|�||�|jddk(|_|jddk(|_t|j�j|_|jj}|j�\|_|_|_
|jd��\|_|_|_|jj"rSt%j&|jj"�D�cgc]}t)j*|ddi���c}|_nd|_|j.j1d||j�|jxrY|j2xrJ|jj4dj7|jdd	|j8j:�
�|_|j<r�t?|j�D]U}||j8j:vs�|j8j:|D]}|j||j|<� �W|j.j1d|�yycc}w)Nr�r�rT)�reverse_direction�
_orm_adaptz%s lazy loading clause %srF��use_proxies�compare_keys�equivalentsz4%s will use Session.get() to optimize instance loads) rmrnr�r'r(r)rr!ro�_join_condition�create_lazy_clauserr"r#rr$r%�order_byr�to_list�sql_util�_deep_annotater�logger�inforC�_get_clauser�r`�_equivalent_columnsr �list)rqrQrr�join_condition�elemr�r}rss       �r=rnzLazyLoader.__init__�s$���	�����.�!�/�/��7�7�B���!�/�/��7�>�I��� '���� 4� E� E����-�-�=�=��

�-�-�/�		
��O����!�
�-�-��-�E�		
����!��%����(�(�!�L�L��)=�)=�)F�)F�G��G�D��'�'��|�T�.B�C�G��D�N�
"�D�N������4�d�D�O�O�L��%�%�%�
��L�L� �
����'�'��*�2�2���� �"� �K�K�;�;�	3��	
���<�<��D�1�1�2���$�+�+�9�9�9�!�[�[�<�<�S�A��37�3H�3H��3M��-�-�a�0�B�3�

�K�K���F��
�
��7s�Ic	�l�d|_|jj}|jjrd}d}nB|jjt
jus|js|rd}d}n	d}d}ndx}}t|j|d|j|jj||��y)NTF)rFrIrHrJ�_deferred_history)r�ro�_legacy_inactive_history_stylerJr]r
�	MANYTOONEr rfr�r)rqr`r@rJr?s     r=r�zLazyLoader.init_class_attributes���"���
� � �?�?�	'����.�.�!�N� %��
� � �*�*�*�2F�2F�F��<�<�-�!%��$)�!�!&��$(�!�16�6�N�.��� � ����*�*��-�-�>�>�)�/�	
r?c�����tj|jddi�}||jc}�g�d�}t	j
|id|i���fd�}t	j|id|i�}|�fS)Nr,Tc��d|_y)NF)�unique)�	bindparams r=�visit_bindparamzFLazyLoader._memoized_attr__simple_lazy_clause.<locals>.visit_bindparam+s
��$�I�r?rEc����|j�vr,�j|j�|jdf�y|j�)�j|jd|jf�yyr5)�_identifying_keyrOr8�callable�value)rE�bind_to_col�paramss ��r=rFzFLazyLoader._memoized_attr__simple_lazy_clause.<locals>.visit_bindparam0sh����)�)�[�8��
�
�!�
�
�#�I�$>�$>�?�����#�#�+��
�
�y�}�}�d�I�O�O�D�E�,r?)r5r6rr"r,�traverse�cloned_traverse)rq�	lazywhere�	criterionrFrKrLs    @@r=�"_memoized_attr__simple_lazy_clausez-LazyLoader._memoized_attr__simple_lazy_clause"s�����+�+��O�O�l�D�1�
�	�#,�T�->�->��	�;���	%�	���)�R�+��)G�H�
	F��,�,��r�K��9�
�	��&� � r?c��|j\}}|�,tj||D���cgc]\}}}|��
c}}}�S|jj}|j�}	t
j|	�}
|tjzr|tjz}i}|D]K\}}}|�>|r(|tjzr|j||
||�}n|j||
||�}|||<�M||fScc}}}wr5)
r&r5�adapt_criterion_to_nullrorQ�objr�
instance_dictr�INIT_OK�LOAD_AGAINST_COMMITTED�#_get_committed_state_attr_by_column�_get_state_attr_by_column)rqr�r�rP�
param_keysr8�identrJr`�orrLs            r=�_generate_lazy_clausez LazyLoader._generate_lazy_clauseBs�� $� 8� 8��	�:��=��3�3���D��$5�C���C��D��
��%�%�,�,���I�I�K���(�(��+���[�(�(�(��{�*�*�*�G���!+��C���� ��w��)K�)K�K�"�F�F��u�e�W��E�#�<�<��u�e�W��E� �F�3�K�",��&� � ��3Es�
C5c�:�tjd|�d|�d���)Nr�z ' is not available due to lazy='r�r�s    r=r�zLazyLoader._invoke_raise_loadbs���(�(�8<�d�C�
�	
r?Nr�c��|js>|jjs|jr|jst
jS|j}d}	|jxr|xs
|j}
|tjzs|
r|tjzs|rt
jS|jr;|tjzs(|
r|tj zr|j#||d�t%|�}|s\|tjzrt
jSt'j(dt+j,|��d|j�d���|
�r@|j/|||�}	t
j|	vrt
jSt
j0|	vrt
j0S|j2j4st7j8|	�ryt7j:|	�ry|j|j<vr#|tj>zst
j@S|jC|jD|	||��}|�|t
jFury|S|tjzr|tj zst
jS|jI|||	||||||�	S)Nr�r�z> is not bound to a Session; lazy load operation of attribute 'r�)r��lazy_loaded_from)%r8ro�load_on_pending�
_load_pending�
session_idrr�r r�rr�r�NON_PERSISTENT_OKr�r'�NO_RAISE�RELATED_OBJECT_OKr�r"r�r�r6r��_get_ident_for_use_get�	NEVER_SETr`�allow_partial_pksr%r��
issuperset�dict�DEFERRED_HISTORY_LOADr�_identity_lookupr�PASSIVE_CLASS_MISMATCH�_emit_lazyload)
rqr�r�ry�extra_criteria�
extra_options�alternate_effective_path�execution_options�pending�primary_key_identityr r��instances
             r=r�zLazyLoader._load_for_stategsx���y�y��(�(�8�8��+�+��#�#�'�2�2�2��i�i�-��#���,�,�O��K�$N�w�7N�7N�3N���+�,�,�,�W��*�6�6�6�7�'�9�9�9�
����k�2�2�2���[�:�:�:�
�#�#�E�7�G�<� ��'�����-�-�-�+�=�=�=��/�/��%�%�e�,�d�h�h�8��
��#'�#>�#>����$� �$�5�5�9M�M�+�=�=�=�%�/�/�3G�G�+�5�5�5�
�;�;�0�0�!�.�.�/C�D��!�,�,�-A�B�����E�J�J�&��+�"C�"C�C�+�8�8�8��/�/����$��!&�	0��H��#��3�J�J�J��#�O��k�0�0�0���!>�!>�>�+�=�=�=��"�"��� �����$��

�
	
r?c	��|jj}|tjzr
|j}n|j
}|j}|jjD�cgc]}||||j||����c}Scc}w)N�r�)	r�r`rrWrXrYrkr�r#)rqr�r�r��instance_mapper�get_attrr�pks        r=rgz!LazyLoader._get_ident_for_use_get�s����-�-�.�.���[�7�7�7�&�J�J�H�&�@�@�H��
�
���k�k�-�-�
�-��
�U�E�4�#8�#8��#<�g�N�-�
�	
��
s�' B
zsqlalchemy.orm.strategy_optionsc
�v���tjj��jj	�}
tj|
g|
jttj��}tj}|d|d�z
}�jj�0|j�j �jj�}|j"}
|
s|t$j&zrtj(ddi�|_�j,}|j.s|r|j0rs|�|j2�j}n|�j}|j.}|r2|j0r&d}|t5j6�j|�fz
}||_n5|�$|j j:�j}n|�j}|r|xj8|z
c_|xj<d|iz
c_|rL�j>r&|t@jBzs�jE||d�tGjH|||||	��S�jJr�jJ|_&��fd�}|xjN|�jffz
c_'�jQ||�\}}|	r#tjRjU|	d	|i�}	nd	|i}	�j"|jVvr#|t@jXzstZj\S|
r3tj^t4j`|jc��r4ytj^t4jd|jc��ry�j>r&|t@jBzs�jE||d�|f|_3|ji|||	�
�}|jk�jm�jo�}�jpr|Sts|�}|r,|dkDr"tjtd�jz�|d
Sy)N)�_raw_columns�_propagate_attrs�_label_styler�F)�_invoke_all_eagers�_lazy_loaded_from�	autoflush�
_current_pathr)�load_optionsrsc�z���jjD]�}|jtjus� |j
s�-t
|jt�r�H�jj|jj|j�j|�j|���yr5)ro�_reverse_propertyr]r
rA�_use_getr�r�rr$�_construct_for_existing_pathr�r�rQ�lazyload�process_compile_state)�compile_context�revrq�strategy_optionss  ��r=�_lazyload_reversez4LazyLoader._emit_lazyload.<locals>._lazyload_reverseBs�����+�+�=�=���M�M�Z�%9�%9�9����&�s�|�|�Z�@�$�)�)�F�F�'�7�7�E�E��J�J����h�s�m�$9�$9�/�$J�>r?�_sa_orm_load_options)rsr
zKMultiple rows returned with uselist=False for lazily-loaded attribute '%s' r);r�	preloaded�orm_strategy_optionsr�__clause_element__r.�_create_raw_selectr~r-r�default_compile_optionsr�default_load_optionsro�	secondary�select_fromr`r8r�NO_AUTOFLUSH�
immutabledict�_execution_optionsr r�r��	load_pathr6�LoaderCriteriaOption�
_with_options�_path_registryr�r(rrer�r�load_on_pk_identityr�_order_by_clauses�_with_context_optionsr]�
EMPTY_DICT�
merge_withrkrlrr�has_intersection�	_none_set�values�
_never_set�_where_criteria�executerD�scalars�allrC�len�warn)rqr�r�rur�ryrprqrrrs�
clauseelement�stmtr�rtr �effective_pathr<r��lazy_clauserLr��lr�s`                     @r=rozLazyLoader._emit_lazyload�s���� �>�>�>�>�����6�6�8�
��(�(�'��*�;�;�7�,�D�D�	
��$�8�8���"'�!&�
�	
��
���)�)�5��#�#����T�1�1�;�;��D��i�i�-���g�
� 7� 7�7�&*�&8�&8�+�u�9M�&N�D�#��,�,�����'�g�.E�.E�'�/�!&����1E�1E�!F��!9�$�:N�:N�!O���%�%�D��7�2�2�����1�1�$�+�+�~�N����"&�D��
%�
-�#�\�\�8�8��9M�9M�N�N�6�d�6J�6J�K�N�����-�/�����/�>�!B�B����!�!�'�K�4H�4H�*H��'�'��w��G��.�.���$�)�"3��
��>�>�%)�^�^�D�"�
	K�	
�"�"�
�� 4� 4�5�'
�	
�"�#�8�8���H���V�� $��� :� :�!�*�L��!��'��!��

�H�H��
�
�"��k�?�?�?�'�4�4�4���$�$�X�%7�%7�����I��
�
"�
"�8�#6�#6��
�
��
H�����g��0D�0D�&D��#�#�E�7�N�C� +�~�������&�,=�!�
������(�(�*�.�.�0���<�<��M��F��A���q�5��I�I�J��.�.�/���a�y� �r?c	���|j�|jjrd|jjj
rD|j|jjj
vr|j
||||||||�S|jr|rw|jrktj|jt�|||jr|j|�nd���}	|dj|j|	f�y|js|j r&�fd�}
|dj|j|
f�yy)Nr�c�*��|j|��yr5)�_reset)r�rrr8s   �r=�reset_for_lazy_callablez@LazyLoader.create_row_processor.<locals>.reset_for_lazy_callable�s������U�C�(r?)r8r��_is_user_refreshrr�r�r	r�r�r#�"_instance_level_callable_processorrY�LoadLazyAttribute�_generate_extra_criteriarO�populate_existing�always_refresh)rqr�rwrxryr`r�rzr��set_lazy_callabler�r8s           @r=r�zLazyLoader.create_row_processor�s8����h�h��
� � �1�1��
�
�.�.�?�?����G�M�M�:�:�K�K�K��;�;���������	�	
��"�"�w�7�3J�3J��@�@��$�$�!����#�2�2� �8�8��A�!�	��!��"
�u��$�$�d�h�h�0A�%B�C�
�
&�
&�&�*?�*?�	
)�
�u��$�$�d�h�h�0G�%H�I�+@r?)rQr)rrzTuple[Any, ...])r�r�r�r�r��__annotations__rnr�rQr]r�rr�r�rg�preload_moduleror�r�r�s@r=rr�s�����
�I� $�#�/�/�'�'�3�3�.�.�:�/�:�?N�:�x 
�D!�@!�@
����!%��/�/�u
�n

��T���:�;�[�<�[�zEJr?rc�:�eZdZdZd�Zd�Zejfd�Zy)r�a�semi-serializable loader object used by LazyLoader

    Historically, this object would be carried along with instances that
    needed to run lazyloaders, so it had to be serializable to support
    cached instances.

    this is no longer a general requirement, and the case where this object
    is used is exactly the case where we can't really serialize easily,
    which is when extra criteria in the loader option is present.

    We can't reliably serialize that as it refers to mapped entities and
    AliasedClass objects that are local to the current process, which would
    need to be matched up on deserialize e.g. the sqlalchemy.ext.serializer
    approach.

    c�P�||_|j|_||_||_yr5�r8rrryrp)rqr8�initiating_strategyryrps     r=rnzLoadLazyAttribute.__init__�s&�����/�<�<������,��r?c��|j�tjd�|j|j|j
dd�S)NzvCan't reliably serialize a lazyload() option that contains additional criteria; please use eager loading for this caser�r�)rprr�r8rrry)rqs r=�__getstate__zLoadLazyAttribute.__getstate__�sE�����*��I�I� �
��8�8� �-�-��|�|� �	
�	
r?c���|j}|jj}|j|}|j|j
}|j
|||j|j��S)N)ryrp)	r8r�r`rW�_strategiesrrr�ryrp)rqr�r�r8ryr:r�s       r=r�zLoadLazyAttribute.__call__�sn���h�h���-�-�.�.���%�%�c�*���#�#�D�$5�$5�6���'�'����L�L��.�.�	(�
�	
r?N)	r�r�r�r�rnr�rrr�r�r?r=r�r��s!���"-�
�'1�&<�&<�
r?r�c��eZdZdZdZdd�Zy)�
PostLoaderz;A relationship loader that emits a second SELECT statement.r�Nc��|jjxstjj|z}|j�}t
jd|i�}|r"|jjdd�}|dk(}	nd}d}	|��|jjs#tjd|j�d���|jjdt|���|�}|	s|dkr|d||fS|	s"|j!dt|���|d	z
i�}t"j$j'|||j�r|d||fS||j}
||j}|
j)|j*d
�s;|r|j,dz|kDr'|d||fS|j/|j0�r|d||fS|d||fS)
N�sa_top_level_orm_context�recursion_depth���Fz'recursion_depth option on relationship z0 not valid for non-self-referential relationship�_recursion_depth_rr
�loaderr'T)rv�current_pathr6�PathRegistry�root�_get_top_level_contextrr�r�rXro�_is_self_referentialr�r�rs�id�unionr�PostLoad�path_exists�containsr�length�contains_mapperr`)rqr�rxry�
join_depthr��top_level_contextrsr��unlimited_recursion�path_w_prop�effective_path_w_props            r=�_setup_for_recursionzPostLoader._setup_for_recursions���!�!�.�.�L�(�2G�2G�2L�2L����$�:�:�<�� �.�.�
'�):�;�
���%�0�0�4�4�5F��M�O�"1�R�"7��"�O�"'���&��'�'�<�<��0�0�=��+�+�,�-8�8���
&�7�7�;�;�#�B�t�H�:�.���O�'�?�Q�+>�"��%�#�	��'�$5�$;�$;�+�B�t�H�:�6��!�8K��%�!����'�'��^�T�%9�%9�
�"�5�*;�_�L�L��4�/�/�0�� .�t�/C�/C� D���#�#�G�$6�$6��A��(�/�/�!�3�j�@�&��)�'�	��'�6�6�t�{�{�C�"��%�#�	���t�%6��G�Gr?r5)r�r�r�r�r�r�r�r?r=r�r�s��E��I�DHr?r�rc�4��eZdZdZ�fd�Zd�Zd�Zd�Z�xZS)�ImmediateLoader�r�c�\��t�|�||�|jj|_yr5�rmrnror�rps   �r=rnzImmediateLoader.__init__W�%���
�����.��.�.�9�9��r?c�X�|jjd�j|�y�N�)r�r�ror�r�r�s  r=r�z$ImmediateLoader.init_class_attribute[�$�����*�*�!�	
�
�
�v�
&r?c	��|jjjsy|j||||j�\}	}
}}|
s"t
jtjz}
n!t
jtjz}
tjj||	|j|j|j||
||�	yr5)rvr��_enable_eagerloadsr�r�r�PASSIVE_NO_FETCH_RELATEDrrerrr��callable_for_pathrQro�_load_for_path)rqr�rwrxryr`r�rzr�r��
run_loaderrsr��flagss              r=r�z$ImmediateLoader.create_row_processor`s����$�$�4�4�G�G��
�%�%�g�t�W�d�o�o�N�	
������
�7�7�+�:N�:N�N�E��*�*�[�-A�-A�A�E����*�*����K�K�� � ��������
	
r?c	���|rJt|jj�}	||j�f|	_|j�}
|	f}nd}	|}
d}|j}|jjd�}
|D]i\}}|j}|s||vs�|
j||||
|��}|ttjfvs�H|j|�j|||��ky)Nr�r�)rqrrrs)r$rxr�_recurser��_truncate_recursiver8ror�rkr�rrr��get_impl�set_committed_value)rqr�rx�states�	load_onlyryr�r�rs�new_optrrrqr8�
lazyloaderr��	overwriterrJs                  r=r�zImmediateLoader._load_for_path�s�����7�<�<�.�.�/�G��� � �"��G�O�(,�'?�'?�'A�$�$�J�M��G�'+�$��M��h�h���)�)�7�7�8M�N�
� &��E�9��J�J�E��C�u�,�"�2�2���"/�-E�&7�3���� �(�:�:�!���N�N�3�'�;�;��u�e��!'r?)	r�r�r�r�rnr�r�r�r�r�s@r=r�r�Ss����I�:�'�
(
�T+r?r��subqueryc�x��eZdZdZ�fd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�ZGd
�d�Zd�Z
d
�Zd�Zd�Z�xZS)�SubqueryLoaderr�c�\��t�|�||�|jj|_yr5r�rps   �r=rnzSubqueryLoader.__init__�r�r?c�X�|jjd�j|�yr�r�r�s  r=r�z#SubqueryLoader.init_class_attribute�r�r?c�v�|}|j}tj|d�}|jj	|�r*|j
|dur|j|j
}}n||d}}|rf|j|jj|}	t|�t|	�z
}
|
r)|	tjj||
d�z
}	n|}	|j}|D�cgc]<}t|	jdj|j |j"���>}
}||
||	fScc}w)Nrr
)rxr6�_class_to_mapperrQ�isaro�	_entities�entity_zeror�r�rr��coerce�
local_columns�getattrrr�r8)rq�orig_query_entity_index�	subq_path�current_compile_state�is_root�given_subq_path�subq_mapper�leftmost_mapper�
leftmost_prop�
new_subq_path�
additional�
leftmost_colsr}�
leftmost_attrs              r=�
_get_leftmostzSubqueryLoader._get_leftmost�sN��$���N�N�	��/�/�	�!��=��
�K�K�O�O�K�(��$�$�	�!��4�-1�[�[�$�:N�:N�]�O�-8�)�A�,�]�O��2�;�;�'���k�.�.��8�M��Y��#�m�*<�<�J����!;�!;�!B�!B��z�k�l�+�"��
�,�M�%�3�3�
�#�
�
#��	
��"�"�1�%�,�,��1�1�!�4�8�8�
�#�	�
��
�}�m�K�K��
s�-AD6c	��|j�jd�}tjj	tj�}|j
j
|j
�|}|jsEd|_|jj|gt||��D�	chc]}	|	d�|	d��c}	���|j|D�
cgc]:}
tjjtj j"|
���<c}
|j%��}||_|j(}|durd|_nN|�L|D�
chc]}
|
j,��c}
D]/}t/|�j1|j2�r�(d|_n|j4sd|_|j*durB|j6r6t9j:||j6�}|r|j=||z�|j?t@�jC�}tEjF||d��}|Scc}	wcc}
wcc}
w)NF)rvrTr���use_mapper_path)$�_clone�	correlater�Query�__new__�__dict__�update�	_from_obj�_enable_assertionsr��non_generativer�_adapt_col_listr+�	coercions�expect�roles�ColumnsClauseRole�_get_current_adapterr}�distinct_target_key�	_distinct�tabler�rjr��_has_row_limiting_clauser�r5� expand_column_list_from_order_by�
_set_entities�set_label_styler-r�r6r&)rq�orig_compile_state�
orig_queryrr�leftmost_relationship�orig_entity�q�q2�entr\�target_colsr*r}�t�to_add�embed_q�
left_aliass                  r=�_generate_from_original_queryz,SubqueryLoader._generate_from_original_query�s"��
����)�)�$�/���[�[�
 �
 ����
-��
�����1�:�:�&����{�{�#(�A� �(�A�M�M�(�(��	
� 4�"�2D� �� ���8�}�0�	��M� ��	
�0)�8�8�'�
�&�A��
�
�$�$�S�Y�Y�%@�%@�!�D�&�
�
�3�3�5�
��%���3�G�G���$�&��A�K�
 �
(�(3�3�{�!�a�g�g�{�3���;�'�2�2�1�=�=�A�"&�A�K��4��)�)�"$�A���;�;�$��1�#6�#6��>�>��Q�0�0��F������f� 4�5��#�#�$B�C�L�L�N���*�*��W�d�
�
����A��.
��4s�.H6
�?H;�Ic�n�g}t|j��}t|�D]W\}\}}|dkDr+||dz
dj}|j	|�r|n|}	n|}	|j|	|jf��Yt|�dkr|}
nKt|dd�}|jr
|j}
n!tj|jd��}
|jj}|D�
cgc]/}
t|
|j j"|
j���1}}
|||
fScc}
w)Nrr
r'r�Tr)r;�pairs�	enumerater`rrOr8r�r)r!rr6r&ror	r
rQr�)rqr<r�to_joinr?�ir`r:�prev_mapper�	to_append�parent_aliasr8�
local_colsr}�
local_attrs               r=�_prep_for_joinszSubqueryLoader._prep_for_joins[s5�����Y�_�_�&�'��!*�5�!1��A�~����1�u�$�A��E�l�1�o�4�4��+6�?�?�6�+B�K��	�"�	��N�N�I�t�x�x�0�1�"2�&�w�<�!��&�L��7�2�;�q�>�*�D��$�$�#�{�{�� (�4�4��K�K�� ���)�)�7�7�
� �
���
�L�$�+�+�"?�"?��"B�"F�"F�G��	�
��
�L�0�0��	
s�74D2c�d�t|�}|dk(r$t||dd�j|�g}�n^|dk(rDt||dd�j|�t||dd�j|�g}�n|dkD�r|ddD�cgc]F}t|d�jstj|d�n|dj|df��H}}g}	|rb|jd�}t|d|d�}
|r|
j|dd�}
n|
j|�}
|	j|
�|r�bt||dd�j|	dj�g|	zt||dd�j|�gz}|D]}
|j|
�}�|Scc}w)Nr
rr'r�)r�r
�of_typer)r!r6r&r�poprOrQ�join)rqr5rAr<rE�effective_entity�ltj�item�middle�inner�attrs           r=�_apply_joinszSubqueryLoader._apply_joins�s����'�l���!�8��
�G�A�J�q�M�2�:�:�;K�L��G��A�X��
�G�A�J�q�M�2�:�:�<�H���g�b�k�!�n�5�=�=�$���G��1�W�$�A�b�M�
�*�D� '�t�A�w�/�@�@�!�-�-�d�1�g�6�!�!�W�^�^���G�
�*�
�
��E���z�z�!�}���t�A�w��Q��0����<�<��q�	�!��5�D��<�<��5�D����T�"����W�Q�Z��]�3�;�;�E�!�H�O�O�L�M����L�'�"�+�a�.�9�A�A�(����
��D����t��A�����I
s�AF-c���|j}|r?|jr3|tj|j|j|��fz
}|j
|�}|j|�}|Sr5)r�r�r6r�rr��_with_current_path�options)	rqr�r5r�rewritten_pathr2rMry�new_optionss	         r=�_setup_optionszSubqueryLoader._setup_options�ss��"!�.�.���w�.�.���-�-��K�K��4�4�W�=���
�K�
� � ��0���A�I�I�{�#���r?c�v���jjr!�fd�}|j|�j�}|S)Nc���|xjttj�jj
��z
c_yr5��eager_order_by�tuplerr4ror3�r�rqs �r=�_setup_outermost_orderbyzISubqueryLoader._setup_outermost_orderby.<locals>._setup_outermost_orderby�s3����.�.�%��L�L��!5�!5�!>�!>�?�3��.r?)ror3�_add_context_option)rqr5r`s`  r=r`z'SubqueryLoader._setup_outermost_orderby�s;������(�(�
�
�%�%�(�$�*>�*>��A��r?c�,�eZdZdZdZd�Zd�Zd�Zd�Zy)�SubqueryLoader._SubqCollectionsz�Given a :class:`_query.Query` used to emit the "subquery load",
        provide a load interface that executes the query at the
        first moment a value is needed.

        �r�rsr�rL�subq�_datac��|j|_|j|_|j|_|jxsi|_||_d|_yr5rd)rqr�res   r=rnz(SubqueryLoader._SubqCollections.__init__sI��#�?�?�D�L�%,�%>�%>�D�"� '� 4� 4�D��!�.�.�.�B�D�K��D�I��D�Jr?c�r�|j�|j�|jj||�Sr5)rf�_loadrX)rqr8�defaults   r=rXz#SubqueryLoader._SubqCollections.get
s*���z�z�!��
�
���:�:�>�>�#�w�/�/r?c���tjt�|_|j}|j
�J�|j
|j
�}|jjr|j�}t|j|j��}tj|d��D]*\}}|j|jd�|D���,y)Nc��|ddS)Nr
r���xs r=r>z7SubqueryLoader._SubqCollections._load.<locals>.<lambda>s
��!�A�B�%r?c3�&K�|]	}|d���y�w)rNr��r��vvs  r=r�z8SubqueryLoader._SubqCollections._load.<locals>.<genexpr>s����$7�Q�r�R��U�Q���)�collections�defaultdictr;rfrer��with_sessionr��_populate_existingr�rL�	itertools�groupby�extend)rqr5�rowsr��vs     r=riz%SubqueryLoader._SubqCollections._loads���$�0�0��6�D�J��	�	�A��9�9�$�$�$����t�|�|�,�A�� � �3�3��'�'�)���������-�.�D�!�)�)�$��@���1��
�
�1�
�$�$�$7�Q�$7�7�Ar?c�>�|j�|j�yyr5)rfri)rqr�rrs    r=r�z&SubqueryLoader._SubqCollections.loader s���z�z�!��
�
��"r?N)	r�r�r�r�r�rnrXrir�r�r?r=�_SubqCollectionsrc�s"��	�
�	�	�	0�
	8�"	r?r}c	�z�|j}|jjr|jjry|jj|�}d|_||j}|j|jdd�}	|	�|	}
n|j}
|jjjdtjjtjjf�\}}|tjju}
||z}||z}|jjjdt f|j�}t#j$|d�}|j&r>|j(j*�t-j.d|�d|�d��|j0}|j3|d	�
�}|j5||||
�\}}}}|j7||||||�}tj8|
�}|jjj;|j<dt f|d||fi�|_|j?d	�}|jA||�\}}}|jB|�}|jE|||||
�}|jG||||||
|�}|jI|�}|S)NT�path_with_polymorphic)�subquery_pathsNr2�ormzsubqueryloader for "z!" must invoke lambda callable at z� in order to produce a new query, decreasing the efficiency of caching for this statement.  Consider using selectinload() for more effective full-lambda cachingF)�legacy)%rvr�r��_for_refresh_stater�index�loaders_require_bufferingrorXrrrr�r6r�r�rr�_get_plugin_class_for_plugin�_is_lambda_elementr�r�rr��	_resolved�_create_entities_collectionrr=rr�rs�_set_enable_single_critrH�add_columnsrSrYr`)rqr�rwrxrryrzrvr�with_poly_entityrMrrWrr2�compile_state_clsr1rrr3r<r5rArGrEs                         r=�_setup_query_from_rowprocz(SubqueryLoader._setup_query_from_rowproc$s��� �-�-�
��-�-�@�@��,�,�?�?��"/�"9�"9�"?�"?��"M��,0��)��D�(�(�)�� �8�8��$�$�&=�t�
���'�/��#�{�{��$+�M�M�$D�$D�$H�$H�$�
�
"�
"�
'�
'��)>�)>�)C�)C�D�%
�!�	�>��x�4�4�9�9�9����$�	�'�$�.���]�]�5�5�9�9�
�>�*�G�M�M�
�
�,�H�H���
���(�(��#�#�5�5�=��	�	��Z�)��$�-�-�J�
/�J�J��u�K�
��
���#����	
�	
���!���7�7�����!��

�
�
�K�K�(�)��&�}�}�?�?�J�J��%�%��~�.�
�(�9�n�*E�
� 
���
�%�%�e�,��,0�,@�,@��	�-
�)���\�
�A�M�M�:�&�����
�w�
�L�2B�
��
����
������
��
�)�)�!�,���r?c	
��|rL|jj�6|jjjrtjdd�|j
r|j
||||||||�S|j||||j�\}	}
}	}	|
syt|jt�sy|jj|jjjst!j"d|z��t%|�dk(r+t'j(|j*|j�s%yt'j(|d|j�sy|j-||||d||�}|�y|j.�J�||j0}|j0j2}|j5|j6d�}
|
�/|j9||�}
|j;|j6d|
�|r|D�cgc]}|j<|��}}|j>r|jA|||
||�y|jC|||
||�ycc}w)Nz�The subqueryload loader option is not compatible with DML statements such as INSERT, UPDATE.  Only SELECT may be used.This warning will become an exception in a future release.�2.0�J'%s' does not support object population - eager loading cannot be applied.r
r�rs)"rv�	statement�is_dmlr�warn_deprecatedr�r	r�r�r�rrQrYr8�impl�supports_populationr�r�r�r6�_entity_isarr�r�ror	rXrr}r�rkrC�_create_collection_loader�_create_scalar_loader)rqr�rwrxryr`r�rzr��_r�rerFrsr}s               r=r�z#SubqueryLoader.create_row_processor�sT��
��%�%�/�/�;��%�%�/�/�6�6�� � �M��	
�� � ��;�;���������	�	
�#�7�7��T�7�D�O�O�
���:�q�!����'�/�/�1F�G�
��{�{�(�(����2�7�7�K�K��,�,�@�BF�G��
��t�9��>��'�'��(@�(@�$�+�+�N���%�%�d�2�h����<���-�-������H���

���<���|�|�#�#�#��D�(�(�)���)�)�7�7�
�
�h�h�w�1�1�=�A�����/�/���>�K��H�H�W�'�'���D��6@�A�j��'�/�/�!�,�j�J�A��<�<��*�*����j�*�
�
�&�&����j�*�
��Bs�Ic�6�����|j|�����fd����fd�}|dj�j�f�|dj�j|f�|jr+|dj�j�jf�yy)Nc����j�|�d�}|j�j�j|||�y)Nr�)rXr�r8r�)r�rr�
collectionrsrq�tuple_getters    ���r=�load_collection_from_subqzKSubqueryLoader._create_collection_loader.<locals>.load_collection_from_subqs<���(�����c�):�B�?�J��N�N�4�8�8�$�8�8��u�j�
r?c�8���j|vr�|||�yyr5�r8)r�rrr�rqs   ��r=�&load_collection_from_subq_existing_rowzXSubqueryLoader._create_collection_loader.<locals>.load_collection_from_subq_existing_rows ����x�x�u�$�)�%���<�%r?r��existing�eager��
_tuple_getterrOr8�invoke_all_eagersr�)	rqr�r�rsrFr�r�r�r�s	`  `   @@r=r�z(SubqueryLoader._create_collection_loaders�����+�+�J�7��	�	=�	�5�� � �$�(�(�,E�!F�G��:��%�%�
�X�X�=�>�	
��$�$��w��&�&����+�2D�2D�'E�F�%r?c�6�����|j|�����fd����fd�}|dj�j�f�|dj�j|f�|jr+|dj�j�jf�yy)Nc�����j�|�d�}t|�dkDrtjd�z�|d}|j	�j
�j
|||�y)Nr5r
�LMultiple rows returned with uselist=False for eagerly-loaded attribute '%s' r)rXr�rr�r�r8r�)r�rrr��scalarrsrqr�s     ���r=�load_scalar_from_subqzCSubqueryLoader._create_scalar_loader.<locals>.load_scalar_from_subq-sk���(�����c�):�G�D�J��:���"��	�	�G�IM�N��
 ��]�F��N�N�4�8�8�$�8�8���v�Nr?c�8���j|vr�|||�yyr5r�)r�rrr�rqs   ��r=�"load_scalar_from_subq_existing_rowzPSubqueryLoader._create_scalar_loader.<locals>.load_scalar_from_subq_existing_row8s ����x�x�u�$�%�e�U�C�8�%r?r�r�r�r�)	rqr�r�rsrFr�r�r�r�s	`  `   @@r=r�z$SubqueryLoader._create_scalar_loader(s�����+�+�J�7��		O�	9�	�5�� � �$�(�(�,A�!B�C��:��%�%�
�X�X�9�:�	
��$�$��w��&�&����+�2D�2D�'E�F�%r?)r�r�r�r�rnr�rr=rHrSrYr`r}r�r�r�r�r�r�s@r=rr�s^��� �I�:�'�
/L�bb�H-1�^4�l �D�2�2�hF�Pc�JG�.Gr?r�joinedc�~��eZdZdZdZ�fd�Zd�Z			dd�Zd�Zd�Z	d�Z
d	�Z		d			dd
�Zd�Z
d�Zd
�Zd�Z�xZS)�JoinedLoaderz[Provide loading behavior for a :class:`.Relationship`
    using joined eager loading.

    r�c�\��t�|�||�|jj|_yr5r�rps   �r=rnzJoinedLoader.__init__Or�r?c�X�|jjd�j|�yr�r�r�s  r=r�z!JoinedLoader.init_class_attributeSr�r?c	�<�|jjsy|r9|j�-|jjrt	j
dd�n|jrd|_||j}d}
|r|j|||j�nd}|dur|j|||||�\}}}
n�|j|jd�sE|jr|jdz|jkDry|j|j �ry|j#||||||||�\}}}
}d|_|j'|jdd�}|�t)|�j*}
nd}
||j,}t/j0||j ||||
|
|j |�	�	tj2j5|j6�}|r:|�t9j:d
��|j6D�cgc]}|��|��	c}|_yycc}w)z@Add a left outer join to the statement that's being constructed.Nz�The joinedload loader option is not compatible with DML statements such as INSERT, UPDATE.  Only SELECT may be used.This warning will become an exception in a future release.r�TFr�r'r)�with_polymorphic�parentmapper�chained_from_outerjoinz�Detected unaliased columns when generating joined load.  Make sure to use aliased=True or flat=True when using joined loading with with_polymorphic().)r�r�r�r�rr�rC�multi_row_eager_loadersro�_init_user_defined_eager_procr�$_setup_query_on_user_defined_adapterr�r�r�r�r`�_generate_row_adapter�eager_adding_joinsrXr)�with_polymorphic_mappersrr�_setup_entity_query�NONE_SETr��secondary_columnsr�r�)rqrvrwrxryrzr{r�r�r|r��user_defined_adapter�clauses�add_to_collectionr��	has_nonesr}s                 r=r~zJoinedLoader.setup_queryXsV���,�,�?�?����'�'�3��'�'�.�.�� � �M��	
��\�\�48�M�1��D�(�(�)�����
�.�.���
�(@�(@�
��	� �u�,��9�9�����$��	
���!� �=�=��!9�!9�8�D��?�?��{�{�Q�����8���)�)�$�+�+�6���*�*������!��&�	�
���!�&�04�M�,��8�8��$�$�&=�t�
���'�&� � �&�&�
� $���D�K�K� ���#�#���K�K�����-����#9�
	
��M�M�.�.�}�/N�/N�O�	���+��0�0�I��� -�>�>�3�>�!�!�-�A�>�3�
�/���3s�H�Hc�,�d|jvry|jj}|j|jdd�}|dur|S|jd}|dd\}}|�|t|t�r|jj|�}tjtjj|j||jjd��}n�|j|jd�ra|j|jd�}	tjtjj |	|jj��}n&|j"j|jd�}|j%|d|�|S)N�eager_from_aliasF� user_defined_eager_row_processor���)�
selectabler0�limit_on_entityr)r0)r�rxrQrXrr�rr�aliasr6�
ORMAdapter�_TraceAdaptRole�JOINEDLOAD_USER_DEFINED_ALIASr`r:r�� JOINEDLOAD_PATH_WITH_POLYMORPHIC�_polymorphic_adaptersr�)
rqryrv�target_attributesrxrzr��root_mapperr:r�s
          r=r�z*JoinedLoader._init_user_defined_eager_proc�sx���W�%7�%7�7���|�|�"�"���(�(��$�$�&H�%�
���%���N��"�"�#5�6�� ���I���T����%��%����)�)�%�0���)�)��(�(�F�F���� � �K�K�;�;� %��G��}�}��(�(�*A��$(�8�8�!�,�,�.E�$� �#�-�-��,�,�M�M�$� $��� ?� ?���(�=�=�A�A��K�K����	
����.��	
��r?c���|j|�}|r1|r/|j|�}|j|jd|�n!|r|}|j|jd|�|j}|||fS)Nr�)�_get_entity_clauses�wrapr�r�primary_columns)rqr�rrxrzr�r�s       r=r�z1JoinedLoader._setup_query_on_user_defined_adapter	s���
�,�,�W�5���+�#7�#<�#<�W�#E� ��H�H��"�"�2�$�
�
�#*� ��H�H��"�"�2�$�
�$�3�3��#�W�.?�?�?r?c	�^�|j|jdd�}	|	r|	}
ngt|j�}|jr
|j
}nd}t
j|j|�|jd��nddd��}
t|
�}
|
jd|ftjtjj|
|jjddd��}|jsJ�|�0|jjd|j j"�n|j j"}|sd}|j$j'|j(||||||||r|j*nd	f	�|j,}|j/|jd
|�||||fS)NrT)�flat)r�r�r�joinedloader_ormadapterF)r0�adapt_required�allow_label_resolve�anonymize_labels�	innerjoinr��eager_row_processor)rXrr)rr!r�r6r&r`�_anonymous_fromclause�_memor�r��JOINEDLOAD_MEMOIZED_ADAPTERr:r�ror��create_eager_joinsrO�_create_eager_joinr�r�r�)rqrvrrxryrzr{r�r�r��to_adapt�insp�alt_selectable�
to_adapt_inspr�r�r�s                 r=r�z"JoinedLoader._generate_row_adapter,	s��� �8�8��$�$�&=�t�
���'�H��4�;�;�'�D��$�$�!%����!%���,�,����&�1�#�8�8�d�8�C��� $�	�H� ��)�
��%�%�
&��-�����$�$�@�@�����7�7�� %�!�&�	
���'�'�'�'��"�
���"�"�;��0D�0D�0N�0N�O��%�%�/�/�	��&*�"��(�(�/�/��'�'�������&�+2��'�'��

�	
�*�;�;������)�)�+@�'�J���!2�4J�J�Jr?c
	���|�
|j}
n|}
|jxr|j}d}||jvrv|st|jrhtj|j|j�}
t|
�dkDrtjd��|
r|j|
d}|
d|}}|�||j}}|jj|�}|r�t|dd�rn|jj|
j�j �r|
n�j �}t|j"�j$�j&�}nXtt)j*�j |jd���j$�j&�}n�j&}|j,sJ�|xs"|xs|dk(xs|j.j0}|	}|j2j5d	�jfd
�}|r|t7�fd�|D��z
}|rwt)j8||j||xs6|j.j0xs|xrt;|t<j>��j |�j|��}n�jA||d
||||�}||j|<|j|_!|s�tjD�j&jF�D]U}|
jHjJjM|�s�)|r|jN|}|jQ||jR��W�j&jTr_|xjVt7|jXj[t]j^�j&jT���z
c_+yy)Nr
z�Can't identify which query entity in which to joined eager load from.   Please use an exact match when specifying the join path.rr!FTr�unnested�additional_entity_criteriar�c3�l�K�|]+}|jr|j�j����-y�wr5)�propagate_to_loaders�_resolve_where_criteriar`)r��aerqs  �r=r�z2JoinedLoader._create_eager_join.<locals>.<genexpr>�	s1�����)�4�B��*�*��*�*�4�;�;�7�4�s�14��isouter�
_left_memo�_right_memor�r�)0r`r��_should_nest_selectable�eager_joins�from_clausesr5�#find_left_clause_that_matches_givenr�r�r�r��
setdefaultr
�aliased_insp�_entity_for_mapperrrQrr8ror6r&r!r�represents_outer_join�global_attributesrXr^�_ORMJoinr�r+�Join�_splice_nested_inner_join�stop_on�
_find_columns�primaryjoin�persist_selectabler}�contains_columnrkrur�r3r]�_target_adapter�copy_and_processrr4)rqrvrwrxrzr�r�r�r�rpr��should_nest_selectable�query_entity_key�indexes�clause�default_towrap�towrap�efm�onclause�attach_on_outside�extra_join_criteriar��	eagerjoinr�s`                       r=r�zJoinedLoader._create_eager_join{	s������&�-�-�K�&�K�
�1�1�
6��5�5�	�
 ��
�
� 9� 9�9�*��*�*��B�B��*�*�L�,C�,C��G��7�|�a���0�0�0����&�3�3�G�A�J�?��
4;�1�:�v�.� ��#���'�'�-��
�*�*�5�5��n�
����w� 2�E�:�
�*�*�=�=�"���t�{�{�3� ������#�3�:�:�t�x�x��9M�9M�N��"��)�)����W�%7�%7����H�H��(�(����+�+�H��'�'�'�'�'�&�
>��}�
>��J�&�
>��'�'�=�=�		�-��%2�%D�%D�%H�%H�
)�4�;�;�7��&
�"�&��5�)�4�)�$�
��� �)�)���$�$��%�
�M��+�+�A�A�M�*�K�z�&�#�(�(�/K��;�;� ����-� 3�
�I��6�6��d�2�h����;N��I�7@�
�!�!�"2�3�)�3�3�	��� �-�-��$�$�0�0����1�1�3�3�C�C�C�H��%�o�o�c�2��!�?�?��]�:�:��
����(�(��(�(�E��*�*�;�;��L�L��!5�!5�!>�!>�?��-�
�(�)r?c	
��||dusJ�|durt|tj�sJ�t|tjj
�r!|j
|||j||||�St|tj��rQ|j}	|j
|||j||||	�|	djnd��}
|
�|js|
js|j|
�}nBtj|j|
|j|j|j��}|
j |_|S|j
|||j||||j|	��}
|
�Utj|
|j|j|j|j��}|
j |_|S|dur	Jd��y|j#|�sy|r-t%|�d	kDr|d
|usJ�|dd|j&ddk7rytj||j(|d|||dj|��S)
Nr�Fr�)�entity_inside_join_structure)r�r�)r�detected_existing_path)r�r�z9assertion failed attempting to produce joined eager loadsr'���rr�)r�r6r�r+r��FromGroupingr��elementr��rightr`r��_splice_into_center�leftr
r�rrr�rxr�)rqrx�entity_we_want_to_splice_onto�join_objr�r
rprr�join_right_path�target_joinrs            r=r�z&JoinedLoader._splice_nested_inner_join
s���*-��R��8�8�8�'�5�0��h��(9�(9�:�:�:��h���� ;� ;�<��1�1��-�� � ����,��
���(�"3�"3�
4�'�2�2�O��8�8��-�������'�2�$�B�'�.�.��9��K��&� �'�'��0C�0C� (� <� <�[� I�I� (� 1� 1� �
�
�#� �)�)� (� 0� 0�#+�#6�#6�!�I�-8�,G�,G�	�)� � �#�<�<��1��M�M���"�19�1D�1D�+:�=�	���*� (� 1� 1�#� ��� �)�)� (� 0� 0�$,�$8�$8�!�I�1<�0K�0K�I�-�$�$�,�u�4��O�N�O���-�0�0�1M�N��"�c�*@�&A�A�&E�
*�"�-�1M�M�M�M�H&�a��+�t�y�y��2��>��� � ��� � ���3��T�"�X�_�_�-�*�
�	
r?c�j�|j}|r|j|||j�nd}|durE|}|jr|r|j	|j�}n8|jr,|j}n|j|jd�}|�y|jj||�r|Sy)NFr�)rvr�r�compound_eager_adapterr�rXr`�_result_has_identity_key)	rqr�r�rzrxryrvr��	decorators	         r=�_create_eager_adapterz"JoinedLoader._create_eager_adapter�
s����-�-�
��
�.�.����(:�(:�
��	� �u�,�,�I��3�3�	�%�N�N�!�8�8��	��5�5�)�@�@�	�����(�(�*?��I�� ���;�;�/�/��	�B���r?c	
��|jjjsy|jj|j
jjstjd|z��|jrd|_||j}	|j||||	|�}
|
durs|j
}tj||j |||	|j"|
�}|js|j%||||�y|j'||||�y|jj)d�j+||||||||�y)Nr�TFr�)rvr�r�rQrYr8r�r�r�r�rC�loaders_require_uniquingror"r�_instance_processorr`rr�r�r�r�)
rqr�rwrxryr`r�rzr��our_path�
eager_adapterr8�	_instances
             r=r�z!JoinedLoader.create_row_processor�
sN���$�$�4�4�G�G���{�{�(�(����2�7�7�K�K��,�,�@�BF�G��
�
�<�<�/3�G�,���,�,�-���2�2��V�W�h��
�
���%��(�(�C��3�3�����������%��
�I��<�<��*�*�7�C��J�O��.�.��S�)�Z��
� � �.�.�%�
�"�"���������	r?c�
�������fd�}���fd�}�fd�}|dj|j|f�|dj|j|f��jr!|dj|j|f�yy)Nc���tj||��}tj|d�}|�j|�f<�|�}|�|j	|�yy�N�append_without_event�rrr�UniqueAppenderrO)	r�rrr��result_list�instr(r�r8s	      ���r=�#load_collection_from_joined_new_rowzSJoinedLoader._create_collection_loader.<locals>.load_collection_from_joined_new_row*sg���$�9�9�%���L�J��-�-��2��K�0;�G����s�|�,��S�>�D����"�"�4�(� r?c���|�f�jvr�j|�f}n>tj||��}tj|d�}|�j|�f<�|�}|�|j	|�yyr+r-)	r�rrr/r�r0r(r�r8s	      ���r=�(load_collection_from_joined_existing_rowzXJoinedLoader._create_collection_loader.<locals>.load_collection_from_joined_existing_row7s�����s�|�w�1�1�1�%�0�0�%���>��(�=�=��5�#��
�#�1�1�� 6���4?��"�"�E�3�<�0��S�>�D����"�"�4�(� r?c����|�yr5r��r�rrr(s   �r=� load_collection_from_joined_execzPJoinedLoader._create_collection_loader.<locals>.load_collection_from_joined_execJ�
����c�Nr?r�r�r��rOr8r�)rqr�r8r(r�r1r3r6s ```    r=r�z&JoinedLoader._create_collection_loader)s����	)�	)�&	�	�5�� � �
�X�X�:�;�	
�	�:��%�%�
�X�X�?�@�	
��$�$��w��&�&����;�<�
�%r?c�������fd�}���fd�}�fd�}|dj�j|f�|dj�j|f�|jr!|dj�j|f�yy)Nc����|�|�<yr5r�)r�rrr(r8s   ��r=�load_scalar_from_joined_new_rowzKJoinedLoader._create_scalar_loader.<locals>.load_scalar_from_joined_new_rowYs���#�3��E�#�Jr?c�j���|�}�|vr!||�urtjd�z�yy||�<y)Nr�)rr�)r�rrr�r(r8rqs    ���r=�$load_scalar_from_joined_existing_rowzPJoinedLoader._create_scalar_loader.<locals>.load_scalar_from_joined_existing_row^sM���!��~�H��e�|��5��:�-��I�I�K����.�&��c�
r?c����|�yr5r�r5s   �r=�load_scalar_from_joined_execzHJoinedLoader._create_scalar_loader.<locals>.load_scalar_from_joined_execqr7r?r�r�r�r8)rqr�r8r(r�r;r=r?s` ``    r=r�z"JoinedLoader._create_scalar_loaderXs����	(�
	&�&	�	�5�� � �$�(�(�,K�!L�M��:��%�%�
�X�X�;�<�	
��$�$��w��&�&����7�8�
�%r?)NNF)FN)rz#Union[Mapper, None, Literal[False]]rz$Optional[path_registry.PathRegistry])r�r�r�r�r�rnr�r~r�r�r�r�r�r"r�r�r�r�r�s@r=r�r�Ds�����
�I�:�'���$�@�D7�r@�2MK�^]�R
�GK�k
�'
�k
�!E�k
�Z"�H<�|-�^#r?r��selectinc���eZdZdZej
dgd��ZdZ�fd�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�Zd�Zd
�Z�xZS)�SelectInLoader)r��	omit_join�
_parent_alias�_query_info�_fallback_query_info�	queryinfo)�load_only_child�load_with_join�in_expr�pk_cols�zero_idx�child_lookup_colsi�c����t�|�||�|jj|_|jjt
ju}|jj�|jj|_n~|jjd�}|r|j|_nO|jjdj|jdd|jj��|_|jrC|r+|j�|_|j#�|_y|j'�|_y|j#�|_y)Nr�rTFr-)rmrnror�r]r
rArCr�r rQr9r�rr:�_init_for_omit_join_m2orE�_init_for_joinrF�_init_for_omit_join)rqrQrr�is_m2or�rss     �r=rnzSelectInLoader.__init__�s$���
�����.��.�.�9�9����%�%�/�/�:�3G�3G�G�����)�)�5�!�1�1�;�;�D�N��-�-�;�;�%��J��!+�!3�!3���!%���!8�!8��!;�!C�!C��-�-� $�!&� $��� ?� ?�	"D�"����>�>��#'�#?�#?�#A�� �,0�,?�,?�,A��)�#'�#;�#;�#=�� �#�2�2�4�D�r?c����t�jjj���j	��fd�t��D���jjD�cgc]}|�vs��|��c}x}}t|�dkDrtj|�}d}n|d}d}�jdd|||d�Scc}w)Nc3��K�|]6}�jjj|d�D]}|�|f���
�8y�w)r�N)rQr:rX)r�r��equiv�pk_to_fkrqs   ��r=r�z5SelectInLoader._init_for_omit_join.<locals>.<genexpr>�sF�����
�#�����8�8�<�<�Q��C���H�Q�K� �C�
!�#�s�<?r
FrT)rkror1�local_remote_pairsr r;rQr�r�r+�tuple_�
query_info)rqr�rK�fk_colsrJrLrVs`     @r=rQz"SelectInLoader._init_for_omit_join�s������ � �0�0�C�C�
��	���
��(�^�
�	
�&*�[�[�%<�%<�
�%<�c��x��H�S�M�%<�
�	
��'��w�<�!���j�j�'�*�G��H��a�j�G��H����u�e�W�g�x��N�N��
s�(	B>�2B>c�&�|jj}t|�dkDrtj|�}d}n|d}d}|j
j
d�}|D�cgc]}|j|��}}|jdd||||�Scc}w)Nr
FrTr�)	r`r�r�r+rXror�r#rY)rqrKrJrLr�r{�lookup_colss       r=rOz&SelectInLoader._init_for_omit_join_m2o�s����+�+�)�)���w�<�!���j�j�'�*�G��H��a�j�G��H��)�)�7�7�8M�N�
�AH�I��2�z�2�2�2�6���I�����%��'�8�[�
�	
��Js� Bc�b�t|jj�|_t	|j�}|jj
D�cgc]}|j
|���}}t|�dkDrtj|�}d}n|d}d}|jdd|||d�Scc}w)Nr
FrT)r&rQr\rDr)r��_adapt_elementr�r+rXrY)rq�pa_inspr�rKrJrLs      r=rPzSelectInLoader._init_for_join�s���)�$�+�+�*<�*<�=����$�,�,�-��37�;�;�3J�3J�
�3J�C�G�"�"�3�'�3J�	�
��w�<�!���j�j�'�*�G��H��a�j�G��H����u�d�G�W�h��M�M��
s�B,c�X�|jjd�j|�yr�r�r�s  r=r�z#SelectInLoader.init_class_attribute�r�r?c	�N�|jr|j||||||||�S|j||||j��\}	}
}}|
sy|jj
jsy|jj|jjjstjd|z��t|�dk(r+tj |j"|j�s%ytj |d|j�sy|	}
||j$}|j'|j(dd�}|�t+|�}n|j,}t.j0j3||
|j|j$|j4||||�	y)Nr�r�r
r�r)r�r	r�r�rvr�r�rQrYr8r�r�r�r�r�r6r�rrorXrr)rrr�r�r�)rqr�rwrxryr`r�rzr�r�r�rsr��
selectin_pathr�r�rMs                 r=r�z#SelectInLoader.create_row_processor�s���� � ��;�;���������	�	
� 
�%�%��T�7�t���
&�
�	
�����
���$�$�4�4�G�G���{�{�(�(����2�7�7�K�K��,�,�@�BF�G��
��t�9��>��'�'��(@�(@�$�+�+�N���%�%�d�2�h����<��&�
��4�/�/�0��'�?�?���� 7��
���'�&�'7�8��#�{�{�����*�*����K�K�� � ��������
	
r?c	�	��� �!�|r�j|vry�j}	|	jr�tjt
�}
g}�j� |D]�\�}�j�!t� ��!fd�|	jD��}
tj|
vr�j}	n2d|
vr|
|
j��!|f��n|j��!|f���|	js/|D��cgc]"\}}|jd||j|f��$}
}}|	j}|	j}|	j s;|j"r/|D�cgc]}|j%|���}}|j%|�}t'j(dg|���}|j+�}|j+�}t-j.||gt0t2j4d|d���}|	j s|j7|�}na|j7�j8�j;t=�j8�j>j�jA|��}|jC|jEtGjHd���}|jJjL}|�j>}||jNur
|jP}nP|jP}|jNjP}tS||�D��cgc]\}}|jU||���}}}|r5|jVr)|t'jX||j[|��fz
}|�|j]�}|j^|�}|jad|i�}|jbr|jed	�
�}�j>jfr}|	j sP�j>jf}|j"r|D�cgc]}|j%|���}}|jf|�}n!�fd�}|ji|�j>�}|	jr�jk
|	|||�y�jm
|	|||�ycc}}wcc}wcc}}wcc}w)Nc3�d�K�|]'}�j��|tj�����)y�w)rxN)rYr�PASSIVE_NO_FETCH)r��lkr`r��
state_dicts  ���r=r�z0SelectInLoader._load_for_path.<locals>.<genexpr>Vs?�����&�;��
�4�4��"�� *� ;� ;�	5��;�s�-0r
r{r�)�compile_state_plugin�plugin_subject)r}rr�r~�primary_keysr�T)r�c���|xjttj�jj
��z
c_yr5r\r_s �r=r`z?SelectInLoader._load_for_path.<locals>._setup_outermost_orderby�s3���#�2�2�e����T�%9�%9�%B�%B�C�7��2r?)7r8rErHrsrtr;rQrkr^rMrr�rFrOrKrJrIr!r^r6�Bundler�r.r�r-rr�r�rDrLr
rorJ�filter�in_r+rErv�select_statement�user_passed_queryr��zip�'_adapt_cached_option_to_uncached_optionr�r�r�r�rV�_update_compile_optionsr�rsr3ra�_load_via_child�_load_via_parent)"rqr�rxr�r�rMryr�rsrY�
our_states�none_statesr��
related_identr�rKrJr��
bundle_ent�
bundle_sql�
entity_sqlr5r2r�rX�cached_options�uncached_options�orig_opt�uncached_optr]r=r`r`rgs"`             `                 @@r=r�zSelectInLoader._load_for_path>s���������2���%�%�
��%�%�$�0�0��6�J��K��[�[�F�$*� ��y�"�Z�Z�
� %�&�)�:�:�&�!�
�(�9�9�]�J�!%�!:�!:�J���}�,��}�-�4�4��
�I�6�� �&�&��z�9�'E�F�7%+�<�)�)�)/��(.�$�E�9����1��u�e�j�j�)�<�(.�
��
�$�$���$�$���(�(� �0�0�DK��DK�S�$�3�3�C�8�G���+�9�9�'�B���_�_�T�4�G�4�
��2�2�4�
�%�8�8�:�
��%�%�$�j�1�7�,�D�D�(-�"2��	
���(�(��
�
�.�/�A�
�
�
�d�0�0�1�6�6���*�*�D�,@�,@�,D�,D�E�M�M�$���A�
�H�H�W�[�[����~�!>�?�@���*�*�;�;�
�2�d�2�2�3����2�2�2�$�2�2�K�'�5�5�N�&�8�8�F�F��/2�"�$4�/�	�/�*�H�l��@�@��\��/�	
���w�.�.���-�-�$��4�4�W�=���
�K��&�+�?�?�A�N��A�I�I�{�#��
�%�%���&G�H���$�$��#�#�d�#�;�A����(�(��,�,�!%�!5�!5�!>�!>��#�4�4�%3�&�$2�D�)�7�7��=�$2�#�&��A�J�J��/���
�)�)�,�d�.B�.B����%�%�� � ������!�

�
�!�!��J��7�4E�
��u�� ��d��<&s�,'Q2�
Q8�>Q=�.Rc	��|j}t|�}|r�|d|j}	||jd}|jj	|d|	D�
cgc]}
|j
r|
dn|
��c}
i|��j
�D��cic]\}}||��
}
}}|	D]d}
|
j|
d�}||
D]H\}}}|s|j|vr�|j|j�j|||s|n|g��J�f|r��|D]C\}}}|s|j|vr�|j|j�j||d��Eycc}
wcc}}w)Nrrj�rLrs)rC�sorted�
_chunksizer�r�rLrDrXr8r�r�)rqrvrwrYr5r�rsrC�our_keys�chunkr8r�r{�data�related_objr�rr�s                  r=rtzSelectInLoader._load_via_child
s����,�,���*�%����Q����1�E����� 1�2�H�$�O�O�3�3��&�',�)�',��'1�&9�&9�C��F�s�B�',�)��'8�4�	��&�(�	��	�D�A�q��1��	�
����#�h�h�s�D�1��/9�#��+�E�5�)�$����U�):� ��N�N�4�8�8�,�@�@���+2���
��	0?��#�D(3�#�E�5�)�����U�!2��
�N�N�4�8�8�$�8�8���t�L�
(3��5)��s�E
�
Ec
�B�|j}|rdnd}|�r�|d|j}||jd}|D�	�
��cgc]\}	}
}}|jr|	dn|	��}
}}
}	}tjt
�}t
j|jj|d|
i|��j�d��D] \}}||jd�|D���"|D]�\}	}
}}|s|j|vr�|j|	|�}|sX|rVt|�dkDrtj d|z�|
j#|j�j%|
||d���|
j#|j�j%|
||���|r���yycc}}}
}	w)	Nr�rrjr�c��|dSr�r�rms r=r>z1SelectInLoader._load_via_parent.<locals>.<lambda>^
s��!�A�$r?c3�&K�|]	}|d���y�w)r
Nr�rps  r=r�z2SelectInLoader._load_via_parent.<locals>.<genexpr>`
s����1�q��r�!�u�q�rrr
r�)rCr�rLrsrtr;rwrxr�r�rDryr8rXr�rr�r�r�)rqrvrYr5r�rsrC�
_empty_resultr�r8r�rgr�rjr�r�r{r�s                  r=ruzSelectInLoader._load_via_parentH
s����,�,��%��4�
���q�4�?�?�3�E�#�D�O�O�$5�6�J�:?��9>�5�C��
�I�%�-�-��A��3�6�9>�
��
�*�*�4�0�D�!�)�)����'�'��*�L�9�&7�(���&�(��
���1��Q����1�q�1�1��6;�1��U�J�	� �T�X�X��%;��!�X�X�c�=�9�
��:��:���*��	�	�.�04�5��
�N�N�4�8�8�,�@�@��z�:�a�=���N�N�4�8�8�,�@�@��z�:��'6;�)��s�F
)r�r�r�r�rs�
namedtuplerYr�rnrQrOrPr�r�r�rtrur�r�s@r=rBrB~sb����I�(��'�'��	
�
�J��J�5�<O�,
� N�'�
N
�`Q�f5M�n/r?rBc�����fd���fd�}�fd�}tj|d|ddd��tj|d|ddd��y)Nc	���|��|j�jk(rh|jtj|��}|rB||ur>t	j
dt
j|��d|j�d��d�d���|S)Nz	Instance z+ is already associated with an instance of z	 via its z0 attribute, and is only allowed a single parent.�bbf1)�code)	r8�	hasparentr�instance_stater�r�r6�instance_strr\)r�rJ�oldvalue�	initiatorr�r:s     �r=�	_do_checkz*single_parent_validator.<locals>._do_check{
sz��������$�(�(�!:�!�+�+�J�,E�,E�e�,L�M�I��X�U�2��0�0� �,�,�U�3�U�\�\�4�I� ����r?c����||d|�Sr5r�)r�rJr�r�s   �r=rOz'single_parent_validator.<locals>.append�
s������t�Y�7�7r?c����||||�Sr5r�)r�rJr�r�r�s    �r=�set_z%single_parent_validator.<locals>.set_�
s������x��;�;r?rOT)�raw�retvalrJr�)r(�listen)r9r:rOr�r�s `  @r=rPrPz
sE����8�<�
�L�L��h��D��d��
�L�L��u�d��T�$�Or?)NNNNFN)Wr��
__future__rrsrw�typingrrrrrr	�rrr�r
rrrrrrrr6�baserrrrrrrr�rrrrr r!r�r"r�r#r�r$r%r&r(r�r)r*r+r5r,�sql.selectabler-r.�util.typingr/r`r0r1�sql.elementsr2rf�ColumnProperty�strategy_forrj�class_loggerr�r�r�r�rrr�
MemoizedSlots�
Identifiedrr�r�r�rr�rBrPr�r?r=�<module>r�s���2�#������� ������������"�"�'��&���)�$�*�!�&�+�#� �"� ��������"��;�#�!���3�,�������N!�b���'�'�5�5�'�I�(
��(
�J�(
�V������'�'�4�%�'�H�W:�>�W:�I��W:�t������'�'��'�>�T
�\�T
�?��T
�n������'�'��$�'�G����'�'�
�d�d�(�����'�'�4�'�8�l
�>�l
�9��H��l
�^8�8�0"
��"
�J����#�#�0�0�D�0�A��n��B�������#�#�0�0�h�0�?��#�#�0�0�d�0�;�#=�)�#=�<�@��#=�L����#�#�0�0�d�0�;��#�#�0�0�h�0�?��#�#�0�0�g�0�>��#�#�0�0�n�0�E��#�#�0�0�n�0�E�kJ��� 2� 2�C�N�N�kJ�F�F�?�@�<��kJ�\1
�1
�hIH�+�IH�X�#�#�0�0�k�0�B�a�j�a�C�a�H����#�#�0�0�j�0�A�G
G�Z�G
G�B��G
G�T����#�#�0�0�h�0�?��#�#�0�0�e�0�<�t�-�t�=�@��t�n����#�#�0�0�j�0�A�w�Z��!3�!3�w�B��w�tPr?

if you don't want to be vaporized in a nuclear explosion, i simply have to become nuclear myself… i am atomic