
    ,h                   V	   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
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KJr1  S'S)KJ2r2  S'S*KJ3r3  S'S+KJ4r4  S'SKJr  S'SK4Jr5  S'S,K4J6r6  S'S-K7J8r8  S'S.K7J9r9  S'S/K:J;r;  \
(       a  S
S0K<J=r=  S
S1KJ>r>  S'S2K?J@r@        SdS4 jrA\R                  R                  S3S3S59 " S6 S7\&5      5       rD\3R                  \R                  R                  S8S3S59 " S9 S:\&5      5       5       rF\3R                  \R                  R                  S8S;9 " S< S=\F5      5       5       rG\3R                  \R                  R                  S8S8S>9\R                  R                  S8S8S8S?9\R                  R                  S8S@9 " SA SB\&5      5       5       5       5       rH " SC SD5      rI " SE SF\&5      rJ\3R                  \R|                  R                  S8S@9 " SG SH\&5      5       5       rK\3R                  \R|                  R                  SISJ9\R|                  R                  SSJ9 " SK SL\J5      5       5       5       rL\3R                  \R|                  R                  S8SJ9\R|                  R                  SMSJ9\R|                  R                  SNSJ9\R|                  R                  SOSJ9\R|                  R                  SPSJ9 " SQ SR\J\R                  \3R                  5      5       5       5       5       5       5       rO " SS ST5      rP " SU SV\J5      rQ\R|                  R                  SWSJ9 " SX SY\Q5      5       rR\3R                  \R|                  R                  SZSJ9 " S[ S\\Q5      5       5       rS\3R                  \R|                  R                  S]SJ9\R|                  R                  S3SJ9 " S^ S_\J5      5       5       5       rT\3R                  \R|                  R                  S`SJ9 " Sa Sb\Q\R                  5      5       5       rUSc rVg)ezTsqlalchemy.orm.interfaces.LoaderStrategy
implementations, and related MapperOptions.    )annotationsN)Any)Dict)Optional)Tuple)TYPE_CHECKING)Union   )
attributes)exc)
interfaces)loading)path_registry)
properties)query)relationships)
unitofwork)util)_DEFER_FOR_STATE)_RAISE_FOR_STATE)_SET_DEFERRED_EXPIRED)ATTR_WAS_SET)LoaderCallableStatus)PASSIVE_OFF)PassiveFlag)_column_descriptions)ORMCompileState)ORMSelectCompileState)QueryContext)LoaderStrategy)StrategizedProperty)_state_session)InstanceState)Load)_none_only_set)AliasedClass   )event)inspect)log)sql)visitors)LABEL_STYLE_TABLENAME_PLUS_COL)Select)Literal)Mapper)RelationshipProperty)ColumnElementFc	                @  ^^^^ / n
U=(       a    U R                   mU(       a&  U R                  (       a  U
R                  [        5        U R                  U R
                  R                  ;   a<  U R
                  R                  U R                     u  mmU
R                  UU4S j5        U(       a  U
R                  [        R                  5        U(       a:  U R                  mT(       a'  U R                  (       a  U
R                  UU4S j5        UR                   H  nXR                  R                  U R                  5      L d  M,  UR                  R                  U R                  5      (       a  MX  [         R"                  " UR$                  U R                  4U TUUU=(       a/    U R                  =(       d    U R&                  [(        R*                  L UUUUU(       + =(       d    U R,                  (       + U R.                  S.U	D6nU
 H  nU" X5        M     GM     g )Nc                H   > [         R                  " XR                  T40 TD6$ N)orm_util_validator_eventskey)descpropfnoptss     Q/var/www/auris/envauris/lib/python3.13/site-packages/sqlalchemy/orm/strategies.py<lambda>%_register_attribute.<locals>.<lambda>\   s!    x99hh &*     c                4   > [         R                  " U TT5      $ r5   )r   backref_listeners)r9   r:   backrefuselists     r=   r>   r?   j   s    :#?#?'7$r@   )parent_tokenrD   compare_function	useobjecttrackparenttypecallable	callable_active_history
impl_classsend_modified_eventsdoc)rD   single_parentappendsingle_parent_validatorr8   parent
validatorsr   track_cascade_eventsback_populates_effective_sync_backrefself_and_descendants_propsgetclass_manager_attr_has_implr   register_attribute_implclass_	directionr   	ONETOMANYviewonlyrN   )r:   mapperrG   rF   rI   rJ   proxy_propertyrK   rL   kwlisten_hooksmr9   hookrC   r;   r<   rD   s                 @@@@r=   _register_attributerg   F   s    L(DLLGT''34xx4;;)));;))$((3D	
 J;;< %%t33" ((88<<HH
 
//00::55 "!1#% && >~~)=)==)#-%)2]%G$--6GHH#$ %D* %T  %3 )r@   )
instrumentdeferredc                  B   ^  \ rS rSrSrSrU 4S jr SS jrS rSr	U =r
$ )UninstrumentedColumnLoader   zRepresent a non-instrumented MapperProperty.

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

)columnsc                Z   > [         TU ]  X5        U R                  R                  U l        g r5   )super__init__parent_propertyrm   selfrR   strategy_key	__class__s      r=   rp   #UninstrumentedColumnLoader.__init__   s#    .++33r@   c                x    U R                    H*  nU(       a  UR                   U   nUR                  X5        M,     g r5   )rm   _append_dedupe_col_collection)	rs   compile_statequery_entitypathloadoptadaptercolumn_collectionkwargscs	            r=   setup_query&UninstrumentedColumnLoader.setup_query   s1     AOOA&77M r@   c	                    g r5    	rs   contextrz   r{   r|   ra   resultr}   
populatorss	            r=   create_row_processor/UninstrumentedColumnLoader.create_row_processor   s     	r@   r5   )__name__
__module____qualname____firstlineno____doc__	__slots__rp   r   r   __static_attributes____classcell__ru   s   @r=   rk   rk      s)     I4 N r@   rk   Tc                  H   ^  \ rS rSrSrSrU 4S jr S	S jrS rS r	Sr
U =r$ )
ColumnLoader   z8Provide loading behavior for a :class:`.ColumnProperty`.)rm   is_compositec                   > [         TU ]  X5        U R                  R                  U l        [	        U R                  S5      U l        g )Ncomposite_class)ro   rp   rq   rm   hasattrr   rr   s      r=   rp   ColumnLoader.__init__   s9    .++33#D$8$8:KLr@   c	                "   U R                    HH  n
U(       a-  U(       a  UR                  U
5      n
U
c    g OUR                   U
   n
UR                  X5        MJ     U R                   S   nU(       a  UR                   U   nUc  g XU R                  '   g Nr   )rm   adapt_check_presentrx   rq   )rs   ry   rz   r{   r|   r}   r~   memoized_populatorscheck_for_adaptr   r   fetchs               r=   r   ColumnLoader.setup_query   s     A"33A6Ay !  *A77M  QOOE*E} 49D001r@   c                   SU l         U R                  S   R                  nU R                  R                  =(       dg    U R                  S   R
                  =(       dG    UR                  S L=(       a2    UR                  R                  UR                  S 5      U R                  L n[        U R                  USUR                  US9  g )NTr   F)rG   rF   rK   )is_class_levelrm   typerq   rK   primary_keyversion_id_col_columntopropertyrY   rg   compare_values)rs   ra   coltyperK   s       r=   init_class_attribute!ColumnLoader.init_class_attribute   s    ",,q/&&   // ||A** %%T1 (,,001F1FM''( 	 	  $33)	
r@   c	                   U R                    HT  n	U(       a  UR                   U	   n	UR                  U	S5      n
U
(       d  M4  US   R                  U R                  U
45          g    US   R                  U R                  S45        g NFquickexpireT)rm   _getterrP   r8   )rs   r   rz   r{   r|   ra   r   r}   r   colgetters              r=   r   !ColumnLoader.create_row_processor  su     <<Cooc*^^C/Fv7#**DHHf+=>   x ''4(89r@   )rm   r   r   F)r   r   r   r   r   r   rp   r   r   r   r   r   r   s   @r=   r   r      s.     C)IM :B
,: :r@   r   )query_expressionc                  :   ^  \ rS rSrU 4S jrS rS rS rSrU =r	$ )ExpressionColumnLoaderi  c                   >^ [         TU ]  X5        [        R                  " 5       R	                  S 5      m[        U4S jU R                  R                   5       5      U l        g )Nc              3  N   >#    U  H  oR                  T5      (       + v   M     g 7fr5   )compare).0r   nulls     r=   	<genexpr>2ExpressionColumnLoader.__init__.<locals>.<genexpr>)  s!      ,
)EA		$)Es   "%)	ro   rp   r+   r   labelanyrq   rm   _have_default_expression)rs   rR   rt   r   ru   s      @r=   rp   ExpressionColumnLoader.__init__"  sN    .
 xxz%(+ ,
)-)=)=)E)E,
 )
%r@   c                b   S n	U(       a  UR                   (       a  UR                   n	O'U R                  (       a  U R                  R                  n	U	c  g U	 H*  n
U(       a  UR                  U
   n
UR	                  X5        M,     U	S   nU(       a  UR                  U   nUc  g XU R                  '   g r   )_extra_criteriar   rq   rm   rx   )rs   ry   rz   r{   r|   r}   r~   r   r   rm   r   r   s               r=   r   "ExpressionColumnLoader.setup_query-  s     w..--G****22G?AOOA&77M 
 
OOE*E} 49D001r@   c	                D   U(       a  UR                   (       a  UR                   n	U	 HT  n
U(       a  UR                  U
   n
UR                  U
S5      nU(       d  M4  US   R                  U R                  U45          g    US   R                  U R                  S45        g g g r   )r   rm   r   rP   r8   )rs   r   rz   r{   r|   ra   r   r}   r   rm   r   r   s               r=   r   +ExpressionColumnLoader.create_row_processorR  s     w..--G!//#.CU36w'..&/AB  8$++TXXt,<= /7r@   c                    SU l         [        U R                  USU R                  S   R                  R
                  SS9  g )NTFr   )rG   rF   accepts_scalar_loader)r   rg   rq   rm   r   r   rs   ra   s     r=   r   +ExpressionColumnLoader.init_class_attributel  s;    "  !\\!_11@@"'	
r@   )r   r   )
r   r   r   r   rp   r   r   r   r   r   r   s   @r=   r   r     s    	
#:J>4	
 	
