
    Ojz                    .   U d dl mZ d dlZd dl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rd 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/m0Z0 d d+l1m2Z2 d d,l1m3Z3 d d-l4m5Z5 d d.l6m7Z7 d d/l6m8Z8 d d0l6m9Z9 d d1l6m:Z: d d2l;m<Z< d d3l=m>Z> dd4lm?Z? dd5l@mAZA dd6lBmCZC dd7lBmDZD e+e-z  e,z  e.z  ZE ejF        eG          ZH G d8 d9eI          ZJi ZKd:eLd;<    G d< d=eJ>          ZM G d? d@e          ZNdIdHZOdS )J    )annotationsN)Any)Callable)Dict)Iterable)List)Mapping)
NamedTuple)Optional)Sequence)Set)Tuple)Type)TYPE_CHECKING)Union)cast)Column)MetaData)PrimaryKeyConstraintschema)String)Table)text   )_autogen)base)_constraint_sig)ComparisonResult   )util)sqla_compat)Literal)TextIO)
Connection)Dialect)CursorResult)ReflectedForeignKeyConstraint)ReflectedIndex)ReflectedPrimaryKeyConstraint)ReflectedUniqueConstraint)	Inspector)ClauseElement)
Executable)quoted_name)
Constraint)ForeignKeyConstraint)Index)UniqueConstraint)TableClause)
TypeEngine)_ServerDefaultType)AutogenContext)ApplyBatchImpl)BatchOperationsImplc                      e Zd Zd	dZdS )
ImplMeta	classnamestrbasesTuple[Type[DefaultImpl]]dict_Dict[str, Any]c                h    t                               | |||          }d|v r| t          |d         <   |S )N__dialect__)type__init___impls)clsr<   r>   r@   newtypes        d/lsinfo/ai/hellotax_ai/training_center/backend/venv/lib/python3.11/site-packages/alembic/ddl/impl.pyrE   zImplMeta.__init__L   s:     --Yu==E!!+.F5'(    N)r<   r=   r>   r?   r@   rA   )__name__
__module____qualname__rE    rJ   rI   r;   r;   K   s(        	 	 	 	 	 	rJ   r;   zDict[str, Type[DefaultImpl]]rF   c                  8   e Zd ZU dZdZdZdZddhfZded<   d	Z	d
ed<   dZ
ded<   ddZedd            Zdd"Zdd*Zdd-Zdd1Zedd2            Zd3d3 ej                    fdd=Z	 ddd@Zd3dd3d3d3d3dd3d3d3d3d3dAddSZd3d3d3d3dTdd[Zd3d3d\dd^Zdd`ZddbZ	 dddfZddgZddhZddkZ ddlZ!ddmZ"ddnZ#ddoZ$	 ddduZ%ddxZ&dd{Z'dd~Z(ddZ)d Z*ddZ+d Z,	 dddZ-ddZ.ddZ/d Z0ddZ1ddZ2ddZ3ddZ4d Z5ddZ6ddZ7ddZ8ddZ9ddZ:d Z;ddZ<d3S )DefaultImpla  Provide the entrypoint for major migration operations,
    including database-specific behavioral variances.

    While individual SQL/DDL constructs already provide
    for database-specific implementations, variances here
    allow for entirely different sequences of operations
    to take place for a particular migration, such as
    SQL Server's special 'IDENTITY INSERT' step for
    bulk inserts.

    defaultF;NUMERICDECIMALzTuple[Set[str], ...]type_synonymsrN   zSequence[str]type_arg_extract)orderon_nullzTuple[str, ...]identity_attrs_ignoredialectr&   
