
    i?i                    6   d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d d	l
mZ d d
l
mZ d dl
mZ d dl
mZ d dl
mZ d dl
mZ d dl
mZ d dl
mZ d dl
mZ d dlmZ d dlmZ d dlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& dd lm'Z' dd!lm(Z( dd"lm)Z) dd#lm*Z* er0d d$lm+Z+ d d%l,m-Z- d d&l.m/Z/ d d'l.m0Z0 d d(l1m2Z2 d d)lm3Z3 d d*l4m5Z5 dd+l6m7Z7  G d, d-          Z8 G d. d/          Z9d0S )1    )annotations)Any)Dict)List)Optional)Tuple)TYPE_CHECKING)Union)CheckConstraint)Column)ForeignKeyConstraint)Index)MetaData)PrimaryKeyConstraintschema)Table)types)SchemaEventTarget)OrderedDict)topological   )exc)_columns_for_constraint)_copy)_copy_expression)_ensure_scope_for_ddl)_fk_is_self_referential)_idx_table_bound_expressions)_insert_inline)_is_type_bound)_remove_column_from_collection)_resolve_for_variant)_select)constraint_name_defined)constraint_name_string)Literal)Dialect)ColumnClause)quoted_name)Function)
Constraint)
TypeEngine)DefaultImplc                      e Zd Zd Zedd            Zed d            Zd!dZd"d
Zd"dZ	d"dZ
d"dZd#dZd#dZd Zd$dZd$dZd Zd Zd Zd Zd ZdS )%BatchOperationsImplc           	        || _         || _        || _        |dvrt          d          || _        || _        || _        t          |          | _        || _	        t          |	          | _
        | j
                            dt          | j
                            dd                               | j
        d                             d|j        j        f           |
| _        || _        g | _        d S )N)autoalwaysneverz4recreate may be one of 'auto', 'always', or 'never'.	listeners column_reflect)
operations
table_namer   
ValueErrorrecreate	copy_from
table_argsdicttable_kwargsreflect_argsreflect_kwargs
setdefaultlistgetappendimplautogen_column_reflectnaming_conventionpartial_reorderingbatch)selfr8   r9   r   r;   r<   r=   r?   r@   rA   rH   rI   s               ^/var/www/html/crypto-bot/backend/venv/lib/python3.11/site-packages/alembic/operations/batch.py__init__zBatchOperationsImpl.__init__8   s     %$666F   !"$ ..(">22&&d155k2FFGG	
 	
 	
 	K(//zEF	
 	
 	
 "3"4


    returnr(   c                $    | j         j        j        S N)r8   rF   dialectrK   s    rL   rR   zBatchOperationsImpl.dialect]   s    #++rN   r.   c                    | j         j        S rQ   )r8   rF   rS   s    rL   rF   zBatchOperationsImpl.impla   s    ##rN   boolc                t    | j         dk    r| j        j                            |           S | j         dk    rdS dS )Nr2   r3   TF)r;   r8   rF   requires_recreate_in_batchrS   s    rL   _should_recreatez$BatchOperationsImpl._should_recreatee   s?    =F""?'BB4HHH]h&&45rN   Nonec           	     P   |                                  }t          | j        j                  5  |s2| j        D ](\  }}}t          | j        j        |          } ||i | )n+| j        rt          | j                  }nt                      }| j	        
| j	        }d}n| j        j
        j        r4t          j        d| j        j
        j        j         d| j         d          t#          | j        |g| j        R | j        | j                                        d| j        }d}t-          | j        || j        | j        || j                  }	| j        D ]\  }}}t          |	|          } ||i | |	                    | j                   d d d            d S # 1 swxY w Y   d S )	N)rH   FzEThis operation cannot proceed in --sql mode; batch mode with dialect zF requires a live database connection with which to reflect the table "z". To generate a batch SQL migration script using table "move and copy", a complete Table object should be passed to the "copy_from" argument of the batch_alter_table() method so that table reflection can be skipped.)r   autoload_withT)rI   )rX   r   rF   
