o
    8ήc+                     @   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	 d dl
mZ d dlmZmZmZmZmZ d dlmZ d dlm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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+d, Z'd-d. Z(G d/d0 d0eeZ)G d1d2 d2eejZ*G d3d4 d4eejZ+G d5d6 d6eeZ,G d7d8 d8eeZ-G d9d: d:eeZ.e/d;kre0  dS dS )<    N)compile_isolated)
from_dtype)njittypeof)types)TestCaseCompilationCacheMemoryLeakMixintagskip_parfors_unsupported)TypingError)jitclassc                 C      | j S Ndtypea r   B/tmp/pip-target-vg8gfxp4/lib/python/numba/tests/test_array_attr.pyarray_dtype      r   c                 C   s   |  |jS r   )viewr   )r   br   r   r   	use_dtype   s   r   c                 C   r   r   )itemsizer   r   r   r   array_itemsize   r   r   c                 C   
   | j | S r   )shaper   ir   r   r   array_shape      
r!   c                 C   r   r   )stridesr   r   r   r   array_strides   r"   r$   c                 C   r   r   )ndimr   r   r   r   
array_ndim"   r   r&   c                 C   r   r   sizer   r   r   r   
array_size&   r   r)   c                 C      | j jS r   )flags
contiguousr   r   r   r   array_flags_contiguous*      r-   c                 C   r*   r   )r+   c_contiguousr   r   r   r   array_flags_c_contiguous-   r.   r0   c                 C   r*   r   )r+   f_contiguousr   r   r   r   array_flags_f_contiguous0   r.   r2   c                 C   r*   r   )fr   r   r   r   r   nested_array_itemsize4   r.   r4   c                 C   r*   r   )r3   r   r   r   r   r   nested_array_shape8   r.   r5   c                 C   r*   r   )r3   r#   r   r   r   r   nested_array_strides<   r.   r6   c                 C   r*   r   )r3   r%   r   r   r   r   nested_array_ndim@   r.   r7   c                 C   r*   r   )r3   r(   r   r   r   r   nested_array_sizeD   r.   r8   c                 C   s   | | }|j S r   r'   )bufr    slicedr   r   r   size_after_slicing_usecaseH   s   r;   c                 C   r*   r   )ctypesdataarrr   r   r   array_ctypes_dataN   r.   r@   c                 C   r   r   )realr>   r   r   r   
array_realR   r   rB   c                 C   r   r   )imagr>   r   r   r   
array_imagV   r   rD   c                       s   e Zd Z f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d Zdd Zdd Zdd Zdd Zdd Z  ZS )TestArrayAttrc                    s4   t t|   t | _tjdtjddd| _	d S )N   r         )
superrE   setUpr   ccachenparangeint32reshaper   self	__class__r   r   rJ   \   s   zTestArrayAttr.setUpc                 C   sX   t |}| ||f}||}| ||| | ||jddf}| ||| d S )NA)layout)r   	get_cfuncassertPreciseEqualcopy)rQ   pyfuncr?   arytycfuncexpectedr   r   r   check_unarya   s   zTestArrayAttr.check_unaryc                 C   s   |  || j |  || jj |  || jd d d  tdgd}|  || td}|  || |  ||d d S )N   *   r   r   )   r   r^   )r]   r   TrL   arrayrO   zeros)rQ   rY   r?   r   r   r   check_unary_with_arraysj   s   
z%TestArrayAttr.check_unary_with_arraysc                 C   s   | j ||}|jS r   )rK   compileentry_point)rQ   rY   argspeccresr   r   r   rV   x      zTestArrayAttr.get_cfuncc                 C   Z   t }| |tjd d d d f tjf}t| jjD ]}| || j||| j| qd S r   )r!   rV   r   rN   ranger   r%   assertEqualrQ   rY   r[   r    r   r   r   
test_shape|   
   $zTestArrayAttr.test_shapec                 C   rj   r   )r$   rV   r   rN   rk   r   r%   rl   rm   r   r   r   test_strides   ro   zTestArrayAttr.test_stridesc                 C      |  t d S r   )rd   r&   rP   r   r   r   	test_ndim      zTestArrayAttr.test_ndimc                 C   rq   r   )rd   r)   rP   r   r   r   	test_size   rs   zTestArrayAttr.test_sizec                 C   rq   r   )rd   r   rP   r   r   r   test_itemsize   rs   zTestArrayAttr.test_itemsizec                 C   sJ   t }| || j tdtjfdtjfg}tjd|d}| || d S )NxyrG   r   )r   r]   r   rL   r   int8rc   )rQ   rY   r   r?   r   r   r   
