
    IR-e3                        d dl mZ d dlZd dlZd dlmZmZmZ d dl	m
Z
 d dlmZ d dlmZmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ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(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9m:Z: d dl;m<Z< d Z=d Z>ej?        @                    dd          d             ZAd ZBd ZCd ZDd ZEd ZFd ZGd ZHd ZId ZJd  ZKd! ZLd" ZMd# ZNd$ ZOd% ZPej?        @                    d&d'          d(             ZQej?        @                    d&d'          d)             ZRej?        @                    d*d+d,g ejS        d-           ejT        d+d,g          fg d. ejS        d/           ejT        g d.          fg d0 ejT        g d.           ejT        g d.          ff          d1             ZUej?        @                    d2d3d4gd5fg d6d7fd3d8gd7ff          d9             ZVej?        @                    d2d3d4gd5fg d6d5fd3d8gd7ff          d:             ZWd; ZXej?        @                    d< ejY        d+d,g           ejS        d-           ejS        d-          d5f ejY        d=d=g           ejT        d+d,g           ejS        d-          d5f ejY        d+d,g           ejS        d-          dd7f ejY        d+d,g          d ejS        d-          d5ff          d>             ZZej?        @                    d?d@dAg          dB             Z[dC Z\dD Z]ej?        @                    d?d@dAg          dE             Z^ej_        dF             Z`dG ZadH ZbdI ZcdJ ZddK ZedL ZfdM ZgdN ZhdO ZidP ZjdQ ZkdR ZldS ZmdTZndUZodVZpej?        q                    e dWX          ej?        @                    dYendZdd7d[ejr        z  d\ejr        z  feodZd-d7d]ejr        z  d^ejr        z  fepd_dd7d]ejr        z  d^ejr        z  fendZdd5d[ejr        z  d\ejr        z  fend`dd7d[ejr        z  d\ejr        z  feod`d-d7d]ejr        z  d^ejr        z  fepd`dd7d]ejr        z  d^ejr        z  fend`dd5d[ejr        z  d\ejr        z  fg          da                         Zsej?        q                    e dWX          db             Ztej?        q                    e dWX          dc             Zuej?        jv        ej?        @                    ddd d g ejw        de           ejw        de          gg          df                         Zxej_        dg             Zydh Zzdi Z{dj Z|ej?        @                    dkej}        gdlz  dd gdlz  dmgdez  f          dn             Z~dS )o    )nullcontextN)assert_allcloseassert_almost_equalassert_equal)Version)units)ITRSEarthLocationSkyCoord)fits)Time)Quantity)unbroadcast)	HAS_SCIPY)get_pkg_data_contentsget_pkg_data_filename)AstropyUserWarning)_wcs)"_pixel_to_pixel_correlation_matrix"_pixel_to_world_correlation_matrix_split_matrixadd_stokes_axis_to_wcscelestial_frame_to_wcscustom_frame_to_wcs_mappingscustom_wcs_to_frame_mappingsfit_wcs_from_pointsis_proj_plane_distortedlocal_partial_pixel_derivativesnon_celestial_pixel_scalesobsgeo_to_framepixel_to_pixelpixel_to_skycoordproj_plane_pixel_scalesskycoord_to_pixelwcs_to_celestial_frame)WCSWCSSUB_LATITUDEWCSSUB_LONGITUDEFITSFixedWarningSip)SlicedFITSWCSc                     t          d          } t          j        ddg          | j        _        t          j        | j        j        t          j        dd                     | j        j        }|                     d          }t          j        |j        	                                
                                t          j        g d          k              sJ |                     d          }t          j        |j        	                                
                                t          j        g d          k              sJ |                     d          }t          j        |j        	                                
                                t          j        g d	          k              sJ |                     d
          }t          j        |j        	                                
                                t          j        g d          k              sJ t          d          } || j        _        |                     d          }t          j        |j        	                                
                                t          j        g d          k              sJ |                     d          }t          j        |j        	                                
                                t          j        g d          k              sJ |                     d          }t          j        |j        	                                
                                t          j        g d	          k              sJ |                     d
          }t          j        |j        	                                
                                t          j        g d          k              sJ d S )N   naxis      r   )      r-   )r0   r3   r-   r2   )r0   r2   r-   r3   )r0   r2   r3   )r&   npzeroswcspcfill_diagonalarangedropaxisallget_pcdiagonalarraycd)r6   r7   droppeds      <lib/python3.11/site-packages/astropy/wcs/tests/test_utils.pytest_wcs_droppingrB   0   s   
A,,,C1a&!!CGJSWZ1a111	Bll1ooG6'+$$&&//11RXiii5H5HHIIIIIll1ooG6'+$$&&//11RXiii5H5HHIIIIIll1ooG6'+$$&&//11RXiii5H5HHIIIIIll1ooG6'+$$&&//11RXiii5H5HHIIIII
A,,,CCGJll1ooG6'+$$&&//11RXiii5H5HHIIIIIll1ooG6'+$$&&//11RXiii5H5HHIIIIIll1ooG6'+$$&&//11RXiii5H5HHIIIIIll1ooG6'+$$&&//11RXiii5H5HHIIIIIII    c                  6   t          d          } t          j        ddg          | j        _        t          j        | j        j        t          j        dd                     | j        j        }|                     dd          }t          j        |j        	                                
                                t          j        g d          k              sJ |                     dd          }t          j        |j        	                                
                                t          j        g d          k              sJ |                     d	d          }t          j        |j        	                                
                                t          j        g d
          k              sJ t          d          } || j        _        |                     dd          }t          j        |j        	                                
                                t          j        g d          k              sJ |                     dd          }t          j        |j        	                                
                                t          j        g d          k              sJ |                     d	d          }t          j        |j        	                                
                                t          j        g d
          k              sJ d S )Nr-   r.   r0   r1   r   )r2   r0   r3   r-   r3   )r-   r2   r3   r0   r2   )r0   r2   r-   r3   )r&   r4   r5   r6   r7   r8   r9   swapaxesr;   r<   r=   r>   r?   )r6   r7   swappeds      rA   test_wcs_swappingrG   L   sp   
