U
    ,d                     @   s   d dl Z d dlZd dlmZmZ d dlmZ d dlZd dl	m
Z
 dd ZG dd deejZG d	d
 d
eejZedkre  dS )    N)njit	vectorize)MemoryLeakMixin)dufuncc                 C   s   | | S N a0a1r   r   D/tmp/pip-unpacked-wheel-eu7e0c37/numba/tests/npyufunc/test_dufunc.pypyuadd   s    r   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S )
TestDUFuncc                 C   s   t j|tdddS )NT)Znopython)Ztargetoptions)r   ZDUFuncdict)selfZpyfuncr   r   r   nopython_dufunc   s    zTestDUFunc.nopython_dufuncc              	   C   s|   |  t}| |j d|_| |j | t d|_W 5 Q R X | t$ |t	dddt	ddd W 5 Q R X d S )NTFr      
      )
r   r   ZassertFalseZ_frozen
assertTrueassertRaises
ValueError	TypeErrornplinspacer   duaddr   r   r   test_frozen   s    
zTestDUFunc.test_frozenc                 C   s&   |  t}| tdd|dd d S )Nr   r   )r   r   assertEqualr   r   r   r   test_scalar   s    
zTestDUFunc.test_scalarc                    s   |  t t fdd}tddd}|d d }|dd  }td}|||| tj|| | |d}|d}td}|||| tj|| | |d d }	td}
|||	|
 tj||	 |
 d S )	Nc                    s    | || d S r   r   )r	   r
   Zo0r   r   r   npmadd%   s    z(TestDUFunc.test_npm_call.<locals>.npmaddr   ffffff?   r   r      r$   )	r   r   r   r   r   zerostestingassert_array_equalreshape)r   r    XX0X1out0Y0Y1out1Y2out2r   r   r   test_npm_call"   s$    





zTestDUFunc.test_npm_callc                    s   |  t t fdd}tddd}|d d }|dd  }|||}tj|| | |d}|d}|||}tj|| | |d d }	|||	}
tj||	 |
 |d	d
}| |d d S )Nc                    s
    | |S r   r   r   r   r   r   r    ;   s    z8TestDUFunc.test_npm_call_implicit_output.<locals>.npmaddr   r!   r"   r   r#   r$   g      ?g       @g      @)	r   r   r   r   r   r&   r'   r(   r   )r   r    r)   r*   r+   r,   r-   r.   r/   r0   r1   Zout3r   r   r   test_npm_call_implicit_output8   s"    






z(TestDUFunc.test_npm_call_implicit_outputc                 C   s   |  t}| |jd | |jd | |j|j|j  | |jd | |jg  | |jd  |dd | |jd | |jt	|j d S )Nr   r   r   )
r   r   r   ZninZnoutnargsZntypestypesidentitylenr   r   r   r   test_ufunc_propsM   s    

zTestDUFunc.test_ufunc_propsN)	__name__
__module____qualname__r   r   r   r2   r3   r8   r   r   r   r   r      s   
r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestDUFuncPicklingc                    sh   t |}t |  d}| d| | || t fdd}|d}| d| | || d S )N{   c                    s    | S r   r   )xZrebuiltr   r   fooe   s    z%TestDUFuncPickling.check.<locals>.fooiA  )pickledumpsloadsr   ZassertIsInstancer   )r   identresult_typebufrr@   r   r?   r   check[   s    

zTestDUFuncPickling.checkc                 C   s$   t dd }| j|ttjfd d S )Nc                 S   s   | S r   r   x1r   r   r   rD   n   s    z3TestDUFuncPickling.test_unrestricted.<locals>.identrE   )r   rH   intr   integerr   rD   r   r   r   test_unrestrictedm   s    
z$TestDUFuncPickling.test_unrestrictedc                 C   s$   t dgdd }| j|td d S )Nzfloat64(float64)c                 S   s   | S r   r   rI   r   r   r   rD   u   s    z1TestDUFuncPickling.test_restricted.<locals>.identrK   )r   rH   floatrN   r   r   r   test_restrictedt   s    
z"TestDUFuncPickling.test_restrictedN)r9   r:   r;   rH   rO   rQ   r   r   r   r   r<   Z   s   r<   __main__)rA   Znumpyr   Znumbar   r   Znumba.tests.supportr   ZunittestZnumba.np.ufuncr   r   ZTestCaser   r<   r9   mainr   r   r   r   <module>   s   K"