
    ܙ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  ej        d          Z ej        d          Z ej        d	          Zeddd
         Ze                    d          j        Z ej        dej        fdg          Z ej        dej                                      e          Zeddd         Z ej        dej                  Z  ej        dg          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j,                  Z- G d d ej,                  Z.e/d!k    r ej0                     dS dS )"    N)compile_isolated)TypingError)jittypeof)types)skip_m1_llvm_rtdyld_failure*   @         )      x)yS3    dtypes   XXXX_array_contents_XXXX   c                     t           d         S N )a0is    @lib/python3.11/site-packages/numba/tests/test_array_constants.pygetitem0r      s    b6M    c                     t           |          S N)a1r   s    r   getitem1r#   #       a5Lr   c                     t           |          S r!   )a2r   s    r   getitem2r'   '   r$   r   c                     t           |          S r!   )a3r   s    r   getitem3r*   +   r$   r   c                     t           |          S r!   )a4r   s    r   getitem4r-   /   r$   r   c                     t           |          S r!   )a5r   s    r   getitem5r0   3   r$   r   c                     t           |          S r!   )a6r   s    r   getitem6r3   7   r$   r   c                      t           S r!   )s1r   r   r   use_arrayscalar_constr6   ;   s    Ir   c                      dt           d<   d S )Nr   r   )myarrayr   r   r   write_to_global_arrayr9   ?   s    GAJJJr   c                  B    t          j        dt           j                  S )Ns   foor   )np
frombufferuint8r   r   r   bytes_as_const_arrayr>   C   s    =rx0000r   c                   j    e 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ed             ZdS )TestConstantArrayz
    Test array constants.
    c                     t          |t          j        f          }|j        }dD ]4}t          j                             ||           ||                     5d S )N)r   r   r   )r   r   int32entry_pointr;   testingassert_array_equal)selfpyfunccrescfuncr   s        r   check_array_constz#TestConstantArray.check_array_constL   sa    77  	? 	?AJ))&&))UU1XX>>>>	? 	?r   c                 :    |                      t                     d S r!   )rJ   r   rF   s    r   test_array_const_0dz%TestConstantArray.test_array_const_0dR       x(((((r   c                 :    |                      t                     d S r!   )rJ   r#   rL   s    r   test_array_const_1d_contigz,TestConstantArray.test_array_const_1d_contigU   rN   r   c                 :    |                      t                     d S r!   )rJ   r'   rL   s    r   test_array_const_1d_noncontigz/TestConstantArray.test_array_const_1d_noncontigX   rN   r   c                 :    |                      t                     d S r!   )rJ   r*   rL   s    r   test_array_const_2dz%TestConstantArray.test_array_const_2d[   rN   r   c                 :    |                      t                     d S r!   )rJ   r-   rL   s    r   test_record_array_const_contigz0TestConstantArray.test_record_array_const_contig^   rN   r   c                 :    |                      t                     d S r!   )rJ   r0   rL   s    r   !test_record_array_const_noncontigz3TestConstantArray.test_record_array_const_noncontiga   rN   r   c                 F   t           j        f} t          |d          t                    }|                    |          }|                                D ]5}d|v r/|                     d|           |                     d|            dS 6|                     d           dS )zt
        Issue #1933: the array declaration in the LLVM IR must have
        the right alignment specified.
        T)nopythonXXXX_array_contents_XXXXzconstant [24 x i8]z	, align 4z+could not find array declaration in LLVM IRN)r   intpr   r3   inspect_llvm