connectionrJ   getattrr8   rH   r   r<   migration_contextas_sqlr   CommandErrorrR   namer9   r   r@   r   get_bindrA   ApplyBatchImplr=   r?   rI   _create)
rK   should_recreateopnameargkwfnm1existing_table	reflected
batch_impls
             rL   flushzBatchOperationsImpl.flushm   sQ   //11"49#788 4	. 4	." 3.'+z # #OFC !5v>>BBNrNNNN# ) $!D4JKKKBB!B>-%)^N %II8? !.
9#@HM
9 
9 6:_	
9 
9 
9   &+&
 *& &  ${&*o&>&>&@&@	& & -& &N !%I+I"O%'+'>  
 (,z # #OFC V44BBNrNNNN""49---i4	. 4	. 4	. 4	. 4	. 4	. 4	. 4	. 4	. 4	. 4	. 4	. 4	. 4	. 4	. 4	. 4	. 4	.s   E FF"Fc                @    | j                             d||f           d S )Nalter_columnrJ   rE   rK   rg   rh   s      rL   rp   z BatchOperationsImpl.alter_column   %    
>3344444rN   c                    d|v sd|v r(|                                  st          j        d          | j                            d||f           d S )Ninsert_beforeinsert_afterz^Can't specify insert_before or insert_after when using ALTER; please specify recreate='always'
add_column)rX   r   r`   rJ   rE   rr   s      rL   rw   zBatchOperationsImpl.add_column   sj    r!!^r%9%9'')) &:":   	
<b122222rN   c                @    | j                             d||f           d S )Ndrop_columnrq   rr   s      rL   ry   zBatchOperationsImpl.drop_column   s%    
=#r233333rN   constr,   c                B    | j                             d|fi f           d S )Nadd_constraintrq   rK   rz   s     rL   r|   z"BatchOperationsImpl.add_constraint   s(    
+eXr:;;;;;rN   c                B    | j                             d|fi f           d S )Ndrop_constraintrq   r}   s     rL   r   z#BatchOperationsImpl.drop_constraint   s(    
,uh;<<<<<rN   c                @    | j                             d||f           d S )Nrename_tablerq   rr   s      rL   r   z BatchOperationsImpl.rename_table   rs   rN   idxr   rh   r   c                B    | j                             d|f|f           d S )Ncreate_indexrq   rK   r   rh   s      rL   r   z BatchOperationsImpl.create_index   s'    
>C62677777rN   c                B    | j                             d|f|f           d S )N
drop_indexrq   r   s      rL   r   zBatchOperationsImpl.drop_index   s'    
<#455555rN   c                B    | j                             d|fi f           d S )Ncreate_table_commentrq   rK   tables     rL   r   z(BatchOperationsImpl.create_table_comment   s(    
1E8R@AAAAArN   c                B    | j                             d|fi f           d S )Ndrop_table_commentrq   r   s     rL   r   z&BatchOperationsImpl.drop_table_comment   s(    
/%2>?????rN   c                     t          d          )Nz Can't create table in batch modeNotImplementedErrorr   s     rL   create_tablez BatchOperationsImpl.create_table   s    !"DEEErN   c                     t          d          )NzCan't drop table in batch moder   r   s     rL   
drop_tablezBatchOperationsImpl.drop_table   s    !"BCCCrN   c                B    | j                             d|fi f           d S )Ncreate_column_commentrq   rK   columns     rL   r   z)BatchOperationsImpl.create_column_comment   s(    
2VIrBCCCCCrN   N)rO   r(   )rO   r.   )rO   rU   rO   rY   rz   r,   rO   rY   )r   r   rh   r   rO   rY   )__name__
__module____qualname__rM   propertyrR   rF   rX   rn   rp   rw   ry   r|   r   r   r   r   r   r   r   r   r   r6   rN   rL   r0   r0   7   s       # # #J , , , X, $ $ $ X$   7. 7. 7. 7.r5 5 5 53 3 3 34 4 4 4< < < <= = = =5 5 58 8 8 86 6 6 6B B B@ @ @F F FD D DD D D D DrN   r0   c                      e Zd Z	 dFdGdZedHd            ZdIdZdIdZdIdZdJdZ	dKdZ
dLdZ	 	 	 	 	 	 dMdNd0ZdOd4Z	 	 dPdQd7ZdRd9Zd: Zd; Zd< ZdSd?ZdSd@ZdTdCZdTdDZdE Zd S )Urc   r6   rF   r.   r   r   r=   tupler?   Dict[str, Any]rl   rU   rI   rO   rY   c                ^   || _         || _        || _        || _        |                     |j                  | _        d | _        || _        d| _	        t          d | j        j        D                       | _        t          | j                  | _        || _        |                                  d S )Nr6   c              3  ,   K   | ]}|j         d |ifV  dS exprN)ra   .0cs     rL   	<genexpr>z*ApplyBatchImpl.__init__.<locals>.<genexpr>   s>       ,
 ,
&'QVfa[!,
 ,
 ,
 ,
 ,
 ,
rN   )rF   r   r=   r?   _calc_temp_namera   temp_table_name	new_tablerI   add_col_orderingr   r   column_transfersrC   existing_orderingrl   _grab_table_elements)rK   rF   r   r=   r?   rl   rI   s          rL   rM   zApplyBatchImpl.__init__   s     	
$(#33EJ??*."4  	 !, ,
 ,
+/:<,
 ,
 ,
 !
 !
 "&d&;!<!<"!!#####rN   	tablenameUnion[quoted_name, str]strc                    d|z  dd         S )Nz_alembic_tmp_%sr   2   r6   )clsr   s     rL   r   zApplyBatchImpl._calc_temp_name   s    !I-qt44rN   c                z   | j         j        }t                      | _        | j         j        D ]Z}t          ||          }dx|_        |_        t          |j	        t                    r|j	        |j	        usJ || j        |j        <   [i | _        g | _        i | _        i | _        i | _        | j         j        D ]t}t%          |          r| j        rt          |t(                    r|j        s6t+          |j                  r|| j        |j        <   Z| j                            |           u| j        s1| j         j        D ]$}|j        D ]}|j        r||f| j        |j        <   %| j         j        D ]}|| j        |j        <   | j         j        D ]-}| j                            || j         j        |                    .d S )Nr   F)r   r   r   columnsr   r   uniqueindex
isinstancetyper   ra   named_constraintsunnamed_constraintscol_named_constraintsindexesnew_indexesconstraintsr!   rl   r   r&   rE   kwargsr?   rB   )rK   r   r   c_copyrz   colr   ks           rL   r   z#ApplyBatchImpl._grab_table_elements   s   "/:}} 	* 	*A1V,,,F+00FMFL !&"344 1{!&0000#)DL  8:#% %'")+-/Z+ 	7 	7Ee$$ 77uo667 
7 '
33 75:&uz22(//6666~ 	Nz| N N _ N NEz NBEu25:>N :% 	) 	)C%(DL""" 	B 	BA((DJ,=a,@AAAA	B 	BrN   c                z    t                      }t           j                  } j        rF j        D ]=}t	          |          D ]+\  }}|dk    r |                    ||dz
           |f           ,>n@t	           j                  D ]+\  }}|dk    r |                    ||dz
           |f           ,|                     j                   d |D             }t          t          j
        ||d                    }t           fd|D                        _        t           fd|D                        _        d S )Nr      c                6    g | ]}|d          |d         k    |S )r   r   r6   )r   ps     rL   
<listcomp>zNApplyBatchImpl._adjust_self_columns_for_partial_reordering.<locals>.<listcomp>9  s%    777A!A$!A$,,a,,,rN   T)deterministic_orderc              3  6   K   | ]}|j         |         fV  d S rQ   )r   r   r   rK   s     rL   r   zMApplyBatchImpl._adjust_self_columns_for_partial_reordering.<locals>.<genexpr>>  s.      "I"IAAt|A#7"I"I"I"I"I"IrN   c              3  6   K   | ]}|j         |         fV  d S rQ   )r   r   s     rL   r   zMApplyBatchImpl._adjust_self_columns_for_partial_reordering.<locals>.<genexpr>?  sA       ,
 ,
./Q%a(),
 ,
 ,
 ,
 ,
 ,
rN   )setrC   r   rI   	enumerateaddr   updater   r   sortr   r   )rK   pairs
col_by_idxtuple_r   elem
pairs_listsorted_s   `       rL   +_adjust_self_columns_for_partial_reorderingz:ApplyBatchImpl._adjust_self_columns_for_partial_reordering%  s   $,''
" 	=1 = =#,V#4#4 = =KE4qyy		6%!)#4d";<<<==
  ))?@@ = =t199IIz%!)4d;<<<T*+++
 87777
