o
    uJAfn                     @  s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlm	Z	 ddl
mZmZ ddlmZ ddlmZmZmZmZmZ ddlmZ ejrtdd	lmZ dd
lmZ ddlmZ ddlmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ ddl%m&Z& eZ'ne(Z'G dd deZ)G dd de'Z*G dd de	Z+e,de-Z.G dd deZ/G dd de/Z0G dd dZ1G dd de/e1Z2G dd de/Z3G dd  d e2Z4dHd$d%Z5dId)d*Z6dJd0d1Z7dKd3d4Z8dLd:d;Z9dMdBdCZ:G dDdE dEe2Z;G dFdG dGe2Z<dS )N    )annotationsN)Enum   )mlogmesonlib)
clib_langs)LibTypeMachineChoiceMesonExceptionHoldableObject	OptionKey)version_compare_many)Compiler)Environment)FeatureCheckBase)CustomTargetIncludeDirsCustomTargetIndexLibTypesStaticLibraryStructuredSourcesExtractedObjectsGeneratedTypes)PkgConfigDefineTypec                   @  s   e Zd ZdZdS )DependencyExceptionz3Exceptions raised while trying to find dependenciesN)__name__
__module____qualname____doc__ r   r   A/usr/lib/python3.10/site-packages/mesonbuild/dependencies/base.pyr   /   s    r   c                   @  sR   e Zd ZdZejrdddZdd	d
ZdddZdddZ	dddZ
d ddZdS )!MissingCompilerznRepresent a None Compiler - when no tool chain is found.
    replacing AttributeError with DependencyExceptionreturnNonec                 C     d S Nr   selfr   r   r    __init__:      zMissingCompiler.__init__optimization_levelstrT.List[str]c                 C     g S r%   r   )r'   r*   r   r   r    get_optimization_args=   r)   z%MissingCompiler.get_optimization_args
outputnamec                 C  r-   r%   r   )r'   r/   r   r   r    get_output_args@   r)   zMissingCompiler.get_output_argswork_direnvironment'Environment'c                 C  r$   r%   r   )r'   r1   r2   r   r   r    sanity_checkC   r)   zMissingCompiler.sanity_checkitemT.Anyc                 C  s   | drt td)N__zno toolchain found)
startswithAttributeErrorr   )r'   r5   r   r   r    __getattr__F   s   
zMissingCompiler.__getattr__boolc                 C     dS NFr   r&   r   r   r    __bool__K   r)   zMissingCompiler.__bool__Nr"   r#   )r*   r+   r"   r,   )r/   r+   r"   r,   )r1   r+   r2   r3   r"   r#   )r5   r+   r"   r6   r"   r;   )r   r   r   r   TTYPE_CHECKINGr(   r.   r0   r4   r:   r>   r   r   r   r    r!   3   s    




r!   c                   @  sD   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdS )DependencyMethodsautoz
pkg-configcmakebuiltinsystemZextraframeworkZ	sysconfigzconfig-toolZ	sdlconfigzcups-configzpcap-configzlibwmf-configZqmakeZdubN)r   r   r   AUTOZ	PKGCONFIGCMAKEBUILTINZSYSTEMZEXTRAFRAMEWORKZ	SYSCONFIGCONFIG_TOOL	SDLCONFIG
CUPSCONFIG
PCAPCONFIGLIBWMFCONFIGQMAKEZDUBr   r   r   r    rC   O   s    rC   DependencyTypeNamec                   @  s  e Zd ZedQddZdRd
dZdSddZdTddZdUddZdVddZ	dVddZ
dWdXddZdVd d!ZdTd"d#ZdYd%d&ZdZd(d)ZdSd*d+ZdSd,d-Zd[d/d0ZdSd1d2Zd\d5d6Zdddddd7d]d>d?Zd^dBdCZdddddddDd_dLdMZd`dOdPZdS )a
DependencykwargsT.Dict[str, T.Any]r"   r+   c                 C  s>   d|vrdS t |d tstd|d dvrtd|d S )Ninclude_typepreservez,The include_type kwarg must be a string type)rV   rG   
non-systemzDinclude_type may only be one of ['preserve', 'system', 'non-system'])
isinstancer+   r   )clsrS   r   r   r    _process_include_type_kwm   s   z#Dependency._process_include_type_kw	type_namerQ   r#   c                 C  st   dt |  | _d | _d | _d| _|| _g | _g | _d | _g | _	g | _
| || _g | _tt| _g | _d | _d S )NdepF)idnameversionlanguageis_foundr[   compile_args	link_argsraw_link_argssourcesextra_filesrZ   rU   ext_depscollectionsdefaultdictlist
d_featuresZfeaturechecksZfeature_since)r'   r[   rS   r   r   r    r(   w   s   
zDependency.__init__c                 C  s    d| j j d| j d| j dS )N< z: >)	__class__r   r^   ra   r&   r   r   r    __repr__   s    zDependency.__repr__r;   c                 C  r<   r=   r   r&   r   r   r    is_built   r)   zDependency.is_built/T.Union[str, mlog.AnsiDecorator, mlog.AnsiText]c                 C  s>   |   s	tdS | jstdS ttddt| jS )NNOYESrm   )foundr   redr_   greenAnsiTextcyanr&   r   r   r    summary_value   s
   

