
    h,#                     4   S r SSKrSSKrSSKrSSKJr  SSKJr  SSKJ	r	  SSK
Jr  SSKJr   SSKrS r\" \R$                  S
:H  S5      r SSKJr  S\l        \S 5       rSrSr\S-   rSrSr\ " S S\5      5       rg! \ a    S	 r NUf = f! \ a     N=f = f)z&Tests for the Cython magics extension.    N)contextmanager)skipIf)IpythonMagic)
CythonTest)AnnotationCCodeWriterc                     U $ N )cs    ]/var/www/fran/franai/venv/lib/python3.13/site-packages/Cython/Build/Tests/TestIpythonMagic.pyskip_if_not_installedr      s        c                     g r	   r
   )_s    r   r   r      s    r   win32zSkip on Windows)HistoryManagerFc               #     #    [         R                  [         R                  4n  [        R                  " [        R
                  " 5       [         R                  R                  S9[        R                  " [        R
                  " 5       [         R                  R                  S9/nUu  [         l        [         l        / nUv   U u  [         l        [         l        U HC  nUR                  S5        UR                  UR                  5       5        UR                  5         ME     g ! U u  [         l        [         l        W HC  nUR                  S5        WR                  UR                  5       5        UR                  5         ME     f = f7f)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                       \ rS rSr\S 5       rS rS r\S 5       r	S r
S rS rS	 rS
 rS rS rS r\S 5       r\S 5       rS rS rS rS rS rS rSrg)TestIPythonMagica   c                     [         R                  " 5         [        R                  R                  R                  5       U l        g r	   )r   
setUpClassIPythontestingglobalipappget_ipython_ip)clss    r   r(   TestIPythonMagic.setUpClassd   s(    //--99;r   c                 z    [         R                  " U 5        U R                  R                  R	                  S5        g )Ncython)r   setUpr-   extension_managerload_extension)selfs    r   r2   TestIPythonMagic.setUpi   s(    ""11(;r   c                     U R                   nUR                  S5        UR                  SSS5      nU R                  US5        g )Nz
a=10; b=20cython_inline z
return a+b   )r-   exrun_cell_magicassertEqual)r5   ipresults      r   test_cython_inline#TestIPythonMagic.test_cython_inlinem   s;    XX
l""?BE$r   c                    U R                   nSnUR                  SU[        5        UR                  S5        U R	                  UR
                  S   S5        UR                  SU[        5        UR                  S5        U R	                  UR
                  S   S5         [        R                  " US	-   5        g ! [         a     g f = f)
N_test_cython_pyximportcython_pyximport	g = f(10)g      4@z
h = f(-10)hg      4z.pyx)	r-   r<   coder;   r=   user_nsosremoveOSError)r5   r>   module_names      r   test_cython_pyximport&TestIPythonMagic.test_cython_pyximports   s    XX.
,k4@
kC$/
,k4@
lC%0	IIkF*+ 		s   B8 8
CCc                     U R                   nUR                  SS[        5        UR                  S5        U R	                  UR
                  S   S5        g )Nr1   r9   rE   rF   rG   r-   r<   rI   r;   r=   rJ   r5   r>   s     r   test_cythonTestIPythonMagic.test_cython   sA    XX
(B-
kC$/r   c                     U R                   nUR                  SS[        5        UR                  S5        U R	                  UR
                  S   S5        g )Nr1   z--name=mymodulez#import mymodule; g = mymodule.f(10)rF   rG   rR   rS   s     r   test_cython_name!TestIPythonMagic.test_cython_name   sC    XX
($5t<
34C$/r   c                     U R                   nUR                  SS[        5        UR                  S5        U R	                  UR
                  S   S5        U R	                  UR
                  S   S5        g )Nr1   r9   g = f(10); h = call(10)rF   皙?rH   r-   r<   cython3_coder;   r=   rJ   rS   s     r   test_cython_language_level+TestIPythonMagic.test_cython_language_level   sZ    XX
(B5
'(C*5C*5r   c                     U R                   nUR                  SS[        5        UR                  S5        U R	                  UR
                  S   S5        U R	                  UR
                  S   S5        g )Nr1   -3rZ   rF   r[   rH   r\   rS   s     r   test_cython3TestIPythonMagic.test_cython3   sZ    XX
(D,7
'(C*5C*5r   c                     U R                   nUR                  SS[        5        UR                  S5        U R	                  UR
                  S   S5        U R	                  UR
                  S   S5        g )Nr1   z-2rZ   rF   r   rH   r\   rS   s     r   test_cython2TestIPythonMagic.test_cython2   sZ    XX
(D,7
'(C'2C'2r   c                     U R                   n[        5        nUR                  SS[        5        S S S 5        Wu  p4US-   U-   nU R	                  SU;   SU-   S9  g ! , (       d  f       N1= f)Nr1   ra   
error	error in msg)r-   r#   r<   compile_error_code
assertTruer5   r>   outcaptured_outcaptured_errcaptured_alls         r   test_cython_compile_error_shown0TestIPythonMagic.test_cython_compile_error_shown   sg    XXh.@A %(" $d*\9</[<5OP    A
A(c                     U R                   n[        5        nUR                  SS[        5        S S S 5        Wu  p4US-   U-   nU R	                  SU;   SU-   S9  g ! , (       d  f       N1= f)Nr1   z-3 -l=xxxxxxxxz
!ri   rj   rk   )r-   r#   r<   rI   rn   ro   s         r   test_cython_link_error_shown-TestIPythonMagic.test_cython_link_error_shown   sg    XXh(8$? %(" $e+l:</[<5OP rv   c                     U R                   n[        5        nUR                  SS[        5        S S S 5        Wu  p4U R	                  SU;   5        g ! , (       d  f       N'= f)Nr1   z-3 -fCWarning)r-   r#   r<   compile_warning_codern   )r5   r>   rp   rq   rr   s        r   test_cython_warning_shown*TestIPythonMagic.test_cython_warning_shown   sS    XX h1EF  &)" 	
l23 s   A
Ac                     U R                   nUR                  SS[        5        UR                  S5        U R	                  UR
                  S   S5        U R	                  UR
                  S   S5        g )Nr1   z-3 --pgozg = f(10); h = call(10); main()rF   r[   rH   )r-   r<   pgo_cython3_coder;   r=   rJ   rS   s     r   test_cython3_pgo!TestIPythonMagic.test_cython3_pgo   s]     XX
(J0@A
/0C*5C*5r   c                     U R                   nSnSUR                  S'   UR                  SSU5        U R                  UR                  S   S5        g )Nz1
from libc.math cimport sin
x = sin(0.0)
           xr1   z-l mr   )r-   rJ   r<   r=   )r5   r>   rI   s      r   test_extlibsTestIPythonMagic.test_extlibs   sK    XX 

3
(FD1C!,r   c                     U R                   nUR                  SS[        5        UR                  S5        U R	                  UR
                  S   S5        g )Nr1   	--verboserE   rF   rG   rR   rS   s     r   test_cython_verbose$TestIPythonMagic.test_cython_verbose   sA    XX
(K6
kC$/r   c                    [         S 5       nU R                  nU" 5        nUR                  SS[        5        UR	                  S5        S S S 5        U R                  UR                  S   S5        U R                  WR                  UR                  UR                  /UR                  5        U" 5        nUR                  SS[        5        UR	                  S5        S S S 5        U R                  UR                  S   S5        U R                  WR                  /UR                  5        g ! , (       d  f       N= f! , (       d  f       Nf= f)Nc               3      #     " S S5      n U " 5       n[         R                  R                  n U[         R                  l        Uv   U[         R                  l        g ! U[         R                  l        f = f7f)Nc                   (    \ rS rSrSrSr\/rS rSrg)XTestIPythonMagic.test_cython_verbose_thresholds.<locals>.mock_distutils.<locals>.MockLog   r      c                 V    U R                   R                  U5        U R                   S   $ )N)
thresholdsr   )r5   vals     r   set_thresholdfTestIPythonMagic.test_cython_verbose_thresholds.<locals>.mock_distutils.<locals>.MockLog.set_threshold   s#    OO**3/??2..r   r
   N)	__name__
__module____qualname____firstlineno__DEBUGINFOr   r   __static_attributes__r
   r   r   MockLogr      s    "V
/r   r   )r   	distutilslog)r   new_logold_logs      r   mock_distutilsGTestIPythonMagic.test_cython_verbose_thresholds.<locals>.mock_distutils   s]     / / iG",,00G5-4&&*-4&&*W&&*s   ,A8A A8A55A8r1   r   rE   rF   rG   r9   )
r   r-   r<   rI   r;   r=   rJ   r   r   r   )r5   r   r>   verbose_log
normal_logs        r   test_cython_verbose_thresholds/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)D=,
D:=
Ec                 p    U R                   nUR                  SS[        5      nU R                  US L 5        g )Nr1   r9   )r-   r<   rI   rn   r5   r>   htmls      r   test_cython_no_annotate(TestIPythonMagic.test_cython_no_annotate  s/    XX  2t4%r   c                     U R                   nUR                  SS[        5      nU R                  [        R
                  UR                  ;  5        g )Nr1   z
--annotater-   r<   rI   rn   r   COMPLETE_CODE_TITLEdatar   s      r   test_cython_annotate%TestIPythonMagic.test_cython_annotate  s=    XX  <> 	-AARSr   c                     U R                   nUR                  SS[        5      nU R                  [        R
                  UR                  ;  5        g )Nr1   z-ar   r   s      r   test_cython_annotate_default-TestIPythonMagic.test_cython_annotate_default  s=    XX  46 	-AARSr   c                     U R                   nUR                  SS[        5      nU R                  [        R
                  UR                  ;   5        g )Nr1   z--annotate-fullcr   r   s      r   $test_cython_annotate_complete_c_code5TestIPythonMagic.test_cython_annotate_complete_c_code  s>    XX  +=tD 	-AATYYNOr   r
   N)r   r   r   r   classmethodr(   r2   r@   
skip_win32rO   rT   rW   r^   rb   re   rt   rx   r}   r   r   r   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__rK   r   r   
contextlibr   unittestr   Cython.Buildr   Cython.TestUtilsr   Cython.Compiler.Annotater   IPython.testing.globalipappr)   r   ImportErrorplatformr   IPython.core.historyr   enabledr#   rI   r]   r   rm   r|   r%   r
   r   r   <module>r      s    - 
 	 
 %  % ' :& CLLG+->?
	3"N
  $
   #   	  }Pz }P }Pa    		s#   A? B ?	B
BBB