
    Bh                    t   % S r SSKJr  SSKJr  SSKrSSKrSSKrSSKrSSKJ	r	  SSKJ
r
  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKrSSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSK J!r!  SSK J"r"  SSK J#r#  SSK J$r$  SSK J%r%  SSKJ&r&  SSKJ'r'  S S!KJ(r(  S S"KJ)r*  S S#KJ+r+  S S$KJ,r,  S SKJr  S S%K,J-r-  S S&K,J.r.  S S'K/J0r0  S S(K1J2r2  S S)K1J3r3  S S*K1J4r4  \R$                  (       a  SS+K5J6r6  SS,K5J7r7  SS-KJ8r8  SS.KJ9r9  SS/KJ:r:  SS0K;J<r<  SS1K=J>r>  SS2K?J@r@  SS3KAJBrB  SS4KAJCrC  SS5KDJErE  S S6KFJGrG  S S7KHJIrI  S S8KJJKrK  S S9KJJLrL  S S:K/JMrM  S S;K/JNrN  S S<KOJPrP  S S=KQJRrR  S S>KSJTrT  S S?K1JUrU  S S@K1JVrV  S SAK1JWrW  S SBK1JXrX  \" SC\	SD9rY\" SE\	SD9rZ " SF SG\$\Y   5      r[\\\SHSISJSK4   r]\" SL\	SD9r^\R                  " 5       r`SM\aSN'    " SO SP\#\^   \"\[\^   5      rb " SQ SR\b\Y   \\Y   5      rc " SS ST\[\Y   5      rd " SU SV\[\Y   5      re " SW SX\e\Y   \\Y   5      rfg)YzDescriptor properties are more "auxiliary" properties
that exist as configurational elements, but don't participate
as actively in the load/persist ORM loop.

    )annotations)is_dataclassN)Any)Callable)Dict)List)NoReturn)Optional)Sequence)Tuple)Type)TYPE_CHECKING)TypeVar)Union   )
