
     YHh,#                     0   d Z ddl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
mZ ddlmZ 	 ddlZd Z eej$                  d
k(  d      Z	 ddlmZ de_        ed        ZdZdZedz   ZdZdZe G d de             Zy# e$ r d	 ZY Tw xY w# e$ r Y ;w xY w)z&Tests for the Cython magics extension.    N)contextmanager)skipIf)IpythonMagic)
CythonTest)AnnotationCCodeWriterc                     | S N )cs    \/var/www/html/planif/env/lib/python3.12/site-packages/Cython/Build/Tests/TestIpythonMagic.pyskip_if_not_installedr      s        c                      y r	   r
   )_s    r   r   r      s    r   win32zSkip on Windows)HistoryManagerFc               #     K   t         j                  t         j                  f} 	 t        j                  t        j
                         t         j                  j                        t        j                  t        j
                         t         j                  j                        g}|\  t         _        t         _        g }| | \  t         _        t         _        |D ]B  }|j                  d       |j                  |j                                |j                          D y # | \  t         _        t         _        D ]B  }|j                  d       j                  |j                                |j                          D w xY ww)N)encodingr   )sysstdoutstderrioTextIOWrapperBytesIOr   seekappendreadclose)backupreplacementoutputwrappers       r   capture_outputr#   %   s    ZZ#FbjjlSZZ5H5HIbjjlSZZ5H5HI
 "-
CJ!'
CJ" 	GLLOMM',,.)MMO	 "(
CJ" 	GLLOMM',,.)MMO	s   !FBD" AF"A FFz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()
zUcdef extern from *:
    """
    xxx a=1;
    """
    int a;
def doit():
    return a
z{cdef extern from *:
    """
    #pragma message ( "CWarning" )
    int a = 42;
    """
    int a;
def doit():
    return a
c                       e Zd Zed        Zd Zd Zed        Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zed        Zed        Zd Zd Zd Z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.setUpClassd   s(    //--99;r   c                 x    t        j                  |        | j                  j                  j	                  d       y )Ncython)r   setUpr,   extension_managerload_extension)selfs    r   r0   zTestIPythonMagic.setUpi   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)r3   ipresults      r   test_cython_inlinez#TestIPythonMagic.test_cython_inlinem   s;    XX
l""?BE$r   c                    | 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,   r9   coder8   r:   user_nsosremoveOSError)r3   r;   module_names      r   test_cython_pyximportz&TestIPythonMagic.test_cython_pyximports   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/   r6   rA   rB   rC   r,   r9   rE   r8   r:   rF   r3   r;   s     r   test_cythonzTestIPythonMagic.test_cython   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)rB   rC   rM   rN   s     r   test_cython_namez!TestIPythonMagic.test_cython_name   sC    XX
($5t<
34C$/r   c                     | j                   }|j                  ddt               |j                  d       | j	                  |j
                  d   d       | j	                  |j
                  d   d       y )Nr/   r6   g = f(10); h = call(10)rB   皙?rD   r,   r9   cython3_coder8   r:   rF   rN   s     r   test_cython_language_levelz+TestIPythonMagic.test_cython_language_level   sZ    XX
(B5
'(C*5C*5r   c                     | j                   }|j                  ddt               |j                  d       | j	                  |j
                  d   d       | j	                  |j
                  d   d       y )Nr/   -3rS   rB   rT   rD   rU   rN   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-2rS   rB   r   rD   rU   rN   s     r   test_cython2zTestIPythonMagic.test_cython2   sZ    XX
(D,7
'(C'2C'2r   c                     | j                   }t               5 }|j                  ddt               d d d        \  }}|dz   |z   }| j	                  d|v d|z          y # 1 sw Y   /xY w)Nr/   rY   
error	error in msg)r,   r#   r9   compile_error_code
assertTruer3   r;   outcaptured_outcaptured_errcaptured_alls         r   test_cython_compile_error_shownz0TestIPythonMagic.test_cython_compile_error_shown   st    XX 	Bh.@A	B%("l $d*\9</[<5OP	B 	B   AA&c                     | j                   }t               5 }|j                  ddt               d d d        \  }}|dz   |z   }| j	                  d|v d|z          y # 1 sw Y   /xY w)Nr/   z-3 -l=xxxxxxxxz
!r_   r`   ra   )r,   r#   r9   rE   rd   re   s         r   test_cython_link_error_shownz-TestIPythonMagic.test_cython_link_error_shown   st    XX 	@h(8$?	@%("l $e+l:</[<5OP	@ 	@rk   c                     | j                   }t               5 }|j                  ddt               d d d        \  }}| j	                  d|v        y # 1 sw Y   "xY w)Nr/   z-3 -fCWarning)r,   r#   r9   compile_warning_coderd   )r3   r;   rf   rg   rh   s        r   test_cython_warning_shownz*TestIPythonMagic.test_cython_warning_shown   s`    XX 	G h1EF	G &)"l 	
l23	G 	Gs   AA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()rB   rT   rD   )r,   r9   pgo_cython3_coder8   r:   rF   rN   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,   rF   r9   r:   )r3   r;   rE   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/   	--verboserA   rB   rC   rM   rN   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>.MockLogrv      c                 V    | j                   j                  |       | j                   d   S )N)
thresholdsr   )r3   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INFOr   r   r
   r   r   MockLogr      s    "V
/r   r   )r   	distutilslog)r   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/   rz   rA   rB   rC   r6   )
r   r,   r9   rE   r8   r:   rF   r   r   r   )r3   r   r;   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c                 p    | j                   }|j                  ddt              }| j                  |d u        y )Nr/   r6   )r,   r9   rE   rd   r3   r;   htmls      r   test_cython_no_annotatez(TestIPythonMagic.test_cython_no_annotate  s/    XX  2t4%r   c                     | j                   }|j                  ddt              }| j                  t        j
                  |j                  v       y )Nr/   z
--annotater,   r9   rE   rd   r   COMPLETE_CODE_TITLEdatar   s      r   test_cython_annotatez%TestIPythonMagic.test_cython_annotate  s=    XX  <> 	-AARSr   c                     | j                   }|j                  ddt              }| j                  t        j
                  |j                  v       y )Nr/   z-ar   r   s      r   test_cython_annotate_defaultz-TestIPythonMagic.test_cython_annotate_default  s=    XX  46 	-AARSr   c                     | j                   }|j                  ddt              }| j                  t        j
                  |j                  v        y )Nr/   z--annotate-fullcr   r   s      r   $test_cython_annotate_complete_c_codez5TestIPythonMagic.test_cython_annotate_complete_c_code  s>    XX  +=tD 	-AATYYNOr   N)r   r   r   classmethodr'   r0   r=   
skip_win32rK   rO   rQ   rW   rZ   r\   rj   rm   rq   rt   rx   r{   r   r   r   r   r   r
   r   r   r%   r%   a   s     < <<%  00663	Q	Q	4 6 6 - -0!CF&
TTPr   r%   )__doc__rG   r   r   
contextlibr   unittestr   Cython.Buildr   Cython.TestUtilsr   Cython.Compiler.Annotater   IPython.testing.globalipappr(   r   ImportErrorplatformr   IPython.core.historyr   enabledr#   rE   rV   rs   rc   rp   r%   r
   r   r   <module>r      s    - 
 	 
 %  % ' :& CLLG+->?
	3"N
  $
   #   	  }Pz }P }Pa    		s#   A? B ?B
	B
BB