U
    9%e"-                     @   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(d/d0 Z)d1d2 Z*G d3d4 d4eeZ+G d5d6 d6eejZ,G d7d8 d8eejZ-G d9d: d:eeZ.G d;d< d<eeZ/G d=d> d>eeZ0e1d?kre2  dS )@    N)compile_isolated)
from_dtype)njittypeof)types)TestCaseCompilationCacheMemoryLeakMixintagskip_parfors_unsupported)TypingError)jitclassc                 C   s   | j S Ndtypea r   Z/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/tests/test_array_attr.pyarray_dtype   s    r   c                 C   s   |  |jS r   )viewr   )r   br   r   r   	use_dtype   s    r   c                 C   s   | j S r   )itemsizer   r   r   r   array_itemsize   s    r   c                 C   s   | j S r   )nbytesr   r   r   r   array_nbytes   s    r   c                 C   s
   | j | S r   )shaper   ir   r   r   array_shape   s    r    c                 C   s
   | j | S r   )stridesr   r   r   r   array_strides"   s    r"   c                 C   s   | j S r   )ndimr   r   r   r   
array_ndim&   s    r$   c                 C   s   | j S r   sizer   r   r   r   
array_size*   s    r'   c                 C   s   | j jS r   )flags
contiguousr   r   r   r   array_flags_contiguous.   s    r*   c                 C   s   | j jS r   )r(   c_contiguousr   r   r   r   array_flags_c_contiguous1   s    r,   c                 C   s   | j jS r   )r(   f_contiguousr   r   r   r   array_flags_f_contiguous4   s    r.   c                 C   s   | j jS r   )fr   r   r   r   r   nested_array_itemsize8   s    r0   c                 C   s   | j jS r   )r/   r   r   r   r   r   nested_array_nbytes;   s    r1   c                 C   s   | j jS r   )r/   r   r   r   r   r   nested_array_shape>   s    r2   c                 C   s   | j jS r   )r/   r!   r   r   r   r   nested_array_stridesB   s    r3   c                 C   s   | j jS r   )r/   r#   r   r   r   r   nested_array_ndimF   s    r4   c                 C   s   | j jS r   )r/   r&   r   r   r   r   nested_array_sizeJ   s    r5   c                 C   s   | | }|j S r   r%   )bufr   Zslicedr   r   r   size_after_slicing_usecaseN   s    r7   c                 C   s   | j jS r   )ctypesdataarrr   r   r   array_ctypes_dataT   s    r<   c                 C   s   | j S r   )realr:   r   r   r   
array_realX   s    r>   c                 C   s   | j S r   )imagr:   r   r   r   
array_imag\   s    r@   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dd Z  ZS )TestArrayAttrc                    s4   t t|   t | _tjdtjddd| _	d S )N   r         )
superrA   setUpr   ccachenparangeint32reshaper   self	__class__r   r   rF   b   s    zTestArrayAttr.setUpc                 C   sX   t |}| ||f}||}| ||| | ||jddf}| ||| d S )NA)Zlayout)r   	get_cfuncassertPreciseEqualcopy)rM   pyfuncr;   Zarytycfuncexpectedr   r   r   check_unaryg   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   rX   )rW   r   TrH   arrayrK   zeros)rM   rT   r;   r   r   r   check_unary_with_arraysp   s    
z%TestArrayAttr.check_unary_with_arraysc                 C   s   | j ||}|jS r   )rG   compileentry_point)rM   rT   Zargspeccresr   r   r   rQ   ~   s    zTestArrayAttr.get_cfuncc                 C   sZ   t }| |tjd d d d f tjf}t| jjD ] }| || j||| j| q4d S r   )r    rQ   r   rJ   ranger   r#   assertEqualrM   rT   rU   r   r   r   r   
test_shape   s    $zTestArrayAttr.test_shapec                 C   sZ   t }| |tjd d d d f tjf}t| jjD ] }| || j||| j| q4d S r   )r"   rQ   r   rJ   rb   r   r#   rc   rd   r   r   r   test_strides   s    $zTestArrayAttr.test_stridesc                 C   s   |  t d S r   )r^   r$   rL   r   r   r   	test_ndim   s    zTestArrayAttr.test_ndimc                 C   s   |  t d S r   )r^   r'   rL   r   r   r   	test_size   s    zTestArrayAttr.test_sizec                 C   s   |  t d S r   )r^   r   rL   r   r   r   test_itemsize   s    zTestArrayAttr.test_itemsizec                 C   s   |  t d S r   )r^   r   rL   r   r   r   test_nbytes   s    zTestArrayAttr.test_nbytesc                 C   sJ   t }| || j tdtjfdtjfg}tjd|d}| || d S )NxyrC   r   )r   rW   r   rH   r   Zint8r]   )rM   rT   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 )NrZ   r   )rH   emptyZint16r   rQ   r   r   rR   )rM   r   rT   rU   rV   r   r   r   test_use_dtype   s
    zTestArrayAttr.test_use_dtypec                 C   s   |  t d S r   )r^   r*   rL   r   r   r   test_flags_contiguous   s    z#TestArrayAttr.test_flags_contiguousc                 C   s   |  t d S r   )r^   r,   rL   r   r   r   test_flags_c_contiguous   s    z%TestArrayAttr.test_flags_c_contiguousc                 C   s   |  t d S r   )r^   r.   rL   r   r   r   test_flags_f_contiguous   s    z%TestArrayAttr.test_flags_f_contiguous)__name__
