B
     \9                 @   s   d dl mZ d dlmZ d dlmZ d dlmZ d dl	Z	e	
dZee	j ejZeje_G dd dZG dd	 d	eZG d
d deZejdddZG dd dejZee_edkre  dS )    N)tracing)StringIO)with_metaclasstracec               @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )CapturedTracez-Capture the trace temporarily for validation.c             C   s   t  | _t| j| _d S )N)r   bufferloggingStreamHandlerZhandler)self r   7lib/python3.7/site-packages/numba/tests/test_tracing.py__init__   s    zCapturedTrace.__init__c             C   s$   t j| _t | _t| jgt _d S )N)loggerhandlers	_handlersr   r   r   r	   )r
   r   r   r   	__enter__   s    zCapturedTrace.__enter__c             C   s   | j t_d S )N)r   r   r   )r
   typevalue	tracebackr   r   r   __exit__   s    zCapturedTrace.__exit__c             C   s   | j  }|td d}|S )N. )r   getvaluereplace__name__)r
   logr   r   r   r      s    
zCapturedTrace.getvalueN)r   
__module____qualname____doc__r   r   r   r   r   r   r   r   r      s
   r   c               @   sl   e Zd Zejedd Zejedd ZdZ	dd Z
dd	 Zeee
eZejdddZdd ZdS )Classc             C   s   d S )Nr   )clsr   r   r   class_method%   s    zClass.class_methodc               C   s   d S )Nr   r   r   r   r   static_method*   s    zClass.static_methodNc             C   s   | j S )N)_Class__test)r
   r   r   r   	_test_get1   s    zClass._test_getc             C   s
   || _ d S )N)r#   )r
   r   r   r   r   	_test_set4   s    zClass._test_setr   c             O   s   d S )Nr   )r
   Zsomeotherargskwdsr   r   r   method9   s    zClass.methodc             C   s   dS )z,Generate a deterministic string for testing.z<Class instance>r   )r
   r   r   r   __repr__=   s    zClass.__repr__)r   )r   r   r   r   r   classmethodr!   staticmethodr"   r#   r$   r%   propertytestr)   r*   r   r   r   r   r   #   s   r   c               @   sZ   e Zd Zedd Zedd ZdZedd Z	e	j
dd Z	d	d
 Zdd Zdd ZdS )Class2c             C   s   d S )Nr   )r    r   r   r   r!   B   s    zClass2.class_methodc               C   s   d S )Nr   r   r   r   r   r"   F   s    zClass2.static_methodNc             C   s   | j S )N)_Class2__test)r
   r   r   r   r.   K   s    zClass2.testc             C   s
   || _ d S )N)r0   )r
   r   r   r   r   r.   N   s    c             C   s   d S )Nr   )r
   r   r   r   r)   R   s    zClass2.methodc             C   s   dt | j d S )NzTest())strr.   )r
   r   r   r   __str__U   s    zClass2.__str__c             C   s   dS )z,Generate a deterministic string for testing.z<Class2 instance>r   )r
   r   r   r   r*   X   s    zClass2.__repr__)r   r   r   r+   r!   r,   r"   r0   r-   r.   setterr)   r3   r*   r   r   r   r   r/   A   s   r/   Tc             C   s    | | }| | }|r|S |S d S )Nr   )xyzabr   r   r   r.   ]   s
     r.   c                   sf   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
eddd Z  ZS )TestTracingc                s   t t| j|  d S )N)superr:   r   )r
   r'   )	__class__r   r   r   f   s    zTestTracing.__init__c             C   s   t  | _d S )N)r   capture)r
   r   r   r   setUpi   s    zTestTracing.setUpc             C   s   | ` d S )N)r=   )r
   r   r   r   tearDownl   s    zTestTracing.tearDownc          	   C   s8   | j  t jddd W d Q R X | | j  d d S )NZfooZbaz)Zbarz]>> Class.method(self=<Class instance>, some='foo', other='value', bar='baz')
<< Class.method
)r=   r   r)   assertEqualr   )r
   r   r   r   test_methodo   s    zTestTracing.test_methodc          	   C   s0   | j  t  W d Q R X | | j  d d S )NzA>> Class.class_method(cls=<class 'Class'>)
<< Class.class_method
)r=   r   r!   r@   r   )r
   r   r   r   test_class_methodw   s    zTestTracing.test_class_methodc          	   C   s0   | j  t  W d Q R X | | j  d d S )Nz$>> static_method()
<< static_method
)r=   r   r"   r@   r   )r
   r   r   r   test_static_method   s    zTestTracing.test_static_methodc          	   C   sB   | j   t }d|_d|jks"tW d Q R X | | j  d d S )N   z>> Class._test_set(self=<Class instance>, value=1)
<< Class._test_set
>> Class._test_get(self=<Class instance>)
<< Class._test_get -> 1
)r=   r   r.   AssertionErrorr@   r   )r
   r.   r   r   r   test_property   s    zTestTracing.test_propertyc          	   C   s>   | j  tdd tddd W d Q R X | | j  d d S )N   FzQ>> test(x=5, y=5, z=True)
<< test -> 10
>> test(x=5, y=5, z=False)
<< test -> 25
)r=   r.   r@   r   )r
   r   r   r   test_function   s
    
zTestTracing.test_functionz(recursive decoration not yet implementedc          	   C   sh   | j X tjtdd t  t  t }d|_d|jks@t|  | 	| j 
 d W d Q R X d S )NT)	recursiverD   zg>> Class2.class_method(cls=<type 'Class2'>)
<< Class2.class_method
>> static_method()
<< static_method
)r=   r   r   r/   r!   r"   r.   rE   r)   r@   r   )r
   r.   r   r   r   test_injected   s    zTestTracing.test_injected)r   r   r   r   r>   r?   rA   rB   rC   rF   rH   unittestskiprJ   __classcell__r   r   )r<   r   r:   d   s   	r:   __main__)T)Znumba.unittest_supportZunittest_supportrK   Znumbar   Znumba.utilsr   Z	numba.sixr   r   Z	getLoggerr   ZsetLevelINFOr   Z
orig_traceZdotracer   objectr   r/   r.   ZTestCaser:   r   mainr   r   r   r   <module>   s"   
O