zDependency.summary_valuer,   c                 C  s   | j dkr*g }| jD ]}|ds|dr"|d|dd   g7 }q
||g7 }q
|S | j dkrOg }| jD ]}|drG|d|dd   g7 }q4||g7 }q4|S | jS )NrG   -Iz/Iz-isystemr   rW      )rU   rb   r8   )r'   Z	convertedir   r   r    get_compile_args   s   




zDependency.get_compile_argsc                 C  &   t tj|  gdd | jD R  S )zIGet the compile arguments from this dependency and it's sub dependencies.c                 s      | ]}|  V  qd S r%   )get_all_compile_args.0dr   r   r    	<genexpr>       z2Dependency.get_all_compile_args.<locals>.<genexpr>)rj   	itertoolschainr~   rg   r&   r   r   r    r         
zDependency.get_all_compile_argsNFr`   T.Optional[str]rawc                 C  s   |r
| j d ur
| j S | jS r%   )rd   rc   r'   r`   r   r   r   r    get_link_args   s   zDependency.get_link_argsc                 C  r   )zFGet the link arguments from this dependency and it's sub dependencies.c                 s  r   r%   )get_all_link_argsr   r   r   r    r      r   z/Dependency.get_all_link_args.<locals>.<genexpr>)rj   r   r   r   rg   r&   r   r   r    r      r   zDependency.get_all_link_argsc                 C     | j S r%   )ra   r&   r   r   r    ru         zDependency.foundCT.List[T.Union[mesonlib.File, GeneratedTypes, 'StructuredSources']]c                 C  r   )zgSource files that need to be added to the target.
        As an example, gtest-all.cc when using GTest.)re   r&   r   r   r    get_sources   s   zDependency.get_sourcesT.List[mesonlib.File]c                 C  r   )z!Mostly for introspection and IDEs)rf   r&   r   r   r    get_extra_files   s   zDependency.get_extra_filesc                 C  r   r%   )r^   r&   r   r   r    get_name   r   zDependency.get_namec                 C  s   | j r| j S dS )Nunknown)r_   r&   r   r   r    get_version   s   zDependency.get_versionT.List['IncludeDirs']c                 C  r-   r%   r   r&   r   r   r    get_include_dirs   r)   zDependency.get_include_dirsc                 C  r   r%   )rU   r&   r   r   r    get_include_type   r   zDependency.get_include_typecompiler
'Compiler'c                 C  r-   r%   r   )r'   r   r   r   r    get_exe_args   r)   zDependency.get_exe_argsrb   rc   linksincludesre   rb   rc   r   r   re   'Dependency'c                C  s   t d)a8  Create a new dependency that contains part of the parent dependency.

        The following options can be inherited:
            links -- all link_with arguments
            includes -- all include_directory and -I/-isystem calls
            sources -- any source, header, or generated sources
            compile_args -- any compile args
            link_args -- any link args

        Additionally the new dependency will have the version parameter of it's
        parent (if any) and the requested values of any dependencies will be
        added as well.
        z-Unreachable code in partial_dependency called)RuntimeErrorr'   rb   rc   r   r   re   r   r   r    get_partial_dependency   s   z!Dependency.get_partial_dependencydeplist(T.Iterable[T.Callable[[], 'Dependency']]c                 C  s,   |D ]}| }|j r| j|  dS qdS )a  Add an internal dependency from a list of possible dependencies.

        This method is intended to make it easier to add additional
        dependencies to another dependency internally.

        Returns true if the dependency was successfully added, false
        otherwise.
        TF)ra   rg   append)r'   r   r   r\   r   r   r    _add_sub_dependency   s   	zDependency._add_sub_dependencyrE   	pkgconfig
