
    gu                       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rxd 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*l/m1Z1 d d+l2m3Z3 d d,l2m4Z4 d d-l2m5Z5 d d.l2m6Z6 d d/l7m8Z8 d d0l9m:Z: dd1lm;Z; dd2l<m=Z= dd3l>m?Z? dd4l>m@Z@  ej                  eB      ZC G d5 d6eD      ZEi ZFd7eGd8<    G d9 d:eE;      ZH G d< d=e      ZI	 	 	 	 	 	 	 	 d?d>ZJy)@    )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)ColumnElement)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        O/var/www/html/AdoubleTech/venv/lib/python3.12/site-packages/alembic/ddl/impl.pyr<   zImplMeta.__init__C   s4     --Yu=E!+.F5'(    N)r?   strr@   zTuple[Type[DefaultImpl]]rA   Dict[str, Any])__name__
__module____qualname__r<    rD   rC   r8   r8   B   s#    		 (	 		rD   r8   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_synonymsrJ   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getrW   output_buffermemocontext_optstransactional_ddlr!   CommandError)selfrX   rY   rZ   r_   r\   r^   s          rC   r<   zDefaultImpl.__init__k   s     $)--ouE*	((%6D";;''I   rD   c                (    t         |j                     S N)r=   name)r>   rX   s     rC   get_by_dialectzDefaultImpl.get_by_dialect   s    gll##rD   c                    | j                   J | j                   j                  |dz          | j                   j                          y )Nz

)r\   writeflush)ra   r   s     rC   static_outputzDefaultImpl.static_output   s>    !!---  /  "rD   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)rd   )r   r   r   r   append_constraintr   )ra   version_tableversion_table_schemaversion_table_pkkwvts         rC   version_table_implzDefaultImpl.version_table_impl   sW    & J=&*u='	
   $!=/(> 	rD   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.

        FrJ   )ra   batch_ops     rC   requires_recreate_in_batchz&DefaultImpl.requires_recreate_in_batch   s     rD   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.

        NrJ   )ra   
batch_impltables      rC   prep_table_for_batchz DefaultImpl.prep_table_for_batch       rD   c                    | j                   S rc   )rY   ra   s    rC   bindzDefaultImpl.bind   s    rD   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_sqlrW   T)compile_kwargsrX   	z    z2Can't send params and multiparams at the same timerJ   )
isinstancerE   r   rZ   	TypeErrorrW   r   
DDLElementdictr   r)   compilerX   ri   replacestripcommand_terminatorrY   execution_optionsexecute)ra   	constructr   multiparamsparams
compile_kwcompiledconns           rC   _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6rD   c                (    | j                  ||       y rc   )r   )ra   sqlr   s      rC   r   zDefaultImpl.execute   s    
 	

3)*rD   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)ra   
table_namecolumn_namerm   server_defaultrd   type_r   autoincrementcommentr   r   r   r   existing_autoincrementrs   cls_s                    rC   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
 rD   c                R    | j                  t        j                  |||             y Nr   )r   r   	AddColumn)ra   r   columnr   s       rC   
add_columnzDefaultImpl.add_columnp  s     	

4>>*fVDErD   c                R    | j                  t        j                  |||             y r   )r   r   
DropColumn)ra   r   r   r   rs   s        rC   drop_columnzDefaultImpl.drop_columnx  s     	

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

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

^^FK	
rD   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_createrY   r   r   CreateTableafter_createindexesCreateIndexrX   supports_commentsinline_commentsr   create_table_commentcolumnscreate_column_comment)ra   r{   rs   indexwith_commentr   r   s          rC   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	3rD   c                    |j                   j                  || j                  d|        | j                  t	        j
                  |fi |       |j                   j                  || j                  d|        y r   )r   before_droprY   r   r   	DropTable