splitlinesassertInfail)rF   sigrI   irlines        r   test_array_const_alignmentz,TestConstantArray.test_array_const_alignmentd   s    
 zm'C$'''11$$MMOO 	E 	ED)T112D999 k4000 2 IICDDDDDr   c                     t           }t          |d          }|j        }|                      |             |                       d S r   )r6   r   rC   assertEqualrF   rG   rH   rI   s       r   test_arrayscalar_constz(TestConstantArray.test_arrayscalar_constv   sF    &++ 5577+++++r   c                     t           }|                     t                    5  t          |d           d d d            d S # 1 swxY w Y   d S r   )r9   assertRaisesr   r   )rF   rG   s     r   test_write_to_global_arrayz,TestConstantArray.test_write_to_global_array}   s    &{++ 	) 	)VR(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   A  AAc                     t          j        dg          fd}t          |d          }|                                }|                     |d           dS )zy
        This issue is caused by an unresolved bug in numpy since version 1.6.
        See numpy GH issue #3147.
        V   c                       d         S )Nr   r   )constarrs   r   rG   z1TestConstantArray.test_issue_1850.<locals>.pyfunc   s    A;r   r   N)r;   arrayr   rC   rf   )rF   rG   rH   outro   s       @r   test_issue_1850z!TestConstantArray.test_issue_1850   sk    
 8RD>>	 	 	 	 	  ++  b!!!!!r   c                      fd}d}t          j        |                              |          }t          j        t           j                            d|dz  f                    }                     t          |          j        d                                t          |          j        d            ||            ||           dS )z
        Test issue https://github.com/numba/numba/issues/2188 where freezing
        a constant array into the code that's prohibitively long and consumes
        too much RAM.
        c                 \    t          j                   }                    t                     t          |                      fd}t	          |d          }                    t          |j                                                   j	                   |
                                }                     |           ~d  |
                                }t           j                            ||                               t          |          t          |                     d S )Nc                       S r!   r   )biggies   r   rG   zFTestConstantArray.test_too_big_to_freeze.<locals>.test.<locals>.pyfunc   s    r   r   )r;   copyrf   r   r   
assertLesslenlibraryget_llvm_strnbytesrC   assertIsrD   assert_equal)rv   expectrG   rH   rq   rF   s   `    r   testz6TestConstantArray.test_too_big_to_freeze.<locals>.test   s	   WV__FVF^^VF^^<<<     $FB//D OOC 9 9 ; ;<<fmLLL""$$CMM&#&&&F""$$CJ##FC000VF^^VC[[99999r   i r   CFN)r;   arangereshapeasfortranarrayrandomrf   r   layout)rF   r   nelemc_arrayf_arrays   `    r   test_too_big_to_freezez(TestConstantArray.test_too_big_to_freeze   s    	: 	: 	: 	: 	:, )E""**511#BI$4$4a!_$E$EFF/555/555WWr   N)__name__
__module____qualname____doc__rJ   rM   rP   rR   rT   rV   rX   rd   rh   rk   rr   r   r   r   r   r   r@   r@   G   s         ? ? ?) ) )) ) )) ) )) ) )) ) )) ) )E E E$, , ,) ) )
" " " !% % ! % % %r   r@   c                       e Zd Zd ZdS )TestConstantBytesc                     t           }t          |d          }|j        }t          j                             |             |                       d S r   )r>   r   rC   r;   rD   rE   rg   s       r   test_constant_bytesz%TestConstantBytes.test_constant_bytes   sH    %++ 

%%ffhh88888r   N)r   r   r   r   r   r   r   r   r      s#        9 9 9 9 9r   r   __main__)1numpyr;   unittestnumba.core.compilerr   numba.core.errorsr   numbar   r   
numba.corer   numba.tests.supportr   rp   r   rB   r5   r   r"   r&   r   Tr)   r   int8dtviewr,   r/   r<   float32r2   r8   r   r#   r'   r*   r-   r0   r3   r6   r9   r>   TestCaser@   r   r   mainr   r   r   <module>r      sj        0 0 0 0 0 0 ) ) ) ) ) )               ; ; ; ; ; ; RXb\\RXb\\RYr]]!WZZRXRW~{+,,RYr!!!&&r**"X R].bjAAA "(A5//                  1 1 1o o o o o) o o od9 9 9 9 9) 9 9 9 zHMOOOOO r   