
    IR-eL                     t   d dl Z d dlmZ d dlmZ 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 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m Z m!Z! d dl"m#Z# d dl$m%Z%m&Z& ej'        d             Z( e#d          Z)ddge)j*        _+        ddge)j*        _,        ddge)j*        _-        ddge)j*        _.        ddge)j*        _/         e#d          Z0g de0j*        _+        g de0j*        _,        g de0j*        _-        g de0j*        _.        g de0j*        _/        ej'        d             Z1ej'        d              Z2d! Z3d" Z4d# Z5d$ Z6d% Z7d& Z8d' Z9d( Z:d) Z;ej'        d*             Z<ej=        >                    d+ej?        d,         g d-d.dfej?        d,         g d/d0dfej?        d,         g d1d2dfej?        d,         g d3d4dfej?        ddddd ddf         g d5d6dfej?        ddddd ddf         g d7d8dfej?        ddddd ddf         g d9d8dfej?        ddd ddddf         g d9d4dfg          d:             Z@ej=        >                    d;ej?        ddddd ddf         g          d<             ZA G d= d>e%          ZBd? ZCd@ ZDedA             ZE G dB dCe%          ZFedD             ZGdS )E    N)dedent)Affine2DIdentityTransform)unitsSkyCoord)fits)figure_test)Time)Quantity)get_pkg_data_filename)RectangularFrameRectangularFrame1D)WCSWorld2PixelTransformapply_slicestransform_coord_meta_from_wcs)WCS)BaseLowLevelWCSSlicedLowLevelWCSc               #   :   K   d V  t          j        d           d S )Nall)pltclose     Olib/python3.11/site-packages/astropy/visualization/wcsaxes/tests/test_wcsapi.py	plt_closer      s%      	EEEIer      naxisxykm     4@     Ċ@      @           )r!   r"   z)r#   r#   r#   )r$   r%   iM  )r&   r&      )r'   r'         ?c                  ~    t          d          } t          t          j                            | d                    S )Na      WCSAXES =                    4 / Number of coordinate axes
    CRPIX1  =                  0.0 / Pixel coordinate of reference point
    CRPIX2  =                  0.0 / Pixel coordinate of reference point
    CRPIX3  =                  0.0 / Pixel coordinate of reference point
    CRPIX4  =                  5.0 / Pixel coordinate of reference point
    CDELT1  =                  0.4 / [min] Coordinate increment at reference point
    CDELT2  =                2E-11 / [m] Coordinate increment at reference point
    CDELT3  =   0.0027777777777778 / [deg] Coordinate increment at reference point
    CDELT4  =   0.0013888888888889 / [deg] Coordinate increment at reference point
    CUNIT1  = 'min'                / Units of coordinate increment and value
    CUNIT2  = 'm'                  / Units of coordinate increment and value
    CUNIT3  = 'deg'                / Units of coordinate increment and value
    CUNIT4  = 'deg'                / Units of coordinate increment and value
    CTYPE1  = 'TIME'               / Coordinate type code
    CTYPE2  = 'WAVE'               / Vacuum wavelength (linear)
    CTYPE3  = 'HPLT-TAN'           / Coordinate type codegnomonic projection
    CTYPE4  = 'HPLN-TAN'           / Coordinate type codegnomonic projection
    CRVAL1  =                  0.0 / [min] Coordinate value at reference point
    CRVAL2  =                  0.0 / [m] Coordinate value at reference point
    CRVAL3  =                  0.0 / [deg] Coordinate value at reference point
    CRVAL4  =                  0.0 / [deg] Coordinate value at reference point
    LONPOLE =                180.0 / [deg] Native longitude of celestial pole
    LATPOLE =                  0.0 / [deg] Native latitude of celestial pole
    
)sepheader)r   r   r	   Header
fromstringr/   s    r   wcs_4dr3   1   s>    	 F6 dk,,V,>>????r   c                  ~    t          d          } t          j                            |           }t	          |          S )Nzdata/cube_headerr/   )r   r	   r1   fromtextfiler   )cube_headerr0   s     r   cube_wcsr7   Q   s6    '(:;;K[%%k22Ffr   c                     t          d          } ddg| j        _        ddg| j        _        ddg| j        _        dd	g| j        _        t          d          }d
dg|j        _        ddg|j        _        ddg|j        _        ddg|j        _        t          |           }t          |          }||z
  ||                                z   k    sJ ||z
  |                                |z   k    sJ ||z
  t                      k    sJ dS )zo
    Test that the Matplotlib subtraction shorthand for composing and inverting
    transformations works.
    r   r   RA---TANDEC--TAN      p@皙g?g      ^@g      3zRA---SINzDEC--SINg     `m@g333337@N)	r   wcsctypecrpixcdeltcrvalr   invertedr   )w1w2t1t2s       r   test_shorthand_inversionrG   X   s   
 
1B
+BFL5>BFL4=BFL5>BFL	1B
+BFL5>BFL4=BFL5>BFL	 	$	$B	 	$	$B7b2;;==(((((7bkkmmb(((((7'))))))))r   c                  ,   t          j        d          } t          t                    t	                      z   }|                    |           }|                                                    |          }t           j                            | |           d S )N
   r   )	nponesr   WCS2Dr   	transformrB   testingassert_allcloseworldrC   pixelworld_2s       r   test_2drU   u   sq    GGE	 	'	'(**	4BLLEkkmm%%e,,GJug.....r   c                     t          j        d          } t          t          d d dd d f                   t	                      z   }|                    |           }|                                                    |          }t           j                            | d d df         |d d df                    t           j                            | d d df         |d d df                    d S )NrI   r      )	rK   rL   r   WCS3Dr   rN   rB   rO   rP   rQ   s       r   test_3drY      s    GGE	 qqq!QQQw	0	08::	=BLLEkkmm%%e,,GJuQQQT{GAAAqDM:::JuQQQT{GAAAqDM:::::r   c                    t          | t          d          \  }}|d         }|d         }|d         }|g dk    sJ |g dk    sJ |g dk    sJ t          d          }d	d
g|j        _        dgdz  |j        _        dgdz  |j        _        dgdz  |j        _        ddg|j        _        |j        	                                 t          |t                    \  }}|d         ddgk    sJ |d         t          j        t          j        gk    sJ |d         d d gk    sJ |d         ddgk    sJ |d         ddgk    sJ t          d          }ddg|j        _        dgdz  |j        _        dgdz  |j        _        dgdz  |j        _        |j        	                                 t          |t                    \  }}|d         ddgk    sJ |d         t          j        t          j        gk    sJ |d         dt          j        z  d gk    sJ t          |t          d          \  }}|d         }|d         }|d         }|ddgk    sJ |ddgk    sJ |d d gk    sJ t          d          }d!d"g|j        _        dgdz  |j        _        dgdz  |j        _        dgdz  |j        _        |j        	                                 t          |t                    \  }}|d         ddgk    sJ |d         t          j        t          j        gk    sJ |d         dt          j        z  d gk    sJ t          d          }d#d$g|j        _        dgdz  |j        _        dgdz  |j        _        dgdz  |j        _        |j        	                                 t          |t                    \  }}|d         ddgk    sJ |d         t          j        t          j        gk    sJ |d         d%t          j        z  d gk    sJ t          d          }d&d'g|j        _        dgdz  |j        _        dgdz  |j        _        dgdz  |j        _        |j        	                                 t          |t                    \  }}|d         ddgk    sJ |d         t          j        t          j        gk    sJ |d         d d gk    sJ t          d          }d(d(g|j        _        dgdz  |j        _        dgdz  |j        _        dgdz  |j        _        |j        	                                 t          |t                    \  }}|d         d)d)gk    sJ |d         t          j        t          j        gk    sJ |d         d d gk    sJ d S )*N)2   r"   r!   slicesdefault_axislabel_positiondefault_ticklabel_positiondefault_ticks_position)lrbr   r   GLON-TANGLAT-TANr;   r<         I@	Longitude type	longitudelatitudeformat_unitwrapdefault_axis_labelpos.galactic.latname)zpos.galactic.lonzglon-tanglonrg   )ro   zglat-tanglatzHPLN-TANzHPLT-TAN     f@)r"   r!   ra   rc   bltrzHGLN-TANzHGLT-TANzCRLN-TANzCRLT-TANg     v@r9   r:   spamscalar)r   r   r   r=   r>   r?   r@   rA   cnamesetudegarcsec	hourangleone)r7   _
coord_metaaxislabel_positionticklabel_positionticks_positionr=   s          r   test_coord_type_from_ctyper      s   1">  MAz $$@A#$@A 89N 00000000___,,,,
A,,,C,CGMGaKCGMGaKCGMFQJCGM "%CGMGKKMMM1#7GHHMAzf+z!:::::m$6666f$----*+=O/PPPPPf=0"    
 A,,,C,CGMGaKCGMGaKCGMFQJCGMGKKMMM1#7GHHMAzf+z!:::::m$18(<<<<<f%!%-!666661j  MAz $$@A#$@A 89N #s++++#s++++ff-----
A,,,C,CGMGaKCGMGaKCGMFQJCGMGKKMMM1#7GHHMAzf+z!:::::m$6666f%!%-!66666
A,,,C,CGMGaKCGMGaKCGMFQJCGMGKKMMM1#7GHHMAzf+z!:::::m$6666f%!%-!66666
A,,,C,CGMGaKCGMGaKCGMFQJCGMGKKMMM1#7GHHMAzf+z!:::::m$ae(<<<<<f$----
A,,,CV$CGMGaKCGMGaKCGMFQJCGMGKKMMM1#7GHHMAzf(H!55555m$6666f$------r   c                  ^   t          d          } dg| j        _        dg| j        _        dg| j        _        dg| j        _        | j                                         t          | t                    \  }}|d         dgk    sJ |d	         t          j
        gk    sJ |d
         d gk    sJ d S )NrW   r   WAVEr;   r<   rf   ri   rv   rl   rm   )r   r=   r>   r?   r@   rA   rx   r   r   ry   mr=   r~   r   s      r   test_coord_type_1d_1d_wcsr      s    
A,,,CHCGMGCGMGCGMFCGMGKKMMM1#7IJJMAzf(++++m$----f$''''''r   c                     t          d          } ddg| j        _        dgdz  | j        _        dgdz  | j        _        dgdz  | j        _        | j                                         t          | t          d	          \  }}|d
         ddgk    sJ |d         t          j
        t          j
        gk    sJ |d         d d gk    sJ |d         ddgk    sJ d S )Nr   r   rd   re   r;   r<   rf   r!   r   r\   ri   rj   rk   rl   rm   visibleT)r   r=   r>   r?   r@   rA   rx   r   r   ry   rz   r   s      r   $test_coord_type_1d_2d_wcs_correlatedr   	  s    
A,,,C,CGMGaKCGMGaKCGMFQJCGMGKKMMM1  MAz f+z!:::::m$6666f$----i T4L000000r   c                     t          d          } ddg| j        _        dgdz  | j        _        dgdz  | j        _        dgdz  | j        _        dd	g| j        _        | j                                         t          | t          d
          \  }}|d         ddgk    sJ |d         t          j        t          j        gk    sJ |d         d d gk    sJ |d         ddgk    sJ d S )Nr   r   r   UTCr;   r<   rf   nmsr   r\   ri   rv   rl   rm   r   TF)r   r=   r>   r?   r@   rA   cunitrx   r   r   ry   r   r   r   s      r   &test_coord_type_1d_2d_wcs_uncorrelatedr     s    
A,,,CUOCGMGaKCGMGaKCGMFQJCGM3KCGMGKKMMM1  MAz f(H!55555m$ac
2222f$----i T5M111111r   c                     t          | t          d          \  }}|d         }|d         }|d         }|g dk    sJ |g dk    sJ |g dk    sJ d S )Nr   r   r!   r"   r\   r^   r_   r`   )rh   rh   rc   ra   )rh   rh   rt   rt   )r   r   r3   r~   r   r   r   r   s         r   test_coord_meta_4dr   .  s    1 )9  MAz $$@A#$@A 89N!3!3!33333!3!3!33333555555555r   c                     t          | t          d          \  }}|d         }|d         }|d         }|g dk    sJ |g dk    sJ |g dk    sJ d S )N)r   r   r   r!   r\   r^   r_   r`   )rh   rh   trc   )r   r   r   s         r   test_coord_meta_4d_line_plotr   <  s    1">  MAz $$@A#$@A 89N !3!3!33333!3!3!33333/////////r   c                 "    t          | |          S N)r   )r3   	wcs_slices     r   sub_wcsr   K  s    VY///r   )r   wcsaxes_slices	world_mapndim.r   )r   r(   )r   r!   r   r"   )rW   r   r(   )r!   r   r   r"   )r   r   r(   )r!   r"   r   r   )r   rW   r   r!   r"   )rW   r   )r!   r   r"   )r   rW   r   )r!   r"   r   c                 X    t          | |          \  }}}|j        |k    sJ ||k    sJ d S r   )r   world_n_dim)r   r   r   r   r   transform_wcsr~   out_world_maps           r   test_apply_slicesr   P  sE     '37N&K&K#M1m$,,,,I%%%%%%r   r   c                    g d}|t          | |          fD ]}t          j                    5  t          j        dt                     t          |t          |          \  }}d d d            n# 1 swxY w Y   t          d |                                D                       sJ |d         g dk    sJ |d         g d	k    sJ |d
         d d dt          j
        z  gk    sJ |d         t          j        d          t          j        d          t          j        d          gk    sJ |d         g dk    sJ |d         t          j        d          t          j        d          t          j        d          gk    sJ |d         g dk    sJ |d         g dk    sJ |d         g dk    sJ t          j                     t          j        ||           d S )Nr   ignore)categoryr\   c              3   <   K   | ]}t          |          d k    V  dS )r(   N)len).0r!   s     r   	<genexpr>z'test_sliced_ND_input.<locals>.<genexpr>p  s,      <<13q66Q;<<<<<<r   rp   )time)zcustom:pos.helioprojective.latzhplt-tanhplt)zcustom:pos.helioprojective.lonzhpln-tanhplnri   )rv   rk   rj   rm   rs   unitminrz   r   )FTTrl   r{   r^   )rh   rc   ra   r_   r`   )rh   rt   rt   )