__module____qualname__rF   rW   r^   rQ   re   rf   rg   rh   ri   rj   rm   ro   rp   rq   rr   __classcell__r   r   rN   r   rA   `   s   	rA   c                       sT   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
  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   r/   )rX   rD   rZ   r   )
rE   rw   rF   rH   r   rJ   Zrecarrayr   r   nbrecordrM   r   rN   r   r   rF      s    zTestNestedArrayAttr.setUpc                 C   s   t || jf}|jS r   )r   rx   r`   )rM   rT   ra   r   r   r   rQ      s    zTestNestedArrayAttr.get_cfuncc                 C   s*   t }| |}| || j|| j d S r   )r2   rQ   rc   r   rM   rT   rU   r   r   r   re      s    
zTestNestedArrayAttr.test_shapec                 C   s*   t }| |}| || j|| j d S r   )r3   rQ   rc   r   rz   r   r   r   rf      s    
z TestNestedArrayAttr.test_stridesc                 C   s*   t }| |}| || j|| j d S r   )r4   rQ   rc   r   rz   r   r   r   rg      s    
zTestNestedArrayAttr.test_ndimc                 C   s*   t }| |}| || j|| j d S r   )r1   rQ   rc   r   rz   r   r   r   rj      s    
zTestNestedArrayAttr.test_nbytesc                 C   s*   t }| |}| || j|| j d S r   )r5   rQ   rc   r   rz   r   r   r   rh      s    
zTestNestedArrayAttr.test_sizec                 C   s*   t }| |}| || j|| j d S r   )r0   rQ   rc   r   rz   r   r   r   ri      s    
z!TestNestedArrayAttr.test_itemsize)rs   rt   ru   rF   rQ   re   rf   rg   rj   rh   ri   rv   r   r   rN   r   rw      s   rw   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 ]}| |||||| qld S )N
   rX   rD   r         )r7   r   rH   rI   rK   rb   r   rc   )rM   rT   rU   r;   r   r   r   r   test_size_after_slicing   s    z+TestSlicedArrayAttr.test_size_after_slicingN)rs   rt   ru   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   rH   rI   rc   )rM   rT   rU   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                    s|   zX |  | } d  |}tj||tjd}tjd|tjd}||j d |d< W dS    dd l}|  Y dS X d S )NrZ   )bufferr   r   TF)Zfrom_addressrH   Zndarrayfloat64r&   	tracebackprint_exception)Zinptrr&   ZoutptrZinbufZ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 )NrZ   r   )rH   onesrn   r8   r9   )r&   r;   outZinctZoutctstatus)r   r   r   foo  s    

zDTestArrayCTypes.test_array_ctypes_ref_error_in_parallel.<locals>.foor~   )r8   r   r   r   r   r   r   
assertTruerR   rH   r   )	rM   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)rs   rt   ru   Z_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              $@rX   rD   )r   rH   rI   rR   rK   )rM   rT   rU   r&   r;   r   r   r   check_complex#  s    zTestRealImagAttr.check_complexc                 C   s   |  t d S r   )r   r>   rL   r   r   r   test_complex_real-  s    z"TestRealImagAttr.test_complex_realc                 C   s   |  t d S r   )r   r@   rL   r   r   r   test_complex_imag0  s    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   rX   rD   )r   r   )	r>   r   rH   rI   rR   rK   rc   r9   ZassertNotEqual)rM   r   rT   rU   r&   r;   r=   r   r   r   check_number_real3  s    z"TestRealImagAttr.check_number_realc                 C   s(   t jt jt jt jfD ]}| | qdS )z5
        Testing .real of non-complex dtypes
        N)rH   uint8rJ   float32r   r   ry   r   r   r   test_number_realF  s    z!TestRealImagAttr.test_number_realc              	   C   s   t }t|}d}tj||d}| |||| |dd}| |||| | || t|  ||}| 	t
}d|d< W 5 Q R X | dt|j d S )Nr|   r   rX   rD   rZ   r   z#assignment destination is read-only)r@   r   rH   rI   rR   rK   rc   tolist
zeros_likeassertRaises
ValueErrorstr	exception)rM   r   rT   rU   r&   r;   r?   raisesr   r   r   check_number_imagM  s    z"TestRealImagAttr.check_number_imagc                 C   s(   t jt jt jt jfD ]}| | qdS )z5
        Testing .imag of non-complex dtypes
        N)rH   r   rJ   r   r   r   ry   r   r   r   test_number_imag`  s    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 5 Q R X | dt|j | t}|| W 5 Q R X | dt|j d S )Nr=   r?   r~   r   y        ?z&cannot access .real of array of Recordz&cannot access .imag of array of Record)rH   r   r   Z	complex64r]   randomr&   ZassertIsr>   rc   r@   r   r   r   r   r   ZassertInr   r   )rM   Zrectypr;   Zjit_array_realZjit_array_imagr   r   r   r   test_record_realg  s$    z!TestRealImagAttr.test_record_realN)rs   rt   ru   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   rL   r   r   r   __init__  s    z2TestJitclassFlagsSegfault.test.<locals>.B.__init__c                 S   s
   |j  d S r   )r(   )rM   Xr   r   r   r     s    z-TestJitclassFlagsSegfault.test.<locals>.B.fooN)rs   rt   ru   r   r   r   r   r   r   B  s   r   rC   )r   dictobjectr   rH   r   )rM   r   Zr   r   r   test  s    zTestJitclassFlagsSegfault.testN)rs   rt   ru   __doc__r   r   r   r   r   r     s   r   __main__)3numpyrH   ZunittestZnumba.core.compilerr   Znumba.np.numpy_supportr   Znumbar   r   Z
numba.corer   Znumba.tests.supportr   r   r	   r
   r   Znumba.core.errorsr   Znumba.experimentalr   r   r   r   r   r    r"   r$   r'   r*   r,   r.   r0   r1   r2   r3   r4   r5   r7   r<   r>   r@   rA   rw   r{   r   r   r   rs   mainr   r   r   r   <module>   sJ   U01`
