
ÍÆV 
  ã               @   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 d d l m	 Z	 d d „  Z
 y d d l m Z WnJ e k
 rÊ y d d l m Z Wn! e k
 rÅ d d d	 „ Z Yn XYn Xd
 d d d „ Z d S)z
Helper for testing.
é    N)ÚPY3_OR_LATERc                 s.   t  j ‰  d d ‡  f d d † }  |  t  _ d S)z& Redirect all warnings to stdout.
    Nr   c                s)   ˆ  |  | t  j j | ƒ | t j ƒ d  S)N)ÚosÚpathÚbasenameÚsysÚstdout)ÚmsgÚcatÚfnameÚlnoÚfileÚline)Úshowwarning_orig© ú[/s/python-3.5.2/amd64_ubu14/lib/python3.5/site-packages/sklearn/externals/joblib/testing.pyÚshowwarning   s    z'warnings_to_stdout.<locals>.showwarning)Úwarningsr   )r   r   )r   r   Úwarnings_to_stdout   s    	r   )Úassert_raises_regex)Úassert_raises_regexpc             O   sŸ   d } y | | | Ž  d } Wn_ t  k
 r~ } z? t | ƒ } t j | ƒ j | ƒ sl t d | | f ƒ ‚ WYd d } ~ Xn X| r› t d |  | ƒ ƒ ‚ d S)z;Helper function to check for message patterns in exceptionsFTz3Error message should match pattern %r. %r does not.NzShould have raised %r)Ú	ExceptionÚstrÚreÚcompileÚsearchÚAssertionError)Úexpected_exceptionÚexpected_regexpÚcallable_objÚargsÚkwargsZ
not_raisedÚeÚerror_messager   r   r   r   #   s    
#r   é   c          
      s   t  j |  d t  j d t  j ƒ‰  ‡  f d d †  } t j | | ƒ } z© | j ƒ  ˆ  j ƒ  \ } } t rƒ | j ƒ  | j ƒ  } } ˆ  j	 d k r¶ d j
 ˆ  j	 | | ƒ } t | ƒ ‚ | d k	 rí t j | | ƒ rí t d j
 | | ƒ ƒ ‚ Wd | j ƒ  Xd S)	zƒRuns a command in a subprocess with timeout in seconds.

    Also checks returncode is zero and stdout if stdout_regex is set.
    r   Ústderrc                  s   ˆ  j  ƒ  d  S)N)Úkillr   )Úprocr   r   Úkill_process>   s    z+check_subprocess_call.<locals>.kill_processr   z2Non-zero return code: {0}.
Stdout:
{1}
Stderr:
{2}Nz0Unexpected output: '{0!r}' does not match:
{1!r})Ú
subprocessÚPopenÚPIPEÚ	threadingÚTimerÚstartÚcommunicater   ÚdecodeÚ
returncodeÚformatÚ
ValueErrorr   r   Úcancel)ÚcmdÚtimeoutZstdout_regexr'   Ztimerr   r$   Úmessager   )r&   r   Úcheck_subprocess_call6   s&    
r7   )Ú__doc__r   r   Úos.pathr   r   r(   r+   Z sklearn.externals.joblib._compatr   r   Z
nose.toolsr   ÚImportErrorr   r7   r   r   r   r   Ú<module>   s    