projectionr]   )r   warningscatch_warningsfilterwarningsFutureWarningr   r   r   valuesry   rz   Unitr   clfsubplot)r3   r   r   r   slices_wcsaxesr~   r   s          r   test_sliced_ND_inputr   e  s   "]]N.vyAAB ? ?$&& 	 	#H}EEEE9).  MAz	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <<
(9(9(;(;<<<<<<<<&! &
 &
 &
 
 
 
 

 &!%H%H%HHHHH&!dD%!%-%@@@@@&!afUmmQVE]]AF5MM%RRRRR)$(;(;(;;;;;-(F5MMF8F8-
 
 
 
 

 67>>>IIII67>>>IIII237K7K7KKKKK 				w~>>>>>;? ?s   6A//A3	6A3	c                       e Zd ZdZed             Zed             Zed             Zed             Zed             Z	d Z
d Zed	             Zed
             ZdS )LowLevelWCS5Dr   c                     | j         S r   )	pixel_dimselfs    r   pixel_n_dimzLowLevelWCS5D.pixel_n_dim  s
    ~r   c                     dS )N   r   r   s    r   r   zLowLevelWCS5D.world_n_dim      qr   c                 
    g dS )N)em.freqr   	pos.eq.ra
pos.eq.decphys.polarization.stokesr   r   s    r   world_axis_physical_typesz'LowLevelWCS5D.world_axis_physical_types      
 
 
 	
