+
    i              
         R t ^ RIHt ^ RIHt ^ RIt^ RIHt ^ RIt^ RIH	t	 ^ RIH
t
 ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^RIHt ^RIHt ^RIHt ^RIHt ^RIHt ^RI H!t! ^RI H"t" ^RI H#t# ^RI$H%t% ^RI$H&t& ^RI'H(t( ^R I)H*t* ^R!I+H,t, ^R"I+H-t- ^R#I+H.t. ^R$I+H/t/ ^R%I+H0t0 ^R&I+H1t1 ^R'I+H2t2 ^R(I+H3t3 ^R)I+H4t4 ^R*I+H5t5 ^R+I+H6t6 ^R,I+H7t7 ^R-I+H8t8 ^R.I9H:t: ^R/I;H<t< ^R0I;H=t= ^R1I;H>t> ^R2I;H?t? ^R3I;H@t@ ^R4I;HAtA ^R5I;HBtB ^R6IHCtC ^R7IHDtD ^R8IHEtE ^R9IFHGtG ^R:IFHHtH ]P,                  '       da   ^R;IHItI ^R<IHJtJ ^R=IHKtK ^R>I+HLtL ^R?I+HMtM ^R@I;HNtN ^RAI;HOtO ^RBI;HPtP ^RCIHQtQ ^RDIHRtR ^REIHStS ^RFITHUtU ^RGITHVtV ^RHITHWtW ^RIITHXtX ^RJIYHZtZ ]! RKRLRM7      t[RRN RO llt\RP RQ lt]RR RS lt^RT RU lt_RV RW lt`RXRYRZRYR[RYR\RYR]RY/R^ R_ lltaR` Ra ltbRb tcRc tdRd teRe Rf ltfRg tgRh Ri lthRj tiRk Rl ltjRm tkRn tl ! Ro Rp4      tmRq tn ! Rr Rs]m4      to ! Rt Ru]p4      tq ! Rv Rw]m4      trRx Ry ltsRRz R{ lltt]R| R} l4       tu]R~ R l4       tuR R ltuRR ltv ! R R]P                  4      tx ! R R]H4      ty ! R R]x4      tzRR R llt{R R lt|R R lt}R# )z9High level utilities which build upon other modules here.)annotations)dequeN)chain)AbstractSet)Any)Callable)cast)
Collection)Dict)Iterable)Iterator)List)Optional)overload)Sequence)Tuple)TYPE_CHECKING)TypeVar)Union)	coercions)	operators)roles)visitorsis_text_clause)_deep_annotate)_deep_deannotate)_shallow_annotate)_expand_cloned)_from_objects)HasCacheKey)sort_tables)_find_columns)_label_reference)_textual_label_reference)BindParameter)ClauseElement)ColumnClause)ColumnElement)Grouping)KeyedColumnElement)Label)NamedColumn)Null)UnaryExpression)Column)Alias)
FromClause)FromGrouping)Join)ScalarSelect)
SelectBase)TableClause)_ET)exc)util)Literal)Protocol)_EquivalentColumnMap)_LimitOffsetType)_TypeEngineArgument)BinaryExpression)
TextClause)_JoinTargetElement)_SelectIterable)
Selectable)_TraverseCallableType)ExternallyTraversible)ExternalTraversal)_AnyExecuteParams)_AnyMultiExecuteParams)_AnySingleExecuteParams)_CoreSingleExecuteParams)Row_CEColumnElement[Any])boundc          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
   ar1   ba_subsetOptional[FromClause]consider_as_foreign_keysz(Optional[AbstractSet[ColumnClause[Any]]]returnzColumnElement[bool] )formats   "|C:\Users\petid\OneDrive\Desktop\Maestro\MAESTRO CLAUDE\MAESTRO\maestro-backend\venv\Lib\site-packages\sqlalchemy\sql\util.py__annotate__rZ   ]   s;     ! !!! #! G	!
 !    c                6    \         P                  ! V VVVR7      # )a  Create a join condition between two tables or selectables.

e.g.::

    join_condition(tablea, tableb)

would produce an expression along the lines of::

    tablea.c.id == tableb.c.tablea_id

The join is determined based on the foreign key relationships
between the two selectables.   If there are multiple ways
to join, or no way to join, an error is raised.

:param a_subset: An optional expression that is a sub-component
    of ``a``.  An attempt will be made to join to just this sub-component
    first before looking at the full ``a`` construct, and if found
    will be successful even if there are other ways to join to ``a``.
    This allows the "right side" of a join to be passed thereby
    providing a "natural join".

)rS   rU   )r3   _join_condition)rQ   rR   rS   rU   s   &&&&rY   join_conditionr^   ]   s#    8 		!9	 r[   c               $    V ^8  d   QhRRRRRR/# )rP   clauseszList[FromClause]join_tor1   rV   	List[int]rW   )rX   s   "rY   rZ   rZ      s$      (2r[   c                    \        \        V4      4      p. p\        V 4       F8  w  rEV F-  pVP                  V4      '       g   K  VP	                  V4       K/  	  K:  	  V# )ap  Given a list of FROM clauses and a selectable,
return the first index and element from the list of
clauses which can be joined against the selectable.  returns
None, None if no match is found.

e.g.::

    clause1 = table1.join(table2)
    clause2 = table4.join(table5)

    join_to = table2.join(table3)

    find_join_source([clause1, clause2], join_to) == clause1

)listr   	enumerateis_derived_fromappend)r`   ra   selectablesidxifss   &&     rY   find_join_sourcerm      sV    & }W-.K
C'"A  ##

1  # Jr[   c               $    V ^8  d   QhRRRRRR/# )rP   r`   Sequence[FromClause]	join_fromr1   rV   rb   rW   )rX   s   "rY   rZ   rZ      s$     ) )!).8))r[   c                   \        \        V4      4      p. p\        V 4       F9  w  rEV F.  pVP                  V4      '       g   K  VP	                  V4        K7  	  K;  	  \        V4      ^8  dm   . pV FZ  pW,          pV FI  p\        \        V4      4      P                  \        V4      4      '       g   K7  VP	                  V4        KX  	  K\  	  V'       d   V# V# )zGiven a list of FROM clauses and a selectable,
return the indexes from the list of
clauses which is derived from the selectable.

)	rd   r   re   rf   rg   lensetsurface_selectablesintersection)	r`   rp   rh   liberal_idxrj   rk   rl   conservative_idxri   s	   &&       rY   #find_left_clause_that_matches_givenrx      s     }Y/0KK'"A   ##""1%  #" ;!CA *1-.;;'*  %++C0 !  ##r[   c               (    V ^8  d   QhRRRRRRRR/# )	rP   r`   ro   ra   rA   onclauseOptional[ColumnElement[Any]]rV   rb   rW   )rX   s   "rY   rZ   rZ      s0     6 6!66 +6 	6r[   c           
     >   . p\        \        V4      4      p\        V 4      ^8  d   Ve   Rp\        V4      pMRpRp\	        V 4       F  w  rxVP                  V.4       F  p	V'       d`   Vf   Q h\        VP                  4      P                  V	P                  4      P                  V4      '       d   VP                  V4        K  Kj  Vf   \        P                  ! W4      '       g   K  VP                  V4        K  	  K  	  \        V4      ^8  dV   \        \        V  Uu. uF  p\        VP                  4      NK  	  up!  4      p
