U
    e»{jS½  ã                $   @   sn  d dl Zd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dl	mZ d dlmZmZmZmZmZ d dlmZmZ d dlmZ d d	lmZ e
ZG d
d„ deƒZej d¡ej de d¡e d¡fe d¡e  d¡fe d¡e  d¡ !dd¡fe  d¡e "d¡d fe  d¡e "d¡d fe  d¡ !dd¡e "d¡d fe  d¡ !ddd¡e "d¡d fg¡dd„ ƒƒZ#dd„ Z$ej d¡ej de d¡ej% e d¡ej% fe d¡ej% e  d¡ej& fe d¡ej% e  d¡ !dd¡ej' fe  d¡ej( ej% e "d¡d ej) ej% fe  d¡ej( ej% e "d¡d ej( ej& fe  d¡ !dd¡ej( ej% e "d¡d ej) ej& fe  d¡ !ddd¡e "d¡d ej* fe d¡e d¡ej% ej& fg¡dd„ ƒƒZ+ej de d¡ej% e d¡ej( fe d¡ej, e d¡ej) ej% fe d¡ej, e d¡fe d¡e d¡ej% fg¡dd„ ƒZ-ej dd dedd!�fedd!�dfej.dd!�ej/dd!�g¡d"d#„ ƒZ0ej d$d d%d&d'd(d)d*e d+¡e d,¡fe d+¡ejd d-d d-d-gej1d.�fe d,¡ejd d-d d-d-gd-d-d d-d-ggej1d.�fejd d-d d-d-gej1d.�ejd-d-d d d-gej1d.�fejd d-d d-d-gej1d.�ejd d-d d-d-gd-d d d-d-ggej1d.�fejd d-d d-d-gd-d d d-d-ggej1d.�ejd d-d d-d-gd-d-d d-d-ggej1d.�fg¡d/d0„ ƒZ2d1d2„ Z3d3d4„ Z4ej d5d6d-d-dgddd7gfd8d-d-dgddd7gfd9d-d-dgddd7gfd d-d-dgddd7gfd:d-d-dgddd7gfd;d-d-dgddd7gfd-d-d-dgddd7gfd6d6d6d<gddd7gfd8d6d6d<gddd7gfd9d6d6d<gddd7gfd d6d6d<gddd7gfd:d6d6d<gddd7gfd;d6d6d<gddd7gfd-d6d6d<gddd7gfd6d-d-dgd=d<d=gfd8d-d-dgd=d<d=gfd9d-d-dgd=d<d=gfd d-d-dgd=d<d=gfd:d-d-dgd=d<d=gfd;d-d-dgd=d<d=gfd-d-d-dgd=d<d=gfd6d6d6d<gd=d<d=gfd8d6d6d<gd=d<d=gfd9d6d6d<gd=d<d=gfd d6d6d<gd=d<d=gfd:d6d6d<gd=d<d=gfd;d6d6d<gd=d<d=gfd-d6d6d<gd=d<d=gfg¡d>d?„ ƒZ5ej d5d6d-d-dgddd7gfd8d-d-dgddd7gfd9d-d-dgddd7gfd d-d-dgddd7gfd:d-d-dgddd7gfd;d-d-dgddd7gfd-d-d-dgddd7gfd6d6d6d<gddd7gfd8d6d6d<gddd7gfd9d6d6d<gddd7gfd d6d6d<gddd7gfd:d6d6d<gddd7gfd;d6d6d<gddd7gfd-d6d6d<gddd7gfd6d-d-dgd=d<d=gfd8d-d-dgd=d<d=gfd9d-d-dgd=d<d=gfd d-d-dgd=d<d=gfd:d-d-dgd=d<d=gfd;d-d-dgd=d<d=gfd-d-d-dgd=d<d=gfd6d6d6d<gd=d<d=gfd8d6d6d<gd=d<d=gfd9d6d6d<gd=d<d=gfd d6d6d<gd=d<d=gfd:d6d6d<gd=d<d=gfd;d6d6d<gd=d<d=gfd-d6d6d<gd=d<d=gfg¡d@dA„ ƒZ6ej d¡ej d5d6d-d-dgddd7gfd8d-d-dgddd7gfd9d-d-dgddd7gfd d-d-dgddd7gfd:d-d-dgddd7gfd;d-d-dgddd7gfd-d-d-dgddd7gfd6d6d6d<gddd7gfd8d6d6d<gddd7gfd9d6d6d<gddd7gfd d6d6d<gddd7gfd:d6d6d<gddd7gfd;d6d6d<gddd7gfd-d6d6d<gddd7gfd6d-d-dgd=d<d=gfd8d-d-dgd=d<d=gfd9d-d-dgd=d<d=gfd d-d-dgd=d<d=gfd:d-d-dgd=d<d=gfd;d-d-dgd=d<d=gfd-d-d-dgd=d<d=gfd6d6d6d<gd=d<d=gfd8d6d6d<gd=d<d=gfd9d6d6d<gd=d<d=gfd d6d6d<gd=d<d=gfd:d6d6d<gd=d<d=gfd;d6d6d<gd=d<d=gfd-d6d6d<gd=d<d=gfg¡dBdC„ ƒƒZ7dDdE„ Z8dFdG„ Z9dHdI„ Z:ej dJ¡ej dKe d-ddg¡ej( dfe d-ddg¡ej; dfde d-ddg¡ej( fde d-ddg¡ej; fe d-ddg¡e dddLg¡fe d-ddg¡ej( e dddLg¡fe d-ddg¡e dddLg¡fej( e d-ddg¡ej( e dddLg¡fej( e d-ddg¡ej; e dddLg¡fe d-ddg¡e dddLg¡fej; e d-ddg¡ej; e dddLg¡fej; e d-ddg¡ej) e dddLg¡fej; g¡dMdN„ ƒƒZ<ej dJ¡ej dKe d-ddg¡ej( dfe d-ddg¡ej; dfde d-ddg¡ej( fde d-ddg¡ej; fe d-ddg¡e dddLg¡fe d-ddg¡ej( e dddLg¡fe d-ddg¡e dddLg¡fej( e d-ddg¡ej( e dddLg¡fej( e d-ddg¡ej; e dddLg¡fe d-ddg¡e dddLg¡fej; e d-ddg¡ej; e dddLg¡fej; e d-ddg¡ej) e dddLg¡fej; g¡dOdP„ ƒƒZ=ej dJ¡ej dKe d-ddg¡ej( dfe d-ddg¡ej; dfde d-ddg¡ej( fde d-ddg¡ej; fe d-ddg¡e dddLg¡fe d-ddg¡ej( e dddLg¡fe d-ddg¡e dddLg¡fej( e d-ddg¡ej( e dddLg¡fej( e d-ddg¡ej; e dddLg¡fe d-ddg¡e dddLg¡fej; e d-ddg¡ej; e dddLg¡fej; e d-ddg¡ej) e dddLg¡fej; g¡dQdR„ ƒƒZ>ej dSdTdUg¡dVdW„ ƒZ?dXdY„ Z@dZd[„ ZAd\d]„ ZBej d^d_d`dadbg¡dcdd„ ƒZCej d^d_d`dadbg¡dedf„ ƒZDdgdh„ ZEdidj„ ZFdS )ké    N)Úassert_array_almost_equalÚassert_array_equal)Úunits)Ú	NDDataRef)Ú_testing)Ú"IncompatibleUncertaintiesExceptionÚInverseVarianceÚStdDevUncertaintyÚUnknownUncertaintyÚVarianceUncertainty)ÚQuantityÚ
UnitsError)ÚAstropyUserWarning)ÚWCSc                   @   s   e Zd Zedd„ ƒZdS )ÚStdDevUncertaintyUncorrelatedc                 C   s   dS ©NF© )Úselfr   r   úl/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/nddata/mixins/tests/test_ndarithmetic.pyÚsupports_correlated   s    z1StdDevUncertaintyUncorrelated.supports_correlatedN)Ú__name__Ú
__module__Ú__qualname__Úpropertyr   r   r   r   r   r      s   r   z#ignore:divide by zero encountered.*)Údata1Údata2é   é
   é   )r   r   )r   r   é   iè  é   )r    r   r   c           	      C   s
  t | ƒ}t |ƒ}| |¡}t| | |jƒ | |¡}t| | |jƒ | |¡}t| | |jƒ | |¡}t| | |jƒ ||||fD ]€}| j|jkr¨| j|jjksºt	‚n|j|jjksºt	‚|j
