
    ܙd"-                        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	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z* G d dee          Z+ G d  d!eej                  Z, G d" d#eej                  Z- G d$ d%ee          Z. G d& d'ee          Z/ G d( d)ee          Z0e1d*k    r ej2                     dS dS )+    N)compile_isolated)
from_dtype)njittypeof)types)TestCaseCompilationCacheMemoryLeakMixintagskip_parfors_unsupported)TypingError)jitclassc                     | j         S Ndtypeas    ;lib/python3.11/site-packages/numba/tests/test_array_attr.pyarray_dtyper      s	    7N    c                 6    |                      |j                  S r   )viewr   )r   bs     r   	use_dtyper      s    66!'??r   c                     | j         S r   )itemsizer   s    r   array_itemsizer      s
    :r   c                     | j         S r   )nbytesr   s    r   array_nbytesr!      s	    8Or   c                     | j         |         S r   )shaper   is     r   array_shaper&      s    71:r   c                     | j         |         S r   )stridesr$   s     r   array_stridesr)   "   s    9Q<r   c                     | j         S r   )ndimr   s    r   
array_ndimr,   &   	    6Mr   c                     | j         S r   sizer   s    r   
array_sizer1   *   r-   r   c                     | j         j        S r   )flags
contiguousr   s    r   array_flags_contiguousr5   .   s    7r   c                     | j         j        S r   )r3   c_contiguousr   s    r   array_flags_c_contiguousr8   1       7r   c                     | j         j        S r   )r3   f_contiguousr   s    r   array_flags_f_contiguousr<   4   r9   r   c                     | j         j        S r   )fr   r   s    r   nested_array_itemsizer?   8   s    3<r   c                     | j         j        S r   )r>   r    r   s    r   nested_array_nbytesrA   ;   s    3:r   c                     | j         j        S r   )r>   r#   r   s    r   nested_array_shaperC   >   s    39r   c                     | j         j        S r   )r>   r(   r   s    r   nested_array_stridesrE   B   s    3;r   c                     | j         j        S r   )r>   r+   r   s    r   nested_array_ndimrG   F       38Or   c                     | j         j        S r   )r>   r0   r   s    r   nested_array_sizerJ   J   rH   r   c                      | |         }|j         S r   r/   )bufr%   sliceds      r   size_after_slicing_usecaserN   N   s    VF;r   c                     | j         j        S r   )ctypesdataarrs    r   array_ctypes_datarT   T   s    :?r   c                     | j         S r   )realrR   s    r   
array_realrW   X   	    8Or   c                     | j         S r   )imagrR   s    r   
array_imagr[   \   rX   r   c                   r     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Z xZS )TestArrayAttrc                     t          t          |                                            t                      | _        t          j        dt
          j                                      dd          | _	        d S )N   r         )
superr]   setUpr	   ccachenparangeint32reshaper   )self	__class__s    r   rc   zTestArrayAttr.setUpb   sX    mT""((***&((2RX...66q!<<r   c                 :   t          |          }|                     ||f          } ||          }|                      ||          |           |                     ||                    d          f          }|                      ||          |           d S )NA)layout)r   	get_cfuncassertPreciseEqualcopy)ri   pyfuncrS   arytycfuncexpecteds         r   check_unaryzTestArrayAttr.check_unaryg   s    svx006#;;c

H555v

