Ë
    V.j0 ã                  ó	  — d 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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 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.m0Z0 dd'l.m1Z1 dd(l.m2Z2 dd)l.m3Z3 dd*l.m4Z4 dd+l.m5Z5 dd,l.m6Z6 dd-l7m8Z8 dd.l7m9Z9 dd/l7m:Z: d0d1lm;Z< d0d2lm=Z= d0d3lm>Z> d0d4lm?Z? d0d5lm@Z@ d0d6lm7Z7 d0d7lAmZ d0d8l@mBZB d0d9l@mCZC d0d:l@mDZD d0d;l@mEZE d0d<l@mFZF d0d=lGmHZH d0d>lGmIZI d0d?lJmKZK d0d@lLmMZM d0dAlLmNZN d0dBlOmPZP d0dClOmQZQ d0dDlOmRZR d0dElOmSZS d0dFlOmTZT d0dGlOmUZU d0dHlOmVZV d0dIlOmWZW d0dJlXmYZY d0dKlXmZZZ d0dLlXm[Z[ e
j¸                  rºddMl"m]Z] ddNl"m^Z^ ddOl"m_Z_ ddPl"m`Z` ddQl"maZa ddRl"mbZb ddSl"mcZc ddTl%mdZd ddUlemfZf ddVlemgZg ddWlhmiZi ddXljmkZk ddYllmmZm ddZlnmoZo dd[lpmqZq dd\lrmsZs dd]ltmuZu dd^l7mvZv dd_l7mwZw d0d`lGmxZx d0dalGmyZy d0dblGmzZz d0dclJm{Z{ d0ddlJm|Z| d0delLm}Z} d0dflLm~Z~ d0dglLmZ d0dhl€m�Z� d0dil‚mƒZƒ d0djlXm„Z„ d0dklXm…Z…  edle¬m«      Z† edne¬m«      Z‡ edoe¬m«      Zˆ edpe¬m«      Z‰ edqe¬m«      ZŠee‹ee†   eg ee†   f   drdseg drf   eg dsf   f   ZŒeZdt   Z�ee‹eHeŽ   f   Z�edue‹eg duf   f   Z�eeZdv   e‹eHe   eg eHe   f   eg eeHe      f   eee‹eHe   f      f   Z‘ee‹ee‹ee‹ef   f   f   Z’eeMe   eIe   eE�j&                  dwf   Z”ee‹ee”   eg ee”   f   eg e”f   e”f   Z• edxeHe   ¬m«      Z– edydz¬m«      Z—eeeNe   eNe   f      Z˜eeeNe   eNe   f      Z™eeeNe   eNe   f      Zšd�d{„Z›d�d|„Zœe�j:                   G d}„ d~ee‡eˆf   «      «       ZžeeZdv   eeNe   df   f   ZŸ G d€„ d�e«      Z e>�jB                   G d‚„ dƒe0e6e†   e>�jD                  «      «       Z£d‘d„„Z¤ G d…„ d†«      Z¥ G d‡„ dˆ«      Z¦ e¦d‰dŠ«      Z§ e¦d‹dŠ«      Z¨ G dŒ„ d�e£e†   e&e†   «      Z© G dŽ„ d�e©e†   e-e†   e)e†   «      Zªy)’a
  Heuristics related to join conditions as used in
:func:`_orm.relationship`.

Provides the :class:`.JoinCondition` object, which encapsulates
SQL annotation and aliasing behavior focused on the `primaryjoin`
and `secondaryjoin` aspects of :func:`_orm.relationship`.

é    )ÚannotationsN)Úabc)ÚAny)ÚCallable)Úcast)Ú
Collection)ÚDict)Ú	FrozenSet)ÚGeneric)ÚIterable)ÚIterator)ÚList)Ú
NamedTuple)ÚNoReturn)ÚOptional)ÚSequence)ÚSet)ÚTuple)ÚType)ÚTypeVar)ÚUnioné   )Ú
attributes)Ústrategy_options)Úinsp_is_aliased_class)Úis_has_collection_adapter)Ú_DeclarativeMapped)Ú_is_mapped_class)Úclass_mapper)ÚDynamicMapped)ÚLoaderCallableStatus)ÚPassiveFlag)Ú	state_str)ÚWriteOnlyMapped)Ú_AttributeOptions)Ú_IntrospectsAnnotations)Ú
MANYTOMANY)Ú	MANYTOONE)Ú	ONETOMANY)ÚPropComparator)ÚRelationshipDirection)ÚStrategizedProperty)Ú_orm_annotate)Ú_orm_deannotate)ÚCascadeOptionsé   )Úexc)ÚExists)Úlog)Úschema)Úsql)Úutil)Úinspect)Ú	coercions)Ú
expression)Ú	operators)Úroles)Úvisitors)Ú_ColumnExpressionArgument)Ú_HasClauseElement)Ú_safe_annotate)ÚColumnClause)ÚColumnElement©Ú_deep_annotate)Ú_deep_deannotate)Ú_shallow_annotate)Úadapt_criterion_to_null)ÚClauseAdapter)Újoin_condition)Úselectables_overlap©Úvisit_binary_product)Úde_optionalize_union_types)ÚLiteral)Úresolve_name_to_real_class_name)Ú_EntityType)Ú_ExternalEntityType)Ú_IdentityKeyType)Ú_InstanceDict)Ú_InternalEntityType)Ú_O)Ú_RegistryType)ÚMapped)Ú_class_resolver)Ú_ModNS)Ú_ClassScanMapperConfig)ÚDependencyProcessor)ÚMapper)ÚQuery)ÚSession)ÚInstanceState)Ú
LazyLoader)ÚAliasedClass)ÚAliasedInsp)Ú_CoreAdapterProto)Ú_EquivalentColumnMap)Ú	_InfoType)Ú_AnnotationDict)ÚSupportsAnnotations)ÚBinaryExpression)ÚBindParameter)ÚClauseElement)ÚTable)Ú
FromClause)Ú_AnnotationScanType)ÚRODescriptorReferenceÚ_T)ÚboundÚ_T1Ú_T2Ú_PTÚ_PT2ú
Mapper[_T]zAliasedClass[_T])ÚselectÚjoinedÚselectinÚsubqueryÚraiseÚraise_on_sqlÚnoloadÚ	immediateÚ
write_onlyÚdynamicTFNrk   FzMapped[Any]Ú_CEAÚ_CEúColumnElement[Any]c                ób   — t        t        j                  t        j                  | «      ddi«      S )a  Annotate a portion of a primaryjoin expression
    with a 'remote' annotation.

    See the section :ref:`relationship_custom_foreign` for a
    description of use.

    .. seealso::

        :ref:`relationship_custom_foreign`

        :func:`.foreign`

    ÚremoteT©Ú_annotate_columnsr8   Úexpectr;   ÚColumnArgumentRole©Úexprs    ú^C:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\sqlalchemy/orm/relationships.pyrƒ   rƒ   Ò   s.   € ô Ü×Ñœ×1Ñ1°4Ó8¸8ÀTÐ:Jóð ó    c                ób   — t        t        j                  t        j                  | «      ddi«      S )a  Annotate a portion of a primaryjoin expression
    with a 'foreign' annotation.

    See the section :ref:`relationship_custom_foreign` for a
    description of use.

    .. seealso::

        :ref:`relationship_custom_foreign`

        :func:`.remote`

    ÚforeignTr„   rˆ   s    rŠ   r�   r�   å   s.   € ô Ü×Ñœ×1Ñ1°4Ó8¸9ÀdÐ:Kóð r‹   c                  óL   — e Zd ZU dZdZded<   ded<   ded<   dd	„Z	 	 	 	 dd
„Zy)Ú_RelationshipArgztstores a user-defined parameter value that must be resolved and
    parsed later at mapper configuration time.

    )ÚnameÚargumentÚresolvedÚstrr�   rp   r‘   zOptional[_T2]r’   c                ó   — | j                   d uS ©N)r‘   ©Úselfs    rŠ   Ú_is_populatedz_RelationshipArg._is_populated  s   € Ø�}‰} DÐ(Ð(r‹   c                óÒ   — | j                   }t        |t        «      r!  ||| j                  dk(  «      «       | _        y t        |«      rt        |«      s |«       | _        y || _        y )NÚ	secondary)r‘   Ú
isinstancer“   r�   r’   Úcallabler   )r—   Úclsregistry_resolverÚ
attr_values      rŠ   Ú_resolve_against_registryz*_RelationshipArg._resolve_against_registry  s]   € ð —]‘]ˆ
ä�j¤#Ô&ðÑ0Ø˜DŸI™I¨Ñ4óó ˆD�Mô �jÔ!Ô*:¸:Ô*FÙ&›LˆD�Mà&ˆD�Mr‹   N©ÚreturnÚbool)r�   ú&Callable[[str, bool], _class_resolver]r¡   ÚNone)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__Ú__annotations__r˜   rŸ   © r‹   rŠ   r�   r�   ù   s8   … ñð
 /€IØ
ƒIØƒMØÓó)ð'Ø$Jð'à	ô'r‹   r�   .c                  óN   — e Zd ZU dZded<   ded<   ded<   ded<   d	ed
<   d	ed<   y)Ú_RelationshipArgszWstores user-passed parameters that are resolved at mapper configuration
    time.

    zP_RelationshipArg[Optional[_RelationshipSecondaryArgument], Optional[FromClause]]rš   z\_RelationshipArg[Optional[_RelationshipJoinConditionArgument], Optional[ColumnElement[Any]]]ÚprimaryjoinÚsecondaryjoinz>_RelationshipArg[_ORMOrderByArgument, _RelationshipOrderByArg]Úorder_byzN_RelationshipArg[Optional[_ORMColCollectionArgument], Set[ColumnElement[Any]]]Úforeign_keysÚremote_sideN)r¥   r¦   r§   r¨   rª   r«   r‹   rŠ   r­   r­     sB   … ñð
ó ðó ðó ð MÓLðó ðô r‹   r­   c            $      óÎ  ‡ — e Zd ZU dZej
                  ZdZ	 dZdZ	de
d<   de
d<    eddddd¬«      Zd	Zd
e
d<   de
d<   de
d<   de
d<   de
d<   de
d<   de
d<   de
d<   de
d<   de
d<   de
d<   de
d<   de
d<   d e
d!<   d"e
d#<   	 	 dQd	d	d	d	d	dd	d	dd$dd	d%ddddd	d	d	d	ddd	dd	d	d	d	d	ddd	dd&œ"	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dRˆ fd'„ZdSd(„ZdTd)„Z G d*„ d+ej$                  ee   «      Z	 	 dU	 	 	 	 	 	 	 dVd,„Z	 	 	 dW	 	 	 	 	 	 	 	 	 dXd-„Z	 	 	 	 	 	 	 	 	 	 dYd.„Z	 	 dZ	 	 	 	 	 d[d/„Zd\d0„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d]d1„Zej:                  f	 	 	 	 	 	 	 	 	 d^d2„Z	 d_	 	 	 	 	 	 	 	 	 	 	 d`d3„Ze dad4„«       Z!e"	 	 	 	 	 	 dbd5„«       Z#dcd6„Z$ejJ                  ddd7„«       Z&ejJ                  ded8„«       Z'dfˆ fd9„Z(dfd:„Z)dfd;„Z*	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dgd<„Z+ ejX                  d=«      d_dhd>„«       Z-dfd?„Z.e 	 	 did@„«       Z/e 	 	 djdA„«       Z0ejJ                   ejX                  dB«      	 	 dkdC„«       «       Z1dfdD„Z2e dldE„«       Z3e3jh                  dmdF„«       Z3dndG„Z5dodH„Z6dpdI„Z7dqdJ„Z8dfdK„Z9 ejX                  dL«      dfdM„«       Z:ejJ                  dadN„«       Z;ejJ                  dadO„«       Z<	 	 	 	 	 	 dr	 	 	 	 	 	 	 	 	 	 	 	 	 dsdP„Z=ˆ xZ>S )tÚRelationshipPropertyzÿDescribes an object property that holds a single item or list
    of items that correspond to a related database table.

    Public constructor is the :func:`_orm.relationship` function.

    .. seealso::

        :ref:`relationship_config_toplevel`

    TzSequence[str]Ú	_overlapsr_   Ú_lazy_strategyF©Úpassive_deletesÚpassive_updatesÚenable_typechecksÚactive_historyÚcascade_backrefsNzOptional[DependencyProcessor]Ú_dependency_processorúColumnElement[bool]r®   úOptional[ColumnElement[bool]]r¯   úOptional[FromClause]rš   ÚJoinConditionÚ_join_conditionÚ_RelationshipOrderByArgr°   úSet[ColumnElement[Any]]Ú_user_defined_foreign_keysÚ_calculated_foreign_keysr²   Úlocal_columnsÚ_ColumnPairsÚsynchronize_pairsúOptional[_ColumnPairs]Úsecondary_synchronize_pairsÚlocal_remote_pairsr+   Ú	directionr­   Ú
_init_argszsave-update, mergeru   )"ÚuselistÚcollection_classr®   r¯   Úback_populatesr°   ÚbackrefÚoverlapsÚpost_updateÚcascadeÚviewonlyÚattribute_optionsÚlazyr¸   r¹   r»   rº   r±   r²   Ú
join_depthÚcomparator_factoryÚsingle_parentÚ	innerjoinÚdistinct_target_keyÚload_on_pendingÚquery_classÚinfoÚ	omit_joinÚsync_backrefÚdocÚbake_queriesr¼   Ú_local_remote_pairsÚ_legacy_inactive_history_stylec       "        óp  •— t         ‰%| �  |¬«       || _        || _        t	        t        d|d «      t        d|d «      t        d|d «      t        d|d «      t        d|d «      t        d|d «      «      | _        || _        || _        |r| j                  |||||"¬«       |r|rt        j                  d	«      ‚|| _        || _        || _        || _        || _        |"rt        j                  d
«      ‚|| _        || _        || _        || _        || _        | | _        || _        |$| _        || _        |rt5        j6                  d«       || _        |#| _        || _        |xs t>        j@                  | _!        t5        jD                  | «       |�| jF                  jI                  |«       d| j                  ff| _%        tM        «       | _'        |
r%tM        tQ        jR                  d|
«      «      | _*        nd| _*        || _+        || _,        | jX                  r|	rt        j                  d«      ‚d | _-        y |	| _-        y )N)r×   rš   r®   r¯   r°   r±   r²   r·   z-sync_backref and viewonly cannot both be TruezSThe 'cascade_backrefs' parameter passed to relationship() may only be set to False.zæsetting omit_join to True is not supported; selectin loading of this relationship may not work correctly if this flag is set explicitly.  omit_join optimization is automatically detected for conditions under which it is supported.rØ   z\s*,\s*r«   zCbackref and back_populates keyword arguments are mutually exclusive).ÚsuperÚ__init__rÏ   r‘   r­   r�   rÎ   rÔ   rÖ   Ú _warn_for_persistence_only_flagsÚsa_excÚArgumentErrorrâ   rØ   rÛ   rÐ   r¸   r¹   rº   rß   rÜ   rÝ   rã   r»   ræ   rÙ   r6   Úwarnrá   rÌ   rÞ   r´   Ú
ComparatorrÚ   Úset_creation_orderrà   ÚupdateÚstrategy_keyÚsetÚ_reverse_propertyÚreÚsplitrµ   rÕ   rÑ   rÒ   )&r—   r‘   rš   rÏ   rÐ   r®   r¯   rÑ   r°   rÒ   rÓ   rÔ   rÕ   rÖ   r×   rØ   r¸   r¹   r»   rº   r±   r²   rÙ   rÚ   rÛ   rÜ   rÝ   rÞ   rß   rà   rá   râ   rã   rä   r¼   rå   ræ   Ú	__class__s&                                        €rŠ   ré   zRelationshipProperty.__init__n  sG  ø€ ôX 	‰ÑÐ+<ÐÔ=àˆŒØ ˆŒä+Ü˜[¨)°TÓ:Ü˜]¨K¸Ó>Ü˜_¨m¸TÓBÜ˜Z¨°4Ó8Ü˜^¨\¸4Ó@Ü˜]¨K¸Ó>ó
ˆŒð 'ˆÔØ ˆŒÙØ×1Ñ1Ø /Ø /Ø"3Ø-Ø!1ð 2ô ñ ™Ü×&Ñ&Ø?óð ð )ˆÔØˆŒ	Ø*ˆÔØ 0ˆÔØ.ˆÔáÜ×&Ñ&ð;óð ð
  /ˆÔØ!2ˆÔØ&ˆÔØ"ˆŒØ#6ˆÔ ØˆŒØ,ˆÔØ.LˆÔ+à$ˆŒÙÜ�I‰Iðôð #ˆŒØ"5ˆÔØ.ˆÔàÒAÔ"6×"AÑ"Að 	Ôô 	×Ñ Ô%àÐØ�I‰I×Ñ˜TÔ"à$ d§i¡iÐ0Ð2ˆÔäADÃˆÔáÜ ¤§¡¨*°hÓ!?Ó@ˆD�NàˆDŒNð ˆŒà,ˆÔà×ÒÙÜ×*Ñ*ð-óð ð  ˆD�Là"ˆD�Lr‹   c                óŒ   — |j                  «       D ]1  \  }}|| j                  |   k7  sŒt        j                  d|›d�«       Œ3 y )NzSetting zÌ on relationship() while also setting viewonly=True does not make sense, as a viewonly=True relationship does not perform persistence operations. This configuration may raise an error in a future release.)ÚitemsÚ_persistence_onlyr6   rí   )r—   ÚkwÚkÚvs       rŠ   rê   z5RelationshipProperty._warn_for_persistence_only_flagsø  sA   € Ø—H‘H–J‰DˆAˆqØ�D×*Ñ*¨1Ñ-Ó-ô —	’	ò
 /0ð	2õñ r‹   c                ó”   — t        j                  |j                  | j                  | j	                  | |«      || j
                  ¬«       y )N)Ú
comparatorÚparententityrã   )r   Úregister_descriptorÚclass_ÚkeyrÚ   rã   ©r—   Úmappers     rŠ   Úinstrument_classz%RelationshipProperty.instrument_class
  s8   € Ü×&Ñ&Ø�M‰MØ�H‰HØ×.Ñ.¨t°VÓ<ØØ—‘ö	
r‹   c                  ó6  — e Zd ZU dZdZded<   ded<   	 	 	 d	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 dd	„Zd
ed<   	 ded<   	 d d„Zd!d„Z	d"d„Z
d#d„Zd$d„Z	 	 	 	 d%d„Zd&d„ZdZd'd„Z	 d(	 	 	 	 	 d)d„Z	 d(	 	 	 	 	 d*d„Z	 d(	 	 	 	 	 d*d„Z	 	 	 	 	 	 d+d„Z	 	 	 	 d'd„Zd'd„Zd,d„Zy)-úRelationshipProperty.ComparatoraØ  Produce boolean, comparison, and other operators for
        :class:`.RelationshipProperty` attributes.

        See the documentation for :class:`.PropComparator` for a brief
        overview of ORM level operator definition.

        .. seealso::

            :class:`.PropComparator`

            :class:`.ColumnProperty.Comparator`

            :class:`.ColumnOperators`

            :ref:`types_operators`

            :attr:`.TypeEngine.comparator_factory`

        )Úentityr  ÚpropertyÚ_of_typeÚ_extra_criteriaz0RODescriptorReference[RelationshipProperty[_PT]]ÚpropúOptional[_EntityType[_PT]]r
  Nc                ól   — || _         || _        || _        |r|| _        || _        yd| _        || _        y)z�Construction of :class:`.RelationshipProperty.Comparator`
            is internal to the ORM's attribute mechanics.

            N)r  Ú_parententityÚ_adapt_to_entityr
  r  )r—   r  ÚparentmapperÚadapt_to_entityÚof_typeÚextra_criterias         rŠ   ré   z(RelationshipProperty.Comparator.__init__3  s@   € ð ˆDŒIØ!-ˆDÔØ$3ˆDÔ!ÙØ '�”ð $2ˆDÕ ð !%�”Ø#1ˆDÕ r‹   c                óh   — | j                  | j                  | j                  || j                  ¬«      S )N)r  r  )rö   r  r  r
  )r—   r  s     rŠ   r  z/RelationshipProperty.Comparator.adapt_to_entityH  s4   € ð —>‘>Ø—	‘	Ø×"Ñ"Ø /ØŸ™ð	 "ó ð r‹   ú_InternalEntityType[_PT]r  úMapper[_PT]r  c                óp   — | j                   rt        | j                   «      S | j                  j                  S r•   )r
  r7   r  r  r–   s    rŠ   Ú_memoized_attr_entityz5RelationshipProperty.Comparator._memoized_attr_entityg  s(   € Ø�}Š}Ü˜tŸ}™}Ó-Ð-à—y‘y×'Ñ'Ð'r‹   c                ó.   — | j                   j                  S r•   ©r  r  r–   s    rŠ   Ú_memoized_attr_mapperz5RelationshipProperty.Comparator._memoized_attr_mapperm  s   € Ø—;‘;×%Ñ%Ð%r‹   c                ó†   — | j                   r| j                   j                  S | j                  j                  j                  S r•   )r  Ú
