U
    Ã9%e9F  ã                   @   s¬   d dl Z d dlZd dlZd dlmZmZmZ d dlm	Z	 d dl
mZ d dlmZmZ dd„ Zdd	„ Zd
d„ Zdd„ ZG dd„ deeƒZG dd„ deeƒZedkr¨e ¡  dS )é    N)ÚjitÚtypeofÚnjit)Útypes)ÚTypingError)ÚMemoryLeakMixinÚTestCasec                 C   s   | | S ©N© )ÚaÚbr
   r
   ú^/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/tests/test_fancy_indexing.pyÚgetitem_usecase   s    r   c                 C   s   || |< d S r	   r
   )r   Úidxr   r
   r
   r   Úsetitem_usecase   s    r   c                 C   s   t  | |¡S r	   ©ÚnpZtake)ÚAÚindicesr
   r
   r   Únp_take   s    r   c                 C   s   t j| ||dS )N©Úaxisr   )r   r   r   r
   r
   r   Únp_take_kws   s    r   c                   @   s”   e Zd Zd#dd„Zd$dd„Zd%dd„Zd&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 d!„ Zd"S )'ÚTestFancyIndexingTc                 C   sH   t  d|d dg¡g}|rD|t  dd|d g¡t  ddddg¡g7 }|S )Nr   é   éþÿÿÿ)r   Zint16Zuint16Zbool_)ÚselfÚNÚmanyÚchoicesr
   r
   r   Úgenerate_advanced_indices   s    ÿz+TestFancyIndexing.generate_advanced_indicesc              	   c   s¤   |rVt dddƒt d|d dƒt dddƒt |d ddƒt | d ddƒt d| dƒg}nt d|d dƒt d| dƒg}t|d ƒD ]}tj||dD ]
}|V  q’q€dS )zG
        Generate basic index tuples with 0 to *maxdim* items.
        Nr   r   é   r   éÿÿÿÿ)Úrepeat)ÚsliceÚrangeÚ	itertoolsÚproduct)r   r   Úmaxdimr   r   ÚndimÚtupr
   r
   r   Úgenerate_basic_index_tuples!   s    

ûÿz-TestFancyIndexing.generate_basic_index_tuplesc                 c   sj   t | j||dƒ}t|d ƒD ]F}|  ||d |¡D ].}|D ]$}|d|… |f ||d…  V  q<q4qdS )z‚
        Generate advanced index tuples by generating basic index tuples
        and adding a single advanced index item.
        ©r   r   N)Úlistr    r%   r+   )r   r   r(   r   r   Úir*   Zadvr
   r
   r   Úgenerate_advanced_index_tuples8   s
    z0TestFancyIndexing.generate_advanced_index_tuplesc                 c   sN   |   |||¡D ]:}tt|ƒd ƒD ]$}|d|… tf ||d…  V  q"qdS )zr
        Same as generate_advanced_index_tuples(), but also insert an
        ellipsis at various points.
        r   N)r/   r%   ÚlenÚEllipsis)r   r   r(   r   r*   r.   r
   r
   r   Ú,generate_advanced_index_tuples_with_ellipsisE   s    z>TestFancyIndexing.generate_advanced_index_tuples_with_ellipsisc           
      C   s    t }tdd|ƒ}| ¡ }|jp"|}|D ]r}|||ƒ}|j|k	sDt‚|||ƒ}	|  |	j|j¡ |  |	j|j¡ tj	 
|	|¡ |	jr(|	 d¡ tj	 
||¡ q(d S )NT©Znopythoné*   )r   r   ÚcopyÚbaseÚAssertionErrorÚassertEqualÚshapeÚdtyper   ÚtestingÚassert_equalÚsizeÚfill)
r   Úarrr   ÚpyfuncÚcfuncÚorigÚ	orig_baseÚindexÚexpectedÚgotr
   r
   r   Úcheck_getitem_indicesN   s    



