B
    	\                 @   s   d 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ye W n ek
rT   e	ZY nX dd Z
dd Zdd Zd	Zd
ZdddZdddZdS )z
Disk management utilities.
    Nc             C   sn   d}x\t | dg D ]H}t t j| |}t|drH||jd 7 }q||jd d d 7 }qW t|d S )z& Return the disk usage in a directory.r   .	st_blocksi      g      @)	oslistdirstatpathjoinhasattrr   st_sizeint)r   sizefiler    r   <lib/python3.7/site-packages/sklearn/externals/joblib/disk.py	disk_used   s    
r   c          	   C   sp   d}t ||d |d d}y$t|| d  t| dd  }W n, ttfk
rj   td| t| f Y nX |S )z2 Convert a memory text to its value in bytes.
    i         )KMGNzQInvalid literal for size give: %s (type %s) should be alike '10G', '500M', '50K'.)dictr   floatKeyError
ValueErrortype)textZkiloZunitsr   r   r   r   memstr_to_bytes)   s    $r   c          
   C   sD   yt |  W n0 tk
r> } z|jtjkr. W dd}~X Y nX dS )zgEnsure directory d exists (like mkdir -p on Unix)
    No guarantee that the directory is writable.
    N)r   makedirsOSErrorerrnoZEEXIST)der   r   r   mkdirp7   s
    r$   g?   c             C   st   g }yt | }W n4 t jk
rF   |dk	r@|t j| t  n Y nX x&|D ]}t j| |}t||d qNW dS )a  Remove all subdirectories in this path.

    The directory indicated by `path` is left in place, and its subdirectories
    are erased.

    If onerror is set, it is called to handle the error with arguments (func,
    path, exc_info) where func is os.listdir, os.remove, or os.rmdir;
    path is the argument to that function that caused it to fail; and
    exc_info is a tuple returned by sys.exc_info().  If onerror is None,
    an exception is raised.
    N)onerror)r   r   errorsysexc_infor   r	   delete_folder)r   r&   namesnamefullnamer   r   r   
rm_subdirsJ   s    
r.   c          	   C   s   t j| r|dk	r$t| d| nfd}x`yt| dd P W q* ttfk
r   |d7 }|tkrvt	d
| t  tt Y q*X q*W dS )zBUtility function to cleanup a temporary folder if it still exists.NFr   r   z/Unable to delete folder {} after {} tentatives.)r   r   isdirshutilZrmtreer    WindowsErrorRM_SUBDIRS_N_RETRYwarningswarnformattimeZsleepRM_SUBDIRS_RETRY_TIME)Zfolder_pathr&   Z	err_countr   r   r   r*   h   s     
r*   )N)N)__doc__r   r(   r6   r!   r0   r3   r1   	NameErrorr    r   r   r$   r7   r2   r.   r*   r   r   r   r   <module>   s"   

