U
    NvfW                     @   s   d Z ddlm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ddl	m
Z
 dd Zdd	 Zd
d ZdddZG dd deZG dd deZdS )zE
Helpers for logging.

This module needs much love to become useful.
    )print_functionN   )mkdirpc                 C   s"   t jdrtd| d S | S dS )zRemove .1s to the time under Windows: this is the time it take to
    stat files. This is needed to make results similar to timings under
    Unix, for tests
    winr   g?N)sysplatform
startswithmaxt r   1/tmp/pip-unpacked-wheel-dylwa62s/joblib/logger.py_squeeze_time   s    r   c                 C   s   t | } d| | d f S )Nz%.1fs, %.1fmin      N@r   r
   r   r   r   format_time"   s    r   c                 C   s(   t | } | dkrd| d  S d|  S d S )N<   z%4.1fminr   z %5.1fsr   r
   r   r   r   short_format_time'   s    r      c                 C   sT   dt jkr,dd l}| }|jdddd nd }tj| ||d}|rP|jf | |S )Nnumpyr      @   r   )Z	precision	thresholdZ	edgeitems)depthindent)r   modulesr   Zget_printoptionsZset_printoptionspprintpformat)objr   r   npZprint_optionsoutr   r   r   r   /   s    
r   c                   @   s<   e Zd ZdZdddZdd Zdd	 Zd
d ZdddZdS )Loggerz& Base class for logging messages.
    r   Nc                 C   s   || _ |r|nd| _dS )z
            Parameters
            ----------
            depth: int, optional
                The depth of objects printed.
            name: str, optional
                The namespace to log to. If None, defaults to joblib.
        ZjoblibN)r   _name)selfr   namer   r   r   __init__C   s    	zLogger.__init__c                 C   s   t | jd| |f  d S Nz[%s]: %s)logging	getLoggerr"   warningr#   msgr   r   r   warnO   s    zLogger.warnc                 C   s   t d| |f  d S r&   )r'   infor*   r   r   r   r-   R   s    zLogger.infoc                 C   s   t | jd| |f  d S r&   )r'   r(   r"   debugr*   r   r   r   r.   U   s    zLogger.debugr   c                 C   s   t ||| jdS )z2Return the formatted representation of the object.)r   r   )r   r   )r#   r   r   r   r   r   formatY   s    zLogger.format)r   N)r   )	__name__
__module____qualname____doc__r%   r,   r-   r.   r/   r   r   r   r   r!   ?   s   
r!   c                   @   s$   e Zd ZdZd	ddZd
ddZdS )	PrintTimez9 Print and log messages while keeping track of time.
    Nc              	   C   s  |d k	r|d k	rt dt | _| j| _|d k	r@tj|d}|| _|d k	rttj	| tj
|rtddD ]6}z$t|d|  |d|d    W qv   Y qvX qvzt||d  W n   Y nX z:t|d&}|d |d	t| j  W 5 Q R X W n   Y nX d S )
Nz&Cannot specify both logfile and logdirz
joblib.logr   	   z.%iz.1wz
Logging joblib python script
z

---%s---
)
ValueErrortime	last_time
start_timeospathjoinlogfiler   dirnameexistsrangeshutilmovecopyopenwritectime)r#   r>   Zlogdirir   r   r   r%   e   s6    


$zPrintTime.__init__ Fc              	   C   s   |s$t   | j }d|t|f }n t   | j }d|||d f }t|tjd | jdk	rz(t| jd}t||d W 5 Q R X W n   Y nX t   | _dS )zr Print the time elapsed between the last call and the current
            call, with an optional message.
        z%s: %sz%s: %.2fs, %.1f minr   )fileNa)	r8   r9   r   r:   printr   stderrr>   rE   )r#   r+   totalZ
time_lapseZfull_msgfr   r   r   __call__   s    
zPrintTime.__call__)NN)rI   F)r0   r1   r2   r3   r%   rP   r   r   r   r   r4   a   s   
%r4   )r   r   )r3   
__future__r   r8   r   r;   rB   r'   r   Zdiskr   r   r   r   r   objectr!   r4   r   r   r   r   <module>   s   

"