V Uu. uF  qpV,          V
9  g   K  VNK  	  ppV'       g"   Ve   \        \!        \        V 4      4      4      # V# u upi u upi )a  Given a list of FROM clauses, a selectable,
and optional ON clause, return a list of integer indexes from the
clauses list indicating the clauses that can be joined from.

The presence of an "onclause" indicates that at least one clause can
definitely be joined from; if the list of clauses is of length one
and the onclause is given, returns that index.   If the list of clauses
is more than length one, and the onclause is given, attempts to locate
which clauses contain the same columns.

NTF)rs   r   rr   r"   re   
differencecunion
issupersetrg   r3   	_can_joinr   r   _hide_fromsrd   range)r`   ra   rz   ri   rh   resolve_ambiguitycols_in_onclauserj   rk   rl   toremoves   &&&        rY   find_left_clause_to_join_fromr      sd     CmG,-K 7|aH0 (2!'"'',A '333qss8>>!##&112BCCJJqM D %)=)=

1 - # 3x!| 7C7aN1==17CD
 <#Q8!;qq#< 8'E#g,'((
 D<s   #FF"Fc               $    V ^8  d   QhRRRRRR/# )rP   fnzOCallable[[BinaryExpression[Any], ColumnElement[Any], ColumnElement[Any]], None]exprrM   rV   NonerW   )rX   s   "rY   rZ   rZ     s*     ? ?	? 	?
 
?r[   c                L   a aa . oR V VV3R llo\        S! V4      4       RoR# )a  Produce a traversal of the given expression, delivering
column comparisons to the given function.

The function is of the form::

    def my_fn(binary, left, right): ...

For each binary expression located which has a
comparison operator, the product of "left" and
"right" will be delivered to that function,
in terms of that binary.

Hence an expression like::

    and_((a + b) == q + func.sum(e + f), j == r)

would have the traversal:

.. sourcecode:: text

    a <eq> q
    a <eq> e
    a <eq> f
    b <eq> q
    b <eq> e
    b <eq> f
    j <eq> r

That is, every combination of "left" and
"right" that doesn't further contain
a binary comparison is passed as pairs.

c                    V ^8  d   QhRRRR/# )rP   elementr&   rV   zIterator[ColumnElement[Any]]rW   )rX   s   "rY   rZ   *visit_binary_product.<locals>.__annotate__+  s     ' '} ')E 'r[   c              3  H  <"   \        V \        4      '       d   V x  R# V P                  R 8X  d   \        P                  ! V P
                  4      '       d   SP                  ^ V 4       S! V P                  4       F,  pS! V P                  4       F  pS! S^ ,          W4       K  	  K.  	  SP                  ^ 4       V P                  4        F  pS! V4       K  	  R# \        V \        4      '       d   V x  V P                  4        F  pS! V4       Rj  xL
  K  	  R#  L
5i)binaryN)
isinstancer4   __visit_name__r   is_comparisonoperatorinsertleftrightpopget_childrenr'   )r   lrelemr   stackvisits   &   rY   r   #visit_binary_product.<locals>.visit+  s     g|,, M##x/I4K4K5
 5
 LLG$7<<(w}}-AuQx& . ) IIaL,,.d / '<00,,. ;&& /&s   AD"B>D"D D"N)rd   )r   r   r   r   s   f&@@rY   visit_binary_productr     s(    N *,E' '* 	tEr[   check_columnsFinclude_aliasesinclude_joinsinclude_selectsinclude_crudc               4    V ^8  d   QhRRRRRRRRRRRRR	R
/# )rP   clauser&   r   boolr   r   r   r   rV   zList[TableClause]rW   )rX   s   "rY   rZ   rZ   D  sP     ( (( ( 	(
 ( ( ( (r[   c               j  a . o/ pV'       d   SP                   ;VR&   VR&   V'       d   SP                   VR&   V'       d   SP                   ;VR&   ;VR&   ;VR&   VR&   V'       d   V3R l;VR	&   ;VR
&   VR&   V'       d   V3R lpWvR&   SP                   VR&   \        P                  ! V / V4       S# )z1locate Table objects within the given expression.selectcompound_selectjoinaliassubquerytablesamplelateralc                :   < SP                  V P                  4      # Nrg   table)enttabless   &rY   <lambda>find_tables.<locals>.<lambda>_  s    cii0r[   r   updatedeletec                >   < SP                  V P                  4       R # r   r   )columnr   s   &rY   visit_column!find_tables.<locals>.visit_columnd  s    MM&,,'r[   r   r   )rg   r   traverse)	r   r   r   r   r   r   	_visitorsr   r   s	   &$$$$$  @rY   find_tablesr   D  s     !#F79I=C]]J	(i(9:"MM	& $*==	1	' 	1Yz2 	1Y6
i 0	
	( 	
i1Ih4G 	( +(Igfb),Mr[   c                    V ^8  d   QhRRRR/# )rP   r   r   rV   rW   )rX   s   "rY   rZ   rZ   o  s     , ,C ,C ,r[   c                b   \         P                  ! 4       p. p\        V .4      pV'       Ed   VP                  4       p\	        V\
        4      '       Ed1   \	        V\        4      '       d'   \        P                  ! VP                  4      '       g   \	        V\        4      '       db   \	        VP                  \        4      '       gB   VP                  p\	        V\        4      '       d   VP                  pVP                  V4       K  \	        V\        4      '       d!   VP                  pVP                  V4       EK  \	        V\         4      '       d   EK2  WA9  d&   VP#                  V4       VP                  V4       EK]  EK`  VP%                  4        F  pVP                  V4       K  	  EK  V# )zmBreak up an 'order by' expression into individual column-expressions,
