ó
\K]c           @   sÜ   d  d l  m Z d  d l m Z d  d l m Z d  d l m Z d  d l m	 Z	 d  d l
 Z
 d  d l Z d  d l m Z y d  d l m Z d	 „  Z Wn* e k
 rÁ d  d l m Z d
 „  Z n Xd e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   unittest_support(   t   TestCase(   t   utils(   t   convert(   t   readsN(   t   copy(   t   Emptyc         C   s   t  |  t ƒ S(   N(   t
   isinstancet   str(   t   s(    (    s5   lib/python2.7/site-packages/numba/testing/notebook.pyt   isstr   s    c         C   s   t  |  t ƒ S(   N(   R   t
   basestring(   R	   (    (    s5   lib/python2.7/site-packages/numba/testing/notebook.pyR
      s    t   NotebookTestc           B   s€   e  Z d  Z d d d d g Z d d d d g Z d	 Z d
 „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z RS(   sV  Validate a notebook. All code cells are executed in order. The output is either checked
    for errors (if no reference output is present), or is compared against expected output.


    Useful references:
    http://nbformat.readthedocs.org/en/latest/format_description.html
    http://jupyter-client.readthedocs.org/en/latest/messaging.html
t   execute_requestt   execute_inputt   statust   pyint   execution_countt	   tracebackt   prompt_numbert   sourcei   c   	      C   sª   t  | ƒ % } t t | j ƒ  ƒ |  j ƒ } Wd  QXt j ƒ  \ } } x^ t g  | j D] } | j	 d k rU | ^ qU ƒ D]+ \ } } |  j
 |  j | ƒ | | | ƒ qw Wd  S(   Nt   code(   t   openR   R   t   readt   NBFORMAT_VERSIONR   t   start_new_kernelt	   enumeratet   cellst	   cell_typet   _test_notebook_cellt   sanitize_cell(	   t   selft   notebookt   testt   ft   nbt   _t   kernelt   ct   i(    (    s5   lib/python2.7/site-packages/numba/testing/notebook.pyt   _test_notebook)   s
    $>c            s±  t  | d ƒ r | j } n	 | j } | j } | j | ƒ g  } d  } t }	 d }
 d } xÿ ˆ  j | ƒ rYy | j d t d d ƒ } Wn t	 k
 rœ q[ n X| d ˆ  j
 k r[ | d d k r d	 | d
 d d | d
 d } t }	 |
 d k r | }
 q n  t | ƒ } | t | j ƒ k  r.| j | p1g  } ˆ  j | | ƒ } | j | ƒ q[ q[ W| d k rƒˆ  j |	 d |
 | f ƒ n* ‡  f d †  } | | ƒ } | | j ƒ } d  S(   NR   iÿÿÿÿt    t   blockt   timeouti   t   msg_typet   errors     t   contentt   enames   
  t   evaluet   check_errors*   Executing cell %d resulted in an error:
%sc            s   ˆ  j  t ˆ  j |  ƒ ƒ ƒ S(   N(   t   dump_canonicalt   listt   scrub_outputs(   t   x(   R   (    s5   lib/python2.7/site-packages/numba/testing/notebook.pyt   <lambda>T   R)   (   t   hasattrR   t   inputt   iopub_channelt   executet   Nonet   Truet   should_continuet   get_msgR   t   IGNORE_TYPESt   Falset   lent   outputst   transform_messaget   appendt
   assertTrue(   R   t   cellR'   R%   R!   R   t   iopubRB   t   msgt   no_errort   first_errort	   error_msgt   expectedt   ot   scrubt   scrubbed(    (   R   s5   lib/python2.7/site-packages/numba/testing/notebook.pyR   1   s<    		"(c         C   s   t  j | d d d t ƒS(   Nt   indenti   t	   sort_keys(   t   jsont   dumpsR<   (   R   t   obj(    (    s5   lib/python2.7/site-packages/numba/testing/notebook.pyR2   [   s    c         #   sà   xÙ | D]Ñ } t  | ƒ } x· g  D]¯ \ ‰  ‰ ‡  ‡ f d †  } d | k ra | | d ƒ | d <n  d | k r  t | d t ƒ r¸ xI | d j ƒ  D]  \ } } | | ƒ | d | <q‘ WqÏ | | d ƒ | d <q  q  W| Vq Wd S(   s=   
        remove all scrubs from output data and text
        c            sI   t  |  ƒ r t j ˆ  ˆ |  ƒ Sg  |  D] } t j ˆ  ˆ | ƒ ^ q& Sd  S(   N(   R
   t   ret   sub(   t   linest   line(   RN   RV   (    s5   lib/python2.7/site-packages/numba/testing/notebook.pyt   _scrubLinesf   s    t   textt   dataN(   R   R   t   dictt   items(   R   RB   t   outputt   outRY   t   mimeR[   (    (   RN   RV   s5   lib/python2.7/site-packages/numba/testing/notebook.pyR4   ^   s    c         C   s(   x! |  j  D] } | j | d ƒ q
 W| S(   sE   
        remove keys from STRIP_KEYS to ensure comparability
        N(   t
   STRIP_KEYSt   popR;   (   R   t   dt   key(    (    s5   lib/python2.7/site-packages/numba/testing/notebook.pyt
   strip_keysw   s    c         C   s%   x | j  D] } |  j | ƒ q
 W| S(   s0   
        remove non-reproducible things
        (   RB   Re   (   R   RF   R^   (    (    s5   lib/python2.7/site-packages/numba/testing/notebook.pyR      s    c         C   sÎ   i i d d 6d d 6d 6} i | d d 6} | j  | d ƒ |  j | ƒ } xK | j ƒ  D]= \ } } | | k rY | | | k rY | | | | | <qY qY Wd	 | k rÊ d	 | k rÊ | d	 | d
 <| d	 =n  | S(   sF   
        transform a message into something like the notebook
        t   execute_resultt   pyoutR-   t   pyerrt   output_typeR,   u   output_typeR.   R[   RZ   (   t   updateRe   R]   (   R   RH   RL   t	   SWAP_KEYSR^   Rd   t   swaps(    (    s5   lib/python2.7/site-packages/numba/testing/notebook.pyRC   ‡   s    
c         C   s3   | d k r t S| d d k o1 | d d d k S(   sQ   
        determine whether the current message is the last for this cell
        R,   R   R.   t   execution_statet   idleN(   R;   R<   (   R   RH   (    (    s5   lib/python2.7/site-packages/numba/testing/notebook.pyR=   ¢   s    (   t   __name__t
   __module__t   __doc__R?   Ra   R   R(   R   R2   R4   Re   R   RC   R=   (    (    (    s5   lib/python2.7/site-packages/numba/testing/notebook.pyR      s   		*					(   t   numbaR    t   unittestR   t   ipykernel.testsR   t   nbformat.converterR   t   nbformat.readerR   RU   RR   R   t   queueR   R
   t   ImportErrort   QueueR   (    (    (    s5   lib/python2.7/site-packages/numba/testing/notebook.pyt   <module>   s   