ZNNN
 
 #"I"I"I"I"I"I"III + ,
 ,
 ,
 ,
3:,
 ,
 ,
 !
 !
rN   c                d   | j         
J d            t                      }| j        j        }| j        s| j        r|                                  t          | j        |gt          | j
                                                  t          | j                  z   R d|i| j        x| _         }t          | j                                                  | j        z   D ]}d t!          |          D             }|                    | j                  s6t'          |t(                    r9t+          |          rt-          ||| j                  }n$t-          ||          }nt-          |||          }t'          |t(                    r|                     ||           |                    |           d S )NzCan only create new table oncer   c                    h | ]	}|j         
S r6   )keyr   s     rL   	<setcomp>zAApplyBatchImpl._transfer_elements_to_new_table.<locals>.<setcomp>W  s    KKKqQUKKKrN   )r   target_tabler   )r   r   r   r   rI   r   r   r   r   rC   r   valuesr=   r?   r   r   r   issubsetr   r   r   r   r   _setup_referentappend_constraint)rK   mr   r   rz   const_columns
const_copys          rL   _transfer_elements_to_new_tablez.ApplyBatchImpl._transfer_elements_to_new_tableC  s   ~%%'G%%%JJ"" 	?d&; 	?<<>>>%* &
 4<&&(())D,A,AA&
 &
 &
 	&

 &
 &
 	
 '..0011D4LL	4 	4E LK,CE,J,JKKKM ))$*?@@  %!566 *511 = "'f4:" " "JJ "'uV!<!<!<JJ"&y  
 %!566 /$$Q...''