without DESC/ASC/NULLS FIRST/NULLS LAST)r9   
column_setr   popleftr   r(   r.   r   is_ordering_modifiermodifierr+   r   r4   r)   rg   r#   r$   addr   )r   colsresultr   tr~   s   &     rY   unwrap_order_byr   o  s,    ??DF6(OE %MMOa''1o..11!**==!U##J		<- - IIa**		AQA/00IIQ!688}a  
 ^^%Q &Mr[   c                >    R  R lp\         P                  ! V / V4      # )c               $    V ^8  d   QhRRRRRR/# )rP   r   rE   kwr   rV   Optional[ExternallyTraversible]rW   )rX   s   "rY   rZ   ,unwrap_label_reference.<locals>.__annotate__  s$      &.1	(r[   c                    \        V \        4      '       d   V P                  # \        V \        4      '       d   Q R4       hR# )Fz&can't unwrap a textual label referenceN)r   r#   r   r$   )r   r   s   &,rY   replace'unwrap_label_reference.<locals>.replace  s8     g/00??"!9::BBB5r[   )r   replacement_traverse)r   r   s   & rY   unwrap_label_referencer     s     (("g>>r[   c           
         V  Uu0 uF  pVP                   e   VP                  MTkK!  	  pp\        \        V Uu. uF  p\	        V4      NK  	  up!  4      pV Uu. uF  q"V9  g   K  VNK  	  up# u upi u upi u upi )zGiven the columns clause and ORDER BY of a selectable,
return a list of column expressions that can be added to the collist
corresponding to the ORDER BY, without repeating those already
in the collist.

)_order_by_label_elementr   rd   r   r   )collistorder_bycolcols_already_presentoto_look_fors   &&    rY    expand_column_list_from_order_byr     s     C 22>CG  
 u8D8aq18DEFK&J;C5I*ICC;JJ
 EJs   %A1A6A;(A;c                <    \        V4       F  pW8X  g   K   R# 	  R# )zGiven a target clause and a second to search within, return True
if the target is plainly present in the search without any
subqueries or aliases involved.

Basically descends through Joins.

TF)rt   )r   searchr   s   && rY   clause_is_presentr     s      $F+> , r[   c                    V ^8  d   QhRRRR/# )rP   r   r1   rV   zIterator[FromClause]rW   )rX   s   "rY   rZ   rZ     s       0D r[   c              #  0  "   \        V \        4      '       d=   \        V P                  4       R j  xL
  \        V P                  4       R j  xL
  R # \        V \
        4      '       d    \        V P                  4       R j  xL
  R # V x  R #  L^ LC L5ir   )r   r3   tables_from_leftmostr   r   r2   r   )r   s   &rY   r   r     se     &$'444'555	FL	)	)'777 	557s3   /BBBB4BBBBBc              #  4  "   V .pV'       d   VP                  4       pVx  \        V\        4      '       d*   VP                  VP                  VP
                  34       K[  \        V\        4      '       g   Ks  VP                  VP                  4       K  R # 5ir   )	r   r   r3   extendr   r   r2   rg   r   r   r   r   s   &  rY   rt   rt     sg     HE
yy{
dD!!LL$))TZZ01l++LL& s   BA&B9Bc                    V ^8  d   QhRRRR/# )rP   r   r&   rV   zIterator[ClauseElement]rW   )rX   s   "rY   rZ   rZ     s      ] 7N r[   c              #    "   V .pV'       d   VP                  4       p\        V\        \        34      '       d   Vx  \        V\        4      '       d*   VP                  VP                  VP                  34       Kw  \        V\        4      '       d   VP                  VP                  4       K  \        V\        4      '       d2   VP                  e   VP                  VP                  4       K  Vx  K  Vf   K  Vx  K  R # 5ir   )r   r   r6   r0   r3   r   r   r   r2   rg   r   r'   r   r   s   &  rY   surface_selectables_onlyr     s     HE
yy{d[%011JdD!!LL$))TZZ01l++LL&l++zz%TZZ(
J s   DC*D=Dc                &   \         \        3p\        V .4      pV'       dq   VP                  4       pWP                  9   d   VP                  V,          # VP                  4        F'  p\        WR4      '       d   K  VP                  V4       K)  	  Kx  R # r   )r2   r5   r   r   _annotationsr   r   rg   )r   annotation_namefilter_r   r   subs   &&    rY   extract_first_column_annotationr     st    Z(G6(OE
}}///$$_55$$&C#''LL ' r[   c               $    V ^8  d   QhRRRRRR/# )rP   r   r1   r   rV   r   rW   )rX   s   "rY   rZ   rZ     s!      j   r[   c                l    \        \        \        V 4      4      P                  \        V4      4      4      # )z:Return True if left/right have some overlapping selectable)r   rs   rt   ru   )r   r   s   &&rY   selectables_overlapr     s0     %&334G4NO r[   c                L   a . oV3R lp\         P                  ! V / RV/4       S# )zReturn an ordered list of "bound" values in the given clause.

E.g.::

    >>> expr = and_(table.c.foo == 5, table.c.foo == 7)
    >>> bind_values(expr)
    [5, 7]
c                >   < SP                  V P                  4       R # r   )rg   effective_value)bindvs   &rY   visit_bindparam$bind_values.<locals>.visit_bindparam  s    	%%&r[   	bindparam)r   r   )r   r   r   s   & @rY   bind_valuesr     s-     	A' fb;"@AHr[   c                z    \        V \        4      '       d   V P                  R R4      p RV ,          # \        V 4      # )'z''z'%s')r   strr   repr)r   s   &rY   _quote_ddl_exprr    s4    '3//#t,G}r[   c                  \    ] tR tRt$ ^ tR]R&   ^tR]R&   ^tR]R&   RtR]R&   R R lt	R	t
R
# )
_repr_basei&  int_LIST_TUPLE_DICT	max_charsc                    V ^8  d   QhRRRR/# )rP   valuer   rV   r  rW   )rX   s   "rY   rZ   _repr_base.__annotate__/  s      3 3 r[   c                	    \        V4      p\        V4      pW0P                  8  dA   V P                  ^,          pV^ V RW0P                  ,
          ,          ,           W$) R ,           pV# )rP   z# ... (%d characters truncated) ... N)r  rr   r
  )selfr  replenrepsegment_lengths   &&   rY   trunc_repr_base.trunc/  sk    5kSNN"!^^q0NAn%9.0
 o&'(  
r[   rW   N)r
  )__name__
__module____qualname____firstlineno__r  __annotations__r  r	  	__slots__r  __static_attributes__rW   r[   rY   r  r  &  s1    E3NFCOE3NIN r[   r  c                F    \        4       pR Vn        VP                  V 4      # ,  )r  r
  r  )r  rps   & rY   _repr_single_valuer   ?  s    	BBL88E?r[   c                  :    ] tR tRtRtR	tR
R R lltR R ltRtR# )	_repr_rowiE  zProvide a string view of a row.c                    V ^8  d   QhRRRR/# )rP   rowzRow[Any]r
  r  rW   )rX   s   "rY   rZ   _repr_row.__annotate__J  s     # #H # #r[   c                	    Wn         W n        R # r   )r$  r
  )r  r$  r
  s   &&&rY   __init___repr_row.__init__J  s    "r[   c                   V ^8  d   QhRR/# rP   rV   r  rW   )rX   s   "rY   rZ   r%  N  s     
 
