U
    ,dv                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlZd dlmZ dd Zdd	 Zd
d Zdd Zdd ZG dd de
Zedkre  dS )    N)types)compile_isolated)captured_stdouttagTestCase)numpy_supportc                 C   s~   | j }|j }t|D ]d}| | }t|D ].}|| }| j|j|j |j |j 7  _q(| j|j7  _| j|j8  _qdS )zbBase on https://github.com/numba/numba/issues/370

    Modified to add test-able side effect.
    N)sizerangerowpcol)Zarr1Zarr2Zn1Zn2i1st1i2st2 r   F/tmp/pip-unpacked-wheel-eu7e0c37/numba/tests/test_recarray_usecases.pyusecase1   s    $r   c                 C   s,   t |D ]}| | }t|j|j|j qdS )zD
    Base on test1 of https://github.com/numba/numba/issues/381
    Nr	   printf1s1f2xNkyr   r   r   usecase2   s    r   c                 C   s0   t |D ]"}t| j| | j| | j|  qdS )zD
    Base on test2 of https://github.com/numba/numba/issues/381
    Nr   r   r   r   r   r   r   usecase3'   s    r    c                 C   s0   t |D ]"}| | }t|j| j| |j qdS )zD
    Base on test3 of https://github.com/numba/numba/issues/381
    Nr   r   r   r   r   usecase4/   s    r!   c                 C   s0   t |D ]"}t| | j| j| | | j qdS )zD
    Base on test4 of https://github.com/numba/numba/issues/381
    Nr   r   r   r   r   usecase58   s    r"   c                   @   sL   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S )TestRecordUsecasec                 C   s*   dddg}t || _t j|dd| _d S )N)r   <f8)r   |S3)r   r$   T)Zalign)npdtypeunaligned_dtypealigned_dtype)selffieldsr   r   r   setUpB   s    
zTestRecordUsecase.setUpc                 C   s0  t }tdtjfdtjfdtjfg}t|}t||d d  |d d  f}|j}tjd|d}tjd|d}t	|j
d |_t	|j
d |_t	|j
d |_t	|j
d |_t	|j
d |_t	|j
d |_| }| }	| }
|	 }|||	 ||
| tj||
 tj|	| d S )Nr   r
   r      r'      )r   r&   r'   Zfloat64r   
from_dtyper   entry_pointrecarrayaranger   r   r
   r   copyZtestingZassert_equal)r*   pyfuncZmystruct_dtZmystructcrescfuncr   r   Zexpect1Zexpect2Zgot1Zgot2r   r   r   test_usecase1G   s0    


zTestRecordUsecase.test_usecase1c                 C   sP   d}t j||d}t ||_t d|d |_t jdg|jd  dd|_|S )N   r.      abcr   r%   )r&   r2   r3   r   r   arrayshaper   )r*   r'   r   ar   r   r   _setup_usecase2to5j   s    z$TestRecordUsecase._setup_usecase2to5c           	   	   C   s   |  |}t|}t||d d  tjf}|j}t  ||t| t	j
 }W 5 Q R X t  ||t| t	j
 }W 5 Q R X | || d S N)r?   r   r0   r   r   Zintpr1   r   lensysstdoutgetvalueassertEqual)	r*   r5   r'   r<   Zrecord_typer6   r7   expectgotr   r   r   _test_usecase2to5r   s    

z#TestRecordUsecase._test_usecase2to5c                 C   s    |  t| j |  t| j d S r@   )rH   r   r(   r)   r*   r   r   r   test_usecase2   s    zTestRecordUsecase.test_usecase2c                 C   s    |  t| j |  t| j d S r@   )rH   r    r(   r)   rI   r   r   r   test_usecase3   s    zTestRecordUsecase.test_usecase3c                 C   s    |  t| j |  t| j d S r@   )rH   r!   r(   r)   rI   r   r   r   test_usecase4   s    zTestRecordUsecase.test_usecase4c                 C   s    |  t| j |  t| j d S r@   )rH   r"   r(   r)   rI   r   r   r   test_usecase5   s    zTestRecordUsecase.test_usecase5N)__name__
__module____qualname__r,   r8   r?   rH   rJ   rK   rL   rM   r   r   r   r   r#   @   s   #r#   __main__)rB   Znumpyr&   Z
numba.corer   Znumba.core.compilerr   Znumba.tests.supportr   r   r   ZunittestZnumba.npr   r   r   r    r!   r"   r#   rN   mainr   r   r   r   <module>   s   		S