
    +hru                       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rrd 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,l1m4Z4 d d-l1m5Z5 d d.l6m7Z7 d d/l8m9Z9 dd0lm:Z: dd1l;m<Z< dd2l=m>Z> dd3l=m?Z?  ej                  eA      ZB G d4 d5eC      ZDi ZEd6eFd7<    G d8 d9eD:      ZG G d; d<e      ZH	 	 	 	 	 	 	 	 d>d=ZIy)?    )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)	Inspector)ClauseElement)
Executable)quoted_name)
Constraint)ForeignKeyConstraint)Index)UniqueConstraint)TableClause)
TypeEngine)_ServerDefault)AutogenContext)ApplyBatchImpl)BatchOperationsImplc                       e Zd Z	 	 	 	 	 	 ddZy)ImplMetac                V    t         j                  | |||      }d|v r| t        |d   <   |S )N__dialect__)type__init___impls)cls	classnamebasesdict_newtypes        C/var/www/html/venv/lib/python3.12/site-packages/alembic/ddl/impl.pyr;   zImplMeta.__init__B   s4     --Yu=E!+.F5'(    N)r>   strr?   zTuple[Type[DefaultImpl]]r@   Dict[str, Any])__name__
__module____qualname__r;    rC   rB   r7   r7   A   s#    		 (	 		rC   r7   zDict[str, Type[DefaultImpl]]r<   c                     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<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 d>dZed?d       Zd@dZ	 	 	 	 	 	 	 	 	 	 dAdZ	 	 	 	 dBdZ	 	 	 	 	 	 dCdZedDd       Zdd ej*                         f	 	 	 	 	 	 	 	 	 dEdZ	 dF	 	 	 	 	 dGdZ	 	 	 	 	 	 	 	 	 	 	 	 dH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dIdZ	 dF	 	 	 	 	 	 	 dJdZ	 dF	 	 	 	 	 	 	 dKdZdLdZdMdZ	 dF	 	 	 	 	 	 	 dNdZdOdZdOd ZdPd!Z dQd"Z!dQd#Z"dRd$Z#dPd%Z$	 dS	 	 	 	 	 	 	 dTd&Z%dUd'Z&	 	 	 	 	 	 dVd(Z'	 	 	 	 	 	 dWd)Z(	 	 	 	 	 	 dXd*Z)d+ Z*	 	 	 	 	 	 	 	 	 	 dYd,Z+d- Z,	 dZ	 	 	 	 	 	 	 d[d.Z-d\d/Z.	 	 	 	 	 	 d]d0Z/d1 Z0d^d2Z1d^d3Z2d^d4Z3	 	 	 	 	 	 d_d5Z4d6 Z5	 	 	 	 	 	 d`d7Z6	 	 	 	 	 	 dad8Z7	 	 	 	 	 	 dad9Z8	 	 	 	 	 	 dbd:Z9	 	 	 	 	 	 dcd;Z:d< Z;	 	 	 	 	 	 ddd=Z<y)e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_synonymsrI   zSequence[str]type_arg_extract)orderon_nullzTuple[str, ...]identity_attrs_ignorec                    || _         || _        || _        |j                  dd      | _        || _        i | _        || _        ||| _        | j                  r"| j                  st        j                  d      y y )Nliteral_bindsFz3Can't use literal_binds setting without as_sql mode)dialect
connectionas_sqlgetrV   output_buffermemocontext_optstransactional_ddlr!   CommandError)selfrW   rX   rY   r^   r[   r]   s          rB   r;   zDefaultImpl.__init__j   s     $)--ouE*	((%6D";;''I   rC   c                (    t         |j                     S N)r<   name)r=   rW   s     rB   get_by_dialectzDefaultImpl.get_by_dialect   s    gll##rC   c                    | j                   J | j                   j                  |dz          | j                   j                          y )Nz

)r[   writeflush)r`   r   s     rB   static_outputzDefaultImpl.static_output   s>    !!---  /  "rC   c          
         t        |t               t        dt        d      d      |      }|r|j	                  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)rc   )r   r   r   r   append_constraintr   )r`   version_tableversion_table_schemaversion_table_pkkwvts         rB   version_table_implzDefaultImpl.version_table_impl   sW    & J=&*u='	
   $!=/(> 	rC   c                     y)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.

        FrI   )r`   batch_ops     rB   requires_recreate_in_batchz&DefaultImpl.requires_recreate_in_batch   s     rC   c                     y)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.

        NrI   )r`   
