U
    iâËd %  ã                   @   sö   d dl Zd dlmZmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZmZ d dlmZ d dlZe ¡ Zde_d	d
„ Zdd„ Zdd„ Zdd„ ZG dd„ deejƒZG dd„ deejƒZG dd„ dejƒZG dd„ dejƒZedkròe  ¡  dS )é    N)Úcompile_isolatedÚDEFAULT_FLAGS)ÚSerialMixin)ÚtypeofÚcudaÚnjit)Úfloat64)ÚMemoryLeakMixinÚoverride_env_config)ÚconfigTc                 C   s   | d S ©Né
   © ©Úar   r   úU/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_boundscheck.pyÚbasic_array_access   s    r   c                 C   s   | dd …df S r   r   r   r   r   r   Úslice_array_access   s    r   c                 C   s   t  dddg¡}| | S )Né   é   é   ©ÚnpÚarray©Úxr   r   r   r   Úfancy_array_access   s    r   c                 C   s   t  dddg¡}d| |< | S )Nr   r   r   r   r   r   r   r   r   Úfancy_array_modify   s    r   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestBoundsCheckNoErrorc                 C   s   t j| _d t _d S ©N©r   ÚBOUNDSCHECKÚold_boundscheck©Úselfr   r   r   ÚsetUp$   s    zTestBoundsCheckNoError.setUpc              	   C   sR   t  d¡}|  t¡� t|ƒ W 5 Q R X t|ƒ}tt|gtd�}|j}||ƒ d S ©Né   )Úflags)	r   ÚarangeÚassertRaisesÚ
IndexErrorr   r   r   r   Úentry_point)r$   r   ÚatÚc_noboundscheckÚnoboundscheckr   r   r   Útest_basic_array_boundscheck(   s    
ÿz3TestBoundsCheckNoError.test_basic_array_boundscheckc           	   	   C   sš   t  d¡}t  d¡}|  t¡� t|ƒ W 5 Q R X t|ƒ t|ƒ}td d … }tt|g|td�}|j	}tt|g|t
d�}|j	}||ƒ ||ƒ ||ƒ d S ©N)r'   r'   )r'   é   ©Úreturn_typer(   )r   Úonesr*   r+   r   r   r   r   r   r,   ÚBOUNDSCHECK_FLAGS©	r$   r   Úbr-   Úrtr.   r/   Úc_boundscheckÚboundscheckr   r   r   Útest_slice_array_boundscheck8   s(    

þþz3TestBoundsCheckNoError.test_slice_array_boundscheckc           	   	   C   sœ   t  d¡}t  d¡}|  t¡� t|ƒ W 5 Q R X t|ƒ t|ƒ}|jd d … }tt|g|td�}|j	}tt|g|t
d�}|j	}||ƒ ||ƒ ||ƒ d S ©Nr   é   r3   )r   r)   r*   r+   r   r   Údtyper   r   r,   r6   r7   r   r   r   Útest_fancy_indexing_boundscheckT   s(    

þþz6TestBoundsCheckNoError.test_fancy_indexing_boundscheckc                 C   s   | j t_d S r   ©r"   r   r!   r#   r   r   r   ÚtearDownq   s    zTestBoundsCheckNoError.tearDownN)Ú__name__Ú
__module__Ú__qualname__r%   r0   r<   r@   rB   r   r   r   r   r   #   s
   r   c                   @   s6   e Zd Zdd„ Ze e ¡  d¡dd„ ƒZdd„ Z	dS )	ÚTestNoCudaBoundsCheckc                 C   s   t j| _d t _d S r   r    r#   r   r   r   r%   v   s    zTestNoCudaBoundsCheck.setUpzNO CUDAc              	   C   sŽ   |   t¡� tjdd�dd„ ƒ}W 5 Q R X tjdd�dd„ ƒ}tdd	ƒ�< tjd
d„ ƒ}t d¡}t d¡}tj	s€|d ||ƒ W 5 Q R X d S )NT©r;   c                   S   s   d S r   r   r   r   r   r   Úfunc}   s    z<TestNoCudaBoundsCheck.test_no_cuda_boundscheck.<locals>.funcFc                   S   s   d S r   r   r   r   r   r   Úfunc3ƒ   s    z=TestNoCudaBoundsCheck.test_no_cuda_boundscheck.<locals>.func3ÚNUMBA_BOUNDSCHECKÚ1c                 S   s   | d |d< d S ©Nr   r   r   r   r   r   Úfunc2ˆ   s    z=TestNoCudaBoundsCheck.test_no_cuda_boundscheck.<locals>.func2)r   )r   r   )
r*   ÚNotImplementedErrorr   Zjitr
   r   r5   Zzerosr   ZENABLE_CUDASIM)r$   rH   rI   rM   r   r   r   r   r   Útest_no_cuda_boundscheckz   s    





