o
    rqi7D                     @   s(  d dl 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	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mZmZmZ d d	lT d d
lmZ e	jdk rfd dlZnd dlm Z eej!dZ"de#fddZ$dd Z%de&de#de'fddZ(d|ddZ)dd Z*h dZ+e+,dhZ-ej./dd0 Z1ej./dd0 Z2d Z3e2e-v re1e+vrej45d!duZ6e6rze7d!Z3e"8d"e3 d# W n ej9y   dZ6Y n	w ne"8d$ dZ6ej45d%duZ:ze7d%Z;e"<d&e;  W n ej9y
   dZ:Y nw d Z=e1e-v rbe2e+vrbej45d'duZ>e>rCd(Z?dZ=e?D ]Z@ze7e@Z=W  n ej9y>   Y q(w e=duZ>e>rad d)lAm7Z7 e7Be=e7Bd*k rXne"8d+e= d# ne"8d, dZ>d-d. ZCd/d0 ZDd1d2 ZEd3d4 ZFd5d6 ZGd7d8 ZHd9d: ZId;d< ZJd=d> ZKd?d@ ZLdAdB ZMdCdD ZNdEdF ZOdGdH ZPdIdJ ZQdKdL ZRdMdN ZSdOdP ZTdQdR ZUdSdT ZVedUeFeWffdVeEeXffdWeDeYffdXeMeZffd'eMeZffd%eHe[ffdYeGe\ffd!eIe]ffdZeKe^_d[e3ffd\eCe`ffd]eNeaffd^eOebffd_eQd`ecffdaeRed_dbdcffdceRed_dbdcffddeQddeeffdeeQdeeeffdfeQdfefffdgeQdgegffdheQdhehffdieQdieiffdjeQdjejffdkeQdkekffdleQdlelffdmeQdmemffdneQdnenffdoeQdoeoffdpeQdpepffgZqerg dqZsdrds Ztdtdu Zudvdw ZvG dxdy dyeZwde'fdzd{ZxdS )}    N)OrderedDict)import_module)chain)Path)
ModuleType)Any)	INDEX_KEY
MODULE_KEYREQUIREMENT_KEY
load_index)*)
get_logger)      )	log_levelpy_filec                 C   s`   t j| \}}|dkrt }t|d }tjd| t	|  t
|}tjd ||fS )zw Import module from a certrain file

    Args:
        py_file: path to a python file to be imported

    Return:

     r   )ospathsplitr   cwdospsplitextsysinsertvalidate_py_syntaxr   pop)r   dirnameZbasefilemodule_namemod r    d/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/modelscope/utils/import_utils.pyimport_modules_from_file   s   	r"   c                 C   s>   t |ts	J dt |ts|j}t|| }t|| }||kS )a  Check if a method of base class is overridden in derived class.

    Args:
        method (str): the method name to check.
        base_class (type): the class of the base class.
        derived_class (type | Any): the class or instance of the derived class.
    z>base_class doesn't accept instance, Please pass class instead.)
isinstancetype	__class__getattr)methodZ
base_classZderived_classZbase_methodZderived_methodr    r    r!   is_method_overridden3   s   


r(   objr'   returnc                 C   s   t | |ott| |S )zCheck whether the object has a method.

    Args:
        method (str): The method name to check.
        obj (object): The object to check.

    Returns:
        bool: True if the object has the method else False.
    )hasattrcallabler&   )r)   r'   r    r    r!   
has_methodF   s   
r-   Fc              	   C   s   | sdS d}t | trd}| g} t | tstdt|  g }| D ]7}t |ts5t| dt| dzt|}W n tyS   |rOt| d d}ntY nw |	| q"|r`|d }|S )	aA  Import modules from the given list of strings.

    Args:
        imports (list | str | None): The given module names to be imported.
        allow_failed_imports (bool): If True, the failed imports will return
            None. Otherwise, an ImportError is raise. Default: False.

    Returns:
        list[module] | module | None: The imported modules.

    Examples:
        >>> osp, sys = import_modules(
        ...     ['os.path', 'sys'])
        >>> import os.path as osp_
        >>> import sys as sys_
        >>> assert osp == osp_
        >>> assert sys == sys_
    NFTz+custom_imports must be a list but got type z is of type z and cannot be imported.z! failed to import and is ignored.r   )
r#   strlist	TypeErrorr$   r   ImportErrorloggerwarningappend)ZimportsZallow_failed_importsZsingle_importZimportedimpZimported_tmpr    r    r!   import_modulesS   s:   


r6   c              
   C   st   t | ddd}| }W d    n1 sw   Y  zt| W d S  ty9 } z