A,,,C1a&!!CGJSWZ1a111	Bll1a  G6'+$$&&//11RXlll5K5KKLLLLLll1a  G6'+$$&&//11RXlll5K5KKLLLLLll1a  G6'+$$&&//11RXlll5K5KKLLLLL
A,,,CCGJll1a  G6'+$$&&//11RXlll5K5KKLLLLLll1a  G6'+$$&&//11RXlll5K5KKLLLLLll1a  G6'+$$&&//11RXlll5K5KKLLLLLLLrC   ndim)r2   r3   c                     t          |           }t          | dz             D ]W}t          ||          }|j        j        | dz   k    sJ |j        j        |         dk    sJ |j        j        |         dk    sJ Xd S )Nr.   r0   STOKES)r&   ranger   r6   r/   ctypecname)rH   r6   iioutwcss       rA   test_add_stokesrP   d   s    
D///CD1Hoo 0 0'R00z4!8++++z#x////z#x/////	0 0rC   c                     t          d          } ddg| j        _        ddg| j        _        ddg| j        _        ddg| _        d}|                     t          dd           t          dd           g          }t          j        |j        j        t          j	        ddg          k              sJ |j        ddgk    sJ t           |j        g |j        j        dR  |j        j        d	d
|z             |                     t          dd d          t          dd d          g          }t          j        |j        j        t          j	        ddg          k              sJ t          j        |j        j        t          j	        ddg          k              sJ |j        ddgk    sJ |                     t          d d d          t          dd d          g          }t          j        |j        j        t          j	        ddg          k              sJ |j        ddgk    sJ t          j        t                    5  |                     t          d          t          d          g          }d d d            n# 1 swxY w Y   |j        ddgk    sJ t          j        t                    5  |                     t          d          t          d          g          }d d d            n# 1 swxY w Y   |j        ddgk    sJ t          j        t                    5  |                     t          d          t          d          g          }d d d            n# 1 swxY w Y   |j        ddgk    sJ d S )Nr2   r.   r0   皙?    r   i          ư>rtolatolr-         ?      ?皙?皙?   g      I@g      4@   2   g     4@)r&   r6   crvalcdeltcrpix_naxisslicer4   r;   r>   r   wcs_pix2worldpytestwarnsr   )mywcspscale	slice_wcss      rA   
test_slicerl   o   s   aLLLE!fEIOCjEIO!fEIO#;ELFU1d^^U1d^^<==I6)-%1a&)9)99:::::c{**** 	8!48a888F]	    U1dA..aq0A0ABCCI6)-%5$-)@)@@AAAAA6)-%3*)=)==>>>>>Sz))))U4q115D!3D3DEFFI6)-%3*)=)==>>>>>Sz)))) 
(	)	) < <KKteDkk :;;	< < < < < < < < < < < < < < <c{****	(	)	) : :KKteBii 899	: : : : : : : : : : : : : : :Cy((((	(	)	) : :KKrE$KK 899	: : : : : : : : : : : : : : :bz))))))s6    2I>>JJ12K//K36K3"2M  M$'M$c                  Z   t          d          } ddg| j        _        ddg| j        _        ddg| j        _        ddg| _        ddg| j        _        t          j        g d	g d
g dg dg dg          }t          j        g dg dg dg dg dg          }t          ||d d | j        j                  | _
        | j                                         d}|                     t          dd           t          dd           g          }t           |j        g |j        j        dR  |j        j        dd|z             |                     t          dd d          t          dd d          g          }t           |j        g |j        j        dR  |j        j        dd|z             d S )Nr2   r.   r0   rR   rS   rT   zRA---TAN-SIPzDEC--TAN-SIP)r   r   gc)Şl>gA=gNqL)r   g>gǢ%=g{p8b=rU   )g2g=gaR"=rU   rU   )gW.2LgdV>OY!c=rU   rU   rU   )gTSrU   rU   rU   rU   )r   r   gbYza>g@U]g=ri=)r   g	!g&Y=g$-rU   )g
o+>guM/g<CHrU   rU   )g>䔍Y=g3--/=rU   rU   rU   )g3;6drU   rU   rU   rU   r   rU   rV   rW   r-   )r&   r6   ra   rb   rc   rd   rL   r4   r>   r*   sipsetre   r   all_pix2world)ri   abrj   rk   s        rA   test_slice_with_siprs      s   aLLLE!fEIOCjEIO!fEIO#;EL%~6EIO
CCCDDDGGG<<<111	
	 	A 	CCCFFFHHH;;;111	
	 	A Aq$eio66EI	IMMOOOFU1d^^U1d^^<==I	8!48a888F]	    U1dA..aq0A0ABCCI	8!48a888F]	     rC   c                     t          d          } ddg| j        _        ddg| j        _        ddg| j        _        | dd ddd df         }t          j        |j        j        t          j        ddg          k              sJ t          j        |j        j        t          j        d	d
g          k              sJ ddg| j        _        | dd ddd df         }t          j        |j        j        t          j        ddg          k              sJ t          j        |j        j        t          j        d	d
g          k              sJ | dd d         }t          j        |j        j        t          j        ddg          k              sJ t          j        |j        j        t          j        dd
g          k              sJ d S )Nr2   r.   r0   rR   r   r-   rZ   r[   r\   r]   g      ?g      ?)r&   r6   ra   rb   rc   r4   r;   r>   ri   rk   s     rA   test_slice_getitemrv      s   aLLLE!fEIOCjEIO!fEIOaddADqDj!I6)-%5$-)@)@@AAAAA6)-%3*)=)==>>>>>!fEIOaddADqDj!I6)-%5$-)@)@@AAAAA6)-%3*)=)==>>>>> addI6)-%1d))<)<<=====6)-%3*)=)==>>>>>>>rC   c                     t          d          } ddg| j        _        ddg| j        _        ddg| j        _        |                     t          dd           t          dd           gd          }t          j        |j        j        t          j        ddg          k              sJ |                     t          dd d          t          dd d          gd          }t          j        |j        j        t          j        d	d
g          k              sJ t          j        |j        j        t          j        ddg          k              sJ |                     t          dd d          gd          }t          j        |j        j        t          j        d	dg          k              sJ t          j        |j        j        t          j        ddg          k              sJ d S )Nr2   r.   r0   rR   r   F)numpy_orderr-   r[   rZ   r]   r\   )	r&   r6   ra   rb   rc   re   r4   r;   r>   ru   s     rA   test_slice_fitsorderry      s   aLLLE!fEIOCjEIO!fEIOU1d^^U1d^^<%PPI6)-%1a&)9)99:::::U1dA..aq0A0ABPUVVI6)-%4-)@)@@AAAAA6)-%3*)=)==>>>>>U1dA../UCCI6)-%4))<)<<=====6)-%3*)=)==>>>>>>>rC   c                      t          d          } | d         }t          |t                    sJ t          j        t
          d          5  | dd d df          d d d            d S # 1 swxY w Y   d S )Nr2   r.   r   z)Slicing WCS with a step is not supported.match)r&   
isinstancer+   rg   raises
IndexError)ri   subs     rA   test_slice_wcsr      s    aLLLE
(Cc=)))))	z)T	U	U	U  a1f                 s   A&&A*-A*c                      t          d          } g d| j        _        | j        g dk    sJ g d| j        _        | j        g dk    sJ d S )Nr-   r.   )RA---TANDEC--TANzVOPT-LSRrJ   )RADECVOPTrJ   )r&   r6   rL   axis_type_namesrM   ri   s    rA   test_axis_namesr      si    aLLLEDDDEIO $C$C$CCCCC555EIO $C$C$CCCCCCCrC   c                      t          d          } g d| j        _        | j        }t	          |j        j                  dk    sJ |j        ddgk    sJ d S )Nr-   r.   )r   r   r   rJ   r   r   r   r   )r&   r6   rL   	celestialtupler   )ri   cels     rA   test_celestialr     sa    aLLLE@@@EIO
/C#;;;;;4-//////rC   c                  	   ddl m} m}m}m}m} t          d          }|j                                         t          j
        t          d          5  t          |          J 	 d d d            n# 1 swxY w Y   t          d          }ddg|j        _        |j                                         t          j
        t                    5  t          |          J 	 d d d            n# 1 swxY w Y   t          d          }d	d