connectionOptional[Connection]as_sqlbooltransactional_ddlOptional[bool]output_bufferOptional[TextIO]context_optsrA   returnNonec                    || _         || _        || _        |                    dd          | _        || _        i | _        || _        ||| _        | j        r| j        st          j
        d          d S d S )Nliteral_bindsFz3Can't use literal_binds setting without as_sql mode)rZ   r[   r]   getrg   ra   memorc   r_   r!   CommandError)selfrZ   r[   r]   r_   ra   rc   s          rI   rE   zDefaultImpl.__init__t   s     $)--ouEE*	((%6D" 	; 'I  	 	 rJ   Type[DefaultImpl]c                &    t           |j                 S N)rF   name)rG   rZ   s     rI   get_by_dialectzDefaultImpl.get_by_dialect   s    gl##rJ   r   r=   c                    | j         J | j                             |dz              | j                                          d S )Nz

)ra   writeflush)rk   r   s     rI   static_outputzDefaultImpl.static_output   sG    !---  ///  """""rJ   version_tableversion_table_schemaOptional[str]version_table_pkkwr   r   c          
         t          |t                      t          dt          d          d          |          }|r'|                    t          d| d                     |S )a  Generate a :class:`.Table` object which will be used as the
        structure for the Alembic version table.

        Third party dialects may override this hook to provide an alternate
        structure for this :class:`.Table`; requirements are only that it
        be named based on the ``version_table`` parameter and contains
        at least a single string-holding column named ``version_num``.

        .. versionadded:: 1.14

        version_num    F)nullabler   _pkcro   )r   r   r   r   append_constraintr   )rk   ru   rv   rx   ry   vts         rI   version_table_implzDefaultImpl.version_table_impl   s    & JJ=&**u==='	
 
 
  	  $!=(>(>(>     	rJ   batch_opr9   c                    dS )zReturn True if the given :class:`.BatchOperationsImpl`
        would need the table to be recreated and copied in order to
        proceed.

        Normally, only returns True on SQLite when operations other
        than add_column are present.

        FrN   )rk   r   s     rI   requires_recreate_in_batchz&DefaultImpl.requires_recreate_in_batch   s	     urJ   
batch_implr8   tablec                    dS )zperform any operations needed on a table before a new
        one is created to replace it in batch mode.

        the PG dialect uses this to drop constraints on the table
        before the new one uses those same names.

        NrN   )rk   r   r   s      rI   prep_table_for_batchz DefaultImpl.prep_table_for_batch         rJ   c                    | j         S rn   )r[   rk   s    rI   bindzDefaultImpl.bind   s
    rJ   N	constructUnion[Executable, str]execution_optionsOptional[Mapping[str, Any]]multiparams%Optional[Sequence[Mapping[str, Any]]]paramsMapping[str, Any]Optional[CursorResult]c                   t          |t                    rt          |          }| j        r||rt	          d          | j        r-t          |t          j                  st          ddi          }ni }t          rt          |t                    sJ  |j        d	d| j        i|}|                     t          |                              dd                                          | j        z              d S | j        }|J |r |j        d	i |}|r|t	          d          |r|                    ||          S |                    ||          S )
Nz&SQL parameters not allowed with as_sqlrg   T)compile_kwargsrZ   	z    z2Can't send params and multiparams at the same timerN   )
isinstancer=   r   r]   	TypeErrorrg   r   
DDLElementdictr   r-   compilerZ   rt   replacestripcommand_terminatorr[   r   execute)rk   r   r   r   r   
compile_kwcompiledconns           rI   _execzDefaultImpl._exec   s    i%% 	(YI; "	7&&& HIII !  *6,+ +   "/41HIII


 <!)];;;;;(y(LLLLLHH%%dF3399;;)*   4?D###  C-t-BB0ABB +1H    7||I{;;;||Iv666rJ   sqlOptional[dict[str, Any]]c                2    |                      ||           d S rn   )r   )rk   r   r   s      rI   r   zDefaultImpl.execute  s    
 	

3)*****rJ   )r}   server_defaultro   type_r   autoincrementcommentexisting_commentexisting_typeexisting_server_defaultexisting_nullableexisting_autoincrement
table_namecolumn_namer}   r   3Optional[Union[_ServerDefaultType, Literal[False]]]ro   r   Optional[TypeEngine]r   r   r   $Optional[Union[str, Literal[False]]]r   r   r   r   r   c                  ||t          j        dd           |/|                     t          j        ||||||||
                     |dur{i }t          j        ||          rt          j        }n3t          j        ||          rt          j	        }| |d<   nt          j
        }|                      ||||f|||||
