a
    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 zd dlZdZ	W n   dZ	Y n0 e
dddZdZG d	d
 d
eZdS )    N)inline)	safe_type)
CythonTestTF)forcequietd   c                   @   sp   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dd Zdd Zerld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tempfilemkdtemp)selfr
    r   m/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/Cython/Build/Tests/TestInline.pyr      s    

zTestInline.setUpc                 C   s   |  tdi | jd d S )N
return 1+2   )r   assertEqualr   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)doublezlist object)r   r   r   r   r   r   
test_types   s    zTestInline.test_typesc                 C   s$   d}d}|  tdi | jd d S )N      
return a+br   )r$   r   )r   r   r   r   r   r   test_locals#   s    zTestInline.test_localsc                 C   s    |  tdi | jtd  d S )Nreturn global_value + 1r"   )r&   )r   r   r   global_valuer   r   r   r   test_globals(   s    zTestInline.test_globalsc                 C   s&   |  tdi | 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i | 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   s,   G dd dt }tdd }| || d S )Nc                   @   s   e Zd ZdS )z'TestInline.test_class_ref.<locals>.TypeN)__name__
__module____qualname__r   r   r   r   Type7   s   r4   )objectr   r   )r   r4   tpr   r   r   test_class_ref6   s    zTestInline.test_class_refc                 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   )r8   )Zcythonr   r   r   typefloat)r   cyr   r   r   r   	test_pure<   s    zTestInline.test_purec                 C   s"   |  tdg dddidd d S )Nzreturn sum(x))r"   r#   r   ZboundscheckF)xZcython_compiler_directives   r   r   r   r   r   r   test_compiler_directivesE   s    z#TestInline.test_compiler_directivesc                 C   sD   d}|  t|ddd ddd |  t|ddd ddd d S )Nzdef f(int a, int b): return a/br#   )Zlanguage_levelf   r   g      @r?   )r   Zinline_divcoder   r   r   test_lang_versionM   s    zTestInline.test_lang_versionc                 C   sJ   dd l }|d}d|d< | t|d | td	d|i| jd d S )
Nr   )
      rD   )r   r   z&numpy.ndarray[numpy.float64_t, ndim=2]return a[0,0]r   g      $@)rF   )numpyZndarrayr   r   r   r   )r   rG   r   r   r   r   
test_numpy[   s
    
zTestInline.test_numpyN)r1   r2   r3   r   r   r!   r%   r(   r+   r0   r7   r<   r@   rC   	has_numpyrH   r   r   r   r   r      s   		r   )r   r   ZCython.Shadowr   ZCython.Build.Inliner   ZCython.TestUtilsr   rG   rI   r   r   r'   r   r   r   r   r   <module>   s   
