B
    \	                 @   sz   d dl Z d dlZd dlmZ d dlmZ d dlmZ yd dlZdZ	W n   dZ	Y nX e
dddZdZG d	d
 d
eZdS )    N)inline)	safe_type)
CythonTestTF)Zforcequietd   c               @   s`   e Zd Zdd Z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r\dd ZdS )
TestInlinec             C   sJ   t |  tt| _tjdr0tjdd}ntj	dd}|| jd< d S )NZTEST_TMPr   Zcython_inline_)prefixlib_dir)
r   setUpdict	test_kwdsospathisdirjointempfileZmkdtemp)selfr	    r   <lib/python3.7/site-packages/Cython/Build/Tests/TestInline.pyr
      s    

zTestInline.setUpc             C   s   |  td| jd d S )N
return 1+2   )r   )assertEqualsr   r   )r   r   r   r   test_simple   s    zTestInline.test_simplec             C   s"   |  tddg d| jd d S )NZ
            cimport cython
            return cython.typeof(a), cython.typeof(b)
        g      ?)ab)Zdoublezlist object)r   )r   r   r   )r   r   r   r   
test_types   s    zTestInline.test_typesc             C   s    d}d}|  td| jd d S )N      
return a+br   )r   )r   r   r   )r   r   r   r   r   r   test_locals#   s    zTestInline.test_localsc             C   s   |  td| jtd  d S )Nreturn global_value + 1r   )r!   )r   r   r   global_value)r   r   r   r   test_globals(   s    zTestInline.test_globalsc             C   s"   |  td| jtddg d d S )NQ
            a = 1
            cdef double b = 2
            cdef c = []
        r   g       @)r   r   c)r$   )r   r   r   r   )r   r   r   r   test_no_return+   s    zTestInline.test_no_returnc             C   s$   t d| jd }| |dd d S )Ndef foo(x): return x * xfoo   1   )r'   )r   r   r   )r   r(   r   r   r   test_def_node2   s    zTestInline.test_def_nodec             C   s0   dd l }tdddi| j}| t|t d S )Nr   l
        b = cy.declare(float, a)
        c = cy.declare(cy.pointer(cy.float), &b)
        return b
        r   r   )r,   )Zcythonr   r   r   typefloat)r   Zcyr   r   r   r   	test_pure6   s    zTestInline.test_purec             C   s$   |  tddddgddidd d S )	Nzreturn sum(x)r   r   r   ZboundscheckF)xZcython_compiler_directives   )ZassertEqualr   )r   r   r   r   test_compiler_directives?   s
    
z#TestInline.test_compiler_directivesc             C   sJ   dd l }|d}d|d< | t|d | td	d|i| jd d S )
Nr   )
      r3   )r   r   z&numpy.ndarray[numpy.float64_t, ndim=2]return a[0,0]r   g      $@)r5   )numpyZndarrayr   r   r   r   )r   r6   r   r   r   r   
test_numpyI   s
    
zTestInline.test_numpyN)__name__
__module____qualname__r
   r   r   r    r#   r&   r+   r/   r2   	has_numpyr7   r   r   r   r   r      s   		r   )r   r   ZCython.Shadowr   ZCython.Build.Inliner   ZCython.TestUtilsr   r6   r;   r   r   r"   r   r   r   r   r   <module>   s   
