L idZddlmZddlZddlZddlmZddlmZddlmZddlmZddlm Z dd lm Z dd lm Z dd lm Z dd lm Z dd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z dd lm!Z!dd!lm"Z"dd"lm#Z#dd#l"m$Z$dd$l"m%Z%dd%l"m&Z&dd&l"m'Z'dd'l(m)Z)dd(l*m+Z+dd)l*m,Z,dd*l*m-Z-dd+l.m/Z/dd,l.m0Z0dd-l1m2Z2dd.l3m4Z4dd/l3m5Z5dd0l3m6Z6dd1l3m7Z7dd2l3m8Z8ejrrdd3l*m:Z:dd4l*m;Z;dd5lm?Z?dd7l>m@Z@ed8e9ZAed:ed;<ZBed=ed;>ZCed?e9ZDed@e9ZEedAe9ZFddddddBdBe2je2je2je2je2je2je2je2jdC dydDZHGdEdFe%ZIGdGdHe5eBZJGdIdJe5ZKGdKdLeKe5eCZLGdMdNeKe5eCZMGdOdPe5ZNGdQdReNe5eCZOGdSdTeNe5eCZPGdUdVe5eAZQGdWdXe5ZRGdYdZe5ZSGd[d\e5ZTGd]d^e5eAZUGd_d`e&je'eAe,eUeAZWedadb9ZXGdcdde)eAZYGdedfeYeAZZGdgdheYeAZ[GdidjeYeAZ\GdkdleQeAZ]edmdn9Z^ Gdodpe e^Z_Gdqdre_eAZ`Gdsdte`eAeeAZaGdudve_eFeeEeFfZbGdwdxe`eAeeAZcy)zzContain the ``AssociationProxy`` class. The ``AssociationProxy`` is a Python property object which provides transparent proxied access to the endpoint of an association object. See the example ``examples/association/proxied_association.py``. ) annotationsN) AbstractSet)Any)Callable)cast) Collection)Dict)Generic ItemsView)Iterable)Iterator)KeysView)List)Mapping)MutableMapping)MutableSequence) MutableSet)NoReturn)Optional)overload)Set)Tuple)Type)TypeVar)Union ValuesView) ColumnElement)exc)inspect)orm)util) collections)InspectionAttrExtensionType) interfaces) ORMDescriptor)SQLORMOperations)_AttributeOptions)_DCAttributeOptions)_DEFAULT_ATTRIBUTE_OPTIONS) operators)or_)_NoArg)Literal)Protocol)Self) SupportsIndex)SupportsKeysAndGetItem)MapperProperty)PropComparator)Mapper)_ColumnExpressionArgument) _InfoType_T)bound_T_coT)r; covariant_T_con)r; contravariant_S_KT_VTF)creatorgetset_factory proxy_factoryproxy_bulk_setinfocascade_scalar_deletescreate_on_none_assignmentinitreprdefaultdefault_factorycomparekw_onlyhashdataclass_metadatacLt|||||||||t| | | | | ||| S)aReturn a Python property implementing a view of a target attribute which references an attribute on members of the target. The returned value is an instance of :class:`.AssociationProxy`. Implements a Python property representing a relationship as a collection of simpler values, or a scalar value. The proxied property will mimic the collection type of the target (list, dict or set), or, in the case of a one to one relationship, a simple scalar value. :param target_collection: Name of the attribute that is the immediate target. This attribute is typically mapped by :func:`~sqlalchemy.orm.relationship` to link to a target collection, but can also be a many-to-one or non-scalar relationship. :param attr: Attribute on the associated instance or instances that are available on instances of the target object. :param creator: optional. Defines custom behavior when new items are added to the proxied collection. By default, adding new items to the collection will trigger a construction of an instance of the target object, passing the given item as a positional argument to the target constructor. For cases where this isn't sufficient, :paramref:`.association_proxy.creator` can supply a callable that will construct the object in the appropriate way, given the item that was passed. For list- and set- oriented collections, a single argument is passed to the callable. For dictionary oriented collections, two arguments are passed, corresponding to the key and value. The :paramref:`.association_proxy.creator` callable is also invoked for scalar (i.e. many-to-one, one-to-one) relationships. If the current value of the target relationship attribute is ``None``, the callable is used to construct a new object. If an object value already exists, the given attribute value is populated onto that object. .. seealso:: :ref:`associationproxy_creator` :param cascade_scalar_deletes: when True, indicates that setting the proxied value to ``None``, or deleting it via ``del``, should also remove the source object. Only applies to scalar attributes. Normally, removing the proxied target will not remove the proxy source, as this object may have other state that is still to be kept. .. versionadded:: 1.3 .. seealso:: :ref:`cascade_scalar_deletes` - complete usage example :param create_on_none_assignment: when True, indicates that setting the proxied value to ``None`` should **create** the source object if it does not exist, using the creator. Only applies to scalar attributes. This is mutually exclusive vs. the :paramref:`.assocation_proxy.cascade_scalar_deletes`. .. versionadded:: 2.0.18 :param init: Specific to :ref:`orm_declarative_native_dataclasses`, specifies if the mapped attribute should be part of the ``__init__()`` method as generated by the dataclass process. .. versionadded:: 2.0.0b4 :param repr: Specific to :ref:`orm_declarative_native_dataclasses`, specifies if the attribute established by this :class:`.AssociationProxy` should be part of the ``__repr__()`` method as generated by the dataclass process. .. versionadded:: 2.0.0b4 :param default_factory: Specific to :ref:`orm_declarative_native_dataclasses`, specifies a default-value generation function that will take place as part of the ``__init__()`` method as generated by the dataclass process. .. versionadded:: 2.0.0b4 :param compare: Specific to :ref:`orm_declarative_native_dataclasses`, indicates if this field should be included in comparison operations when generating the ``__eq__()`` and ``__ne__()`` methods for the mapped class. .. versionadded:: 2.0.0b4 :param kw_only: Specific to :ref:`orm_declarative_native_dataclasses`, indicates if this field should be marked as keyword-only when generating the ``__init__()`` method as generated by the dataclass process. .. versionadded:: 2.0.0b4 :param hash: Specific to :ref:`orm_declarative_native_dataclasses`, controls if this field is included when generating the ``__hash__()`` method for the mapped class. .. versionadded:: 2.0.36 :param dataclass_metadata: Specific to :ref:`orm_declarative_native_dataclasses`, supplies metadata to be attached to the generated dataclass field. .. versionadded:: 2.0.42 :param info: optional, will be assigned to :attr:`.AssociationProxy.info` if present. The following additional parameters involve injection of custom behaviors within the :class:`.AssociationProxy` object and are for advanced use only: :param getset_factory: Optional. Proxied attribute access is automatically handled by routines that get and set values based on the `attr` argument for this proxy. If you would like to customize this behavior, you may supply a `getset_factory` callable that produces a tuple of `getter` and `setter` functions. The factory is called with two arguments, the abstract type of the underlying collection and this proxy instance. :param proxy_factory: Optional. The type of collection to emulate is determined by sniffing the target collection. If your collection type can't be determined by duck typing or you'd like to use a different collection implementation, you may supply a factory function to produce those collections. Only applicable to non-scalar relationships. :param proxy_bulk_set: Optional, use with proxy_factory. rCrDrErFrGrHrIattribute_options)AssociationProxyr*)target_collectionattrrCrDrErFrGrHrIrJrKrLrMrNrOrPrQs e/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sqlalchemy/ext/associationproxy.pyassociation_proxyrYTsM@  %#% 5";+           ceZdZdZy)AssociationProxyExtensionTypeASSOCIATION_PROXYN)__name__ __module__ __qualname__r]rZrXr\r\ s +rZr\ceZdZddZy)_GetterProtocolcyNra)selfinstances rX__call__z_GetterProtocol.__call__rZN)rgrreturnr<r^r_r`rhrarZrXrcrcs3rZrcc eZdZy)_SetterProtocolNr^r_r`rarZrXrmrmrZrmceZdZddZy)_PlainSetterProtocolcyrera)rfrgvalues rXrhz_PlainSetterProtocol.__call__rirZN)rgrrsr>rjNonerkrarZrXrqrqsArZrqceZdZddZy)_DictSetterProtocolcyrera)rfrgkeyrss rXrhz_DictSetterProtocol.__call__#rirZN)rgrrxrrsr>rjrtrkrarZrXrvrv"sKrZrvc eZdZy)_CreatorProtocolNrnrarZrXrzrz'rorZrzceZdZddZy)_PlainCreatorProtocolcyrerarfrss rXrhz_PlainCreatorProtocol.__call__+rirZN)rsr>rjrrkrarZrXr|r|*s1rZr|ceZdZddZy)_KeyCreatorProtocolcyrerarfrxrss rXrhz_KeyCreatorProtocol.__call__/rirZN)rxrrszOptional[_T_con]rjrrkrarZrXrr.sErZrceZdZ ddZy)_LazyCollectionProtocolcyrerarfs rXrhz _LazyCollectionProtocol.__call__3s rZNrjzCUnion[MutableSet[_T], MutableMapping[Any, _T], MutableSequence[_T]]rkrarZrXrr2s   rZrc eZdZ ddZy)_GetSetFactoryProtocolcyrera)rfcollection_classassoc_instances rXrhz_GetSetFactoryProtocol.__call__;s8;rZN)rOptional[Type[Any]]rAssociationProxyInstance[Any]rj,Tuple[_GetterProtocol[Any], _SetterProtocol]rkrarZrXrr:s#;-;6; 6 ;rZrc(eZdZ ddZy)_ProxyFactoryProtocolcyrera)rflazy_collectionrC value_attrparents rXrhz_ProxyFactoryProtocol.__call__Cs rZN) rz_LazyCollectionProtocol[Any]rCrzrstrrrrjrrkrarZrXrrBs75"  .  rZrc eZdZ ddZy)_ProxyBulkSetProtocolcyrera)rfproxy collections rXrhz_ProxyBulkSetProtocol.__call__MsrZN)r_AssociationCollection[Any]r Iterable[Any]rjrtrkrarZrXrrLs0>K rZrceZdZUdZded<ded<ded<ded<ded <ded <d ed <d ed<ded<ej ddZ d ddZ ddZ y)_AssociationProxyProtocolzpdescribes the interface of :class:`.AssociationProxy` without including descriptor methods in the interface.Optional[_CreatorProtocol]rCrrxrVrboolrHrI Optional[_GetSetFactoryProtocol]rDOptional[_ProxyFactoryProtocol]rEOptional[_ProxyBulkSetProtocol]rFcyrerars rXrGz_AssociationProxyProtocol.info`s!$rZNcyrerarfclass_objs rX for_classz#_AssociationProxyProtocol.for_classcs'*rZcyrera)rfrs rX_default_getsetz)_AssociationProxyProtocol._default_getsetgs7:rZrjr9rer Type[Any]rzOptional[object]rjAssociationProxyInstance[_T]rrrjr) r^r_r`__doc____annotations__r$ro_memoized_propertyrGrrrarZrXrrRs>(' HO  ##442233 $$:>++&6+ %+; #; 5;rZrc *eZdZdZdZej Zddddddddd ddZe ddZ e ddZ e dd Z dd Z dd Z dd Z d dd Z ddZddZ ddZddZy)rUzDA descriptor that presents a read/write view of an object attribute.TNFrSch||_||_||_||_||_||_|r| rt jd||_| |_ dt|jd|dt||_ |r||_| r| tk7rd|_| |_yd|_t|_y)a(Construct a new :class:`.AssociationProxy`. The :class:`.AssociationProxy` object is typically constructed using the :func:`.association_proxy` constructor function. See the description of :func:`.association_proxy` for a description of all parameters. z[The cascade_scalar_deletes and create_on_none_assignment parameters are mutually exclusive._TFN)rVrrCrDrErFr! ArgumentErrorrHrItyper^idrxrGr,_has_dataclass_arguments_attribute_options) rfrVrWrCrDrErFrGrHrIrTs rX__init__zAssociationProxy.__init__ws."3 ,*, !&?##5 '=#)B& J    tH  DI !%??,0D )&7D #,1D )&@D #rZcyrerarfrgowners rX__get__zAssociationProxy.__get__rZcyrerars rXrzAssociationProxy.__get__s(+rZcyrerars rXrzAssociationProxy.__get__s;>rZc`||S|j||}|r|j|S|J|Sre) _as_instanceget)rfrgrinsts rXrzAssociationProxy.__get__sC =K  1 88H% % rZc^t|}|j||j||yre)rrset)rfrgvaluesrs rX__set__zAssociationProxy.__set__s(h &(+//&ArZc\t|}|j||j|yre)rrdelete)rfrgrs rX __delete__zAssociationProxy.__delete__s&h &(+228.getter&(0(<78$ F$ FrZc t||yrerrgkrsrWs rX dict_setterz5AssociationProxy._default_getset..dict_setter+$.rZc t||yrerovrWs rX plain_setterz6AssociationProxy._default_getset..plain_setter24#rZ)rgrrj Optional[Any])rgrrrrsrrjrt)rrrrrjrtroperator attrgetterdictrfrrrrrrWs @@rXrz AssociationProxy._default_getset sR%%d+ G t # /;& & $<' 'rZc<d|jd|jdS)NzAssociationProxy(z, ))rVrrs rX__repr__zAssociationProxy.__repr__7s  " " OO  rZ)rVrrWrrCrrDrrErrFrrGOptional[_InfoType]rHrrIrrTzOptional[_AttributeOptions])rg Literal[None]rrrjr2)rgrrrrjr)rgobjectrrrjr:)rgrrrrjz=Union[AssociationProxyInstance[_T], _T, AssociationProxy[_T]])rgrrr:rjrt)rgrrjrtrer)rrrrrjr)rrrjrrrjr)r^r_r`r is_attributer\r]extension_typerrrrrrrrrrrarZrXrUrUls OL2DDN/3;?9=:>$(',*/9=6A6A6A , 6A 9 6A76A86A"6A!%6A$(6A76Ap%.; +%+.1+ %++>>  '*  F B= :>#.#.&6#. %#.J # %6 4( #( 5(. rZrU_SelfrceZdZUdZded<ded< d*dZded< e d+d Ze d,d Zd-d Z e d.d Z d/d Z e d0dZ ej d1dZe d2dZe d3dZe d4dZejd5dZejd5dZe d5dZded<ded<d6dZ d7dZej2d8dZed9dZed:dZ d;dZdd"Z d?d#Z d@d$Z! dA dBd&Z" dA dBd'Z# dA dBd(Z$dCd)Z%y%)DraA per-class object that serves class- and object-specific results. This is used by :class:`.AssociationProxy` when it is invoked in terms of a specific class or instance of a class, i.e. when it is used as a regular Python descriptor. When referring to the :class:`.AssociationProxy` as a normal Python descriptor, the :class:`.AssociationProxyInstance` is the object that actually serves the information. Under normal circumstances, its presence is transparent:: >>> User.keywords.scalar False In the special case that the :class:`.AssociationProxy` object is being accessed directly, in order to get an explicit handle to the :class:`.AssociationProxyInstance`, use the :meth:`.AssociationProxy.for_class` method:: proxy_state = inspect(User).all_orm_descriptors["keywords"].for_class(User) # view if proxy object is scalar or not >>> proxy_state.scalar False .. versionadded:: 1.3 rr_AssociationProxyProtocol[_T]rr target_classc||_|j|_||_|j|_d|_||_||_yre)rrx owning_classrVrrr)rfrrrrs rXrz!AssociationProxyInstance.__init__esC ::(!'!9!9 $($rZc <|j}|j}tdtj|j |}t |tjs tdd|jj} td|j||}|j|||||S#t$rt||||cYSt$rE} t!j"d|j$d|jd|j$d| | d} ~ wwxYw)Nzorm.RelationshipProperty[_T]zEassociation proxy to a non-relationship intermediary is not supportedrzRAssociation proxy received an unexpected error when trying to retreive attribute ".z" from class "z": )rVrrr# class_mapper get_property isinstanceRelationshipPropertyNotImplementedErrorrr_cls_unwrap_target_assoc_proxy_construct_for_assocAttributeError!AmbiguousAssociationProxyInstance Exceptionr!InvalidRequestErrorr^) clsrrparent_instancerVrpropr target_assocerrs rXrz"AssociationProxyInstance.for_proxy}sD#44&&  *   \ * 7 78I J  $ 8 89%0  {{))  .22<LL&++flL*  5 lJ  )) ))*!F,=,=+>?&//0C5:    sB55DDADDc|t||||St||}t|dst||||S|j}|rt||||St ||||S)N_is_internal_proxy)ObjectAssociationProxyInstancegetattrhasattrr_impl_uses_objectsColumnAssociationProxyInstance)rrrrrrrW is_objects rXrz-AssociationProxyInstance._construct_for_assocs  #1 lJ |Z0t124 lJ ++ 1 lJ 2 lJ rZcrtj|jj|jSre)r#r rr rVrs rX _get_propertyz&AssociationProxyInstance._get_propertys/ 1 12??  " "  rZcVt|j|jjSre)rrrV comparatorrs rX _comparatorz$AssociationProxyInstance._comparators%   t55 * rZctd)NzqThe association proxy can't be used as a plain column expression; it only works inside of a comparison expressionrrs rX__clause_element__z+AssociationProxyInstance.__clause_element__s! J  rZcdt||}t|trJt|tr|Syre)rr rUr)rrrrWs rXrz7AssociationProxyInstance._cls_unwrap_target_assoc_proxys4|Z0d$4555 d4 5KrZcN|j|j|jSre)rrrrs rX_unwrap_target_assoc_proxyz3AssociationProxyInstance._unwrap_target_assoc_proxys&22   t  rZcVtdt|j|jS)zThe 'remote' class attribute referenced by this :class:`.AssociationProxyInstance`. .. seealso:: :attr:`.AssociationProxyInstance.attr` :attr:`.AssociationProxyInstance.local_attr` SQLORMOperations[_T])rrrrrs rX remote_attrz$AssociationProxyInstance.remote_attrs' "GD,=,=t$O  rZcVtdt|j|jS)zThe 'local' class attribute referenced by this :class:`.AssociationProxyInstance`. .. seealso:: :attr:`.AssociationProxyInstance.attr` :attr:`.AssociationProxyInstance.remote_attr` SQLORMOperations[Any])rrrrVrs rX local_attrz#AssociationProxyInstance.local_attrs* # D%%t'='= >  rZc2|j|jfS)aReturn a tuple of ``(local_attr, remote_attr)``. This attribute was originally intended to facilitate using the :meth:`_query.Query.join` method to join across the two relationships at once, however this makes use of a deprecated calling style. To use :meth:`_sql.select.join` or :meth:`_orm.Query.join` with an association proxy, the current method is to make use of the :attr:`.AssociationProxyInstance.local_attr` and :attr:`.AssociationProxyInstance.remote_attr` attributes separately:: stmt = ( select(Parent) .join(Parent.proxied.local_attr) .join(Parent.proxied.remote_attr) ) A future release may seek to provide a more succinct join pattern for association proxy attributes. .. seealso:: :attr:`.AssociationProxyInstance.local_attr` :attr:`.AssociationProxyInstance.remote_attr` )r2r/rs rXrWzAssociationProxyInstance.attr s:!1!122rZc`|jj }|r|j|S)zsReturn ``True`` if this :class:`.AssociationProxyInstance` proxies a scalar relationship on the local side.)r#uselist_initialize_scalar_accessors)rfscalars rXr7zAssociationProxyInstance.scalar,s/ '')111   - - / rZc~|jjj|jj Sre)r#rr rr5rs rX_value_is_scalarz)AssociationProxyInstance._value_is_scalar6s1""$ VLL1 W  rZctrer(rs rX_target_is_objectz*AssociationProxyInstance._target_is_object>s !##rZz_GetterProtocol[_T] _scalar_get_PlainSetterProtocol[_T] _scalar_setc|jjr |jjd|\}}n|jjd\}}|td|c|_|_y)Nr=)rrDrrr<r>)rfrset_s rXr6z5AssociationProxyInstance._initialize_scalar_accessorsEs] ;; % % 224>IC 33D9IC-0$ &3 *$*rZc|jtjdfd }|tur dfd }||fSdfd }||fS)Nc||SdSrerars rXrz8AssociationProxyInstance._default_getset..getterTrrZc t||yrerrs rXrz=AssociationProxyInstance._default_getset..dict_setterYrrZc t||yrerrs rXrz>AssociationProxyInstance._default_getset..plain_setter_rrZ)rgrrjz Optional[_T])rgrrrrsr:rjrt)rrrr:rjrtrrs @@rXrz(AssociationProxyInstance._default_getsetNsR%%d+ G t # /;& & $<' 'rZc.|jjSre)rrGrs rXrGzAssociationProxyInstance.infods{{rZcyrerarfrs rXrzAssociationProxyInstance.geths7:rZcyrerarGs rXrzAssociationProxyInstance.getks#&rZc||S|jr't||j}|j|S t dt||j \}}}t ||k(rt ||k(r|jJ|S|jt||j\|_}t||j t |t ||f|S#t$rYfwxYw)NzTuple[int, int, _T]) r7rrVr<rrxrrr_new_lazy_collectionr)rfrtarget creator_idself_idrs rXrzAssociationProxyInstance.getns ;K ;;S$"8"89F##F+ + !.2)73+A.* GU c7j(RX-@00<<< L+/99 d&<&<=, (D !5 CBsGRXu#= >L"  s$C$$ C0/C0c2|jrtd|jjr|jjn |j}t ||j }|7||jjsyt||j ||y|j|||/|jjrt||j dyyy|j|}|jJ||ur|j||yy)N_PlainCreatorProtocol[_T])r7rrrCrrrVrIrr>rHrr _bulk_replace)rfrrrCrLrs rXrzAssociationProxyInstance.sets ;;+{{**KK''** GS$"8"89F~N KKAAT33WV_E  0>dkk&H&HC!7!7>'I>HHSME((4 44F"##D&1#rZc|j|j|d|jr.t||j}|t ||j t ||jyre)rrr7rrVdelattrrrfrrLs rXrzAssociationProxyInstance.deletes[    $   S$ ' ;;S$"8"89F!0T++,rZc `|jj|jjntd|j}t j |}|t jd||jjr*||jj|||j|fS|jjr |jj||\}}n|jj|\}}|tur|ttt|||||fS|tur|ttt!|||||fS|t"ur|ttt%|||||fSt j&d|j(d|j*d)NrzzDlazy collection factory did not return a valid collection type, got z=could not guess which interface to use for collection_class "z " backing "z6"; specify a proxy_factory and proxy_bulk_set manually)rrCrrr$duck_type_collectionr!rrErrDrlistr:_AssociationListr_AssociationDictr_AssociationSetrrrV)rfrrCrrsetters rXrJzAssociationProxyInstance._news {{"". KK  ($*;*;<   44_5FG  #))..>-?A  ;; $ $  ))#Wdoot  ;; % %![[778H$ONFF![[889IJNFF t # $'&&$  % $'&&$  $ #'&&$ ##(($*@*@B rZc|jjr|jj||y|jturt d|j |y|jt urt d|j|y|jturt d|j|ytjd)Nz_AssociationList[Any]z_AssociationDict[Any, Any]z_AssociationSet[Any]zEno proxy_bulk_set supplied for custom collection_class implementation) rrFrrWrextendrupdaterr!r)rfrrs rX_setzAssociationProxyInstance._sets ;; % % KK & &uf 5  " "d * (% 0 7 7 ?  " "d * -u 5 < ##2 rZc|jjxr|jjxstt|j}|jj r*|jj |j |\}}n(|jj|j \}}||_||_||_ yre) rrCrrzrrDrrrr[)rfrrCrr[s rX_inflatez!AssociationProxyInstance._inflates KK   $ ## 9$d&7&78  ;; % %![[77%%tNFF"[[889N9NONFF   rZNc |jdd}|j}|/|jdd|i|}|jj|S|jr>t |j |j}|jj|fi|}n2|rtjd|r|tjd|}|jj|S)Nis_has criterionzJCan't apply keyword arguments to column-targeted association proxy; use ==zINon-empty has() not allowed for column-targeted association proxy; use ==ra) popr,_criterion_existsr&r;rrrr%r!r)rfrdkwargsrcrinnerrW value_exprs rXrfz*AssociationProxyInstance._criterion_existss Hd+66  #2L22#'-E##55e< <  ! !4,,doo>D:::9OOJ''0I1''@ #J11*==rZc |j9|jr-|jr |jrt j d|j d|dd|S)aProduce a proxied 'any' expression using EXISTS. This expression will be a composed product using the :meth:`.Relationship.Comparator.any` and/or :meth:`.Relationship.Comparator.has` operators of the underlying proxied attributes. z9'any()' not implemented for scalar attributes. Use has().Frdrcrar,r7r;r9r!rrfrfrdrgs rXanyzAssociationProxyInstance.any9sg  * * 2 KK++t/D/D))K &t%%  17  rZc |j9|jr|jr!|jst j d|j d|dd|S)aProduce a proxied 'has' expression using EXISTS. This expression will be a composed product using the :meth:`.Relationship.Comparator.any` and/or :meth:`.Relationship.Comparator.has` operators of the underlying proxied attributes. z3'has()' not implemented for collections. Use any().Trkrarlrms rXhaszAssociationProxyInstance.hasQsg  * * 2 &&t/D/D))E &t%%  06  rZcN|jjd|jdS)N(r) __class__r^rrs rXrz!AssociationProxyInstance.__repr__is>>22DKK@@rZ)rrrrrrrr)rzAssociationProxy[_T]rrrrrjr) r&Optional[AssociationProxyInstance[_T]]rrrrrrrrrjr)rjzMapperProperty[Any])rjzPropComparator[Any]rjr)rrrrrjrt)rjrt)rjr.)rjr1)rjz2Tuple[SQLORMOperations[Any], SQLORMOperations[_T]]rjrrjrtrr)rfrrrrjr)rrrjr:)rrrjz1Union[Optional[_T], AssociationProxyInstance[_T]])rrrr:rjrt)rrrjrt)rz_LazyCollectionProtocol[_T]rjzTuple[Type[Any], _T])rrrrrjrt)rrrjrtre)rd)Optional[_ColumnExpressionArgument[bool]]rgrrjColumnElement[bool]r)&r^r_r`rrr classmethodrrr#propertyr&r)rr$memoized_propertyr,r/r2rWr7r9r;r6rro_non_memoized_propertyrGrrrrrJr_rarfrnrprrarZrXrrDs:*) )) %- %  % %  %,$, , , & ,,\<.      &8   ,/ /  /        33<    $$%$)) ( #( 5(, "" # :: && :>28-@:@ @D0:G "(@D><>>  >F@D <     4@D <     0ArZrceZdZdZdZd dZd fd ZddZddZ d ddZ d ddZ e jdd Z dd Z dd ZxZS)rzcan :class:`.AssociationProxyInstance` where we cannot determine the type of target object. Fc td|jjd|jd|jd|j d )NzAssociation proxy r z refers to an attribute 'z'' that is not directly mapped on class ze; therefore this operation cannot proceed since we don't know what type of object is referred towards)rrr^rVrrrs rX _ambiguousz,AmbiguousAssociationProxyInstance._ambiguousts> !!**&&!!   rZc*||St||Sre)superr)rfrrss rXrz%AmbiguousAssociationProxyInstance.gets ;K7;s# #rZc$|jyrerrGs rX__eq__z(AmbiguousAssociationProxyInstance.__eq__  rZc$|jyrerrGs rX__ne__z(AmbiguousAssociationProxyInstance.__ne__rrZc $|jyrerrms rXrnz%AmbiguousAssociationProxyInstance.any rZc $|jyrerrms rXrpz%AmbiguousAssociationProxyInstance.hasrrZciSrerars rX _lookup_cachez/AmbiguousAssociationProxyInstance._lookup_caches  rZc6|lt||j}|T t|}|j}|j}||j vr|j || |j |S|S#t$rY|SwxYw#tj$rY|SwxYwre) rrVr"rrr_populate_cacherr!r)rfr actual_objrrinstance_classs rXrz?AmbiguousAssociationProxyInstance._non_canonical_get_for_objects  & $2H2HIJ% ":.D"[[F%+]]N%T-?-??,,^VD#11.AA  $ 00 s# B A11 A>=A>BBctj|jj|j}|j |j rj|} |j||j}|jtd||j|j||j|j|<yy#t$rYywxYw)Nr)r#r rr rVisarrrrrrrr)rfrrrrrs rXrz1AmbiguousAssociationProxyInstance._populate_caches 1 12??  " "  ::dkk ")L #BB $//  6:5N5N7FKK%% OO 6"">2 # "  sB?? C  C ru)rrrjr)rrrjrre)rdrxrgrrjr)rjz-Dict[Type[Any], AssociationProxyInstance[_T]])rrrjr)rrrz Mapper[Any]rjrt)r^r_r`rrrrrrrnrpr$r|rrr __classcell__)rss@rXrrmsM  $  @D<  @D<    " %2!+6 rZrc<eZdZUdZdZded<dZd dZd dZd dZ y) rzEan :class:`.AssociationProxyInstance` that has an object as a target.Trr;c 6|j}|?|jj|js|j |S||k(S|j r`|jrT|j sH|jjt|j|jj |S|j r-|jr!|j rtjd|jjdi|j|iS)aIProduce a proxied 'contains' expression using EXISTS. This expression will be a composed product using the :meth:`.Relationship.Comparator.any`, :meth:`.Relationship.Comparator.has`, and/or :meth:`.Relationship.Comparator.contains` operators of the underlying proxied attributes. z'=>  D(  (4##''A4??C*@A ArZcz|jjt|j|j|k7Sre)r&rprrrrGs rXrz%ObjectAssociationProxyInstance.__ne__s6## D%%t 73 >  rZN)rrrrrjry)rrrjry) r^r_r`rr;rrrrrrarZrXrrs&O"t"M D B rZrcDeZdZUdZdZded<dZd dZ d dZy) r zVan :class:`.AssociationProxyInstance` that has a database column as a target. Frr;Tc|j|jjtj|}|t ||j dk(S|Sre)rfr/operater-eqr.r&)rfrexprs rXrz%ColumnAssociationProxyInstance.__eq__sP%%    $ $Y\\5 9  =tT--56 6KrZc`|j|jj|g|i|Sre)rfr/r)rfoprrgs rXrz&ColumnAssociationProxyInstance.operate"s7%% $D   $ $R :% :6 :  rZN)rrrjry)rzoperators.OperatorTyperrrgrrjzColumnElement[Any]) r^r_r`rr;rrrrrarZrXr r sC$t#M ( 25 AD  rZr c0eZdZddZ ddZddZd dZy) rKc ||_||_yrerrLrTs rXrz_lazy_collection.__init__+s  rZcBt|j|jSre)rrrLrs rXrhz_lazy_collection.__call__/st{{DKK00rZc4|j|jdS)N)rrLrrs rX __getstate__z_lazy_collection.__getstate__4s{{dkk::rZc,|d|_|d|_y)NrrLrrfstates rX __setstate__z_lazy_collection.__setstate__7sEl Ho rZN)rrrLrrrjrrrrjrt)r^r_r`rrhrrrarZrXrKrK*s1 L1 ;&rZrK_ITrceZdZUded< ded< ded<ded< d ed < dd Zej rd ed <n edZddZ ddZ ddZ ddZ ddZ y)_AssociationCollection_GetterProtocol[_IT]rrzrCAssociationProxyInstance[_IT]rrmr[_LazyCollectionProtocol[_IT]rcJ||_||_||_||_||_y)zConstructs an _AssociationCollection. This will always be a subclass of either _AssociationList, _AssociationSet, or _AssociationDict. N)rrCrr[r)rfrrCrr[rs rXrz_AssociationCollection.__init__]s( /    rZzCollection[_IT]colc"|jSre)rrs rXz_AssociationCollection.tsD$8$8$:rZc,t|jSrelenrrs rX__len__z_AssociationCollection.__len__v488}rZc,t|jSre)rrrs rX__bool__z_AssociationCollection.__bool__ysDHH~rZc4|j|jdS)Nrrrrs rXrz#_AssociationCollection.__getstate__|s++$:N:NOOrZcb|d|_|d|_|jj|y)Nrr)rrrars rXrz#_AssociationCollection.__setstate__s-Ho $%67 T"rZctrer(rs rXclearz_AssociationCollection.clears !##rZN) rrrCrzrrr[rmrrrjintrvrrrw)r^r_r`rrtyping TYPE_CHECKINGr{rrrrrrrarZrXrrFs  F  *) 21F5"%    . ( :;P# $rZrcFeZdZUded<ded<d dZd dZ d dZy) _AssociationSingleItemr=r[rPrCc$|j|SrerCr~s rX_createz_AssociationSingleItem._creates||E""rZc$|j|Srerrfobject_s rX_getz_AssociationSingleItem._get{{7##rZcH|j|j||yre)rr_)rf assoc_proxyrs rXrQz$_AssociationSingleItem._bulk_replaces v&rZN)rsr:rjr)rrrjr:)rrrz Iterable[_IT]rjrt)r^r_r`rrrrQrarZrXrrs5 $$ &&#$'8'BO' 'rZrceZdZUdZded<d+dZed,dZed-dZ d.dZed/dZed0d Z d1d Zed2d Z ed3d Z d4d Z d5dZ d6dZ d7dZ d8dZ d9dZd/dZd:d,dZd7dZd;dZd;dZddZd>dZd>dZd>dZd?dZd?d Zd@d!Zd@d"ZdAd#ZdBd$Z e!jDr dC dDd%Z#nd8d&Z#dEd'Z$dFd(Z%d;d)Z&e!jDsne'e(jSD]M\Z*Z+e,e+se+je*k(se+jr,e-e'e*s6e.e'e*je+_O[*[+y*y*)GrXz(Generic, converting, list-to-list proxy.MutableSequence[_T]rc(|j||yrer[)rfrrss rXr_z_AssociationList._sets GU#rZcyrerarfindexs rX __getitem__z_AssociationList.__getitem__-0rZcyrerars rXrz_AssociationList.__getitem__s@CrZct|ts|j|j|S|j|Dcgc]}|j|c}Scc}wre)r slicerr)rfrmembers rXrz_AssociationList.__getitem__sJ%'99TXXe_- -48HHUOD&DIIf%D DDsAcyrerarfrrss rX __setitem__z_AssociationList.__setitem__s:=rZcyrerars rXrz_AssociationList.__setitem__sFIrZct|ts*|j|j|t d|y|j t |}n4|j dkrt ||j z}n |j }|jxsd}|jxsd}tt|jxsd||}t|}|dk(r+|D]}||=|}|D]} |j|| |dz }yt |t |k7r#tdt |dt |t||D]$\}} |j|j|| &y)Nr:rz#attempt to assign sequence of size z to extended slice of size )r rr_rrstoprstepstartrWrangeinsert ValueErrorzip) rfrrsrrrrng sized_valueiitems rXrz_AssociationList.__setitem__sR%' IIdhhuotD%'8 9zz!4ya4y5::-zz::?DKK$1EuU[[-AtT:;Cu+Kqy$AU $'DKK4(FA{#s3x/${+SX7 #31GAtIIdhhqk401rZcyrerars rX __delitem__z_AssociationList.__delitem__s/2rZcyrerars rXrz_AssociationList.__delitem__s14rZc|j|=yrerrs rXrz_AssociationList.__delitem__s HHUOrZcR|jD]}|j||k(syyNTFrr)rfrsrs rX __contains__z_AssociationList.__contains__s.hh Fyy E) rZc#TK|jD]}|j|yw)zIterate over proxied values. For the actual domain objects, iterate over .col instead or just use the underlying collection directly from its property on the parent. Nrrfrs rX__iter__z_AssociationList.__iter__s-hh $F))F# # $&(c`|j}|j|}|j|yre)rrappend)rfrsrrs rXrz_AssociationList.appends%hh||E" 4rZc.d}|D] }||k(s |dz }|SNrrra)rfrscountrs rXrz_AssociationList.counts- AEz   rZc4|D]}|j|yre)r)rfrrs rXr]z_AssociationList.extends A KKN rZcB|j|g|j||yre)rrrs rXrz_AssociationList.inserts!%e!4 5urZcV|j|jj|Sre)rrrers rXrez_AssociationList.pops{{488<<.//rZcft|D]\}}||k(s |j|=ytd)Nzvalue not in list) enumeraterr)rfrsrvals rXremovez_AssociationList.remove s<o FAse|HHQK ,--rZct)z#Not supported, use reversed(mylist)r(rs rXreversez_AssociationList.reverse "##rZct)z!Not supported, use sorted(mylist)r(rs rXsortz_AssociationList.sortrrZcH|jdt|j=y)Nr)rrrs rXrz_AssociationList.clears HHQTXX& 'rZct||k(SrerWrfrs rXrz_AssociationList.__eq__DzU""rZct||k7Srerrs rXrz_AssociationList.__ne__"rrZct||kSrerrs rX__lt__z_AssociationList.__lt__%DzE!!rZct||kSrerrs rX__le__z_AssociationList.__le__(rrZct||kDSrerrs rX__gt__z_AssociationList.__gt__+rrZct||k\Srerrs rX__ge__z_AssociationList.__ge__.rrZc` t|}t||zS#t$r tcYSwxYwrerW TypeErrorNotImplementedrs rX__add__z_AssociationList.__add__1s8 "KEDzE!! "! ! " --c` t|}|t|zS#t$r tcYSwxYwrer#rs rX__radd__z_AssociationList.__radd__8s8 "KEtDz!! "! ! "r'cJt|tstSt||zSrer rr%rWrfns rX__mul__z_AssociationList.__mul__?s !S!! !DzA~rZcJt|tstS|t|zSrer+r,s rX__rmul__z_AssociationList.__rmul__Ds !S!! !4:~rZc(|j||Sre)r])rfiterables rX__iadd__z_AssociationList.__iadd__Is H rZct|ts t|dk(r|j|S|dkDr |j t ||dz z|Sr)r rrrr]rWr,s rX__imul__z_AssociationList.__imul__MsU !S!%' ' 6 JJL U KKT a!e, - rZcyrera)rfrsrrs rXrz_AssociationList.index\srZc>t|}|j|g|Sre)rWr)rfrsarglss rXrz_AssociationList.indexbs!dB288E(C( (rZct|Srerrs rXcopyz_AssociationList.copyfs DzrZc*tt|Sre)rKrWrs rXrz_AssociationList.__repr__iDJrZcDtdt|jzNz%s objects are unhashabler$rr^rs rX__hash__z_AssociationList.__hash__l3d4j6I6IIJJrZN)rrrsr:rjrt)rrrjr:)rrrjr)rUnion[int, slice]rjzUnion[_T, MutableSequence[_T]])rrrsr:rjrt)rrrs Iterable[_T]rjrt)rrCrszUnion[_T, Iterable[_T]]rjrt)rrrjrt)rrrjrt)rzUnion[slice, int]rjrt)rsrrjrrjz Iterator[_T])rsr:rjrt)rsrrjr)rrDrjrt)rurwrrrjr)rList[_T]rjr)rrHrjrH)r-r3rjrH)r2rDrjr2)r-r3rjr2)..)rsrrrrrrjr)rjrHr)/r^r_r`rrr_rrrrrrrrr]rrer rrrrrrrrr!r&r)r.r0r3r5rrrr;rrArWlocalsitems func_namefunccallablerrrarZrXrXrXs2 $00 CCE&E 'E== II"1&"1/F"1 "1H22 44  60.$ $ (##"#"#""   =@  %( 69     ) K   #FHNN$45 @OItMMY. D),&tY7??  @ t rZrXceZdZUdZded<ded<ded<d'dZd(d Zd)d Zd*d Zd+d Z d,d Z d-dZ d.dZ d/dZ d0dZd0dZd1dZed2dZed3dZ d4 d5dZd4d6dZd7dZd8dZd9dZed:dZe d; d3dZdd Ze d?d!Zed@d"ZdAd#Z dBd$ZdCd%ZdDd&Zej<snee j+D]M\Z!Z"e#e"se"je!k(se"jr,e$e%e!s6e&e%e!je"_O[!["yy)ErYz(Generic, converting, dict-to-dict proxy.z_DictSetterProtocol[_VT]r[z_KeyCreatorProtocol[_VT]rCz"MutableMapping[_KT, Optional[_VT]]rc&|j||Srerrs rXrz_AssociationDict._creates||C''rZc$|j|Srerrs rXrz_AssociationDict._getrrZc(|j|||Srer)rfrrxrss rXr_z_AssociationDict._sets{{7C//rZc>|j|j|Sre)rrrfrxs rXrz_AssociationDict.__getitem__syy#''rZc||jvr!|j|j|||y|j|||j|<yre)rr_rrs rXrz_AssociationDict.__setitem__s= $((? IIdhhsmS% 0 LLe4DHHSMrZc|j|=yrerrSs rXrz_AssociationDict.__delitem__s HHSMrZc||jvSrerrSs rXrz_AssociationDict.__contains__sdhhrZcHt|jjSre)iterrkeysrs rXrz_AssociationDict.__iter__sDHHMMO$$rZc8|jjyrerrrs rXrz_AssociationDict.clear rZct||k(Srerrs rXrz_AssociationDict.__eq__rrZct||k7Srer^rs rXrz_AssociationDict.__ne__rrZc*tt|Sre)rKrrs rXrz_AssociationDict.__repr__r=rZcyrerarf_AssociationDict__keys rXrz_AssociationDict.gets03rZcyrerarfrcrLs rXrz_AssociationDict.getsJMrZNc0 ||S#t$r|cYSwxYwre)rrfrxrLs rXrz_AssociationDict.gets% 9  N s  cj||jvr!|j|||j|<|S||Sre)rrrgs rX setdefaultz_AssociationDict.setdefaults7 dhh  LLg6DHHSMN9 rZc6|jjSre)rrYrs rXrYz_AssociationDict.keyssxx}}rZct|Srer rs rXrJz_AssociationDict.itemss rZct|Srerrs rXrz_AssociationDict.valuess $rZcyrerarbs rXrez_AssociationDict.pops&)rZcyrerares rXrez_AssociationDict.popsrZcd|jj|g|i|}|j|Sre)rrer)rfrcr8rrs rXrez_AssociationDict.pops/e0c0R0yy  rZch|jj}|d|j|dfSr)rpopitemr)rfrs rXrqz_AssociationDict.popitems0xx!Q47+,,rZc yrerarf_AssociationDict__mrgs rXr^z_AssociationDict.updaterrZc yrerarss rXr^z_AssociationDict.updaterrZc yrera)rfrgs rXr^z_AssociationDict.updaterrZcfi}|j|i||jD] \}}|||< yre)r^rJ)rfaruprxrss rXr^z_AssociationDict.updates< 1((* JCDI rZct|}|j|xsd}t|xsdj|}|j|}|jxsdD]\}}||vr|||<||vs|||<|D]}||=yr)r intersection differencerJ) rfrrexisting constants additionsremovalsrxrs rXrQz_AssociationDict._bulk_replaces t9))&,B7  "%00; &&y1!<<>/R #KCi"S  !"S  #  CS  rZc4t|jSre)rrJrs rXr;z_AssociationDict.copysDJJL!!rZcDtdt|jzr?r@rs rXrAz_AssociationDict.__hash__rBrZ)rxrArs Optional[_VT]rjr)rrrjrB)rrrxrArsrBrjrt)rxrArjrB)rxrArsrBrjrt)rxrArjrt)rxrrjr)rjz Iterator[_KT]rwrGr)rcrArjr)rcrArLUnion[_VT, _T]rjrre)rxrArLzOptional[Union[_VT, _T]]rjzUnion[_VT, _T, None])rxrArLrrjrB)rjz KeysView[_KT])rjzItemsView[_KT, _VT])rjzValuesView[_VT])rcrArjrB).)rcrAr8rrrrjr)rjzTuple[_KT, _VT])rtz SupportsKeysAndGetItem[_KT, _VT]rgrBrjrt)rtzIterable[tuple[_KT, _VT]]rgrBrjrt)rgrBrjrt)rxrrrrjrt)rrrzMapping[_KT, _VT]rjrt)rjzDict[_KT, _VT]ru)'r^r_r`rrrrr_rrrrrrrrrrrrirYrJrrerqr^rQr;rArrrWrIrKrLrMrrrrarZrXrYrY{s2 $$ %% ++($0(5 %## 33 MM=A!9   )) 47#1 !-3?B ,8; 002"  &"K   #FHNN$45 @OItMMY. D),&tY7??  @ t rZrYcHeZdZUdZded<d+dZd,dZd-dZd.dZd/dZ d/d Z d/d Z d0d Z d1d Z d2d Z d3dZd4dZd5dZd6dZd7dZd8dZd9dZd:dZd7dZd8dZd9dZd:dZd;dZddZd>dZ d?d Z!d@d!Z"dAd"Z#dAd#Z$dBd$Z%dBd%Z&dBd&Z'dBd'Z(dCd(Z)dDd)Z*e+jXsne-e.j_D]M\Z0Z1e2e1se1je0k(se1jr,e3e4e0s6e5e4e0je1_O[0[1y*y*)ErZz&Generic, converting, set-to-set proxy.MutableSet[_T]rc,t|jSrerrs rXrz_AssociationSet.__len__rrZc|jryyrrrs rXrz_AssociationSet.__bool__s 88rZcR|jD]}|j||k(syyrr)rf_AssociationSet__ors rXrz_AssociationSet.__contains__#s.hh Fyy C' rZc#TK|jD]}|j|yw)zIterate over proxied values. For the actual domain objects, iterate over .col instead or just use the underlying collection directly from its property on the parent. Nrrs rXrz_AssociationSet.__iter__)s-hh $F))F# # $rcb||vr+|jj|j|yyre)raddr)rf_AssociationSet__elements rXrz_AssociationSet.add4s( D HHLLi0 1 !rZc|jD]3}|j||k(s|jj|yyre)rrdiscardrfrrs rXrz_AssociationSet.discard:s;hh Fyy I-  ( rZc|jD]3}|j||k(s|jj|yt|re)rrrrrs rXr z_AssociationSet.remove@sHhh Fyy I-  ( y!!rZc|js td|jj}|j|S)Nzpop from an empty set)rrrerrs rXrez_AssociationSet.popGs3xx23 3yy  rZcB|D]}|D]}|j|yre)r)rfsr2rss rXr^z_AssociationSet.updateMs+ H!   rZc:t|}|j|xsd}t|xsdj|}|j|}|j}|j}|xsdD]} | |vr || | |vs|| |D] } ||  yr)rr{r|rr ) rfrrr}r~rrappenderremoverrs rXrQz_AssociationSet._bulk_replaceRst9))&,B7  "%00; &&y188++l !F" 9$  !  F FO rZcvtj||s t|D]}|j||Sre)r%_set_binops_check_strictrr)rfrrss rX__ior__z_AssociationSet.__ior__ds<33D%@%' ' E HHUO  rZc*tt|Sre)rrXrs rXr_z_AssociationSet._setms4:rZc2t|j|Sre)runionrfrs rXrz_AssociationSet.unionpss4y""rZc$|j|Sre)rrf_AssociationSet__ss rX__or__z_AssociationSet.__or__sszz#rZc2t|j|Sre)rr|rs rXr|z_AssociationSet.differencevs#s4y##Q''rZc$|j|Sre)r|rs rX__sub__z_AssociationSet.__sub__ysq!!rZcB|D]}|D]}|j|yre)r)rfrrrss rXdifference_updatez!_AssociationSet.difference_update|s, $E $ U# $ $rZcvtj||s t|D]}|j||Sre)r%rrr)rfrrss rX__isub__z_AssociationSet.__isub__s;33D!<%' ' E LL   rZc2t|j|Sre)rr{rs rXr{z_AssociationSet.intersections%s4y%%q))rZc$|j|Sre)r{rs rX__and__z_AssociationSet.__and__s  ##rZc|D]X}|j|t|}}||z ||z }}|D]}|j||D]}|j|Zyre)r{rr r)rfrrwanthaver rrss rXintersection_updatez#_AssociationSet.intersection_updateso E**513t9$D+td{CF # E" #   rZctj||s t|j|}t |}||z ||z }}|D]}|j ||D]}|j ||Sre)r%rrr{rr r)rfrrrr rrss rX__iand__z_AssociationSet.__iand__s33D!<%' '  #D Tk4$; E KK   E HHUO  rZc6t|j|Sre)rsymmetric_differencers rXrz$_AssociationSet.symmetric_differences4y--c22rZc$|j|Sre)rrs rX__xor__z_AssociationSet.__xor__s((++rZc|j|t|}}||z ||z }}|D]}|j||D]}|j|yre)rrr r)rfrrrr rrss rXsymmetric_difference_updatez+_AssociationSet.symmetric_difference_updates`..u5s4ydTk4$; E KK   E HHUO rZchtj||s t|j||Sre)r%rrrrs rX__ixor__z_AssociationSet.__ixor__s.33D%@%' ' ((/ rZc6t|j|Sre)rissubsetrs rXrz_AssociationSet.issubsets4y!!#&&rZc6t|j|Sre)r issupersetrs rXrz_AssociationSet.issupersets4y##C((rZc8|jjyrer[rs rXrz_AssociationSet.clearr\rZct|Srerrs rXr;z_AssociationSet.copys 4yrZct||k(Srerrs rXrz_AssociationSet.__eq__4yE!!rZct||k7Srerrs rXrz_AssociationSet.__ne__rrZct||kSrerrs rXrz_AssociationSet.__lt__4y5  rZct||kSrerrs rXrz_AssociationSet.__le__rrZct||kDSrerrs rXrz_AssociationSet.__gt__rrZct||k\Srerrs rXr!z_AssociationSet.__ge__rrZc*tt|Sre)rKrrs rXrz_AssociationSet.__repr__sCIrZcDtdt|jzr?r@rs rXrAz_AssociationSet.__hash__rBrZNrrv)rrrjrrE)rr:rjrt)rjr:)rrDrjrt)rrrrDrjrt)rAbstractSet[_S]rjMutableSet[Union[_T, _S]])rjzSet[_T])rz Iterable[_S]rjr)rrrjr)rrrjr)rAbstractSet[Any]rjr)rrrjrt)rrrjr2)rrDrjr)rrrjr)rrrjrt)rrrjrrw)rjzAbstractSet[_T]rG)rrrjrrru)6r^r_r`rrrrrrrrr rer^rQrr_rrr|rrrr{rrrrrrrrrrr;rrrrrr!rrArrrWrIrJrKrLrMrrrrarZrXrZrZsJ0   2  "!  $$ "#("$ *$   3,')""!"!"K   #FHNN$45 ?OItMMY. C+&sI6>>  ? t rZrZ)$rVrrWrrCrrDrrErrFrrGrrHrrIrrJUnion[_NoArg, bool]rKrrLrrMzUnion[_NoArg, Callable[[], _T]]rNrrOrrPzUnion[_NoArg, bool, None]rQz&Union[_NoArg, Mapping[Any, Any], None]rjzAssociationProxy[Any])dr __future__rrrrrrrrr r r r rrrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(orm.baser)orm.interfacesr*r+r,sqlr-r.sql.baser/ util.typingr0r1r2r3r4rr5r6 orm.mapperr7 sql._typingr8r9r:r<r>r@rArBNO_ARGrYr\rcrmrqrvrzr|rrrrrrInspectionAttrInforUrrrrr rKrrrrXrYrZrarZrXrs # !"-'.07!"'0 //#7' Tsd3 D 9 T e3 e3+/7;596: $#(&+ & & #]]7=}}#)==#)==&,mmAG%tt t( t 5 t 3 t4t t!t $t t tt5t!t !!t" $#t$?%t&'tn$?4huo4 %h$B?HV,<BL/8F+;L &x%2,hv.>2F*HV,<F hrl ;X;HH ; ;4O !!"b! O j >?fA/3fARe(@(DeP8 %=b%A8 v %=b%A 4&.r2&$e5!?$WS\?$D'3B7'"_-b1?23F_DW-c2N384LWtV,R0*R.VrZ