batch_impltables      rB   prep_table_for_batchz DefaultImpl.prep_table_for_batch       rC   c                    | j                   S rb   )rX   r`   s    rB   bindzDefaultImpl.bind   s    rC   Nc                   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|}| j                  t        |      j                  dd      j                         | j                   z          y | j"                  }|J |r |j$                  d	i |}|r|t	        d      |r|j'                  ||      S |j'                  ||      S )
Nz&SQL parameters not allowed with as_sqlrV   T)compile_kwargsrW   	z    z2Can't send params and multiparams at the same timerI   )
isinstancerD   r   rY   	TypeErrorrV   r   
DDLElementdictr   r)   compilerW   rh   replacestripcommand_terminatorrX   execution_optionsexecute)r`   	constructr   multiparamsparams
compile_kwcompiledconns           rB   _execzDefaultImpl._exec   sA    i%YI;;&& HII !!*6,,+ "/41HI

!)];;;(y((LLLHH%%dF399;))* ??D### -t--B0AB+1H  ||I{;;||Iv66rC   c                (    | j                  ||       y rb   )r   )r`   sqlr   s      rB   r   zDefaultImpl.execute   s    
 	

3)*rC   c                   ||t        j                  dd       |,| j                  t        j                  ||||||||
             |duri }t        j                  ||      rt        j                  }n<t        j                  ||      rt        j                  }| |d<   nt        j                  }| j                   ||||f|||||
d|       |,| j                  t        j                  ||||||||
             |	dur,| j                  t        j                  |||	|||||
             |,| j                  t        j                  |||||||             y y )NzBautoincrement and existing_autoincrement only make sense for MySQL   )
stacklevel)r   existing_typeexisting_server_defaultexisting_nullableexisting_commentFimpl)r   r   r   r   )r!   warnr   r   ColumnNullabler"   _server_default_is_computedComputedColumnDefault_server_default_is_identityIdentityColumnDefaultColumnDefault
ColumnTypeColumnComment
ColumnName)r`   
table_namecolumn_namerl   server_defaultrc   type_r   autoincrementcommentr   r   r   r   existing_autoincrementrr   cls_s                    rB   alter_columnzDefaultImpl.alter_column   s   $ $(>(JII,
 JJ##!"/,C&7%5	 &B 66 7 1188 7 11!6
))JJ"
 ""/,C&7%5
 
 JJ!"/,C&7%5	 %JJ""!"/,C&7%5	 JJ!"/,C&7
 rC   c                R    | j                  t        j                  |||             y Nr   )r   r   	AddColumn)r`   r   columnr   s       rB   
add_columnzDefaultImpl.add_columno  s     	

4>>*fVDErC   c                R    | j                  t        j                  |||             y r   )r   r   
DropColumn)r`   r   r   r   rr   s        rB   drop_columnzDefaultImpl.drop_columnw  s     	

4??:vfEFrC   c                    |j                   |j                  |       r%| j                  t        j                  |             y y rb   )_create_ruler   r   AddConstraintr`   consts     rB   add_constraintzDefaultImpl.add_constraint  s8    %););D)AJJv++E23 *BrC   c                L    | j                  t        j                  |             y rb   )r   r   DropConstraintr   s     rB   drop_constraintzDefaultImpl.drop_constraint  s    

6((/0rC   c                R    | j                  t        j                  |||             y r   )r   r   RenameTable)r`   old_table_namenew_table_namer   s       rB   rename_tablezDefaultImpl.rename_table  s"     	

^^FK	
rC   c                d   |j                   j                  || j                  d|        | j                  t	        j
                  |fi |       |j                   j                  || j                  d|        |j                  D ]&  }| j                  t	        j                  |             ( | j                  j                  xr | j                  j                   }|j                  }|r|r| j                  |       |j                  D ]%  }|j                  }|s|s| j                  |       ' y NF)
checkfirst_ddl_runner)dispatchbefore_createrX   r   r   CreateTableafter_createindexesCreateIndexrW   supports_commentsinline_commentsr   create_table_commentcolumnscreate_column_comment)r`   rz   rr   indexwith_commentr   r   s          rB   create_tablezDefaultImpl.create_table  s   $$4??u$ 	% 	
 	

