
    IR-e              #       B!   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e          Zej                            d          ej                            d ej        d           ej        d          f ej        d           ej         d          f ej        d           ej         d          !                    dd          f ej         d           ej"        d          dz  f ej         d           ej"        d          dz  f ej         d          !                    dd           ej"        d          dz  f ej         d          !                    ddd           ej"        d          dz  fg          d                         Z#d Z$ej                            d          ej                            d ej        d          ej%        z   ej        d          ej%        z  f ej        d          ej%        z   ej         d          ej&        z  f ej        d          ej%        z   ej         d          !                    dd          ej'        z  f ej         d          ej(        z  ej%        z   ej"        d          dz  ej)        z  ej%        z  f ej         d          ej(        z  ej%        z   ej"        d          dz  ej(        z  ej&        z  f ej         d          !                    dd          ej(        z  ej%        z   ej"        d          dz  ej)        z  ej&        z  f ej         d          !                    ddd           ej"        d          dz  ej*        z  f ej        d           ej        d          ej%        z  ej&        z  fg          d                         Z+ej                            d ej        d          ej%        z   ej        d          ej(        z  f ej        d          ej,        z   ej        d          ej)        z  ej%        z  f ej        d          ej,        z   ej        d          f ej        d           ej        d          ej%        z  fg          d             Z-ej                            ddd ed          f ed          df ej.        d           ej/        d          g          d             Z0ej                            ddd d!d"d#d$d% ej        d&           ej        d'          f ej        d&           ej        g d(ej1        )          f ej        d'           ej        g d(g d*gej1        )          f ej        g d(ej1        )           ej        g d+ej1        )          f ej        g d(ej1        )           ej        g d(g d,gej1        )          f ej        g d(g d,gej1        )           ej        g d(g d*gej1        )          fg          d-             Z2ej                            d.d g d/d0fd1g d2dfdg d3d0fg          d4             Z3d5 Z4d6 Z5ej                            d7d8g d9g d:fd;g d9g d:fd<g d9g d:fd g d9g d:fd=g d9g d:fd>g d9g d:fd1g d9g d:fd8g d?g d:fd;g d?g d:fd<g d?g d:fd g d?g d:fd=g d?g d:fd>g d?g d:fd1g d?g d:fd8g d9g d@fd;g d9g d@fd<g d9g d@fd g d9g d@fd=g d9g d@fd>g d9g d@fd1g d9g d@fd8g d?g d@fd;g d?g d@fd<g d?g d@fd g d?g d@fd=g d?g d@fd>g d?g d@fd1g d?g d@fg          dA             Z6ej                            d7d8g d9g d:fd;g d9g d:fd<g d9g d:fd g d9g d:fd=g d9g d:fd>g d9g d:fd1g d9g d:fd8g d?g d:fd;g d?g d:fd<g d?g d:fd g d?g d:fd=g d?g d:fd>g d?g d:fd1g d?g d:fd8g d9g d@fd;g d9g d@fd<g d9g d@fd g d9g d@fd=g d9g d@fd>g d9g d@fd1g d9g d@fd8g d?g d@fd;g d?g d@fd<g d?g d@fd g d?g d@fd=g d?g d@fd>g d?g d@fd1g d?g d@fg          dB             Z7ej                            d          ej                            d7d8g d9g d:fd;g d9g d:fd<g d9g d:fd g d9g d:fd=g d9g d:fd>g d9g d:fd1g d9g d:fd8g d?g d:fd;g d?g d:fd<g d?g d:fd g d?g d:fd=g d?g d:fd>g d?g d:fd1g d?g d:fd8g d9g d@fd;g d9g d@fd<g d9g d@fd g d9g d@fd=g d9g d@fd>g d9g d@fd1g d9g d@fd8g d?g d@fd;g d?g d@fd<g d?g d@fd g d?g d@fd=g d?g d@fd>g d?g d@fd1g d?g d@fg          dC                         Z8dD Z9dE Z:dF Z;ej                            dG          ej                            dH ej        g dI          ej(        z  df ej        g dI          ej<        z  dfd ej        g dI          ej(        z  fd ej        g dI          ej<        z  f ej        g dI           ej        g dJ          f ej        g dI          ej(        z   ej        g dJ          f ej        g dI           ej        g dJ          fej(        z   ej        g dI          ej(        z   ej        g dJ          fej(        z   ej        g dI          ej<        z   ej        g dJ          f ej        g dI           ej        g dJ          fej<        z   ej        g dI          ej<        z   ej        g dJ          fej<        z   ej        g dI          ej)        z   ej        g dJ          fej<        z  g          dK                         Z=ej                            dG          ej                            dH ej        g dI          ej(        z  df ej        g dI          ej<        z  dfd ej        g dI          ej(        z  fd ej        g dI          ej<        z  f ej        g dI           ej        g dJ          f ej        g dI          ej(        z   ej        g dJ          f ej        g dI           ej        g dJ          fej(        z   ej        g dI          ej(        z   ej        g dJ          fej(        z   ej        g dI          ej<        z   ej        g dJ          f ej        g dI           ej        g dJ          fej<        z   ej        g dI          ej<        z   ej        g dJ          fej<        z   ej        g dI          ej)        z   ej        g dJ          fej<        z  g          dL                         Z>ej                            dG          ej                            dH ej        g dI          ej(        z  df ej        g dI          ej<        z  dfd ej        g dI          ej(        z  fd ej        g dI          ej<        z  f ej        g dI           ej        g dJ          f ej        g dI          ej(        z   ej        g dJ          f ej        g dI           ej        g dJ          fej(        z   ej        g dI          ej(        z   ej        g dJ          fej(        z   ej        g dI          ej<        z   ej        g dJ          f ej        g dI           ej        g dJ          fej<        z   ej        g dI          ej<        z   ej        g dJ          fej<        z   ej        g dI          ej)        z   ej        g dJ          fej<        z  g          dM                         Z?ej                            dNdOdPg          dQ             Z@dR ZAdS ZBdT ZCej                            dUg dV          dW             ZDej                            dUg dV          dX             ZEdY ZFdZ ZGd[ ZHd\ ZIdS )]    N)assert_array_almost_equalassert_array_equal)units)	NDDataRef)_testing)"IncompatibleUncertaintiesExceptionInverseVarianceStdDevUncertaintyUnknownUncertaintyVarianceUncertainty)Quantity