td|  d| d }~ww )Nrzutf-8)encodingz'There are syntax errors in config file z: )openreadastparseSyntaxError)filenamefcontenter    r    r!   r      s   
r   >   TRUEONZYES1ZAUTOUSE_TF	USE_TORCHzN/AtorchzPyTorch version z Found.z'Disabling PyTorch because USE_TF is setZtimmz#Successfully imported timm version 
tensorflow)
rH   ztensorflow-cpuztensorflow-gpuz
tf-nightlyztf-nightly-cpuztf-nightly-gpuzintel-tensorflowzintel-tensorflow-avx512ztensorflow-rocmztensorflow-macos)version2zTensorFlow version z-Disabling Tensorflow because USE_TORCH is setc                   C      t jdd uS )Nscipy	importlibutil	find_specr    r    r    r!   is_scipy_available      rQ   c                   C   s&   t jdd u r
dS t ot jdS )NsklearnFzsklearn.metrics)rN   rO   rP   rQ   r    r    r    r!   is_sklearn_available   s   rT   c                   C   rK   )NsentencepiecerM   r    r    r    r!   is_sentencepiece_available   rR   rV   c                   C   s$   t jdd u r
dS t jdd uS )NZgoogleFzgoogle.protobufrM   r    r    r    r!   is_protobuf_available   s   rW   c                   C   rK   )N
tokenizersrM   r    r    r    r!   is_tokenizers_available   rR   rY   c                   C      t S N)_timm_availabler    r    r    r!   is_timm_available      r]   c                   C   rZ   r[   )_torch_availabler    r    r    r!   is_torch_available   r^   r`   c                  C   s   t  rdd l} | j S dS )Nr   F)r`   rG   cudaZis_available)rG   r    r    r!   is_torch_cuda_available   s   
rb   c                   C   rK   )NwenetruntimerM   r    r    r    r!   is_wenetruntime_available   rR   rd   c                   C   rK   )NswiftrM   r    r    r    r!   is_swift_available   rR   rf   c                   C   rZ   r[   )_tf_availabler    r    r    r!   is_tf_available   r^   rh   c                   C   rK   )Ncv2rM   r    r    r    r!   is_opencv_available   rR   rj   c                   C   rK   )Nz	PIL.ImagerM   r    r    r    r!   is_pillow_available  rR   rk   c                 C   s   t j| d uS r[   rM   pkg_namer    r    r!   _is_package_available_fn  rR   rn   c                 C   s   t t| S r[   )	functoolspartialrn   rl   r    r    r!   is_package_available  s   rq   c                 C   s   t jdd uot jdS )Nespnet2espnetrM   rl   r    r    r!   is_espnet_available  s   
rt   c                   C   rK   )NZvllmrM   r    r    r    r!   is_vllm_available  rR   ru   c                   C   rK   )NZtransformersrM   r    r    r    r!   is_transformers_available  rR   rv   c                   C   rK   )NZ	diffusersrM   r    r    r    r!   is_diffusers_available  rR   rw   c                   C   rK   )NZtensorrt_llmrM   r    r    r    r!   is_tensorrt_llm_available!  rR   rx   protobufrU   rS   tfrX   rc   Z	TORCH_VERrL   ri   ZPILzpai-easynlpZeasynlprr   REQrs   ZfunasrZkwsbpZdecordZ	deepspeedZfairseqZfasttextZmegatron_utilZtext2sql_lgesqlZmpi4pyZ	open_clipZtamingZxformersre   )r   r   typingc                    s   t |ttfs
|g}t | tr|  nt| dr| jn| jj g }|D ]'}|dks,|tv r-q"|tv r6t| }nt	|}t
d|}||f}|| q" fdd|D }|r\td|d S )N__name__r   r{   c                    s    g | ]\}}| s|  qS r    )format).0	availablemsgnamer    r!   
<listcomp>b  s     zrequires.<locals>.<listcomp>)r#   r/   tupler.   r+   r}   r%   SYSTEM_PACKAGEREQUIREMENTS_MAAPINGrq   GENERAL_IMPORT_ERRORreplacer4   r1   join)r)   requirementsZchecksreqcheckZcheck_fnerr_msgfailedr    r   r!   requiresN  s.   


r   c                       t   fdd}|S )Nc                     &   t  r
 | i |S td j d)NMethod `z` requires PyTorch.)r`   r1   r}   argskwargsfuncr    r!   wrapperi     ztorch_required.<locals>.wrapperro   wrapsr   r   r    r   r!   torch_requiredg     r   c                    r   )Nc                     r   )Nr   z` requires TF.)rh   r1   r}   r   r   r    r!   r   u  r   ztf_required.<locals>.wrapperr   r   r    r   r!   tf_requireds  r   r   c                       s~   e Zd ZdZ				d fdd	Zdd Z fddZd	ed
efddZ	defddZ
dd Zedd Zedd Z  ZS )LazyImportModuleNFc                    s   t  | t| | _i | _| D ]\}}	|	D ]}
|| j|
< qqt| tt|	   | _
|| _|| _tj|g| _|d u rFi n|| _|| _|| _|| _|rZ|   d S d S r[   )super__init__setkeys_modules_class_to_moduleitemsr/   r   values__all____file____spec__r   r   r   __path___objects_name_import_structure_extra_import_func_try_to_import)selfr   Zmodule_fileZimport_structureZmodule_specZextra_objectsZtry_to_pre_importZextra_import_funckeyr   valuer%   r    r!   r     s(   
zLazyImportModule.__init__c                 C   s\   | j  D ]&}zt| | W q ty+ } ztd| d|  W Y d }~qd }~ww d S )Nzpre load module z error, please check )r   r   r&   	Exceptionr2   r3   )r   Z
sub_modulerA   r    r    r!   r     s   zLazyImportModule._try_to_importc                    s,   t   }| jD ]}||vr|| q|S r[   )r   __dir__r   r4   )r   resultattrr   r    r!   r     s   