configtoolinternaldefault_valuepkgconfig_definerE   r   r   r   r   r   r   c                C  s   |d ur|S t d| d)Nz#No default provided for dependency z7, which is not pkg-config, cmake, or config-tool based.)r   )r'   rE   r   r   r   r   r   r   r   r    get_variable   s   zDependency.get_variablerU   c                 C  s   t | }| d|i|_|S )NrU   )copydeepcopyrZ   rU   )r'   rU   new_depr   r   r    generate_system_dependency  s   
z%Dependency.generate_system_dependency)rS   rT   r"   r+   )r[   rQ   rS   rT   r"   r#   r"   r+   r@   )r"   rr   )r"   r,   r=   r`   r   r   r;   r"   r,   )r"   r   )r"   r   r"   r   )r   r   r"   r,   )rb   r;   rc   r;   r   r;   r   r;   re   r;   r"   r   )r   r   r"   r;   rE   r   r   r   r   r   r   r   r   r   r   r   r"   r+   )rU   r+   r"   r   )r   r   r   classmethodrZ   r(   rp   rq   rz   r~   r   r   r   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    rR   k   s<    
	














rR   c                      s   e Zd Zd> fddZd?dd Zd@d"d#ZdAd%d&Zd'd'd'd'd'd'd(dBd+d,ZdCd-d.Zd/d/d/d/d/d/d0dDd9d:Z	dEd<d=Z
  ZS )FInternalDependencyr_   r+   incdirsr   rb   r,   rc   	librariesT.List[LibTypes]whole_libraries?T.List[T.Union[StaticLibrary, CustomTarget, CustomTargetIndex]]re   ET.Sequence[T.Union[mesonlib.File, GeneratedTypes, StructuredSources]]rf   T.Sequence[mesonlib.File]rg   T.List[Dependency]	variablesT.Dict[str, str]d_module_versionsT.List[T.Union[str, int]]d_import_dirsobjectsT.List['ExtractedObjects']c                   s   t  tdi  || _d| _|| _|| _|| _|| _|| _	t
|| _t
|| _|	| _|
| _|| _|r8|| jd< |rA|| jd< d S d S )Nr   Tversionsimport_dirs)superr(   rQ   r_   ra   include_directoriesrb   rc   r   r   rj   re   rf   rg   r   r   rk   )r'   r_   r   rb   rc   r   r   re   rf   rg   r   r   r   r   ro   r   r    r(     s$   	


zInternalDependency.__init__memo!T.Dict[int, 'InternalDependency']r"   'InternalDependency'c                 C  sp   | j | j }t|tsJ ||t| < | j D ]\}}|dv r+t||t| qt||t	|| q|S )N>   r   r   )
ro   __new__rX   r   r]   __dict__itemssetattrr   r   )r'   r   resultkvr   r   r    __deepcopy__"  s   zInternalDependency.__deepcopy__mlog.AnsiDecoratorc                 C  s
   t dS )Nrt   )r   rw   r&   r   r   r    rz   -     
z InternalDependency.summary_valuer;   c                 C  s*   | j s	| js	| jrdS tdd | jD S )NTc                 s  r   r%   )rq   r   r   r   r    r   5  r   z.InternalDependency.is_built.<locals>.<genexpr>)re   r   r   anyrg   r&   r   r   r    rq   2  s   zInternalDependency.is_builtF)rb   rc   r   r   re   rf   r   r   c                  s    r| j  ng }r| j ng }r| j ng }	r"| j ng }
r+| j ng }|r4| j ng }r=| j ng } fdd| jD }t	| j
||||	|
|||| jg g g S )Nc              	     s    g | ]}|j  d qS )r   )r   r   rb   r   rc   r   re   r   r    
<listcomp>B  s    
z=InternalDependency.get_partial_dependency.<locals>.<listcomp>)rb   r   rc   r   r   re   rf   r   rg   r   r_   r   )r'   rb   rc   r   r   re   rf   Zfinal_compile_argsZfinal_link_argsZfinal_librariesZfinal_whole_librariesZfinal_sourcesZfinal_extra_filesZfinal_includes
final_depsr   r   r    r   7  s   z)InternalDependency.get_partial_dependencyc                 C  r   r%   )r   r&   r   r   r    r   J  r   z#InternalDependency.get_include_dirsNr   rE   r   r   r   r   r   r   r   c                C  s(   | j ||}|d ur|S td| )Nz?Could not get an internal variable and no default provided for )r   getr   )r'   rE   r   r   r   r   r   valr   r   r    r   M  s   zInternalDependency.get_variablerR   c                 C  s|   ddl m}m}m} t| }|jD ]}t||rtdt|||fr,|	 r,tdq| j
td|j7  _
g |_|S )Nr   )SharedLibraryr   r   zJCannot convert a dependency to link_whole when it contains a SharedLibraryzxCannot convert a dependency to link_whole when it contains a CustomTarget or CustomTargetIndex which is a shared libraryr   )buildr   r   r   r   r   r   rX   r
   links_dynamicallyr   rA   cast)r'   r   r   r   r   xr   r   r    generate_link_whole_dependencyV  s   