r   c                 
    g dS )N)Hzdayrz   rz   rh   r   r   s    r   world_axis_unitszLowLevelWCS5D.world_axis_units  s    ....r   c                 
    g dS )N)	Frequencyrh   RADECrh   r   r   s    r   world_axis_nameszLowLevelWCS5D.world_axis_names  s    1111r   c                 n    t          |          dz  d d         }d t          |g d          D             S )Nr(   c                 B    g | ]\  }}t          j        |          |z  S r   rK   asarray)r   pixscales      r   
<listcomp>z7LowLevelWCS5D.pixel_to_world_values.<locals>.<listcomp>  s9     
 
 
U JsOOe#
 
 
r   )rJ   皙?g?g(\?r   )listzipr   pixel_arrayss     r   pixel_to_world_valuesz#LowLevelWCS5D.pixel_to_world_values  sO    \**Q.4
 
!,0G0G0GHH
 
 
 	
r   c                 N    |d d         }d t          |ddg          D             S )Nr   c                 B    g | ]\  }}t          j        |          |z  S r   r   )r   rR   r   s      r   r   z7LowLevelWCS5D.world_to_pixel_values.<locals>.<listcomp>  s8     
 
 
*6%BJu%
 
 
r   rJ   r   )r   r   world_arrayss     r   world_to_pixel_valuesz#LowLevelWCS5D.world_to_pixel_values  s@    #BQB'
 