UnitsError)AstropyUserWarning)WCSc                   $    e Zd Zed             ZdS )StdDevUncertaintyUncorrelatedc                     dS NF )selfs    Mlib/python3.11/site-packages/astropy/nddata/mixins/tests/test_ndarithmetic.pysupports_correlatedz1StdDevUncertaintyUncorrelated.supports_correlated   s    u    N)__name__
__module____qualname__propertyr   r   r   r   r   r      s-          X  r   r   z#ignore:divide by zero encountered.*)data1data2   
      )r!   r!   )r"   r       i     )r$   r    r!   c                    t          |           }t          |          }|                    |          }t          | |z   |j                   |                    |          }t          | |z
  |j                   |                    |          }t          | |z  |j                   |                    |          }t          | |z  |j                   ||||fD ]}| j        |j        k    r| j        |j        j        k    sJ n|j        |j        j        k    sJ |j	        J |j
        J |j        J t          |j                  dk    sJ |j        J d S Nr   )NDDataArithmeticaddr   datasubtractmultiplydividendimshapeunituncertaintymasklenmetawcs)	r   r   nd1nd2nd3nd4nd5nd6nds	            r   test_arithmetics_datar<   "   sd    5
!
!C
5
!
!C ''#,,Cuu}ch///
,,s

Cuu}ch///
,,s

Cuu}ch///
**S//Cuu}ch///Cc"  :
"";"'-/////;"'-////w~%%%w27||q    v~~~~ r   c                      t          g d          } t          ddg          }t          j        t                    5  |                     |           d d d            d S # 1 swxY w Y   d S )N   r"   r#   r?   r"   )r'   pytestraises
ValueErrorr(   r5   r6   s     r   test_arithmetics_data_invalidrD   O   s    
999
%
%C
Aq6
"
"C	z	"	"                   s   AA#&A#c                    t          |           }t          |          }|                    |          }| |z   }|j        |j        }}t	          ||j                   |j        |k    sJ |                    |          }| |z
  }|j        |j        }}t	          ||j                   |j        |k    sJ |                    |          }	| |z  }|j        |j        }}t	          ||	j                   |	j        |k    sJ |                    |          }
| |z  }|j        |j        }}t	          ||
j                   |
j        |k    sJ |||	|
fD ]v}| j	        |j	        k    r| j
        |j        j
        k    sJ n|j
        |j        j
        k    sJ |j        J |j        J t          |j                  dk    sJ |j        J wd S r&   )r'   r(   r/   valuer   r)   r*   r+   r,   r-   r.   r0   r1   r2   r3   r4   )r   r   r5   r6   r7   refref_unitref_datar8   r9   r:   r;   s               r   $test_arithmetics_data_unit_identicalrJ   Z   s   $ 5
!
!C
5
!
!C ''#,,C
%-C39hHx***8x
,,s

C
%-C39hHx***8x
,,s

C
%-C39hHx***8x
**S//C
%-C39hHx***8xCc" 
 
:
"";"'-/////;"'-////~%%%w27||q    v~~~~
 
r   c                    t          |           }t          |          }t          j        t                    5  |                    |           d d d            n# 1 swxY w Y   t          j        t                    5  |                    |           d d d            n# 1 swxY w Y   |                    |          }| |z  }|j        |j        }}t          ||j
                   |j        |k    sJ |                    |          }| |z  }|j        |j        }}t          ||j
                   |j        |k    sJ ||fD ]7}	|	j        J |	j        J t          |	j                  dk    sJ |	j        J 8d S r&   )r'   r@   rA   r   r(   r*   r+   r/   rF   r   r)   r,   r0   r1   r2   r3   r4   )
r   r   r5   r6   r7   rG   rH   rI   r8   r;   s
             r   (test_arithmetics_data_unit_not_identicalrL      s    5
!
!C
5
!
!C 
z	"	"                 
z	"	"  S               ,,s

C
%-C39hHx***8x
**S//C
%-C39hHx***8xCj  ~%%%w27||q    v~~~~ s#   AA!A>B  B$'B$)wcs1wcs2)NNnaxisc                 d   t          d|           }t          d|          }| |d }n| |}n|| }n| }|                    |          }t          j        ||j                   |                    |          }t          j        ||j                   |                    |          }t          j        ||j                   |                    |          }t          j        ||j                   ||||fD ]7}	|	j        J |	j	        J t          |	j                  dk    sJ |	j        J 8d S )Nr?   )r4   r   )r'   r(   
nd_testingassert_wcs_seem_equalr4   r*   r+   r,   r/   r0   r2   r3   r1   )
rM   rN   r5   r6   ref_wcsr7   r8   r9   r:   r;   s
             r   test_arithmetics_data_wcsrU      sL    1$
'
'
'C
1$
'
'
'C|		 ''#,,C$Wcg666
,,s

C$Wcg666
,,s