# 
r[   c                	   a V P                   oR RP                  V3R lV P                   4       4      : \        V P                  4      ^8X  d   RMR: R2# )(, c              3  4   <"   T F  pS! V4      x  K  	  R # 5ir   rW   .0r  r  s   & rY   	<genexpr>%_repr_row.__repr__.<locals>.<genexpr>Q  s     9ueEll   , ))r  r   r$  rr   )r  r  s   &@rY   __repr___repr_row.__repr__N  sC    

II999txx=A%C2-
 	
r[   )r
  r$  N)r$  r  )	r  r  r  r  __doc__r  r'  r7  r  rW   r[   rY   r"  r"  E  s    )I#
 
r[   r"  c                  "    ] tR tRtR R ltRtR# )_long_statementiV  c                   V ^8  d   QhRR/# r*  rW   )rX   s   "rY   rZ   _long_statement.__annotate__W  s     % % %r[   c                	    \        V 4      pVR 8  d$   ^p^dpW,
          V,
          pV ^ V  RV RW) R  2# \        P                  V 4      # )i   ... z characters truncated ... N)rr   r  __str__)r  lselflleftlrightr  s   &    rY   r@  _long_statement.__str__W  se    D	3;EFMF*E%=/ug .,,0N+;=
 ;;t$$r[   rW   N)r  r  r  r  r@  r  rW   r[   rY   r;  r;  V  s    % %r[   r;  c                      ] tR tRtRtRtRR R lltR R ltR R	 ltR
 R lt	R R lt
R R ltR R ltR R ltRtR# )_repr_paramsie  zProvide a string view of bound parameters.

Truncates display to a given number of 'multi' parameter sets,
as well as long values to a given number of characters.

Nc          
     ,    V ^8  d   QhRRRRRRRRRR/# )	rP   paramszOptional[_AnyExecuteParams]batchesr  
max_paramsr
  ismultizOptional[bool]rW   )rX   s   "rY   rZ   _repr_params.__annotate__o  s<     % %+% % 	%
 %  %r[   c                	B    Wn         WPn        W n        W@n        W0n        R # r   )rH  rK  rI  r
  rJ  )r  rH  rI  rJ  r
  rK  s   &&&&&&rY   r'  _repr_params.__init__o  s     "$r[   c                   V ^8  d   QhRR/# r*  rW   )rX   s   "rY   rZ   rL  }  s     + +# +r[   c           	     	   V P                   f   V P                  V P                  4      # \        V P                  \        4      '       d   V P
                  pMu\        V P                  \        4      '       d   V P                  pMH\        V P                  \        4      '       d   V P                  pMV P                  V P                  4      # V P                   '       d   \        RV P                  4      p\        V P                  4      V P                  8  d}   RpRP                  V P                  VR V P                  ^,
           V4      ^ R W0P                  \        V P                  4      3,          V P                  VRR  V4      R,          34      # V P                  W!4      # V P                  \        RV P                  4      V4      # )NrH   z8 ... displaying %i of %i total bound parameter sets ...  :   NNrI   )rK  r  rH  r   rd   r  tupler  dictr	  r   rr   rI  r   _repr_multirF  )r  typmulti_paramsmsgs   &   rY   r7  _repr_params.__repr__}  sx   <<::dkk**dkk4((**CU++++CT****C::dkk**<<<(L
 4;;$,,.N  xx((();4<<!+;< B  ||S-=>>((bc):C@D	 	 ''::$$-KK  r[   c               $    V ^8  d   QhRRRRRR/# )rP   rY  rH   rX  r  rV   r  rW   )rX   s   "rY   rZ   rL    s(     % %,% % 
	%r[   c                	  a a V'       d   \        V^ ,          \        4      '       d   S P                  oMr\        V^ ,          \        4      '       d   S P                  oMH\        V^ ,          \
        4      '       d   S P                  oMQ R\        T^ ,          4      ,          4       hRP                  VV 3R lV 4       4      pMRpVS P                  8X  d
   RV,          # RV,          # )    zUnknown parameter type %sr-  c              3  H   <"   T F  pSP                  VS4      x  K  	  R # 5ir   )rF  )r0  rH  	elem_typer  s   & rY   r1  +_repr_params._repr_multi.<locals>.<genexpr>  s$      !CO!!&)44<s   "r5  [%s]z(%s))	r   rd   r  rU  r  rV  r	  typer   )r  rY  rX  elementsr`  s   f&& @rY   rW  _repr_params._repr_multi  s    
 ,q/400 JJ	LOU33 KK	LOT22 JJ	9a) u yy !CO! H H$**H$$H$$r[   c                    V ^8  d   QhRRRR/# )rP   rH  zIterable[Any]rV   r   rW   )rX   s   "rY   rZ   rL    s     ' '= 'S 'r[   c                	    \        V4      p\        V4      pW0P                  8  d/   V P                  ^,          pV^ V W$) R W0P                  ,
          3# VRR3# )rP   N)rd   rr   rJ  )r  rH  lparams	lenparamsrB  s   &&   rY   _get_batches_repr_params._get_batches  sc    v,L	&OOq(E%  OO+  D$&&r[   c               $    V ^8  d   QhRRRRRR/# )rP   rH  rI   rX  r  rV   r  rW   )rX   s   "rY   rZ   rL    s(     1 1'1 1 
	1r[   c                	    W P                   J d   V P                  \        R V4      4      # W P                  J d   V P	                  \        RV4      4      # V P                  V4      # )rJ   Sequence[Any])r	  _repr_param_dictr   r  _repr_param_tuple_repr_param_list)r  rH  rX  s   &&&rY   rF  _repr_params._repr_params  sa    
 **((/8  KK))$*GHH((00r[   c                    V ^8  d   QhRRRR/# )rP   rH  rJ   rV   r  rW   )rX   s   "rY   rZ   rL    s      '? C r[   c                	n  a V P                   oV P                  VP                  4       4      w  pppV'       d[   R RP                  V3R lV 4       4      ,          pVRV R2,          pVRRP                  V3R lV 4       4      ,          ,          pV# RRP                  V3R lV 4       4      ,          pV# )	z{%sr-  c              3  D   <"   T F  w  rV: R S! V4       2x  K  	  R# 5iz: NrW   r0  keyr  r  s   &  rY   r1  0_repr_params._repr_param_dict.<locals>.<genexpr>  )      &7
 gRe~.&7    r?   parameters truncated ... z%s}c              3  D   <"   T F  w  rV: R S! V4       2x  K  	  R# 5irv  rW   rw  s   &  rY   r1  ry    s)      &8
 gRe~.&8r{  z{%s}c              3  D   <"   T F  w  rV: R S! V4       2x  K  	  R# 5irv  rW   rw  s   &  rY   r1  ry    rz  r{  )r  rj  itemsr   r  rH  items_first_batchitems_second_batchtrunclentextr  s   &&    @rY   ro  _repr_params._repr_param_dict  s    


 flln-		
 		 &7 D eH:%?@@DE		 &8  D  		 &7 D r[   c                    V ^8  d   QhRRRR/# )rP   rH  rn  rV   r  rW   )rX   s   "rY   rZ   rL     s       # r[   c                	r  a V P                   oV P                  V4      w  pppV'       dX   R RP                  V3R lV 4       4      ,          pVRV R2,          pVRP                  V3R lV 4       4      : R2,          pV# RRP                  V3R lV 4       4      : \        V4      ^8X  d   R	MR
: R2pV# )z(%sr-  c              3  4   <"   T F  pS! V4      x  K  	  R # 5ir   rW   r/  s   & rY   r1  1_repr_params._repr_param_tuple.<locals>.<genexpr>       F4E5%,,4Er3  r?  r|  c              3  4   <"   T F  pS! V4      x  K  	  R # 5ir   rW   r/  s   & rY   r1  r         G4F5%,,4Fr3  r6  r,  c              3  4   <"   T F  pS! V4      x  K  	  R # 5ir   rW   r/  s   & rY   r1  r    r  r3  r4  r5  )r  rj  r   rr   r  s   &&    @rY   rp  _repr_params._repr_param_tuple   s    

 f%		
 		F4EFFD eH:%?@@D		G4FGG D   		F4EFF,-2:D r[   c                    V ^8  d   QhRRRR/# )rP   rH  rI   rV   r  rW   )rX   s   "rY   rZ   rL    s      '> 3 r[   c                	R  a V P                   oV P                  V4      w  pppV'       d[   R RP                  V3R lV 4       4      ,          pVRV R2,          pVRRP                  V3R lV 4       4      ,          ,          pV# RRP                  V3R lV 4       4      ,          pV# )	z[%sr-  c              3  4   <"   T F  pS! V4      x  K  	  R # 5ir   rW   r/  s   & rY   r1  0_repr_params._repr_param_list.<locals>.<genexpr>"  r  r3  r?  r|  z%s]c              3  4   <"   T F  pS! V4      x  K  	  R # 5ir   rW   r/  s   & rY   r1  r  &  r  r3  rb  c              3  4   <"   T F  pS! V4      x  K  	  R # 5ir   rW   r/  s   & rY   r1  r  *  r  r3  )r  rj  r   r  s   &&    @rY   rq  _repr_params._repr_param_list  s    


 f%		
 		F4EFFD eH:%?@@DE		G4FGG D  		F4EFFD r[   )rI  rK  r
  rJ  rH  )rH  rI  rK  rJ  )d   r  N)r  r  r  r  r9  r  r'  r7  rW  rj  rF  ro  rp  rq  r  rW   r[   rY   rF  rF  e  s<     =I%+Z%8'1>0 r[   rF  c               $    V ^8  d   QhRRRRRR/# )rP   critrL   nullszCollection[Any]rV   rW   )rX   s   "rY   rZ   rZ   /  s&     H H# Ho H# Hr[   c                D   a V3R lp\         P                  ! V / RV/4      # )zOgiven criterion containing bind params, convert selected elements
to IS NULL.

c                  < \        V P                  \        4      '       dh   V P                  P                  S9   dM   V P                  V n        \        4       V n        \        P                  V n        \        P                  V n
        R # \        V P                  \        4      '       dY   V P                  P                  S9   d<   \        4       V n        \        P                  V n        \        P                  V n
        R # R # R # r   )r   r   r%   _identifying_keyr   r-   r   is_r   is_notnegate)r   r  s   &rY   visit_binary-adapt_criterion_to_null.<locals>.visit_binary5  s    v{{M22,,5 !,,FK6FL'mmFO%,,FMv||]33--66FL'mmFO%,,FM	 7 4r[   r   )r   cloned_traverse)r  r  r  s   &f rY   adapt_criterion_to_nullr  /  s$    -$ ##D"x.FGGr[   c               (    V ^8  d   QhRRRRRRRR/# )rP   r   rT   r   stop_onrV   rW   )rX   s   "rY   rZ   rZ   J  s0      
 " 	r[   c                   V f   V# VR 3.p\        V 4      pR pV'       d   VP                  4       w  r\        V\        4      '       dT   WJdO   VP	                  4       pVP                  VP                  4      Vn        VP                  VP                  V34       MVP                  V4      pVe   Vf   Q hWn        Ve   K  TpK  V# r   )	ClauseAdapterr   r   r3   _cloner   rz   rg   r   )r   r   r  r   adapterret	prevrights   &&&    rY   splice_joinsr  J  s    
 |AFED!G
C
"YY[eT""u';LLNE$--enn=ENLL%**e,-$$U+E $$$"N;CJr[   c               (    V ^8  d   QhRRRRRRRR/# )	rP   columnszIterable[ColumnElement[Any]]r`   Optional[ClauseElement]r   r   rV   zSequence[ColumnElement[Any]]rW   )rX   s   "rY   rZ   rZ   h  s0     ' ')'%' ' "	'r[   c                    R # r   rW   r  r`   r   s   &*,rY   reduce_columnsr  g  s    
 $'r[   c               (    V ^8  d   QhRRRRRRRR/# )	rP   r  rB   r`   r  r   r   rV   z/Sequence[Union[ColumnElement[Any], TextClause]]rW   )rX   s   "rY   rZ   rZ   p  s0     : ::%: : 5	:r[   c                    R # r   rW   r  s   &*,rY   r  r  o  s    
 7:r[   c               (    V ^8  d   QhRRRRRRRR/# )	rP   r  rB   r`   r  r   r   rV   z1Collection[Union[ColumnElement[Any], TextClause]]rW   )rX   s   "rY   rZ   rZ   w  s6     Q' Q'Q'%Q' Q' 7	Q'r[   c                R  aaa VP                  RR4      pVP                  RR4      o\        P                  ! V 4      pVP                  R V 4       4      o\        P                  ! 4       oS F  p\        VP                   Uu. uF  qfP                  NK  	  up!   Fp  pS Fg  pWeJ d   K
   VP                  pTP                  T4      '       g   K0  S'       d   TP                  TP                  8X  g   KU  SP                  T4        Kn  	  Kr  	  K  	  V'       d2   VVV3R lp	V F#  p
V
f   K	  \        P                   ! V
/ RV	/4       K%  	  VP                  S4      # u upi   \        P                   d    T'       d    K  h \        P                   d    T'       d    EK  h i ; i)a  given a list of columns, return a 'reduced' set based on natural
equivalents.

the set is reduced to the smallest list of columns which have no natural
equivalent present in the list.  A "natural equivalent" means that two
columns will ultimately represent the same value because they are related
by a foreign key.

\*clauses is an optional list of join clauses which will be traversed
to further identify columns that are "equivalent".

\**kw may specify 'ignore_nonexistent_tables' to ignore foreign keys
whose tables are not yet configured, or columns that aren't yet present.

This function is primarily used to determine the most minimal "primary
key" from a selectable, by reducing the set of primary key columns present
in the selectable to just those that are not repeated.

ignore_nonexistent_tablesFonly_synonymsc              3  L   "   T F  p\        V4      '       g   K  Vx  K  	  R # 5ir   r   )r0  r~   s   & rY   r1  !reduce_columns.<locals>.<genexpr>  s      Na!2:s   $
$c                  < V P                   \        P                  8X  d   \        P                  ! \        SP                  S4       Uu. uF  qP                  NK  	  up!  4      pV P                  V9   d   V P                  V9   dy   \        S4       Fg  pVP                  V P                  4      '       g   K&  S'       d(   VP                  V P                  P                  8X  g   KU  SP                  V4        R # 	  R # R # R # R # u upi r   )r   r   eqr9   r   r   r}   	proxy_setr   r   reversedshares_lineagenamer   )r   r~   r   cset_no_textomitr  s   &  rY   r  $reduce_columns.<locals>.visit_binary  s    ),,./;/F/Ft/LM/L!++/LM
 ;;$&6<<4+?%l3++FLL99 -6;;;K;K1K HHQK! 4 ,@& / Ns   	Dr   )r   r9   
OrderedSetr}   r   r   r  foreign_keysr   r8   NoReferencedColumnErrorNoReferencedTableErrorr  r  r   r   r   )r  r`   r   r  r   r   r~   fkfk_colr  r   r  r  r  s   &*,        @@@rY   r  r  w  sl   0 !#'BE JFF?E2M)J8B8M8M NN 9L ??D#--@-Q..-@AB!8YYF ((++%388);HHSM/ " B 6 	" F!!!&"x.FG    &&_ A 22  1 11  1 s$   E
,E##F&	F&	F&	$F&	c                   aaaaa S'       d   S'       d   \         P                  ! R4      hR oVVVVV3R lp. o\        P                  ! V / RV/4       S# )z9traverse an expression and locate binary criterion pairs.zSCan only specify one of 'consider_as_foreign_keys' or 'consider_as_referenced_keys'c                $    V P                  V4      # r   )compare)rQ   rR   s   &&rY   col_is"criterion_as_pairs.<locals>.col_is  s    yy|r[   c                T  < S'       g!   V P                   \        P                  Jd   R # \        V P                  \
        4      '       d!   \        V P                  \
        4      '       g   R # S'       d   V P                  S9   d^   S! V P                  V P                  4      '       g   V P                  S9  d*   SP                  V P                  V P                  34       R # V P                  S9   d`   S! V P                  V P                  4      '       g   V P                  S9  d*   SP                  V P                  V P                  34       R # R # R # S'       d   V P                  S9   d^   S! V P                  V P                  4      '       g   V P                  S9  d*   SP                  V P                  V P                  34       R # V P                  S9   d`   S! V P                  V P                  4      '       g   V P                  S9  d*   SP                  V P                  V P                  34       R # R # R # \        V P                  \        4      '       d   \        V P                  \        4      '       d   V P                  P                  V P                  4      '       d*   SP                  V P                  V P                  34       R # V P                  P                  V P                  4      '       d*   SP                  V P                  V P                  34       R # R # R # R # r   )
r   r   r  r   r   r(   r   rg   r/   
references)r   any_operatorr  rU   consider_as_referenced_keyspairss   &rY   r  (criterion_as_pairs.<locals>.visit_binary  s   y|| C&++}55ZLL->
 >
 #{{66v||V[[11<<'??fllFKK89!99v{{FLL11;;&>>fkk6<<89 ? :
 ){{99v||V[[11<<'BBfkk6<<89!<<v{{FLL11;;&AAfllFKK89 B = &++v..:f4 4 ;;))&,,77LL&,,!<=\\,,V[[99LL&++v||!<= :4.r[   r   )r8   ArgumentErrorr   r   )
expressionrU   r  r  r  r  r  s   &fff @@rY   criterion_as_pairsr    sX      $?,
 	
%> %>N BDEj"x&>?Lr[   c                      ] tR tRtRtRtRR R llt]'       d   ]R R l4       t	]R R	 l4       t	R
 R lt	]
P                  3R lt]
P                  ! R4      RR R ll4       tRtR# )r  i
  a	  Clones and modifies clauses based on column correspondence.

E.g.::

  table1 = Table(
      "sometable",
      metadata,
      Column("col1", Integer),
      Column("col2", Integer),
  )
  table2 = Table(
      "someothertable",
      metadata,
      Column("col1", Integer),
      Column("col2", Integer),
  )

  condition = table1.c.col1 == table2.c.col1

make an alias of table1::

  s = table1.alias("foo")

calling ``ClauseAdapter(s).traverse(condition)`` converts
condition to read::

  s.c.col1 == table2.c.col1

Nc               4    V ^8  d   QhRRRRRRRRRR	R
R	RR/# )rP   
selectablerC   equivalentsOptional[_EquivalentColumnMap]
include_fn)Optional[Callable[[ClauseElement], bool]]
exclude_fnadapt_on_namesr   anonymize_labelsadapt_from_selectables!Optional[AbstractSet[FromClause]]rW   )rX   s   "rY   rZ   ClauseAdapter.__annotate__3  sQ     = == 4= >	=
 >= = = !B=r[   c                	    R V.RV/V n         Wn        W0n        W@n        \        P
                  ! T;'       g    / 4      V n        WPn        Wpn        R# )r  r  N)	__traverse_options__r  r  r  r9   column_dictr  r  r  )r  r  r  r  r  r  r  r  s   &&&&&&&&rY   r'  ClauseAdapter.__init__3  sS     
| 0%
! %$$++K,=,=2>,&<#r[   c                    V ^8  d   QhRRRR/# rP   objzLiteral[None]rV   r   rW   )rX   s   "rY   rZ   r  K  s    ;;;$;r[   c                	    R # r   rW   r  r  s   &&rY   r   ClauseAdapter.traverseJ  s    8;r[   c                    V ^8  d   QhRRRR/# rP   r  r7   rV   rW   )rX   s   "rY   rZ   r  V  s    0000r[   c                	    R # r   rW   r  s   &&rY   r   r  U  s    -0r[   c                    V ^8  d   QhRRRR/# rP   r  r   rV   rW   )rX   s   "rY   rZ   r  X  s     	2 	26	2,	2r[   c                	    R # r   rW   r  s   &&rY   r   r  X  s    .1r[   c                	   V P                   P                  WR 7      pVf]   WP                  9   dM   W9  dG   V P                  V,           F/  pV P                  VVVP	                  V.4      R7      pVf   K-  Vu # 	  V P
                  '       dJ   VfF   \        V\        4      '       d0   V P                   P                  P                  VP                  4      pV# )require_embedded)r  _seen)r  corresponding_columnr  _corresponding_columnr   r  r   r,   exported_columnsgetr  )r  r   r  r  newcolequivs   &&&&  rY   r  #ClauseAdapter._corresponding_column\  s     55 6 
 >c%5%55#:J))#..33%5++se, 4 
 %!M / 3,,__5599#((CFr[   zsqlalchemy.sql.functionsc               $    V ^8  d   QhRRRRRR/# )rP   r   r7   _include_singleton_constantsr   rV   zOptional[_ET]rW   )rX   s   "rY   rZ   r  u  s)     F
 F
F
6:F
	F
r[   c                	   \         P                  P                  pV P                  '       d   V P                  V4      '       g   R # V P                  '       d   V P	                  V4      '       d   R # \        V\        4      '       d   \        WP                  4      '       g   V P                  P                  V4      '       dX   V P                  '       d:   V P                   F'  pVP                  V4      '       g   K   V P                  # 	  R # V P                  # \        V\        4      '       d#   \        VP                  \        4      '       d   V# R # \        V\        4      '       g   R # V'       g   VP                  '       d   R # RVP                   9   d   VP                   R,          p\"        '       d   \        V\$        4      '       g   Q hV P                  '       dF   WP&                  9  d6   V P                   F#  pVP(                  P+                  VR4      f   K#   M	  R # \"        '       d   \        V\$        4      '       g   Q hV P-                  VRR7      # )Nadapt_columnFTr  )r9   	preloadedsql_functionsr  r  r   r1   FunctionElementr  rf   r  r0   r   r6   r(   _is_singleton_constantr   r   r*   r  r~   r  r  )r  r   r  	functionsadps   &&&  rY   r   ClauseAdapter.replacet  s    NN00	 ???4??3#7#7___!5!5c:&&z**0
 0
 ..s33...#::..s33! &  ;  $&C''J[- - 

 C//-#2L2L2L S---"">2C=c#56666&&&36F6F+F2255--c59E 3 =c#56666))$ * 
 	
r[   )r  r  r  r  r  r  r  )r  r  r  r  r  r  r  )NNNFFN)F)r  r  r  r  r9  r  r'  r   r   r   r9   	EMPTY_SETr  preload_moduler   r  rW   r[   rY   r  r  
  sk    <I=* 	; 
; 
0 
0	2
 ,0>>0 
34F
 5F
r[   r  c                  z    ] tR tRt]R R l4       t]R R l4       t]R R l4       t]R R	 l4       tR
 R ltRtR# )_ColumnLookupi  c                    V ^8  d   QhRRRR/# )rP   rx  r   rV   rW   )rX   s   "rY   rZ   _ColumnLookup.__annotate__  s    11t11r[   c                	    R # r   rW   r  rx  s   &&rY   __getitem___ColumnLookup.__getitem__  s    .1r[   c                    V ^8  d   QhRRRR/# )rP   rx  zColumnClause[Any]rV   rW   )rX   s   "rY   rZ   r    s    KK0K5FKr[   c                	    R # r   rW   r  s   &&rY   r  r    s    HKr[   c                    V ^8  d   QhRRRR/# )rP   rx  rM   rV   rW   )rX   s   "rY   rZ   r    s    MM1M6HMr[   c                	    R # r   rW   r  s   &&rY   r  r    s    JMr[   c                    V ^8  d   QhRRRR/# )rP   rx  r7   rV   rW   )rX   s   "rY   rZ   r        //s/s/r[   c                	    R # r   rW   r  s   &&rY   r  r    s    ,/r[   c                    V ^8  d   QhRRRR/# )rP   rx  r   rV   rW   )rX   s   "rY   rZ   r    r  r[   c                	    R # r   rW   r  s   &&rY   r  r    s    Cr[   rW   N)r  r  r  r  r   r  r  rW   r[   rY   r  r    s@    1 1K KM M/ ///r[   r  c                    a  ] tR tRt$ RtRtR]R&   RR V 3R lllt ! R R4      tR	 t	]
R
 R l4       t]
R R l4       tR R ltR V 3R llt]'       d   ]R R l4       t]t]P$                  tR R ltR R ltRtV ;t# )ColumnAdapteri  a+  Extends ClauseAdapter with extra utility functions.

Key aspects of ColumnAdapter include:

* Expressions that are adapted are stored in a persistent
  .columns collection; so that an expression E adapted into
  an expression E1, will return the same object E1 when adapted
  a second time.   This is important in particular for things like
  Label objects that are anonymized, so that the ColumnAdapter can
  be used to present a consistent "adapted" view of things.

* Exclusion of items from the persistent collection based on
  include/exclude rules, but also independent of hash identity.
  This because "annotated" items all have the same hash identity as their
  parent.

* "wrapping" capability is added, so that the replacement of an expression
  E can proceed through a series of adapters.  This differs from the
  visitor's "chaining" feature in that the resulting object is passed
  through all replacing functions unconditionally, rather than stopping
  at the first one that returns non-None.

* An adapt_required option, used by eager loading to indicate that
  We don't trust a result row column that is not translated.
  This is to prevent a column from being interpreted as that
  of the child row in a self-referential scenario, see
  inheritance/test_basic.py->EagerTargetingTest.test_adapt_stringency

r  r  c               <    V ^8  d   QhRRRRRRRRR	RR
RRRRRRR/	# )rP   r  rC   r  r  adapt_requiredr   r  r  r  r  allow_label_resolver  r  r  rW   )rX   s   "rY   rZ   ColumnAdapter.__annotate__  se       4 	
 > >  "  !Br[   c
           
     	,  < \         S
V `  VVVVVVV	R 7       \        P                  ! V P                  4      V n        V P                  '       g   V P                  '       d!   V P                  W P
                  4      V n        W0n	        Wpn
        RV n        R# ))r  r  r  r  r  N)superr'  r9   WeakPopulateDict_locate_colr  r  r  _IncludeExcludeMappingr!  r"  _wrap)r  r  r  r!  r  r  r  r"  r  r  	__class__s   &&&&&&&&&&rY   r'  ColumnAdapter.__init__  s     	!!)-#9 	 	
 ,,T-=-=>???dooo66t\\JDL,#6 
r[   c                  "    ] tR tRtR tR tRtR# )$ColumnAdapter._IncludeExcludeMappingi  c                	    Wn         W n        R # r   )parentr  )r  r/  r  s   &&&rY   r'  -ColumnAdapter._IncludeExcludeMapping.__init__  s     K"Lr[   c                	   V P                   P                  '       d"   V P                   P                  V4      '       d>   V P                   P                  '       dg   V P                   P                  V4      '       dF   V P                   P                  '       d(   V P                   P                  P                  V,          # V# V P                  V,          # r   )r/  r  r  r)  r  r  s   &&rY   r  0ColumnAdapter._IncludeExcludeMapping.__getitem__  s    &&&t{{/E/Ec/J/J++(((T[[-C-CC-H-H;;$$$;;,,44S99J<<$$r[   )r  r/  N)r  r  r  r  r'  r  r  rW   r[   rY   r(  r-    s    	#	%r[   r(  c                	   \         P                   ! V 4      pWn        \        P                  ! VP                  4      Vn        VP                  '       g   VP                  '       d!   V P                  W"P
                  4      Vn        V# r   )	copyr)  r9   r&  r'  r  r  r  r(  )r  r  acs   && rY   wrapColumnAdapter.wrap#  sV    YYt_**2>>:
===BMMM44RDBJ	r[   c                    V ^8  d   QhRRRR/# r  rW   )rX   s   "rY   rZ   r#  -  s    77M7d7r[   c                	    R # r   rW   r  s   &&rY   r   ColumnAdapter.traverse,  s    47r[   c                    V ^8  d   QhRRRR/# r  rW   )rX   s   "rY   rZ   r#  0  s    ,,C,C,r[   c                	    R # r   rW   r  s   &&rY   r   r:  /  s    ),r[   c                    V ^8  d   QhRRRR/# r  rW   )rX   s   "rY   rZ   r#  2  s     ! !2!	(!r[   c                	(    V P                   V,          # r   )r  r  s   &&rY   r   r:  2  s     ||C  r[   c                    V ^8  d   QhRRRR/# )rP   visitorrF   rV   r  rW   )rX   s   "rY   rZ   r#  7  s     & &. &= &r[   c                	R   < \        V\        4      '       g   Q h\        SV `  V4      # r   )r   r  r%  r   )r  r@  r*  s   &&rY   r   ColumnAdapter.chain7  s%    '=1111w}W%%r[   c                   V ^8  d   QhRR/# )rP   rV   zIterator[ColumnAdapter]rW   )rX   s   "rY   rZ   r#  ?  s    BB&=Br[   c                	    R # r   rW   )r  s   &rY   visitor_iteratorColumnAdapter.visitor_iterator>  s    ?Br[   c                    V ^8  d   QhRRRR/# rP   r   rM   rV   r{   rW   )rX   s   "rY   rZ   r#  D  s      %	%r[   c                	b    V P                   V,          pW!J d   V P                  VR 4      f   R# V# )TN)r  r  )r  r   r  s   && rY   adapt_check_present!ColumnAdapter.adapt_check_presentD  s1     c"=T77TBJr[   c                    V ^8  d   QhRRRR/# rH  rW   )rX   s   "rY   rZ   r#  N  s     * *%*	%*r[   c                	v   VP                   '       d0   V P                   F  pVP                  VR R7      pVf   K   M	  TpM\        P	                  W4      pV P
                  '       d"   V P
                  P                  V4      pVe   TpV P                  '       d   W1J d   R# W1Jd   V P                  Vn	        V# )T)r  N)
_is_immutablerE  r   r  r   r)  r'  r!  r"  _allow_label_resolve)r  r   visr~   c2s   &&   rY   r'  ColumnAdapter._locate_colN  s     ,,KK$KG= -
 &&t1A:::''*B~18 <%)%=%=A"r[   )r)  r!  r"  r  )r  r!  r"  r)  __weakref__)NFNNFTFN)r  r  r  r  r9  r  r  r'  r(  r6  r   r   r   r   propertyrE  adapt_clauser  copy_and_process
