a
    ûbQ  ã                   @   s  d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
 zddlZW n eyj   dd„ ZY n
0 d	d„ Zzdd
lmZ de_W n eyœ   Y n0 dZdZed ZejdkræzddlmZ W qî eyâ   dd„ ZY qî0 ndd„ ZeG dd„ de
ƒƒZdS )z&Tests for the Cython magics extension.é    )Úabsolute_importN)Úcontextmanager)ÚIpythonMagic)Ú
CythonTestc                 C   s   d S ©N© )Ú_r   r   ús/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/Cython/Build/Tests/TestIpythonMagic.pyÚskip_if_not_installed   s    r
   c                 C   s   | S r   r   )Úcr   r   r	   r
      s    )ÚHistoryManagerFzdef f(x):
    return 2*x
zAdef f(int x):
    return 2 / x

def call(x):
    return f(*(x,))
z4def main():
    for _ in range(100): call(5)
main()
Úwin32)Úskipc                 C   s   dd„ }|S )Nc                 S   s   d S r   r   ©Úfuncr   r   r	   Ú_skip_win32:   s    úskip_win32.<locals>._skip_win32r   ©Údummyr   r   r   r	   Ú
skip_win329   s    r   c                 C   s   dd„ }|S )Nc                    s   ‡ fdd„}|S )Nc                     s   ˆ | i |¤Ž d S r   r   )ÚargsÚkwargsr   r   r	   Úwrapper@   s    z0skip_win32.<locals>._skip_win32.<locals>.wrapperr   )r   r   r   r   r	   r   ?   s    r   r   r   r   r   r	   r   >   s    c                   @   s   e Zd Zedd„ ƒZdd„ Zdd„ Zedƒdd	„ ƒZd
d„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zedƒdd„ ƒZedƒdd„ ƒZdd„ Zdd„ ZdS )ÚTestIPythonMagicc                 C   s   t  ¡  tjj ¡ | _d S r   )r   Ú
setUpClassÚIPythonZtestingZglobalipappZget_ipythonÚ_ip)Úclsr   r   r	   r   I   s    zTestIPythonMagic.setUpClassc                 C   s   t  | ¡ | jj d¡ d S )NÚcython)r   ÚsetUpr   Zextension_managerZload_extension)Úselfr   r   r	   r   N   s    
zTestIPythonMagic.setUpc                 C   s.   | j }| d¡ | ddd¡}|  |d¡ d S )Nz
a=10; b=20Zcython_inlineÚ z
return a+bé   )r   ÚexÚrun_cell_magicÚassertEqual)r    ÚipÚresultr   r   r	   Útest_cython_inlineR   s    
z#TestIPythonMagic.test_cython_inlinezSkip on Windowsc                 C   sˆ   | j }d}| d|t¡ | d¡ |  |jd d¡ | d|t¡ | d¡ |  |jd d¡ zt |d	 ¡ W n ty‚   Y n0 d S )
NZ_test_cython_pyximportZcython_pyximportú	g = f(10)Úgç      4@z
h = f(-10)Úhg      4Àz.pyx)	r   r$   Úcoder#   r%   Úuser_nsÚosÚremoveÚOSError)r    r&   Úmodule_namer   r   r	   Útest_cython_pyximportX   s    

z&TestIPythonMagic.test_cython_pyximportc                 C   s4   | j }| ddt¡ | d¡ |  |jd d¡ d S )Nr   r!   r)   r*   r+   ©r   r$   r-   r#   r%   r.   ©r    r&   r   r   r	   Útest_cythong   s    
zTestIPythonMagic.test_cythonc                 C   s4   | j }| ddt¡ | d¡ |  |jd d¡ d S )Nr   z--name=mymodulez#import mymodule; g = mymodule.f(10)r*   r+   r4   r5   r   r   r	   Útest_cython_namem   s    
z!TestIPythonMagic.test_cython_namec                 C   sz   | j }| ddt¡ | d¡ tjd dk rR|  |jd d¡ |  |jd d¡ n$|  |jd d¡ |  |jd d¡ d S )	Nr   r!   úg = f(10); h = call(10)r   é   r*   r,   çš™™™™™É?)r   r$   Úcython3_coder#   ÚsysÚversion_infor%   r.   r5   r   r   r	   Útest_cython_language_levelu   s    
z+TestIPythonMagic.test_cython_language_levelc                 C   sF   | j }| ddt¡ | d¡ |  |jd d¡ |  |jd d¡ d S )Nr   z-3r8   r*   r:   r,   ©r   r$   r;   r#   r%   r.   r5   r   r   r	   Útest_cython3   s
    