g|j        _        |j                                         t          |          }t          ||          sJ t          d          }d	d
g|j        _        d|j        _        |j                                         t!          |                                           t          |          }t          ||          sJ |j        t%          dd          k    sJ t          d          }d	d
g|j        _        d|j        _        |j                                         t          |          }t          ||           sJ |j        t%          dd          k    sJ t          d          }ddg|j        _        |j                                         t          |          }t          ||          sJ t          d          }ddg|j        _        d|j        _        |j                                         t          |          }t          ||          sJ |j        t%          d          k    sJ t*          j        ddfD ]r}t          d          }d	d
g|j        _        d|j        _        ||j        _        |j                                         t          |          }t          ||          sJ st          d          }d
d	g|j        _        |j                                         t          |          }t          ||          sJ t          d          }g d|j        _        |j                                         t          |          }t          ||          sJ t          d          }g d|j        _        |j                                         t          |          }t          ||          sJ d S )Nr   )FK4FK5ICRSr	   Galacticr2   r.   zMCould not determine celestial frame corresponding to the specified WCS objectr{   XOFFSETYOFFSETr   r        @jyear)formati       @byearzGLON-SINzGLAT-SINTLON-CARTLAT-CAR2017-08-17T12:41:04.430i  r   r3   )r   VELOCITYr   )GLAT-CARr   GLON-CAR)"astropy.coordinates.builtin_framesr   r   r   r	   r   r&   r6   ro   rg   r~   
ValueErrorr%   rL   r}   equinoxprint	to_headerr   dateobsobstimer4   nanradesys)r   r   r   r	   r   ri   framer   s           rA   test_wcs_to_celestial_framer     s   QQQQQQQQQQQQQQaLLLE	IMMOOO	8
 
 
 5 5 &e,,44445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 aLLLE ),EIO	IMMOOO	z	"	" 5 5%e,,44445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 aLLLE!:.EIO	IMMOOO"5))EeT"""""aLLLE!:.EIOEI	IMMOOO	%//

"5))EeS!!!!!=D8888888aLLLE!:.EIOEI	IMMOOO"5))EeS!!!!!=D8888888aLLLE!:.EIO	IMMOOO"5))EeX&&&&&aLLLE!:.EIO1EI	IMMOOO"5))EeT"""""=D!:;;;;;;FD$' ' '!%z2	"	#		&u--%&&&&&& aLLLE!:.EIO	IMMOOO"5))EeT""""" aLLLE:::EIO	IMMOOO"5))EeT"""""aLLLE:::EIO	IMMOOO"5))EeX&&&&&&&s$   A22A69A6C,,C03C0c                      ddl m}  t          d          }d|j        _        t          j        d          |j        _        |j                                         t          |          }t          ||           sJ d S )Nr   )r   r3   r.   r   r   FREQr3   r3   )r   r   r&   r6   rL   r4   onesr?   ro   r%   r}   )r   ri   r   s      rA   &test_wcs_to_celestial_frame_correlatedr   d  su    
 877777aLLLE4EIO76??EIL	IMMOOO"5))EeT"""""""rC   c                  ,   t          d          } ddg| j        _        | j                                         t	          j        t                    5  t          |            d d d            n# 1 swxY w Y    G d d          fd}t          |          5  t          |           }d d d            n# 1 swxY w Y   t          |          sJ t	          j        t                    5  t          |            d d d            d S # 1 swxY w Y   d S )Nr2   r.   r   r   c                       e Zd ZdS )7test_wcs_to_celestial_frame_extend.<locals>.OffsetFrameN__name__
