U
    iâË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r˜e ¡  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   ú[/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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)Ú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   ÚcopyÚ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'   r3   r4   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)rA   r   r1   r   r   Zintpr2   r   ÚlenÚsysÚstdoutÚgetvalueÚassertEqual)	r+   r7   r(   r>   Zrecord_typer8   r9   ÚexpectÚgotr   r   r   Ú_test_usecase2to5r   s    

z#TestRecordUsecase._test_usecase2to5c                 C   s    |   t| j¡ |   t| j¡ d S rB   )rJ   r   r)   r*   ©r+   r   r   r   Útest_usecase2‚   s    zTestRecordUsecase.test_usecase2c                 C   s    |   t| j¡ |   t| j¡ d S rB   )rJ   r    r)   r*   rK   r   r   r   Útest_usecase3†   s    zTestRecordUsecase.test_usecase3c                 C   s    |   t| j¡ |   t| j¡ d S rB   )rJ   r!   r)   r*   rK   r   r   r   Útest_usecase4Š   s    zTestRecordUsecase.test_usecase4c                 C   s    |   t| j¡ |   t| j¡ d S rB   )rJ   r"   r)   r*   rK   r   r   r   Útest_usecase5Ž   s    zTestRecordUsecase.test_usecase5N)Ú__name__Ú
__module__Ú__qualname__r-   r:   rA   rJ   rL   rM   rN   rO   r   r   r   r   r#   @   s   #r#   Ú__main__)rD   Únumpyr'   Z
numba.corer   Znumba.core.compilerr   Znumba.tests.supportr   r   r   ZunittestZnumba.npr   r   r   r    r!   r"   r#   rP   Úmainr   r   r   r   Ú<module>   s   		S