d|           |/|                     t          j        ||||||||
                     |	dur/|                     t          j        |||	|||||
                     |0|                     t          j        |||||||                     d S d S )NzBautoincrement and existing_autoincrement only make sense for MySQL   )
stacklevel)r   r   r   r   r   Fimpl)r   r   r   r   )r!   warnr   r   ColumnNullabler"   _server_default_is_computedComputedColumnDefault_server_default_is_identityIdentityColumnDefaultColumnDefault
ColumnTypeColumnComment
ColumnName)rk   r   r   r}   r   ro   r   r   r   r   r   r   r   r   r   ry   cls_s                    rI   alter_columnzDefaultImpl.alter_column	  s5   . $(>(JI,   
 JJ#!"/,C&7%5	 	 	   &&B 6 7  
* 18 7  * 1!6

)JJ"
 ""/,C&7%5
 
 
 
   JJ!"/,C&7%5	 	 	   %JJ"!"/,C&7%5	 	 	   JJ!"/,C&7  
 
 
 
 
 rJ   r   if_not_existsinline_referencesinline_primary_keycolumnColumn[Any]!Optional[Union[str, quoted_name]]r   r   r   c          
     `    |                      t          j        ||||||                     d S )Nr   )r   r   	AddColumn)rk   r   r   r   r   r   r   s          rI   
add_columnzDefaultImpl.add_column~  sJ     	

N+"3#5  		
 		
 		
 		
 		
rJ   r   	if_existsr   c               \    |                      t          j        ||||                     d S )Nr   )r   r   
DropColumn)rk   r   r   r   r   ry   s         rI   drop_columnzDefaultImpl.drop_column  sA     	

OF6Y  	
 	
 	
 	
 	
rJ   constc                    |j         |                     |           rIt          j        r|                    dd           |                     t          j        |fi |           d S d S )Nisolate_from_tableT)_create_ruler"   sqla_2_1
setdefaultr   r   AddConstraintrk   r   ry   s      rI   add_constraintzDefaultImpl.add_constraint  sq    %););D)A)A%# :2D999JJv+E88R8899999	 &%rJ   r0   c                P    |                      t          j        |fi |           d S rn   )r   r   DropConstraintr   s      rI   drop_constraintzDefaultImpl.drop_constraint  s-    

6(55"5566666rJ   old_table_namenew_table_nameUnion[str, quoted_name]c                Z    |                      t          j        |||                     d S )Nr   )r   r   RenameTable)rk   r   r   r   s       rI   rename_tablezDefaultImpl.rename_table  s9     	

^^FKKK	
 	
 	
 	
 	
rJ   c                   |j                             || j        d|            |                     t	          j        |fi |           |j                             || j        d|            |j        D ])}|                     t	          j        |                     *| j	        j
        o| j	        j         }|j        }|r|r|                     |           |j        D ]"}|j        }|r|r|                     |           #d S NF)
checkfirst_ddl_runner)dispatchbefore_creater[   r   r   CreateTableafter_createindexesCreateIndexrZ   supports_commentsinline_commentsr   create_table_commentcolumnscreate_column_comment)rk   r   ry   indexwith_commentr   r   s          rI   create_tablezDefaultImpl.create_table  s>   $$4?u$ 	% 	
 	
 	
 	

6%e22r22333##4?u$ 	$ 	
 	
 	
 ] 	2 	2EJJv)%001111 L*O4<3O/O 	 - 	-| 	-%%e,,,m 	3 	3FnG 3< 3**6222	3 	3rJ   c                    |j                             || j        d|            |                     t	          j        |fi |           |j                             || j        d|            d S r   )r   before_dropr[   r   r   	DropTable
after_drop)rk   r   ry   s      rI   
drop_tablezDefaultImpl.drop_table  s    ""4?u$ 	# 	
 	
 	
 	

6#E00R00111!!4?u$ 	" 	
 	
 	
 	
 	
rJ   r   r2   c                P    |                      t          j        |fi |           d S rn   )r   r   r   rk   r   ry   s      rI   create_indexzDefaultImpl.create_index  s-    

6%e22r2233333rJ   c                T    |                      t          j        |                     d S rn   )r   r   SetTableCommentrk   r   s     rI   r   z DefaultImpl.create_table_comment  s%    

6)%0011111rJ   c                T    |                      t          j        |                     d S rn   )r   r   DropTableCommentr  s     rI   drop_table_commentzDefaultImpl.drop_table_comment  s%    

6*51122222rJ   c                T    |                      t          j        |                     d S rn   )r   r   SetColumnComment)rk   r   s     rI   r   z!DefaultImpl.create_column_comment  s%    

6*62233333rJ   c                P    |                      t          j        |fi |           d S rn   )r   r   	DropIndexr  s      rI   
drop_indexzDefaultImpl.drop_index  s-    

6#E00R0011111rJ   TUnion[TableClause, Table]rows
List[dict]multiinsertc           
        t          |t                    st          d          |r*t          |d         t                    st          d          | j        ri|D ]d}|                                                                                      j        di fd|	                                D                        ed S |r|r=|                                                                                     |           d S |D ]H}|                                                                                      j        di |           Gd S d S )NzList expectedr   zList of dictionaries expectedc           	         i | ]I\  }}|t          |t          j                  s't          j        ||j        |         j                   n|JS ))r   )r   r"   _literal_bindparamcrD   ).0kvr   s      rI   
<dictcomp>z+DefaultImpl.bulk_insert.<locals>.<dictcomp>  sx        !%1  (2$%{'E(" ("!' >$%q
!" !" !" !" &'  rJ   )r   rN   )
r   listr   r   r]   r   insertinlinevaluesitems)rk   r   r  r  rows    `   rI   bulk_insertzDefaultImpl.bulk_insert  s    $%% 	=O,,, 	=*T!Wd33 	=;<<<; 	J  

ELLNNVXX     ),		       (  J JJJu||~~4466DJIIIII# J J

#A5<<>>#8#8#:#:#A#H#HC#H#HIIIIJ JJ JrJ   r   Paramsc                j   | j         j                            |j                                                  }t          j        d|          }g }d }|D ]/}t          j        d|          r|}|                    |           0t          |d         |dd          g i           }|rt          j        d|          D ]y}d|v rG|
                    d          \  }	}
