o
    i!                     @   s   d dl mZ d dlZd dlmZmZmZ d dlZd dlZd dl	m
Z
mZmZmZmZ d dlmZmZ d dlmZmZ d dlmZ d dlZdd	 Zd
d Zdd Zdd ZG dd deeZedkrge  dS dS )    )partialN)chainproductstarmap)jit	literallynjittypeofTypingError)utilstypes)TestCaseMemoryLeakMixin)_header_leadc                 C   s   | j | j| jfS N)startstopstep)sl r   T/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/numba/tests/test_slices.pyslice_passing   s   r   c                  G   s   t |  }|j|j|jfS r   )slicer   r   r   )argsr   r   r   r   slice_constructor   s   r   c                 C   s   t |  }|| S r   )r   )r   lr   r   r   r   slice_construct_and_use   s   r   c                 G   s
   | j | S r   )indices)sindargsr   r   r   slice_indices   s   
r    c                   @   s\   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d Zdd ZdS )
TestSlicesc                    s   fdd}t j}| d }tddt g d}d|fdd	g}d
dg}t|||D ]\\}}\}	}
\}}|||	|||
| q,d|fddg}d|fdd	g}ddg}t|||D ]\\}}\}	}
\}}|||	|||
| qZt  tddd W d   dS 1 sw   Y  dS )zC
        Check passing a slice object to a Numba function.
        c                    s*   t | ||} |}||||f d S r   )r   assertPreciseEqual)abcdefr   gotcfuncselfr   r   check$   s   z,TestSlices.test_slice_passing.<locals>.check   Tnopython))Nr   *   r2   r4   N)	   r5   )r6   Nr.   )   r8   r1   r3   )r9   g      ?)	sysmaxsizer   r   	itertoolsr   assertRaises	TypeErrorr   )r,   r-   	maxposint	maxnegintstart_cases
stop_cases
step_casesr#   r&   r$   r'   r%   r(   r   r*   r   test_slice_passing   s.   
"zTestSlices.test_slice_passingc                 C   s   t j}| d }td}tddt}tddt}dd|dffddd|dffd	d|dffd
ddd|dffddd|dffdd||dffdd|dffd|ddffdfD ]\}}|| }| || t||}	|||}
| |	|
 qSdS )zQ
        Test the 'happy path' for slice() constructor in nopython mode.
        r.   
   Tr/   r   r   ))   )r   rF   r.   )NN)r.   N))N   )r   rG   r.   ))r.   rG   )r.   rG   r.   )NN   rH   ))NrG   rH   )r   rG   rH   )r.   NrH   )r.   rG   rH   rI   )NNr4   r4   )rE   Nr4   )NrF   r4   rF   )rE   rF   r4   rJ   N)r:   r;   nparanger   r   r   r"   )r,   r?   r@   r#   r+   	cfunc_user   expectedr)   usagecusager   r   r   test_slice_constructorC   s4   



z!TestSlices.test_slice_constructorc           
         s  d t  fddtdD }td}tddt}|   |D ]}zt||}W n ty } zIt	|}| 
t|d| | t}||| W d	   n1 sWw   Y  | tt|j | d
dd |D t|j W Y d	}~q"d	}~w ty }	 z-| t|	}||| W d	   n1 sw   Y  | t|	t|j W Y d	}	~	q"d	}	~	ww | |||| q"d	S )zW
        Test that slice constructor behaves same in python and compiled code.
        )Nr4   r   r.   c                 3   s    | ]	}t  |d V  qdS ))repeatN)r   ).0noptionsr   r   	<genexpr>g   s    
z:TestSlices.test_slice_constructor_cases.<locals>.<genexpr>rF   rE   Tr/   z7slice expected at (most|least) (3|1) arguments?, got {}Nz, c                 s   s    | ]	}t t|V  qd S r   )strr	   )rS   argr   r   r   rW      s    )r   from_iterablerangerK   rL   r   r   disable_leak_checkr>   lenassertRegexrX   formatr=   r
   assertInr   	exceptionjoin	Exceptiontyper"   )