C$Wcg666
**S//C$Wcg666Cc"  w~%%%27||q    w r   )mask1mask2r   )TN)FF)TF)FT)TTFT)r   r?   r   r?   r?   dtype)r?   r?   r   r?   r?   )r?   r?   r   r   r?   )r?   r   r   r?   r?   c                 B   t          d|           }t          d|          }| |d }n| |}n
|| }n| |z  }|                    |          }t          ||j                   |                    |          }t          ||j                   |                    |          }t          ||j                   |                    |          }t          ||j                   ||||fD ]7}	|	j        J |	j        J t          |	j
                  dk    sJ |	j        J 8d S )Nr?   r1   r   )r'   r(   r   r1   r*   r+   r,   r/   r0   r2   r3   r4   )
rV   rW   r5   r6   ref_maskr7   r8   r9   r:   r;   s
             r   test_arithmetics_data_masksr]      sD   8 15
)
)
)C
15
)
)
)C}		5= ''#,,Cx***
,,s

Cx***
,,s

Cx***
**S//Cx***Cc"  w~%%%27||q    v~~~~ r   )collapse_axismask_sumr/   )r#   r   r#   r   Jyr?   )r"   r   r"   r   r"   r"   r"   c                    d}t          j        t          j        |                                        |          }|dz  dk    }t	          |||          }t	          ||          }t          |                    |           j                            d          |           |                    |           j        J d S )Nr"   r#      r"   r   )r)   r1   r/   )r)   r/   )axis)nparangeprodreshaper'   r   sumr1   )r^   r_   r/   r.   r)   r1   	nd_masked	nd_nomasks           r   test_collapse_masksrm   .  s    
 E9RWU^^$$,,U33D!8q=D dDAAAI d666Iy}}-}88=AAqAII8TTT ==m=,,199999r   c                     t          dt          j        ddgt          j                            } t          dt          j        g dt          j                            }t	          j        t                    5  |                     |           d d d            n# 1 swxY w Y   t	          j        t                    5  |                     |           d d d            n# 1 swxY w Y   t	          j        t                    5  | 	                    |           d d d            n# 1 swxY w Y   t	          j        t                    5  | 
                    |           d d d            d S # 1 swxY w Y   d S )Nr?   r   rX   r[   r?   r   r?   )r'   rf   arraybool_r@   rA   rB   r(   r+   r*   r,   rC   s     r   #test_arithmetics_data_masks_invalidrr   A  s5   
128QF"(#C#C#C
D
D
DC
128IIIRX#F#F#F
G
G
GC	z	"	"                	z	"	"  S              	z	"	"  S              	z	"	"  

3                 sH   <BB"%B"C$$C(+C(D**D.1D.E11E58E5c            	         t          g dt          g d                    } t          g dt          g d                    }|                     |          }|                    |           }t          |j        j        |j        j                   t          j        t          j        g d          dz  t          j        g d          dz  z             }t          |j        j        |           |                     |          }|                    |           }t          |j        j        |j        j                   t          |j        j        |           | 	                    |          }|	                    |           }t          |j        j        |j        j                   t          j        t          j        g d                    t          j        t          j        g d          t          j        g d          z  dz  t          j        g d          t          j        g d          z  dz  z             z  }t          |j        j        |           |                     |          }|                    |           }t          j        t          j        g d                    t          j        t          j        g d          t          j        g d          z  dz  t          j        g d          t          j        g d          z  dz  z             z  }t          |j        j        |           t          j        t          j        g d                    t          j        t          j        g d          t          j        g d          z  dz  t          j        g d          t          j        g d          z  dz  z             z  }t          |j        j        |           d S )	Nr>   r?   r?   r#   r0   ra   r"   )r"   rd      )      ?      ?g      ?)r"   r?   gUUUUUU?)r'   r
   r(   r   r0   rp   rf   sqrtr*   r+   r   absr,   )r5   r6   r7   r8   ref_uncertaintyref_uncertainty_1ref_uncertainty_2s          r   (test_arithmetics_stddevuncertainty_basicr~   T  sh   
9992CIII2N2N
O
O
OC
9992CIII2N2N
O
O
OC
''#,,C
''#,,Cs,co.CDDDgbhyyy11Q6)))9L9LPQ9QQRROs,o>>>
,,s

C
,,s

Cs,co.CDDDs,o>>>
 ,,s

C
,,s

Cco3S_5JKKKfRXiii0011BG	)))		rx			22	2q88III)))!4!44
:	;5 5 O co3_EEE
**S//C
**S//C rx(=(=(=>>??"'	)))		rx			22	2q88III)))!4!44
:	;C C  co35FGGGrx6677"'	)))		rx			22	2q88III)))!4!44
:	;; ;  co35FGGGGGr   )coruncert1r   rt   )r"   r"      g      g      п      ?rw   )r   r   )r   r   c           	         t          j        g d          }t          j        |          }t          j        |          }t          j        g d          }t          |t          |                    }t          |t          |                    }|                    ||           }|                    ||           }t          |j        j        |j        j                   t          j        |dz  |dz  z   d| z  t          j        ||z            z  z             }	t          |j        j        |	           |	                    ||           }|	                    ||           }t          |j        j        |j        j                   t          j        |dz  |dz  z   d| z  t          j        ||z            z  z
            }	t          |j        j        |	           |
                    ||           }|
                    ||           }t          |j        j        |j        j                   t          j        ||z            t          j        ||z  dz  ||z  dz  z   d| z  t          j        ||z            z  ||z  z  z             z  }	t          |j        j        |	           |                    ||           }|                    ||           }t          j        ||z            t          j        ||z  dz  ||z  dz  z   d| z  t          j        ||z            z  ||z  z  z
            z  }