after_drop)ra   r{   rs   s      rC   
drop_tablezDefaultImpl.drop_table  sh    ""4??u$ 	# 	
 	

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

6%%e2r23rD   c                L    | j                  t        j                  |             y rc   )r   r   SetTableCommentra   r{   s     rC   r   z DefaultImpl.create_table_comment  s    

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

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

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

6##E0R01rD   c                   t        |t              st        d      |rt        |d   t              st        d      | j                  r|D ]  }| j                   t        j                  |      j                  di |j                         D ci c]Q  \  }}|t        |t        j                        s/t        j                  |||j                  |   j                        n|S c}}        y |re|r'| j                  t        j                  |      |       y |D ]6  }| j                   t        j                  |      j                  di |       8 y y c c}}w )NzList expectedr   zList of dictionaries expected)r   )r   rJ   )r   listr   r   rZ   r   r"   _insert_inlinevaluesitems_literal_bindparamcr;   )ra   r{   rowsmultiinsertrowkvs          rC   bulk_insertzDefaultImpl.bulk_insert  sK    $%O,,*T!Wd3;<<;; 

<K..u5<<  ),		 !%1  (2$%{'E'E(" !, > >$%q
!" &''$ JJ#2259t    $ 

DK66u=DDKsK s   AE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[^(),]+=)rX   type_compilerprocessr;   lowerrefindallmatchappendParamssplitr   kwargsargs)ra   r   
definitiontokensterm_tokens
paren_termtokenr   termkeyvals              rC   _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 rD   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)token0rQ   r   joinr  issubset)ra   inspector_paramsmetadata_paramsbatchtsynonymsinspector_all_termsmetadata_all_termss           rC   _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   rR   r   searchgroup)ra   inspected_paramsmeta_paramsinspmetaregmimms           rC   _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	 rD   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(  )ra   inspector_columnmetadata_columnr  r  s        rC   compare_typezDefaultImpl.compare_typeH  sQ      556FG44_E''(8/J&&'7IrD   c                    ||k7  S rc   rJ   )ra   r*  r+  rendered_metadata_defaultrendered_inspector_defaults        rC   compare_server_defaultz"DefaultImpl.compare_server_defaultX  s     *-FFFrD   c                     y rc   rJ   )ra   conn_uniquesconn_indexesmetadata_unique_constraintsmetadata_indexess        rC   correct_for_autogen_constraintsz+DefaultImpl.correct_for_autogen_constraintsa  s     	rD   c                n    |j                   j                  |j                  urt        |d   |      |d<   y y )Nexpr)r;   _type_affinityr   )ra   existingexisting_transfernew_types       rC   cast_for_batch_migratez"DefaultImpl.cast_for_batch_migratej  s:    ==''x/F/FF(,!&)8)f% GrD   c                X    ddd}t        |j                  | j                  |            S )zdRender a SQL expression that is typically a server default,
        index expression, etc.

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

        NrJ   )ra   rD  r{   column_infos       rC   rC  z"DefaultImpl.autogen_column_reflect  r}   rD   c                     y)zA hook called when :meth:`.EnvironmentContext.run_migrations`
        is called.

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

        NrJ   r   s    rC   start_migrationszDefaultImpl.start_migrations  r}   rD   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ri   r   r   s    rC   
emit_beginzDefaultImpl.emit_begin  s     	7T%<%<<=rD   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    rC   emit_commitzDefaultImpl.emit_commit  s     	8d&=&==>rD   c                     yNFrJ   )ra   type_objautogen_contexts      rC   render_typezDefaultImpl.render_type  s     rD   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_updaterU   )ra   metadata_identityinspector_identitydiffignoredmeta_alwaysinspector_alwayss          rC   _compare_identity_defaultz%DefaultImpl._compare_identity_default  s     2  "	
g /4@"#5xF%5 66HHXt99:
 JM$01T:L5MM
 	