z1InternalDependency.generate_link_whole_dependency)r_   r+   r   r   rb   r,   rc   r,   r   r   r   r   re   r   rf   r   rg   r   r   r   r   r   r   r   r   r   )r   r   r"   r   )r"   r   r@   )rb   r;   rc   r;   r   r;   r   r;   re   r;   rf   r;   r"   r   r   r   )r"   rR   )r   r   r   r(   r   rz   rq   r   r   r   r   __classcell__r   r   r   r    r     s"    



	r   c                   @  s    e Zd Zd
ddZdddZd	S )HasNativeKwargrS   rT   c                 C  s   |  || _d S r%   )get_for_machine_from_kwargsfor_machiner'   rS   r   r   r    r(   h  s   zHasNativeKwarg.__init__r"   r	   c                 C  s   | ddr	tjS tjS )NnativeF)r   r	   BUILDHOSTr   r   r   r    r   k  s   z*HasNativeKwarg.get_for_machine_from_kwargsN)rS   rT   )rS   rT   r"   r	   )r   r   r   r(   r   r   r   r   r    r   g  s    
r   c                   @  sf   e Zd Zd%d&d
dZd'ddZddddddd(ddZd)ddZd)ddZed)d d!Z	d*d#d$Z
dS )+ExternalDependencyNr[   rQ   r2   r3   rS   rT   r`   r   c                 C  s   t | || || _|| _d| _|| _|dd }t|tr!|g}|| _	|dd| _
|dd| _|d| jjtd| _| jrFtjntj| _t| jtsTtdt| | t| j|| j| j| _d S )	NFr_   requiredTsilentstaticprefer_staticzStatic keyword must be boolean)rR   r(   envr^   ra   r`   r   rX   r+   version_reqsr   r   coredata
get_optionr   r   r   STATICPREFER_SHAREDZlibtyper;   r   r   detect_compilerr   clib_compiler)r'   r[   r2   rS   r`   r   r   r   r    r(   o  s"   
zExternalDependency.__init__r"   &T.Union['MissingCompiler', 'Compiler']c                 C  r   r%   )r   r&   r   r   r    get_compiler  r   zExternalDependency.get_compilerFr   rb   r;   rc   r   r   re   rR   c                C  s<   t  | }|s
g |_|sg |_|sg |_|s	 |sg |_|S r%   )r   rb   rc   re   r'   rb   rc   r   r   re   newr   r   r    r     s   
z)ExternalDependency.get_partial_dependencyr+   c                 C  r<   N r   r&   r   r   r    log_details  r)   zExternalDependency.log_detailsc                 C  r<   r   r   r&   r   r   r    log_info  r)   zExternalDependency.log_infoc                   C  r<   r   r   r   r   r   r    	log_tried     zExternalDependency.log_triedr#   c                 C  s0  | j sd S | jr| js;d| _ g }|dt| jdg7 }|tdd| jg7 }tj|  | jr9d| jd}t	|d S t
| j| j\| _ }}| j sdt| jdg}|tddt| jd	td
dd |D g7 }|r}|dd
dd |D g7 }tj|  | jrd}t	|| j|| jd S d S d S )NFrR   found:rs   zunknown version, but need:zUnknown version, but need .ru   z	but need:z, c                 S     g | ]}d | d qS 'r   r   er   r   r    r         z5ExternalDependency._check_version.<locals>.<listcomp>z
; matched:c                 S  r  r	  r   r  r   r   r    r     r  z+Invalid version, need {!r} {!r} found {!r}.)ra   r   r_   r   boldr^   rv   logr   r   r   normal_cyanjoinformat)r'   Z	found_msgm	not_foundru   r   r   r    _check_version  s@   