attributes)util)_DeclarativeMapped)LoaderCallableStatus)Mapped)PassiveFlag)SQLORMOperations)_AttributeOptions)_IntrospectsAnnotations)_MapsColumns)MapperProperty)PropComparator)	_none_set)de_stringify_annotation   )event)exc)schema)sql
expression)	operators)BindParameter)get_args)
is_fwd_ref)	is_pep593)_InstanceDict)_RegistryType)History)InstrumentedAttribute)QueryableAttribute)ORMCompileState)_ClassScanMapperConfig)Mapper)ColumnProperty)MappedColumn)InstanceState)
Connection)Row)_DMLColumnArgument)	_InfoType)
ClauseList)ColumnElement)OperatorType)Column)Select)_AnnotationScanType)CallableReference)DescriptorReference)RODescriptorReference_T)bound_PTc                      \ rS rSr% SrSrS\S'   SrSrS\S'   SS	 jr	\
R                  4       SS
 jjrSS jrSrg)DescriptorProperty[   zK:class:`.MapperProperty` which proxies access to a
user-defined descriptor.NOptional[str]docFzDescriptorReference[Any]
descriptorc                    [        S5      e)Nz?This MapperProperty does not implement column loader strategiesNotImplementedErrorselfs    b/home/kali/devsecops-assessor/venv/lib/python3.13/site-packages/sqlalchemy/orm/descriptor_props.py_column_strategy_attrs)DescriptorProperty._column_strategy_attrsf   s    !M
 	
    c                    [        5       eNrN   )rQ   statedict_passives       rR   get_historyDescriptorProperty.get_historyk   s     "##rU   c           	       ^ ^^ T m " U4S jS[         R                  5      nT R                  cI  [        TR                  T R
                  S 5      nTR                  T R
                  U5      (       a  UT l        T R                  c'  S	U 4S jjnS
U 4S jjnSU 4S jjn[        XdUS9T l        [         R                  " T R                  5      " T R                  R                  T R
                  T R                  UU 4S jT R                  T S9nU" T R
                  5      Ul        TR                  R                  T R
                  U5        g )Nc                  ~   > \ rS rSrSrSrSr\S	U 4S jj5       rS
S jr	\
R                  4       SU 4S jjjrSrg)7DescriptorProperty.instrument_class.<locals>._ProxyImplv   FTc                   > TR                   $ rW   )uses_objectsrQ   props    rR   rb   DDescriptorProperty.instrument_class.<locals>._ProxyImpl.uses_objects{   s    (((rU   c                    Xl         g rW   key)rQ   rh   s     rR   __init__@DescriptorProperty.instrument_class.<locals>._ProxyImpl.__init__   s    rU   c                (   > TR                  XU5      $ rW   )r[   )rQ   rX   rY   rZ   rd   s       rR   r[   CDescriptorProperty.instrument_class.<locals>._ProxyImpl.get_history   s     ''g>>rU   rg   Nreturnbool)rh   strrX   InstanceState[Any]rY   r,   rZ   r   rn   r.   )__name__
__module____qualname____firstlineno__accepts_scalar_loaderload_on_unexpire
collectionpropertyrb   ri   r   PASSIVE_OFFr[   __static_attributes__)rd   s   rR   
_ProxyImplr_   v   sf    $)!#J) ) (3'>'>	?)? %? %	?
 ? ?rU   r}   c                4   > [        U TR                  U5        g rW   )setattrname)objvaluerQ   s     rR   fset1DescriptorProperty.instrument_class.<locals>.fset   s    TYY.rU   c                2   > [        U TR                  5        g rW   )delattrr   r   rQ   s    rR   fdel1DescriptorProperty.instrument_class.<locals>.fdel   s    TYY'rU   c                0   > [        U TR                  5      $ rW   )getattrr   r   s    rR   fget1DescriptorProperty.instrument_class.<locals>.fget   s    sDII..rU   )r   r   r   c                 &   > TR                  T 5      $ rW   )_comparator_factory)mapperrQ   s   rR   <lambda>5DescriptorProperty.instrument_class.<locals>.<lambda>   s    D,,V4rU   )rK   original_property)r   r   r   r   rn   None)r   r   rn   r   )r   r   rn   r   )r   AttributeImplrL   r   class_rh   _is_userland_descriptorrz   create_proxied_attributeparentrK   implclass_managerinstrument_attribute)	rQ   r   r}   descr   r   r   
proxy_attrrd   s	   ``      @rR   instrument_class#DescriptorProperty.instrument_classs   s    	?11 	?( ??"6==$((D9D--dhh=="&??"/(/ 'D$GDO88IKKHHOO4"

 %TXX.
11$((JGrU   rL   rn   z!Sequence[QueryableAttribute[Any]]rq   r   Mapper[Any]rn   r   )rs   rt   ru   rv   __doc__rK   __annotations__rb   _links_to_entityrS   r   r{   r[   r   r|    rU   rR   rH   rH   [   se      CL((
  +66	$!$ $ 	$
 
$2HrU   rH   z
Column[_T]zMappedColumn[_T]zInstrumentedAttribute[_T]z
Mapped[_T]_CCzFweakref.WeakKeyDictionary[Type[Any], Callable[[Any], Tuple[Any, ...]]]_composite_gettersc                    ^  \ rS rSr% SrS\S'   S\S'   S\S'   S	\S
'    S+SSSSSSS.                 S,U 4S jjjjrS-U 4S jjrS.S jrS/S jr	\
" 5       rS/S jr\R                  " S5                          S0S j5       rS/S jr\R                  " S5      \R                  " S5                  S1S j5       5       r\R$                  S2S j5       r\R$                  \R                  " S5      S3S j5       5       rS2S jr\R,                  \R                  " S5      S4S j5       5       r\S5S j5       r\S6S j5       r\R                  " S5      S/S j5       rS/S  jr\R$                  S7S! j5       r  S8S" jr\R@                  4       S9S# jjr!    S:S$ jr" " S% S&\#RH                  \%   5      r& " S' S(\'\(   5      r)S;S) jr*S*r+U =r,$ )<CompositeProperty   zDefines a "composite" mapped attribute, representing a collection
of columns as one attribute.

:class:`.CompositeProperty` is constructed using the :func:`.composite`
function.

.. seealso::

    :ref:`mapper_composite`

z$Union[Type[_CC], Callable[..., _CC]]composite_classz#Tuple[_CompositeAttrType[Any], ...]attrsz=CallableReference[Optional[Callable[[_CC], Tuple[Any, ...]]]]_generated_composite_accessorzType[Comparator[_CC]]comparator_factoryNF)attribute_optionsactive_historydeferredgroupr   infoc                 > [         T
U ]  US9  [        U[        [        [
        R                  45      (       a  U4U-   U l        S U l        OXl        Xl        X0l	        X@l
        XPl        Ub  UOU R                  R                  U l        S U l        Ub  U R                   R#                  U5        [$        R&                  " U 5        U R)                  5         U R+                  5         g N)r   )superri   
isinstancer   rp   r$   r<   r   r   r   r   r   	__class__
Comparatorr   r   r   updater   set_creation_order_create_descriptor_init_accessor)rQ   _class_or_attrr   r   r   r   r   r   r   kwargsr   s             rR   ri   CompositeProperty.__init__   s     	+<=nvsC4E4E&FGG(*U2DJ#'D #1 J, 
 "- ** 	
 .2*IIT"%!rU   c                D   > [         TU ]  U5        U R                  5         g rW   )r   r   _setup_event_handlers)rQ   r   r   s     rR   r   "CompositeProperty.instrument_class   s     (""$rU   c                    U R                   (       a  U R                  U5      $  UR                  nU" 5       $ ! [         a4  n[        R                  " SU R
                  R                   S35      UeS nAff = f)NzComposite class zX is not a dataclass and does not define a __composite_values__() method; can't get state)r   __composite_values__AttributeErrorsa_excInvalidRequestErrorr   rs   )rQ   r   accessoraes       rR   _composite_values_from_instance1CompositeProperty._composite_values_from_instance   s    --55e<<	" 55  z! " 00&t';';'D'D&E F/ / 	s   7 
A5/A00A5c                $    U R                  5         g)zgInitialization which occurs after the :class:`.Composite`
has been associated with its parent mapper.

N)_setup_arguments_on_columnsrP   s    rR   do_initCompositeProperty.do_init  s    
 	((*rU   c                ^   ^ ^ SU 4S jjmSUU 4S jjnSUU 4S jjn[        TX5      T l        g)zdCreate the Python descriptor that will serve as
the access point on instances of the mapped class.

c                (  > [         R                  " U 5      n[         R                  " U 5      nTR                  U;  a  TR                   Vs/ s H  n[        X5      PM     nnTR                  U;  a  UR                  c  [        R                  " U5      (       dX  TR                  " U6 UTR                  '   UR                  R                  R                  UTR                  TR                  /5        UR                  TR                  S 5      $ s  snf rW   )r   instance_dictinstance_staterh   _attribute_keysr   r   
issupersetr   managerdispatchrefresh_COMPOSITE_FGETget)instancerY   rX   rh   valuesrQ   s        rR   r   2CompositeProperty._create_descriptor.<locals>.fget  s    ,,X6E--h7Exxu$
 7;6J6J6JsGH*6J   885(II)1E1Ef1M1M&*&:&:F&CE$((OMM**22t33dhhZ 99TXXt,,#s   Dc                b  > [         R                  " U 5      n[         R                  " U 5      nUR                  T	R                     nUR
                  R                  (       a	  T" U 5      nO*UR                  T	R                  [        R                  5      nUR
                  R                   H  nU" X1XTR                  5      nM     XT	R                  '   Uc   T	R                   H  n[        XS 5        M     g [        T	R                  T	R                  U5      5       H  u  pq[        XU5        M     g rW   )r   r   r   r   rh   r   _active_historyr   r   NO_VALUEsetr   r   r   zipr   )
r   r   rY   rX   attrpreviousfnrh   r   rQ   s
           rR   r   2CompositeProperty._create_descriptor.<locals>.fset6  s    ,,X6E--h7E==*D}},,> 99TXX/C/L/LMmm''599= (#$((O}//CH40 0 #&((88?#JC H51	#rU   c                   > [         R                  " U 5      n[         R                  " U 5      nUR                  TR                     nUR
                  R                  (       a%  T" U 5      nUR                  TR                  S 5        O*UR                  TR                  [        R                  5      nUR                  TR                     nUR
                  R                  XUR                  5        TR                   H  n[        XS 5        M     g rW   )r   r   r   r   rh   r   r   popr   r   remover   r   r   )r   rX   rY   r   r   rh   r   rQ   s         rR   r   2CompositeProperty._create_descriptor.<locals>.fdelM  s    --h7E,,X6E==*D}},,>		$((D) 99TXX/C/L/LM==*DMM  $))<++t, ,rU   N)r   r   rn   r   )r   r   r   r   rn   r   )r   r   rn   r   )rz   rL   )rQ   r   r   r   s   `  @rR   r   $CompositeProperty._create_descriptor  s,    	-6	2 	2.	- 	-  #44rU   sqlalchemy.orm.propertiesc
                   [         R                  R                  R                  n
U R                  c  Uc  U R                  XS5        Un[        U5      (       a  [        U5      S   nU(       a  U R                  c}  [        U[        5      (       d  [        USS9(       aS  UcE  [        US5      (       a  UR                  O
[        U5      n[        R                  " SU SU S35      e[        X;USS9nXl        [!        U R                  5      (       a  U R#                  XX4U5        OXU R$                   HH  n[        X[&        R(                  45      (       d  M%  UR*                  b  M4  [        R                  " S	5      e   U R-                  5         g )
Nr   T)check_generic__forward_arg__zCan't use forward ref z9 for composite class argument; set up the type as Mapped[])include_genericzIComposite class column arguments must be named unless a dataclass is used)r   	preloadedorm_propertiesr5   r   _raise_for_requiredr+   r)   r   rp   r*   hasattrr   r   ArgumentErrorr   r   _setup_for_dataclassr   r#   r>   r   r   )rQ   	decl_scanregistryclsoriginating_modulerh   mapped_container
annotationextracted_mapped_annotationis_dataclass_fieldr5   argumentstr_argr   s                 rR   declarative_scan"CompositeProperty.declarative_scan_  ss    ~~44AA  (+3$$S..X)!,H,,4(C((J- &- #8->?? !00 ] 
 !..0
 ;EELIQP  3#5t $, ,,--%%Sc 

tFMM%BCC		) ..5  # 	rU   c                  ^ [        U R                  5      (       a  [        U R                  S5      (       d  [        R                  " U R                  5      n[
        R                  " UR                  R                  5        Vs/ s H  o"R                  PM     sn6 m[        UR                  5      S:X  a  U4S jU l        OTU l        U R                  b  [        U R                  [        5      (       aq  U R                  [        ;  a\  U R                  b  U R                  [        U R                  '   g [        U R                  S5      (       a  S [        U R                  '   g g g g g s  snf )Nr   r   c                   > T" U 5      4$ rW   r   )r   getters    rR   r   2CompositeProperty._init_accessor.<locals>.<lambda>  s    &+rU   c                "    U R                  5       $ rW   r   )r   s    rR   r   r    s     8 8 :rU   )r   r   r   inspect	signatureoperator
attrgetter
parametersr   r   lenr   r   typer   )rQ   insppr
  s      @rR   r    CompositeProperty._init_accessor  s2   ,,--g  "87
 7
 $$T%9%9:D(("&//"8"8":;":Q&&":;F 4??#q(5O25;2   ,4//66$$,>>11=66 #4#7#78 --/EFF: #4#7#78 G ? 7 - <s   E'zsqlalchemy.orm.decl_basec                0   [         R                  R                  R                  n[         R                  R                  n[
        R                  " U R                  5      n[        R                  " UR                  R                  5       U R                  5       H  u  pU	cY  [        R                  " S[        U R                  5       SU R                  R                    S[        UR                  5       35      eU
c  U" 5       n
U =R                  U
4-  sl        [#        X5      (       a-  U
R%                  UUUUUU	R&                  U	R(                  5        M  [#        U
[*        R,                  5      (       d  M  UR/                  U	R&                  U
5        M     g )Nznumber of composite attributes z3 exceeds that of the number of attributes in class  )r   r   r   r5   orm_decl_baser  r  r   	itertoolszip_longestr  r   r   r   r   r  rs   r   declarative_scan_for_compositer   r  r#   r>   _undefer_column_name)rQ   r   r   r   r   rh   r5   	decl_baser  paramr   s              rR   r   &CompositeProperty._setup_for_dataclass  sA    ~~44AANN00	  !5!56$00OO""$djj
KE }**54::' (A++445Qs4??7K6LN  |#~

tg%
$--33&JJ$$ D&--00..uzz4@5
rU   c                    U R                    Vs/ s H-  n[        U R                  R                  UR                  5      PM/     sn$ s  snf rW   )propsr   r   r   rh   rc   s     rR   _comparable_elements&CompositeProperty._comparable_elements  s3    BF**M*$**DHH5*MMMs   4Azorm.propertiesc                   / n[         R                  R                  R                  nU R                   GH  n[        U[        5      (       a  U R                  R                  USS9nO[        U[        R                  5      (       a  U R                  R                  U   nOb[        X25      (       a$  U R                  R                  UR                     nO.[        U[        R                  5      (       a  UR                  nOS n[        U[         5      (       d  ["        R$                  " SU< 35      eUR'                  U5        GM     U$ )NF)_configure_mapperszYComposite expects Column objects or mapped attributes/attribute names as arguments, got: )r   r   r   r5   r   r   rp   r   get_propertyr#   r>   _columntopropertycolumnr   r/   rz   r   r   r   append)rQ   r#  r5   r   rd   s        rR   r#  CompositeProperty.props  s    ~~44AAJJD$$${{///OD&--00{{44T:D//{{44T[[AD*"B"BCC}}dN33**EEIHN 
 LL% & rU   c                    U R                   $ rW   )r$  rP   s    rR   rS   (CompositeProperty._column_strategy_attrs   s    (((rU   c                   [         R                  R                  R                  nU R                   Vs/ s HD  n[        U[        R                  U45      (       d  M&  [        X!5      (       a  UR                  OUPMF     sn$ s  snf rW   )	r   r   r   r5   r   r   r#   r>   r*  )rQ   r5   as      rR   columnsCompositeProperty.columns  sl     ~~44AA ZZ
!fmm\:; ;
133AHH:
 	
 
s   %B"Bc                    U $ rW   r   rP   s    rR   mapper_property_to_assign+CompositeProperty.mapper_property_to_assign  s    rU   c                f    U R                    Vs/ s H  oR                  b  M  US4PM     sn$ s  snf )Nr   )r1  table)rQ   cs     rR   columns_to_assign#CompositeProperty.columns_to_assign  s(     $@1A@@@s   ..c                0   [         R                  R                  R                  nU R                   Hb  n[        X!5      (       d  M  UnU R                  Ul        U R                  (       a  U R                  Ul        SUl        U R                  Ul	        Md     g)zgPropagate configuration arguments made on this composite
to the target columns, for those that apply.

))r   T)
instrumentTN)
r   r   r   r4   r#  r   r   r   strategy_keyr   )rQ   r4   rd   cprops       rR   r   -CompositeProperty._setup_arguments_on_columns  sm     66EEJJDd33#'#6#6E }}!%%O"**EK rU   c                  ^ ^       SU4S jjn        SUU 4S jjn          SU 4S jjm      SU 4S jjn        SU 4S jjn[         R                  " T R                  SUSS9  [         R                  " T R                  S	USS9  [         R                  " T R                  S
USSS9  [         R                  " T R                  SUSSS9  [         R                  " T R                  SUSSS9  T R                  R                  T R                     nUR
                  UR                  l        T R                  UR                  R
                  l        g)z>Establish events that populate/expire the composite attribute.c                   > T" XS SS9  g )NF
is_refreshr   )rX   context_load_refresh_handlers     rR   load_handler=CompositeProperty._setup_event_handlers.<locals>.load_handler,  s     "%$5IrU   c                   > U(       a:  TR                   1R                  TR                  5      R                  U5      (       a	  T" XUSS9  g g )NTrB  )rh   unionr   intersection)rX   rD  to_loadrE  rQ   s      rR   refresh_handler@CompositeProperty._setup_event_handlers.<locals>.refresh_handler1  sD     
  !5!56l7#$ &eg$O$rU   c                0  > U R                   nU(       a  UTR                  L a  TR                  U;   a  g TR                   H
  nXT;  d  M
    g    TR                  " TR                   Vs/ s H  o`R                   U   PM     sn6 UTR                  '   g s  snf rW   )dictr   rh   r   r   )rX   rD  rK  rC  rY   krh   rQ   s          rR   rE  FCompositeProperty._setup_event_handlers.<locals>._load_refresh_handler=  s     JJE 'T-A-A"A((e#
 ))> * #22-1-A-AB-Ac**S/-ABE$((OBs   )Bc                   > Ub)  [        TR                  5      R                  U5      (       a'  U R                  R	                  TR
                  S 5        g g rW   )r   r   rJ  rO  r   rh   )rX   keysrQ   s     rR   expire_handler?CompositeProperty._setup_event_handlers.<locals>.expire_handler^  sA     |s4#7#78EEdKK

txx.  LrU   c                R   > UR                   R                  TR                  S5        g)zAfter an insert or update, some columns may be expired due
to server side defaults, or re-populated due to client side
defaults.  Pop out the composite value here so that it
recreates.

N)rO  r   rh   )r   
connectionrX   rQ   s      rR   insert_update_handlerFCompositeProperty._setup_event_handlers.<locals>.insert_update_handlerd  s     JJNN488T*rU   after_insertT)rawafter_updateload)r[  	propagater   expireN)rX   rr   rD  r1   rn   r   )rX   rr   rD  r1   rK  Optional[Sequence[str]]rn   r   )
rX   rr   rD  r1   rK  r`  rC  ro   rn   r   )rX   rr   rS  r`  rn   r   )r   r   rW  r7   rX   rr   rn   r   )	r!   listenr   r   rh   r   r   r   r   )rQ   rF  rL  rT  rX  r   rE  s   `     @rR   r   'CompositeProperty._setup_event_handlers)  s   	J%	J0?	J	J

	P%
	P$
	P -
	P 	
	P 
	P	%	$	 -	 		
 	B	/%	/-D	/	/	+	+"	+ &	+ 		+ 	KK)>D	
 	KK)>D	
 	KK44	
 	KKO	
 	KK>tt	
 [[..txx8
#-#6#6
 373F3F
  0rU   c                X    U R                    Vs/ s H  oR                  PM     sn$ s  snf rW   )r#  rh   rc   s     rR   r   !CompositeProperty._attribute_keys  s     %)ZZ0ZTZ000s   'c                   ^ ^^ T R                   (       a  T R                   mOSS jmT R                   Vs/ s H  oR                  PM     snmSUUU 4S jjnU$ s  snf )Nc                "    U R                  5       $ rW   r  )vals    rR   
get_valuesOCompositeProperty._populate_composite_bulk_save_mappings_fn.<locals>.get_values  s    //11rU   c           
        > U R                  [        TT" U R                  TR                  5      5      5       VVs0 s H  u  pX_M	     snn5        g s  snnf rW   )r   r   r   rh   )	dest_dictrh   rg  r   rh  rQ   s      rR   populateMCompositeProperty._populate_composite_bulk_save_mappings_fn.<locals>.populate  sW     %(z)--*AB%% H%s   A
)rg  r   rn   z
Tuple[Any])rk  zDict[str, Any]rn   r   )r   r#  rh   )rQ   rd   rl  r   rh  s   `  @@rR   )_populate_composite_bulk_save_mappings_fn;CompositeProperty._populate_composite_bulk_save_mappings_fn  sP     --;;J2 '+jj1jdj1	 	  2s   Ac                ~   / n/ nSnU R                    H  nUR                  nUR                  U   R                  R	                  X5      n	U	R                  5       (       a  SnU	R                  5       n
U
(       a  UR                  U
5        OUR                  S5        U	R                  (       a  UR                  U	R                  5        M  UR                  S5        M     U(       a4  [        R                  " U R                  " U6 /SU R                  " U6 /5      $ [        R                  " SU R                  " U6 /S5      $ )z>Provided for userland code that uses attributes.get_history().FTNr   )r#  rh   r   r   r[   has_changesnon_deletedextendr+  deletedr   r.   r   )rQ   rX   rY   rZ   addedrt  has_historyrd   rh   histrr  s              rR   r[   CompositeProperty.get_history  s    JJD((C==%**66uDD!!"**,K[)T"||t||,t$   %%%%u-.%%w/0  %%b4+?+?+G*H"MMrU   c                $    U R                  X5      $ rW   )r   )rQ   r   s     rR   r   %CompositeProperty._comparator_factory  s     &&t44rU   c                  N   ^  \ rS rSr    SU 4S jjr        SS jrSrU =r$ )!CompositeProperty.CompositeBundlei  c                H   > Xl         [        TU ]  " UR                  /UQ76   g rW   )rz   r   ri   rh   )rQ   	property_exprr   s      rR   ri   *CompositeProperty.CompositeBundle.__init__  s     
 &MGY]]2T2rU   c                   ^ ^ SUU 4S jjnU$ )Nc                l   > TR                   R                  " T Vs/ s H
  o" U 5      PM     sn6 $ s  snf rW   )rz   r   )rowprocprocsrQ   s     rR   r  DCompositeProperty.CompositeBundle.create_row_processor.<locals>.proc  s3    }}44,12EDd3iE2 2s   1)r  zRow[Any]rn   r   r   )rQ   queryr  labelsr  s   ` `  rR   create_row_processor6CompositeProperty.CompositeBundle.create_row_processor  s     
 KrU   )rz   )r~  zComposite[_T]r  r;   )r  zSelect[Any]r  z#Sequence[Callable[[Row[Any]], Any]]r  Sequence[str]rn   zCallable[[Row[Any]], Any])rs   rt   ru   rv   ri   r  r|   __classcell__r   s   @rR   CompositeBundler|    sJ    	3$	3 	3		 7	 "		
 '	 	rU   r  c                     \ rS rSr% SrSrS\S'   \R                  SS j5       r	SS jr
