o
    0 i-                     @   s  d dl Zd dl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 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.d/ Z%d0d1 Z&d2d3 Z'G d4d5 d5eeZ(G d6d7 d7eejZ)G d8d9 d9eejZ*G d:d; d;eeZ+G d<d= d=eeZ,G d>d? d?eeZ-e.d@kre/  dS dS )A    N)
from_dtype)njittypeof)types)TestCaseMemoryLeakMixinskip_parfors_unsupported)TypingError)jitclassc                 C      | j S Ndtypea r   g/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/numba/tests/test_array_attr.pyarray_dtype      r   c                 C   s   |  |jS r   )viewr   )r   br   r   r   	use_dtype      r   c                 C   s   | j t dkS )Nint64)r   npr   r   r   r   dtype_eq_int64      r   c                 C   r   r   )itemsizer   r   r   r   array_itemsize   r   r   c                 C   r   r   )nbytesr   r   r   r   array_nbytes   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_contiguous1      r1   c                 C   r.   r   )r/   c_contiguousr   r   r   r   array_flags_c_contiguous4   r2   r4   c                 C   r.   r   )r/   f_contiguousr   r   r   r   array_flags_f_contiguous7   r2   r6   c                 C   r.   r   )fr   r   r   r   r   nested_array_itemsize;   r2   r8   c                 C   r.   r   )r7   r   r   r   r   r   nested_array_nbytes>   r2   r9   c                 C   r.   r   )r7   r"   r   r   r   r   nested_array_shapeA   r2   r:   c                 C   r.   r   )r7   r'   r   r   r   r   nested_array_stridesE   r2   r;   c                 C   r.   r   )r7   r)   r   r   r   r   nested_array_ndimI   r2   r<   c                 C   r.   r   )r7   r,   r   r   r   r   nested_array_sizeM   r2   r=   c                 C   s   | | }|j S r   r+   )bufr$   Zslicedr   r   r   size_after_slicing_usecaseQ   s   r?   c                 C   r.   r   )ctypesdataarrr   r   r   array_ctypes_dataW   r2   rD   c                 C   r   r   )realrB   r   r   r   
array_real[   r   rF   c                 C   r   r   )imagrB   r   r   r   
array_imag_   r   rH   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dd  Z  ZS )!TestArrayAttrc                    s,   t t|   tjdtjddd| _d S )N   r         )superrI   setUpr   arangeint32reshaper   self	__class__r   r   rN   e   s   zTestArrayAttr.setUpc                 C   sX   t |}| ||f}||}| ||| | ||jddf}| ||| d S )NA)Zlayout)r   	get_cfuncassertPreciseEqualcopy)rS   pyfuncrC   Zarytycfuncexpectedr   r   r   check_unaryi   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   Tr   arrayrQ   zeros)rS   rZ   rC   r   r   r   check_unary_with_arraysr   s   
z%TestArrayAttr.check_unary_with_arraysc                 C   s   t ||S r   )r   )rS   rZ   Zargspecr   r   r   rW      r   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%   rW   r   rP   ranger   r)   assertEqualrS   rZ   r[   r$   r   r   r   
test_shape   
   $zTestArrayAttr.test_shapec                 C   re   r   )r(   rW   r   rP   rf   r   r)   rg   rh   r   r   r   test_strides   rj   zTestArrayAttr.test_stridesc                 C      |  t d S r   )rd   r*   rR   r   r   r   	test_ndim      zTestArrayAttr.test_ndimc                 C   rl   r   )rd   r-   rR   r   r   r   	test_size   rn   zTestArrayAttr.test_sizec                 C   rl   r   )rd   r   rR   r   r   r   test_itemsize   rn   zTestArrayAttr.test_itemsizec                 C   rl   r   )rd   r    rR   r   r   r   test_nbytes   rn   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yrK   r   )r   r]   r   r   r   Zint8rc   )rS   rZ   r   rC   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   )r   emptyint16r   rW   r   r   rX   )rS   r   rZ   r[   r\   r   r   r   test_use_dtype   s
   zTestArrayAttr.test_use_dtypec                 C   s8   t }| |tjdtjd | |tjdtjd d S ru   )r   r]   r   rv   rw   r   rS   rZ   r   r   r   test_dtype_equal   s   zTestArrayAttr.test_dtype_equalc                 C   rl   r   )rd   r1   rR   r   r   r   test_flags_contiguous   rn   z#TestArrayAttr.test_flags_contiguousc                 C   rl   r   )rd   r4   rR   r   r   r   test_flags_c_contiguous   rn   z%TestArrayAttr.test_flags_c_contiguousc                 C   rl   r   )rd   r6   rR   r   r   r   test_flags_f_contiguous   rn   z%TestArrayAttr.test_flags_f_contiguous)__name__