6%%e2r23##4??u$ 	$ 	
 ]] 	2EJJv))%01	2 LL**O4<<3O3O/O 	 --|%%e,mm 	3FnnG<**62	3rC   c                    |j                   j                  || j                  d|        | j                  t	        j
                  |fi |       |j                   j                  || j                  d|        y r   )r   before_droprX   r   r   	DropTable
after_drop)r`   rz   rr   s      rB   
drop_tablezDefaultImpl.drop_table  sh    ""4??u$ 	# 	
 	

6##E0R01!!4??u$ 	" 	
rC   c                N    | j                  t        j                  |fi |       y rb   )r   r   r   r`   r   rr   s      rB   create_indexzDefaultImpl.create_index  s    

6%%e2r23rC   c                L    | j                  t        j                  |             y rb   )r   r   SetTableCommentr`   rz   s     rB   r   z DefaultImpl.create_table_comment  s    

6))%01rC   c                L    | j                  t        j                  |             y rb   )r   r   DropTableCommentr   s     rB   drop_table_commentzDefaultImpl.drop_table_comment  s    

6**512rC   c                L    | j                  t        j                  |             y rb   )r   r   SetColumnComment)r`   r   s     rB   r   z!DefaultImpl.create_column_comment  s    

6**623rC   c                N    | j                  t        j                  |fi |       y rb   )r   r   	DropIndexr   s      rB   
drop_indexzDefaultImpl.drop_index  s    

6##E0R01rC   c                   t        |t              st        d      |rt        |d   t              st        d      | j                  r|D ]  }| j                   |j                         j                         j                  di |j                         D ci c]Q  \  }}|t        |t        j                        s/t        j                  |||j                  |   j                        n|S c}}        y |rw|r0| j                  |j                         j                         |       y |D ]?  }| j                   |j                         j                         j                  di |       A y y c c}}w )NzList expectedr   zList of dictionaries expected)r   )r   rI   )r   listr   r   rY   r   insertinlinevaluesitemsr"   _literal_bindparamcr:   )r`   rz   rowsmultiinsertrowkvs          rB   bulk_insertzDefaultImpl.bulk_insert  sN    $%O,,*T!Wd3;<<;; 

