ó
áp7]c           @  s<   d  Z  d d l m Z d d l m Z m Z d d „ Z d S(   s  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)

iÿÿÿÿ(   t   print_function(   t   ModuleUnavailableWarningt   module_unavailable_doci   c   	      C  s.  yÖ y d d l  m } m } Wn' t k
 rF d d l m } m } n X| | d | ƒ} | |  ƒ } | d k rÕ y d d l } | j ƒ  } WqÕ t t f k
 rÑ d d l } | j	 t
 j d ƒ t ƒ d } qÕ Xn  WnH t k
 r d d l } | j	 t
 j d ƒ t ƒ d } |  } t } n X| | | f S(   sð  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))
    iÿÿÿÿ(   t   Parallelt   delayedt   verboseNt   multiprocessingi   t   joblib(   R   R   R   t   ImportErrort   sklearn.externals.joblibR   t	   cpu_countt   NotImplementedErrort   warningst   warnR   t   formatR   t   list(	   t   funct   n_jobsR   R   R   t   parallelt   my_funcR   R   (    (    s9   lib/python2.7/site-packages/statsmodels/tools/parallel.pyt   parallel_func   s0    
N(   t   __doc__t
   __future__R    t   statsmodels.tools.sm_exceptionsR   R   R   (    (    (    s9   lib/python2.7/site-packages/statsmodels/tools/parallel.pyt   <module>   s   