B
    Z                 @   s.   d Z ddlm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, (doesn't import all of sklearn)

    )print_function)ModuleUnavailableWarningmodule_unavailable_doc   c       	   	   C   s   yyddl m}m} W n$ tk
r:   ddlm}m} Y nX |||d}|| }|dkry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   ZparallelZmy_funcr
   r    r   9lib/python3.7/site-packages/statsmodels/tools/parallel.pyparallel_func   s0    
r   N)r   )__doc__Z
__future__r   Zstatsmodels.tools.sm_exceptionsr   r   r   r   r   r   r   <module>   s   