zLazyImportModule.__dir__r   r*   c                 C   s   || j v r
| j | S || jv r| |}n:|| j v r*| | j| }t||}n%| jd urD| |}|d u rCtd| j d| ntd| j d| t	| || |S )Nzmodule z has no attribute )
r   r   _get_moduler   r   r&   r   AttributeErrorr}   setattr)r   r   r   moduler    r    r!   __getattr__  s&   




zLazyImportModule.__getattr__r   c              
      s   z1| j d |  t fdddD s(|  } |t v r(|t   }t | td| | j W S  tyL } ztd| j  d| d| |d }~ww )N.c                 3   s     | ]}  d | V  qdS )zmodelscope.N)
startswith)r   prefixZmodule_name_fullr    r!   	<genexpr>  s
    
z/LazyImportModule._get_module.<locals>.<genexpr>)ZhubutilsrI   ZfileiozFailed to import z@ because of the following error (look up to see its traceback):
)	r}   anyget_ast_indexr
   r   rN   r   r   RuntimeError)r   r   	ast_indexr   rA   r    r   r!   r     s(   
zLazyImportModule._get_modulec                 C   s   | j | j| j| jffS r[   )r%   r   r   r   )r   r    r    r!   
__reduce__  s   zLazyImportModule.__reduce__c                   C   s   t jd u r	t t _t jS r[   )r   
_AST_INDEXr   r    r    r    r!   r     s   
zLazyImportModule.get_ast_indexc                 C   sl   t  }| |t v r,|t |  }|t }||t v r%|t | }t|| t| dS t	|  d dS )z import a lazy import module using signature

        Args:
            signature (tuple): a tuple of str, (registry_name, registry_group_name, module_name)
        z not found in ast index fileN)
r   r   r   r	   r
   r   rN   r   r2   r3   )	signaturer   Z	mod_indexr   r   r    r    r!   r     s   
zLazyImportModule.import_module)NNFN)r}   
__module____qualname__r   r   r   r   r.   r   r   r   r   staticmethodr   r   __classcell__r    r    r   r!   r     s     		
r   c                 C   s*   | j }t|}|j}t| }||v S )z
    Determine if attribute in specific class.

    Args:
        cls: target class.
        attribute_name: the attribute name.

    Returns:
        The attribute in the class or not.
    )r   inspectr   
parametersr/   r   )clsZattribute_nameZinit_methodr   r   Zparam_namesr    r    r!   has_attr_in_class  s
   
r   )F)yr;   ro   rN   r   loggingr   Zos.pathr   r   r   collectionsr   r   	itertoolsr   pathlibr   typesr   r|   r   Zmodelscope.utils.ast_utilsr   r	   r
   r   Zmodelscope.utils.errorZmodelscope.utils.loggerr   version_infoZimportlib_metadataimportlib.metadatametadataWARNINGr2   r.   r"   r(   objectboolr-   r6   r   ZENV_VARS_TRUE_VALUESunionZENV_VARS_TRUE_AND_AUTO_VALUESenvirongetupperrE   rF   Z_torch_versionrO   rP   r_   rI   infoZPackageNotFoundErrorr\   Z_timm_versiondebugZ_tf_versionrg   
candidatespkg	packagingr<   rQ   rT   rV   rW   rY   r]   r`   rb   rd   rf   rh   rj   rk   rn   rq   rt   ru   rv   rw   rx   ZPROTOBUF_IMPORT_ERRORZSENTENCEPIECE_IMPORT_ERRORZSKLEARN_IMPORT_ERRORZTENSORFLOW_IMPORT_ERRORZTIMM_IMPORT_ERRORZTOKENIZERS_IMPORT_ERRORZPYTORCH_IMPORT_ERRORZWENETRUNTIME_IMPORT_ERRORr   ZSCIPY_IMPORT_ERRORZOPENCV_IMPORT_ERRORZPILLOW_IMPORT_ERRORZEASYNLP_IMPORT_ERRORr   ZAUDIO_IMPORT_ERRORZDECORD_IMPORT_ERRORZDEEPSPEED_IMPORT_ERRORZFAIRSEQ_IMPORT_ERRORZFASTTEXT_IMPORT_ERRORZMEGATRON_UTIL_IMPORT_ERRORZTEXT2SQL_LGESQL_IMPORT_ERRORZMPI4PY_IMPORT_ERRORZOPENCLIP_IMPORT_ERRORZTAMING_IMPORT_ERRORZXFORMERS_IMPORT_ERRORZSWIFT_IMPORT_ERRORr   r   r   r   r   r   r   r   r    r    r    r!   <module>   s  


/




	












&r