3333?	4 	4rN   List[Index]c           	          j         J g } j                                        D ]_}|j        r
t	          |j        g fdt          |          D             R |j         j         d|j        }|	                    |           ` j
                                        D ]Y}|	                    t	          |j        g fd|j                                        D             R d|j        i|j                   Z|S )Nc                :    g | ]}t          |j                  S r6   )r   r   )r   r   rK   s     rL   r   zCApplyBatchImpl._gather_indexes_from_both_tables.<locals>.<listcomp>  s5        %T4>::  rN   )r   _tablec                4    g | ]}j         j        |         S r6   )r   r   )r   r   rK   s     rL   r   zCApplyBatchImpl._gather_indexes_from_both_tables.<locals>.<listcomp>  s#    LLLdn&s+LLLrN   r   )r   r   r   _column_flagr   ra   r   r   r   rE   r   r   keys)rK   r   idx_existingidx_copyr   s   `    rL    _gather_indexes_from_both_tablesz/ApplyBatchImpl._gather_indexes_from_both_tablesu  sj   ~))) L//11 	! 	!L ( !	    <\ J J  	 	#*
 ~	 	 %	 	H JJx    %,,.. 	 	EJJJ MLLLu}7I7I7K7KLLL   < l	     
rN   metadatar   
constraintr   c                X   |j         d                                         }|                    d          }|d         }t          |          dk    r	|d         }nd }|| j        k    rt          j        ||          }dd||j        v rs|j        |         }|j         D ]\}	 |	                              d          d         }
|
|j        vr-|	                    t          |
t          j                             ]d S t          ||gd	 fd
|j         D             D             R d|i d S d S )Nr   .   r   r   c                *    |                                  S rQ   )_get_colspec)r   s    rL   colspecz/ApplyBatchImpl._setup_referent.<locals>.colspec  s    ((***rN   c                B    g | ]}t          |t          j                  S r6   )r   sqltypesNULLTYPE)r   ns     rL   r   z2ApplyBatchImpl._setup_referent.<locals>.<listcomp>  s5        q("344  rN   c                X    g | ]&} |                               d           d         'S )r   r   )split)r   r   r   s     rL   r   z2ApplyBatchImpl._setup_referent.<locals>.<listcomp>  sD     " " " $ $GDMM//44R8" " "rN   r   )r   r   )elementsr   r  lenr   
sql_schema_get_table_keytablesr   append_columnr   r   r   r   )rK   r   r   specpartstnamereferent_schemar   tr   colnamer   s              @rL   r   zApplyBatchImpl._setup_referent  s    "1%2244

