U
    3dk                     @   s  d Z ddlmZ 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mZ eejZeejZeedkrdd	lmZ ndd	lmZ zdd
lmZmZ W n$ ek
r   dd
lmZmZ Y nX dd ZG dd dejjZeedkrddlmZ  ndd Z ddddZ!eedk r.e!Z"nddlm"Z" dd Z#d.ddZ$e	j$j e$_ dd Z%e	j%j e%_ edd d! Z&d/d"d#Z'd$d% Z(d&d' Z)d(d) Z*d*d+ Z+d,d- Z,dS )0zCompatibility fixes for older version of python, numpy and scipy

If you add content to this file, please give the version of the package
at which the fix is no longer needed.
    )	resourcesN   )
deprecated   )parsez1.4)lobpcg)line_search_wolfe2line_search_wolfe1c                 C   s   | | kS N )Xr   r   7/tmp/pip-unpacked-wheel-zrfo1fqw/sklearn/utils/fixes.py_object_dtype_isnan,   s    r   c                   @   s   e Zd ZdZdS )
loguniformaw  A class supporting log-uniform random variables.

    Parameters
    ----------
    low : float
        The minimum value
    high : float
        The maximum value

    Methods
    -------
    rvs(self, size=None, random_state=None)
        Generate log-uniform random variables

    The most useful method for Scikit-learn usage is highlighted here.
    For a full list, see
    `scipy.stats.reciprocal
    <https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.reciprocal.html>`_.
    This list includes all functions of ``scipy.stats`` continuous
    distributions such as ``pdf``.

    Notes
    -----
    This class generates values between ``low`` and ``high`` or

        low <= loguniform(low, high).rvs() <= high

    The logarithmic probability density function (PDF) is uniform. When
    ``x`` is a uniformly distributed random variable between 0 and 1, ``10**x``
    are random variables that are equally likely to be returned.

    This class is an alias to ``scipy.stats.reciprocal``, which uses the
    reciprocal distribution:
    https://en.wikipedia.org/wiki/Reciprocal_distribution

    Examples
    --------

    >>> from sklearn.utils.fixes import loguniform
    >>> rv = loguniform(1e-3, 1e1)
    >>> rvs = rv.rvs(random_state=42, size=1000)
    >>> rvs.min()  # doctest: +SKIP
    0.0010435856341129003
    >>> rvs.max()  # doctest: +SKIP
    9.97403052786026
    N)__name__
__module____qualname____doc__r   r   r   r   r   0   s   r   z1.5)eighc                  O   s"   | dd}tjj| d|i|S )zJWrapper for `scipy.linalg.eigh` that handles the deprecation of `eigvals`.Zsubset_by_indexNeigvals)popscipyZlinalgr   )argskwargsr   r   r   r   _eighf   s    r   Zlinear)methodc                K   s   t j| |fd|i|S )Ninterpolation)np
percentile)aqr   r   r   r   r   _percentilen   s    r!   z1.22)r   c                   C   s(   t tdsd S t tds"t t_tjS )NThreadpoolController_sklearn_threadpool_controller)hasattrthreadpoolctlsklearnr"   r#   r   r   r   r   _get_threadpool_controller|   s
    


r'   c                 C   s.   t  }|d k	r|j| |dS tj| |dS d S )N)limitsuser_api)r'   limitr%   threadpool_limits)r(   r)   
controllerr   r   r   r+      s    r+   c                  C   s"   t  } | d k	r|  S t S d S r
   )r'   infor%   threadpool_info)r,   r   r   r   r.      s    r.   zThe function `delayed` has been moved from `sklearn.utils.fixes` to `sklearn.utils.parallel`. This import path will be removed in 1.5.c                 C   s   ddl m} || S )Nr   )delayed)Zsklearn.utils.parallelr/   )functionr/   r   r   r   r/      s    r/   c                 C   sP   t tdkr@tjj| |dd}t tdkr<|d kr<t|}|S tjj| |dS )Nz1.9.0T)axisZkeepdimsz1.10.999)r1   )
sp_versionparse_versionr   statsmoder   Zravel)r   r1   r5   r   r   r   _mode   s    
r6   c                 C   s0   t jdkr t| |dS t| |S d S )N   	   r)sysversion_infor   filesjoinpathopen	open_textZdata_moduleZdata_file_namer   r   r   
_open_text   s    
rB   c                 C   s0   t jdkr t| |dS t| |S d S )Nr7   rb)r;   r<   r   r=   r>   r?   open_binaryrA   r   r   r   _open_binary   s    
rE   c                 C   s.   t jdkrt| | S t| |S d S Nr7   )r;   r<   r   r=   r>   	read_text)Zdescr_moduleZdescr_file_namer   r   r   
_read_text   s    
rH   c                 C   s0   t jdkr tt| |S t| |S d S rF   )r;   r<   r   Zas_filer=   r>   pathrA   r   r   r   _path   s    
rJ   c                 C   s.   t jdkrt| | S t| |S d S rF   )r;   r<   r   r=   r>   is_fileis_resourcerA   r   r   r   _is_resource   s    
rM   )NN)r   )-r   	importlibr   r;   r&   Znumpyr   r   Zscipy.statsr%   deprecationr   Zexternals._packaging.versionr   r3   __version__Z
np_versionr2   Zscipy.sparse.linalgr   Zexternals._lobpcgZscipy.optimize._linesearchr   r	   ImportErrorZscipy.optimize.linesearchr   r4   Z
reciprocalr   Zscipy.linalgr   r   r!   r   r'   r+   r.   r/   r6   rB   rE   rH   rJ   rM   r   r   r   r   <module>   sT   

2