z'TestFancyIndexing.check_getitem_indicesc                 C   sF   d}d}t  || ¡ |f| ¡ t j¡}|  ||¡}|  ||¡ d S ©Né   é   )r   ÚarangeÚreshapeÚastypeÚint32r/   rG   ©r   r   r)   r?   r   r
   r
   r   Útest_getitem_tupled   s
    "z$TestFancyIndexing.test_getitem_tuplec                 C   sJ   d}d}t  || ¡ |f| ¡ t j¡}| j||dd}|  ||¡ d S ©NrI   rJ   Fr,   )r   rK   rL   rM   rN   r2   rG   rO   r
   r
   r   Útest_getitem_tuple_and_ellipsism   s    "ÿz1TestFancyIndexing.test_getitem_tuple_and_ellipsisc                 C   s>   t dddd„ ƒ}t d¡}||dƒ |  |d |d ¡ d S )NTr3   c                 S   s   | d | d< d S )N).r   ).r   r
   )r?   Úvr
   r
   r   Úfooy   s    z7TestFancyIndexing.test_ellipsis_getsetitem.<locals>.foor!   r   r   )r   r   rK   r8   )r   rT   r?   r
   r
   r   Útest_ellipsis_getsetitemw   s
    


z*TestFancyIndexing.test_ellipsis_getsetitemc                 C   sD   d}d}t  || ¡ |f| ¡ t j¡}|  |¡}|  ||¡ d S rH   )r   rK   rL   rM   rN   r    rG   rO   r
   r
   r   Útest_getitem_array   s
    "
z$TestFancyIndexing.test_getitem_arrayc           	      C   s‚   t }tdd|ƒ}|D ]f}|| }t |¡}t |¡}||||ƒ ||||ƒ |  |j|j¡ |  |j|j¡ tj ||¡ qd S )NTr3   )	r   r   r   Ú
zeros_liker8   r9   r:   r;   r<   )	r   r?   r   r@   rA   rD   ÚsrcrE   rF   r
   r
   r   Úcheck_setitem_indices‰   s    

z'TestFancyIndexing.check_setitem_indicesc                 C   sF   d}d}t  || ¡ |f| ¡ t j¡}|  ||¡}|  ||¡ d S rH   )r   rK   rL   rM   rN   r/   rY   rO   r
   r
   r   Útest_setitem_tuple™   s
    "z$TestFancyIndexing.test_setitem_tuplec                 C   sJ   d}d}t  || ¡ |f| ¡ t j¡}| j||dd}|  ||¡ d S rQ   )r   rK   rL   rM   rN   r2   rY   rO   r
   r
   r   Útest_setitem_tuple_and_ellipsis¡   s    "ÿz1TestFancyIndexing.test_setitem_tuple_and_ellipsisc                 C   sH   d}d}t  || ¡ |f| ¡ t j¡d }|  |¡}|  ||¡ d S )NrI   rJ   é
   )r   rK   rL   rM   rN   r    rY   rO   r
   r
   r   Útest_setitem_array«   s
    &
z$TestFancyIndexing.test_setitem_arrayc                 C   s  t }tdd|ƒ}t d¡t d¡ft d¡t d¡ftjdtjdtjdtjdftjdtjdtjdtjdftjdd	dt d
¡ftjdd	dt d¡ftjd
ddgd	dtjdddftjdtdtjdtdfg}|D ]4\}}| ¡ }||d|ƒ ||d|ƒ |  	||¡ qàd S )NTr3   rJ   g…ëQ¸	@r!   ©r:   r   é   z<U3Úabc)rJ   r   ÚdefZghiZWXYZz<U4y       @      @r   )
r   r   r   ZzerosÚarrayÚint64Zfloat64Úcomplexr5   ÚassertPreciseEqual)r   r@   rA   ZinpsÚx1rS   Zx2r
   r
   r   Útest_setitem_0d³   s$    ÿ÷z!TestFancyIndexing.test_setitem_0dc           
   
      sÄ  t ‰tddˆƒ‰ ‡ ‡‡fdd„}g }| d¡ | t dddddg¡¡ | t dgdggdgdggg¡¡ | dddddg¡ | d	¡ | d
¡ tjtjfD ],}tjd|d d¡}|D ]}|||ƒ q¾q¢|j	}|| d t |¡t | d ¡|g| d gg}|D ]&}ˆ 
t¡ ˆ ||ƒ W 5 Q R X qˆ 
t¡ ˆ |dgƒ W 5 Q R X ˆ 
t¡  tddtƒ}	|	|ddƒ W 5 Q R X ˆ 
t¡" tddtƒ}	|	|ddd W 5 Q R X ˆ ¡  d S )NTr3   c                    s@   ˆ| |ƒ}ˆ | |ƒ}ˆ  ||¡ t|dƒr<ˆ |j|jk¡ d S )NÚorder)re   Úhasattrr8   rh   )r?   ÚindrE   rF   ©rA   r@   r   r
   r   ÚcheckÏ   s
    