adapt_listrJ  r'  r  __classcell__)r*  s   @rY   r  r    s    <I  :% % 7 7, ,!
& &
 	B 
BL//J* *r[   r  c               (    V ^8  d   QhRRRRRRRR/# )	rP   r   r=   r  zOptional[str]type_z"Optional[_TypeEngineArgument[int]]rV   zColumnElement[int]rW   )rX   s   "rY   rZ   rZ   {  s0      
 . 	r[   c                P    \         P                  ! \        P                  WVR7      # )zConvert the given value to an "offset or limit" clause.

This handles incoming integers and converts to an expression; if
an expression is already given, it is passed through.

)r  rZ  )r   expectr   LimitOffsetRole)r   r  rZ  s   &&&rY   _offset_or_limit_clauser^  {  s$     w r[   c                    V ^8  d   QhRRRR/# )rP   r   r=   rV   rW   )rX   s   "rY   rZ   rZ     s      r[   c                z    V f   R# \        V R4      '       d#   V P                  p\        P                  ! V4      # V # )z\Return the offset or limit clause as a simple integer if possible,
else return the clause.

N_limit_offset_value)hasattrra  r9   asint)r   r  s   & rY   )_offset_or_limit_clause_asint_if_possiblerd    s9     ~v,--**zz%  r[   c          
     ,    V ^8  d   QhRRRRRRRRRR/# )	rP   limit_clauser=   offset_clausestartr  stoprV   zATuple[Optional[ColumnElement[int]], Optional[ColumnElement[int]]]rW   )rX   s   "rY   rZ   rZ     s;     2' 2'"2'#2' 2' 	2'
 G2'r[   c                `   VeT   VeP   \        V4      pVf   ^ pV^ 8w  d	   W,           pV^ 8X  d   RpMVf   Q h\        V4      p\        W2,
          4      p W3# Vf   Ve   \        V4      p W3# Ve<   Vf8   \        V4      pVf   ^ pV^ 8w  d	   W,           pV^ 8X  d   RpW3# \        V4      pW3# )z0Compute LIMIT/OFFSET in terms of slice start/endN)rd  r^  )rf  rg  rh  ri  s   &&&&rY   _make_slicerk    s     T-A
  MA:)1MA M ,,,3MBM.t|<& &&# 
4+.t4  && 
	t|A
  MA:)1MA M && 4MBM&&r[   )NNr   )NNF)~r9  
__future__r   collectionsr   r4  	itertoolsr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r5  r   r   r   r   _typingr   
annotationr   r   r   baser   r   	cache_keyr    ddlr!   rd  r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   schemar/   r  r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   util.typingr:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   engine.interfacesrG   rH   rI   rJ   
engine.rowrK   rL   r^   rm   rx   r   r   r   r   r   r   r   r   rt   r   r   r   r   r  r  r   r"  r  r;  rF  r  r  r  r  ReplacingExternalTraversalr  r  r  r^  rd  rk  rW   r[   rY   <module>rz     sH   @ "                          # 8 < >    1 + 4 & . # # " #  (  !  %   " $  $ " #    ! "	-),*$.+&//+5:;< e/0!H8)X6r?D(  ( "	(
  ( "( (V,^
?K" '&& 2

 
"%c %G: GTH6: 
' 
' 
: 
:Q'h<~q
H77 q
h0H 0 jM jZ  2'r[   