ó
‡ˆ\c           @   s(  d  Z  d d l Z d d l Z d d l Z d d l Z d d l m Z y( d d l Z d d d d d d „ Z
 Wn) e k
 r™ d d d d d d	 „ Z
 n Xe j d
 k rì d Z y d d l m Z Wn e k
 rß d „  Z n Xd „  Z n8 y d d l m Z Wn! e k
 r#d d l m Z n Xd S(   s,   
Backports of fixes for joblib dependencies
iÿÿÿÿN(   t   LooseVersiont   uint8s   r+i    t   Cc         C   sR   t  j |  d | d | d | d | d | ƒ} t t  j ƒ d k  rN | | _ n  | S(   s­   Backport of numpy memmap offset fix.

        See https://github.com/numpy/numpy/pull/8443 for more details.

        The numpy fix will be available in numpy 1.13.
        t   dtypet   modet   offsett   shapet   orders   1.13(   t   npt   memmapR    t   __version__R   (   t   filenameR   R   R   R   R   t   mm(    (    sA   lib/python2.7/site-packages/sklearn/externals/joblib/backports.pyt   make_memmap   s
    c         C   s   t  d ƒ ‚ d  S(   NsL   'joblib.backports.make_memmap' should not be used if numpy is not installed.(   t   NotImplementedError(   R   R   R   R   R   R   (    (    sA   lib/python2.7/site-packages/sklearn/externals/joblib/backports.pyR      s    t   nti   i   (   t   replacec         C   sŽ   t  |  t ƒ s' t |  t j ƒ  ƒ }  n  t  | t ƒ sN t | t j ƒ  ƒ } n  d } t j j j |  | | ƒ } | d k rŠ t j ƒ  ‚ n  d  S(   Ni   i    (	   t
   isinstancet   unicodet   syst   getfilesystemencodingt   ctypest   windllt   kernel32t   MoveFileExWt   WinError(   t   srct   dstt   movefile_replace_existingt   return_value(    (    sA   lib/python2.7/site-packages/sklearn/externals/joblib/backports.pyR   *   s    c         C   s“   d } d } d } xz | | k  r‹ y t  |  | ƒ PWq t k
 r‡ } t | d d ƒ t k r t j | ƒ | | 7} | d 9} qˆ ‚  q Xq W‚  d S(   sõ   Renames ``src`` into ``dst`` overwriting ``dst`` if it exists.

        On Windows os.replace (or for Python 2.7 its implementation
        through MoveFileExW) can yield permission errors if executed by
        two different processes.
        i   i    gü©ñÒMbP?t   winerrori   N(   R   t	   Exceptiont   getattrt   Nonet   access_denied_errorst   timet   sleep(   R   R   t   max_sleep_timet   total_sleep_timet
   sleep_timet   exc(    (    sA   lib/python2.7/site-packages/sklearn/externals/joblib/backports.pyt   concurrency_safe_rename6   s    
(   t   rename(   i   i   (   t   __doc__t   osR#   R   R   t   distutils.versionR    t   numpyR   R!   R   t   ImportErrort   nameR"   R   R)   R*   (    (    (    sA   lib/python2.7/site-packages/sklearn/externals/joblib/backports.pyt   <module>   s.   		