z-TestFancyIndexing.test_np_take.<locals>.checkr   r_   é   rJ   ©r   r_   r   )rn   )rm   rJ   r!   é   r^   )rI   rJ   g333333û?r   )r   r   Úappendr   rb   rc   Z
complex128rK   rL   r=   ÚassertRaisesÚ
IndexErrorr   r   Zdisable_leak_check)
r   rl   Ztest_indicesÚdtr   rj   ZszAZillegal_indicesÚxZtake_kwsr
   rk   r   Útest_np_takeÊ   s>    
$

  
ÿzTestFancyIndexing.test_np_takec                 C   sî  t dd„ ƒ}t dd„ ƒ}t d¡ d¡}td ƒtjftjtd ƒftdƒtjt dddg¡ftjt dddg¡td ƒftdƒttjt dddg¡ft dddg¡tjtftjtdƒtjt dddg¡ft dddg¡td tjftjtdƒttjt dddg¡ft dddg¡tjtjtftjt dddg¡tjtftd	ƒt dddg¡tjd ftjt dddg¡td fg}|j}|}|j}|}|D ]h}	|||	ƒ}
|||	ƒ}tj	 
|
|¡ t |¡}||	 }|| ¡ |	|ƒ}
|| ¡ |	|ƒ}tj	 
|
|¡ q€d S )
Nc                 S   s   | | S r	   r
   )r   r   r
   r
   r   Únp_new_axis_getitem  s    z;TestFancyIndexing.test_newaxis.<locals>.np_new_axis_getitemc                 S   s   || |< | S r	   r
   )r   r   Úitemr
   r
   r   Únp_new_axis_setitem  s    z;TestFancyIndexing.test_newaxis.<locals>.np_new_axis_setitemiH  )rI   r_   é   é   r   r!   rJ   )r   r   rK   rL   r$   Znewaxisrb   r1   Úpy_funcr;   r<   rW   r5   )r   rv   rx   r   Z	idx_casesZpyfunc_getitemZcfunc_getitemZpyfunc_setitemZcfunc_setitemr   rE   rF   Za_emptyrw   r
   r
   r   Útest_newaxis  s@    

 ó


zTestFancyIndexing.test_newaxisN)T)T)T)T)Ú__name__Ú
__module__Ú__qualname__r    r+   r/   r2   rG   rP   rR   rU   rV   rY   rZ   r[   r]   rg   ru   r|   r
   r
   r
   r   r      s    



		


9r   c                       sP  e Zd ZdZeddƒde dddddg¡dfde dddddg¡edƒedƒfede dddddg¡fe dddddg¡defede dddddg¡deddƒfe dddddg¡deeddƒfeddƒde d	d
d	d
d	d
d
g¡dfde d	d
d	d
d	d
g¡edƒedƒfgZ‡ fdd„Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚTestFancyIndexingMultiDim)r_   ry   rz   é   é	   r\   rI   r_   rJ   r   r   r!   NTFc                    s   t ƒ  ¡  tj d¡| _d S )Nr   )ÚsuperÚsetUpr   ÚrandomZdefault_rngÚrng)r   ©Ú	__class__r
   r   r„   I  s    
zTestFancyIndexingMultiDim.setUpc                 C   s   t | jƒ}td d d ƒtd|d d ƒtdd dƒt|d d dƒt| d dd ƒtd| dƒtd|d d ƒtd| dƒg}tt |¡ƒ}g }d}t|ƒD ]L}| jjdddd	}| jj	|d
d	 
¡ }| j 	d
¡}	|||	< | t|ƒ¡ q’t|ƒD ]L}| jjdddd	}| jj	|d
d	 
¡ }| j 	d
¡}	|||	< | t|ƒ¡ qèt|ƒD ]d}| jjdddd	}| jj	|d
d	 
¡ }| jj	d
ddd}	|||	d < t||	d < | t|ƒ¡ q>t|ƒD ]n}| jjdddd	}| jj	|d
d	 
¡ }| j 	d
¡}	| j|	 }
tj| jj	d|
d	td||	< | t|ƒ¡ q¬|S )Nr   r   r!   r   r"   é   r_   é   ©r=   rI   F)r=   Úreplacer^   )Úminr9   r$   r-   r   rK   r%   r†   ZintegersÚchoiceÚtolistrp   Útupler1   rb   Úbool)r   r   Zslice_choicesZinteger_choicesr   ÚKÚ_Z	array_idxZcurr_idxZ
_array_idxZbool_arr_shaper
   r
   r   Úgenerate_random_indicesM  sV    