t          |j        j        |
           t          j        ||z            t          j        ||z  dz  ||z  dz  z   d| z  t          j        ||z            z  ||z  z  z
            z  }t          |j        j        |           d S )Nr>   ra   ru   uncertainty_correlationr"   )rf   rp   r'   r
   r(   r   r0   ry   rz   r*   r+   r   r,   )r   r   r   r   uncert2r5   r6   r7   r8   r{   r|   r}   s               r   9test_arithmetics_stddevuncertainty_basic_with_correlationr     s   D HYYYEHUOOEhwGhyyy!!G
5.?.H.H
I
I
IC
5.?.H.H
I
I
IC
''#s'
3
3C
''#s'
3
3Cs,co.CDDDg
WaZ!c'BF7W3D,E,E"EE O s,o>>>
,,sC,
8
8C
,,sC,
8
8Cs,co.CDDDg
WaZ!c'BF7W3D,E,E"EE O s,o>>>
 ,,sC,
8
8C
,,sC,
8
8Cco3S_5JKKKveem,,	5QU?q
 	!s7RVGg-...%%-@	B1 1 O
 co3_EEE
**S#*
6
6C
**S#*
6
6C .."'	5QU?q
 	!s7RVGg-...%%-@	B3 3 
 co35FGGG.."'	5QU?q
 	!s7RVGg-...%%-@	B3 3 
 co35FGGGGGr   c                    t          j        g d          }t          j        |          }t          j        |          dz  }t          j        g d          dz  }t          |t          |                    }t          |t          |                    }|                    ||           }|                    ||           }t          |j        j        |j        j                   ||z   d| z  t          j        ||z            z  z   }	t          |j        j        |	           |                    ||           }|                    ||           }t          |j        j        |j        j                   ||z   d| z  t          j        ||z            z  z
  }	t          |j        j        |	           |	                    ||           }|	                    ||           }t          |j        j        |j        j                   ||z  dz  ||dz  z  ||dz  z  z   d| z  t          j        ||z            z  ||z  z  z   z  }	t          |j        j        |	           |                    ||           }|                    ||           }||dz  z  ||dz  z  z   d| z  t          j        ||z            z  ||z  z  z
  }
||z  dz  |
z  }t          |j        j        |           ||z  dz  |
z  }t          |j        j        |           d S )Nr>   r"   ra   ru   r   )rf   rp   r'   r   r(   r   r0   ry   r*   r+   r   r,   r   r   r   r   r   r5   r6   r7   r8   r{   
ref_commonr|   r}   s                r   ;test_arithmetics_varianceuncertainty_basic_with_correlationr     s   D HYYYEHUOOEhw1$Ghyyy!!Q&G
5.A'.J.J
K
K
KC
5.A'.J.J
K
K
KC
''#s'
3
3C
''#s'
3
3Cs,co.CDDD'!c'BGGg<M4N4N*NNOs,o>>>
,,sC,
8
8C
,,sC,
8
8Cs,co.CDDD'!c'BGGg<M4N4N*NNOs,o>>>
 ,,sC,
8
8C
,,sC,
8
8Cco3S_5JKKKu}*%(
E1H
	s7RWWw.///55=A	CO
 co3_EEE
**S#*
6
6C
**S#*
6
6C 	%(
E1H
	s7RWWw.///55=A	C  1,z9co35FGGG1,z9co35FGGGGGr   c                 v   t          j        g d          }t          j        |          }dt          j        |          dz  z  }dt          j        g d          dz  z  }t          |t          |                    }t          |t          |                    }|                    ||           }|                    ||           }t          |j        j        |j        j                   dd|z  d|z  z   d| z  t          j        ||z            z  z   z  }	t          |j        j        |	           |                    ||           }|                    ||           }t          |j        j        |j        j                   dd|z  d|z  z   d| z  t          j        ||z            z  z
  z  }	t          |j        j        |	           |	                    ||           }|	                    ||           }t          |j        j        |j        j                   d||z  dz  d|z  |dz  z  d|z  |dz  z  z   d| z  t          j        ||z            z  ||z  z  z   z  z  }	t          |j        j        |	           |                    ||           }|                    ||           }d|z  |dz  z  d|z  |dz  z  z   d| z  t          j        ||z            z  ||z  z  z
  }