z!ExternalDependency._check_versionr%   )r[   rQ   r2   r3   rS   rT   r`   r   )r"   r   )rb   r;   rc   r;   r   r;   r   r;   re   r;   r"   rR   r   r?   )r   r   r   r(   r   r   r  r  staticmethodr  r  r   r   r   r    r   n  s    


r   c                      s6   e Zd Zd fddZd	d	d	d	d	d
dddZ  ZS )NotFoundDependencyr^   r+   r2   r3   r"   r#   c                   s(   t  tdi  || _|| _d| _d S )Nz	not-foundF)r   r(   rQ   r   r^   ra   )r'   r^   r2   r   r   r    r(     s   
zNotFoundDependency.__init__Fr   rb   r;   rc   r   r   re   'NotFoundDependency'c                C  s
   t  | S r%   )r   r   r   r   r    r     r   z)NotFoundDependency.get_partial_dependency)r^   r+   r2   r3   r"   r#   )rb   r;   rc   r;   r   r;   r   r;   re   r;   r"   r  )r   r   r   r(   r   r   r   r   r   r    r    s    r  c                      sJ   e Zd Z	dd fddZdd fddZddddddd ddZ  ZS )!ExternalLibraryFr^   r+   rc   r,   r2   r3   r`   r   r;   r"   r#   c                   s   t  jtd|i |d || _|| _d| _|rd| _|| _|sB| jr2tdt	|dt
d d S tdt	|dtd d S d S )	NZlibraryr`   FTLibraryr  rt   rs   )r   r(   rQ   r^   r`   ra   rc   r   r  r  rw   rv   )r'   r^   rc   r2   r`   r   r   r   r    r(     s     zExternalLibrary.__init__Nr   r   c                   s8   | j dkr	|dks|dkr| j dkrg S t j||dS )ad  
        External libraries detected using a compiler must only be used with
        compatible code. For instance, Vala libraries (.vapi files) cannot be
        used with C code, and not all Rust library types can be linked with
        C-like code. Note that C++ libraries *can* be linked with C code with
        a C++ linker (and vice-versa).
        vala)r`   r   )r`   r   r   r   r   r   r    r     s   