|
                                |j        |	                                <   M|j                            |                                           z|S )Nz[\w\-_]+|\(.+?\)z^\(.*\)$r   r   z[^(),]+=)rZ   type_compilerprocessrD   lowerrefindallmatchappendr!  splitr   kwargsargs)rk   r   
definitiontokensterm_tokens
paren_termtokenr   termkeyvals              rI   _tokenize_column_typez!DefaultImpl._tokenize_column_type  s*   \/77DDJJLL
 J':JGG!#
 	* 	*ExU++ *"

""5))))AABBR@@ 	5
9j99 5 5$;;#zz#HC14FM#))++..K&&tzz||4444rJ   inspector_paramsmetadata_paramsc                X   |j         |j         k    rdS d | j        D             }d                    |j         g|j        z             }d                    |j         g|j        z             }|D ]=}||h                    |          s!|j         |j         h                    |          r dS >dS )NTc                &    g | ]}d  |D             S )c                6    h | ]}|                                 S rN   )r&  )r  ts     rI   	<setcomp>z=DefaultImpl._column_types_match.<locals>.<listcomp>.<setcomp>9  s     ...1QWWYY...rJ   rN   )r  batchs     rI   
<listcomp>z3DefaultImpl._column_types_match.<locals>.<listcomp>9  s'    OOO5.....OOOrJ    F)token0rU   joinr/  issubset)rk   r7  r8  synonymsinspector_all_termsmetadata_all_termsr>  s          rI   _column_types_matchzDefaultImpl._column_types_match3  s     "o&<<<4OOD<NOOO!hh$%(8(??
 
 !XX#$'==
 
  	 	E#%78AA%HH  '&M huoo tt	
 urJ   inspected_paramsmeta_paramsc                t   t          |j                  t          |j                  k    r|j        |j        k    rdS t          |j                  t          |j                  k    r|j        |j        k    rdS d                    |j                                                  }d                    |j                                                  }| j        D ]_}t          j        ||          }t          j        ||          }|r1|r/|                    d          |                    d          k    r dS `dS )a  We want to compare column parameters. However, we only want
        to compare parameters that are set. If they both have `collation`,
        we want to make sure they are the same. However, if only one
        specifies it, dont flag it for being less specific
        Fr@  r   T)	lenr/  r-  rB  r&  rV   r'  searchgroup)rk   rH  rI  inspmetaregmimms           rI   _column_args_matchzDefaultImpl._column_args_matchI  s'    "##s+;+B'C'CCC"&6&===5  !!S)9)>%?%??? $4$9995xx(/006688xx*++1133( 	 	C3%%B3%%B b RXXa[[BHHQKK77uutrJ   inspector_columnmetadata_columnc                    |                      |          }|                      |          }|                     ||          sdS |                     ||          sdS dS )zReturns True if there ARE differences between the types of the two
        columns. Takes impl.type_synonyms into account between retrospected
        and metadata types
        TF)r6  rG  rS  )rk   rT  rU  r7  r8  s        rI   compare_typezDefaultImpl.compare_typej  sm      556FGG44_EE''(8/JJ 	4&&'7II 	4urJ   c                    ||k    S rn   rN   )rk   rT  rU  rendered_metadata_defaultrendered_inspector_defaults        rI   compare_server_defaultz"DefaultImpl.compare_server_defaultz  s     *-FFFrJ   conn_uniquesSet[UniqueConstraint]conn_indexes
Set[Index]metadata_unique_constraintsmetadata_indexesc                    d S rn   rN   )rk   r\  r^  r`  ra  s        rI   correct_for_autogen_constraintsz+DefaultImpl.correct_for_autogen_constraints  s	     	rJ   c                b    |j         j        |j        urt          |d         |          |d<   d S d S )Nexpr)rD   _type_affinityr   )rk   existingexisting_transfernew_types       rI   cast_for_batch_migratez"DefaultImpl.cast_for_batch_migrate  sC    ='x/FFF(,!&)8) )f%%% GFrJ   re  r-   is_server_defaultc                ^    ddd}t          |                    | j        |                    S )zdRender a SQL expression that is typically a server default,
        index expression, etc.

        TF)rg   include_table)rZ   r   )r=   r   rZ   )rk   re  rk  ry   r   s        rI   render_ddl_sql_exprzDefaultImpl.render_ddl_sql_expr  s8     (,eDD
LLjLII
 
 	
rJ   	inspectorr,   r   c                    | j         S rn   )autogen_column_reflect)rk   ro  s     rI   _compat_autogen_column_reflectz*DefaultImpl._compat_autogen_column_reflect  s    **rJ   conn_fksSet[ForeignKeyConstraint]metadata_fksc                    d S rn   rN   )rk   rs  ru  s      rI   correct_for_autogen_foreignkeysz+DefaultImpl.correct_for_autogen_foreignkeys  s	    
 	rJ   c                    dS )zA hook that is attached to the 'column_reflect' event for when
        a Table is reflected from the database during the autogenerate
        process.

        Dialects can elect to modify the information gathered here.

        NrN   )rk   ro  r   column_infos       rI   rq  z"DefaultImpl.autogen_column_reflect  r   rJ   c                    dS )zA hook called when :meth:`.EnvironmentContext.run_migrations`
        is called.

        Implementations can set up per-migration-run state here.

        NrN   r   s    rI   start_migrationszDefaultImpl.start_migrations  r   rJ   c                @    |                      d| j        z              dS )zEmit the string ``BEGIN``, or the backend-specific
        equivalent, on the current connection context.

        This is used in offline mode and typically
        via :meth:`.EnvironmentContext.begin_transaction`.

        BEGINNrt   r   r   s    rI   