__module____qualname__rN   r]   rd   rW   ri   rk   rm   ro   rp   rq   rt   rx   rz   r{   r|   r}   __classcell__r   r   rT   r   rI   c   s"    	rI   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   r7   )r^   rL   r`   r   )
rM   r   rN   r   r   rP   Zrecarrayr   r   nbrecordrS   r   rT   r   r   rN      s   zTestNestedArrayAttr.setUpc                 C   s   t | jf|S r   )r   r   ry   r   r   r   rW      r   zTestNestedArrayAttr.get_cfuncc                 C   *   t }| |}| || j|| j d S r   )r:   rW   rg   r   rS   rZ   r[   r   r   r   ri         
zTestNestedArrayAttr.test_shapec                 C   r   r   )r;   rW   rg   r   r   r   r   r   rk      r   z TestNestedArrayAttr.test_stridesc                 C   r   r   )r<   rW   rg   r   r   r   r   r   rm      r   zTestNestedArrayAttr.test_ndimc                 C   r   r   )r9   rW   rg   r   r   r   r   r   rq      r   zTestNestedArrayAttr.test_nbytesc                 C   r   r   )r=   rW   rg   r   r   r   r   r   ro      r   zTestNestedArrayAttr.test_sizec                 C   r   r   )r8   rW   rg   r   r   r   r   r   rp      r   z!TestNestedArrayAttr.test_itemsize)r~   r   r   rN   rW   ri   rk   rm   rq   ro   rp   r   r   r   rT   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^   rL   r         )r?   r   r   rO   rQ   rf   r"   rg   )rS   rZ   r[   rC   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   )rD   r   r   rO   rg   )rS   rZ   r[   rC   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)Zfrom_addressr   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)Zparallelc                    s<   t | }t d}|j}|j} |j| |j}||d fS )Nr`   r   )r   onesrv   r@   rA   )r,   rC   outZinctZoutctstatus)r   r   r   foo  s   

zDTestArrayCTypes.test_array_ctypes_ref_error_in_parallel.<locals>.foor   )r@   r   r   r   r   r   r   
assertTruerX   r   r   )	rS   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   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              $@r^   rL   )r   r   rO   rX   rQ   )rS   rZ   r[   r,   rC   r   r   r   check_complex)  s   zTestRealImagAttr.check_complexc                 C   rl   r   )r   rF   rR   r   r   r   test_complex_real3  rn   z"TestRealImagAttr.test_complex_realc                 C   rl   r   )r   rH   rR   r   r   r   test_complex_imag6  rn   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^   rL   )r   r   )	rF   r   r   rO   rX   rQ   rg   rA   ZassertNotEqual)rS   r   rZ   r[   r,   rC   rE   r   r   r   check_number_real9  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)r   uint8rP   float32r   r   r   r   r   r   test_number_realL     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^   rL   r`   r   z#assignment destination is read-only)rH   r   r   rO   rX   rQ   rg   tolist
zeros_likeassertRaises
ValueErrorstr	exception)rS   r   rZ   r[   r,   rC   rG   raisesr   r   r   check_number_imagS  s   
z"TestRealImagAttr.check_number_imagc                 C   r   )z5
        Testing .imag of non-complex dtypes
        N)r   r   rP   r   r   r   r   r   r   r   test_number_imagf  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 )NrE   rG   r   r   y        ?z&cannot access .real of array of Recordz&cannot access .imag of array of Record)r   r   r   Z	complex64rc   randomr,   ZassertIsrF   rg   rH   r   r   r   r   r	   ZassertInr   r   )rS   ZrectyprC   Zjit_array_realZjit_array_imagr   r   r   r   test_record_realm  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   rR   r   r   r   __init__  s   z2TestJitclassFlagsSegfault.test.<locals>.B.__init__c                 S   s
   |j  d S r   )r/   )rS   Xr   r   r   r     r&   z-TestJitclassFlagsSegfault.test.<locals>.B.fooN)r~   r   r   r   r   r   r   r   r   B  s    r   rK   )r
   dictobjectr   r   r   )rS   r   Zr   r   r   test  s   zTestJitclassFlagsSegfault.testN)r~   r   r   __doc__r   r   r   r   r   r     s    r   __main__)0numpyr   ZunittestZnumba.np.numpy_supportr   Znumbar   r   Z
numba.corer   Znumba.tests.supportr   r   r   Znumba.core.errorsr	   Znumba.experimentalr
   r   r   r   r   r    r%   r(   r*   r-   r1   r4   r6   r8   r9   r:   r;   r<   r=   r?   rD   rF   rH   rI   r   r   r   r   r   r~   mainr   r   r   r   <module>   sN    Y/1`