selectabler	  ÚparentÚ_with_polymorphic_selectabler–   s    rŠ   Ú_source_selectablez2RelationshipProperty.Comparator._source_selectablep  s3   € Ø×$Ò$Ø×,Ñ,×7Ñ7Ð7à—}‘}×+Ñ+×HÑHÐHr‹   c                óÞ   — | j                  «       }| j                  rt        | j                  «      }nd }| j                  j	                  |d|d| j
                  ¬«      \  }}}}}}|�||z  S |S )NT)Úsource_selectableÚsource_polymorphicÚof_type_entityÚalias_secondaryr  )r!  r
  r7   r  Ú_create_joinsr  )	r—   Ú
adapt_fromr%  ÚpjÚsjÚsourceÚdestrš   Útarget_adapters	            rŠ   Ú__clause_element__z2RelationshipProperty.Comparator.__clause_element__v  s„   € Ø×0Ñ0Ó2ˆJØ�}Š}Ü!(¨¯©Ó!7‘à!%�ð —	‘	×'Ñ'Ø",Ø#'Ø-Ø $Ø#×3Ñ3ð (ó ñØØØØØØð ˆ~Ø˜B‘w�à�	r‹   c                ó†   — t         j                  | j                  | j                  | j                  || j
                  ¬«      S )zˆRedefine this object in terms of a polymorphic subclass.

            See :meth:`.PropComparator.of_type` for an example.


            ©r  r  r  )r´   rî   r  r  r  r  )r—   r  s     rŠ   r  z'RelationshipProperty.Comparator.of_type�  sA   € ô (×2Ñ2Ø—	‘	Ø×"Ñ"Ø $× 5Ñ 5ØØ#×3Ñ3ð 3ó ð r‹   c                óê   — t        d„ t        j                  |«      D «       «      }t        j	                  | j
                  | j                  | j                  | j                  | j                  |z   ¬«      S )z€Add AND criteria.

            See :meth:`.PropComparator.and_` for an example.

            .. versionadded:: 1.4

            c              3  ód   K  — | ](  }t        j                  t        j                  |«      –— Œ* y ­wr•   )r8   r†   r;   ÚWhereHavingRole)Ú.0Úclauses     rŠ   Ú	<genexpr>z7RelationshipProperty.Comparator.and_.<locals>.<genexpr>©  s+   è ø€ ð áA�Fô × Ñ ¤×!6Ñ!6¸×?ÙAùs   ‚.0r0  )
Útupler6   Úcoerce_generator_argr´   rî   r  r  r  r
  r  )r—   ÚcriteriaÚexprss      rŠ   Úand_z$RelationshipProperty.Comparator.and_Ÿ  sn   € ô ñ ä"×7Ñ7¸ÔAóó ˆEô
 (×2Ñ2Ø—	‘	Ø×"Ñ"Ø $× 5Ñ 5ØŸ™Ø#×3Ñ3°eÑ;ð 3ó ð r‹   c                ó   — t        d«      ‚)z…Produce an IN clause - this is not implemented
            for :func:`_orm.relationship`-based attributes at this time.

            zvin_() not yet supported for relationships.  For a simple many-to-one, use in_() against the set of foreign key values.)ÚNotImplementedError©r—   Úothers     rŠ   Úin_z#RelationshipProperty.Comparator.in_¶  s   € ô
 &ð1óð r‹   c                ó¶  — |�t        |t        j                  «      rc| j                  j                  t
        t        fv r| j                  «        S t        | j                  j                  d| j                  ¬«      «      S | j                  j                  rt        j                  d«      ‚t        | j                  j                  || j                  ¬«      «      S )a�  Implement the ``==`` operator.

            In a many-to-one context, such as::

              MyClass.some_prop == <some object>

            this will typically produce a
            clause such as::

              mytable.related_id == <some id>

            Where ``<some id>`` is the primary key of the given
            object.

            The ``==`` operator provides partial functionality for non-
            many-to-one comparisons:

            * Comparisons against collections are not supported.
              Use :meth:`~.Relationship.Comparator.contains`.
            * Compared to a scalar one-to-many, will produce a
              clause that compares the target columns in the parent to
              the given target.
            * Compared to a scalar many-to-many, an alias
              of the association table will be rendered as
              well, forming a natural join that is part of the
              main body of the query. This will not work for
              queries that go beyond simple AND conjunctions of
              comparisons, such as those which use OR. Use
              explicit joins, outerjoins, or
              :meth:`~.Relationship.Comparator.has` for
              more comprehensive non-many-to-one scalar
              membership tests.
            * Comparisons against ``None`` given in a one-to-many
              or many-to-many context produce a NOT EXISTS clause.

            N©Úadapt_sourceú]Can't compare a collection to an object or collection; use contains() to test for membership.)r›   r9   ÚNullr	  rÍ   r)   r'   Ú_criterion_existsr-   Ú_optimized_compareÚadapterrÏ   rë   ÚInvalidRequestErrorr>  s     rŠ   Ú__eq__z&RelationshipProperty.Comparator.__eq__Å  sÃ   € ðJ ˆ}¤
¨5´*·/±/Ô BØ—=‘=×*Ñ*¬y¼*Ð.EÑEØ ×2Ñ2Ó4Ð4Ð4ä(ØŸ™×8Ñ8Ø ¨t¯|©|ð 9ó óð ð
 —‘×&Ò&Ü×0Ñ0ð=óð ô
 %Ø—M‘M×4Ñ4Ø¨D¯L©Lð 5ó óð r‹   c                ó�  — |�$t        j                  t        j                  |«      nd }t	        | dd «      r~t        | j                  «      }|€J ‚|j                  |j                  |j                  }}}| j                  j                  r|s|j                  «       }|j                  }|�|�||z  }n|}nd}d }| j                  r| j                  «       }	nd }	| j                  j!                  ||	¬«      \  }
}}}}}|D ]<  }t	        | j                  j                  j"                  |«      ||   k(  }|€|}Œ8||z  }Œ> |�t%        |
«      |z  }n!t%        |
| j                  j&                  ¬«      }|�|r|s|j)                  |«      }|�|j+                  ddi«      }|t,        j.                  j1                  |«      z  }|�Ft-        j2                  d«      j5                  |«      j7                  ||«      j9                  ||«      }|S t-        j2                  d«      j5                  |«      j7                  |«      j9                  |«      }|S )Nr
  F)Údest_selectabler#  )ÚexcludeÚno_replacement_traverseTr   )r8   r†   r;   r3  Úgetattrr7   r
  r  r  Úis_aliased_classr	  Ú_is_self_referentialÚ_anonymous_fromclauseÚ_single_table_criterionrH  r!  r'  r  r-   r²   ÚtraverseÚ	_annotater5   ÚTrue_Ú_ifnoneÚexistsÚwhereÚselect_fromÚcorrelate_except)r—   Ú	criterionÚkwargsÚwhere_criteriarà   Útarget_mapperÚto_selectablerP  Úsingle_critr#  r)  r*  r+  r,  rš   r-  rû   ÚcritÚjÚexs                       rŠ   rF  z1RelationshipProperty.Comparator._criterion_existsÿ  s]  € ð Ð(ô × Ñ ¤×!6Ñ!6¸	ÔBàð ô �t˜Z¨Ô.Ü;BØ—M‘Mó<�ð Ð'Ð'Ð'à—K‘KØ—O‘OØ×)Ñ)ð /?˜}�ð
 —=‘=×5Ò5Ñ>NØ$1×$GÑ$GÓ$I�Mà+×CÑC�ØÐ*Ø%Ð1Ø)4°~Ñ)E™à)4™à#(Ð Ø $�à�|Š|Ø$(×$;Ñ$;Ó$=Ñ!à$(Ð!ð —‘×+Ñ+Ø -Ø"3ð ,ó ñØØØØØØó �Ü˜tŸ}™}×3Ñ3×:Ñ:¸AÓ>À&ÈÁ)ÑK�Ø!Ð)Ø%)‘Nà%3°dÑ%:‘Nð ð ˆ~Ü! "Ó%¨Ñ*‘ä! "¨d¯m©m×.GÑ.GÔH�ð Ð*Ù"Ù(ð "0×!8Ñ!8¸Ó!H�ð Ð)Ø!/×!9Ñ!9Ø.°Ð5ó"�ð ”s—y‘y×(Ñ(¨Ó8Ñ8ˆDàÐ$ä—J‘J˜q“Mß‘U˜4“[ß ‘[  yÓ1ß%Ñ% d¨IÓ6ð	 ð ˆIô —J‘J˜q“Mß‘U˜4“[ß ‘[ Ó&ß%Ñ% dÓ+ð	 ð ˆIr‹   c                ó~   — | j                   j                  st        j                  d«      ‚ | j                  |fi |¤ŽS )aS  Produce an expression that tests a collection against
            particular criterion, using EXISTS.

            An expression like::

                session.query(MyClass).filter(
                    MyClass.somereference.any(SomeRelated.x==2)
                )


            Will produce a query like::

                SELECT * FROM my_table WHERE
                EXISTS (SELECT 1 FROM related WHERE related.my_id=my_table.id
                AND related.x=2)

            Because :meth:`~.Relationship.Comparator.any` uses
            a correlated subquery, its performance is not nearly as
            good when compared against large target tables as that of
            using a join.

            :meth:`~.Relationship.Comparator.any` is particularly
            useful for testing for empty collections::

                session.query(MyClass).filter(
                    ~MyClass.somereference.any()
                )

            will produce::

                SELECT * FROM my_table WHERE
                NOT (EXISTS (SELECT 1 FROM related WHERE
                related.my_id=my_table.id))

            :meth:`~.Relationship.Comparator.any` is only
            valid for collections, i.e. a :func:`_orm.relationship`
            that has ``uselist=True``.  For scalar references,
            use :meth:`~.Relationship.Comparator.has`.

            z9'any()' not implemented for scalar attributes. Use has().©r	  rÏ   rë   rI  rF  ©r—   r\  r]  s      rŠ   Úanyz#RelationshipProperty.Comparator.anye  sD   € ðZ —=‘=×(Ò(Ü×0Ñ0ð-óð ð
 *�4×)Ñ)¨)Ñ>°vÑ>Ð>r‹   c                ó~   — | j                   j                  rt        j                  d«      ‚ | j                  |fi |¤ŽS )aÎ  Produce an expression that tests a scalar reference against
            particular criterion, using EXISTS.

            An expression like::

                session.query(MyClass).filter(
                    MyClass.somereference.has(SomeRelated.x==2)
                )


            Will produce a query like::

                SELECT * FROM my_table WHERE
                EXISTS (SELECT 1 FROM related WHERE
                related.id==my_table.related_id AND related.x=2)

            Because :meth:`~.Relationship.Comparator.has` uses
            a correlated subquery, its performance is not nearly as
            good when compared against large target tables as that of
            using a join.

            :meth:`~.Relationship.Comparator.has` is only
            valid for scalar references, i.e. a :func:`_orm.relationship`
            that has ``uselist=False``.  For collection references,
            use :meth:`~.Relationship.Comparator.any`.

            z3'has()' not implemented for collections. Use any().rf  rg  s      rŠ   Úhasz#RelationshipProperty.Comparator.hasš  sB   € ð@ �}‰}×$Ò$Ü×0Ñ0ØIóð ð *�4×)Ñ)¨)Ñ>°vÑ>Ð>r‹   c                ó  — | j                   j                  st        j                  d«      ‚| j                   j	                  || j
                  ¬«      }| j                   j                  �| j                  |«      |_        |S )a­	  Return a simple expression that tests a collection for
            containment of a particular item.

            :meth:`~.Relationship.Comparator.contains` is
            only valid for a collection, i.e. a
            :func:`_orm.relationship` that implements
            one-to-many or many-to-many with ``uselist=True``.

            When used in a simple one-to-many context, an
            expression like::

                MyClass.contains(other)

            Produces a clause like::

                mytable.id == <some id>

            Where ``<some id>`` is the value of the foreign key
            attribute on ``other`` which refers to the primary
            key of its parent object. From this it follows that
            :meth:`~.Relationship.Comparator.contains` is
            very useful when used with simple one-to-many
            operations.

            For many-to-many operations, the behavior of
            :meth:`~.Relationship.Comparator.contains`
            has more caveats. The association table will be
            rendered in the statement, producing an "implicit"
            join, that is, includes multiple tables in the FROM
            clause which are equated in the WHERE clause::

                query(MyClass).filter(MyClass.contains(other))

            Produces a query like::

                SELECT * FROM my_table, my_association_table AS
                my_association_table_1 WHERE
                my_table.id = my_association_table_1.parent_id
                AND my_association_table_1.child_id = <some id>

            Where ``<some id>`` would be the primary key of
            ``other``. From the above, it is clear that
            :meth:`~.Relationship.Comparator.contains`
            will **not** work with many-to-many collections when
            used in queries that move beyond simple AND
            conjunctions, such as multiple
            :meth:`~.Relationship.Comparator.contains`
            expressions joined by OR. In such cases subqueries or
            explicit "outer joins" will need to be used instead.
            See :meth:`~.Relationship.Comparator.any` for
            a less-performant alternative using EXISTS, or refer
            to :meth:`_query.Query.outerjoin`
            as well as :ref:`orm_queryguide_joins`
            for more details on constructing outer joins.

            kwargs may be ignored by this operator but are required for API
            conformance.
            z9'contains' not implemented for scalar attributes.  Use ==rB  )	r  rÏ   rë   rI  rG  rH  r¯   Ú'_Comparator__negated_contains_or_equalsÚnegation_clause)r—   r?  r]  r5  s       rŠ   Úcontainsz(RelationshipProperty.Comparator.containsÀ  s}   € ðz —9‘9×$Ò$Ü×0Ñ0ð*óð ð
 —Y‘Y×1Ñ1Ø D§L¡Lð 2ó ˆFð �y‰y×&Ñ&Ð2Ø)-×)JÑ)JØó*�Ô&ð ˆMr‹   c                ó¸  ‡ — ‰ j                   j                  t        k(  r¬t        j                  |«      }	 	 	 	 	 	 	 	 dˆ fd„}dˆ fd„}‰ j
                  j                  rmt        j                  ‰ j
                  j                  D ��cg c];  \  }}t        j                   ||«       | ||«      ||«      k7   ||«      d k(  «      ‘Œ= c}}Ž S t        j                  t        ‰ j
                  j                  j                  ‰ j
                  j                  j                  |«      «      D ��cg c]
  \  }}||k(  ‘Œ c}}Ž }‰ j                  |«       S c c}}w c c}}w )Nc                óÖ   •— |j                   }t        j                  | j                  | j                  d‰j
                  j                  ‰j
                  j                  |||«      ¬«      S )NT)Útype_ÚuniqueÚ	callable_)Údictr5   Ú	bindparamr  Útyper  Ú_get_attr_w_warn_on_noner  )Ú	local_colÚstateÚ
remote_colÚdict_r—   s       €rŠ   Ústate_bindparamzURelationshipProperty.Comparator.__negated_contains_or_equals.<locals>.state_bindparam  sU   ø€ ð
 "ŸJ™J�EÜŸ=™=Ø!Ÿ™Ø'Ÿn™nØ#Ø"&§)¡)×"DÑ"DØ ŸI™I×,Ñ,¨e°U¸Jó#ô	ð r‹   c                óB   •— ‰j                   r‰j                  | «      S | S r•   )rH  )Úcolr—   s    €rŠ   ÚadaptzKRelationshipProperty.Comparator.__negated_contains_or_equals.<locals>.adapt#  s   ø€ Ø—|’|Ø#Ÿ|™|¨CÓ0Ð0à"˜