d ksÈt	‚|jd ksÖt	‚|jd ksät	‚t|jƒdksöt	‚|jd ks„t	‚q„d S ©Nr   )ÚNDDataArithmeticÚaddr   ÚdataÚsubtractÚmultiplyÚdivideÚndimÚshapeÚAssertionErrorÚunitÚuncertaintyÚmaskÚlenÚmetaÚwcs)	r   r   Únd1Únd2Únd3Únd4Únd5Únd6Úndr   r   r   Útest_arithmetics_data"   s&    



r8   c               	   C   s>   t dddgƒ} t ddgƒ}t t¡� |  |¡ W 5 Q R X d S )Né   r   r   )r"   ÚpytestÚraisesÚ
ValueErrorr#   ©r1   r2   r   r   r   Útest_arithmetics_data_invalidO   s    r>   c                 C   sŽ  t | ƒ}t |ƒ}| |¡}| | }|j|j }}t||jƒ |j|ksJt‚| |¡}| | }|j|j }}t||jƒ |j|ks„t‚| |¡}	| | }|j|j }}t||	jƒ |	j|ks¾t‚| 	|¡}
| | }|j|j }}t||
jƒ |
j|k� sút‚|||	|
fD ]‚}| j
|j
k�r.| j|jjk�sBt‚n|j|jjk�sBt‚|jd k�sRt‚|jd k�sbt‚t|jƒdk�svt‚|jd k�st‚�qd S r!   )r"   r#   r+   Úvaluer   r$   r*   r%   r&   r'   r(   r)   r,   r-   r.   r/   r0   )r   r   r1   r2   r3   ÚrefÚref_unitÚref_datar4   r5   r6   r7   r   r   r   Ú$test_arithmetics_data_unit_identicalZ   s<    