:=lRQTI:V:V
 
 
 	
r   c                 
    g dS )N))freqr   value)r   r   mjd)	celestialr   zspherical.lon.degree)r   rW   zspherical.lat.degree)stokesr   r   r   r   s    r   world_axis_object_componentsz*LowLevelWCS5D.world_axis_object_components  r   r   c                 `    t           dddift          dddift          dddift          dddifdS )	Nr   r   rz   formatr   r   r}   )r   r   r   r   )r   r   r   r   s    r   world_axis_object_classesz'LowLevelWCS5D.world_axis_object_classes  sL     #B82%01rFD>2fe_5	
 
 	
r   N)__name__
__module____qualname__r   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   r     s        I  X   X 
 
 X
 / / X/ 2 2 X2
 
 

 
 
 
 
 X
 
 
 X
 
 
r   r   c                  n   ddg} t          j        j        |  }ddddddddd	d
d
d
dd}t          |          }t	          j                    }|                    g d|          }|                    |d           |j        d         }|j        d         }|j	        
                                 t           j                            |j        j        d         t          j        g d                     t           j                            |j        j        d         t          j        g d                     d S )N   ih  r   g     f@g     V@r+   rz   zCRLN-CARzCRLT-CARr'        V@)wcsaxescrpix1crpix2cdelt1cdelt2cunit1cunit2ctype1ctype2crval1crval2lonpolelatpole皙?r
  皙?r  r   lower)originr   rW   rc   )r   rs   rs   g     p@r'   ra   )g     Vg      Ng      >r'   g      >@g      N@r   )rK   randomrandr   r   figureadd_axesimshowcoordscanvasdrawrO   assert_equalticksrR   array)shapedatar0   r=   figaxlonlats           r   test_edge_axesr     s>    #JE9>5!D F f++C
*,,C	***s	;	;BIId7I###
)A,C
)A,CJOOJ	bh'G'G'GHH   J	bh'S'S'STT    r   c                     t                      } d| _        t          | t          g d          \  }}|d         g dk    sJ |d         g dk    sJ |d         g d	k    sJ |d
         t	          j        d          t	          j        d          t	          j        d          t	          j        d          t          j        gk    sJ |d         g dk    sJ |d         t	          j        d          t	          j        d          t	          j        d          t	          j        d          t          j        gk    sJ |d         g dk    sJ |d         g dk    sJ |d         g dk    sJ |d         g dk    sJ d S )Nr   )r   r   r!   r"   r   r\   rp   ))r   r   r   )r   r   )r   r   r   ri   )rv   rv   rj   rk   rv   rm   )NNNNNr   r   drz   r   )TTTTTrl   r|   r^   )rc   ra   r   rb   rh   r_   r`   rn   )r   r   r   r   r   )r   r   r   r   ry   r   r}   r   s      r   test_coord_meta_wcsapir#    s   