r‹   )rx  r�   ry  úInstanceState[Any]rz  r�   r¡   úBindParameter[Any])r~  r€   r¡   r€   )r  rÍ   r(   r   Úinstance_stater	  Ú_use_getr5   r;  rÌ   Úor_Úzipr  Úprimary_keyÚprimary_key_from_instancerF  )r—   r?  ry  r|  r  ÚxÚyr\  s   `       rŠ   Ú__negated_contains_or_equalsz<RelationshipProperty.Comparator.__negated_contains_or_equals  sa  ø€ ð �y‰y×"Ñ"¤iÒ/Ü"×1Ñ1°%Ó8�ðØ1ðà-ðð !3ðð (õ	õ#ð —=‘=×)Ò)ÜŸ8™8ð +/¯-©-×*JÒ*Jôñ +K¡  Aô  ŸG™GÙ % a£Ù#2±5¸³8¸UÀAÓ#Fñ!Gá % a£¨DÑ 0õð
 +Kòð	ð 	ô Ÿ™ô #&ØŸ™×,Ñ,×8Ñ8ØŸ™×,Ñ,×FÑFÀuÓMô#ôñ#™˜˜Að ˜“Fð#òðˆIð ×*Ñ*¨9Ó5Ð5Ð5ùó)ùós   ÂA E
Ä*E
c                ó€  — |�t        |t        j                  «      r^| j                  j                  t
        k(  r1t        | j                  j                  d| j                  ¬«       «      S | j                  «       S | j                  j                  rt        j                  d«      ‚t        | j                  |«      «      S )a  Implement the ``!=`` operator.

            In a many-to-one context, such as::

              MyClass.some_prop != <some object>

            This will typically produce a clause such as::

              mytable.related_id != <some id>

            Where ``<some id>`` is the primary key of the
            given object.

            The ``!=`` operator provides partial functionality for non-
            many-to-one comparisons:

            * Comparisons against collections are not supported.
              Use
              :meth:`~.Relationship.Comparator.contains`
              in conjunction with :func:`_expression.not_`.
            * Compared to a scalar one-to-many, will produce a
              clause that compares the target columns in the parent to
              the given target.
            * Compared to a scalar many-to-many, an alias
              of the association table will be rendered as
              well, forming a natural join that is part of the
              main body of the query. This will not work for
              queries that go beyond simple AND conjunctions of
              comparisons, such as those which use OR. Use
              explicit joins, outerjoins, or
              :meth:`~.Relationship.Comparator.has` in
              conjunction with :func:`_expression.not_` for
              more comprehensive non-many-to-one scalar
              membership tests.
            * Comparisons against ``None`` given in a one-to-many
              or many-to-many context produce an EXISTS clause.

            NrB  rD  )r›   r9   rE  r	  rÍ   r(   r-   rG  rH  rF  rÏ   rë   rI  rl  r>  s     rŠ   Ú__ne__z&RelationshipProperty.Comparator.__ne__A  s©   € ðN ˆ}¤
¨5´*·/±/Ô BØ—=‘=×*Ñ*¬iÒ7Ü(ØŸ™×9Ñ9Ø ¨t¯|©|ð :ó ð óð ð  ×1Ñ1Ó3Ð3Ø—‘×&Ò&Ü×0Ñ0ð9óð ô % T×%FÑ%FÀuÓ%MÓNÐNr‹   c                ób   — | j                   j                  j                  «        | j                   S r•   )r  r  Ú_check_configurer–   s    rŠ   Ú_memoized_attr_propertyz7RelationshipProperty.Comparator._memoized_attr_property{  s"   € Ø�I‰I×Ñ×-Ñ-Ô/Ø—9‘9Ðr‹   )NNr«   )
r  úRelationshipProperty[_PT]r  z_InternalEntityType[Any]r  zOptional[AliasedInsp[Any]]r  r  r  úTuple[ColumnElement[bool], ...])r  zAliasedInsp[Any]r¡   z$RelationshipProperty.Comparator[Any])r¡   r  )r¡   r  )r¡   rk   ©r¡   r¾   )r  z_EntityType[Any]r¡   zPropComparator[_PT])r9  z_ColumnExpressionArgument[bool]r¡   zPropComparator[Any])r?  r   r¡   r   )r?  r   r¡   r¾   r•   )r\  ú)Optional[_ColumnExpressionArgument[bool]]r]  r   r¡   r2   )r\  r“  r]  r   r¡   r¾   )r?  z_ColumnExpressionArgument[Any]r]  r   r¡   r¾   )r¡   r�  )r¥   r¦   r§   r¨   r©   rª   ré   r  r  r  r!  r.  r  r;  r@  Ú__hash__rJ  rF  rh  rj  rn  rl  rŒ  r�  r«   r‹   rŠ   rî   r    s�  … ñ	ð(
ˆ	ð ?Ó>Ø,Ó,ð ;?Ø26Ø>@ð	2à+ð	2ð 3ð	2ð 8ð		2ð
 0ð	2ð <ó	2ð*	Ø#3ð	à1ó	ð )Ó(ð		ð Óð	ó	(ó	&ó	Ió	ó4	ð	Ø<ð	à ó	ó.
	ð ˆó8	ðx DHðd	à@ðd	ð ðd	ð ó	d	ðP DHð3	?à@ð3	?ð ð3	?ð !ó	3	?ðn DHð$	?à@ð$	?ð ð$	?ð !ó	$	?ðLL	Ø7ðL	ØCFðL	à óL	ð\1	6Øð1	6à ó1	6óf8	Oôt	r‹   rî   c                óœ   — |€J ‚d }|�0t        |«      }|€J ‚t        |«      r|j                  j                  }| j	                  |d||¬«      S )NT)Úvalue_is_parentrC  r&  )r7   r   Ú_adapterÚadapt_clauserG  )r—   Úinstancer&  Úfrom_entityrC  Úinsps         rŠ   Ú_with_parentz!RelationshipProperty._with_parent  sl   € ð Ð#Ð#Ð#Ø48ˆØÐ"Ü7>¸{Ó7KˆDØÐ#Ð#Ð#Ü$ TÔ*Ø#Ÿ}™}×9Ñ9�Ø×&Ñ&ØØ Ø%Ø+ð	 'ó 
ð 	
r‹   c                óò  ‡ ‡‡‡	‡
— ‰�3	 t        ‰«      Š‰�t        ‰dd«      st        j                  d‰ z  «      ‚| }‰€‰ j                  ||¬«      S |s.‰ j                  j                  ‰ j                  j                  c}Šn-‰ j                  j                  ‰ j                  j                  c}Š|r‰ j                  Š
n‰ j                  Š
t        j                  ‰j                  «       «      Š	dˆˆ	ˆ
ˆ ˆfd„}‰ j                   �4|r2t#        ‰ j                   j%                  «       «      j'                  |«      }t)        j*                  |i d|i«      }|r ||«      }|S # t        j                  $ r d ŠY �Œaw xY w)NÚis_instanceFzÃMapped instance expected for relationship comparison to object.   Classes, queries and other SQL elements are not accepted in this context; for comparison with a subquery, use %s.has(**criteria).rB  ru  c                óp   •— | j                   ‰v r'‰j                  ‰‰‰‰| j                      «      | _        y y r•   )Ú_identifying_keyrw  rœ   )ru  Úbind_to_colr{  r  r—   ry  s    €€€€€rŠ   Úvisit_bindparamz@RelationshipProperty._optimized_compare.<locals>.visit_bindparamÁ  s@   ø€ Ø×)Ñ)¨[Ñ8Ø%)×%BÑ%BØØØØ 	× :Ñ :Ñ;ó	&�	Õ"ð 9r‹   )ru  r�  r¡   r¤   )r7   rë   ÚNoInspectionAvailablerO  rì   Ú_lazy_none_clauser¶   Ú
_lazywhereÚ_bind_to_colÚ_rev_lazywhereÚ_rev_bind_to_colr  r  r   Úinstance_dictÚobjrš   rG   rR  rT  r<   Úcloned_traverse)r—   ry  r–  rC  r&  Úreverse_directionr\  r¢  r¡  r{  r  s   ``      @@@rŠ   rG  z'RelationshipProperty._optimized_compare“  s‹  ü€ ð ÐðÜ ›�ð ˆ}¤G¨E°=À%Ô$HÜ×*Ñ*ð.ð 15ñ	5óð ð !0Ð/Ðàˆ=Ø×)Ñ)Ø!°ð *ó ð ñ !à×#Ñ#×.Ñ.Ø×#Ñ#×0Ñ0ð #ˆI‘{ð ×#Ñ#×2Ñ2Ø×#Ñ#×4Ñ4ð #ˆI�{ñ
 Ø—[‘[‰Fà—[‘[ˆFä×(Ñ(¨¯©«Ó5ˆ÷	ñ 	ð �>‰>Ð%©/Ü%Ø—‘×4Ñ4Ó6óç‰h�yÓ!ð ô ×,Ñ,Ø�r˜K¨Ð9ó
ˆ	ñ Ù$ YÓ/ˆIØÐøôq ×/Ñ/ò Ø“ðús   ‰E ÅE6Å5E6c                ó˜   ‡‡‡‡‡‡— ‰j                  ‰«      Š‰j                  ‰j                  «       ‰j                  Šdˆˆˆˆˆˆfd„}|S )aK  Create the callable that is used in a many-to-one expression.

        E.g.::

            u1 = s.query(User).get(5)

            expr = Address.user == u1

        Above, the SQL should be "address.user_id = 5". The callable
        returned by this method produces the value "5" based on the identity
        of ``u1``.

        c                 ó  •— ‰€J ‚‰‰j                      x} }| t        j                  u}‰j                  ‰	‰‰‰	j                  rt
        j                  n t
        j                  t
        j                  z  ¬«      }|t        j                  u r'|s`t        j                  d‰›dt        ‰	«      ›d�«      ‚|t        j                  u r'|s't        j                  d‰›dt        ‰	«      ›d�«      ‚|}|€t        j                  d‰z  «       |S )N©ÚpassivezCan't resolve value for column z on object z'; no value has been set for this columnz2; the object is detached and the value was expiredz Got None for value of column %s; this is unsupported for a relationship comparison and will not currently produce an IS comparison (but may in a future release))r  r!   ÚNO_VALUEÚ_get_state_attr_by_columnÚ
persistentr"   ÚPASSIVE_OFFÚPASSIVE_NO_FETCHÚINIT_OKÚ	NEVER_SETrë   rI  r#   ÚPASSIVE_NO_RESULTr6   rí   )
Ú
last_knownÚ	to_returnÚexisting_is_availableÚcurrent_valueÚcolumnr{  Ú	lkv_fixedr  r  ry  s
       €€€€€€rŠ   Ú_goz:RelationshipProperty._get_attr_w_warn_on_none.<locals>._go  s   ø€ ØÐ(Ð(Ð(Ø%.¨t¯x©xÑ%8Ð8ˆJ˜àÔ"6×"?Ñ"?Ð?ð "ð #×<Ñ<ØØØð ×'Ò'ô  ×+Ò+ä$×5Ñ5¼×8KÑ8KÑKð =ó 	ˆMð Ô 4× >Ñ >Ñ>Ù,Ü ×4Ò4ò "¤9¨UÕ#3ð5óð ð
 Ô"6×"HÑ"HÑHÙ,Ü ×4Ò4ò &,¬Y°uÕ-=ð?óð ð *�	ØÐ Ü—	‘	ð4ð 7=ñ=ôð Ðr‹   )r¡   r   )Úget_property_by_columnÚ_track_last_known_valuer  Ú_last_known_values)r—   r  ry  r{  r½  r¿  r¾  r  s    ```` @@rŠ   rw  z-RelationshipProperty._get_attr_w_warn_on_none×  sG   ý€ ðb ×,Ñ,¨VÓ4ˆð
 	×%Ñ% d§h¡hÔ/à×,Ñ,ˆ	÷-	ò -	ð^ ˆ
r‹   c                óè   — |s-| j                   j                  | j                   j                  }}n,| j                   j                  | j                   j                  }}t        ||«      }|r ||«      }|S r•   )r¶   r¥  r¦  r§  r¨  rF   )r—   r¬  rC  r\  r¡  s        rŠ   r¤  z&RelationshipProperty._lazy_none_clauseB  st   € ñ
 !à×#Ñ#×.Ñ.Ø×#Ñ#×0Ñ0ð #‰Ið ×#Ñ#×2Ñ2Ø×#Ñ#×4Ñ4ð #ˆIô
 ,¨I°{ÓCˆ	áÙ$ YÓ/ˆIØÐr‹   c                ót   — t        | j                  j                  j                  «      dz   | j                  z   S )NÚ.)r“   r  r  r¥   r  r–   s    rŠ   Ú__str__zRelationshipProperty.__str__X  s+   € Ü�4—;‘;×%Ñ%×.Ñ.Ó/°#Ñ5¸¿¹Ñ@Ð@r‹   c	                óÂ  — |r| j                   D ]
  }	||	f|v sŒ
 y  d| j                  vry | j                  |vry | j                  �r|j	                  | j                  «      }
t        |
«      sJ ‚|
j                  ||«      }|
j                  r|j                  rJ ‚	 |r;|j	                  | j                  «      j                  ||t        j                  ¬«       g }|D ]]  }t        j                  |«      }t        j                  |«      }d||| f<   |j                  |||||¬«      }|€ŒM|j!                  |«       Œ_ |s:t        j"                  ||| j                  «      }|D ]  }|j%                  |«       Œ y |j	                  | j                  «      }t        |«      sJ ‚|j'                  |||dt        j                  ¬«       y || j                     }|�Ht        j                  |«      }t        j                  |«      }d||| f<   |j                  |||||¬«      }nd }|s||| j                  <   y |j	                  | j                  «      j'                  |||d «       y )NÚmergeTr¯  )ÚloadÚ
_recursiveÚ_resolve_conflict_mapF)Ú_adaptr°  )ró   Ú_cascader  rÏ   Úget_implr   Úget_collectionÚ
collectionÚemptyÚgetr"   ÚPASSIVE_MERGEr   r‚  r©  Ú_mergeÚappendÚinit_state_collectionÚappend_without_eventrò   )r—   ÚsessionÚsource_stateÚsource_dictÚ
dest_stateÚ	dest_dictrÉ  rÊ  rË  ÚrÚimplÚinstances_iterableÚ	dest_listÚcurrentÚcurrent_stateÚcurrent_dictrª  ÚcollÚcÚ	dest_impls                       rŠ   rÈ  zRelationshipProperty.merge[  sq  € ñ Ø×+Ô+�Ø  !Ð$¨
Ò2Ùð ,ð ˜$Ÿ-™-Ñ'Øà�8‰8˜;Ñ&Øà�<‹<Ø×(Ñ(¨¯©Ó2ˆDä,¨TÔ2Ð2Ð2Ø!%×!4Ñ!4°\À;Ó!OÐð
 48·?²?Ð)×/Ò/ÐLÐLÈáð ×#Ñ# D§H¡HÓ-×1Ñ1Ø 	´;×3LÑ3Lð 2ô ð ˆIÛ-�Ü *× 9Ñ 9¸'Ó B�Ü)×7Ñ7¸Ó@�Ø48�
˜M¨4Ð0Ñ1Ø—n‘nØ!Ø ØØ)Ø*?ð %ó �ð ‘?Ø×$Ñ$ SÕ)ð .ñ Ü!×7Ñ7Ø 	¨4¯8©8ó�ó #�AØ×-Ñ-¨aÕ0ñ #ð '×/Ñ/°·±Ó9�	Ü0°Ô;Ð;Ð;Ø—‘ØØØØ Ü'×5Ñ5ð õ ð " $§(¡(Ñ+ˆGØÐ"Ü *× 9Ñ 9¸'Ó B�Ü)×7Ñ7¸Ó@�Ø48�
˜M¨4Ð0Ñ1Ø—n‘nØ!Ø ØØ)Ø*?ð %ó ‘ð �áØ&)�	˜$Ÿ(™(Ò#à×#Ñ# D§H¡HÓ-×1Ñ1Ø 	¨3°õr‹   c                óH  — |j                   |   j                  }|j                  |||¬«      }|t        j                  u s|€g S t        |«      r8|j                  ||||¬«      D �cg c]  }t        j                  |«      |f‘Œ c}S t        j                  |«      |fgS c c}w )z”Return a list of tuples (state, obj) for the given
        key.

        returns an empty list if the value is None/empty/PASSIVE_NO_RESULT
        r¯  )	ÚmanagerrÞ  rÒ  r!   r¸  r   rÏ  r   r‚  )r—   ry  r{  r  r°  rÞ  rˆ  Úos           rŠ   Ú_value_as_iterablez'RelationshipProperty._value_as_iterable¼  s²   € ð �}‰}˜SÑ!×&Ñ&ˆØ�H‰H�U˜E¨7ˆHÓ3ˆØÔ$×6Ñ6Ñ6¸!¸)ØˆIÜ& tÔ,ð ×,Ñ,¨U°E¸1ÀgÐ,ÔNóáN�Aô ×*Ñ*¨1Ó-¨qÒ1ØNñð ô
  ×.Ñ.¨qÓ1°1Ð5Ð6Ð6ùòs   Á&Bc           
   #  ó,  K  — |dk7  s| j                   rt        j                  }n!t        j                  t        j                  z  }|dk(  r4|j
                  | j                     j                  j                  ||«      }n| j                  ||| j                  |¬«      }|dk(  xr d| j                  v}|D ]Û  \  }	}
|	|v rŒ|
€Œ|	€J ‚t        j                  |
«      }|r	 ||	«      rŒ2|r|	j                  sŒA|	j
                  j                  }|j                  | j                  j                  j                  «      s=t!        d| j                  ›d| j"                  j$                  ›d|
j&                  ›d	�«      ‚|j)                  |	«       |
||	|f–— ŒÝ y ­w)
NÚdeletezsave-updater¯  zrefresh-expireúdelete-orphanzAttribute 'z' on class 'z"' doesn't handle objects of type 'Ú')r¸   r"   ÚPASSIVE_NO_INITIALIZEr´  ÚNO_RAISErè  r  rÞ  Úget_all_pendingrê  rÍ  r   r©  r  ÚisaÚclass_managerÚAssertionErrorr  r  rö   Úadd)r—   rq  ry  r{  Úvisited_statesÚhalt_onr°  ÚtuplesÚskip_pendingr‚  rå  r©  Úinstance_mappers                rŠ   Úcascade_iteratorz%RelationshipProperty.cascade_iteratorÕ  s€  è ø€ ð �HÒ × 4Ò 4Ü!×7Ñ7‰Gä!×-Ñ-´×0DÑ0DÑDˆGà�MÒ!Ø—]‘] 4§8¡8Ñ,×1Ñ1×AÑAÀ%ÈÓO‰Fà×,Ñ,Ø�u˜dŸh™h°ð -ó ˆFð
 Ð%Ñ%ÒN¨/ÀÇÁÐ*Nð 	ó "(ÑˆN˜AØ Ñ/Øàˆyð
 à!Ð-Ð-Ð-Ü&×4Ñ4°QÓ7ˆMá™7 >Ô2Øá N×$6Ò$6Øà,×4Ñ4×;Ñ;ˆOà"×&Ñ& t§{¡{×'@Ñ'@×'GÑ'GÔHÝ$ð —x“x §¡×!3Ó!3°Q·[³[ðBóð ð ×Ñ˜~Ô.à�_ n°mÐCÓCñA "(ùs   ‚FFc                ó8   — | j                   ry| j                  duS )NF)rÖ   râ   r–   s    rŠ   Ú_effective_sync_backrefz,RelationshipProperty._effective_sync_backref  s   € à�=Š=Øà×$Ñ$¨EÐ1Ð1r‹   c                óÌ   — | j                   r(|j                  rt        j                  d|›d| ›d�«      ‚| j                   r$|j                   s|j                  durd|_        y y y y )NúRelationship z( cannot specify sync_backref=True since z includes viewonly=True.F)rÖ   râ   rë   rI  )Úrel_aÚrel_bs     rŠ   Ú_check_sync_backrefz(RelationshipProperty._check_sync_backref  se   € ð �>Š>˜e×0Ò0Ü×,Ò,â-2²Eð;óð ð
 �NŠNØ—N’NØ×"Ñ"¨%Ñ/à!&ˆEÕð 0ð #ð r‹   c           
     óØ  — | j                   j                  |d¬«      }t        |t        «      st	        j
                  d| ›d|›d�«      ‚| j                  | |«       | j                  || «       | j                  j                  |«       |j                  j                  | «       |j                  «        |j                   j                  | j                  «      s+t	        j                  d|›d| ›d|›d	| j                  ›�«      ‚|j                  r[| j                  t        t         fv rB| j                  |j                  k(  r(t	        j                  |›d
| ›d| j                  ›d�«      ‚y y y )NF)Ú_configure_mappersz back_populates on relationship 'z' refers to attribute 'z{' that is not a relationship.  The back_populates parameter should refer to the name of a relationship on the target class.zreverse_property z on relationship z references relationship z", which does not reference mapper z and back-reference z  are both of the same direction z<.  Did you mean to set remote_side on the many-to-one side ?)r  Úget_propertyr›   r´   rë   rI  r  ró   rõ  Ú_setup_entityÚcommon_parentr  rì   Ú_configure_startedrÍ   r)   r(   )r—   r  r?  s      rŠ   Ú_add_reverse_propertyz*RelationshipProperty._add_reverse_property)  s:  € Ø—‘×(Ñ(¨ÀÐ(ÓGˆÜ˜%Ô!5Ô6Ü×,Ò,ò !¢%ð)óð ð 	× Ñ   uÔ-ð 	× Ñ  ¨Ô-à×Ñ×"Ñ" 5Ô)Ø×Ñ×#Ñ# DÔ)à×ÑÔà�|‰|×)Ñ)¨$¯+©+Ô6Ü×&Ò&ò šše T§[¢[ð2óð ð ×$Ò$Ø—‘¤9¬iÐ"8Ñ8Ø—‘ %§/¡/Ò1ä×&Ñ&ò š$ §£ð0óð ð 2ð 9ð %r‹   c                óN   — | j                   j                  «        | j                  S )z©Return the target mapped entity, which is an inspect() of the
        class or aliased class that is referenced by this
        :class:`.RelationshipProperty`.

        )r  rŽ  r  r–   s    rŠ   r  zRelationshipProperty.entityU  s   € ð 	�‰×$Ñ$Ô&Ø�{‰{Ðr‹   c                ó.   — | j                   j                  S )zcReturn the targeted :class:`_orm.Mapper` for this
        :class:`.RelationshipProperty`.

        r  r–   s    rŠ   r  zRelationshipProperty.mapper_  s   € ð �{‰{×!Ñ!Ð!r‹   c                ó¬  •— | j                  «        | j                  «        | j                  «        | j                  «        | j	                  «        | j                  | j                  «       | j                  «        | j                  «        | j                  j                  «        t        ‰| �1  «        t        d| j                  d«      «      | _        y )Nr_   ))rØ   ru   )Ú_check_conflictsÚ_process_dependent_argumentsr  Ú_setup_registry_dependenciesÚ_setup_join_conditionsÚ_check_cascade_settingsrÍ  Ú
