
    AeQ                     (   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
 	 ddlZd Z	 dd	lmZ d
e_        dZdZedz   Zej*                  dk(  r	 ddlmZ nd Ze G d de
             Zy# e$ r d ZY Lw xY w# e$ r Y Iw xY w# e$ r d ZY 4w xY w)z&Tests for the Cython magics extension.    )absolute_importN)contextmanager)IpythonMagic)
CythonTestc                     | S N )cs    Clib/python3.12/site-packages/Cython/Build/Tests/TestIpythonMagic.pyskip_if_not_installedr      s        c                      y r   r	   )_s    r   r   r      s    r   )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                     d }|S )Nc                      y r   r	   )funcs    r   _skip_win32zskip_win32.<locals>._skip_win32:   s    r   r	   dummyr   s     r   
skip_win32r   9   s    r   c                     d }|S )Nc                       fd}|S )Nc                       | i | y r   r	   )argskwargsr   s     r   wrapperz0skip_win32.<locals>._skip_win32.<locals>.wrapper@   s    d%f%r   r	   )r   r   s   ` r   r   zskip_win32.<locals>._skip_win32?   s    &Nr   r	   r   s     r   r   r   >   s    	 r   c                       e Zd Zed        Zd Zd Z ed      d        Zd Z	d Z
d Zd	 Zd
 Z ed      d        Z ed      d        Zd Zd Zy)TestIPythonMagicc                     t        j                          t        j                  j                  j                         | _        y r   )r   
setUpClassIPythontestingglobalipappget_ipython_ip)clss    r   r#   zTestIPythonMagic.setUpClassI   s(    //--99;r   c                 x    t        j                  |        | j                  j                  j	                  d       y )Ncython)r   setUpr(   extension_managerload_extension)selfs    r   r,   zTestIPythonMagic.setUpN   s(    ""11(;r   c                     | j                   }|j                  d       |j                  ddd      }| j                  |d       y )Nz
a=10; b=20cython_inline z
return a+b   )r(   exrun_cell_magicassertEqual)r/   ipresults      r   test_cython_inlinez#TestIPythonMagic.test_cython_inlineR   s;    XX
l""?BE$r   zSkip on Windowsc                    | j                   }d}|j                  d|t               |j                  d       | j	                  |j
                  d   d       |j                  d|t               |j                  d       | j	                  |j
                  d   d       	 t        j                  |d	z          y # t        $ r Y y w xY w)
N_test_cython_pyximportcython_pyximport	g = f(10)g      4@z
h = f(-10)hg      4z.pyx)	r(   r5   coder4   r6   user_nsosremoveOSError)r/   r7   module_names      r   test_cython_pyximportz&TestIPythonMagic.test_cython_pyximportX   s    XX.
,k4@
kC$/
,k4@
lC%0	IIkF*+ 		s   B7 7	CCc                     | j                   }|j                  ddt               |j                  d       | j	                  |j
                  d   d       y )Nr+   r2   r=   r>   r?   r(   r5   rA   r4   r6   rB   r/   r7   s     r   test_cythonzTestIPythonMagic.test_cythong   sA    XX
(B-
kC$/r   c                     | j                   }|j                  ddt               |j                  d       | j	                  |j
                  d   d       y )Nr+   z--name=mymodulez#import mymodule; g = mymodule.f(10)r>   r?   rI   rJ   s     r   test_cython_namez!TestIPythonMagic.test_cython_namem   sC    XX
($5t<
34C$/r   c                    | j                   }|j                  ddt               |j                  d       t        j
                  d   dk  r?| j                  |j                  d   d       | j                  |j                  d   d       y | j                  |j                  d   d       | j                  |j                  d   d       y )	Nr+   r2   g = f(10); h = call(10)r      r>   r@   皙?)r(   r5   cython3_coder4   sysversion_infor6   rB   rJ   s     r   test_cython_language_levelz+TestIPythonMagic.test_cython_language_levelu   s    XX
(B5
'(A"RZZ_g6RZZ_g6RZZ_j9RZZ_j9r   c                     | j                   }|j                  ddt               |j                  d       | j	                  |j
                  d   d       | j	                  |j
                  d   d       y )Nr+   z-3rO   r>   rQ   r@   r(   r5   rR   r4   r6   rB   rJ   s     r   test_cython3zTestIPythonMagic.test_cython3   sZ    XX
(D,7
'(C*5C*5r   c                     | j                   }|j                  ddt               |j                  d       | j	                  |j
                  d   d       | j	                  |j
                  d   d       y )Nr+   z-2rO   r>   r   r@   rW   rJ   s     r   test_cython2zTestIPythonMagic.test_cython2   sZ    XX
(D,7
'(C'2C'2r   c                     | j                   }|j                  ddt               |j                  d       | j	                  |j
                  d   d       | j	                  |j
                  d   d       y )Nr+   z-3 --pgozg = f(10); h = call(10); main()r>   rQ   r@   )r(   r5   pgo_cython3_coder4   r6   rB   rJ   s     r   test_cython3_pgoz!TestIPythonMagic.test_cython3_pgo   s]     XX
(J0@A
/0C*5C*5r   c                     | j                   }d}d|j                  d<   |j                  dd|       | j                  |j                  d   d       y )Nz1
from libc.math cimport sin
x = sin(0.0)
           xr+   z-l mr   )r(   rB   r5   r6   )r/   r7   rA   s      r   test_extlibszTestIPythonMagic.test_extlibs   sK    XX 

3
(FD1C!,r   c                     | j                   }|j                  ddt               |j                  d       | j	                  |j
                  d   d       y )Nr+   	--verboser=   r>   r?   rI   rJ   s     r   test_cython_verbosez$TestIPythonMagic.test_cython_verbose   sA    XX
(K6
kC$/r   c                    t         d        }| j                  } |       5 }|j                  ddt               |j	                  d       d d d        | j                  |j                  d   d       | j                  j                  |j                  |j                  g|j                          |       5 }|j                  ddt               |j	                  d       d d d        | j                  |j                  d   d       | j                  j                  g|j                         y # 1 sw Y   xY w# 1 sw Y   \xY w)Nc               3      K    G d d      }  |        }t         j                  j                  }	 |t         j                  _        | |t         j                  _        y # |t         j                  _        w xY ww)Nc                        e Zd ZdZdZegZd Zy)XTestIPythonMagic.test_cython_verbose_thresholds.<locals>.mock_distutils.<locals>.MockLogr_      c                 V    | j                   j                  |       | j                   d   S )N)
thresholdsappend)r/   vals     r   set_thresholdzfTestIPythonMagic.test_cython_verbose_thresholds.<locals>.mock_distutils.<locals>.MockLog.set_threshold   s#    OO**3/??2..r   N)__name__
__module____qualname__DEBUGINFOrl   ro   r	   r   r   MockLogrh      s    "V
/r   ru   )r   	distutilslog)ru   new_logold_logs      r   mock_distutilszGTestIPythonMagic.test_cython_verbose_thresholds.<locals>.mock_distutils   s^     / / iG",,00G5-4&&*-4&&*W&&*s   ,A8A A8A55A8r+   rc   r=   r>   r?   r2   )
r   r(   r5   rA   r4   r6   rB   rt   rs   rl   )r/   rz   r7   verbose_log
normal_logs        r   test_cython_verbose_thresholdsz/TestIPythonMagic.test_cython_verbose_thresholds   s   		5 
	5& XX 	hT:EE+	 	C$/+**K,=,={?O?OP%00	2  	hD1EE+	 	C$/*//*J,A,AB	 		 	s   )D,4)D8,D58EN)rp   rq   rr   classmethodr#   r,   r9   r   rG   rK   rM   rU   rX   rZ   r]   ra   rd   r}   r	   r   r   r!   r!   F   s     < <<% !" #00
:63 !"6 #6 !"- #-0!Cr   r!   )__doc__
__future__r   rC   rS   
contextlibr   Cython.Buildr   Cython.TestUtilsr   IPython.testing.globalipappr$   r   ImportErrorIPython.core.historyr   enabledrA   rR   r\   platformunittestr   r   r!   r	   r   r   <module>r      s    - & 	 
 % % '&	3"N
   #   <<7/ FCz FC FCo    		6  	s4   A- A; B -A87A8;BBBB