\R                  SS j5       r    SS	 jr\R                  SS
 j5       rSS jrSS jrSS jrSS jrSS jrSS jr      SS jrSrg)CompositeProperty.Comparatori  ao  Produce boolean, comparison, and other operators for
:class:`.Composite` attributes.

See the example in :ref:`composite_operations` for an overview
of usage , as well as the documentation for :class:`.PropComparator`.

.. seealso::

    :class:`.PropComparator`

    :class:`.ColumnOperators`

    :ref:`types_operators`

    :attr:`.TypeEngine.comparator_factory`

Nz%RODescriptorReference[Composite[_PT]]rd   c                B    [         R                  " U R                  SS06$ )Nr   F)r&   r;   r$  rP   s    rR   clauses$CompositeProperty.Comparator.clauses  s&    (("77 rU   c                    U R                   $ rW   r%   rP   s    rR   __clause_element__/CompositeProperty.Comparator.__clause_element__  s    ??"rU   c                    U R                   R                  U R                  U R                  U R                  R                  S.5      n[
        R                  U R                  U5      $ )N)parententityparentmapper	proxy_key)r  	_annotate_parententityrd   rh   r   r  )rQ   r  s     rR   r&   'CompositeProperty.Comparator.expression  sQ    ll,,$($6$6$($6$6!%G %44TYYHHrU   c                   [        U[        5      (       a  UR                  nUc'  U R                  R                   Vs/ s H  nS PM     nnO[        U R                  R
                  [        5      (       a@  [        XR                  R
                  5      (       a  U R                  R                  U5      nO([        R                  " SU R                  < SU< 35      e[        [        U R                  U5      5      $ s  snf )Nz!Can't UPDATE composite attribute z to )r   r(   r   rd   r   r   r  r   r   r   listr   r$  )rQ   r   rh   r   s       rR   _bulk_update_tuples0CompositeProperty.Comparator._bulk_update_tuples  s     %// }*.))*C*CD*C3$*CDDII55t<<yy00B B BB **yy%) 
 D55v>?? Es   C<c                    U R                   (       aO  U R                  R                   Vs/ s H-  n[        U R                   R                  UR
                  5      PM/     sn$ U R                  R                  $ s  snf rW   )_adapt_to_entityrd   r$  r   entityrh   rc   s     rR   r$  1CompositeProperty.Comparator._comparable_elements(  se    $$ !%		 > > > D1188$((C > 
 yy555s   4A7c                B    U R                  [        R                  U5      $ rW   )_comparer'   eqrQ   others     rR   __eq__#CompositeProperty.Comparator.__eq__2      ==u55rU   c                B    U R                  [        R                  U5      $ rW   )r  r'   ner  s     rR   __ne__#CompositeProperty.Comparator.__ne__5  r  rU   c                B    U R                  [        R                  U5      $ rW   )r  r'   ltr  s     rR   __lt__#CompositeProperty.Comparator.__lt__8  r  rU   c                B    U R                  [        R                  U5      $ rW   )r  r'   gtr  s     rR   __gt__#CompositeProperty.Comparator.__gt__;  r  rU   c                B    U R                  [        R                  U5      $ rW   )r  r'   ler  s     rR   __le__#CompositeProperty.Comparator.__le__>  r  rU   c                B    U R                  [        R                  U5      $ rW   )r  r'   ger  s     rR   __ge__#CompositeProperty.Comparator.__ge__A  r  rU   c                   Uc$  S /[        U R                  R                  5      -  nOU R                  R                  U5      n[	        U R                  R                  U5       VVs/ s H  u  pEU" XE5      PM     nnnU R
                  (       a/  U R                  c   eU Vs/ s H  opR                  U5      PM     nn[        R                  " U6 $ s  snnf s  snf rW   )	r  rd   r$  r   r   r  adapterr$   and_)rQ   r  r  r   r0  bcomparisonsxs           rR   r  %CompositeProperty.Comparator._compareK  s     }#dii&D&D"EEBB5I  		 > >GGDA G   $$||///8CD1||AD88[)) Es   &C!Cr   )rn   r;   )rn   z&CompositeProperty.CompositeBundle[_PT])r   r   rn   z(Sequence[Tuple[_DMLColumnArgument, Any]]r   )r  r   rn   ColumnElement[bool])r  r=   r  r   rn   r  )rs   rt   ru   rv   r   __hash__r   r   memoized_propertyr  r  r&   r  r$  r  r  r  r  r  r  r  r|   r   rU   rR   r   r    s    	& 33				 
 	
	# 
			I 
 	I	@	@5	@0 
			6 
 	6	6	6	6	6	6	6	*(	*14	* 	*rU   r   c                t    [        U R                  R                  R                  5      S-   U R                  -   $ )N.)rp   r   r   rs   rh   rP   s    rR   __str__CompositeProperty.__str__\  s+    4;;%%../#5@@rU   )r   r   r   r   r   r   rL   r   rW   )r   zCUnion[None, Type[_CC], Callable[..., _CC], _CompositeAttrType[Any]]r   z_CompositeAttrType[Any]r   Optional[_AttributeOptions]r   ro   r   ro   r   rJ   r   zOptional[Type[Comparator[_CC]]]r   Optional[_InfoType]r   r   r   )r   r   rn   zTuple[Any, ...]rn   r   )r   r2   r   r-   r   	Type[Any]r   rJ   rh   rp   r   zOptional[Type[Mapped[Any]]]r  Optional[_AnnotationScanType]r  r  r  ro   rn   r   )r   r2   r   r-   r   r  r   rJ   rh   rp   rn   r   r   )rn   zSequence[MapperProperty[Any]])rn   zSequence[Column[Any]])rn   zOptional[MapperProperty[_CC]])rn   z$List[Tuple[schema.Column[Any], int]])rn   r  )rn   z Callable[[Dict[str, Any]], None]rq   )r   r   rn   zComposite.Comparator[_CC])rn   rp   )-rs   rt   ru   rv   r   r   ri   r   r   r   objectr   r   r   preload_moduler  r   r   r  r$  r#  rS   non_memoized_propertyr1  rz   r4  r9  r   r   r   rn  r   r{   r[   r   orm_utilBundlerD   r  r   rF   r   r  r|   r  r  s   @rR   r   r      sF   
 :9..$  .- 	& :>$#>B$(&
&
 (& 7& & & & <& "& & &P%"+ hOH5T 
459)9  9 	9
 *9 9 69 29 &C9 !9 
9 69v6 
45	34'A)'A  'A 	'A
 *'A 'A 
'A 5 6'AR 
N N 
	)* + 2) 
	)*
 +  
   A A 
)*% +%&[G~ 
1 1	)8  +66	#N!#N #N 	#N
 
#NJ5!5	"5
(//"- ,v*^C( v*pA ArU   r   c                      \ rS rSrSrSrSrg)	Compositei`  a7  Declarative-compatible front-end for the :class:`.CompositeProperty`
class.

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

.. versionchanged:: 2.0 Added :class:`_orm.Composite` as a Declarative
   compatible subclass of :class:`_orm.CompositeProperty`.

.. seealso::

    :ref:`mapper_composite`

Tr   Nrs   rt   ru   rv   r   inherit_cacher|   r   rU   rR   r  r  `  s     MrU   r  c                  B   ^  \ rS rSrSr    SS jrSU 4S jjrSrU =r$ )ConcreteInheritedPropertyis  a  A 'do nothing' :class:`.MapperProperty` that disables
an attribute on a concrete subclass that is only present
on the inherited mapper, not the concrete classes' mapper.

Cases where this occurs include:

* When the superclass mapper is mapped against a
  "polymorphic union", which includes all attributes from
  all subclasses.
* When a relationship() is configured on an inherited mapper,
  but not on the subclass mapper.  Concrete mappers require
  that relationship() is configured explicitly on each
  subclass.

c                    S nU R                   R                  5        H8  nUR                  U R                     n[	        USS 5      c  M,  UR
                  n  O   Uc   eU" WU5      $ )Nr   )r   iterate_to_root_propsrh   r   r   )rQ   r   comparator_callablemr  s        rR   r   -ConcreteInheritedProperty._comparator_factory  sm     #,,.A"Aq.5A&'&:&:#	 /
 #..."1f--rU   c                j   >^ ^ [         TT ]  5         SU 4S jjm " U U4S jS5      nU" 5       T l        g )Nc            	     p   > [        ST R                  < ST R                  < ST R                  < S35      e)Nz	Concrete z does not implement attribute z9 at the instance level.  Add this property explicitly to r  )r   r   rh   rP   s   rR   warn0ConcreteInheritedProperty.__init__.<locals>.warn  s*      ;;$++7 rU   c                  H   > \ rS rSrSU4S jjrSU4S jjrS	U U4S jjrSrg)
DConcreteInheritedProperty.__init__.<locals>.NoninheritedConcretePropi  c                   > T" 5         g rW   r   )sr   r   r  s      rR   __set__LConcreteInheritedProperty.__init__.<locals>.NoninheritedConcreteProp.__set__      rU   c                   > T" 5         g rW   r   )r  r   r  s     rR   
__delete__OConcreteInheritedProperty.__init__.<locals>.NoninheritedConcreteProp.__delete__  r  rU   c                2   > Uc  TR                   $ T" 5         g rW   r   )r  r   ownerrQ   r  s      rR   __get__LConcreteInheritedProperty.__init__.<locals>.NoninheritedConcreteProp.__get__  s    ;??*rU   r   N)r  r   r   r   r   r   rn   r	   )r  r   r   r   rn   r	   )r  r   r   r   r  r   rn   r   )rs   rt   ru   rv   r  r  r  r|   )rQ   r  s   rR   NoninheritedConcretePropr    s     rU   r  )rn   r	   )r   ri   rL   )rQ   r  r  r   s   ` @rR   ri   "ConcreteInheritedProperty.__init__  s)    	
	 
	 34rU   r   )r   r   rn   zType[PropComparator[_T]]r  )	rs   rt   ru   rv   r   r   ri   r|   r  r  s   @rR   r  r  s  s'     .!.	!.5 5rU   r  c                  .  ^  \ rS rSr% SrS\S'         S             SU 4S jjjr\(       d
  \SS j5       r	\
R                    SS j5       rSS jrSS	 jr\R                   4       SS
 jjr\
R$                  " S5      SS j5       rSrU =r$ )SynonymPropertyi  a  Denote an attribute name as a synonym to a mapped property,
in that the attribute will mirror the value and expression behavior
of another attribute.

:class:`.Synonym` is constructed using the :func:`_orm.synonym`
function.

.. seealso::

    :ref:`synonyms` - Overview of synonyms

"Optional[Type[PropComparator[_T]]]r   c                >  > [         TU ]  US9  Xl        X l        X0l        X@l        U(       a  Xpl        O1U(       a#  UR                  (       a  UR                  U l        OS U l        U(       a  U R                  R                  U5        [        R                  " U 5        g r   )r   ri   r   
map_columnrL   r   rK   r   r   r   r   r   )	rQ   r   r  rL   r   r   r   rK   r   s	           rR   ri   SynonymProperty.__init__  su     	+<=	$$"4HJ..!))DHDHIIT"%rU   c                ~    [        U R                  R                  U R                  5      R                  R
                  $ rW   )r   r   r   r   r   rb   rP   s    rR   rb   SynonymProperty.uses_objects  s)    4;;--tyy9>>KKKrU   c                   [        U R                  R                  U R                  5      n[	        US5      (       a  [        UR                  [        5      (       d  [        U[        R                  5      (       a  UR                  $ [        U[        5      (       a  U$ [        R                  " SU R                  R                  R                  < SU R                  < SU< 35      eUR                  $ )Nrz   zsynonym() attribute "r  z+" only supports ORM mapped attributes, got )r   r   r   r   r   r   rz   r   r   r0   
comparatorr   r   r   rs   )rQ   r   s     rR   _proxied_objectSynonymProperty._proxied_object  s     t{{))4995tZ((
MM>1
 1

 $
 = =>>&D"233,, ;;%%..		4A 
 }}rU   c                X    [        U R                  R                  U R                  5      4$ rW   )r   r   r   r   rP   s    rR   rS   &SynonymProperty._column_strategy_attrs  s     **DII688rU   c                    U R                   n[        U[        5      (       a7  U R                  (       a  U R                  X!5      nU$ UR                  X!5      nU$ U$ rW   )r  r   r   r   )rQ   r   rd   comps       rR   r   #SynonymProperty._comparator_factory  sV    ##dN++&&..t< K ..t<KKrU   c                    [        U R                  R                  U R                  5      nUR                  R                  XUS9$ )N)rZ   )r   r   r   r   r   r[   )rQ   rX   rY   rZ   r   s        rR   r[   SynonymProperty.get_history  s8     )00B0BDII(Nyy$$U7$CCrU   r   c           
        [         R                  R                  nU R                  (       Ga  U R                  UR
                  R                  ;  aK  [        R                  " SU R                  < SUR
                  R                  < SU R                  < S35      eUR
                  R                  U R                     UR                  ;   a  UR                  UR
                  R                  U R                        R                  U R                  :X  aN  [        R                  " SU R                  < SU R                  < SU R                  < SU R                  < 35      eUR                  UR
                  R                  U R                     5      nUR                  U R                  XBS	S
9  U R                  Ul        Xl        g )NzCan't compile synonym 'z': no column on table 'z	' named ''z'Can't call map_column=True for synonym =z4, a ColumnProperty already exists keyed to the name z for column T)init	setparent)r   r   r   r  rh   persist_selectabler8  r   r   r   descriptionr)  r4   _configure_property_mapped_by_synonymr   )rQ   r   r  
propertiesr  s        rR   
set_parentSynonymProperty.set_parent  sT   ^^22
???xxv88:::** 		11==  ))++DHH5++,,,--//9#99
 ** xxDIItxxA  &0%>%>))++DHH5&A &&tyy!$&O#'88A rU   )r   rL   rK   r  r   r   )NNNNNN)r   rp   r  zOptional[bool]rL   zOptional[Any]r   r  r   r  r   r  rK   rJ   rm   )rn   z/Union[MapperProperty[_T], SQLORMOperations[_T]]r   )r   r   rn   zSQLORMOperations[_T]rq   )r   r   r  ro   rn   r   )rs   rt   ru   rv   r   r   ri   r   rz   rb   r   r  r  rS   r   r   r{   r[   r  r  r|   r  r  s   @rR   r  r    s    ;:
 &*$(AE9=$(!&& #& "	&
 ?& 7& "& & &6 		L 
	L 
	8 ,9
   +66	D!D D 	D
 
D 
45# 6#rU   r  c                      \ rS rSrSrSrSrg)Synonymi5  a3  Declarative front-end for the :class:`.SynonymProperty` class.

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

.. versionchanged:: 2.0 Added :class:`_orm.Synonym` as a Declarative
   compatible subclass for :class:`_orm.SynonymProperty`

.. seealso::

    :ref:`synonyms` - Overview of synonyms

Tr   Nr  r   rU   rR   r  r  5  s     MrU   r  )gr   
__future__r   dataclassesr   r  r  r  typingr   r   r   r   r	   r
   r   r   r   r   r   r   weakref r   r   r  baser   r   r   r   r   
interfacesr   r   r   r   r   r   r   r!   r"   r   r#   r$   r&   r'   sql.elementsr(   util.typingr)   r*   r+   _typingr,   r-   r.   r/   r0   rD  r1   r  r2   r   r3   r  r4   r5   rX   r6   engine.baser7   
engine.rowr8   sql._typingr9   r:   r;   r<   sql.operatorsr=   
sql.schemar>   sql.selectabler?   r@   rA   rB   rC   rD   rF   rH   rp   _CompositeAttrTyper   WeakKeyDictionaryr   r   r   r  r  r  r  r   rU   rR   <module>r-     s  
 # $                     $ &   " ) / $ & &  )        ( " $ # 
&&#1.(1*($( 0'),,#'1/13Te3JH+ JHZ 	  e3
     
d
A.0B30Gd
AN!"%'9"'= &55 22 6 55pG(, GTob!#5b#9 rU   