_post_initÚ_generate_backrefrÂ   Ú"_warn_for_conflicting_sync_targetsrè   Údo_initr   Ú_get_strategyr¶   )r—   rö   s    €rŠ   r  zRelationshipProperty.do_initg  s¡   ø€ Ø×ÑÔØ×)Ñ)Ô+Ø×ÑÔØ×)Ñ)Ô+Ø×#Ñ#Ô%Ø×$Ñ$ T§]¡]Ô3Ø�‰ÔØ×ÑÔ Ø×Ñ×?Ñ?ÔAÜ‰‰ÔÜ"Ø˜$×,Ñ,Ð-BÓCó
ˆÕr‹   c                óž   — | j                   j                  j                  j                  | j                  j                  j                  «       y r•   )r  r  ÚregistryÚ_set_depends_onr  r–   s    rŠ   r  z1RelationshipProperty._setup_registry_dependenciesv  s3   € Ø�‰×Ñ×#Ñ#×3Ñ3Ø�K‰K×Ñ×'Ñ'õ	
r‹   c                ó°  — | j                   }dD ],  }t        ||«      }|j                  | j                  d   «       Œ. dD ]Q  }t        ||«      }|j                  }|€Œt        t        j                  t        j                  ||¬«      «      |_        ŒS |j                  j                  }|�'t        |«      rt        j                  d|›d| ›d�«      ‚|j                  j                  d	urU|j                  j                  �?t        d
„ t!        j"                  |j                  j                  «      D «       «      | _        nd	| _        t!        j$                  d„ t!        j&                  |j(                  j                  «      D «       «      | _        t!        j$                  d„ t!        j&                  |j,                  j                  «      D «       «      | _        y)zŠConvert incoming configuration arguments to their
        proper form.

        Callables are resolved, ORM annotations removed.

        )r°   r®   r¯   rš   r±   r²   r   )r®   r¯   N©Úargnamezsecondary argument z passed to to relationship() z± must be a Table object or other FROM clause; can't send a mapped class directly as rows in 'secondary' are persisted independently of a class that is mapped to that same table.Fc              3  óh   K  — | ]*  }t        j                  t        j                  |d ¬«      –— Œ, y­w)r°   r  N©r8   r†   r;   r‡   ©r4  rˆ  s     rŠ   r6  zDRelationshipProperty._process_dependent_arguments.<locals>.<genexpr>°  s;   è ø€ ð "ñ C�Aô × Ñ Ü×,Ñ,¨a¸÷ð ñ Cùó   ‚02c              3  óh   K  — | ]*  }t        j                  t        j                  |d ¬«      –— Œ, y­w)r±   r  Nr  r  s     rŠ   r6  zDRelationshipProperty._process_dependent_arguments.<locals>.<genexpr>¹  s;   è ø€ ð :
ñ I�ô ×ÑÜ×(Ñ(¨!°^÷ð ñ Iùr   c              3  óh   K  — | ]*  }t        j                  t        j                  |d ¬«      –— Œ, y­w)r²   r  Nr  r  s     rŠ   r6  zDRelationshipProperty._process_dependent_arguments.<locals>.<genexpr>À  s;   è ø€ ð +
ñ H�ô ×ÑÜ×(Ñ(¨!°]÷ð ñ Hùr   )rÎ   rO  rŸ   Ú_clsregistry_resolversr’   r.   r8   r†   r;   r‡   rš   r   rë   rì   r°   r7  r6   Úto_listÚ
column_setÚto_column_setr±   rÅ   r²   )r—   Ú	init_argsÚattrÚrel_argÚvalrš   s         rŠ   r  z1RelationshipProperty._process_dependent_arguments{  s¡  € ð —O‘Oˆ	ó
ˆDô ˜i¨Ó.ˆGà×-Ñ-¨d×.IÑ.IÈ!Ñ.LÕMð
ó 3ˆDÜ˜i¨Ó.ˆGØ×"Ñ"ˆCØ‰Ü#2Ü×$Ñ$Ü×0Ñ0°#¸tôó$�Õ ð	 3ð ×'Ñ'×0Ñ0ˆ	ØÐ Ô%5°iÔ%@Ü×&Ò&ò
 *3²Dð	:óð ð ×Ñ×'Ñ'¨uÑ4Ø×"Ñ"×+Ñ+Ð7ä!ñ "ô Ÿ™ i×&8Ñ&8×&AÑ&AÔBó	"ó ˆD�Mð "ˆDŒMä*.¯/©/ñ :
ô ×'Ñ'¨	×(>Ñ(>×(GÑ(GÔHó	:
ó +
ˆÔ'ô  Ÿ?™?ñ +
ô ×'Ñ'¨	×(=Ñ(=×(FÑ(FÔGó	+
ó 
ˆÕr‹   c
                ó0  — |}
|€ | j                   €| j                  ||«       ny |}
|€J ‚|�\t        |t        «      }t        |t        «      }|rd| _        d| j
                  ff| _        n"|r d| _        d| j
                  ff| _        ndx}}t        |
«      }
t        |
d«      �r|
j                  }t        |t        «      r\t        |t        j                  «      rB| j                  €At        j                   |«      rt#        j$                  d|› d�«      ‚|| _        n|s	|sd| _        |
j(                  rqt        |t        «      r*t        |t*        j,                  «      r|
j(                  d   }n|
j(                  d	   }t        |d
«      r|j.                  }t1        ||«      }
n@|}
n=t#        j$                  d|
› d�«      ‚t        |
d
«      r|
j.                  }
t1        |
|«      }
| j                  €|s	|sd| _        | j                   €t3        d|
«      | _         y y )Nr}   rØ   r~   FÚ
__origin__zCollection annotation type z£ cannot be instantiated; please provide an explicit 'collection_class' parameter (e.g. list, set, etc.) to the relationship() function to accompany this annotationéÿÿÿÿr   Ú__forward_arg__zGeneric alias z requires an argumentz_RelationshipArgumentType[_T])r‘   Ú_raise_for_requiredÚ
issubclassr$   r    rØ   rñ   rL   Úhasattrr,  r›   rv  r   r   rÐ   Ú_py_inspectÚ
isabstractrë   rì   rÏ   Ú__args__ÚtypingÚMappingr.  rN   r   )r—   Ú	decl_scanr  ÚclsÚoriginating_moduler  Úmapped_containerÚ
annotationÚextracted_mapped_annotationÚis_dataclass_fieldr‘   Úis_write_onlyÚ
is_dynamicÚ
arg_originÚtype_argÚstr_arguments                   rŠ   Údeclarative_scanz%RelationshipProperty.declarative_scanÇ  s(  € ð /ˆà&Ð.Ø�}‰}Ð$Ø×(Ñ(¨¨cÕ2àà.ˆØ!Ð-Ð-Ð-àÐ'Ü&Ð'7¼ÓIˆMÜ#Ð$4´mÓDˆJÙØ(�”	Ø&,¨d¯i©iÐ%8Ð$:�Õ!ÙØ%�”	Ø&,¨d¯i©iÐ%8Ð$:�Õ!à).Ð.ˆM˜Jä-¨hÓ7ˆä�8˜\Õ*Ø!×,Ñ,ˆJÜ˜*¤dÔ+´
ØœCŸN™Nô1ð ×(Ñ(Ð0Ü"×-Ñ-¨jÔ9Ü$×2Ñ2Ø9¸*¸ð F)ð )óð ð -7�DÕ)á"©:Ø$�”à× Ò Ü˜j¬$Ô/´JØ¤§¡ô5ð  (×0Ñ0°Ñ4‘Hà'×0Ñ0°Ñ3�HÜ˜8Ð%6Ô7Ø#+×#;Ñ#;�Lä>Ø$Ð&8ó ‘Hð  (‘Hä×*Ñ*Ø$ X JÐ.CÐDóð ô �XÐ0Ô1Ø×/Ñ/ˆHä6ØÐ,óˆHð
 ×!Ñ!Ð)Ù!Ùà ˆDŒLð �=‰=Ð Ü Ð!@À(ÓKˆD�Mð !r‹   zsqlalchemy.orm.mapperc                ó€  — d| j                   v ry t        j                  j                  }|r|}n| j                  }t        |t        «      r!t        d | j                  |«      «       «      }n1t        |«      r$t        |t        |j                  f«      s |«       }n|}t        |t        «      rt        |d¬«      }nG	 t        |«      }t!        |d«      s/t        j"                  d| j$                  ›dt        |«      ›d�«      ‚|| _        | j&                  j(                  | _        y # t        j                  $ r d }Y Œuw xY w)	Nr  z_ExternalEntityType[Any]F©Ú	configurer  úrelationship 'z2' expects a class or a mapper argument (received: Ú))Ú__dict__r6   Ú	preloadedÚ
orm_mapperr‘   r›   r“   r   Ú_clsregistry_resolve_namerœ   rv  r[   r   r7   rë   r£  r1  rì   r  r  Úpersist_selectableÚtarget)r—   Ú_RelationshipProperty__argumentÚ	mapperlibr‘   Úresolved_argumentr  s         rŠ   r  z"RelationshipProperty._setup_entity+  s&  € à�t—}‘}Ñ$Øä—N‘N×-Ñ-ˆ	áØ!‰Hà—}‘}ˆHô �h¤Ô$ô !%Ø*Ø8�×.Ñ.¨xÓ8Ó:ó!Ñô �hÔ¬
Ø”t˜Y×-Ñ-Ð.ô)
ñ !)£
Ñà (Ðô Ð'¬Ô.Ü!Ð"3¸uÔE‰FðÜ Ð!2Ó3�ô ˜6 8Ô,Ü×*Ò*ð —x“x¤Ð&7Õ!8ð:óð ð ˆŒØ—k‘k×4Ñ4ˆ�øô ×/Ñ/ò Ø’ðús   Â<D% Ä%D=Ä<D=c                óö  — t        di d| j                  j                  “d| j                  j                  “d| j                  j                  “d| j                  j                  “d| j
                  j                  j                  “d| j
                  j                  j                  “d| j
                  j                  j                  “d| j                  j                  “d	| j                  j                  “d
| j                  “d| j                  “d| j                  “d| j                  “d| “d| j                    “d| j"                  “Žx| _        }|j                  | _        |j                  | _	        |j                  | _        |j&                  | _        |j                  | _        |j(                  | _        |j*                  | _        |j,                  | _        |j.                  | _        |j2                  | _        y )NÚparent_persist_selectableÚchild_persist_selectableÚparent_local_selectableÚchild_local_selectabler®   rš   r¯   Úparent_equivalentsÚchild_equivalentsÚconsider_as_foreign_keysrÌ   r²   Úself_referentialr  Úsupport_syncÚcan_be_synced_fnr«   )rÁ   r  rM  r  Úlocal_tablerÎ   r®   r’   rš   r¯   Ú_equivalent_columnsr  rÅ   rÌ   r²   rQ  rÖ   Ú_columns_are_mappedrÂ   rÍ   Úremote_columnsrÇ   rÉ   Úforeign_key_columnsrÆ   rË   )r—   Újcs     rŠ   r  z+RelationshipProperty._setup_join_conditions[  sÉ  € Ü$1ò %
Ø&*§k¡k×&DÒ&Dð%
à%)§[¡[×%CÒ%Cð%
ð %)§K¡K×$;Ò$;ð%
ð $(§;¡;×#:Ò#:ð	%
ð
 Ÿ™×3Ñ3×<Ò<ð%
ð —o‘o×/Ñ/×8Ò8ð%
ð Ÿ/™/×7Ñ7×@Ò@ð%
ð  $Ÿ{™{×>Ò>ð%
ð #Ÿk™k×=Ò=ð%
ð &*×%DÒ%Dð%
ð  $×6Ò6ð%
ð ×(Ò(ð%
ð "×6Ò6ð%
ñ ð%
ð "Ÿ]™]Ñ*ð%
ð  "×5Ò5ð!%
ð 	
ˆÔ˜rð$ Ÿ>™>ˆÔØ×-Ñ-ˆÔØŸ™ˆŒØŸ™ˆŒØ"$×"7Ñ"7ˆÔØ×,Ñ,ˆÔØ×-Ñ-ˆÔØ!#×!5Ñ!5ˆÔØ(*×(>Ñ(>ˆÔ%Ø+-×+IÑ+IˆÕ(r‹   c                ó    — | j                   d   S )Nr   ©r#  r–   s    rŠ   Ú_clsregistry_resolve_argz-RelationshipProperty._clsregistry_resolve_argy  ó   € ð ×*Ñ*¨1Ñ-Ð-r‹   c                ó    — | j                   d   S )Nr   rd  r–   s    rŠ   rL  z.RelationshipProperty._clsregistry_resolve_name  rf  r‹   zsqlalchemy.orm.clsregistryc                ó„   — t         j                  j                  j                  } || j                  j
                  | «      S r•   )r6   rJ  Úorm_clsregistryÚ	_resolverr  r  )r—   rj  s     rŠ   r#  z+RelationshipProperty._clsregistry_resolvers…  s0   € ô —N‘N×2Ñ2×<Ñ<ˆ	á˜Ÿ™×+Ñ+¨TÓ2Ð2r‹   c           	     óp  — | j                   j                  r t        | j                   j                  d¬«      j	                  | j
                  «      set        j                  d| j
                  ›d| j                   j                  j                  ›d| j                   j                  j                  ›d�«      ‚yy)zOTest that this relationship is legal, warn about
        inheritance conflicts.FrE  z)Attempting to assign a new relationship 'z$' to a non-primary mapper on class 'zm'.  New relationships can only be added to the primary mapper, i.e. the very first mapper created for class 'z' N)	r  Únon_primaryr   r  Úhas_propertyr  rë   rì   r¥   r–   s    rŠ   r  z%RelationshipProperty._check_conflicts‘  s‹   € ð �;‰;×"Ò"¬<Ø�K‰K×Ñ¨%ô,
ç
‰,�t—x‘xÓ
 ð,!ô ×&Ò&ð —H“HØ—K‘K×&Ñ&×/Ó/Ø—K‘K×&Ñ&×/Ó/ð	óð ð,!Ð"r‹   c                ó   — | j                   S )z\Return the current cascade setting for this
        :class:`.RelationshipProperty`.
        )rÍ  r–   s    rŠ   rÕ   zRelationshipProperty.cascade¤  s   € ð
 �}‰}Ðr‹   c                ó&   — | j                  |«       y r•   )Ú_set_cascade©r—   rÕ   s     rŠ   rÕ   zRelationshipProperty.cascade«  s   € à×Ñ˜'Õ"r‹   c                ó
  — t        |«      }| j                  r(t        |j                  t         j                  «      «      }d| j                  v r| j                  |«       || _        | j                  r|| j                  _        y y )Nr  )	r/   rÖ   ÚintersectionÚ_viewonly_cascadesrI  r  rÍ  r½   rÕ   )r—   Úcascade_argrÕ   s      rŠ   rp  z!RelationshipProperty._set_cascade¯  sp   € Ü  Ó-ˆà�=Š=Ü$Ø×$Ñ$¤^×%FÑ%FÓGóˆGð �t—}‘}Ñ$Ø×(Ñ(¨Ô1ØˆŒà×%Ò%Ø18ˆD×&Ñ&Õ.ð &r‹   c                óx  — |j                   rŸ| j                  s“| j                  t        u s| j                  t        u rot        j                  d| | j                  t        u rdnd| j                  j                  j                  | j                  j                  j                  dœz  d¬«      ‚| j                  dk(  r d|v sd	|v rt        j                  d
| z  «      ‚|j                   rT| j                  j                  «       j                  j                  | j                  | j                  j                  f«       y y )Naç  For %(direction)s relationship %(rel)s, delete-orphan cascade is normally configured only on the "one" side of a one-to-many relationship, and not on the "many" side of a many-to-one or many-to-many relationship.  To force this relationship to allow a particular "%(relatedcls)s" object to be referenced by only a single "%(clsname)s" object at a time via the %(rel)s relationship, which would allow delete-orphan cascade to take place in this direction, set the single_parent=True flag.zmany-to-onezmany-to-many)ÚrelrÍ   ÚclsnameÚ
relatedclsÚbbf0©ÚcodeÚallrì  rí  z^On %s, can't set passive_deletes='all' in conjunction with 'delete' or 'delete-orphan' cascade)Údelete_orphanrÛ   rÍ   r'   r(   rë   rì   r  r  r¥   r  r¸   Úprimary_mapperÚ_delete_orphansrÕ  r  rq  s     rŠ   r  z,RelationshipProperty._check_cascade_settings¾  s  € à×!Ò!Ø×&Ò&Ø—‘¤:Ñ-°·±Ä9Ñ1Lä×&Ñ&ð/ð  ð  Ÿ>™>¬YÑ6ñ &à+à#Ÿ{™{×1Ñ1×:Ñ:Ø"&§+¡+×"4Ñ"4×"=Ñ"=ñ	ñð. ô1ð ð6 ×Ñ 5Ò(Ø˜Ñ ?°gÑ#=ä×&Ñ&ð;Ø=AñBóð ð
 × Ò Ø�K‰K×&Ñ&Ó(×8Ñ8×?Ñ?Ø—‘˜4Ÿ;™;×-Ñ-Ð.õð !r‹   c                ól   — | j                   |j                  v xr |j                  | j                      | u S )zaReturn True if this property will persist values on behalf
        of the given mapper.

        )r  Úrelationshipsr  s     rŠ   Ú_persists_forz"RelationshipProperty._persists_forì  s7   € ð �H‰H˜×,Ñ,Ð,ò 7Ø×$Ñ$ T§X¡XÑ.°$Ð6ð	
r‹   c                ó<  — | j                   j                  j                  }|D ]w  }|�|j                  j	                  |«      rŒ!| j
                  j                  j                  j	                  |«      rŒQ| j                  j                  j	                  |«      rŒw y y)z�Return True if all columns in the given collection are
        mapped by the tables referenced by this :class:`.RelationshipProperty`.

        FT)rÎ   rš   r’   rå  Úcontains_columnr  rM  rN  )r—   Úcolsrš   rå  s       rŠ   r_  z(RelationshipProperty._columns_are_mapped÷  s|   € ð —O‘O×-Ñ-×6Ñ6ˆ	ÛˆAØÐ$¨¯©×)DÑ)DÀQÔ)GØØ—;‘;×1Ñ1×3Ñ3×CÑCØõà—k‘k—m‘m×3Ñ3°AÕ6Ùð ð r‹   c           
     ó|  — | j                   j                  ry| j                  ��p| j                  �sct	        | j                  t
        «      r| j                  i }}n| j                  \  }}| j                  j                  «       }|j                  svt        |j                  «       «      j                  |j                  «      }|D ]?  }|j                  |«      sŒ|j                  rŒ"t        j                  d|›d| ›d|›d�«      ‚ | j                   �M|j#                  d| j$                  j&                  «      }|j#                  d| j$                  j(                  «      }nO|j#                  d| j$                  j*                  «      }|j#                  dd«      }|rt        j,                  d«      ‚|j#                  d	| j.                  «      }| j                   j                  «       }	|j1                  d
| j2                  «       |j1                  d| j4                  «       |j1                  d| j6                  «       |j1                  d| j8                  «       || _        t;        |	| j                   f|||| j<                  dœ|¤Ž}
|j?                  ||
d¬«       | j                  r| jA                  | j                  «       yy)zlInterpret the 'backref' instruction to create a
        :func:`_orm.relationship` complementary to this one.NzError creating backref 'z' on relationship 'z+': property of that name exists on mapper 'rî  r®   r¯   zOCan't assign 'secondaryjoin' on a backref against a non-secondary relationship.r±   rÖ   rÔ   r¹   râ   )r®   r¯   r±   rÑ   T)Úwarn_for_existing)!r  rl  rÒ   rÑ   r›   r“   r  r  Úconcreterò   Úiterate_to_rootÚunionÚself_and_descendantsrm  rë   rì   rš   ÚpoprÂ   Úsecondaryjoin_minus_localÚprimaryjoin_minus_localÚprimaryjoin_reverse_remoterI  rÅ   Ú