emit_beginzDefaultImpl.emit_begin  s&     	7T%<<=====rJ   c                @    |                      d| j        z              dS )zEmit the string ``COMMIT``, or the backend-specific
        equivalent, on the current connection context.

        This is used in offline mode and typically
        via :meth:`.EnvironmentContext.begin_transaction`.

        COMMITNr~  r   s    rI   emit_commitzDefaultImpl.emit_commit  s&     	8d&==>>>>>rJ   type_objr5   autogen_contextr7   Union[str, Literal[False]]c                    dS NFrN   )rk   r  r  s      rI   render_typezDefaultImpl.render_type  s	     urJ   c                   t          ||t          j                    dh          \  }}t          |dd           }t          |dd           }t	          |          t	          |          k    r|                    d           |                    | j                   ||t	          |          pt	          |          t	          |          k    fS )Nalways)skip)_compare_identity_optionsr   Identitygetattrr^   adddifference_updaterY   )rk   metadata_identityinspector_identitydiffignoredmeta_alwaysinspector_alwayss          rI   _compare_identity_defaultz%DefaultImpl._compare_identity_default  s     2O	
 
 
g /4@@"#5xFF%5 6 666HHXt9:::
 JJM$011T:L5M5MM
 	
rJ   metadata_indexreflected_indexc                r    t          |j                  }t          |j                  }||k    rd| d| S d S )Nzunique=z to unique=)r^   unique)rk   r  r  conn_uniquemeta_uniques        rI   _compare_index_uniquez!DefaultImpl._compare_index_unique  sJ     ?122>011+%%B[BB[BBB4rJ   
constraint_autogen._Copts_constraint_sig[_autogen._C]c                *    t          j        d| |fi |S )NTr   from_constraintrk   r  r  s      rI   _create_metadata_constraint_sigz+DefaultImpl._create_metadata_constraint_sig  s!     .tT:NNNNNrJ   c                *    t          j        d| |fi |S r  r  r  s      rI    _create_reflected_constraint_sigz,DefaultImpl._create_reflected_constraint_sig  s!     .udJOO$OOOrJ   r   c                $   g }|                      ||          }|r|                    |           |                     |          }|                     |          }t	          j        |          sJ t	          j        |          sJ ||fD ])}|j        r t                              d|j	                   *|j
        |j
        k    r%|                    d|j
         d|j
                    |rt          j        |          S t          j                    S )zCompare two indexes by comparing the signature generated by
        ``create_index_sig``.

        This method returns a ``ComparisonResult``.
        zGenerating approximate signature for index %s. The dialect implementation should either skip expression indexes or provide a custom implementation.expression  to )r  r*  r  r  r   is_index_sighas_expressionslogwarningr   column_namesr   	DifferentEqual)rk   r  r  msg
