
    -hî                     8   S r SSKJ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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 r$S r%S2S jr&S r'S r(S  r)\RT                  " S!5      S" 5       r+S# r, " S$ S%\-5      r. " S& S'\.5      r/ " S( S)\.5      r0\RT                  " S!5      S* 5       r1 " S+ S,\05      r2S- r3S. r4S/ r5S0\5l6        S1 r7g)3z(Internal implementation for declarative.    )absolute_importN)
attributes)instrumentation   )clsregistry)exc)mapper)InstrumentedAttribute)QueryableAttribute)_is_mapped_class)InspectionAttr)CompositeProperty)SynonymProperty)MapperProperty)Mapper)ColumnProperty)class_mapper   )event)util)
expression)Column)Table)topologicalc                     [         R                  U 5      (       a  [         R                  U 5      $ [        U 5      (       a
  [	        U SS9$ g )NF)	configure)_DeferredMapperConfighas_clsconfig_for_clsr   r   clss    mC:\Users\ROHAN GUPTA\OneDrive\Desktop\mathbuddy-assessment\venv\Lib\site-packages\sqlalchemy/orm/decl_base.py_declared_mapping_infor#   %   s?    $$S))$33C88	#		C511    c                     U [         L a  g U R                  R                  SS5      (       a&  U R                   H  n[	        U5      nUc  M  Us  $    g [        U 5      nU(       a  UR                  $ U $ )N__abstract__F)object__dict__get	__bases__"_resolve_for_abstract_or_classical_dive_for_cls_managerclass_)r!   sup
clsmanagers      r"   r+   r+   0   sh    
f}
||..==C4S9C
 !
 *3/
$$$Jr$   c                 <   US:w  d   e[        U [        5      (       d  gXR                  ;   a  [        X5      $ U R                  SS  HQ  n[        U5      nXR                  ;   d  M  X0L d#  U(       a  X0R                  ;   d  M;  O U(       a  MF  [        X15      s  $    g)a  return an attribute of the class that is either present directly
on the class, e.g. not on a superclass, or is from a superclass but
this superclass is a non-mapped mixin, that is, not a descendant of
the declarative base and is also not classically mapped.

This is used to detect attributes that indicate something about
a mapped class independently from any mapped classes that it may
inherit from.

r&   Nr   )
issubclassr'   r(   getattr__mro__r,   r*   )r!   attrnamestrictbase_is_classicial_inheritss        r"   _get_immediate_cls_attrr8   D   s     ~%%%c6""<<s%%AB"7"=}}$K*0&d// 4**   r$   c                     [        U S5      (       d  g U R                   H$  n[        R                  " U5      nU(       d  M"  Us  $    g )Nr3   )hasattrr3   r   manager_of_class)r!   r6   managers      r"   r,   r,   i   sA     3	""--d37N  r$   c                 2    [         R                  XUS 0 5      $ N)_MapperConfigsetup_mapping)registryr!   dict_s      r"   _as_declarativerC   y   s    
 &&xeT2FFr$   c                 2    [        XX#5        UR                  $ r>   )_ImperativeMapperConfig
__mapper__)rA   r!   table	mapper_kws       r"   _mapperrI      s    H5<>>r$   zsqlalchemy.orm.decl_apic                     [         R                  R                  R                  n[	        X[         R
                  45      $ r>   )r   	preloadedorm_decl_apideclared_attr
isinstanceclassproperty)objrM   s     r"   _is_declarative_propsrQ      s-    NN//==Mc4+=+=>??r$   c                     [        U 5      (       a2  [        U SS5      (       a  [        R                  " SU< SU< S35        gg)N
_cascadingFz1@declared_attr.cascading is not supported on the z attribute on class z5.  This attribute invokes for subclasses in any case.T)rQ   r2   r   warn)rP   namer!   s      r"   _check_declared_props_nocascaderV      s<    S!!3e,,II .238
 r$   c                   :    \ rS rSrSr\S 5       rS rS rS r	Sr
g)	r?      )r!   	classname
propertiesdeclared_attr_reg__weakref__c                 H   [         R                  " U 5      nU(       a(  UR                  UL a  [        R                  " SU -  5      eUR
                  R                  SS5      (       a  g [        USSS9=(       d    [        US5      nU(       a  [        nO[        nU" XX4U5      $ )Nz4Class %r already has been instrumented declarativelyr&   F_sa_decl_prepare_nocascadeTr5   _sa_decl_prepare)r   r;   r-   r   InvalidRequestErrorr(   r)   r8   r:   r   _ClassScanMapperConfig)	r!   rA   cls_rB   rG   rH   r<   	defer_mapcfg_clss	            r"   r@   _MapperConfig.setup_mapping   s    --c2w~~-))ICO  ==^U33+.t
 /T-. 	 +G,GxuY??r$   c                    [         R                  " U[        S5      U l        UR                  U l        [         R                  " 5       U l        0 U l        UR                  SS5      (       d-  [        R                  " U R                  SUU UR                  S9  g [        R                  " U R                  5      nU(       a  UR                  (       d#  [         R"                  " SU R                  -  5      eg )Nrc   non_primaryF)finalizerA   declarative_scaninit_methodztClass %s has no primary mapper configured.  Configure a primary mapper first before setting up a non primary Mapper.)r   assert_arg_typetyper!   __name__rY   OrderedDictrZ   r[   r)   r   register_classconstructorr   r;   	is_mappedr   ra   )selfrA   rc   rH   r<   s        r"   __init___MapperConfig.__init__   s    ''dF;**,!#}}]E22**!!%$00 !11$((;G'"3"3-- $)  #4r$   c                 h    [         R                  " U R                  5      nUR                  X5        U$ r>   )r   r;   r!   install_member)rs   r4   valuer<   s       r"   set_cls_attribute_MapperConfig.set_cls_attribute   s)    !22488<x/r$   c                 &    U R                  U5        g r>   )maprs   rH   s     r"   _early_mapping_MapperConfig._early_mapping   s    r$   )rY   r!   r[   rZ   N)rn   
__module____qualname____firstlineno__	__slots__classmethodr@   rt   ry   r~   __static_attributes__ r$   r"   r?   r?      s.    I @ @*.r$   r?   c                   R   ^  \ rS rSrSrU 4S jr\R                  4S jrS r	Sr
U =r$ )rE      )rB   local_tableinheritsc                   > [         [        U ]  XU5        0 U l        U R	                  SU5      U l        [        R                     UR                  SS5      (       d6  [        R                  " U R                  U R                  UR                  5        U R                  U5        U R                  U5        S S S 5        g ! , (       d  f       g = f)N	__table__rh   F)superrE   rt   rB   ry   r   	mapperlib_CONFIGURE_MUTEXr)   r   	add_classrY   r!   _class_registry_setup_inheritancer~   )rs   rA   rc   rG   rH   	__class__s        r"   rt    _ImperativeMapperConfig.__init__   s     	%t5I	
 
11+uE''==66%%NNDHHh.F.F ##I.	* (''s   A0B==
Cc                 j    [         nU R                  SU" U R                  U R                  40 UD65      $ )NrF   )r	   ry   r!   r   rs   rH   
mapper_clss      r"   r|   _ImperativeMapperConfig.map   s6    
%%txx!1!1?Y?
 	
r$   c                    U R                   nUR                  SS 5      nUc  / nUR                   HE  n[        U5      nUc  M  [	        U5       c  M"  [        USSS9(       a  M4  UR                  U5        MG     U(       a2  [        U5      S:  a  [        R                  " SU< SU< 35      eUS   nO![        U[        5      (       a  UR                  nX0l        g )	Nr   r^   Tr_   r   Class  has multiple mapped bases: r   )r!   r)   r*   r+   r#   r8   appendlenr   ra   rN   r	   r-   r   )rs   rH   r!   r   inherits_searchcs         r"   r   *_ImperativeMapperConfig._setup_inheritance   s    hh==T2 !O]]6q99)&=3D' ' $**1- # '!+111  +1-&))H r$   )rB   r   r   )rn   r   r   r   r   rt   r   
EMPTY_DICTr|   r   r   __classcell__r   s   @r"   rE   rE      s%    4I+0 !OO 
! !r$   rE   c                      ^  \ rS rSrSrU 4S jrS rS rS rS r	S r
S	 rS
 rS rSS jrS rS rS r\R&                  4S jrSrU =r$ )rb   i  )
rB   r   persist_selectabledeclared_columnscolumn_copies
table_args	tablenamemapper_argsmapper_args_fnr   c                 @  > U(       a  [        U5      O0 U l        [        [        U ]  XU5        S U l        [        5       U l        0 U l        U R                  5         U R                  5         [        R                     [        R                  " U R                  U R                   UR"                  5        U R%                  5         U R'                  5         U R)                  U5        U R+                  U5        U R-                  U5        S S S 5        g ! , (       d  f       g = fr>   )dictrB   r   rb   rt   r   setr   r   _setup_declared_events_scan_attributesr   r   r   r   rY   r!   r   _extract_mappable_attributes_extract_declared_columns_setup_tabler   r~   )rs   rA   rc   rB   rG   rH   r   s         r"   rt   _ClassScanMapperConfig.__init__,  s     %*T%[r
$d4XYO"& ###%''!!(*B*B --/**,e$##I.	* (''s   <B
D
Dc                   ^  [        T R                  S5      (       a$  [        R                  " [        S5      U 4S j5       n[        T R                  S5      (       a%  [        R                  " [        S5      U 4S j5       ng g )N__declare_last__after_configuredc                  :   > T R                   R                  5         g r>   )r!   r   rs   s   r"   r   G_ClassScanMapperConfig._setup_declared_events.<locals>.after_configuredT  s    ))+r$   __declare_first__before_configuredc                  :   > T R                   R                  5         g r>   )r!   r   r   s   r"   r   H_ClassScanMapperConfig._setup_declared_events.<locals>.before_configuredZ  s    **,r$   )r8   r!   r   listens_forr	   )rs   r   r   s   `  r"   r   -_ClassScanMapperConfig._setup_declared_eventsQ  so    "488-?@@v'9:, ;, #488-@AAv':;- <- Br$   c                   ^^^^ [        TSS5      nUc  U4S jnU$ [        R                  " T5       Vs0 s H.  nX$R                  ;   d  M  UR                  UR                  U   _M0     snm[        R
                  " T5       Vs0 s H.  nX$R                  ;   d  M  UR                  UR                  U   _M0     snm[        5       mUUUU4S jnU$ s  snf s  snf )zProduce a function that checks if a class has overridden an
attribute, taking SQLAlchemy-enabled dataclass fields into account.

__sa_dataclass_metadata_key__Nc                     > [        TU 5      UL$ r>   )r2   )keyrP   r!   s     r"   attribute_is_overriddenR_ClassScanMapperConfig._cls_attr_override_checker.<locals>.attribute_is_overriddeni  s    sC(33r$   c                 B  > [        U5      (       a  UR                  nTR                  U T5      n[        U5      (       a  UR                  nX!L a  gUTLa  gTR                  U T5      n[        TX5      nX!L a  gUTLa  [	        U[
        5      (       a  gX1L a  gUTLa  gg)NFT)rQ   fgetr)   r2   rN   r
   )r   rP   ret	all_fieldabsentall_datacls_fieldsr!   local_datacls_fieldss       r"   r   r   {  s    (--((C +..sF;(--((C: &.223?	c3,: 
 f$.* *  # f, r$   )r8   r   dataclass_fieldsmetadatarU   local_dataclass_fieldsr'   )rs   r!   sa_dataclass_metadata_keyr   fr   r   r   s    `   @@@r"   _cls_attr_override_checker1_ClassScanMapperConfig._cls_attr_override_checker^  s    
 %<0$%
! %,4t '&g ..s3"3A,

: >

#<==3" 44S9$9A,

: >

#<==9$  XF& &P '&k"
$s   CCCCc                 `   ^^^ [        TSS5      mTc  U4S jnU$ [        5       mUUU4S jnU$ )zzproduce a function to iterate the "attributes" of a class,
adjusting for SQLAlchemy fields embedded in dataclass fields.

r   Nc               3   ^   >#    [        T5      R                  5        H  u  pXS4v   M     g 7f)NF)varsitems)rU   rP   r!   s     r"   local_attributes_for_classM_ClassScanMapperConfig._cls_attr_resolver.<locals>.local_attributes_for_class  s(     !%c!2IDU** "3s   *-c               3   L  >#    [         R                  " T5       HU  n TU R                  ;   d  M  TR                  U R                  5        U R                  [        U R                  T5      S4v   MW     [        T5      R                  5        H  u  pUT;  d  M  XS4v   M     g 7f)NTF)r   r   r   addrU   _as_dc_declaredattrr   r   )fieldrU   rP   r!   field_namesr   s      r"   r   r     s     !88=E0ENNB#

3#jj*=!NN,E+    > "&c!2ID;.".. "3s   (B$A&B$B$)r8   r   )rs   r!   r   r   r   s    ` @@r"   _cls_attr_resolver)_ClassScanMapperConfig._cls_attr_resolver  sC    
 %<0$%
! %,+$ *) %K	/ *)r$   c                   ^ U R                   mU R                  nU R                  nS nS =pES nU R                  U R                   5      n/ nTR                   Hy  n	U	TL=(       a$    [        U	5      S L=(       a    [        U	SSS9(       + n
U R                  U	5      nU
(       d  U	TLa  U R                  UU5      nO0 nUR                  U	U
UU45        M{     U GH[  u  n	n
nnUR                  U5        U" 5        GH5  u  pnUS:X  a-  [        XT5      nU(       d  U
(       a  U(       a  U4S jnM6  M8  M:  US:X  a3  [        XT5      nU(       d  U
(       a  U(       a  TR                  nMo  Mq  Ms  US:X  aw  [        XT5      nU(       db  U
(       a  U(       aR  TR                  n[        U[        [         [#        S 5      45      (       d  [$        R&                  " S5      eU	TLa  SnM  M  M  M  U
(       aD  [)        U5      (       a1  [*        R,                  " S	U	R.                  < S
U< SU	< ST< S
3	5        GM;  U	TLGa  [        U[0        5      (       a  GMY  [        U[2        5      (       a  [$        R4                  " S5      e[)        U5      (       Ga?  UR6                  (       aM  X;   a  [*        R,                  " SU< ST< S35        UR9                  UT5      =X'   =UU'   n[;        TUU5        OU(       a3  [=        TUS 5      n[        U[>        5      (       d  URA                  5       nO[=        TU5      n[        U[>        5      (       a<  URB                  (       a+  [        URD                  [2        5      (       d  URF                  nU=X'   X.'   [        U[0        [2        45      (       a$  URH                  c  URJ                  Ul$        GM  GM  GM  U RM                  XU5        GM  U(       d  GM  X;  d
  X   ULd  GM  U" X5      (       a   e[)        U5      (       a  URA                  5       nXU'   GM8     GM^     U(       a	  U(       d  S nX@l'        X`l(        X0l)        g )Nr^   Tr_   __mapper_args__c                  .   > [        T R                  5      $ r>   )r   r   r    s   r"   r   ?_ClassScanMapperConfig._scan_attributes.<locals>.mapper_args_fn  s    #'(;(;#<<r$   __tablename____table_args__z3__table_args__ value must be a tuple, dict, or Nonez*Regular (i.e. not __special__) attribute '.z(' uses @declared_attr, but owning class z& is mapped - not applying to subclass zMapper properties (i.e. deferred,column_property(), relationship(), etc.) must be declared as @declared_attr callables on declarative mixin classes.  For dataclass field() objects, use a lambda:Attribute '' on class z> cannot be processed due to @declared_attr.cascading; skipping)*r!   rB   r   r   r3   r#   r8   r   _produce_column_copiesr   updaterV   r   r   rN   tupler   rm   r   ArgumentErrorrQ   r   rT   rn   r   r   ra   rS   __get__setattrr2   r   r   _is_internal_proxyoriginal_property
descriptordoc__doc___warn_for_decl_attributesr   r   r   )rs   rB   r   r   r   inherited_table_argsr   r   basesr6   class_mappedr   locally_collected_columnsrU   rP   is_dataclass
check_declr   r!   s                     @r"   r   '_ClassScanMapperConfig._scan_attributes  s   hh

**,00
	"&"A"A$(("KKKD C *40</6t   *.)@)@)F&DO,0,G,G.+-)
 -/)LL .-	3  N 
&% LL23+E+G'<,,!@3"J *<:= DN> _,!@3"J %lj$'$5$5	 ?I9--!@3"J &|z%(%7%7
)&d4j(A    #&"3"3!0#   s?370 + @J: ",S11		
  $}}dD#	? _ "#v.. #C88!55=  /s33>>#} !%		 37%=!" '*kk#s&;<EK <- #+ ##Cs3+
 '.c4&>
 (2#~'F'F*-((*C '.c4&8 !+3 ? ?$'$:$:(2$'$9$9>)" )" '*nn?BBEK-*<&sV^,DEE #&)kkCG !0 F 66t3G!\%C)?  7tAAAA,S11!hhj"%$K[ ,H n  	J$",r$   c                     [        U[        R                  5      (       a   [        R                  " SU< SU< S35        g g )Nr   r   zk appears to be a non-schema 'sqlalchemy.sql.column()' object; this won't be part of the declarative mapping)rN   r   ColumnClauser   rT   )rs   r!   r   r   s       r"   r   0_ClassScanMapperConfig._warn_for_decl_attributes  s2    a0011II  2r$   c                    U R                   nU R                  n0 nU R                  nU" 5        H  u  pxn	[        U[        5      (       d  M  U" Xx5      (       a  M,  UR
                  (       a  [        R                  " S5      eXt;  d  MZ  SU;   a(  UR                  =(       d    UUS   R                  ;   a  M  UR                  5       =Xh'   n
UR                  U
l        [        X7U
5        XU'   M     U$ )NzColumns with foreign keys to other columns must be declared as @declared_attr callables on declarative mixin classes.  For dataclass field() objects, use a lambda:.r   )r!   rB   r   rN   r   foreign_keysr   ra   rU   r   _copy_creation_orderr   )rs   attributes_for_classr   r!   rB   locally_collected_attributesr   rU   rP   r   copy_s              r"   r   -_ClassScanMapperConfig._produce_column_copies  s     hh

')$** (<'=#D|#v&&*455 %%11:  &5()TeK.@.B.BB14<M&,/,?,?E)Cu-9>6+ (>, ,+r$   c                    U R                   nU R                  nU R                  n[        USSS9n[	        U5       GH  nUS;   a  M  X%   n[        U5      (       a@  UR                  (       a#  [        R                  " SU R                   -  5        [        X5      nOU[        U[        5      (       a@  UR                  ULa1  UR                  U:w  a!  [        UR                  5      n[        XU5        [        U[         5      (       aI  [#        U5      S:X  a:  [        US   [$        [&        45      (       a  [        R                  " SU-  5        GM  [        U[$        [&        45      (       dO  UR)                  S	5      (       d6  UR+                  U5        U R-                  XU5        U(       d  [        XU5        GM}  US
:X  a  [.        R0                  " S5      eXcU'   GM     g )Nr^   Tr_   )r   r   r   zUse of @declared_attr.cascading only applies to Declarative 'mixin' and 'abstract' classes.  Currently, this flag is ignored on mapped class %sr   r   zIgnoring declarative-like tuple value of attribute '%s': possibly a copy-and-paste error with a comma accidentally placed at the end of the line?__r   zdAttribute name 'metadata' is reserved for the MetaData instance when using a declarative base class.)r!   rB   rZ   r8   listrQ   rS   r   rT   r2   rN   r   r-   r   r   r   r   r   r   r   
startswithpopr   r   ra   )rs   r!   rB   	our_stufflate_mappedkrx   s          r"   r   3_ClassScanMapperConfig._extract_mappable_attributes  s   hh

OO	--d
 eAEEHE$U++##II  $xx(   5"455LL+IIN (		2& 5%((J!OuQx&.)ABB		BDEF
 '?@@ ||D))IIaL2235A&. j--. 
 !aLs r$   c                   ^ U R                   m[        R                  " TU4S jS9  U R                  n[        R
                  " [        5      n[        TR                  5       5       GH  u  p4[        U[        [        45      (       a  UR                   Hw  n[        U[        5      (       d  M  UR                  b  M)  [        X55        [        U[        5      (       d  X%R                      R#                  U5        UR#                  U5        My     M  [        U[        5      (       d  M  [        X45        X$R                      R#                  U5        UR#                  U5        X4R$                  :X  d  GM  TU	 GM     UR                  5        H[  u  pg['        U5      S:  d  M  [        R(                  " SU R*                  < SU< SSR-                  [/        U5      5      < S35        M]     g )	Nc                 "   > TU    R                   $ r>   r  )r   r  s    r"   <lambda>B_ClassScanMapperConfig._extract_declared_columns.<locals>.<lambda>	  s    y~'E'Er$   r   r   z	On class z, Column object z7 named directly multiple times, only one will be used: z, z$. Consider using orm.synonym instead)rZ   r   sort_dictionaryr   collectionsdefaultdictr   r  r   rN   r   r   columnsr   rG   _undefer_column_namerU   r   r   r   rT   rY   joinsorted)	rs   r   name_to_prop_keyr   r   colrU   keysr  s	           @r"   r   0_ClassScanMapperConfig._extract_declared_columns  sc   OO	 	E	

  00&22379??,-FC!n.?@AA99C!#v..3993D,S6)!->??,XX6::3?(,,S1 % Av&&$S, (,,S1 $$Q' %%<!#% .( +002JD4y1}		
 ~~tdiit.E	H 3r$   c           
         U R                   nU R                  nU R                  nU R                  nU R                  n[
        R                  " U5      n[        US S9=o`l        SU;  Ga  UGc  [        US5      (       a!  [        R                  " UR                  5      nO[        nUb  S0 pU(       aQ  [        U[        5      (       a  Un
O9[        U[        5      (       a$  [        US   [        5      (       a
  USS US   pOUn	UR!                  S5      nU(       a  XS	'   UR!                  S
5      nU(       a  SU
S'   U R#                  SU" UU R%                  U5      /[        U5      [        U	5      -   Q70 U
D65      nObUc  UR&                  nU(       aL  U HF  nUR(                  R+                  U5      (       a  M%  [,        R.                  " SUR0                  -  5      e   Xl        g )Nc                     U R                   $ r>   r  )r   s    r"   r  5_ClassScanMapperConfig._setup_table.<locals>.<lambda>7  s
    A,=,=r$   r  r   __table_cls__r   r   __autoload_with__autoload_with__autoload__Tautoloadz8Can't add additional column %r when specifying __table__)r!   r   r   rB   r   r   r;   r  r:   r   unbound_method_to_callabler&  r   rN   r   r   r)   ry   _metadata_for_clsr   r   contains_columnr   r   r   r   )rs   rG   r!   r   r   rB   r   r<   	table_clsargstable_kwr)  r+  r   s                 r"   r   #_ClassScanMapperConfig._setup_table-  s   hhNN	__


00--c239"=4
 	
0 e#sO,, ;;C<M<MN	!	$!#Rh!*d33#-#J66%jnd;;-7"-=z"~(#-D %		*= > 0=_- 99^4+/HZ(..!..w7   01E$K? #	 })A 7722155!//356UU;  * !r$   c                     [        U R                  S5      (       a  U R                  R                  $ UR                  R                  $ )Nr   )r:   r!   r   rA   )rs   r<   s     r"   r-  (_ClassScanMapperConfig._metadata_for_clsi  s5    488Z((88$$$##,,,r$   c           
         U R                   nU R                  nU R                  nU R                  nUR	                  SS 5      nUc  / nUR
                   HL  n[        U5      nUc  M  [        U5       c  M"  [        USSS9(       a  M4  X;  d  M;  UR                  U5        MN     U(       a2  [        U5      S:  a  [        R                  " SU< SU< 35      eUS   nO![        U[        5      (       a  UR                  nX`l        Uc7  U R                   c*  [        US	5      (       d  [        R                  " S
U-  5      eU R                   (       Ga  [        U R                   5      n	U	R                   n
U	R"                  nUc  U(       a  [        R$                  " S5      eU H  nUR&                  U
R(                  ;   aX  U
R(                  UR&                     UL a  M;  [        R$                  " SU< SU< SU
R(                  UR&                     < S35      eUR*                  (       a  [        R$                  " S5      eU
R-                  U5        Uc  M  XLd  M  UR/                  U5        M     g g g )Nr   r^   Tr_   r   r   r   r   __no_table__zwClass %r does not have a __table__ or __tablename__ specified and does not inherit from an existing table-mapped class.z?Can't place __table_args__ on an inherited class with no table.zColumn 'r   z! conflicts with existing column ''zDCan't place primary key columns on an inherited class with no table.)r   r!   r   r   r)   r*   r+   r#   r8   r   r   r   ra   rN   r	   r-   r   r   r   rU   r   primary_keyappend_column_refresh_for_new_column)rs   rH   rG   r!   r   r   r   r   r   inherited_mapperinherited_tableinherited_persist_selectables               r"   r   )_ClassScanMapperConfig._setup_inheritanceo  sN     hh__
00==T2 !O]]6q99)&=3D' ' /'..q1 # '!+111  +1-&))H  M%+C@@ ))&(+, 
 ]]]5dmmD.::O+;+N+N(} ++) 
 *Avv!2!22*,,QVV49$!//  !#'8'8'@B 
 }}!//3  $11!44@8O4LLQO' *  r$   c                 h   U R                   nU R                  (       a  U R                  5       nO0 nU(       a  UR                  U5        SU;   a  [        U5      nUR                  US   5        S H+  nXC;   d  M
  X4   nU R                  R                  XU5      X4'   M-     SU;   aP  US   n[        U[        5      (       a  UR                  nX`R                  La  [        R                  " SUS   -  5      eU R                  (       a  U R                  US'   U R                  (       Gah  UR                  SS5      (       GdP  [        U R                  5      nUR                  nSU;  a  [        UR                   V	s/ s H   n	XR                   ;  d  M  U	R"                  PM"     sn	5      R%                  UR&                  =(       d    S5      =US'   n
U
R)                  U R*                   V	s/ s H  oR"                  PM     sn	5        [-        UR/                  5       5       Ho  u  pK[        U[0        R2                  5      (       d  M&  XGR4                  ;   d  M7  UR4                  U   n[        U[6        5      (       d  M]  U/UR8                  -   X$'   Mq     UR;                  5       nX-S'   Xl        g s  sn	f s  sn	f )	NrZ   )version_id_colpolymorphic_onr   z:mapper inherits argument given for non-inheriting class %sconcreteFexclude_propertiesr   )rZ   r   r   r   r   r)   rN   r	   r-   r   r   ra   r#   r   r   r   _columntopropertyr   unionrC  difference_updater   r  r   r   ColumnElement_propsr   r  copyr   )rs   rH   rZ   r   r  vinherits_argr;  r<  r   rC  r   presult_mapper_argss                 r"   _prepare_mapper_arguments0_ClassScanMapperConfig._prepare_mapper_arguments  sh   __
--/KKy);&j)Jk,78 6AN!%!3!3!7!7!= 6
 $&z2L,//+22==0--"-j"9; 
 ==&*mmK
#===U!C!C
  6dmmD.::O#;6IL "1!2!2!2A$F$FF !2J %(;;ArBC014F #44$($9$9:$9qUU$9: z//12!#z'?'?@@///(//2A!!^44 *-		(9
 3 )--/+5<(-7 ;s   9J*J*'J/c                 ,   U R                  U5        [        U R                  S5      (       a+  [        R                  " U R                  R
                  5      nO[        nU R                  SU" U R                  U R                  40 U R                  D65      $ )N__mapper_cls__rF   )
rN  r:   r!   r   r,  rQ  r	   ry   r   r   r   s      r"   r|   _ClassScanMapperConfig.map  s{    &&y1488-..88''J  J%%txx!1!1FT5E5EF
 	
r$   )
r   r   rB   r   r   r   r   r   r   r   r>   )rn   r   r   r   r   rt   r   r   r   r   r   r   r   r   r   r-  r   rN  r   r   r|   r   r   r   s   @r"   rb   rb     sm    I#+J-E'N*>O-b,BC!J'R:!x-PPdI.V !OO 
 
r$   rb   c                     [         R                  R                  nX   n[        U5      (       a+  [	        X2R
                  5      (       d  UR                  U5      $ U$ r>   )r   rK   rL   callablerN   rM   )field_metadatar   decl_apirP   s       r"   r   r     sJ    
 ~~**H

3C}}Z-C-CDD%%c**
r$   c                      ^  \ rS rSr\R
                  " 5       rS r\S 5       r	\	R                  S 5       r	\S 5       r\S 5       r\S 5       r\S 5       r\SS	 j5       r\R"                  4U 4S
 jjrSrU =r$ )r   i(  c                     g r>   r   r}   s     r"   r~   $_DeferredMapperConfig._early_mapping+  s    r$   c                 "    U R                  5       $ r>   _clsr   s    r"   r!   _DeferredMapperConfig.cls.  s    yy{r$   c                 ~    [         R                  " XR                  5      U l        X R                  U R                  '   g r>   )weakrefref_remove_config_clsr\  _configs)rs   r-   s     r"   r!   r]  2  s(    KK(?(?@	#'dii r$   c                 <    U R                   R                  US 5        g r>   )rb  r  )r!   r`  s     r"   ra  (_DeferredMapperConfig._remove_config_cls7  s    d#r$   c                 v    [        U[        5      =(       a#    [        R                  " U5      U R                  ;   $ r>   )rN   rm   r_  r`  rb  r!   r-   s     r"   r   _DeferredMapperConfig.has_cls;  s(     &$'OGKK,?3<<,OOr$   c                     [        US5      (       a  UR                  5         [        R                  " US[        R                  " U5      -  S9e)N_sa_raise_deferred_configzOClass %s has a deferred mapping on it.  It is not yet usable as a mapped class.)msg)r:   ri  orm_excUnmappedClassError_safe_cls_namerf  s     r"   raise_unmapped_for_cls,_DeferredMapperConfig.raise_unmapped_for_cls@  sK    6677,,.(((*1*@*@*HI
 	
r$   c                 H    U R                   [        R                  " U5         $ r>   )rb  r_  r`  rf  s     r"   r   $_DeferredMapperConfig.config_for_clsK  s    ||GKK/00r$   c                   ^^ U R                   R                  5        Vs/ s H  o3UR                  4PM     sn VVs/ s H  u  p4Uc  M
  [        XA5      (       d  M  UPM      nnnU(       d  U$ [	        S U 5       5      m/ nT H)  mUR                  UU4S jTR                   5       5        M+     [        [        R                  " Xe5      5      $ s  snf s  snnf )Nc              3   <   #    U  H  oR                   U4v   M     g 7fr>   r    ).0ms     r"   	<genexpr>9_DeferredMapperConfig.classes_for_base.<locals>.<genexpr>Z  s     A0@1UUAJ0@s   c              3   H   >#    U  H  nUT;   d  M  TU   TT   4v   M     g 7fr>   r   )rt  base_clsall_m_by_clsm_clss     r"   rv  rw  ^  s1       /H|+ >h'e)<= /s   
"")
rb  valuesr!   r1   r   extendr*   r  r   sort)	r!   ry  r~  ru  rc   classes_for_basetuplesrz  r{  s	          @@r"   r  &_DeferredMapperConfig.classes_for_baseO  s     140C0C0EF0E1J0EF
F $.t$> F 	 
 ##A0@AA!EMM  %  " K$$V>??! G
s   C	C	CCc                 v   > U R                   R                  U R                  S 5        [        [        U ]  U5      $ r>   )rb  r  r\  r   r   r|   )rs   rH   r   s     r"   r|   _DeferredMapperConfig.mape  s.    $))T**D5i@@r$   r[  )T)rn   r   r   r   r   ro   rb  r~   propertyr!   setterr   ra  r   rn  r   r  r   r|   r   r   r   s   @r"   r   r   (  s    !H   	ZZ( ( $ $ P P 
 
 1 1 @ @* !OO A Ar$   r   c                    SU R                   ;   Ga  [        U[        5      (       aA  [        X5        U R                  R                  USS9  U R                  R                  X5        g[        U[        5      (       az  UR                   HN  n[        U[        5      (       d  M  UR                  b  M)  [        X5        U R                  R                  USS9  MP     U R                  R                  X5        g[        U[        5      (       a  U R                  R                  X5        g[        U[        5      (       aA  UR                  U:w  a1  [        UR                  5      nU R                  R                  X5        g[        R!                  XU5        U R                  R#                  5         g[        R!                  XU5        g)zadd an attribute to an existing declarative class.

This runs through the logic to determine MapperProperty,
adds it to the Mapper, adds a column to the mapped Table, etc.

rF   T)replace_existingN)r(   rN   r   r  r   r9  rF   add_propertyr   r  rG   r   r   r   r   rm   __setattr___expire_memoizations)r!   r   rx   r   s       r"   _add_attributer  j  s<    s||#eV$$ ,MM'''ENN''3~..}}c6**syy/@(2MM//d/K % NN''3~..NN''3122uyyC7G $EII.ENN''3Su-NN//15)r$   c                    SU R                   ;   a  XR                   ;   a  U R                  R                  (       do  U R                   U   n[        U[        [
        [        [        45      (       a  [        S5      e[        R                  X5        U R                  R                  5         g [        R                  X5        g )NrF   z<Can't un-map individual mapped attributes on a mapped class.)r(   rF   _dispose_calledrN   r   r   r   r   NotImplementedErrorrm   __delattr__r  )r!   r   rx   s      r"   _del_attributer    s     	$<<..S!FNN<NO
 
 &N  S&NN//1"r$   c                     [        U 5      nU H=  n[        X#5      (       d  [        U< SUR                  < 35      e[	        XX   5        M?     g)a%  A simple constructor that allows initialization from kwargs.

Sets attributes on the constructed instance using the names and
values in ``kwargs``.

Only keys that are present as
attributes of the instance's class are allowed. These could be,
for example, any mapped columns or relationships.
z$ is an invalid keyword argument for N)rm   r:   	TypeErrorrn   r   )rs   kwargsrc   r  s       r"   _declarative_constructorr    sI     :Dt>?O  	# r$   rt   c                 R    UR                   c  Xl         UR                  c  Xl        g g r>   )r   rU   )r   columns     r"   r  r    s%    zz
{{ r$   )F)8r   
__future__r   r  r_  sqlalchemy.ormr   r    r   r   rk  r	   r   r
   r   r6   r   r   descriptor_propsr   r   
interfacesr   r   rZ   r   r   r   r   sqlr   
sql.schemar   r   r   r#   r+   r8   r,   rC   rI   preload_modulerQ   rV   r'   r?   rE   rb   r   r   r  r  r  rn   r  r   r$   r"   <module>r     s   / &   % *   ! - * "   / - & $ &        ("J G
 ./@ 0@
=F =@A!m A!Hz
] z
z ./	 0	?A2 ?AD*B#*$& %/  !r$   