d||z  dz  |
z  z  }t          |j        j        |           d||z  dz  |
z  z  }t          |j        j        |           d S )Nr>   r?   r"   ra   ru   r   )rf   rp   r'   r	   r(   r   r0   ry   r*   r+   r   r,   r   s                r   Btest_arithmetics_inversevarianceuncertainty_basic_with_correlationr   J  s`   J HYYYEHUOOE"(7##q((G"(999%%**G
5og.F.F
G
G
GC
5og.F.F
G
G
GC
''#s'
3
3C
''#s'
3
3Cs,co.CDDD	Ga'k!AGbgg6G.H.H$HHO s,o>>>
,,sC,
8
8C
,,sC,
8
8Cs,co.CDDD	Ga'k!AGbgg6G.H.H$HHO s,o>>>
 ,,sC,
8
8C
,,sC,
8
8Cco3S_5JKKK	1K%("'kE1H$%3w7!2333uu}EG	
O co3_EEE
**S#*
6
6C
**S#*
6
6C 	
GeQh
g+q
 	!s7RWWw.///55=A	C  eem1J>?co35FGGGeem1J>?co35FGGGGGr   c                     t          j        g d          } t          j        g d          }t          j        g d          }t          j        g d          }t          j        g d          }t          | t          |                    }t          |t          |                    }|                    ||           d S )Nr>   r?   r?   r?   ra   )r   r   r   ru   r   )rf   rp   r'   r
   r(   r   r   r   r   r   r5   r6   s          r   ?test_arithmetics_stddevuncertainty_basic_with_correlation_arrayr     s    HYYYEHYYYEhyyy!!Ghyyy!!G
(<<<
 
 C
5.?.H.H
I
I
IC
5.?.H.H
I
I
ICGGCG-----r   c                     t          j        g d          } t          j        g d          }t          j        g d          }t          j        g d          }d}t          | t          |                    }t          |t          |                    }t	          j        t                    5  |                    ||           d d d            d S # 1 swxY w Y   d S )Nr>   r   ra   r#   ru   r   )rf   rp   r'   r   r@   rA   rB   r(   r   s          r   -test_arithmetics_with_correlation_unsupportedr     s   HYYYEHYYYEhyyy!!Ghyyy!!G
C
5.KG.T.T
U
U
UC
5.KG.T.T
U
U
UC	z	"	" 2 2S1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s   0CCCc                     t          g d          } t          g dt          g d                    }t          g dt          g d                    }|                     |          }|                    |          }t          |j        j        |j        j                   t          t          j        |j        j                  |j        j                   |                    |           }|                    |          }t          |j        j        |j        j                   t          t          j        |j        j                  |j        j                   |                     |          }|                    |          }t          |j        j        |j        j                   t          t          j        |j        j                  |j        j                   |                    |           }|                    |          }t          |j        j        |j        j                   t          t          j        |j        j                  |j        j                   | 	                    |          }|	                    |          }t          |j        j        |j        j                   t          t          j        |j        j                  |j        j                   |	                    |           }|	                    |          }t          |j        j        |j        j                   t          t          j        |j        j                  |j        j                   | 
                    |          }|
                    |          }t          |j        j        |j        j                   t          t          j        |j        j                  |j        j                   |
                    |           }|
                    |          }t          |j        j        |j        j                   t          t          j        |j        j                  |j        j                   d S )N)r?   r   r#   )r   r   r   ru   )r"   r"   r   ra   )r'   r
   r(   r   r0   rp   rf   rz   r*   r+   r,   )r5   nd1_refr6   r7   nd3_refs        r   .test_arithmetics_stddevuncertainty_one_missingr     sk   
:::
&
&Czzz7H7S7STTTG
:::3DYYY3O3O
P
P
PC ''#,,Ckk#Gs,g.A.GHHHrvco344co6KLLL
''#,,CgggGs,g.A.GHHHrvco344co6KLLL ,,s

Cs##Gs,g.A.GHHHrvco344co6KLLL
,,s

Cll7##Gs,g.A.GHHHrvco344co6KLLL ,,s

Cs##Gs,g.A.GHHHrvco344co6KLLL
,,s

Cll7##Gs,g.A.GHHHrvco344co6KLLL **S//CnnS!!Gs,g.A.GHHHrvco344co6KLLL
**S//Cjj!!Gs,g.A.GHHHrvco344co6KLLLLLr   z!ignore:.*encountered in.*divide.*)r   r   r>   rc   c                 >
   t          j        g d          t          j        z  }t          j        g d          t          j        z  }| St	          |           } t          | t                    r|                     |j                  }n| }t	          |d          }nd } d }|St	          |          }t          |t                    r|                    |j                  }n|}t	          |d          }nd }d }t          ||           }t          ||          }	t          ||          }
t          ||          }|
                    |	          }|

                    |          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |	
                    |          }|
                    |
          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |                    |	          }|
                    |          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |	                    |          }|                    |
          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |                    |	          }|
                    |          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |	                    |          }|                    |
          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |                    |	          }|
                    |          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |	                    |          }|                    |
          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   d S )Nr>   r   r   Tcopyru   )rf   rp   umr
   
isinstancer   to_valuer/   r'   r(   r0   r   r*   r+   r,   r   r   r   r   uncert1_refuncert_ref1uncert2_refuncert_ref2r5   r6   r   nd2_refr7   r   s                 r   -test_arithmetics_stddevuncertainty_with_unitsr     s   ( HYYY!#%EHZZZ  13&E#G,,gx(( 	"!**5:66KK!K'$???#G,,gx(( 	"!**5:66KK!K'$???
5g
6
6
6C
5g
6
6
6Cu+>>>Gu+>>>G ''#,,Ckk'""G8w|####?7#6#;;;;;s,co.CDDD
''#,,Ckk'""G8w|####?7#6#;;;;;s,co.CDDD ,,s

Cw''G8w|####?7#6#;;;;;s,co.CDDD
,,s

Cw''G8w|####?7#6#;;;;;s,co.CDDD ,,s

Cw''G8w|####?7#6#;;;;;s,co.CDDD
,,s

Cw''G8w|####?7#6#;;;;;s,co.CDDD **S//CnnW%%G8w|####?7#6#;;;;;s,co.CDDD
**S//CnnW%%G8w|####?7#6#;;;;;s,co.CDDDDDr   c                 V
   t          j        g d          t          j        z  }t          j        g d          t          j        z  }| Yt	          | dz            } t          | t                    r|                     |j        dz            }n| }t	          |d          }nd } d }|Yt	          |dz            }t          |t                    r|                    |j        dz            }n|}t	          |d          }nd }d }t          ||           }t          ||          }	t          ||          }