zExternalLibrary.get_link_argsr   rb   r   r   re   'ExternalLibrary'c                C  s   t  | }|s
g |_|S r%   )r   rc   r   r   r   r    r     s   
z&ExternalLibrary.get_partial_dependency)F)r^   r+   rc   r,   r2   r3   r`   r+   r   r;   r"   r#   r=   r   )rb   r;   rc   r;   r   r;   r   r;   re   r;   r"   r  )r   r   r   r(   r   r   r   r   r   r   r    r    s    r  depsr   r"   c                 C  sd   | s|   S g }| r0g }t| D ]}t|tr| r td|| ||j	 q|} | s
|S )Nz*Dependencies must be external dependencies)
r   r   listifyrX   rR   rq   r   r   extendrg   )r  r   Z	next_depsr   r   r   r    get_leaf_external_dependencies  s   
r!  libpathsr,   refpathsc                   s.   t  dkr
t| S d
 fdd}t| |dS )zSort <libpaths> according to <refpaths>

    It is intended to be used to sort -L flags returned by pkg-config.
    Pkg-config returns flags in random order which cannot be relied on.
    r   libpathr+   r"   T.Tuple[int, int]c              	     sr   g } D ]}z
t j| |g}W n ty   d}Y nw |t| qt|}||}t | | }||fS r   )ospath
commonpath
ValueErrorr   lenmaxindex)r$  Zcommon_lengthsZrefpathZcommon_pathZ
max_lengthZ	max_indexZreversed_max_lengthr#  r   r    key_func  s   
zsort_libpaths.<locals>.key_func)keyN)r$  r+   r"   r%  )r*  rj   sorted)r"  r#  r.  r   r-  r    sort_libpaths  s   r1  r2   r3   r   r	   rc   c                   &   dd |  |D   fdd|D S )zRemove -L<system path> arguments.

    leaving these in will break builds where a user has a version of a library
    in the system path, and a different version not in the system path if they
    want to link against the non-system path version.
    c                 S     h | ]}d | qS )z-Lr   r   pr   r   r    	<setcomp>+      z'strip_system_libdirs.<locals>.<setcomp>c                      g | ]}| vr|qS r   r   )r   lexcluder   r    r   ,  r  z(strip_system_libdirs.<locals>.<listcomp>)Zget_compiler_system_lib_dirs)r2   r   rc   r   r:  r    strip_system_libdirs$  s   r<  include_argsc                   r2  )zRemove -I<system path> arguments.

    leaving these in will break builds where user want dependencies with system
    include-type used in rust.bindgen targets as if will cause system headers
    to not be found.
    c                 S  r3  )r{   r   r4  r   r   r    r6  6  r7  z+strip_system_includedirs.<locals>.<setcomp>c                   r8  r   r   )r   r}   r:  r   r    r   7  r  z,strip_system_includedirs.<locals>.<listcomp>)Z get_compiler_system_include_dirs)r2   r   r=  r   r:  r    strip_system_includedirs.  s   r>  possibleT.Iterable[DependencyMethods]rS   rT   T.List[DependencyMethods]c              
   C  s   | dd}t|tr|gS |dd tD vrtd|dt|}|tju r)	 |tjtjtjtjfv r8tj}|tj	u r@tj}|tj
krKt| }|S || v rT|g}|S td|jtdd tj
gt|  D )	NmethodrD   c                 S     g | ]}|j qS r   valuer  r   r   r    r   >      z%process_method_kw.<locals>.<listcomp>zmethod z is invalidz8Unsupported detection method: {}, allowed methods are {}c                 S  rC  r   rD  )r   r   r   r   r    r   ]  rF  )r   rX   rC   r   rK   rL   rM   rN   rO   rP   rH   rj   r  rE  r   format_list)r?  rS   rB  methodsr   r   r    process_method_kw9  s4   




	rI  r^   r+   r   r`   r   r   c              	   C  sn   |j j| }|r||vr|  d }t|| || S tD ]}z|| W   S  ty3   Y q!w t S )z8Given a language and environment find the compiler used.zI requires a {0} compiler, but {0} is not in the list of project languages)r   	compilers
capitalizer   r  r   KeyErrorr!   )r^   r   r   r`   rJ  r  langr   r   r    r   a  s   r   c                      4   e Zd ZdZ	dd fddZedddZ  ZS )SystemDependencyz-Dependency base for System type dependencies.Nr^   r+   r   r3   rS   rT   r`   r   r"   r#   c                   "   t  jtd|||d || _d S )NrG   r  r   r(   rQ   r^   r'   r^   r   rS   r`   r   r   r    r(   {     
zSystemDependency.__init__c                   C  r<   )NrG   r   r   r   r   r    r    r  zSystemDependency.log_triedr%   
r^   r+   r   r3   rS   rT   r`   r   r"   r#   r   r   r   r   r   r(   r  r  r   r   r   r   r    rO  w      rO  c                      rN  )BuiltinDependencyz.Dependency base for Builtin type dependencies.Nr^   r+   r   r3   rS   rT   r`   r   r"   r#   c                   rP  )NrF   r  rQ  rR  r   r   r    r(     rS  zBuiltinDependency.__init__c                   C  r<   )NrF   r   r   r   r   r    r    r  zBuiltinDependency.log_triedr%   rT  r   rU  r   r   r   r    rW    rV  rW  )r  r   r"   r   )r"  r,   r#  r,   r"   r,   )r2   r3   r   r	   rc   r,   r"   r,   )r2   r3   r   r	   r=  r,   r"   r,   )r?  r@  rS   rT   r"   rA  )
r^   r+   r   r3   r   r	   r`   r   r"   r   )=
__future__r   r   r&  rh   r   typingrA   enumr   r  r   r   rJ  r   r   r	   r
   r   r   r   rB   Zcompilers.compilersr   r2   r   interpreterbaser   r   r   r   r   r   r   r   r   r   Zinterpreter.type_checkingr   Z_MissingCompilerBaseobjectr   r!   rC   NewTyper+   rQ   rR   r   r   r   r  r  r!  r1  r<  r>  rI  r   rO  rW  r   r   r   r    <module>   sL   ( aX
*





(