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   f/var/www/html/eduruby.in/lip-sync/lip-sync-env/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)sZ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Znopython))Nr   *   r0   r2   N)	   r3   )r4   Nr-   )   r6   r/   r1   )r7   g      ?)	sysmaxsizer   r   	itertoolsr   assertRaises	TypeErrorr   )r+   r,   	maxposint	maxnegintZstart_casesZ
stop_casesZ
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   rA   r-   )NN)r-   N))N   )r   rB   r-   ))r-   rB   )r-   rB   r-   )NN   rC   ))NrB   rC   )r   rB   rC   )r-   NrC   )r-   rB   rC   rD   )NNr2   r2   )r@   Nr2   )NrA   r2   rA   )r@   rA   r2   rE   N)r8   r9   nparanger   r   r   r!   )r+   r=   r>   r"   r*   Z	cfunc_user   expectedr(   usageZ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.
        )Nr2   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>rA   r@   Tr.   z7slice expected at (most|least) (3|1) arguments?, got {}Nz, c                 s   s    | ]	}t t|V  qd S r   )strr	   )rL   argr   r   r   rP      s    )r   from_iterablerangerF   rG   r   r   Zdisable_leak_checkr<   lenZassertRegexpMatchesrQ   formatr;   r
   assertInr   	exceptionjoin	Exceptiontyper!   )
r+   Z	arg_casesarrayr*   r   rH   Z	py_type_eZn_argsnumba_epy_er   rN   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.rA   r   rC   Tr.   N)r   r   r   r   rT   r   r   rZ   r;   r[   rW   rQ   rX   r!   )	r+   sliceslengthsr*   r   r   rH   r^   r]   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-   rB   rC   z.indices() takes exactly one argument (3 given)r   g333333?z/'%s' object cannot be interpreted as an integer)	r   r   r;   r
   r   rW   rQ   rX   r	   )r+   Z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-   rB   rC      )Nr-   rB   rC   )Nr-   rB   r2   ra   Tr.   c                      s     S r   r   r   Z
test_tupletsr   r   test_fn      z4TestSlices.test_slice_from_constant.<locals>.test_fn)r:   r   r   r   assertEqualZpy_func)r+   ri   r   rg   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 r5   )r   miscZSliceLiteralr   ZassertNotEqualrk   )r+   Zsl1Zsl2Z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'      rj   z/TestSlices.test_literal_slice_boxing.<locals>.fr-   rf   rB   )r   r   rk   )r+   r'   rb   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-   rB   rC   c                      s    S r   r   r   zr   r   foo   s   z2TestSlices.test_literal_slice_freevar.<locals>.foo)r   r   rk   )r+   ru   r   rs   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   ro   r   rp   rs   r   r   r   ru      rj   z1TestSlices.test_literal_slice_maxint.<locals>.fool            r-   zInt value is too large)r   intr;   
ValueErrorr   rW   rQ   rX   )r+   ru   maxvalr&   r   r   r   test_literal_slice_maxint   s   
z$TestSlices.test_literal_slice_maxintN)__name__
__module____qualname__r?   rJ   r_   rd   re   rl   rn   rr   rv   rz   r   r   r   r   r       s    $-
r    __main__)	functoolsr   r:   r   r   r   r8   numpyrF   Znumbar   r   r   r	   r
   Z
numba.corer   r   Znumba.tests.supportr   r   Znumba.core.types.functionsr   Zunittestr   r   r   r   r    r{   mainr   r   r   r   <module>   s&     f