#
(>(>'@AAc

H55555r   c                    |                      || j                   |                      || j        j                   |                      || j        d d d                    t          j        dg                              d          }|                      ||           t          j        d          }|                      ||           |                      ||                    d                     d S )N   *    r   )   r   rw   )ru   r   Tre   arrayrh   zeros)ri   rq   rS   s      r   check_unary_with_arraysz%TestArrayAttr.check_unary_with_arraysp   s    (((***!---htnn$$R((%%%hqkk%%% 	Y!7!788888r   c                 F    | j                             ||          }|j        S r   )rd   compileentry_point)ri   rq   argspeccress       r   rn   zTestArrayAttr.get_cfunc~   s"    {""6733r   c                 $   t           }|                     |t          j        d d d d f         t          j        f          }t	          | j        j                  D ]6}|                      || j        |           || j        |                     7d S r   )r&   rn   r   rg   ranger   r+   assertEqualri   rq   rs   r%   s       r   
test_shapezTestArrayAttr.test_shape   s    vAAAaaaC(8%+'FGGtv{## 	B 	BAVVDFA..dfa0@0@AAAA	B 	Br   c                 $   t           }|                     |t          j        d d d d f         t          j        f          }t	          | j        j                  D ]6}|                      || j        |           || j        |                     7d S r   )r)   rn   r   rg   r   r   r+   r   r   s       r   test_strideszTestArrayAttr.test_strides   s    vAAAaaaC(8%+'FGGtv{## 	B 	BAVVDFA..dfa0@0@AAAA	B 	Br   c                 :    |                      t                     d S r   )r~   r,   ri   s    r   	test_ndimzTestArrayAttr.test_ndim       $$Z00000r   c                 :    |                      t                     d S r   )r~   r1   r   s    r   	test_sizezTestArrayAttr.test_size   r   r   c                 :    |                      t                     d S r   )r~   r   r   s    r   test_itemsizezTestArrayAttr.test_itemsize   s    $$^44444r   c                 :    |                      t                     d S r   )r~   r!   r   s    r   test_nbyteszTestArrayAttr.test_nbytes   s    $$\22222r   c                     t           }|                     || j                   t          j        dt          j        fdt          j        fg          }t          j        d|          }|                     ||           d S )Nxyr`   r   )r   ru   r   re   r   int8r}   )ri   rq   r   rS   s       r   
test_dtypezTestArrayAttr.test_dtype   so    (((3.3.9::hq&&&%%%%%r   c                 .   t          j        dt           j                  }t          }|                     |t          | j                  t          |          f          } || j        |          }|                      || j        |          |           d S )Nrz   r   )re   emptyint16r   rn   r   r   ro   )ri   r   rq   rs   rt   s        r   test_use_dtypezTestArrayAttr.test_use_dtype   s    HQbh'''vtvq		'BCC6$&!$$dfa 0 0(;;;;;r   c                 :    |                      t                     d S r   )r~   r5   r   s    r   test_flags_contiguousz#TestArrayAttr.test_flags_contiguous   s    $$%;<<<<<r   c                 :    |                      t                     d S r   )r~   r8   r   s    r   test_flags_c_contiguousz%TestArrayAttr.test_flags_c_contiguous       $$%=>>>>>r   c                 :    |                      t                     d S r   )r~   r<   r   s    r   test_flags_f_contiguousz%TestArrayAttr.test_flags_f_contiguous   r   r   )__name__
__module____qualname__rc   ru   r~   rn   r   r   r   r   r   r   r   r   r   r   r   __classcell__rj   s   @r   r]   r]   `   s       = = = = =
6 6 69 9 9     B B BB B B1 1 11 1 15 5 53 3 3& & &< < <= = =? ? ?? ? ? ? ? ? ?r   r]   c                   H     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
 xZS )	TestNestedArrayAttrc                 0   t          t          |                                            t          j        dt          j        fdt          j        dfg          }t          j        d|          d         | _        t          | j        j                  | _	        d S )Nr   r>   )rw   ra   rz   r   )
rb   r   rc   re   r   rg   recarrayr   r   nbrecord)ri   r   rj   s     r   rc   zTestNestedArrayAttr.setUp   sr    !4((..0003/C6+BCDDQ&&q)"46<00r   c                 <    t          || j        f          }|j        S r   )r   r   r   )ri   rq   r   s      r   rn   zTestNestedArrayAttr.get_cfunc   s    (899r   c                     t           }|                     |          }|                      || j                   || j                             d S r   )rC   rn   r   r   ri   rq   rs   s      r   r   zTestNestedArrayAttr.test_shape   sH    #v&&tv77777r   c                     t           }|                     |          }|                      || j                   || j                             d S r   )rE   rn   r   r   r   s      r   r   z TestNestedArrayAttr.test_strides   sH    %v&&tv77777r   c                     t           }|                     |          }|                      || j                   || j                             d S r   )rG   rn   r   r   r   s      r   r   zTestNestedArrayAttr.test_ndim   H    "v&&tv77777r   c                     t           }|                     |          }|                      || j                   || j                             d S r   )rA   rn   r   r   r   s      r   r   zTestNestedArrayAttr.test_nbytes   sH    $v&&tv77777r   c                     t           }|                     |          }|                      || j                   || j                             d S r   )rJ   rn   r   r   r   s      r   r   zTestNestedArrayAttr.test_size   r   r   c                     t           }|                     |          }|                      || j                   || j                             d S r   )r?   rn   r   r   r   s      r   r   z!TestNestedArrayAttr.test_itemsize   sH    &v&&tv77777r   )r   r   r   rc   rn   r   r   r   r   r   r   r   r   s   @r   r   r      s        1 1 1 1 1     8 8 88 8 88 8 88 8 88 8 88 8 8 8 8 8 8r   r   c                       e Zd Zd ZdS )TestSlicedArrayAttrc                    t           }t          |          }t          j        d                              dd          }t          |j        d                   D ],}|                      |||           |||                     -t          j        d                              ddd          }t          |j        d                   D ],}|                      |||           |||                     -d S )N
   rw   ra   r         )rN   r   re   rf   rh   r   r#   r   )ri   rq   rs   rS   r%   s        r   test_size_after_slicingz+TestSlicedArrayAttr.test_size_after_slicing   s    +Vi&&q!,,sy|$$ 	< 	<AVVC^^UU3]];;;;i	""**1a33sy|$$ 	< 	<AVVC^^UU3]];;;;	< 	<r   N)r   r   r   r   ry   r   r   r   r      s#        < < < < <r   r   c                   .    e Zd ZdZd Zed             ZdS )TestArrayCTypesFc                     t           }t          |          }t          j        d          }|                      ||           ||                     d S )Nr   )rT   r   re   rf   r   )ri   rq   rs   rS   s       r   test_array_ctypes_dataz&TestArrayCTypes.test_array_ctypes_data   sK    "VilleeCjj11111r   c                 :  	
 ddl m}m}m}m	m}  |||||          	fd            
t          d          
fd            }d} ||          \  }}|                     |           |                     |t          j
        |          |z   d                    d S )Nr   )	CFUNCTYPEc_void_pc_int32c_doublec_boolc                 T   	 |z                       |           }dz                       |          }t          j        ||t          j                  }t          j        d|t          j                  }||j        z   d         |d<   dS #  dd l}|                                 Y dS xY w)Nrz   )bufferr   r   TF)from_addressre   ndarrayfloat64r0   	tracebackprint_exception)	inptrr0   outptrinbufoutbufr   r   r   r   s	           r   callbackzITestArrayCTypes.test_array_ctypes_ref_error_in_parallel.<locals>.callback   s    
!D66u=="Q,44V<<JtEDDDJqrzBBBAF
A!t    ))+++uus   BB
 
B'T)parallelc                     t          j        |           }t          j        d          }|j        }|j        } |j        | |j                  }||d         fS )Nrz   r   )re   onesr   rP   rQ   )r0   rS   outinctoutctstatusr   s         r   foozDTestArrayCTypes.test_array_ctypes_ref_error_in_parallel.<locals>.foo  sP    '$--C(1++C:DJEXdiuz::F3q6>!r   r   )rP   r   r   r   r   r   r   
assertTruero   re   r   )ri   r   r   r   r   r   r0   r   gotr   r   s            @@r   'test_array_ctypes_ref_error_in_parallelz7TestArrayCTypes.test_array_ctypes_ref_error_in_parallel   s     	JIIIIIIIIIIIII	68Wh	7	7	 	 	 	 
8	7	  
t				" 	" 	" 	" 
		" c$iibgdmmd&:A%>?????r   N)r   r   r   _numba_parallel_test_r   r   r   ry   r   r   r   r      sJ        !2 2 2 #@ #@ #@ #@ #@r   r   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestRealImagAttrc                 L   t          |          }d}t          j        |          t          j        |          dz  z   }|                      ||           ||                     |                    dd          }|                      ||           ||                     d S )Nr   y              $@rw   ra   )r   re   rf   ro   rh   )ri   rq   rs   r0   rS   s        r   check_complexzTestRealImagAttr.check_complex#  s    Vioo	$# 55sUU3ZZ888kk!QsUU3ZZ88888r   c                 :    |                      t                     d S r   )r   rW   r   s    r   test_complex_realz"TestRealImagAttr.test_complex_real-      :&&&&&r   c                 :    |                      t                     d S r   )r   r[   r   s    r   test_complex_imagz"TestRealImagAttr.test_complex_imag0  r   r   c                 b   t           }t          |          }d}t          j        ||          }|                      ||           ||                     |                    dd          }|                      ||           ||                     |                     |j         ||          j                   |                     |j         ||          j                    ||          }|                     |d         d           d|d<   |                     |d         d           d S )Nr   r   rw   ra   )r   r   )	rW   r   re   rf   ro   rh   r   rQ   assertNotEqual)ri   r   rq   rs   r0   rS   rV   s          r   check_number_realz"TestRealImagAttr.check_number_real3  s   ViE***sUU3ZZ888kk!QsUU3ZZ88866#;;#344455::?333uSzzCIq)))T
TA&&&&&r   c                     t           j        t           j        t           j        t           j        fD ]}|                     |           dS )z5
        Testing .real of non-complex dtypes
        N)re   uint8rg   float32r   r   ri   r   s     r   test_number_realz!TestRealImagAttr.test_number_realF  E     h"*bjA 	* 	*E""5))))	* 	*r   c                    t           }t          |          }d}t          j        ||          }|                      ||           ||                     |                    dd          }|                      ||           ||                     |                      ||                                          t          j        |                                                      ||          }| 	                    t                    5 }d|d<   d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nr   r   rw   ra   rz   r   z#assignment destination is read-only)r[   r   re   rf   ro   rh   r   tolist
zeros_likeassertRaises
ValueErrorstr	exception)ri   r   rq   rs   r0   rS   rZ   raisess           r   check_number_imagz"TestRealImagAttr.check_number_imagM  sy   ViE***sUU3ZZ888kk!QsUU3ZZ888s**,,bmC.@.@.G.G.I.IJJJuSzzz** 	fDG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	>V-..	0 	0 	0 	0 	0s   D!!D%(D%c                     t           j        t           j        t           j        t           j        fD ]}|                     |           dS )z5
        Testing .imag of non-complex dtypes
        N)re   r   rg   r   r   r   r   s     r   test_number_imagz!TestRealImagAttr.test_number_imag`  r   r   c                    t          j        dt           j        fdt           j        fg          }t          j        d|          }t           j                            |j                  |d<   t           j                            |j                  dz  |d<   |                     t          |          |           | 	                    t          |                                          t          j        |                                                     t          t                    }t          t                    }|                     t                    5 } ||           d d d            n# 1 swxY w Y   |                     dt#          |j                             |                     t                    5 } ||           d d d            n# 1 swxY w Y   |                     dt#          |j                             d S )NrV   rZ   r   r   y        ?z&cannot access .real of array of Recordz&cannot access .imag of array of Record)re   r   r   	complex64r}   randomr0   assertIsrW   r   r[   r   r   r   r   r   assertInr   r   )ri   rectyprS   jit_array_realjit_array_imagr   s         r   test_record_realz!TestRealImagAttr.test_record_realg  s/   FBJ/&",1GHIIhq'''i&&sx00Fi&&sx0047F 	joos+++C//112=3E3E3L3L3N3NOOO j))j)){++ 	 vN3	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 >&*++	- 	- 	- {++ 	 vN3	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 >&*++	- 	- 	- 	- 	-s$   E,,E03E09GGGN)r   r   r   r   r   r   r   r   r   r   r  ry   r   r   r   r   "  s        9 9 9' ' '' ' '' ' '&* * *0 0 0&* * *- - - - -r   r   c                       e Zd ZdZd ZdS )TestJitclassFlagsSegfaultz@Regression test for: https://github.com/numba/numba/issues/4775 c                     t          t                                 G d dt                                } |            }|                    t	          j        d                     d S )Nc                       e Zd Zd Zd ZdS ))TestJitclassFlagsSegfault.test.<locals>.Bc                     d S r   ry   r   s    r   __init__z2TestJitclassFlagsSegfault.test.<locals>.B.__init__  s    r   c                     |j          d S r   )r3   )ri   Xs     r   r   z-TestJitclassFlagsSegfault.test.<locals>.B.foo  s    r   N)r   r   r   r  r   ry   r   r   Br    s2              r   r  r`   )r   dictobjectr   re   r   )ri   r  Zs      r   testzTestJitclassFlagsSegfault.test  sp    	$&&			 	 	 	 	 	 	 
		 ACC	bgajjr   N)r   r   r   __doc__r  ry   r   r   r  r    s)        JJ    r   r  __main__)3numpyre   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,   r1   r5   r8   r<   r?   rA   rC   rE   rG   rJ   rN   rT   rW   r[   r]   r   r   r   r   r  r   mainry   r   r   <module>r!     sk        0 0 0 0 0 0 - - - - - -              @ @ @ @ @ @ @ @ @ @ @ @ @ @ ) ) ) ) ) ) ' ' ' ' ' '                                                R? R? R? R? R?OX R? R? R?j-8 -8 -8 -8 -8/8+< -8 -8 -8`	< 	< 	< 	< 	</8+< 	< 	< 	<.@ .@ .@ .@ .@ox .@ .@ .@b^- ^- ^- ^- ^- ^- ^- ^-@       " zHMOOOOO r   