t          ||          }|
                    |	          }|

                    |          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |	
                    |          }|
                    |
          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |                    |	          }|
                    |          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |	                    |          }|                    |
          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |                    |	          }|
                    |          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |	                    |          }|                    |
          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |                    |	          }|
                    |          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |	                    |          }|                    |
          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   d S )Nr>   r   r"   Tr   ru   )rf   rp   r   r   r   r   r   r   r/   r'   r(   r0   r   r*   r+   r,   r   s                 r   /test_arithmetics_varianceuncertainty_with_unitsr   o  s   ( HYYY!#%EHZZZ  13&E%gqj11gx(( 	"!**5:q=99KK!K)+DAAA%gqj11gx(( 	"!**5:q=99KK!K)+DAAA
5g
6
6
6C
5g
6
6
6Cu+>>>Gu+>>>G ''#,,Ckk'""G8w|####?7#6#;;;;;s,co.CDDD
''#,,Ckk'""G8w|####?7#6#;;;;;s,co.CDDD ,,s

Cw''G8w|####?7#6#;;;;;s,co.CDDD
,,s

Cw''G8w|####?7#6#;;;;;s,co.CDDD ,,s

Cw''G8w|####?7#6#;;;;;s,co.CDDD
,,s

Cw''G8w|####?7#6#;;;;;s,co.CDDD **S//CnnW%%G8w|####?7#6#;;;;;s,co.CDDD
**S//CnnW%%G8w|####?7#6#;;;;;s,co.CDDDDDr   c                 n
   t          j        g d          t          j        z  }t          j        g d          t          j        z  }| _t	          d| dz  z            } t          | t                    r!|                     d|j        dz  z            }n| }t	          |d          }nd } d }|_t	          d|dz  z            }t          |t                    r!|                    d|j        dz  z            }n|}t	          |d          }nd }d }t          ||           }t          ||          }	t          ||          }
t          ||          }|
                    |	          }|

                    |          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |	
                    |          }|
                    |
          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |                    |	          }|
                    |          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |	                    |          }|                    |
          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |                    |	          }|
                    |          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |	                    |          }|                    |
          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |                    |	          }|
                    |          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   |	                    |          }|                    |
          }|j        |j        k    sJ |j        j        |j        j        k    sJ t          |j        j        |j        j                   d S )Nr>   r   r?   r"   Tr   ru   )rf   rp   r   r   r	   r   r   r   r/   r'   r(   r0   r   r*   r+   r,   r   s                 r   6test_arithmetics_inversevarianceuncertainty_with_unitsr     s   ( HYYY!#%EHZZZ  13&E!!gqj.11gx(( 	"!**1uz1}+<==KK!K%k===!!gqj.11gx(( 	"!**1uz1}+<==KK!K%k===
5g
6
6
6C
5g
6
6
6Cu+>>>Gu+>>>G ''#,,Ckk'""G8w|####?7#6#;;;;;s,co.CDDD
''#,,Ckk'""G8w|####?7#6#;;;;;s,co.CDDD ,,s

Cw''G8w|####?7#6#;;;;;s,co.CDDD
,,s

Cw''G8w|####?7#6#;;;;;s,co.CDDD ,,s

Cw''G8w|####?7#6#;;;;;s,co.CDDD
,,s

Cw''G8w|####?7#6#;;;;;s,co.CDDD **S//CnnW%%G8w|####?7#6#;;;;;s,co.CDDD
**S//CnnW%%G8w|####?7#6#;;;;;s,co.CDDDDDr   use_abbreviationfffirst_foundc                 b   ddi}ddi}d}d}t          g d          }t          g d          }t          j        d          \  }}g d	}	g d	}
t          |	||||
          }t          |
||||
          }t          |	          }|                    |d d d d           }|j        J t          |j                  dk    sJ |j        J |j	        J |                    |d| | |           }t          j
        |j        |           |j        |k    sJ |j        |k    sJ t          |j	        j        |j                   |                    |d| | |           }t          j
        |j        |           |j        |k    sJ |j        |k    sJ t          |j	        j        |j                   d S )Nar?   br"   TFr>   rO   r   r3   r1   r4   r0   )propagate_uncertaintieshandle_metahandle_maskcompare_wcsr   )r
   rR   create_two_unequal_wcsr'   r(   r4   r2   r3   r1   r0   rS   r   rp   )r   meta1meta2rV   rW   uncertainty1uncertainty2rM   rN   r   r   r5   r6   r7   nd_s                  r    test_arithmetics_handle_switchesr   C  s%   !HE!HEEE$YYY//L$YYY//L2;;;JD$IIEIIE