//CCM1&9&9&9  MAz f " " "     f!X!X!XXXXXf!?!?!?????f	t	s	u	u	"     i $B$B$BBBBBm$	t	s	{	u	)     237O7O7OOOOO237O7O7OOOOO./3K3K3KKKKK*+ 0 0 0      r   c                     t          j        d          }|                    g dt                                }|                    dd           |                    dd           |S )N   r&  figsizer	  r        g     b@)r   r  r  r   set_xlimset_ylimr   r  r  s      r   test_wcsapi_5d_with_namesr-    sc     *V
$
$
$C	***}	G	GBKKeKKeJr   c                       e Zd Zed             Zed             Zed             Zed             Zed             Zd Z	d Z
ed             Zed	             Zd
S )LowLevelWCSCelestial2Dc                     dS Nr   r   r   s    r   r   z"LowLevelWCSCelestial2D.pixel_n_dim#  r   r   c                     dS r1  r   r   s    r   r   z"LowLevelWCSCelestial2D.world_n_dim'  r   r   c                 
    ddgS )Nr   r   r   r   s    r   r   z0LowLevelWCSCelestial2D.world_axis_physical_types+  s     
 	
r   c                 
    ddgS )Nr{   r   r   s    r   r   z'LowLevelWCSCelestial2D.world_axis_units2  s    (##r   c                 
    ddgS )Nr   r   r   r   s    r   r   z'LowLevelWCSCelestial2D.world_axis_names6  s    e}r   c                     |S r   r   r   s     r   r   z,LowLevelWCSCelestial2D.pixel_to_world_values=      r   c                     |S r   r   r   s     r   r   z,LowLevelWCSCelestial2D.world_to_pixel_values@  r7  r   c                 
    ddgS )N)r   r   zspherical.lon.arcsec)r   rW   zspherical.lat.arcsecr   r   s    r   r   z3LowLevelWCSCelestial2D.world_axis_object_componentsC  s     54
 	