zTestIPythonMagic.test_cython3c                 C   sF   | j }| ddt¡ | d¡ |  |jd d¡ |  |jd d¡ d S )Nr   z-2r8   r*   r   r,   r?   r5   r   r   r	   Útest_cython2‰   s
    
zTestIPythonMagic.test_cython2c                 C   sF   | j }| ddt¡ | d¡ |  |jd d¡ |  |jd d¡ d S )Nr   z-3 --pgozg = f(10); h = call(10); main()r*   r:   r,   )r   r$   Úpgo_cython3_coder#   r%   r.   r5   r   r   r	   Útest_cython3_pgo‘   s
    
z!TestIPythonMagic.test_cython3_pgoc                 C   s8   | j }d}d|jd< | dd|¡ |  |jd d¡ d S )Nz1
from libc.math cimport sin
x = sin(0.0)
        é   Úxr   z-l mr   )r   r.   r$   r%   )r    r&   r-   r   r   r	   Útest_extlibsš   s
    
zTestIPythonMagic.test_extlibsc                 C   s4   | j }| ddt¡ | d¡ |  |jd d¡ d S )Nr   ú	--verboser)   r*   r+   r4   r5   r   r   r	   Útest_cython_verbose¦   s    
z$TestIPythonMagic.test_cython_verbosec                 C   sâ   t dd„ ƒ}| j}|ƒ (}| ddt¡ | d¡ W d   ƒ n1 sF0    Y  |  |jd d¡ |  |j|j|jg|j	¡ |ƒ (}| ddt¡ | d¡ W d   ƒ n1 s°0    Y  |  |jd d¡ |  |jg|j	¡ d S )	Nc                  s   sF   G dd„ dƒ} | ƒ }t jj}z|t j_|V  W |t j_n
|t j_0 d S )Nc                   @   s"   e Zd ZdZdZegZdd„ ZdS )zXTestIPythonMagic.test_cython_verbose_thresholds.<locals>.mock_distutils.<locals>.MockLogrD   é   c                 S   s   | j  |¡ | j d S )Néþÿÿÿ)Ú
thresholdsÚappend)r    Úvalr   r   r	   Úset_threshold´   s    zfTestIPythonMagic.test_cython_verbose_thresholds.<locals>.mock_distutils.<locals>.MockLog.set_thresholdN)Ú__name__Ú
__module__Ú__qualname__ÚDEBUGÚINFOrK   rN   r   r   r   r	   ÚMockLog¯   s   rT   )r   Ú	distutilsÚlog)rT   Znew_logZold_logr   r   r	   Úmock_distutils­   s    
zGTestIPythonMagic.test_cython_verbose_thresholds.<locals>.mock_distutilsr   rG   r)   r*   r+   r!   )
r   r   r$   r-   r#   r%   r.   rS   rR   rK   )r    rW   r&   Zverbose_logZ
normal_logr   r   r	   Útest_cython_verbose_thresholds¬   s    
(ÿ(z/TestIPythonMagic.test_cython_verbose_thresholdsN)rO   rP   rQ   Úclassmethodr   r   r(   r   r3   r6   r7   r>   r@   rA   rC   rF   rH   rX   r   r   r   r	   r   F   s"   



r   )Ú__doc__Ú
__future__r   r/   r<   Ú
contextlibr   ZCython.Buildr   ZCython.TestUtilsr   ZIPython.testing.globalipappr   ÚImportErrorr
   ZIPython.core.historyr   Úenabledr-   r;   rB   ÚplatformZunittestr   r   r   r   r   r   r	   Ú<module>   s6   