setdefaultrÖ   rÔ   r¹   râ   r´   r  Ú_configure_propertyr	  )r—   Úbackref_keyr]  r  ÚcheckÚmr)  r*  r±   r  Úrelationships              rŠ   r  z&RelationshipProperty._generate_backref  sq  € ð �;‰;×"Ò"ØØ�<‰<Ñ#¨D×,?Ó,?ä˜$Ÿ,™,¬Ô,Ø&*§l¡l°B˜V‘à&*§l¡lÑ#�˜VØ—[‘[×/Ñ/Ó1ˆFà—?’?Ü˜F×2Ñ2Ó4Ó5×;Ñ;Ø×/Ñ/ó�ó �AØ—~‘~ kÕ2¸1¿:»:Ü$×2Ò2ò  +ªD²!ð5óð ð ð �~‰~Ð)ð —Z‘ZØ!Ø×(Ñ(×BÑBó�ð —Z‘ZØ#Ø×(Ñ(×@Ñ@ó‘ð
 —Z‘ZØ!Ø×(Ñ(×CÑCó�ð —Z‘Z °Ó6�ÙÜ ×4Ñ4ð@óð ð
 "Ÿ:™:Ø × ?Ñ ?óˆLð —[‘[×/Ñ/Ó1ˆFØ×Ñ˜j¨$¯-©-Ô8Ø×Ñ˜m¨T×-=Ñ-=Ô>Ø×ÑÐ/°×1EÑ1EÔFØ×Ñ˜n¨d×.?Ñ.?Ô@Ø"-ˆDÔÜ/ØØ—‘ðð Ø Ø)Ø#Ÿx™xñð ñˆLð ×&Ñ&Ø˜\¸Tð 'ô ð ×ÒØ×&Ñ& t×':Ñ':Õ;ð r‹   zsqlalchemy.orm.dependencyc                óØ   — t         j                  j                  }| j                  €| j                  t
        u| _        | j                  s!|j                  j                  | «      | _	        y y r•   )
r6   rJ  Úorm_dependencyrÏ   rÍ   r(   rÖ   rZ   Úfrom_relationshipr½   )r—   Ú
dependencys     rŠ   r  zRelationshipProperty._post_initW  sV   € ä—^‘^×2Ñ2ˆ
à�<‰<ÐØŸ>™>´Ð:ˆDŒLØ�}Š}à×.Ñ.×@Ñ@Øó0ð Õ&ð r‹   c                ó2   — | j                   }|j                  S )zPmemoize the 'use_get' attribute of this RelationshipLoader's
        lazyloader.)r¶   Úuse_get)r—   Ústrategys     rŠ   rƒ  zRelationshipProperty._use_getb  s   € ð
 ×&Ñ&ˆØ×ÑÐr‹   c                óL   — | j                   j                  | j                  «      S r•   )r  r  r  r–   s    rŠ   rQ  z)RelationshipProperty._is_self_referentialj  s   € à�{‰{×(Ñ(¨¯©Ó5Ð5r‹   c                ó  — d}|r| j                   �d}|€.|r,| j                  j                  r| j                  j                  }|r|j                  }|€|j
                  }d}n| j                  }|€O| j                  j
                  }| j                  j                  rd}| j                  rE|€C|j                  «       }d}n0|| j                  j                  us| j                  j                  rd}|j                  }	|xs, |d uxr& || j                  j                  uxs |j                  }| j                  j                  ||||	|«      \  }
}}}}|€| j                  j                  }|€| j                  j                  }|
|||||fS )NFT)rš   r  Úwith_polymorphicr   r  r  r  rQ  rR  rS  Ú_is_subqueryrÂ   Újoin_targetsr]  )r—   r$  r#  rL  r%  r&  r  ÚaliasedÚdest_mapperra  r®   r¯   rš   r-  s                 rŠ   r'  z"RelationshipProperty._create_joinsn  s¤  € ð  ˆá˜tŸ~™~Ð9ØˆGàÐ$Ù! d§k¡k×&BÒ&BØ$(§K¡K×$LÑ$LÐ!áØ(×/Ñ/ˆKØÐ&Ø"0×";Ñ";�Ø‘àŸ+™+ˆKàÐ"Ø"Ÿk™k×4Ñ4ˆOØ�{‰{×+Ò+Ø�à×(Ò(Ð->Ð-FØ"1×"GÑ"GÓ"I�Ø‘à 4§;¡;×#KÑ#KÑKØ�{‰{×+Ò+àˆGà!×9Ñ9ˆØò 
Ø TÐ)ò à!Ø—{‘{×?Ñ?ð@ò 2à$×1Ñ1ð 	ð × Ñ ×-Ñ-ØØØØØó
ñ	
ØØØØØð Ð$Ø $§¡× 7Ñ 7ÐØÐ"Ø"Ÿk™k×5Ñ5ˆOàØØØØØð
ð 	
r‹   )NN)Hr‘   z'Optional[_RelationshipArgumentType[_T]]rš   z(Optional[_RelationshipSecondaryArgument]rÏ   úOptional[bool]rÐ   zEOptional[Union[Type[Collection[Any]], Callable[[], Collection[Any]]]]r®   ú,Optional[_RelationshipJoinConditionArgument]r¯   r¦  rÑ   úOptional[str]r°   Ú_ORMOrderByArgumentrÒ   zOptional[ORMBackrefArgument]rÓ   r§  rÔ   r¢   rÕ   r“   rÖ   r¢   r×   zOptional[_AttributeOptions]rØ   Ú_LazyLoadArgumentTyper¸   zUnion[Literal['all'], bool]r¹   r¢   r»   r¢   rº   r¢   r±   ú#Optional[_ORMColCollectionArgument]r²   rª  rÙ   zOptional[int]rÚ   z4Optional[Type[RelationshipProperty.Comparator[Any]]]rÛ   r¢   rÜ   r¢   rÝ   r¥  rÞ   r¢   rß   zOptional[Type[Query[Any]]]rà   zOptional[_InfoType]rá   zLiteral[None, False]râ   r¥  rã   r§  rä   zLiteral[True]r¼   zLiteral[False]rå   rÊ   ræ   r¢   )rú   r   r¡   r¤   )r  úMapper[Any]r¡   r¤   )TN)r™  Úobjectr&  r¢   rš  zOptional[_EntityType[Any]]r¡   r¾   )FNT)
ry  r   r–  r¢   rC  úOptional[_CoreAdapterProto]r&  r¢   r¡   r¾   )
r  r«  ry  r€  r{  rR   r½  r�   r¡   zCallable[[], Any])FN)r¬  r¢   rC  r­  r¡   r¾   ©r¡   r“   )rØ  r]   rÙ  r€  rÚ  rR   rÛ  r€  rÜ  rR   rÉ  r¢   rÊ  zDict[Any, object]rË  z#Dict[_IdentityKeyType[Any], object]r¡   r¤   )
ry  zInstanceState[_O]r{  rR   r  r“   r°  r"   r¡   z&Sequence[Tuple[InstanceState[_O], _O]]r•   )rq  r“   ry  r€  r{  rR   rö  zSet[InstanceState[Any]]r÷  z.Optional[Callable[[InstanceState[Any]], bool]]r¡   zDIterator[Tuple[Any, Mapper[Any], InstanceState[Any], _InstanceDict]]r    )r   úRelationshipProperty[Any]r  r¯  r¡   r¤   )r  r“   r¡   r¤   )r¡   z_InternalEntityType[_T])r¡   rt   ©r¡   r¤   )r7  rY   r  rU   r8  z	Type[Any]r9  r§  r  r“   r:  zOptional[Type[Mapped[Any]]]r;  úOptional[_AnnotationScanType]r<  r±  r=  r¢   r¡   r¤   )rO  r   r¡   r¤   )r¡   r£   )r¡   z>Callable[[str], Callable[[], Union[Type[Any], Table, _ModNS]]])r¡   zmTuple[Callable[[str], Callable[[], Union[Type[Any], Table, _ModNS]]], Callable[[str, bool], _class_resolver]])r¡   r/   )rÕ   úUnion[str, CascadeOptions]r¡   r¤   )ru  r²  r¡   r¤   )rÕ   r/   r¡   r¤   )r  r«  r¡   r¢   )r†  r�   r¡   r¢   )FNNNFr«   )r$  r¢   r#  rÀ   rL  rÀ   r%  z"Optional[_InternalEntityType[Any]]r&  r¢   r  r‘  r¡   z€Tuple[ColumnElement[bool], Optional[ColumnElement[bool]], FromClause, FromClause, Optional[FromClause], Optional[ClauseAdapter]])?r¥   r¦   r§   r¨   r   Ú_RELATIONSHIP_TOKENÚstrategy_wildcard_keyÚinherit_cacheÚ_links_to_entityÚ_is_relationshiprª   rt  rù   r½   ré   rê   r  r6   ÚMemoizedSlotsr*   rr   rî   rœ  rG  rw  r¤  rÆ  rÈ  r"   r´  rê  rû  r	  rý  Ústaticmethodr  r	  Úmemoized_propertyr  r  r  r  r  rC  Úpreload_moduler  r  re  rL  r#  r  rÕ   Úsetterrp  r  rƒ  r_  r  r  rƒ  rQ  r'  Ú__classcell__)rö   s   @rŠ   r´   r´   5  s‰  ø… ñ	ð -×@Ñ@ÐØ€MØàÐØÐàÓàÓáØØØØØôÐð <@ÐÐ8Ó?à$Ó$Ø0Ó0Ø#Ó#Ø"Ó"Ø%Ó%à 7Ó7Ø5Ó5à(Ó(Ø*Ó*à#Ó#Ø!7Ó7à.Ó.à$Ó$à!Ó!ð =AØ>BðH#ð
 #'ð ØDHØFJØ(,Ø(-Ø04Ø"&Ø!Ø+ØØ9=Ø&.Ø7<Ø $Ø$Ø"&Ø<@Ø;?Ø$(ð Ø#ØØ.2Ø %Ø26Ø$(Ø*.Ø'+Ø!Ø&*Ø+0Ø6:Ø/4ñUH#à9ðH#ð <ðH#ð
  ðH#ð
ðH#ð BðH#ð DðH#ð &ðH#ð &ðH#ð .ðH#ð  ðH#ð ðH#ð  ð!H#ð" ð#H#ð$ 7ð%H#ð& $ð'H#ð( 5ð)H#ð* ð+H#ð, ð-H#ð.  ð/H#ð0 :ð1H#ð2 9ð3H#ð4 "ð5H#ð6
ð7H#ð< ð=H#ð> ð?H#ð@ ,ðAH#ðB ðCH#ðD 0ðEH#ðF "ðGH#ðH (ðIH#ðJ %ðKH#ðL ðMH#ðN $ðOH#ðP )ðQH#ðR 4ðSH#ðT )-õUH#óTó$
ôj	�T×'Ñ'¨¸Ñ)<ô j	ð^ !%Ø26ð	
àð
ð ð
ð 0ð	
ð
 
ó
ð. !&Ø48Ø $ðBàðBð ðBð 2ð	Bð
 ðBð 
óBðHiàðið "ðið ð	ið
 #ðið 
óiðZ #(Ø48ðàðð 2ðð 
ó	ó,Að_àð_ð )ð_ð #ð	_ð
 'ð_ð !ð_ð ð_ð &ð_ð  Cð_ð 
ó_ðL  +×6Ñ6ð7à ð7ð ð7ð ð	7ð
 ð7ð 
0ó7ð> CGð;Dàð;Dð "ð;Dð ð	;Dð
 0ð;Dð @ð;Dð 
Nó;Dðz ò2ó ð2ð ð'Ø(ð'Ø1Jð'à	ò'ó ð'ó*ðX 
×Ñòó ðð 
×Ñò"ó ð"õ
ó
ó
J
ðXbLà)ðbLð  ðbLð ð	bLð
 *ðbLð ðbLð 6ðbLð 2ðbLð &CðbLð !ðbLð 
óbLðH €T×ÑÐ0Ó1ó-5ó 2ð-5ó^Jð< ð.à	/ò.ó ð.ð
 ð.à	Gò.ó ð.ð
 
×ÑØ€T×ÑÐ5Ó6ð3ð
ò3ó 7ó ð3óð& òó ðð ‡^�^ò#ó ð#ó9ó,ó\	
óó N<ð` €T×ÑÐ4Ó5òó 6ðð 
×Ñò ó ð ð 
×Ñò6ó ð6ð
 $)Ø26Ø04Ø=AØ %Ø:<ðQ
à ðQ
ð 0ðQ
ð .ð	Q
ð
 ;ðQ
ð ðQ
ð 8ðQ
ð
÷Q
r‹   r´   c                ó0   ‡‡— dˆˆfd„Š| � ‰| «      } d Š| S )Nc                ó    •— t        | t        j                  «      r | j                   ‰j                  «       «      } | j                  ‰¬«       | S )N)Úclone)r›   r9   r@   rU  ÚcopyÚ_copy_internals)Úelemr   rÀ  s    €€rŠ   rÀ  z _annotate_columns.<locals>.cloneÃ  sC   ø€ Ü�dœJ×3Ñ3Ô4Ø—>‘>Ð"2 +×"2Ñ"2Ó"4Ó5ˆDØ×Ñ 5ÐÔ)Øˆr‹   )rÃ  r€   r¡   r€   r«   )Úelementr   rÀ  s    `@rŠ   r…   r…   Â  s#   ù€ öð ÐÙ˜“.ˆØ€EØ€Nr‹   c                  ó~  — e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   d
ed<   ded<   ded<   ded<   ded<   ded<   ded<   ddddddddddd„ dœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dCd„ZdDd„ZdDd„ZdDd„ZedEd„«       Z	edEd „«       Z
ej                  dEd!„«       ZdFd"„Zej                  dGd#„«       Zej                  dGd$„«       ZdDd%„ZdDd&„ZdDd'„ZdGd(„ZdGd)„ZdDd*„ZdDd+„Z	 	 	 	 	 	 dHd,„ZdDd-„ZdDd.„ZdDd/„ZdDd0„ZdDd1„ZdDd2„ZdDd3„Z	 	 	 	 	 	 dId4„Z dDd5„Z!	 	 	 	 dJd6„Z"dDd7„Z# e$jJ                  «       Z&d8ed9<   dDd:„Z'ej                  dKd;„«       Z(ej                  dKd<„«       Z)ej                  dKd=„«       Z*	 	 	 	 dLd>„Z+	 	 	 	 	 	 dMd?„Z,ej                  dNd@„«       Z-	 	 dO	 	 	 	 	 	 	 	 	 	 	 dPdA„Z.dQdRdB„Z/y)SrÁ   r¿   Úprimaryjoin_initialr¾   r®   r¯   rÀ   rš   r¯  r  rÈ   rÉ   rË   r+   rÍ   rk   rS  rT  rU  rV  rÊ   rå   NFTc                  ó   — y©NTr«   )rå  s    rŠ   Ú<lambda>zJoinCondition.<lambda>ó  s   € ¸4r‹   )r®   rš   r¯   rW  rX  rY  rÌ   r²   rZ  r[  r\  c               óÈ  — || _         || _        || _        || _        || _        |	| _        || _        || _        || _        |
| _	        || _
        || _        || _        || _        || _        || _        | j!                  «        | j"                  €J ‚| j%                  «        | j'                  «        | j)                  «        | j+                  «        | j-                  «        | j/                  «        | j1                  | j"                  d«       | j                  �| j1                  | j                  d«       | j3                  «        | j5                  «        | j7                  «        y ©NTF)rS  rU  rT  rV  rW  rX  rÆ  r¯   rš   rY  rå   Ú_remote_sider  rZ  r[  r\  Ú_determine_joinsr®   Ú_sanitize_joinsÚ_annotate_fksÚ_annotate_remoteÚ_annotate_localÚ_annotate_parentmapperÚ_setup_pairsÚ_check_foreign_colsÚ_determine_directionÚ_check_remote_sideÚ
_log_joins)r—   rS  rT  rU  rV  r®   rš   r¯   rW  rX  rY  rÌ   r²   rZ  r  r[  r\  s                    rŠ   ré   zJoinCondition.__init__á  sC  € ð( *CˆÔ&Ø'>ˆÔ$Ø(@ˆÔ%Ø&<ˆÔ#Ø"4ˆÔØ!2ˆÔØ#.ˆÔ Ø*ˆÔØ"ˆŒØ(@ˆÔ%Ø#5ˆÔ Ø'ˆÔØˆŒ	Ø 0ˆÔØ(ˆÔØ 0ˆÔà×ÑÔØ×ÑÐ+Ð+Ð+à×ÑÔØ×ÑÔØ×ÑÔØ×ÑÔØ×#Ñ#Ô%Ø×ÑÔØ× Ñ  ×!1Ñ!1°4Ô8Ø×ÑÐ)Ø×$Ñ$ T×%7Ñ%7¸Ô?Ø×!Ñ!Ô#Ø×ÑÔ!Ø�‰Õr‹   c           	     ó”  — | j                   j                  } |j                  d| j                   | j                  «        |j                  d| j                   | j                  «        |j                  d| j                   dj                  d„ | j                  D «       «      «        |j                  d| j                   dj                  d„ | j                  xs g D «       «      «        |j                  d| j                   dj                  d	„ | j                  D «       «      «        |j                  d
| j                   dj                  d„ | j                  D «       «      «        |j                  d| j                   dj                  d„ | j                  D «       «      «        |j                  d| j                   | j                  «       y )Nz%s setup primary join %sz%s setup secondary join %sz%s synchronize pairs [%s]Ú,c              3  ó4   K  — | ]  \  }}d |›d|›d�–— Œ y­w©Ú(z => rH  Nr«   ©r4  ÚlrÝ  s      rŠ   r6  z+JoinCondition._log_joins.<locals>.<genexpr>	  s   è ø€ ð Ù4J©&¨1©a¢¢1Ô%Ñ4Jùó   ‚z#%s secondary synchronize pairs [%s]c              3  ó4   K  — | ]  \  }}d |›d|›d�–— Œ y­wrÛ  r«   rÝ  s      rŠ   r6  z+JoinCondition._log_joins.<locals>.<genexpr>$	  s!   è ø€ ð áD‘F�Q™ò !"¢1Ô%ÙDùrß  z%s local/remote pairs [%s]c              3  ó4   K  — | ]  \  }}d |›d|›d�–— Œ y­w)rÜ  z / rH  Nr«   rÝ  s      rŠ   r6  z+JoinCondition._log_joins.<locals>.<genexpr>,	  s   è ø€ ð Ù3J©¨!©Qšq¢!Ô$Ñ3Jùrß  z%s remote columns [%s]c              3  ó&   K  — | ]	  }d |z  –— Œ y­w©z%sNr«   ©r4  r~  s     rŠ   r6  z+JoinCondition._log_joins.<locals>.<genexpr>3	  s   è ø€ Ð?Ñ+> C�T˜C•ZÑ+>ùó   ‚z%s local columns [%s]c              3  ó&   K  — | ]	  }d |z  –— Œ y­wrã  r«   rä  s     rŠ   r6  z+JoinCondition._log_joins.<locals>.<genexpr>8	  s   è ø€ Ð>Ñ+= C�T˜C•ZÑ+=ùrå  z%s relationship direction %s)r  Úloggerrà   r®   r¯   ÚjoinrÉ   rË   rÌ   r`  rÇ   rÍ   )r—   r3   s     rŠ   r×  zJoinCondition._log_joins	  s}  € Ø�i‰i×ÑˆØˆ�‰Ð+¨T¯Y©Y¸×8HÑ8HÔIØˆ�‰Ð-¨t¯y©y¸$×:LÑ:LÔMØˆ�‰Ø'Ø�I‰IØ�H‰Hñ Ø48×4JÒ4Jóó ô	
ð 	ˆ�‰Ø1Ø�I‰IØ�H‰Hñ à"×>Ñ>ÒDÀ"ÐDóó ô	
ð 	ˆ�‰Ø(Ø�I‰IØ�H‰Hñ Ø37×3JÒ3Jóó ô	
ð 	ˆ�‰Ø$Ø�I‰IØ�H‰HÑ?¨4×+>Ò+>Ó?Ó?ô	
ð
 	ˆ�‰Ø#Ø�I‰IØ�H‰HÑ>¨4×+=Ò+=Ó>Ó>ô	
ð
 	ˆ�‰Ð/°·±¸D¿N¹NÕKr‹   c                óŽ   — t        | j                  d¬«      | _        | j                  �t        | j                  d¬«      | _        yy)a_  remove the parententity annotation from our join conditions which
        can leak in here based on some declarative patterns and maybe others.

        "parentmapper" is relied upon both by the ORM evaluator as well as
        the use case in _join_fixture_inh_selfref_w_entity
        that relies upon it being present, see :ticket:`3364`.

        )rÿ   Ú	proxy_key©ÚvaluesN)rD   r®   r¯   r–   s    rŠ   rÎ  zJoinCondition._sanitize_joins<	  sI   € ô ,Ø×ÑÐ%Bô