test_dtype   s
   zTestArrayAttr.test_dtypec                 C   sR   t jdt jd}t}| |t| jt|f}|| j|}| || j|| d S )Nr`   r   )rL   emptyint16r   rV   r   r   rW   )rQ   r   rY   r[   r\   r   r   r   test_use_dtype   s
   zTestArrayAttr.test_use_dtypec                 C   rq   r   )rd   r-   rP   r   r   r   test_flags_contiguous   rs   z#TestArrayAttr.test_flags_contiguousc                 C   rq   r   )rd   r0   rP   r   r   r   test_flags_c_contiguous   rs   z%TestArrayAttr.test_flags_c_contiguousc                 C   rq   r   )rd   r2   rP   r   r   r   test_flags_f_contiguous   rs   z%TestArrayAttr.test_flags_f_contiguous)__name__
__module____qualname__rJ   r]   rd   rV   rn   rp   rr   rt   ru   ry   r|   r}   r~   r   __classcell__r   r   rR   r   rE   Z   s    	rE   c                       sL   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	  Z
S )TestNestedArrayAttrc                    sN   t t|   tdtjfdtjdfg}td|d | _t| jj| _	d S )Nr   r3   )r^   rH   r`   r   )
rI   r   rJ   rL   r   rN   recarrayr   r   nbrecordrQ   r   rR   r   r   rJ      s   zTestNestedArrayAttr.setUpc                 C   s   t || jf}|jS r   )r   r   rf   )rQ   rY   rh   r   r   r   rV      ri   zTestNestedArrayAttr.get_cfuncc                 C   *   t }| |}| || j|| j d S r   )r5   rV   rl   r   rQ   rY   r[   r   r   r   rn         
zTestNestedArrayAttr.test_shapec                 C   r   r   )r6   rV   rl   r   r   r   r   r   rp      r   z TestNestedArrayAttr.test_stridesc                 C   r   r   )r7   rV   rl   r   r   r   r   r   rr      r   zTestNestedArrayAttr.test_ndimc                 C   r   r   )r8   rV   rl   r   r   r   r   r   rt      r   zTestNestedArrayAttr.test_sizec                 C   r   r   )r4   rV   rl   r   r   r   r   r   ru      r   z!TestNestedArrayAttr.test_itemsize)r   r   r   rJ   rV   rn   rp   rr   rt   ru   r   r   r   rR   r   r      s    r   c                   @   s   e Zd Zdd ZdS )TestSlicedArrayAttrc                 C   s   t }t|}tddd}t|jd D ]}| |||||| qtdddd}t|jd D ]}| |||||| q6d S )N
   r^   rH   r         )r;   r   rL   rM   rO   rk   r   rl   )rQ   rY   r[   r?   r    r   r   r   test_size_after_slicing   s   z+TestSlicedArrayAttr.test_size_after_slicingN)r   r   r   r   r   r   r   r   r      s    r   c                   @   s$   e Zd ZdZdd Zedd ZdS )TestArrayCTypesFc                 C   s.   t }t|}td}| |||| d S )Nr   )r@   r   rL   rM   rl   )rQ   rY   r[   r?   r   r   r   test_array_ctypes_data   s   
z&TestArrayCTypes.test_array_ctypes_datac           	         s   ddl m}m}m}m m} ||||| fddtddfdd}d	}||\}}| | | |t	
|| d  d S )
Nr   )	CFUNCTYPEc_void_pc_int32c_doublec_boolc                    sv   z, |  | } d  |}tj||tjd}tjd|tjd}||j d |d< W dS    dd l}|  Y dS )Nr`   )bufferr   r   TF)from_addressrL   ndarrayfloat64r(   	tracebackprint_exception)inptrr(   outptrinbufoutbufr   r   r   )r   r   r   callback   s   zITestArrayCTypes.test_array_ctypes_ref_error_in_parallel.<locals>.callbackT)parallelc                    s<   t | }t d}|j}|j} |j| |j}||d fS )Nr`   r   )rL   onesrz   r<   r=   )r(   r?   outinctoutctstatus)r   r   r   foo  s   