__module____qualname__ rC   rA   OffsetFramer   z          rC   r   c                     | j         j        d                             d          r/| j         j        d                             d          r             S d S d S )Nr   OFFSETr0   )r6   rL   endswith)r6   r   s    rA   identify_offsetz;test_wcs_to_celestial_frame_extend.<locals>.identify_offset}  s`    7=$$X.. 	!37=3C3L3LX3V3V 	!;== 	! 	! 	! 	!rC   )
r&   r6   rL   ro   rg   r~   r   r%   r   r}   )ri   r   r   r   s      @rA   "test_wcs_to_celestial_frame_extendr   s  s   aLLLE ),EIO	IMMOOO	z	"	" & &u%%%& & & & & & & & & & & & & & &       ! ! ! ! ! 
&o	6	6 . .&u--. . . . . . . . . . . . . . .e[))))) 
z	"	" & &u%%%& & & & & & & & & & & & & & & & & &s6   A..A25A2B66B:=B:,D		DDc                     ddl m} m}m}m}m}m}m}  G d d|          } |            }t          j	        t          d          5  t          |           d d d            n# 1 swxY w Y    |            }t          |          }	|	j                                         t          |	j        j                  dk    sJ |	j        j        dk    sJ t#          j        |	j        j                  sJ |	j        j        d	k    sJ |	j        j        dk    sJ  |d
          }t          |          }	t          |	j        j                  dk    sJ |	j        j        dk    sJ |	j        j        dk    sJ  | d          }t          |          }	t          |	j        j                  dk    sJ |	j        j        dk    sJ |	j        j        dk    sJ  |d          }t          |          }	t          |	j        j                  dk    sJ |	j        j        dk    sJ |	j        j        dk    sJ  |            }t          |          }	t          |	j        j                  dk    sJ |	j        j        dk    sJ t#          j        |	j        j                  sJ  |            }t          |d          }	t          |	j        j                  dk    sJ |	j        j        dk    sJ t#          j        |	j        j                  sJ  |            }t          |d          }	ddg|	j        _        |	j                                         t/          |	j        j        |	j        j        fd            |t1          d                    }t          |d          }	t          |	j        j                  dk    sJ |	j        j        dk    sJ |	j        j        dk    sJ  |            }t          |d          }	t          |	j        j                  dk    sJ |	j        j        dk    sJ |	j        j        t1          d          j        j        k    sJ d S ) Nr   )r   r   r   r	   BaseCoordinateFrameFK4NoETermsr   c                       e Zd ZdS ).test_celestial_frame_to_wcs.<locals>.FakeFrameNr   r   rC   rA   	FakeFramer     r   rC   r   zHCould not determine WCS corresponding to the specified coordinate frame.r{   r   r      J1987)r   r   r   B1982r   r   zFK4-NO-E)zGLON-TANzGLAT-TAN CAR)
projectionr   r   d   i)r   <   z2017-08-17T12:41:04.43)r   )r   r   r	   r   J2000)astropy.coordinatesr   r   r   r	   r   r   r   rg   r~   r   r   r6   ro   r   rL   r   r4   isnanr   lonpolelatpolera   r   r   r   utcr   )
r   r   r   r	   r   r   r   r   r   ri   s
             rA   test_celestial_frame_to_wcsr     s                        '    IKKE	W
 
 
 & & 	u%%%& & & & & & & & & & & & & & & DFFE"5))E	IMMOOO!!%=====9&&&&8EI%&&&&&9####9!!!!C   E"5))E!!%=====9%%%%9&&&&C   E"5))E!!%=====9%%%%9&&&&K(((E"5))E!!%=====9
****9&&&&HJJE"5))E!!%=====9""""8EI%&&&&&HJJE"5U;;;E!!%=====9""""8EI%&&&&&HJJE"5U;;;ECjEIO	IMMOOOUY&	(9:IFFFD677888E"5U;;;E!!%=====9&&&&9 99999DFFE"5U;;;E!!%=====9&&&&9W 1 6666666s   A""A&)A&c                      G d d                       } t          j        t                    5  t          |            d d d            n# 1 swxY w Y   dfd	}t	          |          5  t          |           }d d d            n# 1 swxY w Y   t          |j        j                  dk    sJ t          j        t                    5  t          |            d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdS )7test_celestial_frame_to_wcs_extend.<locals>.OffsetFrameNr   r   rC   rA   r   r     r   rC   r   c                 h    t          |           r t          d          }ddg|j        _        |S d S )Nr2   r.   r   r   )r}   r&   r6   rL   )r   r   r6   r   s      rA   r   z;test_celestial_frame_to_wcs_extend.<locals>.identify_offset  s?    e[)) 	A,,,C&	2CGMJ	 	rC   )r   r   N)rg   r~   r   r   r   r   r6   rL   )r   r   ri   r   s      @rA   "test_celestial_frame_to_wcs_extendr     s           KMME	z	"	" & &u%%%& & & & & & & & & & & & & & &      
&o	6	6 . .&u--. . . . . . . . . . . . . . .!!%;;;;; 
z	"	" & &u%%%& & & & & & & & & & & & & & & & & &s5   AAA.B

BBC**C.1C.c                      t          d          } ddg| j        _        ddg| j        _        t	          t          |           d           ddg| j        _        t	          t          |           d           d S )	Nr2   r.   rR   r]   r   r   rR   r]   皙)r&   r6   rb   rL   r   r#   r   s    rA   test_pixscale_nodropr     so    aLLLECjEIO!:.EIO/66
CCCSkEIO/66
CCCCCrC   c                     t          d          } g d| j        _        g d| j        _        t	          t          | j                  d           g d| j        _        t	          t          | j                  d           d S )Nr3   r.   )rR   r]   r0   )r   r   r   r   )r   r]   r0   )r&   r6   rb   rL   r   r#   r   r   s    rA   test_pixscale_withdropr     st    aLLLE#mmEIO666EIO/@@*MMM$nnEIO/@@*MMMMMrC   c                      t          d          } ddgddgg| j        _        ddg| j        _        t	          t          |           d           d S )	Nr2   r.   r   r   r]   r   r   r   )r&   r6   r?   rL   r   r#   r   s    rA   test_pixscale_cdr     sR    aLLLE1I3x(EIL!:.EIO/66
CCCCCrC   angle)   -   r   K   c                 v   t          d          }t          j        |           }d}|t          j        |          z  | t          j        |          z  g|t          j        |          z  |t          j        |          z  gg|j        _        ddg|j        _        t          t          |          d           d S Nr2   r.   rR   r   r   )rR   rR   )
r&   r4   radianscossinr6   r?   rL   r   r#   r   ri   rhoscales       rA   test_pixscale_cd_rotatedr     s    aLLLE
*U

CE		ufrvc{{23		ebfSkk12EIL ":.EIO/66
CCCCCrC   c                 |   t          d          }t          j        |           }d}| |g|j        _        t          j        |          t          j        |           gt          j        |          t          j        |          gg|j        _        ddg|j        _        t          t          |          d           d S r   )r&   r4   r   r6   rb   r   r   r7   rL   r   r#   r   s       rA   test_pixscale_pc_rotatedr     s    aLLLE
*U

CEvuoEIOVC[[26#;;,/"&++rvc{{1KLEIL!:.EIO/66
CCCCCrC   )rb   r7   pccdrR   r]   r2   )rR   r]   g333333?r3   r0   r0   r0   c                     t          t          |                     }| |j        _        ||j        _        t          |j        |           d S Nr.   )r&   lenr6   rb   r7   r   pixel_scale_matrix)rb   r7   r   ri   s       rA   test_pixel_scale_matrixr   '  sE     s5zz###EEIOEIL0$77777rC   )rL   r   r   r   Tr   Fr   c                 r    t          t          |                     }| |j        _        |j        |k    sJ d S r   )r&   r   r6   rL   is_celestialrL   r   ri   s      rA   test_is_celestialr   7  s=     c%jj!!!EEIO$$$$$$rC   c                 r    t          t          |                     }| |j        _        |j        |k    sJ d S r   )r&   r   r6   rL   has_celestialr   s      rA   test_has_celestialr  F  s=     c%jj!!!EEIO#%%%%%%rC   c                      t          d          } d| j        _        t          j        d          | j        _        | j                                         | j        sJ d S )Nr3   r.   r   r   )r&   r6   rL   r4   r   r?   ro   r  r   s    rA   test_has_celestial_correlatedr  U  sO     aLLLE4EIO76??EIL	IMMOOOrC   )rb   r7   r?   check_warningr0   c                 $   t          d          }|||j        _        |||j        _        |rt	          j                    }nt                      }|5 }| |j        _        d d d            n# 1 swxY w Y   |r9|D ]6}t          |j	        t                    sJ dt          |j                  v sJ 7ddg|j        _        t          |          }t          |                    t"          j                  t'          j        ddg                     d S )Nr2   r.   z)cdelt will be ignored since cd is presentr   r   rR   r]   )r&   r6   r?   r7   rg   rh   r   rb   
issubclasscategoryRuntimeWarningstrmessagerL   r   r   to_valueudegr4   r>   )	rb   r7   r?   r  ri   ctxwarning_lineswpss	            rA   test_noncelestial_scaler  _  sI    aLLLE	~		~	  lnnmm	  	                              Q 	Q 	QAaj.99999>#ai..PPPPP!6*EIO	#E	*	*BAE**BHc3Z,@,@AAAAAs   A,,A03A0moder;   r6   c                    ddl m} t          dd          }t          |          } |dt          j        z  dt          j        z  d	          }t          ||| 
          \  }}t          |||| 
                              d          }t          |j
        j        |j
        j                   t          |j        j        |j        j                    G d d|          }t          |||| |                              d          }	|	j        |u sJ t          |	j
        j        |j
        j                   t          |	j        j        |j        j                   d S )Nr   r   data/maps/1904-66_TAN.hdrbinaryencodingrR        @Vicrsr   r  c                       e Zd ZdS ))test_skycoord_to_pixel.<locals>.SkyCoord2Nr   r   rC   rA   	SkyCoord2r!    r   rC   r"  )r  cls)r   r   r   r&   r  r  r$   r"   transform_tor   radegreedec	__class__)
r  r   headerr6   refxpypnewr"  new2s
             rA   test_skycoord_to_pixelr/    s`    -,,,,,"#>RRRF
f++C
(3;V
<
<
<CsCd333FB BCd
3
3
3
@
@
H
HCCFM36=111CGNCGN333    H    RStCCCPPQWXXD>Y&&&&DGNCFM222DHOSW^44444rC   c                     ddl m}  t          dd          }t          |          }|                    t
          t          g          } | dt          j        z  dt          j        z  d	          }t          ||          \  }}t          ||          \  }}t          ||           t          ||           t          |||                              d          }	t          |||                              d          }
