B
    .uf'                 @   sR  d Z ddlZddlZddlmZmZ ddlm  m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mZmZmZmZ ddd	d
ddddddddddgZddlmZ dddddgZee Zd1ddZd2d dZd3d"d#Zd$d Zd4d%dZd5d&d'ZeZ d6d)d	Z!e!Z"d7d*dZ#d8d+dZ$d9d,dZ%d:d-dZ&d;d.d
Z'd<d/dZ(d=d0dZ)dS )>zMiscellaneous functions for testing masked arrays and subclasses

:author: Pierre Gerard-Marchant
:contact: pierregm_at_uga_dot_edu
:version: $Id: testutils.py 3529 2007-11-13 08:01:14Z jarrod.millman $

    N)ndarrayfloat_)assert_assert_allcloseassert_array_almost_equal_nulpassert_raisesbuild_err_msg   )mask_orgetmaskmasked_arraynomaskmaskedfilledalmostapproxassert_almost_equalassert_array_almost_equalassert_array_approx_equalassert_array_compareassert_array_equalassert_array_lessassert_closeassert_equalassert_equal_recordsassert_mask_equalassert_not_equalfail_if_array_equal)TestCaser   r   r   r   r   Th㈵>:0yE>c             C   s   t t| t|}t| }t|}|jjdks:|jjdkrJt|| S tt|d|d|	t
}tt|d|dd	t
}	tt||	 ||t|	  }
|
 S )a  
    Returns true if all components of a and b are equal to given tolerances.

    If fill_value is True, masked values considered equal. Otherwise,
    masked values are considered unequal.  The relative error rtol should
    be positive and << 1.0 The absolute error atol comes into play for
    those elements of b that are very small or zero; it says how small a
    must be also.

    OF)copymaskr	   )r
   r   r   dtypecharnpequalravelr   astyper   Z
less_equalumathabsolute)ab
fill_valuertolZatolmd1d2xyd r6   T/home/ankuromar296_gmail_com/myenv/lib/python3.7/site-packages/numpy/ma/testutils.pyr   )   s    $   c       
      C   s   t t| t|}t| }t|}|jjdks:|jjdkrJt|| S tt|d|d|	t
}tt|d|dd	t
}tt|| |d|  k}	|	 S )z
    Returns True if a and b are equal up to decimal places.

    If fill_value is True, masked values considered equal. Otherwise,
    masked values are considered unequal.

    r!   F)r"   r#   r	   g      $@)r
   r   r   r$   r%   r&   r'   r(   r   r)   r   Zaroundabs)
r,   r-   decimalr.   r0   r1   r2   r3   r4   r5   r6   r6   r7   r   ?   s      c             C   sN   t t| t|| x4tt|D ]$}t | | || d|d|  q"W dS )z;
    Asserts the equality of two non-array sequences.

    zitem=
N)r   lenrange)actualdesirederr_msgkr6   r6   r7   _assert_equal_on_sequencesR   s    $rC   c             C   sh   t | j|j xT| jjD ]H}t| |t|| }}|tk	r|tk	rt t| |t|| qW dS )zI
    Asserts that two records are equal.

    Pretty crude for now.

    N)r   r$   namesoperatorgetitemr   )r,   r-   fafbfr6   r6   r7   r   ]   s    c             C   s  t |trt | ts$ttt| tt| t|| xN| D ]B\}}|| krdt| d|  t| | || d|d|  qBW dS t |tt	frt | tt	frt
| |ddS t | tst |tst| |g|}|| kst|dS | tkr|tk	s|tkr.| tk	r.t| |g|ddd}t|t| } t|}| j|j }}|jd	kr~|jd	kr~t
|  | ddS t| ||S )
z,
    Asserts that two items are equal.

    z not in zkey=r<   Nr;   )rA   )r3   r4   )headerrD   S)
isinstancedictAssertionErrorreprtyper   r=   itemslisttuplerC   r   r   r   
ValueErrorr&   Z
asanyarrayr$   r%   tolistr   )r?   r@   rA   rB   imsgZactual_dtypeZdesired_dtyper6   r6   r7   r   l   s:    

$