3b	u::??#AhOO"OD(((+E?CCC+ + + + ho%%OC(&/ L LD%gdmm11#66r:Gac))w8I(J(JKKKL L
  " " " "(2(;" " "     +     )(rN   op_implc           
     z   |                                   |                    | | j                   | j        J |                    | j                   	 |                    t          | j                                      t          d | j	        
                                D                       t          d | j	                                        D                                   |                    | j                   |                    | j        | j        j        | j        j                   | j        j        | j        _        	 |                                 D ]}|                    |           	 | j        | j        _        d S # | j        | j        _        w xY w#  |                    | j                    xY w)Nc              3  (   K   | ]\  }}d |v 	|V  dS r   r6   )r   r   transfers      rL   r   z)ApplyBatchImpl._create.<locals>.<genexpr>  s=        'Ax!X-- ---- rN   c                &    g | ]}d |v |d          S )r   r6   )r   r  s     rL   r   z*ApplyBatchImpl._create.<locals>.<listcomp>  s2        (%11 %V,111rN   r   )r   prep_table_for_batchr   r   r   _execr    from_selectrC   r   itemsr$   r   r   r   r   ra   r   r   r   )rK   r  r   s      rL   rd   zApplyBatchImpl._create  s   ,,...$$T4:666~)))T^,,,	;MMt~..::  +/+@+F+F+H+H    
  ,0,A,H,H,J,J       tz***
   $djodj>O !    #'*/DN;@@BB . .C((----. '+&:###d&:#::::	t~...s   B+F ,F FF:NFr9   column_namenullableOptional[bool]server_default)Optional[Union[Function[Any], str, bool]]ra   Optional[str]type_Optional[TypeEngine]autoincrement&Optional[Union[bool, Literal['auto']]]commentUnion[str, Literal[False]]c	                   | j         |         }
| j        |         }|||k    r||
_        ||d<   |	                    dd           }|r\t	          |	d         | j        j                  }t          |t                    r'|j        r | j	        
                    |j        d            |it          j        |          }t          |
j        t                    rdx|
j        _        |
j        _        | j                            |
||           ||
_        |||
_        |dur1|d |
_        n't'          j        |                              |
           |t-          |          |
