a
    jUb*=  ã                   @   sô   d dl Z d dlmZ d dlZd dlmZ d dlm  mZ d dl	m
Z
 ejZG dd„ dƒZedkrðdZd	e Zd
\ZZeddƒD ]nZde Ze  ee¡ eed ¡Ze e¡Zede d ƒ eede ƒƒ eded  d›ded d›ƒ q€dS )é    N)Úreduce)Úfloat_)Úbuild_err_msgc                   @   sð   e Zd Zdd„ Zd dd„Zd!dd„Zejd	d
dd„ ƒZejd	d
dd„ ƒZ	ejd	d
dd„ ƒZ
ejd	d
dd„ ƒZejd	d
dd„ ƒZejd	d
dd„ ƒZejd	d
dd„ ƒZejd	d
dd„ ƒZejd	d
dd„ ƒZejd	d
dd„ ƒZdS )"ÚModuleTesterc                 C   s  || _ |j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j	| _	t
| _
|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _z|j| _W n tyü   |jj| _Y n0 g | _d S ©N)ÚmoduleÚallequalÚarangeÚarrayÚconcatenateÚcountÚequalÚfilledÚgetmaskZgetmaskarrayÚidÚinnerÚ	make_maskÚmaskedÚmasked_arrayÚmasked_valuesÚmask_orÚnomaskÚonesÚouterÚrepeatÚresizeÚsortÚtakeÚ	transposeÚzerosZMaskTypeÚumathÚAttributeErrorÚcoreZ	testnames)Úselfr   © r$   ú8lib/python3.9/site-packages/numpy/ma/timer_comparison.pyÚ__init__   s@    zModuleTester.__init__Ú Tc              
   C   sD  |   |¡}|   |¡}|  |  |¡|  |¡¡}	|   | j||	d|¡}|   | j||	d|¡}|jjdkr¢| t¡}t|t	j
ƒr”|jdkr”d|t	 |¡< nt	 |¡r¢d}|jjdkrì| t¡}t|t	j
ƒrÞ|jdkrÞd|t	 |¡< nt	 |¡rìd}z|jdkp|jdkp|j|jk}
|
sRt||g|d|j› d|j› d |d	d
}|
sRJ |ƒ‚|||ƒ}|	| jur||r|| j||	d}t|tƒr”|}
dg}n| ¡ }| ¡ }
| ¡ }|
sødd| d¡ t|ƒ  }t||g|d|f  |d	d
}|
søJ |ƒ‚W nD ty> } z*t||g||d	d
}t|ƒ|‚W Y d}~n
d}~0 0 dS )zZ
        Assert that a comparison of two masked arrays is satisfied elementwise.

        ©ÚmaskÚOé   r   r$   z	
(shapes z, z
 mismatch)©ÚxÚy)ÚheaderÚnameséd   g      Y@z
(mismatch %s%%)N)r   r   r   r   ÚdtypeÚcharÚastyper   Ú
isinstanceÚnpZndarrayÚsizeZisnanÚshaper   r   ÚboolZravelÚallÚtolistr   ÚlenÚ
ValueError)r#   Z
comparisonr-   r.   Úerr_msgr/   Z
fill_valueÚxfZyfÚmZcondÚmsgÚvalZreducedÚmatchÚer$   r$   r%   Úassert_array_compare0   sd    





$ÿü
ÿüz!ModuleTester.assert_array_comparec                 C   s   | j | j|||dd dS )zH
        Checks the elementwise equality of two masked arrays.

        zArrays are not equal)r>   r/   N)rE   r   )r#   r-   r.   r>   r$   r$   r%   Úassert_array_equalg   s    ÿzModuleTester.assert_array_equalÚignore)r:   c                 C   sH   t  ddddtd dddddddg¡}g d	¢}| j||d
}|d  dS )ú!
        Tests creation

        ç      ð?ç       Àç       @ç      @ç      @ç      $Àç      $@ç      @©r+   r   r   r   r   r   r+   r   r   r   r   r   r(   r   N)r6   r
   Úpir   )r#   r-   r@   Úxmr$   r$   r%   Útest_0o   s    &zModuleTester.test_0c           	      C   s   t  ddddtd dddddddg¡}t  g d	¢¡}g d
¢}g d¢}| j||d}| j||d}t  |d|¡}| d¡ ||  d¡ ¡ sŽJ ‚|j}|j	t
dd„ |ƒks¬J ‚|  |¡t|ƒt
dd„ |ƒ ksÐJ ‚dD ]F}||_||_||_||_||_|  |¡t|ƒt
dd„ |ƒ ksÔJ ‚qÔdS )rH   rI   rJ   rK   rL   rM   rN   rO   rP   )rM   ç        rP   rK   g      ð¿g      ÀrU   rN   rO   rI   rU   rP   rQ   )r   r   r+   r   r   r+   r+   r   r   r   r   r+   r(   g@Œµx¯Dr   c                 S   s   | | S r   r$   r,   r$   r$   r%   Ú<lambda>‹   ó    z%ModuleTester.test_1.<locals>.<lambda>c                 S   s   | | S r   r$   r,   r$   r$   r%   rV   Œ   rW   ))é   é   )é   é   c                 S   s   | | S r   r$   r,   r$   r$   r%   rV   ”   rW   N)r6   r
   rR   r   ÚwhereZset_fill_valuer   Úanyr8   r7   r   r   r<   )	r#   r-   r.   Úm1Úm2rS   Zymr?   Úsr$   r$   r%   Útest_1z   s&    &