rC   c           
   	   C   s  t | ƒ}t |ƒ}t t¡� | |¡ W 5 Q R X t t¡� | |¡ W 5 Q R X | |¡}| | }|j|j }}t	||j
ƒ |j|ksŠt‚| |¡}| | }|j|j }}t	||j
ƒ |j|ksÄt‚||fD ]B}	|	jd ksÞt‚|	jd ksìt‚t|	jƒdk�s t‚|	jd ksÌt‚qÌd S r!   )r"   r:   r;   r   r#   r%   r&   r+   r?   r   r$   r*   r'   r,   r-   r.   r/   r0   )
r   r   r1   r2   r3   r@   rA   rB   r4   r7   r   r   r   Ú(test_arithmetics_data_unit_not_identical—   s*    


rD   )Úwcs1Úwcs2)NN©Znaxisc           
      C   s   t d| d�}t d|d�}| d kr.|d kr.d }n | d kr<|}n|d krJ| }n| }| |¡}t ||j¡ | |¡}t ||j¡ | |¡}t ||j¡ | |¡}t ||j¡ ||||fD ]@}	|	jd ksÌt	‚|	j
d ksÚt	‚t|	jƒdksìt	‚|	jd ksºt	‚qºd S )Nr9   )r0   r   )r"   r#   Ú
nd_testingÚassert_wcs_seem_equalr0   r%   r&   r'   r+   r*   r,   r.   r/   r-   )
rE   rF   r1   r2   Zref_wcsr3   r4   r5   r6   r7   r   r   r   Útest_arithmetics_data_wcsÃ   s,    



rJ   )Úmask1Úmask2r   )TN)FF)TF)FT)TTFTr9   ©Zdtypec           
      C   sü   t d| d�}t d|d�}| d kr.|d kr.d }n$| d kr<|}n|d krJ| }n| |B }| |¡}t||jƒ | |¡}t||jƒ | |¡}t||jƒ | |¡}t||jƒ ||||fD ]@}	|	jd ksÈt‚|	j	d ksÖt‚t
