U
    Kvfe                     @   s"   d Z ddlmZmZ dddZdS )a  Parallel utility function using joblib

copied from https://github.com/mne-tools/mne-python

Author: Alexandre Gramfort <gramfort@nmr.mgh.harvard.edu>
License: Simplified BSD

changes for statsmodels (Josef Perktold)
- try import from joblib directly, (does not import all of sklearn)

    )ModuleUnavailableWarningmodule_unavailable_doc   c           	   	   C   s   zzddl m}m} W n$ tk
r:   ddlm}m} Y nX |||d}|| }|dkrzddl}| }W n6 ttfk
r   ddl}|	t
dt d}Y nX W n: tk
r   ddl}|	t
dt d}| }t}Y nX |||fS )	a  Return parallel instance with delayed function

    Util function to use joblib only if available

    Parameters
    ----------
    func : callable
        A function
    n_jobs : int
        Number of jobs to run in parallel
    verbose : int
        Verbosity level

    Returns
    -------
    parallel : instance of joblib.Parallel or list
        The parallel object
    my_func : callable
        func if not parallel or delayed(func)
    n_jobs : int
        Number of jobs >= 0

    Examples
    --------
    >>> from math import sqrt
    >>> from statsmodels.tools.parallel import parallel_func
    >>> parallel, p_func, n_jobs = parallel_func(sqrt, n_jobs=-1, verbose=0)
    >>> print(n_jobs)
    >>> parallel(p_func(i**2) for i in range(10))
    r   )Paralleldelayed)verboseNmultiprocessing   joblib)r   r   r   ImportErrorZsklearn.externals.joblibr	   	cpu_countNotImplementedErrorwarningswarnr   formatr   list)	funcZn_jobsr   r   r   parallelZmy_funcr	   r    r   >/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/tools/parallel.pyparallel_func   s4    
r   N)r   )__doc__Zstatsmodels.tools.sm_exceptionsr   r   r   r   r   r   r   <module>   s   