unique_msgm_sigr_sigsigs           rI   compare_indexeszDefaultImpl.compare_indexes  sB    //O
 

  	#JJz"""44^DD55oFF$U+++++$U+++++ %< 	 	C" : I   !333JJJe0JJe6HJJ    	,#-c222#)+++rJ   metadata_constraintr3   reflected_constraintc                    |                      |          }|                     |          }|j        }|j        }||k    rt          j        d| d|           S t          j                    S )a  Compare two unique constraints by comparing the two signatures.

        The arguments are two tuples that contain the unique constraint and
        the signatures generated by ``create_unique_constraint_sig``.

        This method returns a ``ComparisonResult``.
        r  r  )r  r  unnamedr   r  r  )rk   r  r  metadata_tupreflected_tupmeta_sigconn_sigs          rI   compare_unique_constraintz%DefaultImpl.compare_unique_constraint/  s     ;;
 
 == 
 
  ' (x#-6h66H66   $)+++rJ   c           
        d |D             }t          |          D ]i}|j        |v rt          j        |          }|rGt	          j        d|j        d| j        dt          j         d           |                    |           jd S )Nc                    i | ]
}|j         |S rN   r   )r  r  s     rI   r  z8DefaultImpl._skip_functional_indexes.<locals>.<dictcomp>L  s    @@@a@@@rJ   z@autogenerate skipping metadata-specified expression-based index z
; dialect z under SQLAlchemy z6 can't reflect these indexes so they can't be compared)	r  ro   r"   is_expression_indexr!   r   rC   sqlalchemy_versiondiscard)rk   ra  r^  conn_indexes_by_nameidxiexs         rI   _skip_functional_indexesz$DefaultImpl._skip_functional_indexesK  s    @@<@@@()) 	. 	.Cx///1#66C .	FxF F-1-=F F #."@F F F   !((---	. 	.rJ   reflected_object_ReflectedConstraintkindc                .    |                     di           S )Ndialect_options)rh   )rk   r  r  s      rI    adjust_reflected_dialect_optionsz,DefaultImpl.adjust_reflected_dialect_options\  s      ##$5r:::rJ   )rZ   r&   r[   r\   r]   r^   r_   r`   ra   rb   rc   rA   rd   re   )rZ   r&   rd   rl   )r   r=   rd   re   )
ru   r=   rv   rw   rx   r^   ry   r   rd   r   )r   r9   rd   r^   )r   r8   r   r   rd   re   )rd   r\   )
r   r   r   r   r   r   r   r   rd   r   rn   )r   r   r   r   rd   re   ) r   r=   r   r=   r}   r`   r   r   ro   rw   r   r   r   rw   r   r`   r   r   r   rw   r   r   r   r   r   r`   r   r`   ry   r   rd   re   )r   r=   r   r   r   r   r   r`   r   r`   r   r`   rd   re   )
r   r=   r   r   r   rw   r   r`   rd   re   )r   r   ry   r   rd   re   )r   r0   ry   r   rd   re   )r   r=   r   r   r   r   rd   re   )r   r   ry   r   rd   re   )r   r2   ry   r   rd   re   )r   r   rd   re   )r   r   rd   re   )T)r   r  r  r  r  r^   rd   re   )r   r   rd   r!  )r7  r!  r8  r!  rd   r^   )rH  r!  rI  r!  rd   r^   )rT  r   rU  r   rd   r^   )
r\  r]  r^  r_  r`  r]  ra  r_  rd   re   )F)re  r-   rk  r^   ry   r   rd   r=   )ro  r,   rd   r   )rs  rt  ru  rt  rd   re   )rd   re   )r  r5   r  r7   rd   r  )r  r2   r  r2   rd   rw   )r  r  r  r   rd   r  )r  r2   r  r2   rd   r   )r  r3   r  r3   rd   r   )r  r  r  r=   rd   rA   )=rK   rL   rM   __doc__rC   r_   r   rU   __annotations__rV   rY   rE   classmethodrp   rt   r   r   r   propertyr   r!   immutabledictr   r   r   r   r   r   r   r   r   r   r  r   r  r   r  r   r6  rG  rS  rW  r[  rc  rj  rn  rr  rw  rq  r{  r  r  r  r  r  r  r  r  r  r  r  rN   rJ   rI   rP   rP   [   s        
 
 K,5y+A*CMCCCC&(((((
 .BAAAA   4 $ $ $ [$# # # #
       D   	 	 	 	    X :>=A$6D$6$8$8+7 +7 +7 +7 +7` 7;+ + + + + $( "&* $(,8=*..2 ,015)s s s s s st 59(,,0-1
 
 
 
 
 
4 !%$(
 
 
 
 
 
: : : :7 7 7 7 59	
 
 
 
 
3 3 3 3.
 
 
 
4 4 4 42 2 2 23 3 3 34 4 4 42 2 2 2 !	$J $J $J $J $JL& & & &P   ,   B    G G G      >C
 
 
 
 
+ + + +        > > > >? ? ? ?   

 
 
8   O O O O
P P P P
), ), ), ),V, , , ,8. . ."; ; ; ; ; ;rJ   rP   )	metaclassc                  8    e Zd ZU ded<   ded<   ded<   ded<   dS )	r!  r=   rA  z	List[str]r/  r-  zDict[str, str]r,  N)rK   rL   rM   r  rN   rJ   rI   r!  r!  b  s<         KKKOOOrJ   r!  metadata_io-Union[schema.Identity, schema.Sequence, None]inspector_io
default_io'Union[schema.Identity, schema.Sequence]r  Set[str]c           
        t          j        |           }t          j        |          }t                      t                      d	fd} |||t          j        |          t          |                              |                     t           j        rRt          |d          sJ  |t          | di           t          |di           |j        t          |di                      fS )