|	jƒdksèt‚|	jd ks¶t‚q¶d S )Nr9   ©r-   r   )r"   r#   r   r-   r%   r&   r'   r+   r*   r,   r.   r/   r0   )
rK   rL   r1   r2   Zref_maskr3   r4   r5   r6   r7   r   r   r   Útest_arithmetics_data_masksñ   s,    



rO   c               	   C   s¾   t dtjddgtjd�d�} t dtjdddgtjd�d�}t t¡� |  |¡ W 5 Q R X t t¡� |  |¡ W 5 Q R X t t¡� |  	|¡ W 5 Q R X t t¡� |  
|¡ W 5 Q R X d S )Nr9   r   rM   rN   )r"   ÚnpÚarrayÚbool_r:   r;   r<   r#   r&   r%   r'   r=   r   r   r   Ú#test_arithmetics_data_masks_invalid/  s    rS   c               
   C   sb  t dddgtdddgƒd�} t dddgtdddgƒd�}|  |¡}| | ¡}t|jj|jjƒ t t dddg¡d t dddg¡d  ¡}t|jj|ƒ |  |¡}| | ¡}t|jj|jjƒ t|jj|ƒ |  	|¡}| 	| ¡}t
|jj|jjƒ t t dddg¡¡t t dddg¡t dddg¡ d t dddg¡t dddg¡ d  ¡ }t
|jj|ƒ |  |¡}| | ¡}t t ddd	g¡¡t t dddg¡t dddg¡ d t dddg¡t dddg¡ d  ¡ }t
|jj|ƒ t t ddd
g¡¡t t dddg¡t dddg¡ d t dddg¡t dddg¡ d  ¡ }t
|jj|ƒ d S )Nr9   r   r   ©r,   é   é   ç      à?g      ð?g      ø?gUUUUUUå?)r"   r	   r#   r   r,   rQ   rP   Úsqrtr%   r&   r   Úabsr'   )r1   r2   r3   r4   Úref_uncertaintyÚref_uncertainty_1Úref_uncertainty_2r   r   r   Ú(test_arithmetics_stddevuncertainty_basicB  sD    

.



""ÿÿ

""ÿÿ""ÿÿr]   )ÚcorÚuncert1r   éÿÿÿÿé   g      à¿g      Ð¿ç      Ð?rW   éýÿÿÿéþÿÿÿc              	   C   sz  t  dddg¡}t  |¡}t  |¡}t  dddg¡}t|t|ƒd�}t|t|ƒd�}|j|| d�}|j|| d�}t|jj|jjƒ t  |d |d  d|  t  || ¡  ¡}	t|jj|	ƒ |j	|| d�}|j	|| d�}t|jj|jjƒ t  |d |d  d|  t  || ¡  ¡}	t|jj|	ƒ |j
|| d�}|j
|| d�}t|jj|jjƒ t  || ¡t  || d || d  d|  t  || ¡ ||   ¡ }	t|jj|	ƒ |j|| d�}|j|| d�}t  || ¡t  || d || d  d|  t  || ¡ ||   ¡ }
t|jj|
ƒ t  || ¡t  || d || d  d|  t  || ¡ ||   ¡ }t|jj|ƒ d S ©Nr9   r   r   rT   ©Zuncertainty_correlation)rP   rQ   r"   r	   r#   r   r,   rX   rY   r%   r&   r   r'   )r^   r_   r   r   Úuncert2r1   r2   r3   r4   rZ   r[   r\   r   r   r   Ú9test_arithmetics_stddevuncertainty_basic_with_correlationx  sb    "

$ÿ$ÿ

ÿþÿ

ÿþÿ