rD   c                r    t        |j                        }t        |j                        }||k7  rd| d| S y )Nzunique=z to unique=)r`  unique)ra   metadata_indexreflected_indexconn_uniquemeta_uniques        rC   _compare_index_uniquez!DefaultImpl._compare_index_unique  sB     ?112>001+%[M[MBBrD   c                2    t        j                  d| |fi |S )NTr   from_constraintra   
constraintoptss      rC   _create_metadata_constraint_sigz+DefaultImpl._create_metadata_constraint_sig  s     ..tT:NNNrD   c                2    t        j                  d| |fi |S rV  rr  rt  s      rC    _create_reflected_constraint_sigz,DefaultImpl._create_reflected_constraint_sig  s     ..udJO$OOrD   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)ra   rl  rm  msg
unique_msgm_sigr_sigsigs           rC   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#))++rD   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  )ra   metadata_constraintreflected_constraintmetadata_tupreflected_tupmeta_sigconn_sigs          rC   compare_unique_constraintz%DefaultImpl.compare_unique_constraint  s     ;;
 == 
  '' ((x#--hZtH:6  $))++rD   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)	rd   r   r"   is_expression_indexr!   r   r:   sqlalchemy_versiondiscard)ra   r5  r3  r   conn_indexes_by_nameidxiexs          rC   _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)r[   )ra   reflected_objectkinds      rC    adjust_reflected_dialect_optionsz,DefaultImpl.adjust_reflected_dialect_options:  s      ##$5r::rD   )rX   r&   rY   Optional[Connection]rZ   r`  r_   Optional[bool]r\   zOptional[TextIO]r^   rF   returnNone)rX   r&   r  zType[DefaultImpl])r   rE   r  r  )
rp   rE   rq   Optional[str]rr   r`  rs   r   r  r   )rw   r6   r  r`  )rz   r5   r{   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]rc   )r   r  r   zOptional[dict[str, Any]]r  r  )NFNNNNFNNNNN) r   rE   r   rE   rm   r  r   z%Union[_ServerDefault, Literal[False]]rd   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  rs   r   r  r  )r   rE   r   Column[Any]r   !Optional[Union[str, quoted_name]]r  r  )r   rE   r   r  r   r  r  r  )r   r   r  r  )r   r-   r  r  )r   rE   r   zUnion[str, quoted_name]r   r  r  r  )r{   r   rs   r   r  r  )r   r/   rs   r   r  r  )r{   r   r  r  )r   zColumnElement[Any]r  r  )T)r{   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`  rs   r   r  rE   )rD  r(   r  r   )rG  Set[ForeignKeyConstraint]rH  r  r  r  )r  r  )rW  r2   rX  r4   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  r0   r  r0   r  r   )r  rF   r  rE   r  rF   )=rG   rH   rI   __doc__r:   r_   r   rQ   __annotations__rR   rU   r<   classmethodre   ri   ru   rx   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  rJ   rD   rC   rL   rL   R   sT   
 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 !	&(& & 	&
 
&P&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;	;rD   rL   )	metaclassc                  6    e Zd ZU ded<   ded<   ded<   ded<   y)	r  rE   r  z	List[str]r  r  zDict[str, str]r  N)rG   rH   rI   r  rJ   rD   rC   r  r  @  s    K
OrD   r  c           
        t        j                  |       }t        j                  |      }t               t               	 	 	 	 	 	 	 	 dfd} |||t        j                  |      t        |      j                  |             t         j                  r6 |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 rc   )set
differencer[   ra  )	meta_dict	insp_dictdefault_dictattrsattr
meta_value
insp_valuedefault_valuere  ignored_attrr\  s           rC   check_dictsz._compare_identity_options.<locals>.check_dictsV  sx     J))$/ 	#D"t,J"t,JZ' , 0 0 6. $$T*HHTN	#rD   dialect_kwargs)r  r  r  r  r  r  r  zIterable[str])r"   _get_identity_options_dictr  unionidentity_has_dialect_kwargsr_  r  )	metadata_ioinspector_io
default_ior\  meta_dinsp_dr  re  r  s	      `   @@rC   r]  r]  G  s     33K@F33LAF5D5L#$#$# (# 	#  ..z:F&!	 .. 	K!126L"2B7%%L"2B7		
 rD   )r  -Union[schema.Identity, schema.Sequence, None]r  r  r  z'Union[schema.Identity, schema.Sequence]r\  zSet[str])K
__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+   r,   sqlalchemy.sql.schemar-   r.   r/   r0   sqlalchemy.sql.selectabler1   sqlalchemy.sql.type_apir2   r3   autogenerate.apir4   operations.batchr5   r6   	getLoggerrG   r  r;   r8   r=   r  rL   r  r]  rJ   rD   rC   <module>r     s   #  	                   +       8 :  ,)56,)530:+652$116g!
t 
 (*$ )k;H k;\Z />/?/ 8/ 	/rD   