c             C   s<  t |trt | ts$ttt| tt| t|| xH| D ]<\}}|| kr^tt|t| | || d|d|  qBW dS t |tt	frt | tt	frtt| t|| x4t
t|D ]$}t| | || d|d|  qW dS t | tjst |tjrt| ||S t| |g|}|| ks8t|dS )z<
    Raises an assertion error if two items are equal.

    zkey=r<   Nzitem=)rL   rM   rN   rO   rP   fail_if_equalr=   rQ   rR   rS   r>   r&   r   r   r   )r?   r@   rA   rB   rV   rW   r6   r6   r7   rX      s&    

$$
rX      c             C   s^   t | tjst |tjr*t| ||||dS t| |g||d}tt||  |dksZt|dS )z~
    Asserts that two items are almost equal.

    The test is equivalent to abs(desired-actual) < 0.5 * 10**(-decimal).

    )r:   rA   verbose)rA   rZ   r   N)rL   r&   r   r   r   roundr9   rN   )r?   r@   r:   rA   rZ   rW   r6   r6   r7   r      s    

c       	      C   s   t t|t|}t|d|ddd}t|d|ddd}|tkrF|tk	sV|tkrt|tk	rtt||g|||dd}t|tjj| |	||	||||dS )zn
    Asserts that comparison between two masked arrays is satisfied.

    The comparison is elementwise.

    F)r"   r#   Z	keep_maskZsubok)r3   r4   )rA   rZ   rJ   rD   )rA   rZ   rJ   )
r
   r   r   r   r   rT   r&   testingr   r   )	Z
comparisonr3   r4   rA   rZ   rJ   r.   r0   rW   r6   r6   r7   r      s    	
c             C   s   t tj| |||dd dS )z@
    Checks the elementwise equality of two masked arrays.

    zArrays are not equal)rA   rZ   rJ   N)r   rE   __eq__)r3   r4   rA   rZ   r6   r6   r7   r      s    
c             C   s    dd }t || |||dd dS )zT
    Raises an assertion error if two masked arrays are not equal elementwise.

    c             S   s   t t| | S )N)r&   Zalltruer   )r3   r4   r6   r6   r7   compare   s    z$fail_if_array_equal.<locals>.comparezArrays are not equal)rA   rZ   rJ   N)r   )r3   r4   rA   rZ   r^   r6   r6   r7   r      s    c                s$    fdd}t || |||dd dS )z|
    Checks the equality of two masked arrays, up to given number odecimals.

    The equality is checked elementwise.

    c                s   t | |d   dS )z<Returns the result of the loose comparison between x and y).g      $@)r/   )r   )r3   r4   )r:   r6   r7   r^      s    z*assert_array_approx_equal.<locals>.comparezArrays are not almost equal)rA   rZ   rJ   N)r   )r3   r4   r:   rA   rZ   r^   r6   )r:   r7   r      s    c                s$    fdd}t || |||dd dS )z|
    Checks the equality of two masked arrays, up to given number odecimals.

    The equality is checked elementwise.

    c                s   t | | S )z<Returns the result of the loose comparison between x and y).)r   )r3   r4   )r:   r6   r7   r^     s    z*assert_array_almost_equal.<locals>.comparezArrays are not almost equal)rA   rZ   rJ   N)r   )r3   r4   r:   rA   rZ   r^   r6   )r:   r7   r      s    c             C   s   t tj| |||dd dS )z7
    Checks that x is smaller than y elementwise.

    zArrays are not less-ordered)rA   rZ   rJ   N)r   rE   __lt__)r3   r4   rA   rZ   r6   r6   r7   r     s    
c             C   s:   | t krt|t k |t kr(t| t k t| ||d dS )z-
    Asserts the equality of two masks.

    )rA   N)r   r   r   )m1m2rA   r6   r6   r7   r     s
    )Tr   r    )r8   T)r;   )r;   )r;   )rY   r;   T)r;   Tr;   T)r;   T)r;   T)r8   r;   T)r8   r;   T)r;   T)r;   )*__doc__rE   numpyr&   r   r   Znumpy.core.umathcorer*   Znumpy.testingr   r   r   r   r   r
   r   r   r   r   r   Z__all__maskedZunittestr   Z__some__from_testing__all__r   r   rC   r   r   rX   r   r   r   r   r   r   r   r   r   r   r6   r6   r6   r7   <module>   sB    



'

 