ˆÔð ×ÑÐ)Ü!1Ø×"Ñ"Ð+Hô"ˆDÕð *r‹   c                óR  — | j                   �.| j                  €"t        j                  d| j                  z  «      ‚	 | j
                  xs d}| j                  ��| j                   €2t        | j                  | j                  | j                  |¬«      | _         | j                  €3t        | j                  | j                  | j                  |¬«      | _        y| j                  | _        y| j                  €3t        | j                  | j                  | j                  |¬«      | _        y| j                  | _        y# t        j                  $ re}| j                  �1t        j                  d| j                  ›d| j                  ›d�«      |‚t        j                  d| j                  z  «      |‚d}~wt        j                  $ re}| j                  �1t        j                  d| j                  ›d| j                  ›d	�«      |‚t        j                  d
| j                  z  «      |‚d}~ww xY w)zõDetermine the 'primaryjoin' and 'secondaryjoin' attributes,
        if not passed to the constructor already.

        This is based on analysis of the foreign key relationships
        between the parent and target mapped selectables.

        NzMProperty %s specified with secondary join condition but no secondary argument)Úa_subsetrY  zOCould not determine join condition between parent/child tables on relationship zG - there are no foreign keys linking these tables via secondary table 'z—'.  Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify 'primaryjoin' and 'secondaryjoin' expressions.a  Could not determine join condition between parent/child tables on relationship %s - there are no foreign keys linking these tables.  Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify a 'primaryjoin' expression.zP - there are multiple foreign key paths linking the tables via secondary table 'zÉ'.  Specify the 'foreign_keys' argument, providing a list of those columns which should be counted as containing a foreign key reference from the secondary table to each of the parent and child tables.a'  Could not determine join condition between parent/child tables on relationship %s - there are multiple foreign key paths linking the tables.  Specify the 'foreign_keys' argument, providing a list of those columns which should be counted as containing a foreign key reference to the parent table.)r¯   rš   rë   rì   r  rY  rH   rT  rV  rÆ  rS  rU  r®   ÚNoForeignKeysErrorÚAmbiguousForeignKeysError)r—   rY  ÚnfeÚafes       rŠ   rÍ  zJoinCondition._determine_joinsN	  s  € ð ×ÑÐ)¨d¯n©nÐ.DÜ×&Ñ&ð(à*.¯)©)ñ4óð ðI	Ø'+×'DÑ'DÒ'LÈÐ$Ø�~‰~Ð)Ø×%Ñ%Ð-Ü)7Ø×5Ñ5ØŸ™Ø!%×!<Ñ!<Ø1Iô	*�DÔ&ð ×+Ñ+Ð3Ü'5Ø×6Ñ6ØŸ™Ø!%×!=Ñ!=Ø1Iô	(�DÕ$ð (,×'?Ñ'?�DÕ$à×+Ñ+Ð3Ü'5Ø×6Ñ6Ø×5Ñ5Ø!%×!=Ñ!=Ø1Iô	(�DÕ$ð (,×'?Ñ'?�DÕ$øÜ×(Ñ(ò 	Ø�~‰~Ð)Ü×/Ò/ð '+§i£i°·³ðAó	ð ð	ô ×/Ñ/ð:ð =A¿I¹IñFóð ðûô ×/Ñ/ò 	Ø�~‰~Ð)Ü×6Ò6ð 37·)³)¸T¿^»^ðMó
ð ð
ô ×6Ñ6ðAð DHÇ9Á9ñMóð ðûð	ús8   ¼BD8 ÃD8 Ã'>D8 Ä&D8 Ä8H&ÅA F+Æ+H&ÇA H!È!H&c                ó0   — t        | j                  d¬«      S ©N©Úlocalrƒ   rë  )rD   r®   r–   s    rŠ   r�  z%JoinCondition.primaryjoin_minus_local­	  s   € ä × 0Ñ 0Ð9LÔMÐMr‹   c                óL   — | j                   €J ‚t        | j                   d¬«      S rô  )r¯   rD   r–   s    rŠ   rŽ  z'JoinCondition.secondaryjoin_minus_local±	  s(   € à×!Ñ!Ð-Ð-Ð-Ü × 2Ñ 2Ð;NÔOÐOr‹   c                óÔ   — | j                   r%dd„}t        j                  | j                  i |«      S | j                  rt        | j                  d¬«      S t        | j                  «      S )a(  Return the primaryjoin condition suitable for the
        "reverse" direction.

        If the primaryjoin was delivered here with pre-existing
        "remote" annotations, the local/remote annotations
        are reversed.  Otherwise, the local/remote annotations
        are removed.

        c                óô   — d| j                   v r.t        | j                   «      }|d= d|d<   | j                  |«      S d| j                   v r.t        | j                   «      }|d= d|d<   | j                  |«      S y )Nrƒ   Trö  )Ú_annotationsrt  Ú_with_annotations)rÄ  rú   rü   s      rŠ   Úreplacez9JoinCondition.primaryjoin_reverse_remote.<locals>.replaceÃ	  sƒ   € Ø˜w×3Ñ3Ñ3Ü˜W×1Ñ1Ó2�AØ˜(˜Ø!%�A�g‘JØ"×4Ñ4°QÓ7Ð7Ø × 4Ñ 4Ñ4Ü˜W×1Ñ1Ó2�AØ˜'˜
Ø"&�A�h‘KØ"×4Ñ4°QÓ7Ð7àr‹   rõ  rë  ©rÄ  r€   rú   r   r¡   zOptional[_CE])Ú_has_remote_annotationsr<   Úreplacement_traverser®   Ú_has_foreign_annotationsrD   )r—   rü  s     rŠ   r�  z(JoinCondition.primaryjoin_reverse_remote¶	  sd   € ð ×'Ò'óô ×0Ñ0°×1AÑ1AÀ2ÀwÓOÐOà×,Ò,ä'Ø×$Ñ$Ð-@ôð ô (¨×(8Ñ(8Ó9Ð9r‹   c                óZ   — t        j                  |i «      D ]  }||j                  v sŒ y yrË  )r<   Úiteraterú  )r—   r5  r;  r~  s       rŠ   Ú_has_annotationzJoinCondition._has_annotationÛ	  s/   € Ü×#Ñ# F¨BÖ/ˆCØ˜S×-Ñ-Ò-Ùð 0ð r‹   c                ó:   — | j                  | j                  d«      S ©Nr�   ©r  r®   r–   s    rŠ   r   z&JoinCondition._has_foreign_annotationsâ	  s   € à×#Ñ# D×$4Ñ$4°iÓ@Ð@r‹   c                ó:   — | j                  | j                  d«      S ©Nrƒ   r  r–   s    rŠ   rþ  z%JoinCondition._has_remote_annotationsæ	  s   € à×#Ñ# D×$4Ñ$4°hÓ?Ð?r‹   c                óx   — | j                   ry| j                  r| j                  «        y| j                  «        y)z‘Annotate the primaryjoin and secondaryjoin
        structures with 'foreign' annotations marking columns
        considered as foreign.

        N)r   rY  Ú_annotate_from_fk_listÚ_annotate_present_fksr–   s    rŠ   rÏ  zJoinCondition._annotate_fksê	  s1   € ð ×(Ò(Øà×(Ò(Ø×'Ñ'Õ)à×&Ñ&Õ(r‹   c                óÄ   ‡ — dˆ fd„}t        j                  ‰ j                  i |«      ‰ _        ‰ j                  �'t        j                  ‰ j                  i |«      ‰ _        y y )Nc                óH   •— | ‰j                   v r| j                  ddi«      S y ©Nr�   T)rY  rU  ©rÄ  rú   r—   s     €rŠ   Úcheck_fkz6JoinCondition._annotate_from_fk_list.<locals>.check_fkù	  s*   ø€ Ø˜$×7Ñ7Ñ7Ø×(Ñ(¨)°TÐ):Ó;Ð;Ør‹   rý  )r<   rÿ  r®   r¯   )r—   r  s   ` rŠ   r
  z$JoinCondition._annotate_from_fk_listø	  s]   ø€ õ	ô
 $×8Ñ8Ø×Ñ˜b (ó
ˆÔð ×ÑÐ)Ü!)×!>Ñ!>Ø×"Ñ" B¨ó"ˆDÕð *r‹   c                óf  ‡‡— | j                   �*t        j                  | j                   j                  «      Šn
t	        «       Š	 	 	 	 	 	 dˆfd„Šdˆfd„}t        j                  | j                  i d|i«      | _        | j                  �)t        j                  | j                  i d|i«      | _        y y )Nc                óæ   •— t        | t        j                  «      r@t        |t        j                  «      r&| j                  |«      r| S |j                  | «      r|S ‰r| ‰v r|‰vr| S |‰v r| ‰vr|S y r•   )r›   r4   ÚColumnÚ
references)ÚaÚbÚsecondarycolss     €rŠ   Ú
is_foreignz7JoinCondition._annotate_present_fks.<locals>.is_foreign
  sn   ø€ ô ˜!œVŸ]™]Ô+´
¸1¼f¿m¹mÔ0LØ—<‘< ”?Ø�HØ—\‘\ !”_Ø�HáØ˜Ñ%¨!°=Ñ*@Ø�HØ˜-Ñ'¨A°]Ñ,BØ�Hàr‹   Úbinaryc                ó4  •— t        | j                  t        j                  «      r$t        | j                  t        j                  «      sy d| j                  j
                  vr¶d| j                  j
                  vr� ‰| j                  | j                  «      }|�}|j                  | j                  «      r#| j                  j                  ddi«      | _        y |j                  | j                  «      r#| j                  j                  ddi«      | _        y y y y y r  )r›   Úleftr5   rA   Úrightrú  ÚcomparerU  )r  r~  r  s     €rŠ   Úvisit_binaryz9JoinCondition._annotate_present_fks.<locals>.visit_binary
  sÝ   ø€ ÜØ—‘œS×.Ñ.ôä §¡¬c×.?Ñ.?Ô@Øð  §¡×!9Ñ!9Ñ9Ø V§\¡\×%>Ñ%>Ñ>á  §¡¨f¯l©lÓ;�Ø�?Ø—{‘{ 6§;¡;Ô/Ø&,§k¡k×&;Ñ&;¸YÈÐ<MÓ&N˜�ØŸ™ V§\¡\Ô2Ø'-§|¡|×'=Ñ'=Ø&¨Ð-ó(˜�ð 3ð #ð ?ð :r‹   )r  r�   r  r�   r¡   zOptional[ColumnElement[Any]]©r  úBinaryExpression[Any]r¡   r¤   )	rš   r6   r%  rå  rò   r<   r«  r®   r¯   )r—   r  r  r  s     @@rŠ   r  z#JoinCondition._annotate_present_fks
  s­   ù€ Ø�>‰>Ð%Ü ŸO™O¨D¯N©N×,<Ñ,<Ó=‰Mä›EˆMð	Ø!ð	Ø&8ð	à)õ	õ"	ô& $×3Ñ3Ø×Ñ˜b 8¨\Ð":ó
ˆÔð ×ÑÐ)Ü!)×!9Ñ!9Ø×"Ñ" B¨°<Ð(@ó"ˆDÕð *r‹   c                ó–   ‡‡‡— | j                   Š| j                  ŠdŠdˆˆˆfd„}t        j                  | j                  i d|i«       ‰S )zvReturn True if the join condition contains column
        comparisons where both columns are in both tables.

        Fr  c                ó†  •— | j                   | j                  }}t        |t        j                  «      rŽt        |t        j                  «      rs‰j                  |j                  «      rW‰j                  |j                  «      r;‰j                  |j                  «      r‰j                  |j                  «      rdŠy y y y y y y rÈ  )r  r  r›   r9   r@   Úis_derived_fromÚtable)r  rå  ÚfÚmtÚptÚresults      €€€rŠ   r  z;JoinCondition._refers_to_parent_table.<locals>.visit_binaryA
  sŸ   ø€ à—;‘; §¡ˆqˆAä˜1œj×5Ñ5Ô6Ü˜q¤*×"9Ñ"9Ô:Ø×&Ñ& q§w¡wÔ/Ø×&Ñ& q§w¡wÔ/Ø×&Ñ& q§w¡wÔ/Ø×&Ñ& q§w¡wÔ/à‘ð 0ð 0ð 0ð 0ð ;ð 7r‹   r  )rS  rT  r<   rT  r®   )r—   r  r&  r'  r(  s     @@@rŠ   Ú_refers_to_parent_tablez%JoinCondition._refers_to_parent_table8
  sI   ú€ ð
 ×+Ñ+ˆØ×*Ñ*ˆØˆ÷	ô 	×Ñ˜$×*Ñ*¨B°¸<Ð0HÔIØˆr‹   c                óB   — t        | j                  | j                  «      S )z5Return True if parent/child tables have some overlap.)rI   rS  rT  r–   s    rŠ   Ú_tables_overlapzJoinCondition._tables_overlapQ
  s"   € ô #Ø×*Ñ*¨D×,IÑ,Ió
ð 	
r‹   c                óT  — | j                   ry| j                  �| j                  «        y| j                  s| j                  r| j                  «        y| j                  «       r| j                  d„ d«       y| j                  «       r| j                  «        y| j                  «        y)z¢Annotate the primaryjoin and secondaryjoin
        structures with 'remote' annotations marking columns
        considered as part of the 'remote' side.

        Nc                ó   — d| j                   v S r  )rú  )r~  s    rŠ   rÉ  z0JoinCondition._annotate_remote.<locals>.<lambda>g
  s   € ˜I¨×)9Ñ)9Ñ9r‹   F)rþ  rš   Ú_annotate_remote_secondaryrå   rÌ  Ú_annotate_remote_from_argsr)  Ú_annotate_selfrefr+  Ú_annotate_remote_with_overlapÚ%_annotate_remote_distinct_selectablesr–   s    rŠ   rÐ  zJoinCondition._annotate_remoteX
  sˆ   € ð ×'Ò'Øà�>‰>Ð%Ø×+Ñ+Õ-Ø×%Ò%¨×):Ò):Ø×+Ñ+Õ-Ø×)Ñ)Ô+Ø×"Ñ"Ù9¸5õð ×!Ñ!Ô#Ø×.Ñ.Õ0à×6Ñ6Õ8r‹   c                óú   ‡— | j                   €J ‚| j                   Šdˆfd„}t        j                  | j                  i |«      | _        | j                  €J ‚t        j                  | j                  i |«      | _        y)z^annotate 'remote' in primaryjoin, secondaryjoin
        when 'secondary' is present.

        Nc                ób   •— ‰j                   j                  | «      r| j                  ddi«      S y ©Nrƒ   T)rå  r…  rU  )rÄ  rú   Úfixed_secondarys     €rŠ   Úreplz6JoinCondition._annotate_remote_secondary.<locals>.replw
  s0   ø€ Ø× Ñ ×0Ñ0°Ô9Ø×(Ñ(¨(°DÐ)9Ó:Ð:Ør‹   rý  )rš   r<   rÿ  r®   r¯   )r—   r7  r6  s     @rŠ   r.  z(JoinCondition._annotate_remote_secondaryn
  sy   ø€ ð �~‰~Ð)Ð)Ð)ØŸ.™.ˆõ	ô
 $×8Ñ8Ø×Ñ˜b $ó
ˆÔð ×!Ñ!Ð-Ð-Ð-Ü%×:Ñ:Ø×Ñ  Dó
ˆÕr‹   c                ój   ‡ ‡‡— dˆˆˆ fd„}t        j                  ‰ j                  i d|i«      ‰ _        y)zxannotate 'remote' in primaryjoin, secondaryjoin
        when the relationship is detected as self-referential.

        r  c                óà  •— | j                   j                  | j                  «      }t        | j                   t        j
                  «      r‘t        | j                  t        j
                  «      rm ‰| j                   «      r"| j                   j                  ddi«      | _          ‰| j                  «      r&|s#| j                  j                  ddi«      | _        y y y ‰s‰j                  «        y y r5  )r  r  r  r›   r9   r@   rU  Ú_warn_non_column_elements)r  ÚequatedÚfnÚremote_side_givenr—   s     €€€rŠ   r  z5JoinCondition._annotate_selfref.<locals>.visit_binary�
  s³   ø€ Ø—k‘k×)Ñ)¨&¯,©,Ó7ˆGÜ˜&Ÿ+™+¤z×'>Ñ'>Ô?ÄJØ—‘œj×5Ñ5ôEñ �f—k‘k”?Ø"(§+¡+×"7Ñ"7¸À4Ð8HÓ"I�F”KÙ�f—l‘lÔ#©GØ#)§<¡<×#9Ñ#9¸8ÀTÐ:JÓ#K�F•Lð -4Ð#á&Ø×.Ñ.Õ0ð 'r‹   Nr  )r<   r«  r®   )r—   r<  r=  r  s   ``` rŠ   r0  zJoinCondition._annotate_selfref…
  s/   ú€ ÷	1ô $×3Ñ3Ø×Ñ˜b 8¨\Ð":ó
