o
    8ήcl                     @   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 edZedZedZeddd	 Zed
jZedejfdgZejdejdeZeddd ZejdejdZedg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)G d&d' d'ej*Z+G d(d) d)ej*Z,e-d*kre.  dS dS )+    N)compile_isolated)TypingError)jittypeof)types*   @         )      x)yS3    dtypes   XXXX_array_contents_XXXX   c                 C   s   t d S N )a0ir   r   G/tmp/pip-target-vg8gfxp4/lib/python/numba/tests/test_array_constants.pygetitem0      r   c                 C      t |  S N)a1r   r   r   r   getitem1"   r   r    c                 C   r   r   )a2r   r   r   r   getitem2&   r   r"   c                 C   r   r   )a3r   r   r   r   getitem3*   r   r$   c                 C   r   r   )a4r   r   r   r   getitem4.   r   r&   c                 C   r   r   )a5r   r   r   r   getitem52   r   r(   c                 C   r   r   )a6r   r   r   r   getitem66   r   r*   c                   C   s   t S r   )s1r   r   r   r   use_arrayscalar_const:      r,   c                   C   s   dt d< d S )Nr   r   )myarrayr   r   r   r   write_to_global_array>   s   r/   c                   C   s   t jdt jdS )Ns   foor   )np
frombufferuint8r   r   r   r   bytes_as_const_arrayB   s   r3   c                   @   sp   e Zd 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d Zdd Zdd Zdd ZdS )TestConstantArrayz
    Test array constants.
    c                 C   s8   t |tjf}|j}dD ]}tj|||| qd S )N)r   r   r
   )r   r   int32entry_pointr0   testingassert_array_equal)selfpyfunccrescfuncr   r   r   r   check_array_constK   s
   z#TestConstantArray.check_array_constc                 C      |  t d S r   )r=   r   r9   r   r   r   test_array_const_0dQ      z%TestConstantArray.test_array_const_0dc                 C   r>   r   )r=   r    r?   r   r   r   test_array_const_1d_contigT   rA   z,TestConstantArray.test_array_const_1d_contigc                 C   r>   r   )r=   r"   r?   r   r   r   test_array_const_1d_noncontigW   rA   z/TestConstantArray.test_array_const_1d_noncontigc                 C   r>   r   )r=   r$   r?   r   r   r   test_array_const_2dZ   rA   z%TestConstantArray.test_array_const_2dc                 C   r>   r   )r=   r&   r?   r   r   r   test_record_array_const_contig]   rA   z0TestConstantArray.test_record_array_const_contigc                 C   r>   r   )r=   r(   r?   r   r   r   !test_record_array_const_noncontig`   rA   z3TestConstantArray.test_record_array_const_noncontigc                 C   sd   t jf}t|ddt}||}| D ]}d|v r*| d| | d|  dS q| 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   r*   inspect_llvm
splitlinesassertInfail)r9   sigr<   irliner   r   r   test_array_const_alignmentc   s   
z,TestConstantArray.test_array_const_alignmentc                 C   s(   t }t|d}|j}| | |  d S r   )r,   r   r6   assertEqualr9   r:   r;   r<   r   r   r   test_arrayscalar_constu   s   
z(TestConstantArray.test_arrayscalar_constc                 C   s>   t }| t t|d W d    d S 1 sw   Y  d S r   )r/   assertRaisesr   r   )r9   r:   r   r   r   test_write_to_global_array|   s   "z,TestConstantArray.test_write_to_global_arrayc                    s:   t dg  fd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                      s    d S )Nr   r   r   constarrr   r   r:      r   z1TestConstantArray.test_issue_1850.<locals>.pyfuncr   N)r0   arrayr   r6   rR   )r9   r:   r;   outr   rX   r   test_issue_1850   s
   
z!TestConstantArray.test_issue_1850c                    sr    fdd}d}t ||}t t jd|d 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                    s   t  }t t|  fdd}t|d}t|j  j	 |
 } | ~d  |
 }t j|| t|t| d S )Nc                      s    S r   r   r   biggier   r   r:      r-   zFTestConstantArray.test_too_big_to_freeze.<locals>.test.<locals>.pyfuncr   )r0   copyrR   r   r   
assertLesslenlibraryget_llvm_strnbytesr6   assertIsr7   assert_equal)r^   expectr:   r;   r[   r?   r]   r   test   s   

z6TestConstantArray.test_too_big_to_freeze.<locals>.testi r
   CFN)r0   arangereshapeasfortranarrayrandomrR   r   layout)r9   rh   nelemc_arrayf_arrayr   r?   r   test_too_big_to_freeze   s   z(TestConstantArray.test_too_big_to_freezeN)__name__
__module____qualname____doc__r=   r@   rB   rC   rD   rE   rF   rQ   rT   rV   r\   rs   r   r   r   r   r4   F   s    r4   c                   @   s   e Zd Zdd ZdS )TestConstantBytesc                 C   s*   t }t|d}|j}tj| |  d S r   )r3   r   r6   r0   r7   r8   rS   r   r   r   test_constant_bytes   s   
z%TestConstantBytes.test_constant_bytesN)rt   ru   rv   ry   r   r   r   r   rx      s    rx   __main__)/numpyr0   unittestnumba.core.compilerr   numba.core.errorsr   numbar   r   
numba.corer   rZ   r   r5   r+   rk   r   r!   rl   Tr#   r   int8dtviewr%   r'   r1   float32r)   r.   r   r    r"   r$   r&   r(   r*   r,   r/   r3   TestCaser4   rx   rt   mainr   r   r   r   <module>   s>    


q	