ÿþÿrh   c                 C   s   t  dddg¡}t  |¡}t  |¡d }t  dddg¡d }t|t|ƒd�}t|t|ƒd�}|j|| d�}|j|| d�}t|jj|jjƒ || d|  t  || ¡  }	t|jj|	ƒ |j|| d�}|j|| d�}t|jj|jjƒ || d|  t  || ¡  }	t|jj|	ƒ |j	|| d�}|j	|| d�}t
|jj|jjƒ || d ||d  ||d   d|  t  || ¡ ||    }	t
|jj|	ƒ |j|| d�}|j|| d�}||d  ||d   d|  t  || ¡ ||   }
|| d |
 }t
|jj|ƒ || d |
 }t
|jj|ƒ d S re   )rP   rQ   r"   r   r#   r   r,   rX   r%   r&   r   r'   ©r^   r_   r   r   rg   r1   r2   r3   r4   rZ   Z
ref_commonr[   r\   r   r   r   Ú;test_arithmetics_varianceuncertainty_basic_with_correlationÛ  sN    "



ÿþÿ

ÿþÿrj   c                 C   s\  t  dddg¡}t  |¡}dt  |¡d  }dt  dddg¡d  }t|t|ƒd�}t|t|ƒd�}|j|| d�}|j|| d�}t|jj|jjƒ dd| d|  d|  t  || ¡   }	t|jj|	ƒ |j|| d�}|j|| d�}t|jj|jjƒ dd| d|  d|  t  || ¡   }	t|jj|	ƒ |j	|| d�}|j	|| d�}t
|jj|jjƒ d|| d d| |d  d| |d   d|  t  || ¡ ||     }	t
|jj|	ƒ |j|| d�}|j|| d�}d| |d  d| |d   d|  t  || ¡ ||   }
d|| d |
  }t
|jj|ƒ d|| d |
  }t
|jj|ƒ d S re   )rP   rQ   r"   r   r#   r   r,   rX   r%   r&   r   r'   ri   r   r   r   ÚBtest_arithmetics_inversevarianceuncertainty_basic_with_correlation8  sZ    %
$ÿ$ÿ
ÿþþÿÿþÿrk   c                  C   s‚   t  dddg¡} t  dddg¡}t  dddg¡}t  dddg¡}t  dddg¡}t| t|ƒd�}t|t|ƒd�}|j||d� d S )Nr9   r   r   r   rb   rT   rf   )rP   rQ   r"   r	   r#   ©r   r   r_   rg   r^   r1   r2   r   r   r   Ú?test_arithmetics_stddevuncertainty_basic_with_correlation_arrayœ  s    rm   c               	   C   sŒ   t  dddg¡} t  dddg¡}t  dddg¡}t  dddg¡}d}t| t|ƒd�}t|t|ƒd�}t t¡� |j||d� W 5 Q R X d S re   )rP   rQ   r"   r   r:   r;   r<   r#   rl   r   r   r   Ú-test_arithmetics_with_correlation_unsupportedª  s    rn   c                  C   s:  t dddgƒ} t dddgtdddgƒd�}t dddgtdddgƒd�}|  |¡}| |¡}t|jj|jjƒ tt |jj¡|jjƒ | | ¡}| |¡}t|jj|jjƒ tt |jj¡|jjƒ |  |¡}| |¡}t|jj|jjƒ tt |jj¡|jjƒ | | ¡}| |¡}t|jj|jjƒ tt |jj¡|jjƒ |  	|¡}| 	|¡}t|jj|jjƒ tt |jj¡|jjƒ | 	| ¡}| 	|¡}t|jj|jjƒ tt |jj¡|jjƒ |  
|¡}| 
|¡}t|jj|jjƒ tt |jj¡|jjƒ | 
| ¡}| 
|¡}t|jj|jjƒ tt |jj¡|jjƒ d S )Nr9   rd   r   r   rT   r   )r"   r	   r#   r   r,   rQ   rP   rY   r%   r&   r'   )r1   Únd1_refr2   r3   Únd3_refr   r   r   Ú.test_arithmetics_stddevuncertainty_one_missing½  sF    















rq   z!ignore:.*encountered in.*divide.*)r_   rg   rU   c                 C   sT  t  dddg¡tj }t  dddg¡tj }| d k	rft| ƒ} t| tƒrT|  |j¡}n| }t|dd�}nd } d }|d k	r¨t|ƒ}t|tƒr–| |j¡}n|}t|dd�}nd }d }t	|| d	�}t	||d	�}	t	||d	�}
t	||d	�}| 
|	¡}|
 