N	meta_dictr   	insp_dictdefault_dictattrsIterable[str]c                >   t          |                              
          D ]x}|                     |          }|                    |          }||k    rF|                    |          }||k    r	                    |           c                    |           yd S rn   )set
differencerh   r  )r  r  r  r  attr
meta_value
insp_valuedefault_valuer  ignored_attrr  s           rI   check_dictsz._compare_identity_options.<locals>.check_dictsx  s     JJ))$// 	# 	#D"t,,J"t,,JZ'' , 0 0 6 6.. $$T****HHTNNN	# 	#rJ   dialect_kwargs)r  r   r  r   r  r   r  r  )r"   _get_identity_options_dictr  unionidentity_has_dialect_kwargshasattrr  r  )	r  r  r  r  meta_dinsp_dr  r  r  s	      `   @@rI   r  r  i  s    3K@@F3LAAF55D55L# # # # # # # #  K.z::F&!!	   . 	
z#344444 	K!1266L"2B77%L"2B77		
 	
 	
 rJ   )r  r  r  r  r  r  r  r  )P
__future__r   loggingr'  typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   
sqlalchemyr   r   r   r   r   r   r   r    r   r   r   r   r!   r"   r#   r$   sqlalchemy.enginer%   r&   sqlalchemy.engine.cursorr'   sqlalchemy.engine.interfacesr(   r)   r*   r+   sqlalchemy.engine.reflectionr,   sqlalchemy.sqlr-   r.   sqlalchemy.sql.elementsr/   sqlalchemy.sql.schemar0   r1   r2   r3   sqlalchemy.sql.selectabler4   sqlalchemy.sql.type_apir5   r6   autogenerate.apir7   operations.batchr8   r9   r  	getLoggerrK   r  rD   r;   rF   r  rP   r!  r  rN   rJ   rI   <module>r     s   # " " " " " "  				                                                                                                             + + + + + +                                     8 8 8 8 8 8 : : : : : :              ,,,,,,))))))555555JJJJJJ;;;;;;JJJJJJFFFFFF666666,,,,,,))))))333333000000::::::++++++666666555555222222((((((111111111111666666 	&
'	(
	 $	$  g!!
 
 
 
 
t 
 
 
 (* ) ) ) )D; D; D; D; D;H D; D; D; D;N    Z   0 0 0 0 0 0rJ   