r,   	arg_casesarrayr+   r   rN   	py_type_en_argsnumba_epy_er   rU   r   test_slice_constructor_casesb   sR   
z'TestSlices.test_slice_constructor_casesc           	      C   s   t ttttdddttdddttddd}tdd}tddt}t||D ]N\}}zt||}W n9 typ } z-| t	|}||| W d   n1 sVw   Y  | 
t|t|j W Y d}~q,d}~ww | |||| q,dS )	zITest that a numba slice returns same result for .indices as a python one.rF   r   rH   Tr/   N)r   r   r   r   r[   r   r    rc   r=   rd   r`   rX   ra   r"   )	r,   sliceslengthsr+   r   r   rN   rj   ri   r   r   r   test_slice_indices   s2   
zTestSlices.test_slice_indicesc                 C   s   t ddt}| t}|tdddd W d   n1 s w   Y  | dt|j | t}|tdddd	 W d   n1 sGw   Y  | d
td	 t|j dS )zTests for specific error cases.Tr/   Nr.   rG   rH   z.indices() takes exactly one argument (3 given)r   g333333?z/'%s' object cannot be interpreted as an integer)	r   r    r=   r
   r   r`   rX   ra   r	   )r,   cslice_indicesr'   r   r   r   test_slice_indices_examples   s   
z&TestSlices.test_slice_indices_examplesc                    sZ   d t g dg dg dD ]t tdd fdd}| | |  qd S )N)r.   rG   rH      )Nr.   rG   rH   )Nr.   rG   r4   rm   Tr/   c                      s     S r   r   r   
test_tupletsr   r   test_fn      z4TestSlices.test_slice_from_constant.<locals>.test_fn)r<   r   r   r   assertEqualpy_func)r,   rw   r   rt   r   test_slice_from_constant   s   z#TestSlices.test_slice_from_constantc                 C   sX   t jtdd d }t jtd d d }t jtdd d }| || | || d S r7   )r   miscSliceLiteralr   assertNotEqualry   )r,   sl1sl2sl3r   r   r   test_literal_slice_distinct   s
   z&TestSlices.test_literal_slice_distinctc                 C   st   t dd }tdddtddtdtd ddtdd dtd d dtd td d d f}|D ]
}| ||| q-d S )Nc                 S      t | S r   r   )xr   r   r   r(      rx   z/TestSlices.test_literal_slice_boxing.<locals>.fr.   rs   rG   )r   r   ry   )r,   r(   rn   r   r   r   r   test_literal_slice_boxing   s   






z$TestSlices.test_literal_slice_boxingc                    s.   t ddd t fdd}|  |  d S )Nr.   rG   rH   c                      s    S r   r   r   zr   r   foo   s   z2TestSlices.test_literal_slice_freevar.<locals>.foo)r   r   ry   )r,   r   r   r   r   test_literal_slice_freevar   s   z%TestSlices.test_literal_slice_freevarc                 C   sl   t  dd }td}| t}|td d | d  W d    n1 s&w   Y  | dt|j d S )Nc                 S   r   r   r   r   r   r   r   r      rx   z1TestSlices.test_literal_slice_maxint.<locals>.fool            r.   zInt value is too large)r   intr=   
ValueErrorr   r`   rX   ra   )r,   r   maxvalr'   r   r   r   test_literal_slice_maxint   s   
z$TestSlices.test_literal_slice_maxintN)__name__
__module____qualname__rD   rQ   rk   rp   rr   r{   r   r   r   r   r   r   r   r   r!      s    $-
r!   __main__)	functoolsr   r<   r   r   r   r:   numpyrK   numbar   r   r   r	   r
   
numba.corer   r   numba.tests.supportr   r   numba.core.types.functionsr   unittestr   r   r   r    r!   r   mainr   r   r   r   <module>   s&     f