ˆÕr‹   c                óh  ‡— | j                   rA| j                  rt        j                  d«      ‚| j                   D ��cg c]  \  }}|‘Œ	 c}}Šn| j                  Š| j	                  «       r| j                  ˆfd„d«       ydˆfd„}t        j                  | j                  i |«      | _        yc c}}w )z�annotate 'remote' in primaryjoin, secondaryjoin
        when the 'remote_side' or '_local_remote_pairs'
        arguments are used.

        zTremote_side argument is redundant against more detailed _local_remote_side argument.c                ó   •— | ‰v S r•   r«   )r~  r²   s    €rŠ   rÉ  z:JoinCondition._annotate_remote_from_args.<locals>.<lambda>±
  s
   ø€ ¨s°kÑ/Ar‹   Tc                óF   •— | t        ‰«      v r| j                  ddi«      S y r5  )rò   rU  )rÄ  rú   r²   s     €rŠ   r7  z6JoinCondition._annotate_remote_from_args.<locals>.repl´
  s+   ø€ ð œc +Ó.Ñ.Ø"×,Ñ,¨h¸Ð-=Ó>Ð>Ør‹   Nrý  )	rå   rÌ  rë   rì   r)  r0  r<   rÿ  r®   )r—   rÞ  rÝ  r7  r²   s       @rŠ   r/  z(JoinCondition._annotate_remote_from_argsž
  s¦   ø€ ð ×#Ò#Ø× Ò Ü×*Ñ*ð óð ð ,0×+CÒ+CÔDÑ+C¡ ! Qš1Ð+CÒD‰Kà×+Ñ+ˆKà×'Ñ'Ô)Ø×"Ñ"Ó#AÀ4ÕHõô  (×<Ñ<Ø× Ñ  " dó ˆDÕùó Es   ¾B.c                óø   ‡ ‡‡— dˆfd„}‰ j                   duxr, ‰ j                   j                  ‰ j                   j                  uŠ	 	 	 	 	 	 dˆˆ fd„Št        j                  ‰ j
                  i d|i«      ‰ _        y)zÆannotate 'remote' in primaryjoin, secondaryjoin
        when the parent/child tables have some set of
        tables in common, though is not a fully self-referential
        relationship.

        r  c                ó®   •—  ‰| j                   | j                  «      \  | _         | _         ‰| j                  | j                   «      \  | _        | _         y r•   )r  r  )r  Úproc_left_rights    €rŠ   r  zAJoinCondition._annotate_remote_with_overlap.<locals>.visit_binaryÇ
  sE   ø€ Ù(7Ø—‘˜VŸ\™\ó)Ñ%ˆFŒK˜œñ )8Ø—‘˜fŸk™kó)Ñ%ˆFŒL˜&�+r‹   Nc                ó~  •— t        | t        j                  «      r{t        |t        j                  «      ra‰j                  j                  j                  |«      r8‰j                  j                  j                  | «      r|j                  ddi«      }| |fS ‰rH|j                  j                  d«      ‰j                  j                  u r|j                  ddi«      }| |fS ‰rH| j                  j                  d«      ‰j                  j                  u r| j                  ddi«      } | |fS ‰j                  «        | |fS )Nrƒ   Tr  )r›   r9   r@   rT  rå  r…  rS  rU  rú  rÒ  r  r  r:  )r  r  Úcheck_entitiesr—   s     €€rŠ   rC  zDJoinCondition._annotate_remote_with_overlap.<locals>.proc_left_rightÓ
  s%  ø€ ô ˜$¤
× 7Ñ 7Ô8¼ZØ”z×.Ñ.ô>ð ×0Ñ0×2Ñ2×BÑBØôà×4Ñ4×6Ñ6×FÑFÀtÔLØ!ŸO™O¨X°tÐ,<Ó=�Eð ˜�;Ðñ Ø×&Ñ&×*Ñ*¨>Ó:¸d¿i¹i×>NÑ>NÑNàŸ™¨°4Ð(8Ó9�ð ˜�;Ðñ Ø×%Ñ%×)Ñ)¨.Ó9¸T¿Y¹Y×=MÑ=MÑMà—~‘~ x°Ð&6Ó7�ð ˜�;Ðð ×.Ñ.Ô0à˜�;Ðr‹   r  )r  r�   r  r�   r¡   z-Tuple[ColumnElement[Any], ColumnElement[Any]])r  r  r  r<   r«  r®   )r—   r  rE  rC  s   ` @@rŠ   r1  z+JoinCondition._annotate_remote_with_overlap¿
  s}   ú€ õ	ð �I‰I˜TÐ!ÒN d§i¡i×&6Ñ&6¸d¿i¹i×>NÑ>NÐ&Nð 	ð	Ø$ð	Ø-?ð	à:ö	ô2 $×3Ñ3Ø×Ñ˜b 8¨\Ð":ó
ˆÕr‹   c                ó^   ‡ — dˆ fd„}t        j                  ‰ j                  i |«      ‰ _        y)z}annotate 'remote' in primaryjoin, secondaryjoin
        when the parent/child tables are entirely
        separate.

        c                ó
  •— ‰j                   j                  j                  | «      r]‰j                  j                  j                  | «      r%‰j                  j                  j                  | «      r| j                  ddi«      S y r5  )rT  rå  r…  rU  rV  rU  r  s     €rŠ   r7  zAJoinCondition._annotate_remote_distinct_selectables.<locals>.repl÷
  sj   ø€ Ø×,Ñ,×.Ñ.×>Ñ>¸wÔGØ×0Ñ0×2Ñ2×BÑBÀ7ÔKØ×.Ñ.×0Ñ0×@Ñ@ÀÔIà×(Ñ(¨(°DÐ)9Ó:Ð:Ør‹   Nrý  ©r<   rÿ  r®   )r—   r7  s   ` rŠ   r2  z3JoinCondition._annotate_remote_distinct_selectablesð
  s*   ø€ õ	ô $×8Ñ8Ø×Ñ˜b $ó
ˆÕr‹   c                óH   — t        j                  d| j                  z  «       y )NzƒNon-simple column elements in primary join condition for property %s - consider using remote() annotations to mark the remote side.)r6   rí   r  r–   s    rŠ   r:  z'JoinCondition._warn_non_column_elements  s    € Ü�	‰	ð<à>B¿i¹iñHõ	
r‹   c                ót  ‡— | j                  | j                  d«      ry| j                  r3t        j                  | j                  D ��cg c]  \  }}|‘Œ	 c}}«      Šn)t        j                  | j
                  j                  «      Šdˆfd„}t        j                  | j                  i |«      | _        yc c}}w )aC  Annotate the primaryjoin and secondaryjoin
        structures with 'local' annotations.

        This annotates all column elements found
        simultaneously in the parent table
        and the join condition that don't have a
        'remote' annotation set up from
        _annotate_remote() or user-defined.

        rö  Nc                óP   •— d| j                   vr| ‰v r| j                  ddi«      S y )Nrƒ   rö  T)rú  rU  )rÄ  rú   Ú
local_sides     €rŠ   Úlocals_z.JoinCondition._annotate_local.<locals>.locals_  s0   ø€ Ø˜w×3Ñ3Ñ3¸À:Ñ8MØ×(Ñ(¨'°4¨Ó9Ð9Ør‹   rý  )	r  r®   rå   r6   r%  rS  rå  r<   rÿ  )r—   rÞ  rÝ  rM  rL  s       @rŠ   rÑ  zJoinCondition._annotate_local
  s›   ø€ ð ×Ñ × 0Ñ 0°'Ô:Øà×#Ò#ÜŸ™Ø!%×!9Ò!9Ô:Ñ!9‘v˜˜1’Ð!9Ò:ó‰Jô Ÿ™¨×)GÑ)G×)IÑ)IÓJˆJõ	ô
 $×8Ñ8Ø×Ñ˜b 'ó
ˆÕùó ;s   Á	B4
c                ó^   ‡ — dˆ fd„}t        j                  ‰ j                  i |«      ‰ _        y )Nc                óÚ   •— d| j                   v r'| j                  d‰j                  j                  i«      S d| j                   v r'| j                  d‰j                  j                  i«      S y )Nrƒ   r  rö  )rú  rU  r  r  r  r  s     €rŠ   Úparentmappers_z<JoinCondition._annotate_parentmapper.<locals>.parentmappers_)  sb   ø€ Ø˜7×/Ñ/Ñ/Ø×(Ñ(¨.¸$¿)¹)×:JÑ:JÐ)KÓLÐLØ˜G×0Ñ0Ñ0Ø×(Ñ(¨.¸$¿)¹)×:JÑ:JÐ)KÓLÐLØr‹   rý  rH  )r—   rP  s   ` rŠ   rÒ  z$JoinCondition._annotate_parentmapper(  s*   ø€ õ	ô $×8Ñ8Ø×Ñ˜b .ó
ˆÕr‹   c                ó^  — | j                   s#t        j                  d| j                  ›d�«      ‚t	        j
                  | j                  j                  «      j                  | j                  j                  «      }| j                   D ]#  \  }}||v sŒt	        j                  d|›d�«       Œ% y )Nrÿ  a   could not determine any unambiguous local/remote column pairs based on join condition and remote_side arguments.  Consider using the remote() annotation to accurately mark those elements of the join condition that are on the remote side of the relationship.zExpression zÓ is marked as 'remote', but these column(s) are local to the local side.  The remote() annotation is needed only for a self-referential relationship where both sides of the relationship refer to the same tables.)rÌ   rë   rì   r  r6   r%  rS  rå  Ú
differencerT  rí   )r—   Ú
not_targetÚ_Úrmts       rŠ   rÖ  z JoinCondition._check_remote_side4  s˜   € Ø×&Ò&Ü×&Ò&ð (,§y£yð3ó	ð 	ô Ÿ™Ø×.Ñ.×0Ñ0óç‰j˜×6Ñ6×8Ñ8Ó9ð ð ×1Ô1‘��3Ø˜*Ò$Ü—I’Iò ð!õñ 2r‹   c                óÔ  — d}| j                  |d«      }t        |«      }|rt        | j                  «      }nt        | j                  «      }| j                  r|s| j                  s|ry| j                  r<|r:|s8d|xr dxs d›d|›d| j
                  ›d	�}|d
z  }t        j                  |«      ‚d|xr dxs d›d|›d| j
                  ›d	�}|dz  }t        j                  |«      ‚)zHCheck the foreign key columns collected and emit error
        messages.Fr�   NzbCould not locate any simple equality expressions involving locally mapped foreign key columns for Úprimaryrš   z join condition 'z' on relationship rÅ  a    Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or are annotated in the join condition with the foreign() annotation. To allow comparison operators other than '==', the relationship can be marked as viewonly=True.z6Could not locate any relevant foreign key columns for z¡  Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or are annotated in the join condition with the foreign() annotation.)Ú_gather_columns_with_annotationr¢   rÉ   rË   r[  r  rë   rì   )r—   rH   rW  Úcan_syncÚforeign_colsÚhas_foreignÚerrs          rŠ   rÔ  z!JoinCondition._check_foreign_colsP  s  € ð ˆà×;Ñ;Ø˜Ió
ˆô ˜<Ó(ˆáÜ˜D×2Ñ2Ó3‰Hä˜D×<Ñ<Ó=ˆHð ×ÒÙØ×%Ò%©+àð
 ×Ò¡²Xð Ò) 	Ò8¨[Ñ8Ú"Ø—I“Iðð ð ðIñˆCô ×&Ñ& sÓ+Ð+øð Ò) 	Ò8¨[Ñ8Ú"Ø—I“Iðð ð ðñˆCô ×&Ñ& sÓ+Ð+r‹   c                ó’  — | j                   �t        | _        yt        j                  | j
                  j                  «      }t        j                  | j                  j                  «      }|j                  | j                  «      }|j                  | j                  «      }|rã|rá| j                  | j                  dd«      }| j                  | j                  d«      D �ch c]  }d|j                  vr|’Œ }}|rI|rG| j                  j                  | j                  «      }|j                  |«      }|j                  |«      }|r|st         | _        y|r|st"        | _        yt%        j&                  d| j(                  z  «      ‚|rt         | _        y|rt"        | _        yt%        j&                  d| j(                  z  «      ‚c c}w )z[Determine if this relationship is one to many, many to one,
        many to many.

        Nrƒ   r�   aD  Can't determine relationship direction for relationship '%s' - foreign key columns within the join condition are present in both the parent and the child's mapped tables.  Ensure that only those columns referring to a parent column are marked as foreign, either via the foreign() annotation or via the foreign_keys argument.z’Can't determine relationship direction for relationship '%s' - foreign key columns are present in neither the parent nor the child's mapped tables)r¯   r'   rÍ   r6   r%  rS  rå  rT  rs  ra  rX  r®   rú  r`  rÇ   rR  r)   r(   rë   rì   r  )	r—   Ú
parentcolsÚ
targetcolsÚonetomany_fkÚmanytoone_fkÚonetomany_localrå  Úmanytoone_localÚself_equateds	            rŠ   rÕ  z"JoinCondition._determine_direction”  s¶  € ð
 ×ÑÐ)Ü'ˆD�NäŸ™¨×)GÑ)G×)IÑ)IÓJˆJÜŸ™¨×)FÑ)F×)HÑ)HÓIˆJð &×2Ñ2°4×3KÑ3KÓLˆLð &×2Ñ2°4×3KÑ3KÓLˆLá¡ð #'×"FÑ"FØ×$Ñ$ h°	ó#�ð "×AÑAØ×(Ñ(¨)ôó#ñ˜ð   q§~¡~Ñ5ò	 ðð  ð #ñ #¡Ø#'×#6Ñ#6×#CÑ#CØ×*Ñ*ó$�Lð '6×&@Ñ&@ÀÓ&N�OØ&5×&@Ñ&@ÀÓ&N�Oñ #©?Ü%.�D•NÙ$©_Ü%.�D•Nä ×.Ñ.ð9ð <@¿9¹9ñEó	ð 	ñ Ü!*�•ÙÜ!*�•ä×*Ñ*ð4ð 7;·i±iñ@óð ùòU#s   Ã Gc                ót   — |D ��cg c]%  \  }}|j                  «       |j                  «       f‘Œ' c}}S c c}}w )zÅprovide deannotation for the various lists of
        pairs, so that using them in hashes doesn't incur
        high-overhead __eq__() comparisons against
        original columns mapped.

        )Ú_deannotate)r—   rÐ  rˆ  r‰  s       rŠ   Ú_deannotate_pairszJoinCondition._deannotate_pairsæ  s3   € ñ @JÔJ¹z±t°q¸!�—‘“ !§-¡-£/Ò2¸zÒJÐJùÓJs   †*4c                ó8  ‡ ‡— g }t        j                  g «      Šg }	 	 	 	 	 	 dˆˆ fd„}‰ j                  |f‰ j                  |ffD ]  \  }}|€Œ	 |||«       Œ ‰ j	                  ‰«      ‰ _        ‰ j	                  |«      ‰ _        ‰ j	                  |«      ‰ _        y )Nc                ó@   •‡— 	 	 	 	 	 	 	 	 dˆˆˆfd„}t        || «       y )Nc                óð  •— d|j                   v r3d|j                   vr%‰j                  |«      r‰j                  ||f«       n@d|j                   v r2d|j                   vr$‰j                  |«      r‰j                  ||f«       | j                  t        j
                  u rX‰j                  ||«      rEd|j                   v r‰j                  ||f«       y d|j                   v r‰j                  ||f«       y y y y )Nrƒ   r�   )rú  r\  rõ  Úoperatorr:   ÚeqrÕ  )r  r  r  rÐ  Úlrpr—   s      €€€rŠ   r  z<JoinCondition._setup_pairs.<locals>.go.<locals>.visit_binaryü  sê   ø€ ð  × 2Ñ 2Ñ2Ø ¨×(9Ñ(9Ñ9Ø×-Ñ-¨dÔ3à—G‘G˜T 5˜MÕ*à × 1Ñ 1Ñ1Ø ¨×(:Ñ(:Ñ:Ø×-Ñ-¨eÔ4à—G‘G˜U D˜MÔ*Ø—?‘?¤i§l¡lÑ2°t×7LÑ7LØ˜%ô8ð ! E×$6Ñ$6Ñ6Ø"×)Ñ)¨4°¨-Õ8Ø" d×&7Ñ&7Ñ7Ø"×)Ñ)¨5°$¨-Õ8ð 8ð8Ð2r‹   )r  r   r  r�   r  r�   r¡   r¤   rJ   )ÚjoincondrÐ  r  rm  r—   s    ` €€rŠ   Úgoz&JoinCondition._setup_pairs.<locals>.goø  s8   ù€ ð9Ø-ð9à(ð9ð *ð9ð ÷	9ô2 ! ¨xÕ8r‹   )rn  r¾   rÐ  Ú_MutableColumnPairsr¡   r¤   )r6   Ú
OrderedSetr®   r¯   rg  rÌ   rÉ   rË   )r—   Ú
sync_pairsÚsecondary_sync_pairsro  rn  rÐ  rm  s   `     @rŠ   rÓ  zJoinCondition._setup_pairsñ  sÄ   ù€ Ø*,ˆ
ä�O‰O˜BÓð 	ð 57Ðð	9Ø)ð	9à+ð	9ð ö	9ð@ ×Ñ˜zÐ*Ø×ÑÐ!5Ð6ó%
Ñ ˆH�jð ÐØÙˆx˜Õ$ð%
ð #'×"8Ñ"8¸Ó"=ˆÔØ!%×!7Ñ!7¸
Ó!CˆÔØ+/×+AÑ+AØ ó,
ˆÕ(r‹   zwweakref.WeakKeyDictionary[ColumnElement[Any], weakref.WeakKeyDictionary[RelationshipProperty[Any], ColumnElement[Any]]]Ú_track_overlapping_sync_targetsc                ój  ‡— | j                   sy | j                  D ��cg c]	  \  }}||f‘Œ c}}| j                  D ��cg c]	  \  }}||f‘Œ c}}z   D �]Ò  \  }Š‰| j                  vr/t	        j
                  | j                  |i«      | j                  ‰<   ŒDg }| j                  ‰   }|j                  «       D �]Î  \  }}|j                  j                  rŒ|| j                  j                  vsŒ7|j                  | j                  j                  vsŒZ| j                  j                  |j                  vsŒ}d| j                  j                  vsŒ–d|j                  vsŒ¥| j                  j                  j                  |j                  «      rŒÕ| j                  j                  j                  |j                  «      r�Œ| j                  j                  j                  |j                  «      r�Œ7| j                  j                  j                  |j                  «      r�Œh| j                  j                  |j                  k7  s1| j                  j                  j                  |j                  «      r�Œ¼|j!                  ||f«       �ŒÑ |r~t#        j$                  d| j                  ›d|›d‰›ddj'                  t)        ˆfd„|D «       «      «      ›dd	j'                  t)        d
„ |D «       «      «      ›d| j                  ›d�d¬«       || j                  ‰   | j                  <   �ŒÕ y c c}}w c c}}w )Nz__*rG  z' will copy column z to column z(, which conflicts with relationship(s): z, c              3  ó<   •K  — | ]  \  }}d |›d|›d‰›d�–— Œ y­w)rî  z
' (copies z to rH  Nr«   )r4  ÚprÚfr_Úto_s      €rŠ   r6  zCJoinCondition._warn_for_conflicting_sync_targets.<locals>.<genexpr>v  s&   øè ø€ ð '"á5@©	¨©Sò ACÂCÊÔ$MÙ5@ùs   ƒa›  . If this is not the intention, consider if these relationships should be linked with back_populates, or if viewonly=True should be applied to one or more if they are read-only. For the less common case that foreign key constraints are partially overlapping, the orm.foreign() annotation can be used to isolate the columns that should be written towards.   To silence this warning, add the parameter 'overlaps="rÙ  c              3  ó:   K  — | ]  \  }}|j                   –— Œ y ­wr•   )r  )r4  rw  Úfrs      rŠ   r6  zCJoinCondition._warn_for_conflicting_sync_targets.<locals>.<genexpr>{  s   è ø€ Ð+MÁ±v°r¸2¨B¯F­FÁùs   ‚z"' to the 'z' relationship.Úqzyxr{  )r[  rÉ   rË   rt  ÚweakrefÚWeakKeyDictionaryr  rø   r  Ú_dispose_calledró   r  rµ   r  Ú
is_siblingr  rÕ  r6   rí   rè  Úsorted)r—   Úfrom_ry  Úother_propsÚprop_to_fromrw  rx  s     `    rŠ   r  z0JoinCondition._warn_for_conflicting_sync_targets,  s„  ø€ Ø× Ò Øð .2×-CÒ-Cô
Ù-C™\˜e SˆU�CŠLÐ-Cò
ð .2×-MÒ-Mô
Ù-M™\˜e SˆU�CŠLÐ-Mò
õ
‰JˆE�3ð ˜$×>Ñ>Ñ>ä×-Ñ-¨t¯y©y¸%Ð.@ÓAð ×4Ñ4°SÒ9ð !�Ø#×CÑCÀCÑH�à+×1Ñ1×3‘G�B˜àŸI™I×5Ó5Ø d§i¡i×&AÑ&AÒAØŸF™F¨$¯)©)×*=Ñ*=Ò=Ø ŸI™IŸM™M°·±Ò=ð "¨¯©×)<Ñ)<Ò<Ø!¨¯©Ò5Ø $§	¡	× 0Ñ 0× ;Ñ ;¸B¿I¹IÕ FØ $§	¡	× 0Ñ 0× ;Ñ ;¸B¿I¹IÖ FØ $§	¡	× 0Ñ 0× ;Ñ ;¸B¿I¹IÖ FØ $§	¡	× 0Ñ 0× ;Ñ ;¸B¿I¹IÖ Fà ŸI™IŸM™M¨R¯V©VÒ3Ø#'§9¡9×#3Ñ#3×#AÑ#AÀ"Ç)Á)Ö#Lð $×*Ñ*¨B°¨9Ö5ð/  4ñ2 Ü—I’Ið !ŸI›IÚ!ÚØ ŸI™IÜ &ó '"á5@ó'"ó !"õð  ŸH™H¤VÑ+MÁÓ+MÓ%MÕNØ ŸI›Ið1ð4 $õ7ð: HM�×4Ñ4°SÑ9¸$¿)¹)ÓDñW
ùó 
ùó
s
   žL)¾L/c                ó$   — | j                  d«      S r  ©Ú_gather_join_annotationsr–   s    rŠ   r`  zJoinCondition.remote_columns‚  s   € à×,Ñ,¨XÓ6Ð6r‹   c                ó$   — | j                  d«      S )Nrö  r†  r–   s    rŠ   rÇ   zJoinCondition.local_columns†  s   € à×,Ñ,¨WÓ5Ð5r‹   c                ó$   — | j                  d«      S r  r†  r–   s    rŠ   ra  z!JoinCondition.foreign_key_columnsŠ  s   € à×,Ñ,¨YÓ7Ð7r‹   c                ó   — t        | j                  | j                  |«      «      }| j                  �+|j	                  | j                  | j                  |«      «       |D �ch c]  }|j                  «       ’Œ c}S c c}w r•   )rò   rX  r®   r¯   rð   rf  )r—   r;  Úsrˆ  s       rŠ   r‡  z&JoinCondition._gather_join_annotationsŽ  sw   € ô Ø×0Ñ0°×1AÑ1AÀ:ÓNó
ˆð ×ÑÐ)Ø�H‰HØ×4Ñ4Ø×&Ñ&¨
óôñ
 *+Ó+© A�—‘•¨Ñ+Ð+ùÒ+s   Á!A;c                óÊ   — t        |«      }t        j                  |i «      D �ch c]4  }|j                  |j                  «      rt        t        t           |«      ’Œ6 c}S c c}w r•   )rò   r<   r  Úissubsetrú  r   rA   r   )r—   r5  r;  Úannotation_setr~  s        rŠ   rX  z-JoinCondition._gather_columns_with_annotationœ  sa   € ô ˜Z›ˆô  ×'Ñ'¨°Ô3ó
á3�Ø×&Ñ& s×'7Ñ'7Ô8ô ”œsÑ# SÕ)Ø3ñ
ð 	
ùò 
s   ¤9A c                óÒ   — | j                   �Gt        t        j                  | j                   j                  D �cg c]  }|j
                  ‘Œ c}Ž «      S t        j                  S c c}w r•   )rš   Ú	frozensetÚ	itertoolsÚchainrå  Ú	proxy_setr6   Ú	EMPTY_SET©r—   rå  s     rŠ   Ú_secondary_lineage_setz$JoinCondition._secondary_lineage_set¦  sV   € à�>‰>Ð%ÜÜ—‘°t·~±~×7GÒ7GÓ!HÑ7G°! !§+£+Ð7GÑ!HÐIóð ô —>‘>Ð!ùò "Is   ¹A$c                ó8  ‡ ‡— t        |ddi«      }‰ j                  ‰ j                  ‰ j                  }}}|�|�||z  }n||z  }|rM	 	 	 	 	 	 d
ˆ fd„Št	        ˆfd„|D «       «      }|�|t        j                  |Ž z  }n|t        j                  |Ž z  }|rþ|�’|j                  d¬«      }t        |t        ¬«      }	t        |‰ j                  ¬«      j                  |	«      }
|�5t        |t        ¬«      j                  t        |‰ j                  ¬«      «      }	|
j                  |«      }nKt        |t        ‰ j                  ¬	«      }	|�+|	j                  t        |t        ‰ j                  ¬	«      «       d}
|	j                  |«      }|
xs |	}d|_        nd}|||||fS )a7  Given a source and destination selectable, create a
        join between them.

        This takes into account aliasing the join clause
        to reference the appropriate corresponding columns
        in the target objects, as well as the extra child
        criterion, equivalent column sets, etc.

        rN  TNc                óÔ   •— | j                   j                  dd«      }|‰j                  j                  ur2|‰j                  j                  ur| ‰j
                  vrt        | |«      S | S )a  note unrelated columns in the "extra criteria" as either
                should be adapted or not adapted, even though they are not
                part of our "local" or "remote" side.

                see #9779 for this case, as well as #11010 for a follow up

                r  N)rú  rÒ  r  r  r  r–  r?   )rÃ  r   Úparentmapper_for_elementr—   s      €rŠ   Úmark_exclude_colsz5JoinCondition.join_targets.<locals>.mark_exclude_colsá  sg   ø€ ð ,0×+<Ñ+<×+@Ñ+@Ø" Dó,Ð(ð
 -°D·I±I×4DÑ4DÑDØ0¸¿	¹	×8HÑ8HÑHØ D×$?Ñ$?Ñ?ä)¨$°Ó<Ð<à�Kr‹   c              3  ó>   •K  — | ]  }t        |d di‰¬«      –— Œ y­w)Úshould_not_adaptT)Úannotate_callableNrB   )r4  rÃ  rš  s     €rŠ   r6  z-JoinCondition.join_targets.<locals>.<genexpr>ù  s5   øè ø€ ð #ñ +�Dô ØØ'¨Ð.Ø&7÷ð ñ
 +ùs   ƒ)Úflat)Ú
exclude_fn)Úequivalents)rŸ  r   )rÃ  rf   r   re   r¡   rf   )rE   r®   r¯   rš   r7  r5   r;  rR  rG   Ú_local_col_excluderX  r’  rW  rT  Ú_remote_col_excluderŸ  )r—   r#  rL  r£  ra  r  r®   r¯   rš   Úprimary_aliasizerÚsecondary_aliasizerr-  rš  s   `           @rŠ   r¢  zJoinCondition.join_targets¯  sø  ù€ ô6 ,ØÐ7¸Ð>ó
ˆð
 ×ÑØ×ÑØ�N‰Nð %.�]ˆð Ð"ØÐ(Ø -°Ñ ;‘à)¨KÑ7�áð Ø)ð Ø8Gð à$õ ô0 #ó #ñ +ó#ó ˆNð Ð(Ø -´·±¸.Ð0IÑ I‘à)¬C¯H©H°nÐ,EÑE�áØÐ$Ø%×;Ñ;ÀÐ;ÓF�	Ü$1ØÜ1ô%Ð!ô '4Ø#°×1GÑ1Gô'ç‘%Ð)Ó*ð $ð %Ð0Ü(5Ø!Ü#5ô)÷ ‘eÜ%Ø-Ø(,×(?Ñ(?ôóð &ð !4× <Ñ <¸]Ó K‘ä$1Ø#Ü1Ø $× 6Ñ 6ô%Ð!ð
 %Ð0Ø%×+Ñ+Ü%Ø-Ü':Ø(,×(?Ñ(?ôôð '+Ð#à+×4Ñ4°[ÓAˆKØ0ÒEÐ4EˆNØ(,ˆNÕ%à!ˆNàØØØØð
ð 	
r‹   c                óŠ  ‡‡
‡‡— i Š
i }| j                   d uŠ‰rIt        j                  t        «      Š| j                  D ]   \  }}‰|   j                  ||f«       |||<   Œ" n5‰s| j                  D ]
  \  }}|||<   Œ n| j                  D ]
  \  }}|||<   Œ 	 	 	 	 	 	 dˆ
