B
    öàn\â<  ã               @   s  d dl mZmZmZ 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dd ejZG dd	„ d	eƒZed
krdZde Zd\ZZxteddƒD ]fZ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  ed f ƒ q¦W dS )é    )ÚdivisionÚabsolute_importÚprint_functionN)Úreduce)Úfloat_)Úbuild_err_msgÚignore)Úallc               @   sx   e Zd Z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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| _y|j| _W n tk
rþ   |jj| _Y nX 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.7/site-packages/numpy/ma/timer_comparison.pyÚ__init__   s@    zModuleTester.__init__Ú Tc          	   C   s,  |   |¡}|   |¡}|  |  |¡|  |¡¡}	|   | 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}y|jdkp|jdkp|j|jk}
|
sLt||g|d|j|jf  |dd}|
sLt|ƒ‚|||ƒ}|	| jk	rv|rv| j||	d}t|tƒrŽ|}
dg}n| ¡ }| ¡ }
| ¡ }|
sòd	d
| d¡ t|ƒ  }t||g|d|f  |dd}|
sòt|ƒ‚W n2 tk
r&   t||g||dd}t|ƒ‚Y nX dS )zZ
        Assert that a comparison of two masked arrays is satisfied elementwise.

        )ÚmaskÚOé   r   r(   z
(shapes %s, %s 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   ÚAssertionErrorr   ÚboolZravelr	   Útolistr   ÚlenÚ
ValueError)r'   Z
comparisonr/   r0   Úerr_msgr1   Z
fill_valueÚxfZyfÚmZcondÚmsgÚvalZreducedÚmatchr(   r(   r)   Úassert_array_compare5   s^    





$


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@   r1   N)rF   r   )r'   r/   r0   r@   r(   r(   r)   Úassert_array_equalm   s    zModuleTester.assert_array_equalc             C   s\   t  ddddtd dddddddg¡}d	d
d
d
d
d
d	d
d
d
d
d
g}| j||d}|d
  dS )z!
        Tests creation

        g      ð?g       Àg       @g      @g      @g      $Àg      $@g      @r.   r   )r,   N)r8   r   Úpir   )r'   r/   rB   Úxmr(   r(   r)   Útest_0u   s    &zModuleTester.test_0c       	      C   sf  t  ddddtd dddddddg¡}t  dd	ddd
dd	dddd	dg¡}ddddddddddddg}ddddddddddddg}| j||d}| j||d}t  |d|¡}| d¡ ||  d¡ ¡ sÊt‚|j	}|j
tdd„ |ƒksèt‚|  |¡t|ƒtdd„ |ƒ kst‚xRdD ]J}||_	||_	||_	||_	||_	|  |¡t|ƒtdd„ |ƒ kst‚qW dS )z!
        Tests creation

        g      ð?g       Àg       @g      @g      @g      $Àg      $@g      @g        g      ð¿g      Àr.   r   )r,   g@Œµx¯Dc             S   s   | | S )Nr(   )r/   r0   r(   r(   r)   Ú<lambda>   s    z%ModuleTester.test_1.<locals>.<lambda>c             S   s   | | S )Nr(   )r/   r0   r(   r(   r)   rK      s    ))é   é   )é   é   c             S   s   | | S )Nr(   )r/   r0   r(   r(   r)   rK   ˜   s    N)r8   r   rH   r   ÚwhereZset_fill_valuer   Úanyr;   r:   r9   r   r   r>   )	r'   r/   r0   Úm1Úm2rI   ZymrA   Úsr(   r(   r)   Útest_1   s&    &"
&
zModuleTester.test_1c       	      C   sì  t  ddddg¡}| j|ddddgd}| j|ddddgd}|  |¡}t|ƒ t|ƒ t|d ƒt|d ƒkstt‚|d |d ksˆt‚d|d< d|d< |  ||¡ d|dd…< d|dd…< | j|d< | j|dd…< ||d	d	…< | j|d< |  ddddgddddg¡|d	d	…< |  ddddgddddg¡|d	d	…< t  	d
¡d }|  
|d¡}|  ddddgt¡}t  ddddgt¡}|d  |d  |dd… jdksœt‚dddddg}|  |¡}|  |¡}||ksÌt‚| j|dd}||k	sèt‚d	S )z2
        Tests conversions and indexing.

        r.   rO   rL   rM   r   )r,   é	   éc   Né   g      ð?g      @Zhello)r   )Úcopy)r8   r   ÚstrÚreprÚtyper;   rG   r   r   r   r   Úobjectr:   r   )	r'   Zx1Zx2Zx3Úx4ÚnrB   rS   Úm3r(   r(   r)   Útest_2š   s@    


$$