E4\  C E4\  C 5
!
!C '' $   C 7???sx==A8?""" '' %$$$   C $SWd3338u8us,l.@AAA '' %$$$   C $SWd3338u8us,l.@AAAAAr   c                  B   dd} ddi}ddd}d}d	}t          g d
          }t          g d
          }g d}g d}t          ||||          }	t          ||||          }
|	                    |
|           }|j        d         dk    sJ d|j        vsJ |	                    |
| d          }|j        d         dk    sJ |j        d         dk    sJ t	          j        t                    5  |	                    |
| d           d d d            d S # 1 swxY w Y   d S )Nfirstc                     |dk    r| S |S )Nr   r   )r   r   takes      r   meta_fun_funcz1test_arithmetics_meta_func.<locals>.meta_fun_func  s    7??LLr   r   r?   r#   r"   r   r   TFr>   r   r3   r1   r0   )r   r   second)r   	meta_take)r   r   )r   )r
   r'   r(   r3   r@   rA   KeyError)r   r   r   rV   rW   r   r   r   r   r5   r6   r7   r8   s                r   test_arithmetics_meta_funcr     s       !HE!EEE$YYY//L$YYY//LIIEIIE
5u5l
S
S
SC
5u5l
S
S
SC
''#='
1
1C8C=Ach
''#=H'
E
EC8C=A8C=A	x	 	  ? ?X>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s   .DDDc                     dd} ddi}ddd}d}d	}t          g d
          }t          g d
          }t          j        d          \  }}g d}	g d}
t          |	||||          }t          |
||||          }|                    ||           }t          j        |j        |           t          j        t                    5  |                    || d           d d d            n# 1 swxY w Y   t          j        t                    5  |                    || d           d d d            d S # 1 swxY w Y   d S )N皙?c                     |dk     rdS dS )Ng{Gz?FTr   )rM   rN   	tolerances      r   wcs_comp_funcz0test_arithmetics_wcs_func.<locals>.wcs_comp_func  s    t5tr   r   r?   r#   r"   r   TFr>   rO   r   r   )r   gh㈵>)r   wcs_tolerance)r   r   )r   )r
   rR   create_two_equal_wcsr'   r(   rS   r4   r@   rA   rB   r   )r   r   r   rV   rW   r   r   rM   rN   r   r   r5   r6   r7   s                 r   test_arithmetics_wcs_funcr     s      
 !HE!EEE$YYY//L$YYY//L0q999JD$IIEIIE
E4\  C E4\  C ''#='
1
1C$SWd333 
z	"	" G GgFFFG G G G G G G G G G G G G G G
 
x	 	  = =!<<<= = = = = = = = = = = = = = = = = =s$   C++C/2C/D55D9<D9c                  *   dd} ddi}ddd}g d}g d	}t          g d
          }t          g d
          }g d}g d}t          ||||          }	t          ||||          }
|	                    |
|           }t          |j        |	j                   |	                    |
| d          }t          |j        |
j                   t          j        t                    5  |	                    |
| d           d d d            d S # 1 swxY w Y   d S )Nr   c                     |dk    r|S | S )Nrw   r   )rV   rW   funs      r   mask_sad_funcz1test_arithmetics_mask_func.<locals>.mask_sad_func  s    99LLr   r   r?   r#   r"   r   )TFT)TFFr>   r   r   r   )r   mask_fun)r   r   )r   )r
   r'   r(   r   r1   r@   rA   r   )r   r   r   rV   rW   r   r   r   r   r5   r6   r7   r8   s                r   test_arithmetics_mask_funcr     s       !HE!EE   E$YYY//L$YYY//LIIEIIE
5u5l
S
S
SC
5u5l
S
S
SC
''#='
1
1Csx***
''#=1'
=
=Csx***	x	 	  7 7A6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   "DDDmeth)r(   r*   r,   r+   c                 "   t          t          j        d                    }t          t          j        d                    } t          t           |           ||          } t          ||           |          }t          j                            |j        |j                    t          t          d          |           ||          } t          ||           |          }t          j                            |j        |j                   d S )Nr#   r#   )r'   rf   onesgetattrtestingr   r)   )r   ndd1ndd2ndd3ndd4s        r   test_two_argument_useager     s    BGFOO,,DBGFOO,,D +7#T**466D74t$$DJ!!$)TY777 17#D))400t<<D74t$$DJ!!$)TY77777r   c                    d}d} t          t          |           ||          }t          |          }t          |          } t          ||           |          }t          j                            |j        |j                    t          t          d          |           ||          } t          ||           |          }t          j                            |j        |j                   d S )N2   d   r   )r   r'   rf   r   r   r)   )r   r   r   r   r   r   r   s          r   -test_two_argument_useage_non_nddata_first_argr     s    EE +7#T**5%88D E""DE""D74t$$DJ!!$)TY777 17#D))400>>D74t$$DJ!!$)TY77777r   c                  v   t          t          j        d          t          t          j        d                              } t          t          j        d          t          t          j        d          dz                      }t	          j        t                    5  |                     |           d d d            n# 1 swxY w Y   |                     |d          }t          j        	                    | j
        j        |j
        j                   |                     |d           }|j
        J d S )Nr   ru   r"   F)r   )r'   rf   r   r   r@   rA   r   r(   r   r   r0   rp   )r   r   r   r   s       r   &test_arithmetics_unknown_uncertaintiesr     sI   
%7%H%H  D 
%7!8K%L%L  D 
9	:	:                 88D%888DJ!!$"2"8$:J:PQQQ88D$877D#####s   !CC
Cc                     t          t          j        d          t          j        d                    } t          t          j        d          d          }|                    |           t          j        t          d          5  |                     |           ddd           n# 1 swxY w Y   t          j        t          d          5  |                    |            ddd           n# 1 swxY w Y   t          j        t          d          5  |                     |            ddd           dS # 1 swxY w Y   dS )z*Test that math on objects with a psf warn.r   r#   )psfNz$Not setting psf attribute during add)match)r'   rf   r   zerosr(   r@   warnsr   )r   r   s     r   test_psf_warningr     s   BGFOO!===DBGFOO666D 	HHTNNN	(0V	W	W	W                	(0V	W	W	W                	(0V	W	W	W                   s6   	B++B/2B/C33C7:C7D<<E E c                  :   t          t          j        d          t          t          j        d                              } t          t          j        d          t          t          j        d                              }t          j        d          }d}| j                            t          j        |||           t          j	        t                    5  | j                            t          j        |||           d d d            d S # 1 swxY w Y   d S )Nr#   ru   r   )r'   rf   r   r
   r   r0   	propagater(   r@   rA   rB   mod)r   r   resultcorrelations       r   test_raise_method_not_supportedr   (  s3   BHQKK5FrxPQ{{5S5STTTDBGAJJ4Ebgajj4Q4QRRRDXa[[FKrvtV[AAA 
z	"	" F F""264EEEF F F F F F F F F F F F F F F F F Fs   (DDDc                     t          j        g dg dg dg          } t          j        g dg dg dg          }t          |           }t          | |          }|                    dt           j                  j        J |                    |t           j                  j        J t           j                            |                    dt           j                  j        |           t           j                            |                    |t           j                  j        |           t           j                            |                    |t           j                  j        |           t          j        g d	g dg d
g          }t          | |          }t           j                            |                    |t           j                  j        t          j        ||                     d S )N)r   r?   r   ro   )r   r?   @   )   r   r?   )r"   r?   r   r[   rx   r   )r   r?   r   )r   r   r"   )rf   rp   r   r+   
bitwise_orr1   r   assert_equal)rp   r1   nref_nomasknref_masked
other_masknref_mask_others         r   test_nddata_bitmask_arithmeticr  5  s    HiiiIII677E8ZZZIII677DE""KE---K ??DLLL GGLTTT JSbm<<A4  
 J[bmDDI4  
 J[bmDDI4  
 :::yyy)))<==JJ777OJ  "- HHM
dJ''    r   )Jnumpyrf   r@   numpy.testingr   r   astropyr   r   astropy.nddatar   r   rR   astropy.nddata.nduncertaintyr   r	   r
   r   r   astropy.unitsr   r   astropy.utils.exceptionsr   astropy.wcsr   r'   r   markfilterwarningsparametrizerp   rg   ri   r   r<   rD   shminr   kmdimensionless_unscaledrJ   MpcrL   r   r   rU   rq   r]   rm   rr   r~   r   r   r   r   r   r   cmr   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   <module>r     sC        G G G G G G G G       $ $ $ $ $ $ 1 1 1 1 1 1              / . . . . . . . 7 7 7 7 7 7            $5    ABB	!hbhrll#	!ibimm$	!ibimm++Aq112	2a(	2))A-.	2		q!	$	$gbgfoo&9:	4	 	 Q	+	+WRW[-A-AA-EF    CB@   ABB	!qs	HBHRLL13./	!qs	IBIbMMAC/0	!qs	IBIbMM11!Q77!%?@	2	qs	"GBGBKK!Oad$:QS$@A	2	qs	"GBGH$5$5$9AC$?!#$EF	2		q!	$	$qs	*QS	0'"'&//A2E2Lqs2RSBIdOO##B2..BGK  1$q'??	
 
!hbhrllQS(13./  & &!  CB"&X 	!qs	HBHRLL13./	!qu	hbhrllQT1AC78	!qu	hbhrll+	!hbhrllQS()	   F 	ss|||	1t'
'a000)
)222	 	 	 	H 	%("(4..)	%("(???"(CCCD	$???OOO"DBHUUUVBH___BH555BH___BH555	

 BH___BH555BHooo7rxHHH	

 BHooo7rxHHHBHooo7rxHHH	
' 6 7 6D )tq,,,5999d7KL 
: 
:	 
:  &-H -H -Hl 	YYY			"	yyy)))$				999%	
IIIyyy!	yyy)))$	iii#	
IIIyyy!	\\\999%	|||YYY'	iii(	
LLL)))$	|||YYY'	lllIII&	
LLL)))$	YYY%	yyy,,,'				<<<(	
III|||$	yyy,,,'	iii&	
III|||$	\\\<<<(	|||\\\*	lll+	
LLL,,,'	|||\\\*	lllLLL)	
LLL,,,'9   B9H 9HC   B9HD 	YYY			"	yyy)))$				999%	
IIIyyy!	yyy)))$	iii#	
IIIyyy!	\\\999%	|||YYY'	iii(	
LLL)))$	|||YYY'	lllIII&	
LLL)))$	YYY%	yyy,,,'				<<<(	
III|||$	yyy,,,'	iii&	
III|||$	\\\<<<(	|||\\\*	lll+	
LLL,,,'	|||\\\*	lllLLL)	
LLL,,,'9   B3H 3HC   B3Hx ABB	YYY			"	yyy)))$				999%	
IIIyyy!	yyy)))$	iii#	
IIIyyy!	\\\999%	|||YYY'	iii(	
LLL)))$	|||YYY'	lllIII&	
LLL)))$	YYY%	yyy,,,'				<<<(	
III|||$	yyy,,,'	iii&	
III|||$	\\\<<<(	|||\\\*	lll+	
LLL,,,'	|||\\\*	lllLLL)	
LLL,,,'9   B<H <HC    CBD<HD. . .
2 
2 
2&/M /M /Mj ?@@	)))		qs	"D)	)))		qt	#T*	xrx			""QS()	xrx			""QT)*	)))		hbhyyy112	)))		qs	"HBHYYY$7$78	)))		hbhyyy112QS8	)))		qs	"HBHYYY$7$7813>	)))		qt	#XRXiii%8%89	)))		hbhyyy112QT9	)))		qt	#XRXiii%8%89AD@	)))		qt	#XRXiii%8%89AD@ "SE SE#  A@$SEr ?@@	)))		qs	"D)	)))		qt	#T*	xrx			""QS()	xrx			""QT)*	)))		hbhyyy112	)))		qs	"HBHYYY$7$78	)))		hbhyyy112QS8	)))		qs	"HBHYYY$7$7813>	)))		qt	#XRXiii%8%89	)))		hbhyyy112QT9	)))		qt	#XRXiii%8%89AD@	)))		qt	#XRXiii%8%89AD@ "SE SE#  A@$SEr ?@@	)))		qs	"D)	)))		qt	#T*	xrx			""QS()	xrx			""QT)*	)))		hbhyyy112	)))		qs	"HBHYYY$7$78	)))		hbhyyy112QS8	)))		qs	"HBHYYY$7$7813>	)))		qt	#XRXiii%8%89	)))		hbhyyy112QT9	)))		qt	#XRXiii%8%89AD@	)))		qt	#XRXiii%8%89AD@ "SE SE#  A@$SEn +dM-BCC8B 8B DC8Bv? ? ?>!= != !=H7 7 7: !J!J!JKK8 8 LK8  !J!J!JKK8 8 LK8($ $ $&   
F 
F 
F$ $ $ $ $r   