|¡}|j|jk�st‚|jj|jjk�st‚t|jj|jjƒ |	 
|¡}| 
|
¡}|j|jk�sTt‚|jj|jjk�sjt‚t|jj|jjƒ | |	¡}|
 |¡}|j|jk�s¢t‚|jj|jjk�s¸t‚t|jj|jjƒ |	 |¡}| |
¡}|j|jk�sðt‚|jj|jjk�st‚t|jj|jjƒ | |	¡}|
 |¡}|j|jk�s>t‚|jj|jjk�sTt‚t|jj|jjƒ |	 |¡}| |
¡}|j|jk�sŒt‚|jj|jjk�s¢t‚t|jj|jjƒ | |	¡}|
 |¡}|j|jk�sÚt‚|jj|jjk�sðt‚t|jj|jjƒ |	 |¡}| |
¡}|j|jk�s(t‚|jj|jjk�s>t‚t|jj|jjƒ d S ©
Nr9   r   r   éüÿÿÿra   r   T)ÚcopyrT   )rP   rQ   ÚuÚmr	   Ú
isinstancer   Úto_valuer+   r"   r#   r*   r,   r   r%   r&   r'   ©r_   rg   r   r   Zuncert1_refZuncert_ref1Zuncert2_refZuncert_ref2r1   r2   ro   Znd2_refr3   rp   r   r   r   Ú-test_arithmetics_stddevuncertainty_with_unitsò  s|    

















rz   c                 C   sd  t  dddg¡tj }t  dddg¡tj }| d k	rnt| d ƒ} t| tƒr\|  |jd ¡}n| }t|dd�}nd } d }|d k	r¸t|d ƒ}t|tƒr¦| |jd ¡}n|}t|dd�}nd }d }t	|| d	�}t	||d	�}	t	||d	�}
t	||d	�}| 
|	¡}|
 
|¡}|j|jk�st‚|jj|jjk�s,t‚t|jj|jjƒ |	 
|¡}| 
|
¡}|j|jk�sdt‚|jj|jjk�szt‚t|jj|jjƒ | |	¡}|
 |¡}|j|jk�s²t‚|jj|jjk�sÈt‚t|jj|jjƒ |	 |¡}| |
¡}|j|jk�s t‚|jj|jjk�st‚t|jj|jjƒ | |	¡}|
 |¡}|j|jk�sNt‚|jj|jjk�sdt‚t|jj|jjƒ |	 |¡}| |
¡}|j|jk�sœt‚|jj|jjk�s²t‚t|jj|jjƒ | |	¡}|
 |¡}|j|jk�sêt‚|jj|jjk�s t‚t|jj|jjƒ |	 |¡}| |
¡}|j|jk�s8t‚|jj|jjk�sNt‚t|jj|jjƒ d S rr   )rP   rQ   ru   rv   r   rw   r   rx   r+   r"   r#   r*   r,   r   r%   r&   r'   ry   r   r   r   Ú/test_arithmetics_varianceuncertainty_with_units]  s|    

















r{   c                 C   st  t  dddg¡tj }t  dddg¡tj }| d k	rvtd| d  ƒ} t| tƒrd|  d|jd  ¡}n| }t|dd�}nd } d }|d k	rÈtd|d  ƒ}t|tƒr¶| d|jd  ¡}n|}t|dd�}nd }d }t	|| d	�}t	||d	�}	t	||d	�}
t	||d	�}| 
|	¡}|
 
|¡}|j|jk�s&t‚|jj|jjk�s<t‚t|jj|jjƒ |	 
|¡}| 
|
¡}|j|jk�stt‚|jj|jjk�sŠt‚t|jj|jjƒ | |	¡}|
 |¡}|j|jk�sÂt‚|jj|jjk�sØt‚t|jj|jjƒ |	 |¡}| |