ELLNVXV ),		 !%1  (2$%{'E'E(" !, > >$%q
!" &''( JJu||~446DJI# J

#A5<<>#8#8#:#A#A#HC#HIJ	 s   AE2c                R   | j                   j                  j                  |j                        j	                         }t        j                  d|      }g }d }|D ],  }t        j                  d|      r|}|j                  |       . t        |d   |dd  g i       }|rt        j                  d|      D ]o  }d|v r@|j                  d      \  }	}
|
j                         |j                  |	j                         <   G|j                  j                  |j                                q |S )Nz[\w\-_]+|\(.+?\)z^\(.*\)$r   r   z[^(),]+=)rW   type_compilerprocessr:   lowerrefindallmatchappendParamssplitr   kwargsargs)r`   r   
definitiontokensterm_tokens
paren_termtokenr   termkeyvals              rB   _tokenize_column_typez!DefaultImpl._tokenize_column_type  s    \\//77DJJL
 JJ':JG!#
 	*ExxU+"
""5)		* AABR@

9j9 5$;#zz#HC14FMM#))+.KK&&tzz|45 rC   c           	        |j                   |j                   k(  ry| j                  D cg c]   }|D ch c]  }|j                          c}" }}}dj                  |j                   g|j                  z         }dj                  |j                   g|j                  z         }|D ]>  }||hj                  |      s(|j                   |j                   hj                  |      s> y yc c}w c c}}w )NT F)token0rP   r   joinr  issubset)r`   inspector_paramsmetadata_paramsbatchtsynonymsinspector_all_termsmetadata_all_termss           rB   _column_types_matchzDefaultImpl._column_types_match  s     ""o&<&<<<@<N<NO5.1QWWY.OO!hh$$%(8(?(??
 !XX##$'='==
  	E#%78AA%H ''&&M huoM 	  /Os   	C-C(
C-(C-c                   t        |j                        t        |j                        k(  r|j                  |j                  k7  ryt        |j                        t        |j                        k(  r|j                  |j                  k7  rydj                  |j                        j	                         }dj                  |j                        j	                         }| j
                  D ]Y  }t        j                  ||      }t        j                  ||      }|s2|s5|j                  d      |j                  d      k7  sY y y)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  r  r   rQ   r   searchgroup)r`   inspected_paramsmeta_paramsinspmetaregmimms           rB   _column_args_matchzDefaultImpl._column_args_match$  s    ""#s+;+B+B'CC""&6&=&==   !S)9)>)>%??  $4$9$99xx(//0668xx**+113(( 	C3%B3%BbRXXa[BHHQK7	 rC   c                    | j                  |      }| j                  |      }| j                  ||      sy| j                  ||      syy)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)r  r  r(  )r`   inspector_columnmetadata_columnr  r  s        rB   compare_typezDefaultImpl.compare_typeE  sQ      556FG44_E''(8/J&&'7IrC   c                    ||k7  S rb   rI   )r`   r*  r+  rendered_metadata_defaultrendered_inspector_defaults        rB   compare_server_defaultz"DefaultImpl.compare_server_defaultU  s     *-FFFrC   c                     y rb   rI   )r`   conn_uniquesconn_indexesmetadata_unique_constraintsmetadata_indexess        rB   correct_for_autogen_constraintsz+DefaultImpl.correct_for_autogen_constraints^  s     	rC   c                n    |j                   j                  |j                  urt        |d   |      |d<   y y )Nexpr)r:   _type_affinityr   )r`   existingexisting_transfernew_types       rB   cast_for_batch_migratez"DefaultImpl.cast_for_batch_migrateg  s:    ==''x/F/FF(,!&)8)f% GrC   c                X    ddd}t        |j                  | j                  |            S )zdRender a SQL expression that is typically a server default,
        index expression, etc.

        TF)rV   include_table)rW   r   )rD   r   rW   )r`   r8  is_server_defaultrr   r   s        rB   render_ddl_sql_exprzDefaultImpl.render_ddl_sql_exprm  s/     (,eD
LLjLI
 	
rC   c                    | j                   S rb   )autogen_column_reflect)r`   	inspectors     rB   _compat_autogen_column_reflectz*DefaultImpl._compat_autogen_column_reflect{  s    ***rC   c                     y rb   rI   )r`   conn_fksmetadata_fkss      rB   correct_for_autogen_foreignkeysz+DefaultImpl.correct_for_autogen_foreignkeys~  s    
 	rC   c                     y)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.

        NrI   )r`   rD  rz   column_infos       rB   rC  z"DefaultImpl.autogen_column_reflect  r|   rC   c                     y)zA hook called when :meth:`.EnvironmentContext.run_migrations`
        is called.

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

        NrI   r~   s    rB   start_migrationszDefaultImpl.start_migrations  r|   rC   c                @    | j                  d| j                  z          y)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rh   r   r~   s    rB   