$zModuleTester.test_1c           	      C   sÂ  t  g d¢¡}| j|g d¢d}| j|g d¢d}|  |¡}t|ƒ t|ƒ t|d ƒt|d ƒu shJ ‚|d |d ks|J ‚d|d< d|d< |  ||¡ d|dd	…< d|dd	…< | j|d< | j|dd	…< ||d
d
…< | j|d< |  g d¢g d¢¡|d
d
…< |  g d¢g d¢¡|d
d
…< t  d¡d }|  	|d¡}|  g d¢t
¡}t  g d¢t
¡}|d  |d  |dd… jdksxJ ‚g d¢}|  |¡}|  |¡}||u s¢J ‚| j|dd}||us¾J ‚d
S )z2
        Tests conversions and indexing.

        )r+   r[   rX   rY   ©r+   r   r   r   r(   )r   r+   r   r+   r+   é	   r[   éc   rY   N)r+   r[   rY   rX   )r   r+   r+   r   é   rI   rP   )r+   Zhellor[   rY   )r   )r   r   r+   r   r   )Úcopy)r6   r
   ÚstrÚreprÚtyperF   r   r   r	   r   Úobjectr8   r   )	r#   Zx1Zx2Zx3Úx4Únr@   r_   Úm3r$   r$   r%   Útest_2–   s@    




zModuleTester.test_2c                 C   sÒ   |   d¡}| j|d< |  |d¡}|  |  ||g¡|¡s:J ‚|  |  |¡g d¢¡sTJ ‚| j|ddd}|  |g d¢¡ | j|ddd}|  ||¡s”J ‚|jddd}|  ||¡s²J ‚| dd¡}|  ||¡sÎJ ‚d	S )
z&
        Tests resize/repeat

        rX   r[   )é   )r   r   r+   r   r   r   r+   r   )r[   r[   r[   r[   r   ©Úaxis)r   r   r+   r+   r[   r[   rY   rY   N)r	   r   r   r   r   r   r   rF   )r#   rk   Zy4Zy5Zy6Zy7Zy8r$   r$   r%   Útest_3Á   s    

zModuleTester.test_3c              	   C   sF  |   d¡}t  d¡}| j|dd…< | ddd¡}| ddd¡}|  t |d¡|  |d¡¡s^J ‚|  t |dd¡|  |dd¡¡s‚J ‚|  t |  |d	¡|  |d	¡¡|  ||¡¡s²J ‚|  t 	|  |d	¡|  |d	¡¡|  	||¡¡sâJ ‚|  
g d
¢t¡}| j|d< |  |g d¢¡}|d	 dksJ ‚|d dks0J ‚|d dksBJ ‚dS )zB
        Test of take, transpose, inner, outer products.

        é   re   rZ   r[   rY   rX   )r[   r   r+   r+   r   )Úabcr+   Údefr[   rY   )r   rY   rX   rt   N)r	   r6   r   Úreshaper   r   r   r   r   r   r
   rj   )r#   r-   r.   Útr$   r$   r%   Útest_4Õ   s&    

 $
