U
    iâËd"-  ã                   @   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�r¢e 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   úT/home/sam/Atlas/atlas_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`