emit_beginzDefaultImpl.emit_begin  s     	7T%<%<<=rC   c                @    | j                  d| j                  z          y)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`.

        COMMITNrP  r~   s    rB   emit_commitzDefaultImpl.emit_commit  s     	8d&=&==>rC   c                     yNFrI   )r`   type_objautogen_contexts      rB   render_typezDefaultImpl.render_type  s     rC   c                T   t        ||t        j                         dh      \  }}t        |dd       }t        |dd       }t	        |      t	        |      k7  r|j                  d       |j                  | j                         ||t	        |      xs t	        |      t	        |      k7  fS )Nalways)skip)_compare_identity_optionsr   Identitygetattrbooladddifference_updaterT   )r`   metadata_identityinspector_identitydiffignoredmeta_alwaysinspector_alwayss          rB   _compare_identity_defaultz%DefaultImpl._compare_identity_default  s     2OO	
g /4@"#5xF%5 66HHXt99:
 JM$01T:L5MM
 	
rC   c                r    t        |j                        }t        |j                        }||k7  rd| d| S y )Nzunique=z to unique=)r`  unique)r`   metadata_indexreflected_indexconn_uniquemeta_uniques        rB   _compare_index_uniquez!DefaultImpl._compare_index_unique  sB     ?112>001+%[M[MBBrC   c                2    t        j                  d| |fi |S )NTr   from_constraintr`   
constraintoptss      rB   _create_metadata_constraint_sigz+DefaultImpl._create_metadata_constraint_sig  s     ..tT:NNNrC   c                2    t        j                  d| |fi |S rV  rr  rt  s      rB    _create_reflected_constraint_sigz,DefaultImpl._create_reflected_constraint_sig  s     ..udJO$OOrC   c                :   g }| j                  ||      }|r|j                  |       | j                  |      }| j                  |      }t	        j
                  |      sJ t	        j
                  |      sJ ||fD ]/  }|j                  st        j                  d|j                         1 |j                  |j                  k7  r+|j                  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 )rp  r  rw  ry  r   is_index_sighas_expressionslogwarningr   column_namesr   	DifferentEqual)r`   rl  rm  msg
unique_msgm_sigr_sigsigs           rB   compare_indexeszDefaultImpl.compare_indexes  s    //O

 JJz"44^D55oF$$U+++$$U+++ %< 	C"": II	 !3!33JJe001e6H6H5IJ #--c22#))++rC   c                    | j                  |      }| j                  |      }|j                  }|j                  }||k7  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|  )rw  ry  unnamedr   r  r  )r`   metadata_constraintreflected_constraintmetadata_tupreflected_tupmeta_sigconn_sigs          rB   compare_unique_constraintz%DefaultImpl.compare_unique_constraint
  s     ;;
 == 
  '' ((x#--hZtH:6  $))++rC   c           
     T   |D ci c]  }|j                   | }}t        |      D ]{  }|j                   |v rt        j                  |      }|s*t	        j
                  d|j                   d| j                  dt        j                   d       |j                  |       } y c c}w )Nz@autogenerate skipping metadata-specified expression-based index z
; dialect z under SQLAlchemy z6 can't reflect these indexes so they can't be compared)	rc   r   r"   is_expression_indexr!   r   r9   sqlalchemy_versiondiscard)r`   r5  r3  r   conn_indexes_by_nameidxiexs          rB   _skip_functional_indexesz$DefaultImpl._skip_functional_indexes&  s    3?@a	@@() 	.Cxx//11#6C		.xxl*T-=-=,@ A""-"@"@!A BFF !((-	.  As   B%c                &    |j                  di       S )Ndialect_options)rZ   )r`   reflected_objectkinds      rB    adjust_reflected_dialect_optionsz,DefaultImpl.adjust_reflected_dialect_options7  s      ##$5r::rC   )rW   r&   rX   Optional[Connection]rY   r`  r^   Optional[bool]r[   zOptional[TextIO]r]   rE   returnNone)rW   r&   r  zType[DefaultImpl])r   rD   r  r  )
ro   rD   rp   Optional[str]rq   r`  rr   r   r  r   )rv   r5   r  r`  )ry   r4   rz   r   r  r  )r  r  )
r   Union[Executable, str]r   zOptional[Mapping[str, Any]]r   z%Optional[Sequence[Mapping[str, Any]]]r   Mapping[str, Any]r  zOptional[CursorResult]rb   )r   r  r   zOptional[dict[str, Any]]r  r  )NFNNNNFNNNNN) r   rD   r   rD   rl   r  r   z%Union[_ServerDefault, Literal[False]]rc   r  r   Optional[TypeEngine]r   r  r   r  r   z$Optional[Union[str, Literal[False]]]r   r  r   r  r   zOptional[_ServerDefault]r   r  r   r  rr   r   r  r  )r   rD   r   Column[Any]r   !Optional[Union[str, quoted_name]]r  r  )r   rD   r   r  r   r  r  r  )r   r   r  r  )r   r,   r  r  )r   rD   r   zUnion[str, quoted_name]r   r  r  r  )rz   r   rr   r   r  r  )r   r.   rr   r   r  r  )rz   r   r  r  )r   r  r  r  )T)rz   zUnion[TableClause, Table]r   z
List[dict]r   r`  r  r  )r   r   r  r  )r  r  r  r  r  r`  )r!  r  r"  r  r  r`  )r*  r  r+  r   r  r`  )
r2  Set[UniqueConstraint]r3  
Set[Index]r4  r  r5  r  r  r  )F)r8  r)   r@  r`  rr   r   r  rD   )rD  r(   r  r   )rG  Set[ForeignKeyConstraint]rH  r  r  r  )r  r  )rW  r1   rX  r3   r  zUnion[str, Literal[False]])rl  r.   rm  r.   r  r  )ru  z_autogen._Crv  r   r  z_constraint_sig[_autogen._C])rl  r.   rm  r.   r  r   )r  r/   r  r/   r  r   )r  rE   r  rD   r  rE   )=rF   rG   rH   __doc__r9   r^   r   rP   __annotations__rQ   rT   r;   classmethodrd   rh   rt   rw   r{   propertyr   r!   immutabledictr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r(  r,  r0  r6  r=  rA  rE  rI  rC  rM  rQ  rT  rY  ri  rp  rw  ry  r  r  r  r  rI   rC   rB   rK   rK   Q   sY   
 K,5y+A*CM'C&(m(
 .B?A ) 	
 * ( % 
4 $ $#
    ,	 
     
 D+		(	16			   :>=A$6D$6$6$8+7)+7 7+7 ;	+7
 "+7 
 +7` 7;+#+ 4+ 
	+ $(@E"&* $(,8=*..2<@,015nn n !	n
 >n n $n n &n 6n (n ,n ":n *n !/n  !n" 
#nh 59	FF F 2	F
 
F !%	GG G 	G 
G41 59	

 0
 2	

 

3.
42342 !	$J($J $J 	$J
 
$JL&P &9?	, &5;	B +>D	 G+ ! &;	
 % 
 >C
!
6:
JM
	
++ 0 
	>?"5C	#

8#6;	O%O/2O	%O
P%P/2P	%P
),), ), 
	),V,-, /, 
	,8."; .;69;	;rC   rK   )	metaclassc                  6    e Zd ZU ded<   ded<   ded<   ded<   y)	r  rD   r  z	List[str]r  r  zDict[str, str]r  N)rF   rG   rH   r  rI   rC   rB   r  r  =  s    K