zModuleTester.test_2c             C   sê   |   d¡}| j|d< |  |d¡}|  |  ||g¡|¡s:t‚|  |  |¡ddddddddg¡s`t‚| j|ddd}|  |ddddddddg¡ | j|ddd}|  ||¡s¬t‚|jddd}|  ||¡sÊt‚| dd¡}|  ||¡sæt‚d	S )
z&
        Tests resize/repeat

        rL   rO   )é   r   r.   )rO   rO   rO   rO   )ÚaxisrM   N)	r   r   r   r   r   r;   r   r   rG   )r'   r^   Zy4Zy5Zy6Zy7Zy8r(   r(   r)   Útest_3Ä   s    

&zModuleTester.test_3c          	   C   sN  |   d¡}t  d¡}| j|dd…< | ddd¡}| ddd¡}|  t |d¡|  |d¡¡s^t‚|  t |dd¡|  |dd¡¡s‚t‚|  t |  	|d	¡|  	|d	¡¡|  ||¡¡s²t‚|  t 
|  	|d	¡|  	|d	¡¡|  
||¡¡sât‚|  d
ddddgt¡}| j|d< |  |d	ddg¡}|d	 d
ks&t‚|d dks8t‚|d dksJt‚dS )zB
        Test of take, transpose, inner, outer products.

        é   rX   rN   rO   rM   rL   )rO   r   r.   r.   r   ÚabcÚdefN)r   r8   r   Úreshaper   r"   r;   r!   r   r   r   r   r]   )r'   r/   r0   Útr(   r(   r)   Útest_4×   s"    

 $
zModuleTester.test_4c             C   s  |   d¡}|   d¡}|   d¡}| j|d< |d7 }|  ||d ¡sDt‚|d7 }|  ||d ¡s`t‚|   d¡}|   d¡}| j|d< |d8 }|  ||d ¡sšt‚|d8 }|  ||d ¡s¶t‚|   d¡d }|   d¡d }| j|d< |d9 }|  ||d ¡søt‚|d9 }|  ||d ¡st‚|   d¡d }|   d¡d }| j|d< |d }|  ||¡sVt‚|d }|  ||¡spt‚|   d¡d }|   d¡d }| j|d< |d }|  ||d ¡s´t‚||   d¡ }|  ||  d¡¡ |   d¡ t¡}|   d¡}| j|d< |d7 }|  ||d ¡st‚dS )z*
        Tests inplace w/ scalar

        é
   rO   r.   g      ð?g       @)rk   N)r   r   r   r;   rG   r   r6   r   )r'   r/   r0   rI   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 }|  ||| ¡srt‚|  ||| ¡s†t‚|  |j|  ||j¡¡s¢t‚| j dtd}| j dtd}| j|d< |j}| j dtd}| j|d< ||8 }||8 }|  ||| ¡st‚|  ||| ¡s"t‚|  |j|  ||j¡¡s@t‚| j dtd}| j dtd}| j|d< |j}| j dtd}| j|d< ||9 }||9 }|  ||| ¡sªt‚|  ||| ¡sÀt‚|  |j|  ||j¡¡sÞt‚| j dtd}| j dtd}| j|d< |j}| j dtd}| j|d< || }|| }dS )z)
        Tests inplace w/ array

        rk   )r4   rO   éÿÿÿÿN)r   r   r   r,   r   r;   r   )r'   r/   r0   rI   rB   Ú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}xdD ]ˆ}yt| j|ƒ}W n tk
r   tt|ƒ}Y nX t| j|ƒ}|d	|j… }||Ž }||Ž }|  | 	d¡| 	d¡|¡ |  |j
|j
¡ q^W d	S )
zTests ufuncg      ð?r   rm   rO   r.   rN   )r,   )ZsqrtÚlogZlog10ZexpÚ	conjugateN)r   rH   Úgetattrr$   r%   Úfromnumericr   ZninrG   r   Z_mask)r'   ÚdÚfZufZmfÚargsZurZmrr(   r(   r)   Útest_7U  s    *.
zModuleTester.test_7c          	   C   s(  | j ddddgddddgd}|  d| j|dd¡ |  d| j|ddddgd	¡ | j|ddddgdd
\}}|  d|¡ |dks†t‚| j|d d …< | j|dd| jks¬t‚| j ddddgddddgd}| dd¡}| j|d d …df< |  | j|ddddg¡ | j|ddd | jks t‚|  ddg| j|dd¡ | j|ddd\}}|  |ddg¡ ddddddg}ddddddgddddddg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ddddddg¡ |  | j|dd| j|dd| j|ddd g¡ |  
d¡}ddddddg}	ddddddgddddddgg}
|  d¡}ddddddg}|  | j|  ||¡ddd¡ |  | j|  ||	¡ddd¡ |  | j|  ||¡ddd¡ |  |  | j|  ||¡dd¡d¡ |  ||
¡}|  |  |d ¡d¡ |  | j|ddddddddg¡ |  | j|ddddg¡ |  | j|d|dddddddg¡ d S )Ng        g      ð?g       @g      @r.   r   )r,   )rc   )Úweights)rx   Úreturnedg      @rO   )rc   ry   rN   g      @)rc   rx   g      (@g«ªªªªª
@g      $@g     ÀX@g      @g      @)r   rG   Zaverager;   r   rh   r   r8   Úaddr   r#   r   r   r   )r'   ZottÚresultZwtsZw1Zw2r/   r0   rR   rS   r`   Zm4Zm5Úzr(   r(   r)   Útest_99w  sT     
*$2$2
 
$"zModuleTester.test_99c             C   s*   |   d¡}| j|dd…< | ddd¡}d S )Nre   rX   rN   rO   rM   rL   )r   r   rh   )r'   r/   r(   r(   r)   Útest_A¤  s    
zModuleTester.test_AN)r+   r+   T)r+   )Ú__name__Ú
__module__Ú__qualname__r*   rF   rG   rJ   rU   ra   rd   rj   rl   ro   rw   r}   r~   r(   r(   r(   r)   r
      s   " 
7

*43"-r
   Ú__main__zNfrom __main__ import ModuleTester 
import numpy
tester = ModuleTester(module)
zimport numpy.ma.core as module
)rk   rk   r.   rb   ztester.test_%i()rk   z#%iz2..................................................zModuleTester.test_%i.__doc__zcore_current : %.3f - %.3f)!Z
__future__r   r   r   ZtimeitÚ	functoolsr   Znumpyr8   r   Znumpy.core.fromnumericr&   rs   Znumpy.testingr   ZseterrrH   r]   r
   r   Z
setup_baseZ	setup_curZnrepeatZnloopÚrangeÚiÚfuncZTimerr   Zcurr    ÚprintÚevalr(   r(   r(   r)   Ú<module>   s.      