t          |	j        j        |
j        j                   t          |	j        j        |
j        j                   d S )
Nr   r  r  r  r  rR   r  r  r  )r   r   r   r&   r   r'   r(   r  r  r$   r   r"   r$  r%  r&  r'  )r   r)  r6   wcs_swappedr*  xp1yp1xp2yp2new1r.  s              rA   test_skycoord_to_pixel_swappedr7    s)    -,,,,,"#>RRRF
f++C''?,<=>>K
(3;V
<
<
<C c**HC k22HCCC S#s++88@@DS#{33@@HHDDGNDGN333DHOTX_55555rC   c                     t          d          } ddgddgg| j        _        ddg| j        _        t	          |           sJ dd	gd
dgg| j        _        t	          |           rJ t          d          }t          j        t                    5  t          |          } d d d            n# 1 swxY w Y   t	          |           sJ d S )Nr2   r.   r   r   r]   r   r   g?gS'ц>g+i)+>gAk?data/sip.fits)	r&   r6   r?   rL   r   r   rg   rh   r)   )r6   r)  s     rA   test_is_proj_plane_distortedr:    s   
A,,,C)aX&CGJ,CGM"3'''''  (6<*@ACGJ&s+++++ #?33F	&	'	'  &kk              "3'''''''s   B))B-0B-c                    ddl m} t          d          }t          j        t
                    5  t          |          }d d d            n# 1 swxY w Y    |dt          j        z  dt          j        z  d          }t          |||           \  }}t          ||||                               d          }t          |j        j        |j        j                   t          |j        j        |j        j                   d S )	Nr   r  r9  g     Pi@gQG@r  r  r  )r   r   r   rg   rh   r)   r&   r  r  r$   r"   r$  r   r%  r&  r'  )r  r   r)  r6   r*  r+  r,  r-  s           rA   "test_skycoord_to_pixel_distortionsr<    s,    -,,,,,"?33F	&	'	'  &kk               (6AE>515=
?
?
?CsCd333FB BCd
3
3
3
@
@
H
HCCFM36=111CGNCGN33333s   AAAc                      t          d          } ddg| j        _        dgdz  | j        _        dgdz  | j        _        dgdz  | j        _        | j                                         | S )zv
    This WCS has an almost linear correlation between the pixel and world axes
    close to the reference pixel.
    r2   r.   zHPLN-TANzHPLT-TANg      @gMb`?r   )r&   r6   rL   rc   rb   ra   ro   )r6   s    rA   spatial_wcs_2d_small_angler>    s`     A,,,C,CGMEAICGMGaKCGMC!GCGMGKKMMMJrC   c                    t          j        t          j        ddg                    }t          | dd          }t           j                            t          j        |          | j        j                   t           j                            ||         j        ddgd           t          | dd          }t          j	        t          j        |          | j        j                  rJ t          | ddd          }t           j                            t          j        |          ddg           t           j                            ||         j        ddgd	           d S )