OrC   r  c           
        t        j                  |       }t        j                  |      }t               t               	 	 	 	 	 	 	 	 dfd} |||t        j                  |      t        |      j                  |             t         j                  rDt        |d      sJ  |t        | di       t        |di       |j                  t        |di              fS )Nc                   t        |      j                  
      D ]c  }| j                  |      }|j                  |      }||k7  s+|j                  |      }||k(  r	j                  |       Sj                  |       e y rb   )set
differencerZ   ra  )	meta_dict	insp_dictdefault_dictattrsattr
meta_value
insp_valuedefault_valuere  ignored_attrr\  s           rB   check_dictsz._compare_identity_options.<locals>.check_dictsS  sx     J))$/ 	#D"t,J"t,JZ' , 0 0 6. $$T*HHTN	#rC   dialect_kwargs)r  r  r  r  r  r  r  zIterable[str])r"   _get_identity_options_dictr  unionidentity_has_dialect_kwargshasattrr_  r  )	metadata_ioinspector_io
default_ior\  meta_dinsp_dr  re  r  s	      `   @@rB   r]  r]  D  s     33K@F33LAF5D5L#$#$# (# 	#  ..z:F&!	 ..z#3444 	K!126L"2B7%%L"2B7		
 rC   )r  -Union[schema.Identity, schema.Sequence, None]r  r  r  z'Union[schema.Identity, schema.Sequence]r\  zSet[str])J
__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.reflectionr(   sqlalchemy.sqlr)   r*   sqlalchemy.sql.elementsr+   sqlalchemy.sql.schemar,   r-   r.   r/   sqlalchemy.sql.selectabler0   sqlalchemy.sql.type_apir1   r2   autogenerate.apir3   operations.batchr4   r5   	getLoggerrF   r  r:   r7   r<   r  rK   r  r]  rI   rC   rB   <module>r     s   #  	                   +       8 :  ,)56,)30:+652$116g!
t 
 (*$ )i;H i;XZ 0>0?0 80 	0rC   