ù	
þ
z1TestFancyIndexingMultiDim.generate_random_indicesc           	      C   s”   t dd„ ƒ}tjjdd|d}|j}|jp,|}|||ƒ}|||ƒ}|  |j|¡ |  |j|j¡ |  |j	|j	¡ tj
 ||¡ |  t ||¡¡ d S )Nc                 S   s   | | S r	   r
   )rb   r   r
   r
   r   Únumba_get_itemŽ  s    zGTestFancyIndexingMultiDim.check_getitem_indices.<locals>.numba_get_itemr   rm   r‹   )r   r   r…   Úrandintr{   r6   ZassertIsNotr8   r9   r:   r;   r<   ZassertFalseZmay_share_memory)	r   Ú	arr_shaperD   r•   r?   Zget_itemrC   rE   rF   r
   r
   r   rG     s    



z/TestFancyIndexingMultiDim.check_getitem_indicesc                 C   s†   t dd„ ƒ}tjjdd|d}|| }t |¡}t |¡}| |||¡ ||||ƒ |  |j|j¡ |  |j|j¡ tj	 
||¡ d S )Nc                 S   s   || |< d S r	   r
   )rb   r   rw   r
   r
   r   Úset_item¥  s    zATestFancyIndexingMultiDim.check_setitem_indices.<locals>.set_itemr   rm   r‹   )r   r   r…   r–   rW   r{   r8   r9   r:   r;   r<   )r   r—   rD   r˜   r?   rX   rE   rF   r
   r
   r   rY   ¤  s    


z/TestFancyIndexingMultiDim.check_setitem_indicesc              
   C   sJ   | j  ¡ }||  ¡ 7 }|D ]*}| j|d |  | j|¡ W 5 Q R X qd S ©N)r   )Úindexing_casesr5   r”   ÚsubTestrG   r9   ©r   r   r   r
   r
   r   Útest_getitem¸  s
    
z&TestFancyIndexingMultiDim.test_getitemc              
   C   sJ   | j  ¡ }||  ¡ 7 }|D ]*}| j|d |  | j|¡ W 5 Q R X qd S r™   )rš   r5   r”   r›   rY   r9   rœ   r
   r
   r   Útest_setitemÃ  s
    
z&TestFancyIndexingMultiDim.test_setitemc              
   C   sª   dddt  ddgddgg¡ffdddt  ddg¡t  ddg¡ffddt  ddg¡td ƒddffg}|D ]>\}}|  t¡}|  | j|¡ W 5 Q R X |  |t|j	ƒ¡ qfd S )	Nz,Multi-dimensional indices are not supported.r   rJ   r   r!   z:Using more than one non-scalar array index is unsupported.z›Using more than one indexing subspace is unsupported. An indexing subspace is a group of one or more consecutive indices comprising integer or array types.rI   )
r   rb   r$   rq   r   rG   r9   ZassertInÚstrÚ	exception)r   Zerr_idx_casesÚerrr   Zraisesr
   r
   r   Ú%test_unsupported_condition_exceptionsÎ  s"    ÿÿý÷þz?TestFancyIndexingMultiDim.test_unsupported_condition_exceptions)r}   r~   r   r9   r$   r   rb   r1   rš   r„   r”   rG   rY   r   rž   r¢   Ú__classcell__r
   r
   r‡   r   r€   0  s.    "" 
þ ÿï@r€   Ú__main__)r&   Únumpyr   ZunittestZnumbar   r   r   Z
numba.corer   Znumba.core.errorsr   Znumba.tests.supportr   r   r   r   r   r   r   r€   r}   Úmainr
   r
   r
   r   Ú<module>   s"      8