a
    zha>  ã                   @   sh   d Z ddlmZ G dd„ deƒZG dd„ deƒZeddgƒZed	ƒZed
dgƒZeddgƒZ	edƒZ
dS )zW
Lazy modules.

They are useful to not import big modules until it's really necessary.
é    )Úis_module_installedc                   @   s   e Zd ZdZdS )Ú
FakeObjectz1Fake class used in replacement of missing objectsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   ú?lib/python3.9/site-packages/spyder_kernels/utils/lazymodules.pyr      s   r   c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )Ú
LazyModulezLazy module loader class.Nc                 C   s0   || _ t| _|dur,|D ]}t| j|tƒ qdS )a=  
        Lazy module loader class.

        Parameters
        ----------
        modname: str
            Module name to lazy load.
        second_level_attrs: list (optional)
            List of second level attributes to add to the FakeObject
            that stands for the module in case it's not found.
        N)Ú__spy_modname__r   Ú__spy_mod__Úsetattr)ÚselfÚmodnameZsecond_level_attrsÚattrr   r   r	   Ú__init__   s
    zLazyModule.__init__c                 C   s*   t | jƒrt| jƒ| _n| jS t| j|ƒS )N)r   r   Ú
__import__r   Úgetattr)r   Únamer   r   r	   Ú__getattr__1   s    
zLazyModule.__getattr__)N)r   r   r   r   r   r   r   r   r   r	   r
      s   
r
   ÚnumpyZMaskedArrayÚpandasz	PIL.ImageZImageÚbs4ZNavigableStringzscipy.ioN)r   Zspyder_kernels.utils.miscr   Úobjectr   r
   r   r   ZPILr   Zscipyr   r   r   r	   Ú<module>	   s   #