3
d	                 @   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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   //tmp/pip-build-v9q4h5k9/joblib/joblib/logger.py_squeeze_time   s    r   c             C   s   t | } d| | d f S )Nz%.1fs, %.1fming      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.1fming      N@z %5.1fs)r   )r
   r   r   r   short_format_time'   s    r      c             C   sT   dt jkr,dd l}|j }|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               @   s4   e Zd ZdZdddZdd Zdd Zdd
dZdS )Loggerz& Base class for logging messages.
    r   c             C   s
   || _ dS )z
            Parameters
            ----------
            depth: int, optional
                The depth of objects printed.
        N)r   )selfr   r   r   r   __init__C   s    zLogger.__init__c             C   s   t jd| |f  d S )Nz[%s]: %s)loggingwarning)r   msgr   r   r   warnL   s    zLogger.warnc             C   s   t jd| |f  d S )Nz[%s]: %s)r!   debug)r   r#   r   r   r   r%   O   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   formatS   s    zLogger.formatN)r   )r   )__name__
__module____qualname____doc__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 | _| j| _|d k	r@tjj|d}|| _|d k	rttjj	| tjj
|rxDtddD ]6}y$tj|d|  |d|d    W qx   Y qxX qxW ytj||d  W n   Y nX y:t|d&}|jd |jd	tj| j  W d 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   r5   Zlogdirir   r   r   r    _   s4    



$zPrintTime.__init__ Fc             C   s   |s$t j  | j }d|t|f }n t j  | j }d|||d f }t|tjd | jdk	ry(t| jd}t||d W dQ R X W n   Y nX t j  | _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)	r/   r0   r   r1   printr   stderrr5   r<   )r   r#   totalZ
time_lapseZfull_msgfr   r   r   __call__   s    
zPrintTime.__call__)NN)r@   F)r'   r(   r)   r*   r    rG   r   r   r   r   r+   [   s   
%r+   )r   r   )r*   
__future__r   r/   r   r2   r9   r!   r   Zdiskr   r   r   r   r   objectr   r+   r   r   r   r   <module>   s   