ˆˆˆfd„}| j                  }| j                   �‰st        j                  |i |«      }| j                   �;| j                   }‰rt        j                  |i |«      }t        j                  ||«      }‰
D �ci c]  }‰
|   j                  |“Œ }	}||	|fS c c}w )Nc                ó´   •— ‰sd| j                   v s‰rE‰r| ‰v s‰s=d| j                   v r/| ‰vr&t        j                  d d | j                  d¬«      ‰| <   ‰|    S y )Nrö  rƒ   T)rq  rr  )rú  r5   ru  rv  )rÄ  rú   ÚbindsÚhas_secondaryÚlookupr¬  s     €€€€rŠ   Úcol_to_bindz5JoinCondition.create_lazy_clause.<locals>.col_to_bindP  sj   ø€ ñ '¨7°g×6JÑ6JÑ+JÙ$á" w°&Ñ'8Ù)¨h¸'×:NÑ:NÑ.Nð  %Ñ'Ü%(§]¡]Ø˜d¨'¯,©,¸tô&�E˜'‘Nð ˜W‘~Ð%Ør‹   )rÄ  r�   rú   r   r¡   zOptional[BindParameter[Any]])r¯   ÚcollectionsÚdefaultdictÚlistrÌ   rÕ  r®   r<   rÿ  r5   r;  r  )r—   r¬  Úequated_columnsrÞ  rÝ  rª  Ú	lazywherer¯   r~  r¡  r§  r¨  r©  s    `        @@@rŠ   Úcreate_lazy_clausez JoinCondition.create_lazy_clause:  sw  û€ ð
 ?AˆØHJˆà×*Ñ*°$Ð6ˆáÜ ×,Ñ,¬TÓ2ˆFØ×/Ô/‘��1Ø�q‘	× Ñ  ! Q Ô(Ø%&� Ò"ñ 0ñ #Ø×/Ô/‘��1Ø%&� Ò"ñ 0ð ×/Ô/‘��1Ø%&� Ò"ð 0ð	Ø'ð	Ø/2ð	à)÷	ð 	ð$ ×$Ñ$ˆ	Ø×ÑÐ%Ñ->Ü ×5Ñ5Ø˜2˜{óˆIð ×ÑÐ)Ø ×.Ñ.ˆMÙ Ü (× =Ñ =Ø! 2 {ó!�ô Ÿ™ ¨MÓ:ˆIá6;Ó<±e¨s�u˜S‘z—~‘~ sÑ*°eˆÐ<à˜+ Ð6Ð6ùò =s   Ä"E ) rS  rk   rT  rk   rU  rk   rV  rk   r®   r¿   rš   rÀ   r¯   r¿   rW  úOptional[_EquivalentColumnMap]rX  r±  rY  r   rÌ   rÊ   r²   r   rZ  r   r  r¯  r[  r¢   r\  zCallable[..., bool]r°  r’  )r5  ri   r;  r“   r¡   r¢   r    )r<  z$Callable[[ColumnElement[Any]], bool]r=  r¢   r¡   r¤   )rH   r¾   rW  r¢   r¡   r¤   )rÐ  Ú_ColumnPairIterabler¡   rp  )r¡   rÄ   )r;  r“   r¡   rÄ   )r5  r�   r;  zIterable[str]r¡   rÄ   )r¡   zFrozenSet[ColumnElement[Any]])Nr«   )r#  rÀ   rL  rk   r£  r¢   ra  r¿   r  r‘  r¡   ztTuple[ColumnElement[bool], Optional[ColumnElement[bool]], Optional[FromClause], Optional[ClauseAdapter], FromClause])F)r¬  r¢   r¡   zgTuple[ColumnElement[bool], Dict[str, ColumnElement[Any]], Dict[ColumnElement[Any], ColumnElement[Any]]])0r¥   r¦   r§   rª   ré   r×  rÎ  rÍ  r	  r�  rŽ  r6   rº  r�  r  r   rþ  rÏ  r
  r  r)  r+  rÐ  r.  r0  r/  r1  r2  r:  rÑ  rÒ  rÖ  rÔ  rÕ  rg  rÓ  r}  r~  rt  r  r`  rÇ   ra  r‡  rX  r–  r¢  r°  r«   r‹   rŠ   rÁ   rÁ   Ï  sp  … Ø6Ó6Ø$Ó$Ø0Ó0Ø#Ó#Ø
#Ó#à#Ó#Ø!-Ó-Ø$Ó$à)Ó)Ø(Ó(Ø'Ó'Ø&Ó&à/Ó/ð 6:Ø*.Ø7;Ø=AØ<@Ø(,Ø59ØØ %à!Ù0?ñ%3à#-ð3ð #-ð3ð ",ð	3ð
 !+ð3ð 3ð3ð (ð3ð 5ð3ð ;ð3ð :ð3ð #&ð3ð 3ð3ð ð3ð ð3ð  (ð!3ð" ð#3ð$ .ó%3ój$LóLó$]ð~ òNó ðNð òPó ðPð 
×Ñò":ó ð":óHð 
×ÑòAó ðAð 
×Ñò@ó ð@ó)óó0ódó2
ó9ó,
ð.
Ø6ð
ØKOð
à	ó
ó2óB/
ób
ó&
ó
ó<

óð8B,Ø1ðB,Ø<@ðB,à	óB,óHPðd	KØ-ð	Kà	ó	Kó2
ðr 	"ˆ×!Ñ!Ó#ð $ð &ó $óTMðl 
×Ñò7ó ð7ð 
×Ñò6ó ð6ð 
×Ñò8ó ð8ð,Øð,à	 ó,ð
Ø(ð
Ø7Dð
à	 ó
ð 
×Ñò"ó ð"ð 6:Ø:<ðI
à/ðI
ð $ðI
ð ð	I
ð
 3ðI
ð 8ðI
ð
óI
õV87r‹   rÁ   c                  ó$   — e Zd ZdZdZdd„Zdd„Zy)Ú_ColInAnnotationsz¨Serializable object that tests for names in c._annotations.

    TODO: does this need to be serializable anymore?  can we find what the
    use case was for that?

    )Únamesc                ó$   — t        |«      | _        y r•   )r�  rµ  )r—   rµ  s     rŠ   ré   z_ColInAnnotations.__init__  s   € Ü˜uÓ%ˆ�
r‹   c                ó^   — t        | j                  j                  |j                  «      «      S r•   )r¢   rµ  rs  rú  r•  s     rŠ   Ú__call__z_ColInAnnotations.__call__‚  s    € Ü�D—J‘J×+Ñ+¨A¯N©NÓ;Ó<Ð<r‹   N)rµ  r“   )rå  ri   r¡   r¢   )r¥   r¦   r§   r¨   r©   ré   r¸  r«   r‹   rŠ   r´  r´  u  s   „ ñð €Ió&ô=r‹   r´  rö  rœ  rƒ   c                  ó   — e Zd ZdZdZy)ÚRelationshipa‘  Describes an object property that holds a single item or list
    of items that correspond to a related database table.

    Public constructor is the :func:`_orm.relationship` function.

    .. seealso::

        :ref:`relationship_config_toplevel`

    .. versionchanged:: 2.0 Added :class:`_orm.Relationship` as a Declarative
       compatible subclass for :class:`_orm.RelationshipProperty`.

    TN)r¥   r¦   r§   r¨   rµ  r«   r‹   rŠ   rº  rº  Š  s   „ ñð €MØr‹   rº  c                  ó(   — e Zd ZdZdZ	 edd„«       Zy)Ú_RelationshipDeclaredz>Relationship subclass used implicitly for declarative mapping.Tc                 ó   — y)Nrº  r«   )r8  s    rŠ   Ú_mapper_property_namez+_RelationshipDeclared._mapper_property_nameª  s   € àr‹   Nr®  )r¥   r¦   r§   r¨   rµ  Úclassmethodr¾  r«   r‹   rŠ   r¼  r¼     s"   „ ñ
 Ià€MØàòó ñr‹   r¼  )r‰   r   r¡   r   )rÄ  r€   r   re   r¡   r€   )«r¨   Ú
__future__r   r«  r   Údataclassesr7   r2  r‘  rô   r5  r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r}  Ú r   r   Ú_typingr   r   Úbaser   r   r   r    r!   r"   r#   r$   Ú
interfacesr%   r&   r'   r(   r)   r*   r+   r,   r6   r-   r.   r/   r1   rë   r2   r3   r4   r5   Ú
inspectionr8   r9   r:   r;   r<   Úsql._typingr=   r>   Úsql.annotationr?   Úsql.elementsr@   rA   Úsql.utilrC   rD   rE   rF   rG   rH   rI   rK   Úutil.typingrL   rM   rN   ÚTYPE_CHECKINGrO   rP   rQ   rR   rS   rT   rU   rV   ÚclsregistryrW   rX   Ú	decl_baserY   rš  rZ   r  r[   Úqueryr\   rØ  r]   ry  r^   Ú
strategiesr_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   Ú
sql.schemarj   Úsql.selectablerk   rl   rm   rn   rp   rq   rr   rs   r“   Ú_RelationshipArgumentTyper©  r¢   Ú"_RelationshipJoinConditionArgumentÚ_RelationshipSecondaryArgumentr¨  ÚORMBackrefArgumentÚDMLColumnRoleÚ_ORMColCollectionElementÚ_ORMColCollectionArgumentr   r€   r²  rÈ   rp  rƒ   r�   Ú	dataclassr�   rÃ   r­   Úclass_loggerÚ
Identifiedr´   r…   rÁ   r´  r¡  r¢  rº  r¼  r«   r‹   rŠ   Ú<module>rÝ     s½  ðñõ #ã Ý Û Û Û Û 	Û Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Û å Ý Ý *Ý .Ý $Ý "Ý Ý Ý &Ý Ý Ý !Ý )Ý /Ý "Ý !Ý !Ý &Ý -Ý +Ý Ý !Ý  Ý Ý Ý Ý Ý Ý Ý  Ý Ý Ý Ý Ý Ý 3Ý +Ý +Ý 'Ý (Ý %Ý 'Ý (Ý .Ý $Ý %Ý *Ý +Ý 4Ý !Ý 9à	×ÒÝ$Ý,Ý)Ý&Ý,ÝÝ&ÝÝ,Ý#Ý1Ý/ÝÝÝ Ý$Ý&Ý"Ý!Ý/Ý2Ý'Ý0Ý4Ý/Ý,Ý,Ý"Ý+Ý1Ý3áˆT˜Ô€Ùˆe˜3Ô€Ùˆe˜3Ô€áˆe˜3Ô€áˆv˜SÔ!€ð "ØØˆ�HØˆR��b‘ˆ\ÑØØØˆR�ÐÑØˆRÐ#Ð#Ñ$ð&ñÐ ð  ð
ñÐ ð" &+ØÐ	" 4Ñ	(Ð(ñ&Ð "ð "'Ø�#�x  LÐ 0Ñ1Ð1ñ"Ð ð ØˆE�NØØ˜cÑ"ØˆRÐ*¨3Ñ/Ð/Ñ0ØˆR�Ð3°CÑ8Ñ9Ð9Ñ:ØˆU�3Ð1°#Ñ6Ð6Ñ7Ñ8ð:ñÐ ð ˜3  c¨4°°S°©>Ð&9Ñ :Ð:Ñ;Ð à Ø�ÑØ�cÑØ	×ÒØðñÐ ð "ØØÐ%Ñ&ØˆR�Ð2Ñ3Ð3Ñ4ØˆRÐ)Ð)Ñ*Øð	ñÐ ñ ˆvÐ6°sÑ;Ô<€áˆeÐ/Ô0€ð ˜u ]°3Ñ%7¸ÀsÑ9KÐ%KÑLÑMÐ à˜˜m¨CÑ0°-ÀÑ2DÐDÑEÑF€à˜5 ¨sÑ!3°]À3Ñ5GÐ!GÑHÑIÐ óó&ð( ×Òô'�w˜s C˜xÑ(ó 'ó ð'ð:   ¨¡°°mÀCÑ6HÈ#Ð6MÑ0NÐ NÑOÐ ô˜
ô ð6 ×ÒôI
ØÐ0°Ñ4°c·n²nóI
ó ðI
óX<
÷c7ñ c7÷L%=ñ =ñ" ' wÐ0BÓCÐ Ù'¨Ð2DÓEÐ ôØ˜ÑØ�rÑôô,Ø�ÑØ�BÑØ�"Ñõr‹   