_        |dur	||
_        d S d S )Nra   existing_typeF)r   r   ra   rD   r#   rF   rR   r   r   r   popr   to_instancer   _create_eventscreate_constraintcast_for_batch_migrater  r  r  DefaultClause_set_parentrU   r  r!  )rK   r9   r  r  r  ra   r  r  r!  rh   existingexisting_transferr$  resolved_existing_types                 rL   rp   zApplyBatchImpl.alter_column  s    <,,0,A+,N 3 3 !HM(,f%FF?D99M )='):* *& 57HII.3 *...3  
 (//E (-):;;  ,M3 I,,+U   "HM  (H&&%*.''(" +h'''$%)-%8%8H"%&H  rN   r  ru   rv   c                   | j         }d t          |          D             }| j        s|rG|sE||v r'||         dz   }|t          |          k     r||         }nt	          | j                  |         }|r7|s5||v r||         dz
  }|dk    r||         }nd | j        D             |         }|r| xj        ||ffz  c_        |r| xj        ||ffz  c_        | j        s!|s!|s!|r!| xj        |d         |ffz  c_        d S d S d S d S d S )Nc                    i | ]\  }}||	S r6   r6   )r   ira   s      rL   
<dictcomp>zEApplyBatchImpl._setup_dependencies_for_add_column.<locals>.<dictcomp>4  s    DDD71dtQDDDrN   r   r   c                    i | ]\  }}||	S r6   r6   )r   abs      rL   r2  zEApplyBatchImpl._setup_dependencies_for_add_column.<locals>.<dictcomp>L  s+     ( ( (%)QAq( ( (rN   r   )r   r   rI   r  r>   r   )rK   r  ru   rv   
index_colscol_indexesr   s          rL   "_setup_dependencies_for_add_columnz1ApplyBatchImpl._setup_dependencies_for_add_column-  s    +
DDi
.C.CDDD& 	) $ 
#{22),7!;Z00,6sOM )-T-B(C(C()  )# 
)$33)-81<!88+5c?L( (-1-B( ( ('()  	A!!w&>%@@!! 	@!!|W&=%??!! '	B!	B !	B 		B !!z"~w&?%AA!!!!	B 	B 	B 	B 	B 	B 	B 	BrN   r   Column[Any]c                    |                      |j        ||           t          || j        j                  | j        |j        <   i | j        |j        <   d S )Nr   )r8  ra   r   r   r   r   r   )rK   r9   r   ru   rv   rh   s         rL   rw   zApplyBatchImpl.add_column]  s\     	//K	
 	
 	

 %*&9J$K$K$KV[!-/fk***rN   %Union[ColumnClause[Any], Column[Any]]c                   |j         | j        j        j        v rt	          | j        j        j        |           | j        |j         = | j        |j         = | j                            |j                    d|v rPt          |d         t                    r7|d         j         r,| j
                            |d         j         d            d S d S d S d S )Nr$  )ra   r   primary_keyr   r"   r   r   remover   r   r   r%  )rK   r9   r   rh   s       rL   ry   zApplyBatchImpl.drop_columnm  s     ;$*0888*
&.   L%!&+.%%fk222 r!!2o.0ABB "?#( " "&&?#($    	 "!!!!!rN   c                    dS )a^  the batch table creation function will issue create_column_comment
        on the real "impl" as part of the create table process.

        That is, the Column object will have the comment on it already,
        so when it is received by add_column() it will be a normal part of
        the CREATE TABLE and doesn't need an extra step here.

        Nr6   r   s     rL   r   z$ApplyBatchImpl.create_column_comment        rN   c                    dS )zthe batch table creation function will issue create_table_comment
        on the real "impl" as part of the create table process.

        Nr6   r   s     rL   r   z#ApplyBatchImpl.create_table_comment  r@  rN   c                    dS )zthe batch table creation function will issue drop_table_comment
        on the real "impl" as part of the create table process.

        Nr6   r   s     rL   r   z!ApplyBatchImpl.drop_table_comment  r@  rN   rz   r,   c                l   t          |j                  st          d          t          |t          j                  r7| j        j        | j        v r$| j        	                    | j        j                   t          |j                  r|| j        |j        <   d S | j                            |           d S )NConstraint must have a name)r%   ra   r:   r   r  r   r   r=  r   r>  r&   r   rE   r}   s     rL   r|   zApplyBatchImpl.add_constraint  s    &uz22 	<:;;;eZ<== 	Hz%)AAA(//
0FGGG!%*-- 	316D"5:...$++E22222rN   c                   |j         st          d          	 |j         | j        v r| j                            |j                   \  }}t	          | j        |j                  j                  D ]<}|j         |j         k    r*| j        |j                  j                            |           =nWt          |j                   r | j	                            |j                   }n#|| j
        v r| j
                            |           t          |t                    r!|j        D ]}d| j        |j                  _        d S d S # t          $ r* t          |          rY d S t          d|j         z            w xY w)NrD  FzNo such constraint: '%s')ra   r:   r   r%  rC   r   r   r>  r&   r   r   r   r   r=  KeyErrorr!   )rK   rz   r   	col_consts       rL   r   zApplyBatchImpl.drop_constraint  s   z 	<:;;;	?zT777!7;;EJGG
