o
    Ô­jû'  ã                   @   s8  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 g d¢ZddlmZ g d	¢Zee Zd,dd„Zd-dd„Zd.dd„Zdd„ Zd.dd„Zd.dd„ZeZ d/dd„Z!e!Z"		
d0dd„Z#d1d d!„Z$d1d"d#„Z%d2d$d%„Z&d2d&d'„Z'd1d(d)„Z(d.d*d+„Z)dS )3zÌMiscellaneous 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)ÚTestCase)r   r   r   r   r   Tçñhãˆµøä>ç:Œ0âŽyE>c                 C   sª   t t| ƒt|ƒƒ}t| ƒ}t|ƒ}|jjdks|jjdkr%t ||¡ ¡ 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   Ú
less_equalÚumathÚabsolute)ÚaÚbÚ
fill_valueÚrtolÚatolÚmÚd1Úd2ÚxÚyÚd© r9   úO/var/www/html/CropPilot/venv/lib/python3.10/site-packages/numpy/ma/testutils.pyr   )   s   $r   é   c           
      C   s¦   t t| ƒt|ƒƒ}t| ƒ}t|ƒ}|jjdks|jjdkr%t ||¡ ¡ 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!   Fr"   r	   ç      $@)r
   r   r   r%   r&   r'   r(   r)   r   r*   r   ÚaroundÚabs)
r.   r/   Údecimalr0   r3   r4   r5   r6   r7   r8   r9   r9   r:   r   ?   s    r   Ú c                 C   sJ   t t| ƒt|ƒ|ƒ tt|ƒƒD ]}t | | || d|›d|› �ƒ qdS )z;
    Asserts the equality of two non-array sequences.

    úitem=Ú
N)r   ÚlenÚrange)ÚactualÚdesiredÚerr_msgÚkr9   r9   r:   Ú_assert_equal_on_sequencesR   s   "rI   c                 C   sd   t | j|jƒ | jjD ]$}t | |¡t ||¡}}|tur/|tur/t t | |¡t ||¡ƒ qdS )zI
    Asserts that two records are equal.

    Pretty crude for now.

    N)r   r%   ÚnamesÚoperatorÚgetitemr   )r.   r/   ÚfÚafÚbfr9   r9   r:   r   ]   s   €r   c                 C   s|  t |tƒrDt | tƒsttt| ƒƒƒ‚tt| ƒt|ƒ|ƒ | ¡ D ]!\}}|| vr1t|› d| › �ƒ‚t| | || d|›d|› �ƒ q dS t |tt	fƒrYt | tt	fƒrYt
| |dd�S t | tƒstt |tƒstt| |g|ƒ}|| ksrt|ƒ‚dS | tu r||tus„|tu r’| tu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 úkey=rB   Nr@   ©rG   ©r6   r7   )ÚheaderrJ   ÚS)Ú
isinstanceÚdictÚAssertionErrorÚreprÚtyper   rC   ÚitemsÚlistÚtuplerI   r   r   r   Ú
ValueErrorr'   Ú
asanyarrayr%   r&   Útolistr   )rE   rF   rG   rH   ÚiÚmsgÚactual_dtypeÚdesired_dtyper9   r9   r:   r   l   s>   

"ÿ

þr   c                 C   s.  t |tƒrAt | tƒsttt| ƒƒƒ‚tt| ƒt|ƒ|ƒ | ¡ D ]\}}|| vr.tt|ƒƒ‚t| | || d|›d|› �ƒ q dS t |tt	fƒrtt | tt	fƒrttt| ƒt|ƒ|ƒ t
t|ƒƒD ]}t| | || d|›d|› �ƒ q_dS t | tjƒs€t |tjƒr†t| ||ƒS t| |g|ƒ}|| ks•t|ƒ‚dS )z<
    Raises an assertion error if two items are equal.

    rP   rB   NrA   )rU   rV   rW   rX   rY   Úfail_if_equalrC   rZ   r[   r\   rD   r'   r   r   r   )rE   rF   rG   rH   r`   ra   r9   r9   r:   rd   “   s(   

""ÿrd   é   c                 C   s^   t | tjƒst |tjƒrt| ||||d�S t| |g||d�}tt||  ƒ|ƒdks-t|ƒ‚dS )z~
    Asserts that two items are almost equal.

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

    )r?   rG   Úverbose)rG   rf   r   N)rU   r'   r   r   r   Úroundr>   rW   )rE   rF   r?   rG   rf   ra   r9   r9   r:   r   °   s   ÿÿÿr   c           	      C   s˜   t t|ƒt|ƒƒ}t|d|ddd�}t|d|ddd�}|tu r#|tus+|tu r:|tur:t||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$   Ú	keep_maskÚsubokrR   )rG   rf   rS   rJ   ©rG   rf   rS   )
r
   r   r   r   r   r]   r'   Útestingr   r   )	Ú
comparisonr6   r7   rG   rf   rS   r0   r3   ra   r9   r9   r:   r   Ã   s   	ÿür   c                 C   ó   t tj| |||dd� dS )z@
    Checks the elementwise equality of two masked arrays.

    úArrays are not equalrj   N)r   rK   Ú__eq__©r6   r7   rG   rf   r9   r9   r:   r   Ü   ó   

þr   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'   Úallr   rR   r9   r9   r:   Úcompareë   s   z$fail_if_array_equal.<locals>.comparern   rj   N©r   )r6   r7   rG   rf   rs   r9   r9   r:   r   æ   s   
ÿr   c                    ó$   ‡ fdd„}t || |||dd� dS )ú|
    Checks the equality of two masked arrays, up to given number odecimals.

    The equality is checked elementwise.

    c                    s   t | |dˆ   d�S )ú<Returns the result of the loose comparison between x and y).r<   )r1   )r   rR   ©r?   r9   r:   rs   ø   s   z*assert_array_approx_equal.<locals>.compareúArrays are not almost equalrj   Nrt   ©r6   r7   r?   rG   rf   rs   r9   rx   r:   r   ñ   ó   
ÿr   c                    ru   )rv   c                    s   t | |ˆ ƒS )rw   )r   rR   rx   r9   r:   rs     s   z*assert_array_almost_equal.<locals>.comparery   rj   Nrt   rz   r9   rx   r:   r   ÿ   r{   r   c                 C   rm   )z7
    Checks that x is smaller than y elementwise.

    zArrays are not less-orderedrj   N)r   rK   Ú__lt__rp   r9   r9   r:   r     rq   r   c                 C   s:   | t u r
t|t u ƒ |t u rt| t u ƒ t| ||d� dS )z-
    Asserts the equality of two masks.

    rQ   N)r   r   r   )Úm1Úm2rG   r9   r9   r:   r     s
   r   )Tr   r    )r;   T)r@   )re   r@   T)r@   Tr@   T)r@   T)r;   r@   T)*Ú__doc__rK   Únumpyr'   r   r   Únumpy.core.umathÚcorer,   Únumpy.testingr   r   r   r   r   r
   r   r   r   r   r   Ú__all__maskedÚunittestr   Ú__some__from_testingÚ__all__r   r   rI   r   r   rd   r   r   r   r   r   r   r   r   r   r   r9   r9   r9   r:   Ú<module>   s<     




'

ÿ