zDTestArrayCTypes.test_array_ctypes_ref_error_in_parallel.<locals>.foor   )r<   r   r   r   r   r   r   
assertTruerW   rL   r   )	rQ   r   r   r   r   r   r(   r   gotr   )r   r   r   'test_array_ctypes_ref_error_in_parallel   s   

z7TestArrayCTypes.test_array_ctypes_ref_error_in_parallelN)r   r   r   _numba_parallel_test_r   r   r   r   r   r   r   r      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 )TestRealImagAttrc                 C   s\   t |}d}t|t|d  }| |||| |dd}| |||| d S )Nr   y              $@r^   rH   )r   rL   rM   rW   rO   )rQ   rY   r[   r(   r?   r   r   r   check_complex  s   zTestRealImagAttr.check_complexc                 C   rq   r   )r   rB   rP   r   r   r   test_complex_real  rs   z"TestRealImagAttr.test_complex_realc                 C   rq   r   )r   rD   rP   r   r   r   test_complex_imag!  rs   z"TestRealImagAttr.test_complex_imagc                 C   s   t }t|}d}tj||d}| |||| |dd}| |||| | |j||j | |j||j ||}| |d d d|d< | |d d d S )Nr   r   r^   rH   )r   r   )	rB   r   rL   rM   rW   rO   rl   r=   assertNotEqual)rQ   r   rY   r[   r(   r?   rA   r   r   r   check_number_real$  s   z"TestRealImagAttr.check_number_realc                 C   (   t jt jt jt jfD ]}| | q
dS )z5
        Testing .real of non-complex dtypes
        N)rL   uint8rN   float32r   r   r   r   r   r   test_number_real7     z!TestRealImagAttr.test_number_realc                 C   s   t }t|}d}tj||d}| |||| |dd}| |||| | || t|  ||}| 	t
}d|d< W d    n1 sPw   Y  | dt|j d S )Nr   r   r^   rH   r`   r   z#assignment destination is read-only)rD   r   rL   rM   rW   rO   rl   tolist
zeros_likeassertRaises
ValueErrorstr	exception)rQ   r   rY   r[   r(   r?   rC   raisesr   r   r   check_number_imag>  s   
z"TestRealImagAttr.check_number_imagc                 C   r   )z5
        Testing .imag of non-complex dtypes
        N)rL   r   rN   r   r   r   r   r   r   r   test_number_imagQ  r   z!TestRealImagAttr.test_number_imagc                 C   s  t dt jfdt jfg}t jd|d}t j|j|d< t j|jd |d< | t|| | 	t
| t |  tt}tt
}| t}|| W d    n1 s[w   Y  | dt|j | t}|| W d    n1 s}w   Y  | dt|j d S )NrA   rC   r   r   y        ?z&cannot access .real of array of Recordz&cannot access .imag of array of Record)rL   r   r   	complex64rc   randomr(   assertIsrB   rl   rD   r   r   r   r   r   assertInr   r   )rQ   rectypr?   jit_array_realjit_array_imagr   r   r   r   test_record_realX  s(   

z!TestRealImagAttr.test_record_realN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s    
r   c                   @   s   e Zd ZdZdd ZdS )TestJitclassFlagsSegfaultz@Regression test for: https://github.com/numba/numba/issues/4775 c                 C   s4   t t G dd dt}| }|td d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z)TestJitclassFlagsSegfault.test.<locals>.Bc                 S   s   d S r   r   rP   r   r   r   __init__{  s   z2TestJitclassFlagsSegfault.test.<locals>.B.__init__c                 S   s
   |j  d S r   )r+   )rQ   Xr   r   r   r   ~  r"   z-TestJitclassFlagsSegfault.test.<locals>.B.fooN)r   r   r   r   r   r   r   r   r   Bx  s    r   rG   )r   dictobjectr   rL   r   )rQ   r   Zr   r   r   testv  s   zTestJitclassFlagsSegfault.testN)r   r   r   __doc__r   r   r   r   r   r   s  s    r   __main__)1numpyrL   unittestnumba.core.compilerr   numba.np.numpy_supportr   numbar   r   
numba.corer   numba.tests.supportr   r   r	   r
   r   numba.core.errorsr   numba.experimentalr   r   r   r   r!   r$   r&   r)   r-   r0   r2   r4   r5   r6   r7   r8   r;   r@   rB   rD   rE   r   r   r   r   r   r   mainr   r   r   r   <module>   sJ    R*1`