U
    ,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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re  dS )    N)compile_isolatedDEFAULT_FLAGS)SerialMixin)typeofcudanjit)float64)MemoryLeakMixinoverride_env_config)configTc                 C   s   | d S N
    ar   r   @/tmp/pip-unpacked-wheel-eu7e0c37/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                   @   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_boundscheck2   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      r1   )r   r'   r(   r)   r   r   dtyper   r   r*   r4   r5   r   r   r   test_fancy_indexing_boundscheckN   s(    

z6TestBoundsCheckNoError.test_fancy_indexing_boundscheckc                 C   s   | j t_d S r   r    r   r   r!   r   r   r   tearDownk   s    zTestBoundsCheckNoError.tearDownN__name__
__module____qualname__r#   r.   r:   r>   r@   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#   p   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r9   c                   S   s   d S r   r   r   r   r   r   funcw   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   r3   zerosr   ZENABLE_CUDASIM)r"   rG   rH   rL   r   r   r   r   r   test_no_cuda_boundscheckt   s    





z.TestNoCudaBoundsCheck.test_no_cuda_boundscheckc                 C   s   | j t_d S r   r?   r!   r   r   r   r@      s    zTestNoCudaBoundsCheck.tearDownN)
rB   rC   rD   r#   unittestZskipIfr   Zis_availablerO   r@   r   r   r   r   rE   o   s   
rE   c                   @   s4   e Z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   r4   r*   )r"   r   r+   r8   r9   r   r   r   r.      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 r/   )
r   r3   r(   r)   r   r   r   r   r4   r*   r"   r   r6   r+   r7   r8   r9   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   r4   r*   rR   r   r   r   r>      s    

z4TestBoundsCheckError.test_fancy_indexing_boundscheckc                 C   s   | j t_d S r   r?   r!   r   r   r   r@      s    zTestBoundsCheckError.tearDownNrA   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 rK   r   r   r   r   r   default   s    z4TestBoundsEnvironmentVariable.setUp.<locals>.defaultFrF   c                 S   s   | d S rK   r   rT   r   r   r   off   s    z0TestBoundsEnvironmentVariable.setUp.<locals>.offTc                 S   s   | d S rK   r   rT   r   r   r   on   s    z/TestBoundsEnvironmentVariable.setUp.<locals>.on)r   r   r    r   rU   rV   rW   )r"   rU   rV   rW   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 )NrI    r   )r
   r   r   rU   rV   r(   r)   rW   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 )NrI   rJ   r   )r
   r   r   r(   r)   rU   rV   rW   rY   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 )NrI   0r   )r
   r   r   rU   rV   rW   rY   r   r   r   test_boundscheck_disabled   s
    

z7TestBoundsEnvironmentVariable.test_boundscheck_disabledc                 C   s   | j t_d S r   r?   r!   r   r   r   r@     s    z&TestBoundsEnvironmentVariable.tearDownN)rB   rC   rD   r#   rZ   r[   r]   r@   r   r   r   r   rS      s
   		rS   __main__) Z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   copyr4   r9   r   r   r   ZTestCaser   rE   rQ   rS   rB   mainr   r   r   r   <module>   s$   R$@6