
    0-Ph                     >    d dl Z d dlmZ d Zd ZddZddZddZdS )	    N)versionc                    	 |dk    r*t          j        |           t          j        |          k    S |dk    r*t          j        |           t          j        |          k    S |dk    r*t          j        |           t          j        |          k    S |dk    r*t          j        |           t          j        |          k     S dS # t          $ r Y dS w xY w)a)  
    Check version string of an active module against a required version.

    If dev/prerelease tags result in TypeError for string-number comparison,
    it is assumed that the dependency is satisfied.
    Users on dev branches are responsible for keeping their own packages up to
    date.
    >>==<FT)_versionparse	TypeError)actverr   cmp_ops      d/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/skimage/_shared/version_requirements.py_check_versionr      s    S==>&))HN7,C,CCCt^^>&))X^G-D-DDDs]]>&))X^G-D-DDDs]]>&))HN7,C,CCC5   tts"   /C /C "/C /C 
CCc           	          t          | |                     d          d         g          }t          |dt          |dd                    S )z<Return module version or None if version can't be retrieved..fromlist__version__VERSIONN)
__import__
rpartitiongetattr)module_namemods     r   get_module_versionr      sH    
[K,B,B3,G,G,K+L
M
M
MC3wsIt'D'DEEE    c                    |                                  dk    rt          j        dd         }n"	 t          |           }n# t          $ r Y dS w xY w|dS ddl}|                    d|          }|
J d            |d|                                         }|sd	}|d
v sJ d| d            ||                                d         }t          |||          S )a  Test if *name* is installed.

    Parameters
    ----------
    name : str
        Name of module or "python"
    version : str, optional
        Version string to test against.
        If version is not None, checking version
        (must have an attribute named '__version__' or 'VERSION')
        Version may start with =, >=, > or < to specify the exact requirement

    Returns
    -------
    out : bool
        True if `name` is installed matching the optional version.
    pythonN   FTr   z[0-9]zInvalid version numberr   )r   r   r   r   zInvalid version condition '')	lowersysr   r   ImportErrorresearchstartr   )namer   r   r%   matchsymbs         r   is_installedr+   $   s   $ zz||xRaR	'--FF 	 	 	55	t 						'7++  ":   ' 	D,,,,.SD.S.S.S,,,%++--//*fgt444s   ? 
AAc                 "     ddl  fd}|S )a@  Return decorator that forces a requirement for a function or class.

    Parameters
    ----------
    name : str
        Name of module or "python".
    version : str, optional
        Version string to test against.
        If version is not None, checking version
        (must have an attribute named '__version__' or 'VERSION')
        Version may start with =, >=, > or < to specify the exact requirement

    Returns
    -------
    func : function
        A decorator that raises an ImportError if a function is run
        in the absence of the input dependency.
    r   Nc                 N                                      fd            }|S )Nc                      t                    r | i |S d dj         d }|d z  }t          |dz             )N"z" in "z" requires " )r+   
__module__r$   )argskwargsmsgr(   objr   s      r   func_wrappedz0require.<locals>.decorator.<locals>.func_wrappedf   sq    D'** -sD+F+++G#GGS^GGGG&=w==(C!#),,,r   )wraps)r5   r6   	functoolsr(   r   s   ` r   	decoratorzrequire.<locals>.decoratore   sF    				- 	- 	- 	- 	- 	- 
		- r   )r8   )r(   r   r9   r8   s   `` @r   requirer:   N   s>    *        r   c                 |    t          | |          sdS t          | |                     d          d         g          S )a)  Return a module object of name *module_name* if installed.

    Parameters
    ----------
    module_name : str
        Name of module.
    version : str, optional
        Version string to test against.
        If version is not None, checking version
        (must have an attribute named '__version__' or 'VERSION')
        Version may start with =, >=, > or < to specify the exact requirement

    Returns
    -------
    mod : module or None
        Module if *module_name* is installed matching the optional version
        or None otherwise.
    Nr   r   r   )r+   r   r   )r   r   s     r   
get_moduler<   u   sD    & W-- tk[-C-CC-H-H-L,MNNNNr   )N)	r#   	packagingr   r	   r   r   r+   r:   r<    r   r   <module>r?      s    



 ) ) ) ) ) )  0F F F'5 '5 '5 '5T$ $ $ $NO O O O O Or   