
    hh                     <    d dl Z d dlmZ d Zd ZddZddZddZy)	    N)versionc                    	 |dk(  r+t        j                  |       t        j                  |      kD  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 y# t        $ r Y y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      b/var/www/html/dev/engine/venv/lib/python3.12/site-packages/skimage/_shared/version_requirements.py_check_versionr      s    S=>>&)HNN7,CCCt^>>&)X^^G-DDDs]>>&)X^^G-DDDs]>>&)HNN7,CCC s"   /C /C "/C /C 	CCc           	      r    t        | | j                  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      s9    
[K,B,B3,G,K+L
MC3wsIt'DEE    c                 V   | j                         dk(  rt        j                  dd }n	 t        |       }|yddl}|j                  d|      }|J d       |d|j                          }|sd	}|d
v sJ d| d       ||j                         d }t        |||      S # t        $ r Y yw xY w)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Ra	'-F  			'7+ :":: 'D,,S0KD6QR.SS,%++-/*fgt44!  		s   B 	B('B(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                 @     j                          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   s_    D'*D+F++#fS^^$4LG&Qwi=(C!#),,r   )wraps)r5   r6   	functoolsr(   r   s   ` r   	decoratorzrequire.<locals>.decoratore   s&    			- 
	- r   )r8   )r(   r   r9   r8   s   `` @r   requirer:   N   s    *  r   c                 \    t        | |      syt        | | j                  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   s1    & W-k[-C-CC-H-L,MNNr   )N)	r#   	packagingr   r	   r   r   r+   r:   r<    r   r   <module>r?      s(    
 )0F'5T$NOr   