ÿ
ÿ
zModuleTester.test_4c                 C   s  |   d¡}|   d¡}|   d¡}| j|d< |d7 }|  ||d ¡sDJ ‚|d7 }|  ||d ¡s`J ‚|   d¡}|   d¡}| j|d< |d8 }|  ||d ¡sšJ ‚|d8 }|  ||d ¡s¶J ‚|   d¡d }|   d¡d }| j|d< |d9 }|  ||d ¡søJ ‚|d9 }|  ||d ¡sJ ‚|   d¡d }|   d¡d }| j|d< |d }|  ||¡sVJ ‚|d }|  ||¡spJ ‚|   d¡d }|   d¡d }| j|d< |d }|  ||d ¡s´J ‚||   d¡ }|  ||  d¡¡ |   d¡ t¡}|   d¡}| j|d< |d7 }|  ||d ¡sJ ‚dS )z*
        Tests inplace w/ scalar

        é
   r[   r+   rI   rK   )ry   N)r	   r   r   rF   r   r4   r   )r#   r-   r.   rS   r$   r$   r%   Útest_5í   sR    











zModuleTester.test_5c                 C   s6  | j dtd}|   d¡}| j dtd}| j|d< |j}| j dtd}| j|d< ||7 }||7 }|  ||| ¡srJ ‚|  ||| ¡s†J ‚|  |j|  ||j¡¡s¢J ‚| j dtd}| j dtd}| j|d< |j}| j dtd}| j|d< ||8 }||8 }|  ||| ¡sJ ‚|  ||| ¡s"J ‚|  |j|  ||j¡¡s@J ‚| j dtd}| j dtd}| j|d< |j}| j dtd}| j|d< ||9 }||9 }|  ||| ¡sªJ ‚|  ||| ¡sÀJ ‚|  |j|  ||j¡¡sÞJ ‚| j dtd}| j dtd}| j|d< |j}| j dtd}| j|d< || }|| }dS )z)
        Tests inplace w/ array

        ry   )r2   r[   éÿÿÿÿN)r	   r   r   r)   r   r   )r#   r-   r.   rS   r@   Úar$   r$   r%   Útest_6"  sT    








zModuleTester.test_6c              	   C   sè   | j dddtd gd ddgdgd  d| j dddtd gd ddgdgd  df}dD ]†}zt| j|ƒ}W n tyŒ   tt|ƒ}Y n0 t| j|ƒ}|d	|j… }||Ž }||Ž }|  | 	d¡| 	d¡|¡ |  |j
|j
¡ q\d	S )
zTests ufuncrI   r   r{   r[   r+   rZ   r(   )ZsqrtÚlogZlog10ZexpÚ	conjugateN)r
   rR   Úgetattrr    r!   Úfromnumericr   ZninrF   r   Z_mask)r#   ÚdÚfZufZmfÚargsZurZmrr$   r$   r%   Útest_7V  s    **ÿzModuleTester.test_7c              	   C   sÀ  | j g d¢g d¢d}|  d| j|dd¡ |  d| j|g d¢d¡ | j|g d¢d	d
\}}|  d|¡ |dksvJ ‚| j|d d …< | j|dd| ju sœJ ‚| j g d¢g d¢d}| dd¡}| j|d d …d	f< |  | j|ddddg¡ | j|d	dd | ju sJ ‚|  ddg| j|dd¡ | j|dd	d\}}|  |ddg¡ g d¢}g d¢g d¢g}|  d¡}|  | j|ddd¡ |  | j|d|dd¡ |   |  d¡d|  d¡ g¡}|  |  |d ¡tj t d¡¡d d ¡ |  | j|ddt d¡d d ¡ |  | j|d	d| j|dd| j|ddd g¡ |  | j|d |dd¡ |  | j|d|dg d¢¡ |  | j|d	d| j|dd| j|ddd g¡ |  	d¡}g d¢}	g d¢g d¢g}
|  
d¡}g d¢}|  | j|  ||¡ddd¡ |  | j|  ||	¡ddd¡ |  | j|  ||¡ddd¡ |  |  | j|  ||¡dd¡d¡ |  ||
¡}|  |  |d ¡d¡ |  | j|ddg d¢¡ |  | j|d	dddg¡ |  | j|d|dg d¢¡ d S )N)rU   rI   rK   rP   rb   r(   rK   r   rp   )rI   rI   rK   rI   )Úweightsr+   )r†   ÚreturnedrL   r[   rU   )rq   r‡   rI   )r   r+   r+   r+   r+   r   )r+   r   r   r   r   r+   rZ   g      @)rq   r†   rP   g      (@g«ªªªªª
@)rU   rI   rK   rP   rL   rO   )r   r   r+   r+   r   r   )r   r+   r+   r+   r+   r+   )rU   rI   ç     ÀX@rˆ   rL   g      @rM   )rU   rI   rˆ   rˆ   rL   rO   )r
   rF   Zaverager   rv   r	   r6   Úaddr   r   r   r   r   )r#   ZottÚresultZwtsZw1Zw2r-   r.   r^   r_   rm   Zm4Zm5Úzr$   r$   r%   Útest_99y  sT    
*$22

$zModuleTester.test_99c                 C   s*   |   d¡}| j|dd…< | ddd¡}d S )Nrs   re   rZ   r[   rY   rX   )r	   r   rv   )r#   r-   r$   r$   r%   Útest_A§  s    
zModuleTester.test_AN)r'   r'   T)r'   )Ú__name__Ú
__module__Ú__qualname__r&   rE   rF   r6   ZerrstaterT   ra   rn   rr   rx   rz   r}   r…   rŒ   r   r$   r$   r$   r%   r      s2   "  ÿ
7







*





4

3

"

-
r   Ú__main__zNfrom __main__ import ModuleTester 
import numpy
tester = ModuleTester(module)
zimport numpy.ma.core as module
)ry   ry   r+   ro   ztester.test_%i()ry   z#%iz2..................................................zModuleTester.test_%i.__doc__zcore_current : z.3fz - )ZtimeitÚ	functoolsr   Znumpyr6   r   Znumpy.core.fromnumericr"   r   Znumpy.testingr   rR   r   rŽ   Z
setup_baseZ	setup_curZnrepeatZnloopÚrangeÚiÚfuncZTimerr   Zcurr   ÚprintÚevalr$   r$   r$   r%   Ú<module>   s*      $