r@   r   )ri   rh   )ri   rh   	raiseload)
do_nothingc                  T   ^  \ rS rSrSrSrU 4S jrS rS r SS jr	S r
S	 rS
rU =r$ )DeferredColumnLoaderix  zAProvide loading behavior for a deferred :class:`.ColumnProperty`.)rm   groupr   c                  > [         TU ]  X5        [        U R                  S5      (       a  [	        S5      eU R
                  R                  SS5      U l        U R                  R                  U l        U R                  R                  U l	        g )Nr   z8Deferred loading for composite types not implemented yetr   F)
ro   rp   r   rq   NotImplementedErrorstrategy_optsrY   r   rm   r   rr   s      r=   rp   DeferredColumnLoader.__init__  sv    .4''):;;%J  ++//UC++33))//
r@   c	           
     P   UR                   (       a  UR                  R                  R                  (       a`  U R                  UR                  R                  R                  ;   a2  U R
                  R                  S5      R                  UUUUUUUU5        g U R                  (       d_  U R                  (       a  U R
                  R                  n	OU R
                  R                  n	US   R                  U R                  U	45        g US   R                  U R                  S45        g )N)ri   Frh   Tnewr   F)refresh_stater   _compile_options_only_load_propsr8   rq   _get_strategyr   r   r   _raise_column_loader_deferred_column_loaderrP   )
rs   r   rz   r{   r|   ra   r   r}   r   set_deferred_for_local_states
             r=   r   )DeferredColumnLoader.create_row_processor  s    * !!..??GMM::KKK  ..;""	 $$~~((== -
 ((@@ - u$$dhh0L%MNx ''5(9:r@   c           	         SU l         [        U R                  USU R                  S   R                  R
                  U R                  SS9  g )NTFr   )rG   rF   rJ   load_on_unexpire)r   rg   rq   rm   r   r   _load_for_stater   s     r=   r   )DeferredColumnLoader.init_class_attribute  sD    "  !\\!_11@@**"	
r@   c	           	        UR                   R                  (       a  U R                  R                  (       d  U(       a=  [	        U R
                  5      R                  U R                  R                  5      (       d]  U(       a?  U R                  (       a.  UR                  R                  SU R                  -  S5      (       d  U(       aC  U R                  U;   a3  U R                  R                  S5      R                  " UUUUUUU40 U	D6  g U R                  (       a  [         XpR                  '   g U R"                  (       d  [$        XpR                  '   g [&        XpR                  '   g )Nzundefer_group_%sFr   )compile_options_render_for_subqueryrq   _renders_in_subqueriessetrm   intersectionrR   _should_undefer_in_wildcardr   
local_optsrY   r8   r   r   r   r   r   r   r   )
rs   ry   rz   r{   r|   r}   r~   r   only_load_propsrc   s
             r=   r    DeferredColumnLoader.setup_query  s    --BB((?? %22KK;; 
 JJ&&**&3U   DHH$?  ..;k !#    8M 4 458H 4 458H 4 45r@   c                   UR                   (       d  [        R                  $ U[        R                  -  (       d  [        R
                  $ UR                  R                  nU R                  (       a{  UR                   Vs/ s Hc  n[        U[        5      (       d  M  [        UR                  [        5      (       d  M;  UR                  U R                  :X  d  MW  UR                   PMe     nnOU R                   /nU Vs/ s H  ofUR                  ;   d  M  UPM     nn[        U5      nUc=  [         R"                  " S[$        R&                  " U5      < SU R                   < S35      eU R(                  (       a  U R+                  XS5        [,        R.                  " UR                  U[1        U5      [2        5        [        R4                  $ s  snf s  snf )NParent instance zB is not bound to a Session; deferred load operation of attribute '' cannot proceedraise)r8   r   
ATTR_EMPTYr   SQL_OKPASSIVE_NO_RESULTmanagerra   r   iterate_properties
isinstancer!   strategyr   
unmodifiedr"   orm_excDetachedInstanceErrorr6   	state_strr   _invoke_raise_loadr   load_scalar_attributesr   r   r   )	rs   statepassivelocalparentptoloadkr   sessions	            r=   r   $DeferredColumnLoader._load_for_state  sh   yy'222+++'999mm**:: %777Aa!45  qzz+?@  GGtzz)	 7  F hhZF #<Fq5+;+;&;F< '?// %%e,dhh8  >>##EG<&&LL%U[	
 $0009 =s$   ?G
G
=G
G
=GGc                8    [         R                  " SU < S35      e)N'z(' is not available due to raiseload=Truesa_excInvalidRequestErrorrs   r  r  lazys       r=   r   'DeferredColumnLoader._invoke_raise_load'  s    ((=AC
 	
r@   )rm   r   r   r   r5   )r   r   r   r   r   r   rp   r   r   r   r   r   r   r   r   s   @r=   r   r   x  s:     L/I01;f

* 1If&1P
 
r@   r   c                  F    \ rS rSrSrSSS jjr\R                  4S jrSr	g)	LoadDeferredColumnsi-  z7serializable loader object used by DeferredColumnLoaderc                    Xl         X l        g r5   r8   r   )rs   r8   r   s      r=   rp   LoadDeferredColumns.__init__0  s    "r@   c                    U R                   nUR                  R                  nUR                  U   nU R                  (       a  SnOSnUR                  U5      nUR                  X5      $ )N)ri   Tr   )r   T)r  r   )r8   r   ra   rX   r   r   r   )rs   r  r  r8   r  r:   rt   r   s           r=   __call__LoadDeferredColumns.__call__4  sa    hhmm**!!#&>>L FL%%l3''77r@   r  Nr   )r8   strr   bool)
r   r   r   r   r   rp   r   r   r  r   r   r@   r=   r  r  -  s    A# '1&<&< 8r@   r  c                  6   ^  \ rS rSrSrSrU 4S jrS rSrU =r	$ )AbstractRelationshipLoaderiE  z0LoaderStratgies which deal with related objects.)ra   targetrD   entityc                   > [         TU ]  X5        U R                  R                  U l        U R                  R                  U l        U R                  R
                  U l        U R                  R                  U l        g r5   )ro   rp   rq   ra   r  r  rD   rr   s      r=   rp   #AbstractRelationshipLoader.__init__J  s\    .**11**11**11++33r@   c	           
     d    U R                   R                  S5      R                  UUUUUUUU5      $ )N))r  	immediate)rq   r   r   r   s	            r=   #_immediateload_create_row_processor>AbstractRelationshipLoader._immediateload_create_row_processorQ  sC     ##11$


	
	
r@   )r  ra   r  rD   )
r   r   r   r   r   r   rp   r$  r   r   r   s   @r=   r  r  E  s    :7I4
 
r@   r  c                      \ rS rSrSrSrg)DoNothingLoaderij  zRelationship loader that makes no change to the object's state.

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

r   N)r   r   r   r   r   r   r   r@   r=   r'  r'  j  s    r@   r'  noload)r  c                  (    \ rS rSrSrSrS rS rSrg)NoLoaderiv  zIProvide loading behavior for a :class:`.Relationship`
with "lazy=None".

r   c                f    SU l         [        U R                  USU R                  R                  S9  g )NT)rG   rI   )r   rg   rq   collection_classr   s     r=   r   NoLoader.init_class_attribute  s0    "  -->>		
r@   c	                R   ^  U 4S jn	US   R                  T R                  U	45        g )Nc                   > TR                   (       a"  [        R                  " XTR                  5        g S UTR                  '   g r5   )rD   r   init_state_collectionr8   )r  dict_rowrs   s      r=   invoke_no_load5NoLoader.create_row_processor.<locals>.invoke_no_load  s+    ||00txxH"&dhhr@   r   )rP   r8   )
rs   r   rz   r{   r|   ra   r   r}   r   r3  s
   `         r=   r   NoLoader.create_row_processor  s&    	' 	5  $((N!;<r@   )r   N)	r   r   r   r   r   r   r   r   r   r   r@   r=   r*  r*  v  s    
 I
=r@   r*  selectr   raise_on_sqlbaked_selectc                     ^  \ rS rSr% SrSrS\S'   S\S'   S\S'   S\S	'   S
\S'       SU 4S jjrS rS r	S r
S rSSSS\R                  4S jrS r\R                   " S5      S 5       rS rSrU =r$ )
LazyLoaderi  zlProvide loading behavior for a :class:`.Relationship`
with "lazy=True", that is loads when first accessed.

)
_lazywhere_rev_lazywhere_lazyload_reverse_option	_order_byuse_getis_aliased_class_bind_to_col_equated_columns_rev_bind_to_col_rev_equated_columns_simple_lazy_clause_raise_always_raise_on_sqlzColumnElement[bool]r;  zDict[str, ColumnElement[Any]]rA  r<  rC  RelationshipProperty[Any]rq   c                  > [         TU ]  X5        U R                  S   S:H  U l        U R                  S   S:H  U l        [        U R                  5      R                  U l        U R                  R                  nUR                  5       u  U l        U l        U l        UR                  SS9u  U l        U l        U l        U R                  R"                  (       aX  [$        R&                  " U R                  R"                  5       Vs/ s H  n[(        R*                  " USS05      PM     snU l        OS U l        U R.                  R1                  SX R                  5        U R                  (       + =(       a_    U R2                  (       + =(       aG    U R                  R4                  S   R7                  U R                  SS	U R8                  R:                  S
9U l        U R<                  (       a  [?        U R                  5       HZ  nXPR8                  R:                  ;   d  M  U R8                  R:                  U    H  nU R                  U   U R                  U'   M!     M\     U R.                  R1                  SU 5        g g s  snf )Nr  r   r7  T)reverse_direction
_orm_adaptz%s lazy loading clause %sr   Fuse_proxiescompare_keysequivalentsz4%s will use Session.get() to optimize instance loads) ro   rp   r   rF  rG  r)   r  r@  rq   _join_conditioncreate_lazy_clauser;  rA  rB  r<  rC  rD  order_byr   to_listsql_util_deep_annotater>  loggerinforD   _get_clauser   ra   _equivalent_columnsr?  list)rs   rR   rt   join_conditionelemr   r   ru   s          r=   rp   LazyLoader.__init__  s    	.!//77B!//7>I ' 4 E E--==
 --/		
O! ---E		
!% (( !LL)=)=)F)FGGD ''|T.BCGDN
 "DN4dOOL %%% LL ''*22 " KK;;	 3  	 <<D112++999![[<<SA373H3H3M--a0 B 3
 KKF 7s   #I<c           
        SU l         U R                  R                  nU R                  R                  (       a  SnSnOLU R                  R                  [
        R                  Ld  U R                  (       d  U(       a  SnSnOSnSnOS=p4[        U R                  USU R                  U R                  R                  UUS9  g )NTF)rG   rJ   rI   rK   _deferred_history)r   rq   _legacy_inactive_history_stylerK   r^   r   	MANYTOONEr?  rg   r   r,  )rs   ra   r`  rK   r_  s        r=   r   LazyLoader.init_class_attribute   s    "   ?? 	' ..!N %   ***2F2FF<<-!%$)!!&$(!166N  **-->>)/	
r@   c                   ^^ [         R                  " U R                  SS05      nXR                  snm/ mS n[        R
                  " U0 SU05        UU4S jn[        R                  " U0 SU05      nUT4$ )NrK  Tc                    SU l         g )NF)unique)	bindparams    r=   visit_bindparamFLazyLoader._memoized_attr__simple_lazy_clause.<locals>.visit_bindparam+  s
    $Ir@   rf  c                   > U R                   T;   a,  TR                  U R                  TU R                      S 45        g U R                  c)  TR                  U R                  S U R                  45        g g r5   )_identifying_keyrP   r8   callablevalue)rf  bind_to_colparamss    r=   rg  rh  0  sh    ))[8!#I$>$>? ##+y}}dIOODE ,r@   )rT  rU  r;  rA  r,   traversecloned_traverse)rs   	lazywhere	criterionrg  rm  rn  s       @@r=   "_memoized_attr__simple_lazy_clause-LazyLoader._memoized_attr__simple_lazy_clause"  s    ++OOlD1
	 #,->->	;	% 	)R+)GH
	F ,,rK9
	 &  r@   c                   U R                   u  p4Uc-  [        R                  " X4 VVVs/ s H  u  pVouPM	     snnn5      $ U R                  R                  nUR                  5       n	[        R                  " U	5      n
U[        R                  -  (       a  U[        R                  -  n0 nU HQ  u  pVnUbD  U(       a+  U[        R                  -  (       a  UR                  XXb5      nOUR                  XXb5      nX{U'   MS     X;4$ s  snnnf r5   )rE  rT  adapt_criterion_to_nullrq   rR   objr   instance_dictr   INIT_OKLOAD_AGAINST_COMMITTED#_get_committed_state_attr_by_column_get_state_attr_by_column)rs   r  r  rr  
param_keysr8   identrl  ra   or1  rn  s               r=   _generate_lazy_clause LazyLoader._generate_lazy_clauseB  s     $ 8 8	=33D$5CCD  %%,,IIK((+[((({***G!+C w)K)KK"FFeE #<<eE  3K ",   3 Es   Dc                @    [         R                  " SU < SU< S35      e)Nr
  z ' is not available due to lazy='r  r  s       r=   r   LazyLoader._invoke_raise_loadb  s    ((8<dC
 	
r@   Nr   c                   UR                   (       dM  U R                  R                  (       d  UR                  (       a  UR                  (       d  [
        R                  $ UR                   (       + nS n	U R                  =(       a    U(       + =(       d    UR                  (       + n
U[        R                  -  (       d  U
(       a  U[        R                  -  (       d  U(       a  [
        R                  $ U R                  (       aI  U[        R                  -  (       d1  U
(       a  U[        R                   -  (       a  U R#                  XS5        [%        U5      nU(       de  U[        R                  -  (       a  [
        R                  $ [&        R(                  " S[*        R,                  " U5      < SU R                   < S35      eU
(       Gae  U R/                  XU5      n	[
        R                  U	;   a  [
        R                  $ [
        R0                  U	;   a  [
        R0                  $ U R2                  R4                  (       d  [6        R8                  " U	5      (       a  g O[6        R:                  " U	5      (       a  g U R                   UR<                  ;   a(  U[        R>                  -  (       d  [
        R@                  $ URC                  U RD                  U	UUS9nUb  U[
        RF                  L a  g U$ U[        R                  -  (       a  U[        R                   -  (       d  [
        R                  $ U RI                  UUU	UUUUUU5	      $ )Nr   r   z> is not bound to a Session; lazy load operation of attribute 'r   )r  lazy_loaded_from)%r8   rq   load_on_pending_load_pending
session_idr   r   r?  r   r   r   r   NON_PERSISTENT_OKr   rF  NO_RAISERELATED_OBJECT_OKr   r"   r   r   r6   r   _get_ident_for_use_get	NEVER_SETra   allow_partial_pksr%   r   
issupersetdictDEFERRED_HISTORY_LOADr   _identity_lookupr  PASSIVE_CLASS_MISMATCH_emit_lazyload)rs   r  r  r|   extra_criteriaextra_optionsalternate_effective_pathexecution_optionspendingprimary_key_identityr?  r  instances                r=   r   LazyLoader._load_for_stateg  s    yy((88++##'222ii-#,,OK$Nw7N7N3N+,,,W*6667'999 k222 [::: ##EG< '---+===// %%e,dhh8  #'#>#>$  $559MM+===%//3GG+555
 ;;00!../CDD E ",,-ABB EJJ&+"C"CC+888 //$!&	 0 H #3JJJ#Ok000!>!>>+==="" $

 
	
r@   c           
     &   UR                   R                  nU[        R                  -  (       a  UR                  nOUR
                  nUR                  nU R                  R                   Vs/ s H  nU" X&U R                  U   US9PM     sn$ s  snf )Nr  )	r   ra   r   rz  r{  r|  r  r   rB  )rs   r  r  r  instance_mapperget_attrr1  pks           r=   r  !LazyLoader._get_ident_for_use_get  s    --..[777&JJH&@@H

 kk--
- U4#8#8#<gN-
 	
 
s   ,Bzsqlalchemy.orm.strategy_optionsc
                V	  ^ ^ [         R                  R                  mT R                  R	                  5       n
[
        R                  " U
/U
R                  [        [        R                  S9n[        R                  nUSUS.-  nT R                  R                  b0  UR                  T R                   T R                  R                  5      nUR"                  (       + nU(       d  U[$        R&                  -  (       a  [         R(                  " SS05      Ul        T R,                  nUR.                  (       d  U(       a  UR0                  (       a  Uc  UR2                  T R                     nOUT R                     nUR.                  nU(       a8  UR0                  (       a'  SnU[4        R6                  " T R                  U5      4-  nUUl        O6Uc$  UR                   R:                  T R                     nOUT R                     nU(       a  U=R8                  U-  sl        U=R<                  SU0-  sl        U(       aS  T R>                  (       a*  U[@        RB                  -  (       d  T RE                  X$S5        [F        RH                  " UUUUU	S9$ T RJ                  (       a  T RJ                  Ul&        U U4S jnU=RN                  UT R                  44-  sl'        T RQ                  X$5      u  nnU	(       a#  [         RR                  RU                  U	S	U05      n	OS	U0n	T R"                  URV                  ;   a(  U[@        RX                  -  (       d  [Z        R\                  $ U(       a:  [         R^                  " [4        R`                  URc                  5       5      (       a  g O9[         R^                  " [4        Rd                  URc                  5       5      (       a  g T R>                  (       a*  U[@        RB                  -  (       d  T RE                  X$S5        U4Ul3        URi                  UUU	S
9nURk                  5       Rm                  5       Ro                  5       nT Rp                  (       a  U$ [s        U5      nU(       a.  US:  a#  [         Rt                  " ST R                  -  5        US   $ g )N)_raw_columns_propagate_attrs_label_styler   F)_invoke_all_eagers_lazy_loaded_from	autoflush_current_pathr7  )load_optionsr  c                  > TR                   R                   H  nUR                  [        R                  L d  M"  UR
                  (       d  M5  [        UR                  [        5      (       a  MV  TR                  R                  U R                  R                  UR                     5      R                  U5      R                  U 5        M     g r5   )rq   _reverse_propertyr^   r   ra  _use_getr   r   r:  r$   _construct_for_existing_pathr   r  rR   lazyloadprocess_compile_state)compile_contextrevrs   strategy_optionss     r=   _lazyload_reverse4LazyLoader._emit_lazyload.<locals>._lazyload_reverseB  s    ++== MMZ%9%99&s||Z@@$))FF'77EEJJ hsm$9$9/$J >r@   _sa_orm_load_options)r  r
   zKMultiple rows returned with uselist=False for lazily-loaded attribute '%s' r   );r   	preloadedorm_strategy_optionsr  __clause_element__r.   _create_raw_selectr  r-   r   default_compile_optionsr   default_load_optionsrq   	secondaryselect_fromra   r8   r   NO_AUTOFLUSHimmutabledict_execution_optionsr?  r  r   	load_pathr6   LoaderCriteriaOption_with_options_path_registryr   rG  r   r  r   r   load_on_pk_identityr>  _order_by_clauses_with_context_optionsr  
EMPTY_DICT
merge_withr  r  r   r   has_intersection	_none_setvalues
_never_set_where_criteriaexecutere  scalarsallrD   lenwarn)rs   r  r  r  r  r|   r  r  r  r  clauseelementstmtr  r  r?  effective_pathr<   r  lazy_clausern  r   lr  s   `                     @r=   r  LazyLoader._emit_lazyload  s     >>>>668(('*;;7,DD	
 $88"'!&
 	

 ))5##T11;;D ii- g
 7 77&*&8&8+u9M&ND#,,'g.E.E'/!&1E1E!F!9$:N:N!O%%D72211$++~N  "&D%- #\\889M9MNN 6d6J6JKN-//>!BB!!'K4H4H*H''G..$)"3  >>%)^^D"	K 	"" 4 45'
 	
" #88HV $ : :!*L! '!
 HH

"k???'444$$X%7%7II J ""8#6#6HHg0D0D&D##ENC +~&,= ! 
 ((*..0<<MFAq5IIJ../ ay r@   c	                  ^ U R                   mUR                  R                  (       ak  UR                  R                  R
                  (       aF  U R                   UR                  R                  R
                  ;   a  U R                  UUUUUUUU5      $ U R                  (       a  U(       a  UR                  (       aq  [        R                  " UR                  [        TU UUR                  (       a  UR                  U5      OS 5      T5      n	US   R                  U R                   U	45        g UR                  (       d  UR                   (       a'  U4S jn
US   R                  U R                   U
45        g g )Nr   c                *   > U R                  UT5        g r5   )_reset)r  r1  r2  r8   s      r=   reset_for_lazy_callable@LazyLoader.create_row_processor.<locals>.reset_for_lazy_callable  s     UC(r@   )r8   r  _is_user_refreshr   r   r   r$  r   r   r#   "_instance_level_callable_processorrZ   LoadLazyAttribute_generate_extra_criteriarP   populate_existingalways_refresh)rs   r   rz   r{   r|   ra   r   r}   r   set_lazy_callabler  r8   s              @r=   r   LazyLoader.create_row_processor  s8    hh   11..??GMM::KKK;;	 	 ""w73J3J @@$$! #22  88A!	 !" u$$dhh0A%BC&&&*?*?	) u$$dhh0G%HI +@r@   )rA  rB  r;  r>  rF  rG  rC  rD  r<  r@  r   r?  )rR   rH  rt   zTuple[Any, ...])r   r   r   r   r   r   __annotations__rp   r   rs  r  r   r   r  r   r  preload_moduler  r   r   r   r   s   @r=   r:  r:    s    
I  $#//''33..:/:?N:x 
D!@!@
 !%//u
n
 
:;[ <[zEJ EJr@   r:  c                  D    \ rS rSrSrS rS r\R                  4S jr	Sr
g)r  i  az  semi-serializable loader object used by LazyLoader

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

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

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

c                J    Xl         UR                  U l        X0l        X@l        g r5   r8   rt   r|   r  )rs   r8   initiating_strategyr|   r  s        r=   rp   LoadLazyAttribute.__init__  s     /<<,r@   c                    U R                   b  [        R                  " S5        U R                  U R                  U R
                  SS.$ )NzvCan't reliably serialize a lazyload() option that contains additional criteria; please use eager loading for this caser   r  )r  r   r  r8   rt   r|   )rs   s    r=   __getstate__LoadLazyAttribute.__getstate__  sE    *II  88 --|| 	
 	
r@   c                    U R                   nUR                  R                  nUR                  U   nUR                  U R
                     nUR                  UUU R                  U R                  S9$ )N)r|   r  )	r8   r   ra   rX   _strategiesrt   r   r|   r  )rs   r  r  r8   r  r:   r   s          r=   r  LoadLazyAttribute.__call__  sn    hh--..%%c*##D$5$56''LL..	 ( 
 	
r@   )r  r8   r|   rt   N)r   r   r   r   r   rp   r  r   r   r  r   r   r@   r=   r  r    s!    "-
 '1&<&< 
r@   r  c                  &    \ rS rSrSrSrSS jrSrg)
PostLoaderi  z;A relationship loader that emits a second SELECT statement.r   Nc                   UR                   R                  =(       d    [        R                  R                  U-   nUR                  5       n[        R                  " SU05      nU(       a"  UR                  R                  SS 5      nUS:H  n	OS nSn	Ub  U R                  R                  (       d$  [        R                  " SU R                   S35      eUR                  R                  S[        U 5       3U5      nU	(       d  US:  a  USUU4$ U	(       d"  UR!                  S[        U 5       3US	-
  05      n["        R$                  R'                  XU R                  5      (       a  USXx4$ X R                     n
XPR                     nU
R)                  UR*                  S
5      (       dG  U(       a  UR,                  S-  U:  a  USUU4$ O&UR/                  U R0                  5      (       a  USUU4$ USXx4$ )Nsa_top_level_orm_contextrecursion_depthFz'recursion_depth option on relationship z0 not valid for non-self-referential relationship_recursion_depth_r   r
   loaderr'   T)ry   current_pathr6   PathRegistryroot_get_top_level_contextr   r  r   rY   rq   _is_self_referentialr  r  r  idunionr   PostLoadpath_existscontainsr   lengthcontains_mapperra   )rs   r   r{   r|   
join_depthr  top_level_contextr  r  unlimited_recursionpath_w_propeffective_path_w_props               r=   _setup_for_recursionPostLoader._setup_for_recursion  s!   !!..L(2G2G2L2L $::< ..'):;
 %00445FMO"1R"7"O"'&''<<00=++, -88 
 &77;;#BtH:.O '?Q+>"%#	  '$5$;$;+BtH:6!8K%! ''T%9%9
 
 "5*;LL//0 ./C/C D##G$6$6AA(//!3j@&)'	  A '66t{{CC"%#	  t%6GGr@   r5   )r   r   r   r   r   r   r  r   r   r@   r=   r  r    s    EIDHr@   r  r#  c                  >   ^  \ rS rSrSrU 4S jrS rS rS rSr	U =r
$ )ImmediateLoaderiS  r
  c                Z   > [         TU ]  X5        U R                  R                  U l        g r5   ro   rp   rq   r
  rr   s      r=   rp   ImmediateLoader.__init__W  #    ...99r@   c                X    U R                   R                  S5      R                  U5        g N)r  r6  rq   r   r   r   s     r=   r   $ImmediateLoader.init_class_attribute[  $    **!	


v
&r@   c	                   UR                   R                  R                  (       d  g U R                  XX@R                  5      u  n	n
nnU
(       d"  [
        R                  [        R                  -  nO![
        R                  [        R                  -  n[        R                  R                  UU	U R                  U R                  U R                  UUUU5	        g r5   )ry   r   _enable_eagerloadsr  r
  r   PASSIVE_NO_FETCH_RELATEDr   r  r   r   r  callable_for_pathrR   rq   _load_for_path)rs   r   rz   r{   r|   ra   r   r}   r   r  
run_loaderr  r  flagss                 r=   r   $ImmediateLoader.create_row_processor`  s     $$44GG %%gWooN	
 
 77+:N:NNE**[-A-AAE**KK  
	
r@   c	           	        U(       aJ  [        UR                  R                  5      n	UUR                  5       4U	l        UR                  5       n
U	4nOUn
SnU R                  nU R                  R                  S5      nU Hq  u  pUR                  nU(       d  UU;  d  M   UR                  UUUU
US9nU[        [        R                  4;  d  MO  UR                  U5      R                  UUU5        Ms     g )Nr   r  )r  r  r  )r$   r{   r  _recurser   _truncate_recursiver8   rq   r   r  r   r   r   r   get_implset_committed_value)rs   r   r{   states	load_onlyr|   r$  r  r  new_optr  r  r8   
lazyloaderr  	overwriter1  rl  s                     r=   r"  ImmediateLoader._load_for_path  s     7<<../G  "GO (,'?'?'A$$JM'+$Mhh))778MN
 &EJJECu,"22"/-E&7 3   (::!  NN3';;ue !'r@   )r   r   r   r   r   rp   r   r   r"  r   r   r   s   @r=   r  r  S  s"    I:'
(
T* *r@   r  subqueryc                     ^  \ 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 S5      rS rS rS rS rSrU =r$ )SubqueryLoaderi  r  c                Z   > [         TU ]  X5        U R                  R                  U l        g r5   r  rr   s      r=   rp   SubqueryLoader.__init__  r  r@   c                X    U R                   R                  S5      R                  U5        g r  r  r   s     r=   r   #SubqueryLoader.init_class_attribute  r  r@   c                   UnUR                   n[        R                  " US   5      nU R                  R	                  U5      (       a*  U R
                  US   L a  U R                  U R
                  pOXbS   pU(       aj  UR                  U   R                  R                  U   n	[        U5      [        U	5      -
  n
U
(       a%  U	[        R                  R                  X** S  5      -  n	OUn	UR                  nU Vs/ s H=  n[        U	R                   S   R                  UR                   U   R"                  5      PM?     nnX}X4$ s  snf )Nr   r
   )r{   r6   _class_to_mapperrR   isarq   	_entitiesentity_zeror  r  r   r  coercelocal_columnsgetattrr  r   r8   )rs   orig_query_entity_index	subq_pathcurrent_compile_stateis_rootgiven_subq_pathsubq_mapperleftmost_mapperleftmost_propnew_subq_path
additionalleftmost_colsr   leftmost_attrs                 r=   _get_leftmostSubqueryLoader._get_leftmost  sF    $NN	//	!= KKOOK(($$	!4-1[[$:N:N]-8A,] 2;;'k..8M Y#m*<<J!;!;!B!Bkl+"  ,M%33 #

 #	 ""1%,,11!488 # 	 
 }KK
s   :AEc           	        UR                  5       R                  S 5      n[        R                  R	                  [        R                  5      nUR
                  R                  UR
                  5        UnUR                  (       dG  SUl        UR                  R                  " U/[        X!S9 V	s1 s H  n	U	S   c  M  U	S   iM     sn	Q76   UR                  U V
s/ s H;  n
[        R                  R                  [        R                   R"                  U
5      PM=     sn
UR%                  5       5      nXl        UR(                  nUSL a  SUl        OXUcU  U Vs1 s H  oR,                  iM     sn H5  n[/        U5      R1                  UR2                  5      (       a  M.  SUl          O   UR4                  (       d  SUl        UR*                  SL aK  UR6                  (       a:  [8        R:                  " XR6                  5      nU(       a  UR=                  X-   5        UR?                  [@        5      RC                  5       n[D        RF                  " UUSS9nU$ s  sn	f s  sn
f s  snf )NF)ry   r  Tr   use_mapper_path)$_clone	correlater   Query__new____dict__update	_from_obj_enable_assertionsr  non_generativer   _adapt_col_listr+   	coercionsexpectrolesColumnsClauseRole_get_current_adapterr  distinct_target_key	_distincttabler   r  r   _has_row_limiting_clauser  rT   expand_column_list_from_order_by_set_entitiesset_label_styler-   r1  r6   r&   )rs   orig_compile_state
orig_queryrF  rK  leftmost_relationshiporig_entityqq2entr  target_colsr`  r   tto_addembed_q
left_aliass                     r=   _generate_from_original_query,SubqueryLoader._generate_from_original_query  s    ))$/ [[  -
1::& {{#(A MM((	  4"   8}	 "CM 	0 )88 '&A $$SYY%@%@!D& 335
 %3GG$&AK ( (33{!gg{3;'221==AA"&AK 4 ))"$A;;$1#6#6 >>00F  45 ##$BCLLN**Wd

 A. 4s   /
I
=	I
AII!c                   / n[        UR                  5       5      n[        U5       H[  u  nu  pgUS:  a/  XES-
     S   R                  nUR	                  U5      (       a  UOUn	OUn	UR                  XR                  45        M]     [        U5      S:  a  Un
ON[        US   S   5      nUR                  (       a  UR                  n
O[        R                  " UR                  SS9n
U R                  R                  nU Vs/ s H/  n[        XR                   R"                  U   R                  5      PM1     nnX>U
4$ s  snf )Nr   r
   r'   r  TrO  )rZ  pairs	enumeratera   r:  rP   r8   r  r)   r@  r  r6   r&   rq   r>  r?  rR   r   )rs   rr  rA  to_joinrv  ira   r:   prev_mapper	to_appendparent_aliasrW  
local_colsr   
local_attrs                  r=   _prep_for_joinsSubqueryLoader._prep_for_joinsZ  s.   Y__&'!*5!1A~1u $El1o44+6??6+B+BK	"	NNIxx01 "2& w<! &L72;q>*D$$#{{  (44KK  ))77
  
 L++"?"?"B"F"FG 	 
 L00	
s    6D<c                   [        U5      nUS:X  a#  [        X2S   S   5      R                  U5      /nGOuUS:X  aB  [        X2S   S   5      R                  U5      [        XBS   S   5      R                  U5      /nGO-US:  Ga&  USS  Vs/ s HM  n[        US   5      R                  (       d  [
        R                  " US   5      OUS   R                  US   4PMO     nn/ n	U(       am  UR                  S5      n[        US   US   5      n
U(       a  U
R                  US   S   5      n
OU
R                  U5      n
U	R                  U
5        U(       a  Mm  [        X2S   S   5      R                  U	S   R                  5      /U	-   [        XBS   S   5      R                  U5      /-   nU H  n
UR                  U
5      nM     U$ s  snf )Nr
   r   r'   r  )r  r?  of_typer)   r@  r6   r&   r  poprP   rR   join)rs   rk  rx  rr  r|  effective_entityltjitemmiddleinnerattrs              r=   _apply_joinsSubqueryLoader._apply_joins  s    'l!8
AJqM2::;KLG AX
AJqM2::<Hbk!n5==$G 1W $AbM
 *D  'tAw/@@ !--d1g6!!W^^G *  
 Ezz!}tAwQ0<<q	!5D<<5DT" & QZ]3;;E!HOOLM L"+a.9AA(  DtA  I
s   AGc                    UR                   nU(       aE  UR                  (       a4  U[        R                  " U R                  UR                  U5      5      4-  nUR                  U5      nUR                  " U6 nU$ r5   )r  r   r6   r  r  r  _with_current_pathoptions)	rs   r   rk  rA  rewritten_pathrh  r  r|   new_optionss	            r=   _setup_optionsSubqueryLoader._setup_options  sq    " !..w..--KK44W= K   0II{#r@   c                   ^  T R                   R                  (       a"  U 4S jnUR                  UT R                   5      nU$ )Nc                   > U =R                   [        [        R                  " TR                  R
                  5      5      -  sl         g r5   eager_order_bytupler   rS  rq   rR  r  rs   s    r=   _setup_outermost_orderbyISubqueryLoader._setup_outermost_orderby.<locals>._setup_outermost_orderby  s3    ..%LL!5!5!>!>?3 .r@   )rq   rR  _add_context_option)rs   rk  r  s   `  r=   r  'SubqueryLoader._setup_outermost_orderby  s;    ((
 %%($*>*>A r@   c                  4    \ rS rSrSrSrS rS rS rS r	Sr
g	)
SubqueryLoader._SubqCollectionsi  zGiven a :class:`_query.Query` used to emit the "subquery load",
provide a load interface that executes the query at the
first moment a value is needed.

r  r  r  rn  subq_datac                    UR                   U l         UR                  U l        UR                  U l        UR                  =(       d    0 U l        X l        S U l        g r5   r  )rs   r   r  s      r=   rp   (SubqueryLoader._SubqCollections.__init__  sG     #??DL%,%>%>D" ' 4 4D!...BDKIDJr@   c                r    U R                   c  U R                  5         U R                   R                  X5      $ r5   )r  _loadrY   )rs   r8   defaults      r=   rY   #SubqueryLoader._SubqCollections.get	  s(    zz!

::>>#//r@   c                   [         R                  " [        5      U l        U R                  nUR
                  b   eUR                  U R
                  5      nU R                  R                  (       a  UR                  5       n[        UR                  U R                  5      5      n[        R                  " US 5       H*  u  p4U R                  U   R                  S U 5       5        M,     g )Nc                    U SS  $ )Nr
   r   xs    r=   r>   7SubqueryLoader._SubqCollections._load.<locals>.<lambda>  s
    !AB%r@   c              3  *   #    U  H	  oS    v   M     g7f)r   Nr   r   vvs     r=   r   8SubqueryLoader._SubqCollections._load.<locals>.<genexpr>  s     $7QrUQ   )collectionsdefaultdictrZ  r  r  r  with_sessionr  _populate_existingr  rn  	itertoolsgroupbyextend)rs   rk  rowsr  vs        r=   r  %SubqueryLoader._SubqCollections._load  s    $006DJ		A99$$$t||,A  33'') -.D!))$@

1$$$7Q$77 Ar@   c                @    U R                   c  U R                  5         g g r5   )r  r  )rs   r  r1  r2  s       r=   r  &SubqueryLoader._SubqCollections.loader  s    zz!

 "r@   )r  r  r  rn  r  r  N)r   r   r   r   r   r   rp   rY   r  r  r   r   r@   r=   _SubqCollectionsr    s"    	
			0
	8"	r@   r  c           	        UR                   nUR                  R                  (       a  UR                  R                  (       a  g UR                  R                  U5      nSUl        X0R                     nUR                  UR                  SS 5      n	U	b  U	n
OU R                  n
UR                  R                  R                  S[        R                  R                  [        R                  R                  45      u  pU[        R                  R                  L nX-   nX-   nUR                  R                  R                  S[         4UR                  5      n["        R$                  " US5      nUR&                  (       aB  UR(                  R*                  c  [,        R.                  " SU < SU< S35        UR0                  nUR3                  US	S
9nU R5                  UUUU5      u  nnnnU R7                  UUUUUU5      n[        R8                  " U
5      nUR                  R                  R;                  UR<                  S[         4USX405      Ul        UR?                  S	5      nU RA                  UU5      u  nnnURB                  " U6 nU RE                  UUUUU
5      nU RG                  UUUUUU
U5      nU RI                  U5      nU$ )NTpath_with_polymorphic)subquery_pathsNrh  ormzsubqueryloader for "z!" must invoke lambda callable at z in order to produce a new query, decreasing the efficiency of caching for this statement.  Consider using selectinload() for more effective full-lambda cachingF)legacy)%ry   r   r  _for_refresh_stater;  indexloaders_require_bufferingrq   rY   r   r  r   r  r6   r  r   r3  r   _get_plugin_class_for_plugin_is_lambda_elementr  r  r   r  	_resolved_create_entities_collectionrL  rs  rS  r  r  _set_enable_single_critr  add_columnsr  r  r  )rs   r   rz   r{   r  r|   r}   ry   r@  with_poly_entityr  rA  r  rC  rh  compile_state_clsrg  rF  rK  ri  rr  rk  rx  r~  r|  s                            r=   _setup_query_from_rowproc(SubqueryLoader._setup_query_from_rowproc#  s     ----@@,,??"/"9"9"?"?"M,0)(()  88$$&=t
 '/#{{$+MM$D$D$H$H$""'')>)>)C)CD%
!	 x44999$	'. ]]5599>*GMM

 ,HH
 ((##55=		 Z) $--J
 /JJu K 
 #	
	
! 77!

 KK()&}}??JJ%%~.
(9*E 
 %%e,,0,@,@	-
)\ MM:&w
L2B
 
 ))!,r@   c	           
        U(       aS  UR                   R                  b<  UR                   R                  R                  (       a  [        R                  " SS5        UR
                  (       a  U R                  UUUUUUUU5      $ U R                  XX@R                  5      u  p  n	U
(       d  g [        UR                   [        5      (       d  g U R                  R                  U R                     R                  R                  (       d  [         R"                  " SU -  5      e[%        U5      S:X  a2  [&        R(                  " UR*                  U R                  5      (       d  g O*[&        R(                  " US   U R                  5      (       d  g U R-                  UUUUS   UU5      nUc  g UR.                  b   eX0R0                     nU R0                  R2                  nUR5                  UR6                  S5      nUc.  U R9                  X5      nUR;                  UR6                  SU5        U(       a  U Vs/ s H  oR<                  U   PM     nnU R>                  (       a  U RA                  XXU5        g U RC                  XXU5        g s  snf )NzThe subqueryload loader option is not compatible with DML statements such as INSERT, UPDATE.  Only SELECT may be used.This warning will become an exception in a future release.2.0J'%s' does not support object population - eager loading cannot be applied.r
   r  r  )"ry   	statementis_dmlr   warn_deprecatedr   r$  r  r
  r   r   rR   rZ   r8   implsupports_populationr  r  r  r6   _entity_isar<  r  r  rq   r>  rY   r   r  r   rm   rD   _create_collection_loader_create_scalar_loader)rs   r   rz   r{   r|   ra   r   r}   r   _r#  r  r}  r  r   s                  r=   r   #SubqueryLoader.create_row_processor  sO    %%//;%%//66  M 	   ;;	 	 #777OO
q! '//1FGG {{((277KK,,@BFG  t9>''(@(@$++NN O%%d2h<<--H
 <||###(()))77

 hhw11=A//>KHHW''D6@Aj//!,jJA<<*** &&* Bs   4Jc                D  ^ ^^^ UR                  U5      mUU U4S jmUU 4S jnUS   R                  T R                  T45        US   R                  T R                  U45        UR                  (       a+  US   R                  T R                  TR                  45        g g )Nc                   > TR                   " T" U5      S5      nU R                  TR                  5      R                  XU5        g )Nr   )rY   r)  r8   r*  )r  r1  r2  
collectionr  rs   tuple_getters       r=   load_collection_from_subqKSubqueryLoader._create_collection_loader.<locals>.load_collection_from_subq  s8    $c):B?JNN488$88jr@   c                :   > TR                   U;  a
  T" XU5        g g r5   r8   )r  r1  r2  r  rs   s      r=   &load_collection_from_subq_existing_rowXSubqueryLoader._create_collection_loader.<locals>.load_collection_from_subq_existing_row  s    xxu$)%< %r@   r   existingeager_tuple_getterrP   r8   invoke_all_eagersr  )	rs   r   r   r  r}  r   r  r  r  s	   `  `   @@r=   r  (SubqueryLoader._create_collection_loader  s     ++J7		= 	5  $((,E!FG:%%XX=>	
 $$w&&+2D2D'EF %r@   c                D  ^ ^^^ UR                  U5      mUU U4S jmUU 4S jnUS   R                  T R                  T45        US   R                  T R                  U45        UR                  (       a+  US   R                  T R                  TR                  45        g g )Nc                   > TR                   " T" U5      S5      n[        U5      S:  a  [        R                  " ST-  5        US   nU R	                  TR
                  5      R                  XU5        g )Nr5   r
   LMultiple rows returned with uselist=False for eagerly-loaded attribute '%s' r   )rY   r  r   r  r)  r8   r*  )r  r1  r2  r  scalarr  rs   r  s        r=   load_scalar_from_subqCSubqueryLoader._create_scalar_loader.<locals>.load_scalar_from_subq,  sg    $c):GDJ:"		GIMN
  ]FNN488$88vNr@   c                :   > TR                   U;  a
  T" XU5        g g r5   r  )r  r1  r2  r  rs   s      r=   "load_scalar_from_subq_existing_rowPSubqueryLoader._create_scalar_loader.<locals>.load_scalar_from_subq_existing_row7  s    xxu$%eC8 %r@   r   r  r  r  )	rs   r   r   r  r}  r   r  r  r  s	   `  `   @@r=   r  $SubqueryLoader._create_scalar_loader'  s     ++J7		O	9 	5  $((,A!BC:%%XX9:	
 $$w&&+2D2D'EF %r@   )r   r   r   r   r   rp   r   rL  rs  r  r  r  r  r  r  r   r  r  r   r   r   s   @r=   r3  r3    sd      I:'
/LbbH-1^4l D2 2hFPcJG.G Gr@   r3  joinedc                     ^  \ rS rSrSrSrU 4S jrS r   SS jrS r	S r
S	 rS
 r  S   SS jjrS rS rS rS rSrU =r$ )JoinedLoaderiC  zSProvide loading behavior for a :class:`.Relationship`
using joined eager loading.

r
  c                Z   > [         TU ]  X5        U R                  R                  U l        g r5   r  rr   s      r=   rp   JoinedLoader.__init__N  r  r@   c                X    U R                   R                  S5      R                  U5        g r  r  r   s     r=   r   !JoinedLoader.init_class_attributeR  r  r@   c	                   UR                   R                  (       d  gU(       a@  UR                  b3  UR                  R                  (       a  [        R
                  " SS5        OU R                  (       a  SUl        X0R                     nU(       a  U R                  XAUR                  5      OSn
U
SLa  U R                  UUUUU
5      u  nnnOUR                  UR                  S5      (       dQ  U R                  (       a  UR                  S-  U R                  :  a  gO!UR                  U R                   5      (       a  gU R#                  UUUUUUUU5      u  nnnnSUl        UR'                  UR                  SS5      nUb  [)        U5      R*                  nOSnX0R,                     n[.        R0                  " UU R                   UUUUUU R                   US	9	  [        R2                  R5                  UR6                  5      nU(       aA  Ub  [8        R:                  " S
5      eUR6                   Vs/ s H
  nUc  M  UPM     snUl        ggs  snf )z@Add a left outer join to the statement that's being constructed.NzThe joinedload loader option is not compatible with DML statements such as INSERT, UPDATE.  Only SELECT may be used.This warning will become an exception in a future release.r  TFr  r'   r  )with_polymorphicparentmapperchained_from_outerjoinzDetected unaliased columns when generating joined load.  Make sure to use aliased=True or flat=True when using joined loading with with_polymorphic().)r   r  r  r  r   r  rD   multi_row_eager_loadersrq   _init_user_defined_eager_procr   $_setup_query_on_user_defined_adapterr  r
  r  r	  ra   _generate_row_adaptereager_adding_joinsrY   r)   with_polymorphic_mappersr  r   _setup_entity_queryNONE_SETr   secondary_columnsr  r  )rs   ry   rz   r{   r|   r}   r~   r  r  r   user_defined_adapterclausesadd_to_collectionr  r  	has_nonesr   s                    r=   r   JoinedLoader.setup_queryW  sS    ,,??''3''..  M 	 \\48M1(()  ..(@(@  	  u, 99$	!  ==!9!98DD??{{Q8 9))$++66 **!&	!& 04M,88$$&=t
 '&  &&   $KK ##KK-#9
	
 MM..}/N/NO	+00I   ->>3>!!A>3/ 3s   1I<Ic                >   SUR                   ;  a  gUR                  R                  nUR                  UR                  SS5      nUSLa  U$ UR                   S   nUSS  u  pxUb  [        U[        5      (       a  UR                  R                  U5      n[        R                  " [        R                  R                  UR                  UUR                  R                  SS9nOUR                  UR                  S5      (       a_  UR                  UR                  S5      n	[        R                  " [        R                  R                   U	UR                  R                  S9nO&UR"                  R                  UR                  S 5      nUR%                  USU5        U$ )Neager_from_aliasF user_defined_eager_row_processor)
selectablerO  limit_on_entityr  )rO  )r   r{   rR   rY   r   r   r  r  aliasr6   
ORMAdapter_TraceAdaptRoleJOINEDLOAD_USER_DEFINED_ALIASra   rY  r   JOINEDLOAD_PATH_WITH_POLYMORPHIC_polymorphic_adaptersr   )
rs   r|   ry   target_attributesr{   r}   r  root_mapperr:   r  s
             r=   r  *JoinedLoader._init_user_defined_eager_proc  s~    W%7%77||"" (($$&H%
 %N ""#56 I%%%))%0))((FF  KK;; %G }}((*A  $(88!,,.E$  #--,,MM$ $ ? ? (==AAKK 	.	
 r@   c                
   UR                  U5      nU(       a6  U(       a/  UR                  U5      nUR                  UR                  SU5        O&U(       a  UnUR                  UR                  SU5        UR                  nXTU4$ )Nr  )_get_entity_clauseswrapr   r   primary_columns)rs   r   r  r{   r}   r  r  s          r=   r  1JoinedLoader._setup_query_on_user_defined_adapter	  s    
 ,,W5+#7#<#<W#E HH""2$
 #* HH""2$ $33#.???r@   c	                   UR                  UR                  SS 5      n	U	(       a  U	n
Oh[        U R                  5      nUR                  (       a  UR
                  nOS n[        R                  " U R                  Ub  UR                  SS9OS SSS9n
[        U
5      nUR                  SU 4[        R                  [        R                  R                  UU R                  R                  SSSS9nUR                  (       d   eUb0  UR                  R                  SU R                   R"                  5      OU R                   R"                  nU(       d  SnUR$                  R'                  U R(                  UUUUUUUU(       a  UR*                  OS	4	5        UR,                  nUR/                  UR                  S
U5        XUU4$ )Nr  T)flat)r  r'  rP  joinedloader_ormadapterF)rO  adapt_requiredallow_label_resolveanonymize_labels	innerjoinr   eager_row_processor)rY   r   r)   r  r@  r  r6   r&   ra   _anonymous_fromclause_memor  r  JOINEDLOAD_MEMOIZED_ADAPTERrY  r   rq   r,  create_eager_joinsrP   _create_eager_joinr   r  r   )rs   ry   r  r{   r|   r}   r~   r  r  r  to_adaptinspalt_selectableto_adapt_inspr  r,  r  s                    r=   r  "JoinedLoader._generate_row_adapter)	  s     88$$&=t
 'H4;;'D$$!%!%,, &1 #88d8C $	H  )%%&-$$@@77 %! & 	
 '''' " "";0D0D0N0NO%%// 	  &*"((//''&+2''
	
 *;;))+@'J!24JJJr@   c
           
       ^  Uc  UR                   n
OUn
UR                  =(       a    UR                  nS nX!R                  ;  a  U(       d  UR                  (       ao  [
        R                  " UR                  UR                  5      n[        U5      S:  a  [        R                  " S5      eU(       a  UR                  US      nUS   UpUc  UUR                  pUR                  R                  UW5      nU(       a  [        USS5      (       as  UR                  R                  U
R                  T R                   5      (       a  U
OT R                   5      n[        UR"                  T R$                  T R&                  5      nOV[        [(        R*                  " T R                   UR                  SS9T R$                  T R&                  5      nOT R&                  nUR,                  (       d   eU(       + =(       d0    U(       + =(       d"    US:H  =(       d    UR.                  R0                  nU	nUR2                  R5                  S	T R                   4S
5      nU(       a  U[7        U 4S jU 5       5      -  nU(       a  [(        R8                  " UUR                  UU(       + =(       d@    UR.                  R0                  =(       d#    U=(       a    [;        U[<        R>                  5      T R                   UT R                      US9nOT RA                  X3S   UUUU5      nUUR                  U'   UR                  Ul!        U(       d  [
        RD                  " T R&                  RF                  5       Ha  nU
RH                  RJ                  RM                  U5      (       d  M/  U(       a  URN                  U   nURQ                  UURR                  5        Mc     T R&                  RT                  (       a`  U=RV                  [7        URX                  R[                  [\        R^                  " T R&                  RT                  5      5      5      -  sl+        g g )Nr
   zCan't identify which query entity in which to joined eager load from.   Please use an exact match when specifying the join path.r   r@  FTrO  unnestedadditional_entity_criteriar   c              3     >#    U  H3  nUR                   (       d  M  UR                  TR                  5      v   M5     g 7fr5   )propagate_to_loaders_resolve_where_criteriara   )r   aers   s     r=   r   2JoinedLoader._create_eager_join.<locals>.<genexpr>	  s5      )4B** 8**4;;774s   >">isouter
_left_memo_right_memor   r  )0ra   r  _should_nest_selectableeager_joinsfrom_clausesrT  #find_left_clause_that_matches_givenr  r  r  r  
setdefaultr?  aliased_insp_entity_for_mapperr:  rR   r  r8   rq   r6   r&   r@  r<  represents_outer_joinglobal_attributesrY   r  _ORMJoinr   r+   Join_splice_nested_inner_joinstop_on_find_columnsprimaryjoinpersist_selectabler   contains_columnrm   rx   r$  rR  r  _target_adaptercopy_and_processr   rS  )rs   ry   rz   r{   r}   r  r  r,  r  r  r  should_nest_selectablequery_entity_keyindexesclausedefault_towraptowrapefmonclauseattach_on_outsideextra_join_criteriar:  	eagerjoinr   s   `                       r=   r2  JoinedLoader._create_eager_joinx	  s    &--K&K 11 655 	
    9 99***BB**L,C,CG 7|a 000  &33GAJ?
 4;1:v.#'' -
 **55n
 w 2E::
 **=="t{{33   #3::txx9M9MN"))W%7%7 HH(( ++H'''' '& >}>J&> ''==	 	 -%2%D%D%H%H)4;;7&
" &5 )4) $   ))$$% M++AAM*Kz&#((/K;; - 3
I 662h;NI 7@!!"23 )33	  --$$00 1133CCCHH%ooc2!??]:: ((((E**;;LL!5!5!>!>?- ( )r@   c	                   X!S   L d   eUSL a!  [        U[        R                  5      (       d   e[        U[        R                  R
                  5      (       a!  U R                  UUUR                  UUUU5      $ [        U[        R                  5      (       GaU  UR                  n	U R                  UUUR                  UUUU	b  U	S   R                  OS S9n
U
b  UR                  (       d#  U
R                  (       d  UR                  U
5      nO@[        R                  " UR                  U
UR                  UR                  UR                  S9nU
R                   Ul        U$ U R                  UUUR                  UUUUR                  U	S9n
U
bS  [        R                  " U
UR                  UR                  UR                  UR                  S9nU
R                   Ul        U$ USL a    S5       eg UR#                  U5      (       d  g U(       a0  [%        U5      S	:  a!  US
   UL d   eUSS UR&                  SS :w  a  g [        R                  " UUR(                  USUXS   R                     US9$ )Nr  Fr  )entity_inside_join_structure)rA  rB  )rd  detected_existing_path)rA  rC  z9assertion failed attempting to produce joined eager loadsr'   r   r@  )r   r6   rM  r+   r  FromGroupingrO  elementrC  rightra   rA  _splice_into_centerleftr^  rB  rU  r:  r  r{   rI  )rs   r{   entity_we_want_to_splice_ontojoin_objr  r^  r  rd  re  join_right_pathtarget_joinra  s               r=   rO  &JoinedLoader._splice_nested_inner_join
  s   * -R888'50h(9(9::::h ; ;<<11-  ,  ("3"344 '22O 88- '2 $B'.. 9 K &  ''0C0C ( < <[ II ( 1 1 # )) ( 0 0#+#6#6!I -8,G,G	)   #<<1MM"191D1D+: = 	 * ( 1 1#  )) ( 0 0$,$8$8!I 1<0K0KI-$$ ,u4ONO -001MNN "c*@&AA&E
 *"-1MMMMH &a+tyy2>    3"X__-*
 	
r@   c                   UR                   nU(       a  U R                  XVUR                  5      OSnUSLaT  UnUR                  (       a#  U(       a  UR	                  UR                  5      nO>UR                  (       a  UR                  nO UR                  UR                  S5      nUc  gU R                  R                  X(5      (       a  U$ g)NFr-  )ry   r  r   compound_eager_adapterr#  rY   ra   _result_has_identity_key)	rs   r   r   r}   r{   r|   ry   r  	decorators	            r=   _create_eager_adapter"JoinedLoader._create_eager_adapter
  s    --  ..(:(:  	  u,,I 33	%NN!88	 55)@@	((*?I  ;;//BB r@   c	           
        UR                   R                  R                  (       d  g U R                  R                  U R
                     R                  R                  (       d  [        R                  " SU -  5      eU R                  (       a  SUl        X0R                     n	U R                  XXyU5      n
U
SLat  U R
                  n[        R                  " UU R                   UUXR"                     U
5      nU R                  (       d  U R%                  XX5        g U R'                  XX5        g U R                  R)                  S5      R+                  UUUUUUUU5        g )Nr  TFr  )ry   r   r  rR   rZ   r8   r  r  r  r  rD   loaders_require_uniquingrq   ru  r   _instance_processorra   r  r  r  r   r   )rs   r   rz   r{   r|   ra   r   r}   r   our_patheager_adapterr8   	_instances                r=   r   !JoinedLoader.create_row_processor
  s>    $$44GG{{((277KK,,@BFG 
 <</3G,,,-22W
 %((C33%I <<**7O..)   ..%""	r@   c                  ^^^ UUU4S jnUUU4S jnU4S jnUS   R                  U R                  U45        US   R                  U R                  U45        TR                  (       a!  US   R                  U R                  U45        g g )Nc                   > [         R                  " XT5      n[        R                  " US5      nUTR                   U T4'   T" U5      nUb  UR	                  U5        g g Nappend_without_eventr   r0  r   UniqueAppenderrP   )	r  r1  r2  r  result_listinstr|  r   r8   s	         r=   #load_collection_from_joined_new_rowSJoinedLoader._create_collection_loader.<locals>.load_collection_from_joined_new_row'  se     $99%LJ--2K 0;Gs|,S>D""4(  r@   c                  > U T4TR                   ;   a  TR                   U T4   nO?[         R                  " XT5      n[        R                  " US5      nUTR                   U T4'   T" U5      nUb  UR	                  U5        g g r  r  )	r  r1  r2  r  r  r  r|  r   r8   s	         r=   (load_collection_from_joined_existing_rowXJoinedLoader._create_collection_loader.<locals>.load_collection_from_joined_existing_row4  s    s|w111%00%> (==#
 #11 6 4?""E3<0S>D""4(  r@   c                   > T" U5        g r5   r   r  r1  r2  r|  s      r=    load_collection_from_joined_execPJoinedLoader._create_collection_loader.<locals>.load_collection_from_joined_execG  
    cNr@   r   r  r  rP   r8   r  )rs   r   r8   r|  r   r  r  r  s    ```    r=   r  &JoinedLoader._create_collection_loader&  s    	)	)&	 	5  XX:;	
 	:%%XX?@	
 $$w&&;< %r@   c                  ^ ^^ UU4S jnUUU 4S jnU4S jnUS   R                  T R                  U45        US   R                  T R                  U45        UR                  (       a!  US   R                  T R                  U45        g g )Nc                   > T" U5      UT'   g r5   r   )r  r1  r2  r|  r8   s      r=   load_scalar_from_joined_new_rowKJoinedLoader._create_scalar_loader.<locals>.load_scalar_from_joined_new_rowV  s     #3E#Jr@   c                n   > T" U5      nTU;   a"  X1T   La  [         R                  " ST-  5        g g X1T'   g )Nr  )r   r  )r  r1  r2  r  r|  r8   rs   s       r=   $load_scalar_from_joined_existing_rowPJoinedLoader._create_scalar_loader.<locals>.load_scalar_from_joined_existing_row[  sI     !~H e|:-IIK . &c
r@   c                   > T" U5        g r5   r   r  s      r=   load_scalar_from_joined_execHJoinedLoader._create_scalar_loader.<locals>.load_scalar_from_joined_execn  r  r@   r   r  r  r  )rs   r   r8   r|  r   r  r  r  s   ` ``    r=   r  "JoinedLoader._create_scalar_loaderU  s    	(
	&&	 	5  $((,K!LM:%%XX;<	
 $$w&&78 %r@   r  )NNF)FN)rd  z#Union[Mapper, None, Literal[False]]re  z$Optional[path_registry.PathRegistry])r   r   r   r   r   r   rp   r   r   r  r  r  r2  rO  ru  r   r  r  r   r   r   s   @r=   r  r  C  s    
 I:' $~@7r@2MK^]R GKk
'
k
 !Ek
Z"H<|-^# #r@   r  selectinc                     ^  \ rS rSrSr\R                  " S/ SQ5      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rU =r$ )SelectInLoaderi{  )r
  	omit_join_parent_alias_query_info_fallback_query_info	queryinfo)load_only_childload_with_joinin_exprpk_colszero_idxchild_lookup_colsi  c                  > [         TU ]  X5        U R                  R                  U l        U R                  R                  [
        R                  L nU R                  R                  b  U R                  R                  U l        OU R                  R                  S5      nU(       a  UR                  U l        OLU R                  R                  S   R                  UR                  SSU R                  R                  S9U l        U R                  (       aH  U(       a+  U R                  5       U l        U R#                  5       U l        g U R'                  5       U l        g U R#                  5       U l        g )Nr  r   TFrL  )ro   rp   rq   r
  r^   r   ra  r  r   r?  rR   rX  r   r<  rY  _init_for_omit_join_m2or  _init_for_joinr  _init_for_omit_join)rs   rR   rt   is_m2or.  ru   s        r=   rp   SelectInLoader.__init__  s"   ...99%%//:3G3GG))5!11;;DN--;;%J !+!3!3!%!8!8!;!C!C-- $!& $ ? ?	 "D " >>#'#?#?#A ,0,?,?,A)#'#;#;#= #224Dr@   c                  ^ ^ [        T R                  R                  R                  5      mTR	                  UU 4S j[        T5       5       5        T R                  R                   Vs/ s H  oT;   d  M
  TU   PM     sn=p#[        U5      S:  a  [        R                  " U6 nSnOUS   nSnT R                  SSXBUS 5      $ s  snf )Nc              3     >#    U  H:  nTR                   R                  R                  US 5        H  nUTU   4v   M     M<     g7f)r   N)rR   rY  rY   )r   r  equivpk_to_fkrs   s      r=   r   5SelectInLoader._init_for_omit_join.<locals>.<genexpr>  sE      
#88<<QC HQK C !#s   AAr
   Fr   T)r  rq   rP  local_remote_pairsrV  rZ  rR   r   r  r+   tuple_
query_info)rs   r   r  fk_colsr  r  r  s   `     @r=   r  "SelectInLoader._init_for_omit_join  s      00CC
 	 
(^
 	
 &*[[%<%<
%<cxMHSM%<
 	
 w<!jj'*GHajGHueWxNN
s   )	C6	Cc                *   U R                   R                  n[        U5      S:  a  [        R                  " U6 nSnOUS   nSnU R
                  R                  S5      nU Vs/ s H  oTR                  U   PM     nnU R                  SSX!X65      $ s  snf )Nr
   Fr   Tr  )	ra   r   r  r+   r  rq   r   rB  r  )rs   r  r  r  r.  r  lookup_colss          r=   r  &SelectInLoader._init_for_omit_join_m2o  s    ++))w<!jj'*GHajGH))778MN
AHI22226I%8
 	
 Js   "Bc                h   [        U R                  R                  5      U l        [	        U R                  5      nU R                  R
                   Vs/ s H  o!R                  U5      PM     nn[        U5      S:  a  [        R                  " U6 nSnOUS   nSnU R                  SSXCUS 5      $ s  snf )Nr
   Fr   T)r&   rR   r]   r  r)   r   _adapt_elementr  r+   r  r  )rs   pa_inspr   r  r  r  s         r=   r  SelectInLoader._init_for_join  s    )$++*<*<=$,,-37;;3J3J
3JC""3'3J 	 
 w<!jj'*GHajGHudGhMM
s   B/c                X    U R                   R                  S5      R                  U5        g r  r  r   s     r=   r   #SelectInLoader.init_class_attribute  r  r@   c	                   UR                   (       a  U R                  UUUUUUUU5      $ U R                  XX@R                  S9u  n	n
nnU
(       d  g UR                  R
                  R                  (       d  g U R                  R                  U R                     R                  R                  (       d  [        R                  " SU -  5      e[        U5      S:X  a2  [        R                   " UR"                  U R                  5      (       d  g O*[        R                   " US   U R                  5      (       d  g U	nX0R$                     nUR'                  UR(                  SS 5      nUb  [+        U5      nOU R,                  n[.        R0                  R3                  UUU R                  U R$                  U R4                  UUUU5	        g )Nr  r  r
   r  r  )r   r$  r  r
  ry   r   r  rR   rZ   r8   r  r  r  r  r  r6   r  r<  rq   rY   r   r)   r  r   r  r!  r"  )rs   r   rz   r{   r|   ra   r   r}   r   r  r#  r  r  selectin_pathr  r  r  s                    r=   r   #SelectInLoader.create_row_processor  s      ;;	 	  %%7 & 
	

 $$44GG{{((277KK,,@BFG  t9>''(@(@$++NN O%%d2h<<&//0 '?? 7
 '&'78#{{**KK  
	
r@   c	                	  ^ ^^ ^! U(       a  T R                   U;  a  g T R                  n	U	R                  (       a  [        R                  " [
        5      n
/ nT R                  m U H  u  mnTR                  m![        U UU!4S jU	R                   5       5      n[        R                  U;   a  T R                  n	  O6S U;  a  X   R                  TT!U45        Ms  UR                  TT!U45        M     U	R                  (       d0  U VVs/ s H!  u  pUR                   S   XR                  U4PM#     n
nnU	R                  nU	R                  nU	R                   (       dC  UR"                  (       a2  U Vs/ s H  nUR%                  U5      PM     nnUR%                  U5      n[&        R(                  " S/UQ76 nUR+                  5       nUR+                  5       n[,        R.                  " UU/[0        [2        R4                  SUS.S9nU	R                   (       d  UR7                  U5      nOaUR7                  T R8                  5      R;                  [=        T R8                  T R>                  R                   5      RA                  U5      5      nURC                  URE                  [F        RH                  " S5      5      5      nURJ                  RL                  nUT R>                     nUURN                  L a  URP                  nOSURP                  nURN                  RP                  n[S        UU5       VVs/ s H  u  nnURU                  UU5      PM     nnnU(       a;  URV                  (       a*  U[&        RX                  " UUR[                  U5      5      4-  nUb  UR]                  5       nUR^                  " U6 nURa                  SU05      nURb                  (       a  URe                  S	S
9nT R>                  Rf                  (       a  U	R                   (       dX  T R>                  Rf                  nUR"                  (       a!  U Vs/ s H  nUR%                  U5      PM     nnURf                  " U6 nO"U 4S jnURi                  UT R>                  5      nU	R                  (       a  T Rk                  W
WU	UUU5        g T Rm                  W
U	UX5        g s  snnf s  snf s  snnf s  snf )Nc              3  d   >#    U  H%  nTR                  TTU[        R                  S 9v   M'     g7f)r  N)r|  r   PASSIVE_NO_FETCH)r   lkra   r  
state_dicts     r=   r   0SelectInLoader._load_for_path.<locals>.<genexpr>S  s>      & ; 44" * ; ;	 5  ;s   -0r
   r  r  )compile_state_pluginplugin_subject)r  r  r   r  primary_keysr  T)r  c                   > U =R                   [        [        R                  " TR                  R
                  5      5      -  sl         g r5   r  r  s    r=   r  ?SelectInLoader._load_for_path.<locals>._setup_outermost_orderby  s3    #22eT%9%9%B%BC7 2r@   )7r8   r  r  r  r  rZ  rR   r  r  r  r   r   r  rP   r  r  r  r@  r  r6   Bundler  r.   r  r-   r   r  r  r  r  r?  rq   r  filterin_r+   rf  ry   select_statementuser_passed_queryr  zip'_adapt_cached_option_to_uncached_optionr   r  r  r(  r  _update_compile_optionsr  r  rR  r  _load_via_child_load_via_parent)"rs   r   r{   r+  r,  r  r|   r  r  r  
our_statesnone_statesr/  related_identr  r  r  r   
bundle_ent
bundle_sql
entity_sqlrk  rh  r  r  cached_optionsuncached_optionsorig_optuncached_optr  r\  r  ra   r  s"   `             `                 @@r=   r"  SelectInLoader._load_for_path;  s    2%%
%%$006JK[[F$* y"ZZ
 % & )::& ! (99]J!%!:!:J },-44
I6  &&z9'EF7 %+< )) )/(.$E 1ujj)<(.  
 $$$$((  00DKDKS$33C8G   +99'B__T4G4
224
%88:
%%$j17,DD(-"2	
 (( ./A
 d00166**D,@,@,D,DEMM$A HHW[[~!>?@ **;;
2 d223222$22K'55N&88FF /2"$4/	/*Hl @@\/	   w..--$44W= K &+??ANII{#%%&GH$$##d#;A((,,!%!5!5!>!>#44 %3&$2D )77=$2 # & JJ/
 )),d.B.B %%  ! !!J7u d<&s   (S.S+S;Sc           	        U R                   n[        U5      nU(       Ga  USU R                   n	XR                  S  nUR                  R	                  USU	 V
s/ s H  n
UR
                  (       a  U
S   OU
PM     sn
0US9R                  5        VVs0 s H  u  pX_M	     nnnU	 Hs  n
UR                  U
S 5      nX    HV  u  nnnU(       d  U R                  U;   a  M   UR                  U R                  5      R                  UUU(       d  UOU/5        MX     Mu     U(       a  GM  U HL  u  nnnU(       d  U R                  U;   a  M   UR                  U R                  5      R                  UUS 5        MN     g s  sn
f s  snnf )Nr   r  rn  r  )rD   sorted
_chunksizer  r  r  re  rY   r8   r)  r*  )rs   r  r  r  rk  r   r  rD   our_keyschunkr8   r  r  datarelated_objr  r1  r/  s                     r=   r  SelectInLoader._load_via_child  s    ,, *%Q1E 12H $OO33&',)', '1&9&9CFsB',) '8 4 	 &(		DA 	    #hhsD1/9+E5)$U): NN488,@@+2	 0? # hD (3#E5)U!2 NN488$88tL (35)s   "E9E>c           
        U R                   nU(       a  SOS nU(       Ga  USU R                   nXR                  S  nU V	V
VVs/ s H  u  ppUR                  (       a  U	S   OU	PM      nnn
n	n[        R                  " [
        5      n[        R                  " UR                  R                  USU0US9R                  5       S 5       H   u  nnX   R                  S U 5       5        M"     U H  u  ppU(       d  U R                  U;   a  M  UR                  X5      nU(       d_  U(       aX  [        U5      S:  a  [        R                   " SU -  5        U
R#                  U R                  5      R%                  XUS   5        M  U
R#                  U R                  5      R%                  XU5        M     U(       a  GM  g g s  snnn
n	f )	Nr   r   r  r  c                    U S   $ r   r   r  s    r=   r>   1SelectInLoader._load_via_parent.<locals>.<lambda>[  s    !A$r@   c              3  *   #    U  H	  oS    v   M     g7f)r
   Nr   r  s     r=   r   2SelectInLoader._load_via_parent.<locals>.<genexpr>]  s     1q!uqr  r
   r  )rD   r  r  r  r  rZ  r  r  r  r  re  r  r8   rY   r  r   r  r)  r*  )rs   r  r  rk  r   r  rD   _empty_resultr  r8   r  r  r/  r  r  r  r  r  s                     r=   r  SelectInLoader._load_via_parentE  s    ,,%4q4??3E#OO$56J :?9>5C
 %--A369>  
 **40D!))''*L9&7 (  &(1 1q11 6;1J TXX%;!XXc9
::*		.045
 NN488,@@:a= NN488,@@:' 6;) js   %G 
)r  r  r  r
  r  )r   r   r   r   r   r  
namedtupler  r  rp   r  r  r  r   r   r"  r  r  r   r   r   s   @r=   r  r  {  se    I ''	

J J5<O,
 N'
N
`Qf5Mn/ /r@   r  c           	        ^^ U4S jmU4S jnU4S jn[         R                  " U SUSSSS9  [         R                  " U SUSSSS9  g )Nc           	     "  > Ub  UR                   TR                   :X  ap  UR                  [        R                  " U5      5      nU(       aD  X!La@  [        R
                  " S[        R                  " U5      < SU R                  < ST< S3SS9eU$ )Nz	Instance z+ is already associated with an instance of z	 via its z0 attribute, and is only allowed a single parent.bbf1)code)	r8   	hasparentr   instance_stater  r  r6   instance_strr]   )r  rl  oldvalue	initiatorr  r:   s        r=   	_do_check*single_parent_validator.<locals>._do_checkx  sx    $((!:!++J,E,Ee,LMIX200  ,,U3U\\4I    r@   c                   > T" XS U5      $ r5   r   )r  rl  r   r  s      r=   rP   'single_parent_validator.<locals>.append  s    tY77r@   c                   > T" XX#5      $ r5   r   )r  rl  r  r   r  s       r=   set_%single_parent_validator.<locals>.set_  s    x;;r@   rP   T)rawretvalrK   r   )r(   listen)r9   r:   rP   r  r  s    `  @r=   rQ   rQ   w  sE    8< 
LLhDd 
LLudT$Or@   )NNNNFN)Wr   
__future__r   r  r  typingr   r   r   r   r   r	    r   r   r   r   r   r   r   r   r   r   r   r6   baser   r   r   r   r   r   r   r   r   r   r   r   r    r!   r  r"   r  r#   r  r$   r%   r&   r(   r  r)   r*   r+   rT  r,   sql.selectabler-   r.   util.typingr/   ra   r0   r1   sql.elementsr2   rg   ColumnPropertystrategy_forrk   class_loggerr   r   r   r  r  r'  r*  MemoizedSlots
Identifiedr:  r  r  r  r3  r  r  rQ   r   r@   r=   <module>r     s  2 #                    " " '  &   ) $ * ! & + #   "          "  ; # !3, N!b ''55'I( ( J(V ''4%'HW:> W: I W:t '''>T
\ T
 ? T
n ''$'G''dd (  ''4'8l
> l
 9 H l
^8 80"
 "
J ##00D0An  B  ##00h0?##00d0;#=) #= < @ #=L ##00d0;##00h0?##00g0>##00n0E##00n0EkJ 2 2CNNkJ F F ? @ < kJ\1
 1
hIH+ IHX ##00k0B`j ` C`F ##00j0AG
GZ G
G B G
GT ##00h0?##00e0<r- r = @ rj ##00j0AwZ!3!3 w B wtPr@   