¡}|j|jk�st‚|jj|jjk�s&t‚t|jj|jjƒ | |	¡}|
 |¡}|j|jk�s^t‚|jj|jjk�stt‚t|jj|jjƒ |	 |¡}| |
¡}|j|jk�s¬t‚|jj|jjk�sÂt‚t|jj|jjƒ | |	¡}|
 |¡}|j|jk�sút‚|jj|jjk�st‚t|jj|jjƒ |	 |¡}| |
¡}|j|jk�sHt‚|jj|jjk�s^t‚t|jj|jjƒ d S rr   )rP   rQ   ru   rv   r   rw   r   rx   r+   r"   r#   r*   r,   r   r%   r&   r'   ry   r   r   r   Ú6test_arithmetics_inversevarianceuncertainty_with_unitsÈ  s|    

















r|   Úuse_abbreviationÚffZfirst_foundc                 C   s|  ddi}ddi}d}d}t dddgƒ}t dddgƒ}tjdd�\}}dddg}	dddg}
t|	||||d	�}t|
||||d	�}t|	ƒ}|j|d d d d d
�}|jd ks¦t‚t|jƒdks¸t‚|j	d ksÆt‚|j
d ksÔt‚|j|d| | | d
�}t |j|¡ |j|k�st‚|j	|k�st‚t|j
j|jƒ |j|d| | | d
�}t |j|¡ |j|k�sXt‚|j	|k�sht‚t|j
j|jƒ d S )NÚar9   Úbr   TFr   rG   ©r/   r-   r0   r,   )Úpropagate_uncertaintiesÚhandle_metaÚhandle_maskÚcompare_wcsr   )r	   rH   Úcreate_two_unequal_wcsr"   r#   r0   r*   r.   r/   r-   r,   rI   r   rQ   )r}   Úmeta1Úmeta2rK   rL   Úuncertainty1Úuncertainty2rE   rF   r   r   r1   r2   r3   Znd_r   r   r   Ú test_arithmetics_handle_switches1  sr    

    ÿ    ÿûûûr‹   c               	   C   s   ddd„} ddi}dddœ}d	}d
}t dddgƒ}t dddgƒ}dddg}dddg}t||||d�}	t||||d�}
|	j|
| d�}|jd dks”t‚d|jks¢t‚|	j|
| dd�}|jd dksÄt‚|jd dksÖt‚t t¡� |	j|
| dd� W 5 Q R X d S )NÚfirstc                 S   s   |dkr| S |S d S )NrŒ   r   )r‡   rˆ   Útaker   r   r   Úmeta_fun_funcn  s    z1test_arithmetics_meta_func.<locals>.meta_fun_funcr   r9   r   r   ©r   r€   TF©r/   r-   r,   )rƒ   r€   Úsecond)rƒ   Z	meta_take)rƒ   r�   )rŒ   )r	   r"   r#   r/   r*   r:   r;   ÚKeyError)rŽ   r‡   rˆ   rK   rL   r‰   rŠ   r   r   r1   r2   r3   r4   r   r   r   Útest_arithmetics_meta_funcm  s&    



r“   c               	   C   sô   ddd„} ddi}dddœ}d	}d
}t dddgƒ}t dddgƒ}tjdd�\}}dddg}	dddg}
t|	||||d�}t|
||||d�}|j|| d�}t |j|¡ t t	¡� |j|| dd� W 5 Q R X t t
¡� |j|| dd� W 5 Q R X d S )Nçš™™™™™¹?c                 S   s   |dk rdS dS )Ng{®Gáz„?FTr   )rE   rF   Ú	tolerancer   r   r   Úwcs_comp_func�  s    z0test_arithmetics_wcs_func.<locals>.wcs_comp_funcr   r9   r   r   r�   TFrG   r�   )r…   gñhãˆµøä>)r…   Zwcs_tolerance)r…   r•   )r”   )r	   rH   Úcreate_two_equal_wcsr"   r#   rI   r0   r:   r;   r<   r’   )r–   r‡   rˆ   rK   rL   r‰   rŠ   rE   rF   r   r   r1   r2   r3   r   r   r   Útest_arithmetics_wcs_funcŒ  s<    



    ÿ    ÿr˜   c               	   C   sä   ddd„} ddi}dddœ}d	d