z.TestNoCudaBoundsCheck.test_no_cuda_boundscheckc                 C   s   | j t_d S r   rA   r#   r   r   r   rB   “   s    zTestNoCudaBoundsCheck.tearDownN)
rC   rD   rE   r%   ÚunittestZskipIfr   Zis_availablerO   rB   r   r   r   r   rF   u   s   
rF   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 )ÚTestBoundsCheckErrorc                 C   s   t j| _d t _d S r   r    r#   r   r   r   r%   š   s    zTestBoundsCheckError.setUpc              	   C   sh   t  d¡}|  t¡� t|ƒ W 5 Q R X t|ƒ}tt|gtd�}|j}|  t¡� ||ƒ W 5 Q R X d S r&   )	r   r)   r*   r+   r   r   r   r6   r,   )r$   r   r-   r:   r;   r   r   r   r0   ž   s    
ÿz1TestBoundsCheckError.test_basic_array_boundscheckc              	   C   sˆ   t  d¡}t  d¡}|  t¡� t|ƒ W 5 Q R X t|ƒ t|ƒ}td d … }tt|g|td�}|j	}|  t¡� ||ƒ W 5 Q R X d S r1   )
r   r5   r*   r+   r   r   r   r   r6   r,   ©r$   r   r8   r-   r9   r:   r;   r   r   r   r<   ®   s    

þz1TestBoundsCheckError.test_slice_array_boundscheckc              	   C   sŠ   t  d¡}t  d¡}|  t¡� t|ƒ W 5 Q R X t|ƒ t|ƒ}|jd d … }tt|g|td�}|j	}|  t¡� ||ƒ W 5 Q R X d S r=   )
r   r)   r*   r+   r   r   r?   r   r6   r,   rR   r   r   r   r@   Á   s    

þz4TestBoundsCheckError.test_fancy_indexing_boundscheckc              	   C   sŠ   t  d¡}t  d¡}|  t¡� t|ƒ W 5 Q R X t|ƒ t|ƒ}|jd d … }tt|g|td�}|j	}|  t¡� ||ƒ W 5 Q R X d S r=   )
r   r)   r*   r+   r   r   r?   r   r6   r,   rR   r   r   r   Ú1test_fancy_indexing_with_modification_boundscheckÕ   s    

þzFTestBoundsCheckError.test_fancy_indexing_with_modification_boundscheckc                 C   s   | j t_d S r   rA   r#   r   r   r   rB   é   s    zTestBoundsCheckError.tearDownN)	rC   rD   rE   r%   r0   r<   r@   rS   rB   r   r   r   r   rQ   ™   s   rQ   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestBoundsEnvironmentVariablec                 C   sT   t j| _d t _tdd„ ƒ}tdd�dd„ ƒ}tdd�dd	„ ƒ}|| _|| _|| _d S )
Nc                 S   s   | d S rL   r   ©r   r   r   r   Údefaultò   s    z4TestBoundsEnvironmentVariable.setUp.<locals>.defaultFrG   c                 S   s   | d S rL   r   rU   r   r   r   Úoffö   s    z0TestBoundsEnvironmentVariable.setUp.<locals>.offTc                 S   s   | d S rL   r   rU   r   r   r   Úonú   s    z/TestBoundsEnvironmentVariable.setUp.<locals>.on)r   r!   r"   r   rV   rW   rX   )r$   rV   rW   rX   r   r   r   r%   î   s    


z#TestBoundsEnvironmentVariable.setUpc              
   C   sZ   t ddƒ�F t dg¡}|  |¡ |  |¡ |  t¡� |  |¡ W 5 Q R X W 5 Q R X d S )NrJ   Ú r   )r
   r   r   rV   rW   r*   r+   rX   ©r$   r   r   r   r   Útest_boundscheck_unset  s    

z4TestBoundsEnvironmentVariable.test_boundscheck_unsetc              
   C   sZ   t ddƒ�F t dg¡}|  t¡�$ |  |¡ |  |¡ |  |¡ W 5 Q R X W 5 Q R X d S )NrJ   rK   r   )r
   r   r   r*   r+   rV   rW   rX   rZ   r   r   r   Útest_boundscheck_enabled  s    

z6TestBoundsEnvironmentVariable.test_boundscheck_enabledc              	   C   sD   t ddƒ�0 t dg¡}|  |¡ |  |¡ |  |¡ W 5 Q R X d S )NrJ   Ú0r   )r
   r   r   rV   rW   rX   rZ   r   r   r   Útest_boundscheck_disabled  s
    

z7TestBoundsEnvironmentVariable.test_boundscheck_disabledc                 C   s   | j t_d S r   rA   r#   r   r   r   rB     s    z&TestBoundsEnvironmentVariable.tearDownN)rC   rD   rE   r%   r[   r\   r^   rB   r   r   r   r   rT   í   s
   		rT   Ú__main__)!Únumpyr   Znumba.core.compilerr   r   Znumba.cuda.testingr   Znumbar   r   r   Znumba.core.typesr   Znumba.tests.supportr	   r
   Z
numba.corer   rP   Úcopyr6   r;   r   r   r   r   ZTestCaser   rF   rQ   rT   rC   Úmainr   r   r   r   Ú<module>   s&   R$T6