U!%dl38&<&H!I!I M MI ~33SX.:AA)LLLM (
33 7.225:>>$222(//666 %!566 ? = ? ?C9>DL*66? ?? ?  	F 	F 	Fe$$ 
 7%*DEEE	Fs   C)D; ;E/E/r   r   c                $    || j         |j        <   d S rQ   )r   ra   rK   r   s     rL   r   zApplyBatchImpl.create_index  s    %("""rN   c                l    	 | j         |j        = d S # t          $ r t          d|j        z            w xY w)NzNo such index: '%s')r   ra   rF  r:   rI  s     rL   r   zApplyBatchImpl.drop_index  sJ    	?SX&&& 	? 	? 	?2SX=>>>	?s    "3c                     t          d          )NTODOr   rr   s      rL   r   zApplyBatchImpl.rename_table  s    !&)))rN   )r6   )rF   r.   r   r   r=   r   r?   r   rl   rU   rI   r   rO   rY   )r   r   rO   r   r   )rO   r   )r   r   r   r   rO   rY   )r  r.   rO   rY   )NFNNNF)r9   r   r  r   r  r  r  r  ra   r  r  r  r  r   r!  r"  rO   rY   )r  r   ru   r  rv   r  rO   rY   )NN)
r9   r   r   r9  ru   r  rv   r  rO   rY   )r9   r   r   r;  rO   rY   r   )r   r   rO   rY   )r   r   r   rM   classmethodr   r   r   r   r   r   rd   rp   r8  rw   ry   r   r   r   r|   r   r   r   r   r6   rN   rL   rc   rc      s        %'$ $ $ $ $: 5 5 5 [5,B ,B ,B ,B\
 
 
 
<04 04 04 04d   B# # # #J%; %; %; %;V $(DI"&*@D.3I' I' I' I' I'V.B .B .B .Bh (,&*0 0 0 0 0    0      
3 
3 
3 
3? ? ? ?8) ) ) )? ? ? ?* * * * *rN   rc   N):
__future__r   typingr   r   r   r   r   r	   r
   
sqlalchemyr   r   r   r   r   r   r   r  r   r   r   sqlalchemy.sql.schemar   sqlalchemy.utilr   r   utilr   util.sqla_compatr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   sqlalchemy.enginer(   sqlalchemy.sql.elementsr)   r*   sqlalchemy.sql.functionsr+   r,   sqlalchemy.sql.type_apir-   ddl.implr.   r0   rc   r6   rN   rL   <module>rZ     sx   # " " " " "                                                 & & & & & &       + + + + + +             + + + + + + + + + + + +       ( ( ( ( ( ( 3 3 3 3 3 3 ' ' ' ' ' ' ' ' ' ' ' '       6 6 6 6 6 6 $ $ $ $ $ $ / / / / / / 4 4 4 4 4 4 6 6 6 6 6 6 ; ; ; ; ; ; - - - - - - - - - - - - = = = = = = 3 3 3 3 3 3 & & & & & & 6 6 6 6 6 6 5 5 5 5 5 5 
'))))))444444333333111111000000222222&&&&&&[D [D [D [D [D [D [D [D|x* x* x* x* x* x* x* x* x* x*rN   