r   c                     dt           dddifiS )Nr   r   r   r{   r   r   s    r   r   z0LowLevelWCSCelestial2D.world_axis_object_classesJ  s     (B(:;
 	
r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r/  r/     s           X   X 
 
 X
 $ $ X$   X     
 
 X
 
 
 X
 
 
r   r/  c                    t          j        d          }|                    g dt                                }|                    dd           |                    dd           |j        d                             d           |                    t          d	d
gddgd          d           |
                    t          ddgd	d
gd          dd	           |S )Nr%  r'  )g333333?r
  r  r  r  r)  g     i@r   r{   r[      d   )r   rogreen)colorr   )r   r  r  r/  r*  r+  r  set_format_unit
plot_coordr   scatter_coordr,  s      r   test_wcsapi_2d_celestial_arcsecrD  Q  s     *V
$
$
$C	+++8N8P8P	Q	QBKKeKKeIaL  ***MM(B9sCjx@@@$GGG#sb#YX666g     Jr   )Hr   textwrapr   matplotlib.pyplotpyplotr   numpyrK   pytestmatplotlib.transformsr   r   astropyr   ry   astropy.coordinatesr   
astropy.ior	   astropy.tests.figuresr
   astropy.timer   astropy.unitsr   astropy.utils.datar   #astropy.visualization.wcsaxes.framer   r   $astropy.visualization.wcsaxes.wcsapir   r   r   astropy.wcsr   astropy.wcs.wcsapir   r   fixturer   rM   r=   r>   r   r?   r@   rA   rX   r3   r7   rG   rU   rY   r   r   r   r   r   r   r   markparametrizes_r   r   r   r   r#  r-  r/  rD  r   r   r   <module>rZ     sJ                     = = = = = = = =       ( ( ( ( ( (       - - - - - -       " " " " " " 4 4 4 4 4 4 T T T T T T T T         
       A A A A A A A A   
 	!*	,	%.	,	*	!!//	$$$	%%%	"""	!//	 @ @ @>   * * *:/ / /; ; ;m. m. m.`( ( (1 1 1$2 2 2&6 6 60 0 0 0 0 0 8	s%%%vq1	s%%%y!4	s%%%y!4	s%%%vq1	qqq!!!Qz	MMM615	qqq!!!Qz	MMM9a8	qqq!!!Qz	MMM9a8	qqq!QQQz	MMM615	 & & & ruQQQ1aaaZ'8&9:: ?  ? ;: ?F;
 ;
 ;
 ;
 ;
O ;
 ;
 ;
|! ! !H( ( (V   .
 .
 .
 .
 .
_ .
 .
 .
b     r   