o
    8ήc                     @   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rBe  dS dS )    N)njit	vectorize)MemoryLeakMixin)dufuncc                 C   s   | | S N a0a1r   r   G/tmp/pip-target-vg8gfxp4/lib/python/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)nopython)targetoptions)r   DUFuncdict)selfpyfuncr   r   r   nopython_dufunc   s   zTestDUFunc.nopython_dufuncc                 C   s   |  t}| |j d|_| |j | t d|_W d    n1 s'w   Y  | t |t	dddt	ddd W d    d S 1 sLw   Y  d S )NTFr      
      )
r   r   assertFalse_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
   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'   r0   r1   r2   r3   r4   r5   r6   r7   r8   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#   ninnoutnargsntypestypesidentitylenr    r   r   r   test_ufunc_propsM   s   

zTestDUFunc.test_ufunc_propsN)	__name__
__module____qualname__r   r"   r$   r9   r;   rC   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rebuiltr   r   fooe   s   z%TestDUFuncPickling.check.<locals>.fooiA  )pickledumpsloadsr#   assertIsInstancer   )r   identresult_typebufrrL   r   rJ   r   check[   s   

zTestDUFuncPickling.checkc                 C   s$   t dd }| j|ttjfd d S )Nc                 S      | S r   r   x1r   r   r   rQ   n      z3TestDUFuncPickling.test_unrestricted.<locals>.identrR   )r   rU   intr   integerr   rQ   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   rV   r   r   rW   r   r   r   rQ   u   rY   z1TestDUFuncPickling.test_restricted.<locals>.identrZ   )r   rU   floatr]   r   r   r   test_restrictedt   s   
z"TestDUFuncPickling.test_restrictedN)rD   rE   rF   rU   r^   r`   r   r   r   r   rG   Z   s    rG   __main__)rM   numpyr   numbar   r   numba.tests.supportr   unittestnumba.np.ufuncr   r   TestCaser   rG   rD   mainr   r   r   r   <module>   s    K"