U
    iâËd÷  ã                   @   s¶   d dl mZ d dlZd dlZd dlm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r²e ¡  dS )é    )ÚStringION)ÚtracingÚ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ÚStreamHandlerÚhandler©Úself© r   úQ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_tracing.pyÚ__init__   s    zCapturedTrace.__init__c                 C   s$   t j| _tƒ | _t | j¡gt _d S r   )ÚloggerÚhandlersÚ	_handlersr   r   r   r	   r   r   r   r   Ú	__enter__   s    zCapturedTrace.__enter__c                 C   s   | j t_d S r   )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 r   r   ©Úclsr   r   r   Úclass_method%   s    zClass.class_methodc                   C   s   d S r   r   r   r   r   r   Ústatic_method*   s    zClass.static_methodNc                 C   s   | j S r   ©Ú_Class__testr   r   r   r   Ú	_test_get1   s    zClass._test_getc                 C   s
   || _ d S r   r&   ©r   r   r   r   r   Ú	_test_set4   s    zClass._test_setr   c                 O   s   d S r   r   )r   ZsomeÚotherÚargsÚkwdsr   r   r   Úmethod9   s    zClass.methodc                 C   s   dS )ú,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.   r0   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 r   r   r"   r   r   r   r$   B   s    zClass2.class_methodc                   C   s   d S r   r   r   r   r   r   r%   F   s    zClass2.static_methodNc                 C   s   | j S r   ©Ú_Class2__testr   r   r   r   r4   K   s    zClass2.testc                 C   s
   || _ d S r   r6   r)   r   r   r   r4   N   s    c                 C   s   d S r   r   r   r   r   r   r.   R   s    zClass2.methodc                 C   s   dt | jƒ d S )NzTest(ú))Ústrr4   r   r   r   r   Ú__str__U   s    zClass2.__str__c                 C   s   dS )r/   z<Class2 instance>r   r   r   r   r   r0   X   s    zClass2.__repr__)r   r   r   r1   r$   r2   r%   r7   r3   r4   Úsetterr.   r:   r0   r   r   r   r   r5   A   s   



r5   Tc                 C   s    | | }| | }|r|S |S d S r   r   )ÚxÚyÚzÚaÚbr   r   r   r4   ]   s
     r4   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 r   )ÚsuperrA   r   )r   r,   ©Ú	__class__r   r   r   f   s    zTestTracing.__init__c                 C   s   t ƒ | _d S r   )r   Úcapturer   r   r   r   ÚsetUpi   s    zTestTracing.setUpc                 C   s   | ` d S r   )rE   r   r   r   r   ÚtearDownl   s    zTestTracing.tearDownc              	   C   s8   | j � tƒ jddd� W 5 Q R X |  | j  ¡ d¡ d S )NZfooZbaz)Úbarz]>> Class.method(self=<Class instance>, some='foo', other='value', bar='baz')
<< Class.method
)rE   r!   r.   ÚassertEqualr   r   r   r   r   Útest_methodo   s
    ÿzTestTracing.test_methodc              	   C   s0   | j � t ¡  W 5 Q R X |  | j  ¡ d¡ d S )NzA>> Class.class_method(cls=<class 'Class'>)
<< Class.class_method
)rE   r!   r$   rI   r   r   r   r   r   Útest_class_methodw   s
    ÿzTestTracing.test_class_methodc              	   C   s0   | j � t ¡  W 5 Q R X |  | j  ¡ d¡ d S )Nz$>> static_method()
<< static_method
)rE   r!   r%   rI   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 5 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
)rE   r!   r4   ÚAssertionErrorrI   r   ©r   r4   r   r   r   Útest_propertyˆ   s    ÿzTestTracing.test_propertyc              	   C   s>   | j � tddƒ tdddƒ W 5 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
)rE   r4   rI   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 5 Q R X d S )NT)Ú	recursiverM   zg>> Class2.class_method(cls=<type 'Class2'>)
<< Class2.class_method
>> static_method()
<< static_method
)rE   r   r   r5   r$   r%   r4   rN   r.   rI   r   rO   r   r   r   Útest_injectedŸ   s    ÿzTestTracing.test_injected)r   r   r   r   rF   rG   rJ   rK   rL   rP   rR   ÚunittestÚskiprT   Ú__classcell__r   r   rC   r   rA   d   s   	rA   Ú__main__)T)Úior   r   rU   Z
numba.corer   Ú	getLoggerr   ÚsetLevelÚINFOr   Z
orig_traceZdotracer   Úobjectr!   r5   r4   ZTestCaserA   r   Úmainr   r   r   r   Ú<module>   s    
O