d	g}d	d
d
g}t dddgƒ}t dddgƒ}dddg}dddg}t||||d�}	t||||d�}
|	j|
| d�}t|j|	jƒ |	j|
| dd�}t|j|
jƒ t t¡� |	j|
| dd� W 5 Q R X d S )Nr   c                 S   s   |dkr|S | S d S )NrW   r   )rK   rL   Úfunr   r   r   Úmask_sad_func±  s    z1test_arithmetics_mask_func.<locals>.mask_sad_funcr   r9   r   r   r�   TFr�   )r„   )r„   Zmask_fun)r„   r™   )r   )r	   r"   r#   r   r-   r:   r;   r’   )rš   r‡   rˆ   rK   rL   r‰   rŠ   r   r   r1   r2   r3   r4   r   r   r   Útest_arithmetics_mask_func°  s"    





r›   Úmethr#   r%   r'   r&   c                 C   s„   t t d¡ƒ}t t d¡ƒ}tt | ƒ||ƒ}t|| ƒ|ƒ}tj |j|j¡ tt dƒ| ƒ||ƒ}t|| ƒ|ƒ}tj |j|j¡ d S )N©r   r   éœÿÿÿ)r"   rP   ÚonesÚgetattrÚtestingr   r$   )rœ   Úndd1Úndd2Úndd3Úndd4r   r   r   Útest_two_argument_useageÍ  s    r¦   c                 C   s€   d}d}t t| ƒ||ƒ}t|ƒ}t|ƒ}t || ƒ|ƒ}tj |j|j¡ t tdƒ| ƒ||ƒ}t || ƒ|ƒ}tj |j|j¡ d S )Né2   éd   rž   )r    r"   rP   r¡   r   r$   )rœ   r   r   r¤   r¢   r£   r¥   r   r   r   Ú-test_two_argument_useage_non_nddata_first_argÞ  s    r©   c               	   C   s    t t d¡tt d¡ƒd�} t t d¡tt d¡d ƒd�}t t¡� |  |¡ W 5 Q R X | j|dd�}tj 	| j
j|j
j¡ | j|d d�}|j
d ksœt‚d S )Nr�   rT   r   F)r‚   )r"   rP   rŸ   r
   r:   r;   r   r#   r¡   r   r,   rQ   r*   )r¢   r£   r¤   r¥   r   r   r   Ú&test_arithmetics_unknown_uncertaintiesó  s     ÿ ÿrª   c               	   C   s¤   t t d¡t d¡d�} t t d¡dd�}| |¡ tjtdd�� |  |¡ W 5 Q R X tjtdd�� | | ¡ W 5 Q R X tjtdd�� |  | ¡ W 5 Q R X dS )z*Test that math on objects with a psf warn.r�   r   )ZpsfNz$Not setting psf attribute during add)Úmatch)r"   rP   rŸ   Zzerosr#   r:   Zwarnsr   )r¢   r£   r   r   r   Útest_psf_warning  s    
r¬   )GÚnumpyrP   r:   Znumpy.testingr   r   Zastropyr   ru   Zastropy.nddatar   r   rH   Zastropy.nddata.nduncertaintyr   r   r	   r
   r   Zastropy.unitsr   r   Zastropy.utils.exceptionsr   Zastropy.wcsr   r"   r   ÚmarkÚfilterwarningsZparametrizerQ   ZarangeZreshaperŸ   r8   r>   ÚsÚhÚminrv   ÚkmZdimensionless_unscaledrC   ZMpcrD   r—   r†   rJ   rR   rO   rS   r]   rh   rj   rk   rm   rn   rq   Úcmrz   r{   r|   r‹   r“   r˜   r›   r¦   r©   rª   r¬   r   r   r   r   Ú<module>   sü  	
 ùþ 
&..6þõþ,$üþ	
#

ûþ

$"0þ&þ&&þíþ
#6äþ!
Bäþ!
<
äþ!B5
$$*$$**ôþY
$$*$$**ôþY
$$*$$**ôþW
;$

