
    Ed                         d Z ddlZddlZdZdZd Z e            rdZdZ ej        dej                  Zd Z	ddddddi dfd	Z
dS )
z4Tools to assist importing optional external modules.    Nc                      dd l } |                     dd          }|dv rt          |          S t          d|z            )Nr   SYMPY_DEBUGFalse)Truer   z&unrecognized value for SYMPY_DEBUG: %s)osgetenvevalRuntimeError)r   	debug_strs     :lib/python3.11/site-packages/sympy/external/importtools.py__sympy_debugr      sW     III		-11I%% &IC$% & & 	&    Tz(\d+ | [a-z]+ | \.)c                     g }t                               |           D ]@}|r<|dk    r6	 t          |          }n# t          $ r Y nw xY w|                    |           At          |          S )N.)_component_resplitint
ValueErrorappendtuple)vstring
componentsxs      r   version_tupler   !   s     J  )) ! ! 	!c 	!FF   a   s   8
AA__version__ c	                 @   t           t           n|pd}t          t          n|pd}ddl}	|r^t          j        |k     rN|rJ|	                    d| dd                    t          t          |                    dt          d	
           dS 	 t          | fi |}
|                    dt                                }|D ](}|dk    r |
j        dk    rt          | dz   |z              )nm# t          $ r& |r |	                    d| z  t          d	
           Y dS |$ r7}|r*|	                    | dt          |          dd	
           Y d}~dS d}~ww xY w|rt!          |
|          }| || }t#          |          t#          |          k     r|rt%          |t                    r|}nTt%          |t          t&          f          r)d                    t          t          |                    }nt          |          }|	                    | d|dt          d	
           dS |
S )a  
    Import and return a module if it is installed.

    If the module is not installed, it returns None.

    A minimum version for the module can be given as the keyword argument
    min_module_version.  This should be comparable against the module version.
    By default, module.__version__ is used to get the module version.  To
    override this, set the module_version_attr keyword argument.  If the
    attribute of the module to get the version should be called (e.g.,
    module.version()), then set module_version_attr_call_args to the args such
    that module.module_version_attr(*module_version_attr_call_args) returns the
    module's version.

    If the module version is less than min_module_version using the Python <
    comparison, None will be returned, even if the module is installed. You can
    use this to keep from importing an incompatible older version of a module.

    You can also specify a minimum Python version by using the
    min_python_version keyword argument.  This should be comparable against
    sys.version_info.

    If the keyword argument warn_not_installed is set to True, the function will
    emit a UserWarning when the module is not installed.

    If the keyword argument warn_old_version is set to True, the function will
    emit a UserWarning when the library is installed, but cannot be imported
    because of the min_module_version or min_python_version options.

    Note that because of the way warnings are handled, a warning will be
    emitted for each module only once.  You can change the default warning
    behavior by overriding the values of WARN_NOT_INSTALLED and WARN_OLD_VERSION
    in sympy.external.importtools.  By default, WARN_NOT_INSTALLED is False and
    WARN_OLD_VERSION is True.

    This function uses __import__() to import the module.  To pass additional
    options to __import__(), use the import_kwargs keyword argument.  For
    example, to import a submodule A.B, you must pass a nonempty fromlist option
    to __import__.  See the docstring of __import__().

    This catches ImportError to determine if the module is not installed.  To
    catch additional errors, pass them as a tuple to the catch keyword
    argument.

    Examples
    ========

    >>> from sympy.external import import_module

    >>> numpy = import_module('numpy')

    >>> numpy = import_module('numpy', min_python_version=(2, 7),
    ... warn_old_version=False)

    >>> numpy = import_module('numpy', min_module_version='1.5',
    ... warn_old_version=False) # numpy.__version__ is a string

    >>> # gmpy does not have __version__, but it does have gmpy.version()

    >>> gmpy = import_module('gmpy', min_module_version='1.14',
    ... module_version_attr='version', module_version_attr_call_args=(),
    ... warn_old_version=False)

    >>> # To import a submodule, you must pass a nonempty fromlist to
    >>> # __import__().  The values do not matter.
    >>> p3 = import_module('mpl_toolkits.mplot3d',
    ... import_kwargs={'fromlist':['something']})

    >>> # matplotlib.pyplot can raise RuntimeError when the display cannot be opened
    >>> matplotlib = import_module('matplotlib',
    ... import_kwargs={'fromlist':['pyplot']}, catch=(RuntimeError,))

    NTFr   z!Python version is too old to use z (r   z or newer required)   )
stacklevelfromlistcollections
matplotlibz%s module is not installedz module could not be used ()z version is too old to use ()WARN_OLD_VERSIONWARN_NOT_INSTALLEDwarningssysversion_infowarnjoinmapstrUserWarning
__import__getr   __name__ImportErrorreprgetattrr   
isinstancelist)modulemin_module_versionmin_python_versionwarn_not_installedwarn_old_versionmodule_version_attrmodule_version_attr_call_argsimport_kwargscatchr&   mod	from_listsubmode
modversionverstrs                   r   import_modulerE   0   s   ^ -= &((% 0B ),,(5  OOO  00 	 /S2D)E)E F F F FH  A  / / / F11=11 "%%j%''::	 	2 	2F& 23<<+G 26C<&0111	2     	"MM6?   " " "    	MM6<ffd1ggggF     	  S"566
( 	D#%BCJ$$}5G'H'HH 	 /0#66 5/FF 2UDMBB 5 XXc#/A&B&BCCFF !!344F06@A  / / / FJs   
AC% %,EE,E

E)__doc__r'   rer%   r$   r   compileVERBOSEr   r   rE   r   r   r   <module>rJ      s    : : 



 				   
& 
& 
& =??  
12:>>   .2d$)K K K K K Kr   