Nr0   r3   r   g|=)rY   g     L@T)normalize_by_worldg:0yE>)
r4   logical_notdiagr   testingr   r6   rb   flatallclose)r>  not_diagderivss      rA   test_local_pixel_derivativesrH    s.   ~bgq!foo..H,-GANNFJrwv0J0N0TUUUJvh/4q!f5III --GcRRF{276??,F,J,PQQQQQ -"AqT  F JrwvA777Jvh/4q!f4HHHHHrC   c                     t          d          } d| j        _        | j                                         t	          | j        ddgddgg           t          |           \  }}t	          |ddgg           |t          gk    sJ d S )Nr2   r.   r   r0   )r&   r6   rL   ro   r   axis_correlation_matrixr   r   r6   matrixclassess      rA   0test_pixel_to_world_correlation_matrix_celestialrN    s    
A,,,C*CGMGKKMMM,1v1v.>???8==OFG1a&"""xj      rC   c                  $   t          d          } d| j        _        | j                                         t	          | j        g dg dg dg           t          |           \  }}t	          |g dg dg           |t          t          gk    sJ d S )Nr3   r.   r   r   r   r0   r   r0   r   r0   r   )	r&   r6   rL   ro   r   rJ  r   r   r   rK  s      rA   Atest_pixel_to_world_correlation_matrix_spectral_cube_uncorrelatedrS    s    
A,,,C2CGMGKKMMM,yyy)))YYY.OPPP8==OFG)))YYY/000x*******rC   c                  `   t          d          } d| j        _        t          j        d          | j        _        | j                                         t          | j        g dg dg dg           t          |           \  }}t          |g dg dg           |t          t          gk    sJ d S )Nr3   r.   rP  r   r   )r&   r6   rL   r4   r   r?   ro   r   rJ  r   r   r   rK  s      rA   ?test_pixel_to_world_correlation_matrix_spectral_cube_correlatedrU    s    
A,,,C2CGMCGJGKKMMM,yyy)))YYY.OPPP8==OFG)))YYY/000x*******rC   c                  &   t          d          } d| j        _        | j                                         t          d          }d|j        _        |j                                         t	          | |          }t          |ddgddgg           d S )Nr2   r.   r   r   r   r0   r&   r6   rL   ro   r   r   wcs_inwcs_outrL  s      rA   0test_pixel_to_pixel_correlation_matrix_celestialr\  '  s    q\\\F-FJ
JNNlllG.GKKOO/@@F1a&1a&)*****rC   c                  ,   t          d          } d| j        _        | j                                         t          d          }d|j        _        |j                                         t	          | |          }t          |g dg dg dg           d S )Nr3   r.   r   r   r   r   r0   r0   r   r   r   r0   rX  rY  s      rA   Atest_pixel_to_pixel_correlation_matrix_spectral_cube_uncorrelatedra  4  s    q\\\F5FJ
JNNlllG6GKKOO/@@F)))YYY			:;;;;;rC   c                  h   t          d          } d| j        _        | j                                         t          d          }d|j        _        t	          j        d          |j        _        |j                                         t          | |          }t          |g dg dg dg           d S )Nr3   r.   r   r^  r   r   )	r&   r6   rL   ro   r4   r   r?   r   r   rY  s      rA   ?test_pixel_to_pixel_correlation_matrix_spectral_cube_correlatedrc  A  s     q\\\F5FJ
JNNlllG6GKWV__GKNKOO/@@F)))YYY			:;;;;;rC   c                     t          d          } d| j        _        | j                                         t          d          }d|j        _        |j                                         t	          j        t          d          5  t          | |           d d d            n# 1 swxY w Y   t          d          }d|j        _        |j                                         t	          j        t          d	          5  t          ||           d d d            n# 1 swxY w Y   t          d
          }d|j        _        g d|j        _        |j                                         t          d
          }d|j        _        g d|j        _        |j                                         t	          j        t          d          5  t          ||           d d d            d S # 1 swxY w Y   d S )Nr2   r.   r   r3   r^  z:The two WCS return a different number of world coordinatesr{   )r   PIXELz6The world coordinate types of the two WCS do not matchr-   )r   r   Q1Q2)r  r  m/srh  )rf  r   r   rg  )rh  r  r  rh  zHWorld coordinate order doesn't match and automatic matching is ambiguous)	r&   r6   rL   ro   rg   r~   r   r   cunit)rZ  r[  wcs3wcs4wcs5s        rA   /test_pixel_to_pixel_correlation_matrix_mismatchrm  Q  s   q\\\F-FJ
JNNlllG6GKKOO	W
 
 
 < < 	+67;;;< < < < < < < < < < < < < < <
 Q<<<D$DHNHLLNNN	S
 
 
 : : 	+7D999: : : : : : : : : : : : : : :
 Q<<<D7DHN111DHNHLLNNNQ<<<D7DHN111DHNHLLNNN	V
 
 
 7 7 	+46667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s6   B##B'*B'>DD"DG%%G),G)c                  $    G d d          }  |             }||_         d|_        d|_        g dg dg dg dg|_        g d|_        dd	d
difddi fdddddfd|_         |             }||_         d|_        d|_        g dg dg dg dg|_        g d|_        |j        |_        t          ||          }|                    t                    }|j	        dk    sJ t          j        g dg dg dg dg          }t          ||           d S )Nc                       e Zd ZdS )Atest_pixel_to_pixel_correlation_matrix_nonsquare.<locals>.FakeWCSNr   r   rC   rA   FakeWCSrp    r   rC   rq  r3   r-   )TTF)FFT)spatr%  z	ra.degreers  r'  z
dec.degreespecr   valuetimer   z	utc.valuezastropy.coordinates.SkyCoordr   r   r  zastropy.units.Wavelengthr   zastropy.time.Timemjdr   )r   r   )rs  rv  ry  )TFFF)FTTF)FFFT)ru  rr  rt  rx  )r-   r3   r_  r`  )low_level_wcspixel_n_dimworld_n_dimrJ  world_axis_object_componentsworld_axis_object_classesr   astypeintshaper4   r>   r   )rq  rZ  r[  rL  expecteds        rA   0test_pixel_to_pixel_correlation_matrix_nonsquarer  {  s   
        WYYF!FFF	&F"+ + +F' 0gv5FG+Wb9$g%%/P/PQ( (F$ giiG#GGG###""""""###	'G#, , ,G( )/(HG%/@@F]]3F <6!!!!xIIIyyy)))DEEH"""""rC   c                  .   t          t          j        dgg                    dgdgfgk    sJ t          t          j        ddgddgg                    ddgddgfgk    sJ t          t          j        g dg dg dg                    ddgddgfdgdgfgk    sJ t          t          j        g dg dg dg                    dgdgfdgdgfdgdgfgk    sJ t          t          j        g dg dg d	g                    g d
g d
fgk    sJ d S )Nr0   r   r_  r`  r2   rR  )r0   r   r   )r   r0   r0   rQ  )r   r0   r2   )r   r4   r>   r   rC   rA   test_split_matrixr    s   A3%))sQCj\9999
AA	
 	
  q6Aq6
	    
							
 	
  q6Aq6
aS1#J	'( ( ( ( 
							
 	
  3*sQCjA3*	-. . . . 
							
 	
  99iii
 	!" " " " " "rC   c                     t          d          } d| j        _        | j                                         t          d          }d|j        _        |j                                         t	          j        t          d          5  t          | |ddd          \  }}}d d d            n# 1 swxY w Y   |j        d	k    sJ |j        d	k    sJ |j        d	k    sJ t          j
        d
dd
          }t          j
        d
dd          }t          j
        d
dd          }t          j        |||dd          \  }}}t	          j        t          d          5  t          | ||||          \  }}	}
d d d            n# 1 swxY w Y   |j        dk    sJ |	j        dk    sJ |
j        dk    sJ t          |          j        dk    sJ t          |	          j        dk    sJ t          |
          j        dk    sJ t	          j        t          d          5  t          || ||	|
          \  }}}d d d            n# 1 swxY w Y   |j        dk    sJ |	j        dk    sJ |
j        dk    sJ t          |          j        dk    sJ t          |          j        dk    sJ t          |          j        dk    sJ t          ||           t          ||           t          ||           d S )Nr3   r.   r^  )r   r   r   zNo observer defined on WCSr{   r0   r2   r   
   r_   r   ijFindexingcopy)r   r_   r  )r   r0   r  )r_   r0   )r&   r6   rL   ro   rg   rh   r   r!   r  r4   linspacemeshgridr   r   )rZ  r[  xyzZ1Y1X1X2Y2Z2X3Y3Z3s                 rA   test_pixel_to_pixelr    s   q\\\F5FJ
JNNlllG6GKKOO 
(0L	M	M	M ; ; !Q::1a; ; ; ; ; ; ; ; ; ; ; ; ; ; ;7b====7b====7b==== 	BBA
BBA
BBAQ1t%@@@JBB	(0L	M	M	M A A#FGRR@@
BA A A A A A A A A A A A A A A 8|####8|####8|#### r?? K////r?? K////r?? G++++ 
(0L	M	M	M A A#GVRR@@
BA A A A A A A A A A A A A A A 8|####8|####8|#### r?? K////r?? G++++r?? K//// BBBs6   B**B.1B.E::E>E>H99H= H=c                  X   t          d          } d| j        _        | j                                         t          d          }d|j        _        |j                                         t	          | |dd          \  }}|j        dk    sJ |j        dk    sJ t          j        ddd          }t          j        ddd          }t          j        ||d	d
          \  }}t	          | |||          \  }}|j        dk    sJ |j        dk    sJ t          |          j        dk    sJ d S )Nr2   r.   rW  r   r0   r   r  r_   r  Fr  )r_   r  )
r&   r6   rL   ro   r!   r  r4   r  r  r   )rZ  r[  r  r  r  r  r  r  s           rA   test_pixel_to_pixel_correlatedr    s0   q\\\F-FJ
JNNlllG.GKKOO &'1a00DAq7b====7b==== 	BBA
BBA[A5999FBFGR44FB 8x8x r?? H,,,,,,rC   c                  p   t          d          } d| j        _        d| j        _        | j                                         t          d          }d|j        _        d|j        _        |j                                         t          | |d          }|j        dk    sJ t          j        dd	d          }t          | ||          }|j        d
k    sJ t          j	        t          j        dd	d          d          }t          | ||          }|j        dk    sJ t          |          j        d
k    sJ d S )Nr0   r.   )COORD1)nm)COORD2)cmr   r  r_   )r  )r-   r  )r&   r6   rL   ri  ro   r!   r  r4   r  broadcast_tor   )rZ  r[  r  s      rA   test_pixel_to_pixel_1dr  3  s,   
 q\\\F"FJFJ
JNNlllG#GKGKKOO 	vw**A7b==== 	BBAvw**A7e 	BB//99Avw**A7g q>>5((((((rC   a  
XTENSION= 'IMAGE   '           / Image extension
BITPIX  =                  -32 / array data type
NAXIS   =                    2 / number of array dimensions
NAXIS1  =                   50
NAXIS2  =                   50
PCOUNT  =                    0 / number of parameters
GCOUNT  =                    1 / number of groups
RADESYS = 'ICRS    '
EQUINOX =               2000.0
WCSAXES =                    2
CTYPE1  = 'RA---TAN'
CTYPE2  = 'DEC--TAN'
CRVAL1  =    250.3497414839765
CRVAL2  =    2.280925599609063
CRPIX1  =               1045.0
CRPIX2  =               1001.0
CD1_1   =   -0.005564478186178
CD1_2   =   -0.001042099258152
CD2_1   =     0.00118144146585
CD2_2   =   -0.005590816683583
al  
XTENSION= 'IMAGE   '           / Image extension
BITPIX  =                  -32 / array data type
NAXIS   =                    2 / number of array dimensions
NAXIS1  =                   50
NAXIS2  =                   50
PCOUNT  =                    0 / number of parameters
GCOUNT  =                    1 / number of groups
RADESYS = 'ICRS    '
EQUINOX =               2000.0
WCSAXES =                    2
CTYPE1  = 'RA---TAN-SIP'
CTYPE2  = 'DEC--TAN-SIP'
CRVAL1  =    250.3497414839765
CRVAL2  =    2.280925599609063
CRPIX1  =               1045.0
CRPIX2  =               1001.0
CD1_1   =   -0.005564478186178
CD1_2   =   -0.001042099258152
CD2_1   =     0.00118144146585
CD2_2   =   -0.005590816683583
A_ORDER =                    2
B_ORDER =                    2
A_2_0   =    2.02451189234E-05
A_0_2   =   3.317603337918E-06
A_1_1   = 1.73456334971071E-05
B_2_0   =   3.331330003472E-06
B_0_2   = 2.04247482482589E-05
B_1_1   = 1.71476710804143E-05
AP_ORDER=                    2
BP_ORDER=                    2
AP_1_0  = 0.000904700296389636
AP_0_1  = 0.000627660715584716
AP_2_0  =  -2.023482905861E-05
AP_0_2  =  -3.332285841011E-06
AP_1_1  =  -1.731636633824E-05
BP_1_0  = 0.000627960882053211
BP_0_1  = 0.000911222886084808
BP_2_0  =  -3.343918167224E-06
BP_0_2  =  -2.041598249021E-05
BP_1_1  =  -1.711876336719E-05
A_DMAX  =    44.72893589844534
B_DMAX  =    44.62692873032506
aH  
NAXIS   =                    2 / number of array dimensions
WCSAXES =                    2 / Number of coordinate axes
CRPIX1  =               1024.5 / Pixel coordinate of reference point
CRPIX2  =               1024.5 / Pixel coordinate of reference point
CD1_1   = -1.7445934400771E-05 / Coordinate transformation matrix element
CD1_2   = -4.9826985362578E-08 / Coordinate transformation matrix element
CD2_1   = -5.0068838822312E-08 / Coordinate transformation matrix element
CD2_2   =  1.7530614610951E-05 / Coordinate transformation matrix element
CTYPE1  = 'RA---TAN'           / Right ascension, gnomonic projection
CTYPE2  = 'DEC--TAN'           / Declination, gnomonic projection
CRVAL1  =      5.8689341666667 / [deg] Coordinate value at reference point
CRVAL2  =     -71.995508583333 / [deg] Coordinate value at reference point
zrequires scipy)reasonzEheader_str,crval,sip_degree,user_proj_point,exp_max_dist,exp_std_distgyw1Ko@gמY?g-C6>g_>Y1\>gh㈵>gy@gv@c                 "   t           j                            | d          }||d<   t          |d          }t	          j        t          t          d                    t          t          d                              \  }}	|                                }|	                                }	|	                    ||	          }
|r+|
d         }|j
        j        j        }|j
        j        j        }nd}t          ||	f|
||	          }|	                    ||	          }|
                    |          }|                                |k     sJ t	          j        |          |k     sJ |r&|j        j        ||gk                                    sJ d S d S )
N
sepCRVAL1T)relaxr  r   center)
proj_point
sip_degree)r   Header
fromstringr&   r4   r  listrK   flattenpixel_to_worlddatalonr  latr   
separationmaxstdr6   ra   r;   )
header_strra   r  user_proj_pointexp_max_distexp_std_distr)  true_wcsr  r  	world_pixr  projlonprojlatfit_wcsworld_pix_newdistss                    rA   test_fit_wcs_from_pointsr    s   j [##JD#99FF86&&&H ;tE"IIU2YY88DAq			A			A ''1--I  q\
/%)/%)
 "	
A	jZ  G **1a00M  //E99;;%%%%6%==<'''' ?!gw%77<<>>>>>? ?>>rC   c                  H   d} t           j                            | d          }t          |          }d\  }}d\  }}t	          |                    ||dz  z   ||dz  z   ggd          d	          d         }d
 t          j        |||z   |||z   f         D             \  }}	t	          |                    |	|d          ddi}
t          ||	f|
d          }|j	        j
                            t                    ddgk                                    sJ |j        dk    sJ d S )Na  
WCSAXES =                    2 / Number of coordinate axes
CRPIX1  =               1045.0 / Pixel coordinate of reference point
CRPIX2  =               1001.0 / Pixel coordinate of reference point
PC1_1   =  0.00056205870415378 / Coordinate transformation matrix element
PC1_2   =    -0.00569181083243 / Coordinate transformation matrix element
PC2_1   =   0.0056776810932466 / Coordinate transformation matrix element
PC2_2   =   0.0004208048403273 / Coordinate transformation matrix element
CDELT1  =                  1.0 / [deg] Coordinate increment at reference point
CDELT2  =                  1.0 / [deg] Coordinate increment at reference point
CUNIT1  = 'deg'                / Units of coordinate increment and value
CUNIT2  = 'deg'                / Units of coordinate increment and value
CTYPE1  = 'RA---TAN'           / Right ascension, gnomonic projection
CTYPE2  = 'DEC--TAN'           / Declination, gnomonic projection
CRVAL1  =      104.57797893504 / [deg] Coordinate value at reference point
CRVAL2  =     -74.195502593322 / [deg] Coordinate value at reference point
LONPOLE =                180.0 / [deg] Native longitude of celestial pole
LATPOLE =     -74.195502593322 / [deg] Native latitude of celestial pole
TIMESYS = 'TDB'                / Time scale
TIMEUNIT= 'd'                  / Time units
DATEREF = '1858-11-17'         / ISO-8601 fiducial time
MJDREFI =                  0.0 / [d] MJD of fiducial time, integer part
MJDREFF =                  0.0 / [d] MJD of fiducial time, fractional part
DATE-OBS= '2019-03-27T03:30:13.832Z' / ISO-8601 time of observation
MJD-OBS =      58569.145993426 / [d] MJD of observation
MJD-OBS =      58569.145993426 / [d] MJD at start of observation
TSTART  =      1569.6467941661 / [d] Time elapsed since fiducial time at start
DATE-END= '2019-03-27T04:00:13.831Z' / ISO-8601 time at end of observation
MJD-END =      58569.166826748 / [d] MJD at end of observation
TSTOP   =      1569.6676274905 / [d] Time elapsed since fiducial time at end
TELAPSE =        0.02083332443 / [d] Elapsed time (start to stop)
TIMEDEL =    0.020833333333333 / [d] Time resolution
TIMEPIXR=                  0.5 / Reference position of timestamp in binned data
RADESYS = 'ICRS'               / Equatorial coordinate system
r  r  )rS   rS   )r     r2   r   r  )unitc              3   >   K   | ]}|                                 V  d S r   )r  ).0arrs     rA   	<genexpr>z8test_fit_wcs_from_points_CRPIX_bounds.<locals>.<genexpr>1  s*      NNC#++--NNNNNNrC   r  r  )r  iL  i  )i  i  )r   r  r  r&   r   rp   r4   mgridr   r6   rc   r  r  r;   pixel_shape)wcs_str
wcs_headerffi_wcsyixir  r  center_coordypixxpixr  r  s               rA   %test_fit_wcs_from_points_CRPIX_boundsr    sL   "GF ''T'::J*ooGFBDAqQ!VR!q&[9:A>>U  	L ON28BaKb1f4L+MNNNJD$'//dA>>KUKKI!4,	hOOOGK$$S))dD\9>>@@@@@,......rC   c                  >   t          j        g dg dg          } t          g ddd          }t          dddd          }t          | ||d	
          }|j        j        j        }|j        j        j        }|j        j	        ||gk    
                                sJ d S )N)g򇛛@gg@gBFhpe@gYKd-^@)g1˪@g(Rk@gl>@gym@))gbhЫP@g	aN336@)g3P@gO0.3@)gnP@gKҐL1@)gULP@gpcq1@r  r  )r   r  g\5+P@g|/F3@TAN)xyworld_coordsr  r   )r4   r>   r   r   r  r  r  r  r6   ra   r;   )r  r  r  r  r  r  s         rA   test_issue10991r  :  s     
EEEHHH	

 
B 	
 	
 	
 	 	 	L +{&uMMMJ!LZE  G o!%Go!%GK'7!3388:::::::rC   z	x_in,y_inr1   c           	         t          t          j                  t          d          k    rt          j        t
          d          }nt                      }|5  t          dddddd	          }d
d
d
           n# 1 swxY w Y   |                    | |          }|	                    |          \  }}t          j                            ||            t          j                            ||           d
S )z@Regression test for https://github.com/astropy/astropy/pull/9609z7.4zG'datfix' made the change 'Set MJD-OBS to 57982\.528524 from DATE-OBS'\.r{   r2   r   r   zITRS z2017-08-17T12:41:04.444)NAXISCTYPE1CTYPE2RADESYSzDATE-OBSN)r   r   __version__rg   rh   r)   r   r&   r  world_to_pixelr4   rC  r   )x_iny_inr  r6   coordr  r  s          rA   test_pixel_to_world_itrsr  W  s4    t  GENN22l 
 
 
 mm	 	
 	
$$"5 
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 tT**E e$$DAqJ""1d+++J""1d+++++s   A99A= A=c                  .    t          dt          j        z   S )N)g"qPTgc^XBgӟ*AA)r
   r  mr   rC   rA   dkist_locationr  {  s    	AAC	G rC   c                    t          d          }t          d          }t          |                     t          j                                                            g dz   |j        _        |j	        |j        _
        t          |j        j        |          }t          |t                    sJ |j        | j        k    sJ |j        | j        k    sJ |j        | j        k    sJ d S N2021-05-21T03:00:00r2   r.   )r   r   r   )r   r&   r  r  r  r  tolistr6   obsgeoisotr   r    r}   r	   r  r  r  )r  r   r6   r   s       rA   test_obsgeo_cartesianr    s    ())G
A,,,C.11!#66==??@@999LCGNlCGOCGNG44EeT"""""7n&&&&&7n&&&&&7n&&&&&&&rC   c                 *   t          d          }|                     |          } | j        }t          d          }g d|j        j        |j        j        |j        j        gz   |j        _	        |j
        |j        _        t          |j        j	        |          }t          |t                    sJ t          j        |j        | j                  sJ t          j        |j        | j                  sJ t          j        |j        | j                  sJ d S r  )r   get_itrs	sphericalr&   r  rw  r  distancer6   r  r  r   r    r}   r	   r  rE  r  r  r  r  r   loc_sphr6   r   s        rA   test_obsgeo_sphericalr    s    ())G#,,W55N&G
A,,,CYY" CGN
 lCGOCGNG44EeT""""":eg~/00000:eg~/00000:eg~/0000000rC   c                 r   t          d          }|                     |          } | j        }t          d          }ddt          j        g|j        j        |j        j        |j	        j        gz   |j
        _        |j        |j
        _        |j
                                         t          |j
        j        |          }t!          |t"                    sJ t%          j        |j        | j                  sJ t%          j        |j        | j                  sJ t%          j        |j        | j                  sJ d S )Nr  r2   r.   r0   )r   r  r  r&   r4   r   r  rw  r  r  r6   r  r  r   ro   r    r}   r	   r  rE  r  r  r  r  s        rA   test_obsgeo_infiniter    s   ())G#,,W55N&G
A,,,CBF^' CGN
 lCGOGKKMMMCGNG44EeT""""":eg~/00000:eg~/00000:eg~/0000000rC   r     6   c                     t          j        t                    5  t          | d            d d d            d S # 1 swxY w Y   d S r   )rg   r~   r   r    )r  s    rA   test_obsgeo_invalidr    s    	z	"	" & &%%%& & & & & & & & & & & & & & & & & &s   8<<)
contextlibr   numpyr4   rg   numpy.testingr   r   r   packaging.versionr   astropyr   r  r   r	   r
   r   
astropy.ior   astropy.timer   astropy.unitsr   astropy.utilsr   "astropy.utils.compat.optional_depsr   astropy.utils.datar   r   astropy.utils.exceptionsr   astropy.wcsr   astropy.wcs.utilsr   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   astropy.wcs.wcsr&   r'   r(   r)   r*   astropy.wcs.wcsapi.fitswcsr+   rB   rG   markparametrizerP   rl   rs   rv   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   eyerB  r   r   r  r  r>   r  r/  r7  r:  r<  fixturer>  rH  rN  rS  rU  r\  ra  rc  rm  r  r  r  r  r  header_str_linearheader_str_sipheader_str_probskipifr  r  r  r  remote_datar9   r  r  r  r  r  r   r  r   rC   rA   <module>r     s
   " " " " " "      L L L L L L L L L L % % % % % %       = = = = = = = = = =             " " " " " " % % % % % % 8 8 8 8 8 8 K K K K K K K K 7 7 7 7 7 7                                           &              5 4 4 4 4 4J J J8M M M0 ((0 0 )(0&* &* &*R- - -`? ? ?*? ? ?$  D D D0 0 0U' U' U'p# # #& & &.O7 O7 O7d& & &0D D DN N ND D D "233	D 	D 43	D "233D D 43D 
sVRVAYYc
 3 34	&"&))WRW___%=%=>	GBGOOO,,gbgooo.F.FG 8 8 8 
j	!4(	)	)	)51
f	u% % % % 
j	!4(	)	)	)40
f	u% & & &   *	3*		vrvayy&"&))T:	1a&		727C:..q		4@	3*		vrvayy$6	3*		tVRVAYY5	 B B B6 %005 5 10586 6 6:( ( ($ %004 4 104&   I I I&! ! !+ + +	+ 	+ 	+
+ 
+ 
+
< 
< 
<< < < '7 '7 '7T8# 8# 8#v(" (" ("V3 3 3l- - -8) ) )B ,+X  	M*:;;K 15LQUN	
 
*AudQUlFQUNS	/4qufqunU 15LQUN	
 15LQUN	
 
*AudQUlFQUNS	+T5$,QRQVW 15LQUN	
K-0 0b'? '?c0 0 <;d'?T 	M*:;;4/ 4/ <;4/n 	M*:;;; ; <;;8 1v		!ibill/K&LMM, , NM ,D   ' ' '1 1 1*1 1 1, RVHqL$a"#JKK& & LK& & &rC   