
    IR-eKQ                        d dl Z d dlmZ d dlZd dlmZ d dlZd dl	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mZ d dlmZ d dlm Z  d dl!m"Z" d dl#m$Z$m%Z%  eej&        j'                  Z(e( ed          k    Z)dZ* eej+                   ed          k     Z,d Z-d Z.d Z/ej0        1                    dd          Z2e	j3        4                    dddg          d             Z5d Z6d Z7d Z8d Z9ej0        1                    d d          Z:d! Z;d" Z<d# Z=d$ Z>d% Z?d& Z@d' ZAd( ZBd) ZCd* ZDd+E                                ZFd,E                                ZGd- ZHe	jI        d.             ZJd/ ZKe	j3        L                    e*d01          d2             ZMe	j3        4                    d3eeg          d4             ZNe	j3        4                    d5d6d7g          d8             ZOd9 ZPd: ZQd; ZRd< ZSd= ZTd> ZUdS )?    N)nullcontext)QuadContourSet)Version)units)SkyCoord)fits)get_pkg_data_filename)WCSAxes)EllipticalFrameRectangularFrameRectangularFrame1D)CurvedTransform)get_coord_meta)WCS)HighLevelWCSWrapperSlicedLowLevelWCSz2.6.1Tz3.7c                 .    t          j        d           d S )Nall)pltclose)functions    Mlib/python3.11/site-packages/astropy/visualization/wcsaxes/tests/test_misc.pyteardown_functionr   %   s    Ie    c                     t          j        dd           t          j        d          }t          |g d           d S )NaxesT)grid   r   figsize皙?r#   皙?r$   )r   rcfigurer
   )ignore_matplotlibrcfigs     r   test_grid_regressionr)   )   sH     F6
*V
$
$
$CC%%%&&&&&r   c                 N   t          j        d          }t          |g d          }|                    |           |                    dd          dk    sJ |j        d                             d          dk    sJ |j        d                             d          dk    sJ |                    |dz             |                    dd          d	k    sJ |j        d                             d          d
k    sJ |j        d                             d          d
k    sJ d S )Nr   r    r"   
    r      nothingz10.0 10.0 (world)z10.0)r   r&   r
   add_axesformat_coordcoordssavefig)r'   tmp_pathr(   axs       r   test_format_coord_regressionr5   1   s.    *V
$
$
$C	***	+	+BLL??2r""b((((9Q<$$R((B....9Q<$$R((B....KK9$%%%??2r""&999999Q<$$R((F22229Q<$$R((F222222r   a  
NAXIS   =                    2
NAXIS1  =                  200
NAXIS2  =                  100
CTYPE1  = 'RA---MOL'
CRPIX1  =                  500
CRVAL1  =                180.0
CDELT1  =                 -0.4
CUNIT1  = 'deg     '
CTYPE2  = 'DEC--MOL'
CRPIX2  =                  400
CRVAL2  =                  0.0
CDELT2  =                  0.4
CUNIT2  = 'deg     '
COORDSYS= 'icrs    '

)sep	grid_typelinescontoursc                 @   t          j                    }|                    dddt          t                              }|                    t          j        d                     |j        	                    d|           t          j                    5  t          j        dd           t          j        dd	           t          j        dd
           t          j        dd           |                    |dz             d d d            d S # 1 swxY w Y   d S )Nr-   
projection)d      whitecolorr8   ignorez&.*converting a masked element to nan.*messagez6.*No contour levels were found within the data range.*z6.*np\.asscalar\(a\) is deprecated since NumPy v1\.16.*z%.*PY_SSIZE_T_CLEAN will be required.*test.png)r   r&   add_subplotr   TARGET_HEADERimshownpzerosr1   r   warningscatch_warningsfilterwarningsr2   )r'   r3   r8   r(   r4   s        r   test_no_numpy_warningsrO   U   sv   
*,,C	AqS-?-?	@	@BIIbhz""###INNIN666 
	 	"	" + +G	
 	
 	
 	
 	W	
 	
 	
 	
 	W	
 	
 	
 	
 	F	
 	
 	
 	
 	Hz)***+ + + + + + + + + + + + + + + + + +s   A1DDDc                 p   t          j        dddt          t                              }t	          j        t          d          5  |                    d           d d d            n# 1 swxY w Y   t	          j        t          d          5  t          d           d d d            d S # 1 swxY w Y   d S )Nr-   r<   zFrame banana not foundmatchbananazUnknown frame: banana)	r   subplotr   rH   pytestraises
ValueErrorget_coords_overlayr   r'   r4   s     r   test_invalid_frame_overlayrZ   r   s+   	Q1]););	<	<	<B	z)B	C	C	C ( (
h'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 
z)A	B	B	B ! !x   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s$   A((A,/A,B++B/2B/c                 @   t          d          }t          j                            |          }t	          j        d          }|                    g dt          |          d          }|                    dd           |	                    dd           t          d	t          j        z  d
t          j        z            }t          j        t                    5  |                    |d|                    d                     d d d            d S # 1 swxY w Y   d S )Ndata/2MASS_k_header   r^   r    333333?r`   r$   r$   equalr=   aspect           @S *|v@S>f3?ogalactic	transform)r	   r   Headerfromtextfiler   r&   r/   r   set_xlimset_ylimr   udegrU   rV   	TypeError
plot_coordget_transformr'   twoMASS_k_headerr(   r4   cs        r   test_plot_coord_transformrx   |   s]   ,-BCC{//0@AA
*V
$
$
$C	3/?+@+@ 
 
 
B KKeKKe%zAE'9::A	y	!	! F F
a(8(8(D(DEEEF F F F F F F F F F F F F F F F F F   ,DDDc                 @   t          d          }t          j                            |          }t	          j        d          }|                    g dt          |          d          }|                    dd           |	                    dd           t          d	t          j        z  d
t          j        z            }t          j        t                    5  |                    |d|                    d                     d d d            d S # 1 swxY w Y   d S )Nr\   r]   r    r_   ra   rb   rd   re   rf   rg   rh   ri   )markerrk   )r	   r   rl   rm   r   r&   r/   r   rn   ro   r   rp   rq   rU   rV   rr   scatter_coordrt   ru   s        r   test_scatter_coord_transformr}      s`   ,-BCC{//0@AA
*V
$
$
$C	3/?+@+@ 
 
 
B KKeKKe%zAE'9::A	y	!	! P P
3"2B2B:2N2NOOOP P P P P P P P P P P P P P P P P Pry   c                    t          j        dddt          t                              }|                    ddd           |                    ddd	           |j        d
         j                                        dk    sJ |j        d
         j        	                    d          dk    sJ |j        d
         j        
                                dk    sJ |j        d         j                                        dk    sJ |j        d         j        	                    d          dk    sJ |j        d         j        
                                d	k    sJ |                                dk    sJ |                                dk    sJ d S )Nr-   r<   zTest x label   red)labelpadrB   zTest y labelr   greenr   bl)r   rT   r   rH   
set_xlabel
set_ylabelr1   
axislabelsget_text
get_minpad	get_color
get_xlabel
get_ylabelrY   s     r   test_set_label_propertiesr      st    
Q1]););	<	<	<BMM.1EM:::MM.1GM<<<9Q<"++--????9Q<"--c22a77779Q<",,..%77779Q<"++--????9Q<"--c22a77779Q<",,..'9999==??n,,,,==??n,,,,,,r   a{  
SIMPLE  =                    T / conforms to FITS standard
BITPIX  =                  -32 / array data type
NAXIS   =                    3 / number of array dimensions
NAXIS1  =                   31
NAXIS2  =                 2881
NAXIS3  =                  480
EXTEND  =                    T
CTYPE1  = 'DISTMOD '
CRVAL1  =                  3.5
CDELT1  =                  0.5
CRPIX1  =                  1.0
CTYPE2  = 'GLON-CAR'
CRVAL2  =                180.0
CDELT2  =               -0.125
CRPIX2  =                  1.0
CTYPE3  = 'GLAT-CAR'
CRVAL3  =                  0.0
CDELT3  =                0.125
CRPIX3  =                241.0
c                    t          d          }g d|j        _        g d|j        _        g d|j        _        g d|j        _        g d|j        _        t          j                    5  t          j	        dd	
           t          j        ddd|d           t          j        |dz             d d d            n# 1 swxY w Y   t          t                    }t          j                    5  t          j	        dd	
           t          j                     t          j        ddd|d           t          j        |dz             d d d            d S # 1 swxY w Y   d S )Nr   naxisxyzrq   rq   zkm/sg     4@g     Ċ@iM        @r              r   g      ?rC   z.*PY_SSIZE_T_CLEAN.*rD   r-   r   r   r-   r=   slicesrF   )r   r   r   )r   wcsctypecunitcrpixcdeltcrvalrL   rM   rN   r   rT   r2   
GAL_HEADERclf)r'   r3   wcs3ds      r   test_slicing_warningsr      s    aLLLE%ooEIO,,,EIO)))EIO&&&EIO%ooEIO		 	"	" + +2IJJJJAq!mDDDDHz)***	+ + + + + + + + + + + + + + + 
OOE		 	"	" + +2IJJJJ			Aq!mDDDDHz)***+ + + + + + + + + + + + + + + + + +s&   *AB==CC/AEEEc                     t          j        t                                 t          j        d           t          j        d           t          j        | dz             d S )Nr<   zGalactic LongitudezGalactic LatituderF   )r   rT   r   xlabelylabelr2   )r3   s    r   test_plt_xlabel_ylabelr      sX     K355!!!!J#$$$J"###K:%&&&&&r   c                 P    G d dt                     } |            }dt          j        t          j        fddd}t	          j                    }t          |g d||          }|                    |           |                    d	
           |	                    | dz             d S )Nc                       e Zd Zd ZdS ):test_grid_type_contours_transform.<locals>.CustomTransformc                     |dz  S )Ng? )selfvaluess     r   rk   zDtest_grid_type_contours_transform.<locals>.CustomTransform.transform   s    C<r   N)__name__
__module____qualname__rk   r   r   r   CustomTransformr      s#        	  	  	  	  	 r   r   )scalarr   )NNr   r   )typeunitwrapnamer"   )rk   
coord_metar:   r8   rF   )
r   rp   msr   r&   r
   r/   r   r2   )r3   r   rk   r   r(   r4   s         r   !test_grid_type_contours_transformr      s             /        !!I$ac
	 J *,,C	***iJ	W	W	WBLLGGjG!!!KK:%&&&&&r   c                      t          j        t                                } t          j        t	          j        d                     |                                 dk    sJ |                                 dk    sJ d S Nr<   )r   r   )rd         ?r   rT   r   rI   rJ   onesget_xlimget_ylimr4   s    r   test_plt_imshow_originr     sj     
	&	&	&BJrwv;;==K'''';;==K''''''r   c                      t          j        t                                } |                     t	          j        d                     |                                 dk    sJ |                                 dk    sJ d S r   r   r   s    r   test_ax_imshow_originr     sl     
	&	&	&BIIbgfoo;;==K'''';;==K''''''r   c                    | dz  }t          j        t                                }|                    dd           |                    dd           |j        d                             g t          j        z             |j        d         	                    d           t          j
        |           |j        d         	                    d           t          j
        |           d S )	NrF   r<   rd   r   r   )r   r:   r   )r   rT   r   rn   ro   r1   	set_ticksrp   oner   r2   )r3   filenamer4   s      r   test_grid_contour_large_spacingr      s    
 *$H		&	&	&BKKcKKcIaL"qu*---IaL
+++KIaL
+++Kr   c                     t          j                    } t          | g d          }|                     |           |                    t          j        d                              dd          |                    d                    }t          |t                    sJ |                    t          j        d                              dd          |                    d                    }t          |t                    sJ d S )Nr"         worldrj   )r   r&   r
   r/   contourrJ   arangereshapert   
isinstancer   contourf)r(   r4   csets      r   test_contour_returnr   3  s     *,,C	***	+	+BLL::bimm++Aq11R=M=Mg=V=V:WWDdN+++++;;ry}},,Q22b>N>Nw>W>W;XXDdN+++++++r   c                     t          j                    } t          | g d          }|                     |           t          rt          j        t          d          }nt                      }|5  |	                    t          j        d          |                    d                     d d d            d S # 1 swxY w Y   d S )Nr"   z2No contour levels were found within the data rangerQ   )r   r   r   rj   )r   r&   r
   r/   MATPLOTLIB_LT_3_7rU   warnsUserWarningr   r   rJ   rK   rt   )r(   r4   ctxs      r   test_contour_emptyr   B  s    *,,C	***	+	+BLL lS
 
 
 mm	 J J


28F##r/?/?/H/H
IIIJ J J J J J J J J J J J J J J J J Js   .=B88B<?B<c                     t          d          }g d|j        _        g d|j        _        g d|j        _        g d|j        _        g d|j        _        t          j        ddd|d	
          }|j	        \  }}}d S )Nr   r   r   r   r   r   r   r-   r   r   )
r   r   r   r   r   r   r   r   rT   r1   )r'   r   r4   r   r   r   s         r   test_iterate_coordsr   U  s     aLLLE%ooEIO,,,EIO)))EIO&&&EIO%ooEIO	Q1}	E	E	EBiGAq!!!r   c                 ~   t          d          }g d|j        _        t          j        ddd|d           t          j        t          d          5  t          j        ddd|	           d d d            n# 1 swxY w Y   t          j        t          d
          5  t          j        ddd|d           d d d            n# 1 swxY w Y   t          d          }ddg|j        _        t          j                     t          j        ddd|	          }|j	        t          u sJ t          j                     t          j        ddd|d          }|j	        t          u sJ t          j                     t          j        ddd|d          }|j	        t          u sJ t          j                     t          j        ddd|ddg          }|j	        t          u sJ t          j                     t          j        ddd|d          }|j	        t          u sJ t          d          }dg|j        _        t          j                     t          j        ddd|	          }|j	        t          u sJ t          j        t                    5  t          j        ddd|d           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r-   r   r   z?WCS has more than 2 pixel dimensions, so 'slices' should be setrQ   r<   zO'slices' should have as many elements as WCS has pixel dimensions .should be 3.)r   r   r-   r   r   r   r   r   )r   r   )r-   r   )r-   r   )r   r   r   r   rT   rU   rV   rW   r   frame_classr   r   )r'   r   wcs2dr4   wcs1ds        r   test_invalid_slices_errorsr   d  s   
 aLLLE%ooEIOK1aE-@@@@	P
 
 
 / / 	Aq!....	/ / / / / / / / / / / / / / / 

 
 
 H H 	Aq!6FGGGGH H H H H H H H H H H H H H H aLLLECjEIOGIII	Q1	/	/	/B>-----GIII	Q1z	B	B	BB>-----GIII	Q1z	B	B	BB>-----GIII	Q1Sz	B	B	BB>-----GIII	Q1x	@	@	@B>/////aLLLEeEIOGIII	Q1	/	/	/B>/////	z	"	" @ @Aq!h????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s6   A88A<?A<CCCJ22J69J6a  
<CoordinatesMap with 3 world coordinates:

  index            aliases                type   ...    wrap   format_unit visible
  ----- ------------------------------ --------- ... --------- ----------- -------
      0                   distmod dist    scalar ...      None                  no
      1 pos.galactic.lon glon-car glon longitude ... 360.0 deg         deg     yes
      2 pos.galactic.lat glat-car glat  latitude ...      None         deg     yes

>
 a  
<CoordinatesMap with 3 world coordinates:

  index            aliases                type   ...    wrap   format_unit visible
  ----- ------------------------------ --------- ... --------- ----------- -------
      0                   distmod dist    scalar ...      None                 yes
      1 pos.galactic.lon glon-car glon longitude ... 360.0 deg         deg     yes
      2 pos.galactic.lat glat-car glat  latitude ...      None         deg     yes

>
 c                 4   t          t                    }t          j        ddd|d          }t	          |j                  t          k    sJ t          j                     t          j        ddd|d          }t	          |j                  t          k    sJ d S )Nr-   )r-   r   r   r   r   )	r   r   r   rT   reprr1   EXPECTED_REPR_1r   EXPECTED_REPR_2)r'   r   r4   s      r   	test_reprr     s     
OOE
 
Q1}	E	E	EB	??o---- GIII	Q1}	E	E	EB	??o------r   c                  t    t          d          } ddg| j        _        | j                                         | S )Nr   r   FREQTIME)r   r   r   set)r   s    r   time_spectral_wcs_2dr     s1    
A,,,CV$CGMGKKMMMJr   c                 0    t          j        |            d S )Nr<   )r   rT   )r   s    r   test_time_wcsr     s     K/000000r   zTeX is unavailable)reasonc                 ^   t          j        dd           dddddd	d
dt          j        d          z  t          j        z  dt          j        d          z  t          j        z  dddd}t          |          }t          j        t          t          |                    \  }}|	                    d|d         dz
             |
                    d|d         dz
             |j        d                             d           |j        d                             d           |j        d                             dt          j        z             |j        d                             dt          j        z             |                                 |                    |dz             dS )zCRegression test for https://github.com/astropy/astropy/issues/8004.textT)usetexr   h          f@     V@     f@r   zRA---MOLzDEC--MOLICRS)NAXISNAXIS1NAXIS2CRPIX1CRPIX2CRVAL1CRVAL2CDELT1CDELT2CTYPE1CTYPE2RADESYSr   r=   
subplot_kwrd   r  g      ?r  r   )exclude_overlappingr-   -   )spacing   plot.pngN)r   r%   rJ   sqrtpir   subplotsdictr   rn   ro   r1   set_ticklabelr   rp   rq   r   r2   )r'   r3   headerr   r(   r4   s         r   test_simplify_labels_usetexr    s    F6$ rwqzz/BE)bgajj.25( F f++CldSV&W&W&WXXXGCKKfX&,---KKfX&,---IaL4888IaL4888IaL2:...IaL2:...GGIIIKK:%&&&&&r   r   c                    ddg}ddddddd	d
t          j        d          z  t           j        z  dt          j        d          z  t           j        z  ddd}t          |          }t	          j        t          ||                    \  }}|                    |d                    |                    |d                    |	                                |d         k    sJ |
                                |d         k    sJ t          d          D ]-}|j        |                                         ||         k    sJ .dS )zTest if ``axis.set_xlabel()`` calls the correct ``coords[i]_set_axislabel()`` in a
    WCS plot. Regression test for https://github.com/astropy/astropy/issues/10435.
    RADeclinationr   r   r   r   r   r   r   r   zRA---AITzDEC--AIT)r  r  r  r  r  r  r  r	  r
  r  r  r  r  r   r-   N)rJ   r  r  r   r   r  r  r   r   r   r   ranger1   get_axislabel)r'   r   labelsr  r   r(   r4   is           r   test_set_labels_with_coordsr$    s@    M"Frwqzz/BE)bgajj.25( F f++Cld{s&S&S&STTTGCMM&)MM&)==??fQi''''==??fQi''''1XX 9 9y|))++vay888889 9r   atolg?g:0yE>c                 t   g d}t          j                    }t          |g d          }|                    |           |j                                         |j        j        }|                    |          }| dk     rt          st          j
        d           t          j        |j        ||           sJ d S )N)grq&@g      @g      @g      {@r"   r#   zAExact BoundingBox dimensions are only ensured with FreeType 2.6.1)r%  )r   r&   r
   r/   canvasdrawrendererget_tightbboxFREETYPE_261rU   xfailrJ   allcloseextents)r%  r.  r(   r4   r)  ax_bboxs         r   test_bbox_sizer0    s     544G
*,,C	***	+	+BLLJOOz"Hx((G czz,zO	
 	
 	
 ;wd;;;;;;;;r   c                     t          t                    } t          | t          j        ddddf                   }t          j        ddd|           }|                    |           t          |          }|                    |           d S )Nr-   r<   )	r   rH   r   rJ   s_r   rT   rt   r   )r   
sliced_wcsr4   high_wcss       r   "test_wcs_type_transform_regressionr6  *  s    
m

C"3adAbDj(9::J	Q1	-	-	-BZ   ":..HZ     r   c                    t          j                    }|                    dddt                                }|                    dd           |                    | dz             |                    | dz             d S )Nr-   r<   blackr:   rA   r  )r   r&   rG   r   r   r2   )r3   r(   r4   s      r   !test_multiple_draws_grid_contoursr9  4  st    
*,,C	AqSUU	3	3BGG'ZG000KK:%&&&KK:%&&&&&r   c                     t          t                    } d| j        j        d<   t	          j        ddd|           }|                    dd           |                    dd           t          j	        |j
                                        t          j        ddg                    sJ |                    dd           t          j	        |j
                                        t          j        d	dg                    sJ d S )
Nr   r-   r<   i,  i  i  )gbcAg^g_̟^@)gNLFgyQVgF@)gW88j`r   )r   rH   r   r   r   rT   ro   rn   rJ   r-  r1   get_coord_rangearray)r   r4   s     r   #test_get_coord_range_nan_regressionr=  <  s    m

CCGM!	Q1	-	-	-B KKS KKS;
	!!##
87	
 	
     KK3;
	!!##
(*QR	
 	
      r   c                  X   t          j                    } |                     dddt                                }t	          j        t          d          5  |                    t          j	        d          
                    dd          d           d d d            d S # 1 swxY w Y   d S )	Nr-   r<   z$Cannot use images with origin='upperrQ   r>   r+   upper)origin)r   r&   rG   r   rU   rV   rW   rI   rJ   r   r   r(   r4   s     r   test_imshow_errorrB  ]  s    
*,,C	AqSUU	3	3B	z)O	P	P	P @ @
		"'#,,&&r2..w	???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s   >BB#&B#c                  D   t          j                    } |                     dddt                                }|                    d           |                    d           t          j        t          d          5  |                                 d d d            n# 1 swxY w Y   |                    d           |                    d           t          j        t          d	          5  |                                 d d d            d S # 1 swxY w Y   d S )
Nr-   r<   label)r   )rD  z5set_xlabel\(\) missing 1 required positional argumentrQ   )r   z5set_ylabel\(\) missing 1 required positional argument)	r   r&   rG   r   r   rU   rV   rr   r   rA  s     r   test_label_settingrE  d  s   
*,,C	AqSUU	3	3BMMM!!!MMM   	Q
 
 
   	               MMM!!!MMM   	Q
 
 
   	                 s$    B!!B%(B%3DDDc                  X   t          j                    } |                     dddt                                }|                    | j                                                  J |                    d           |                    | j                                                  J d S )Nr-   r<   F)r   r&   rG   r   r*  r'  get_rendererset_visiblerA  s     r   test_invisible_bboxrI  z  s    
*,,C	AqSUU	3	3BCJ335566BBBNN5CJ335566>>>>>r   )VrL   
contextlibr   
matplotlibmatplotlib.pyplotpyplotr   numpyrJ   rU   matplotlib.contourr   packaging.versionr   astropyr   rp   astropy.coordinatesr   
astropy.ior   astropy.utils.datar	   "astropy.visualization.wcsaxes.corer
   #astropy.visualization.wcsaxes.framer   r   r   (astropy.visualization.wcsaxes.transformsr   #astropy.visualization.wcsaxes.utilsr   astropy.wcsr   astropy.wcs.wcsapir   r   ft2font__freetype_version__
ft_versionr+  TEX_UNAVAILABLE__version__r   r   r)   r5   rl   
fromstringrH   markparametrizerO   rZ   rx   r}   r   r   r   r   r   r   r   r   r   r   r   r   stripr   r   r   fixturer   r   skipifr  r$  r0  r6  r9  r=  rB  rE  rI  r   r   r   <module>rf     s    " " " " " "                - - - - - - % % % % % %       ( ( ( ( ( (       4 4 4 4 4 4 6 6 6 6 6 6         
 E D D D D D > > > > > >       E E E E E E E EWZ'<==
WWW--- GJ233ggennD   ' ' '3 3 3 &&  	# '  * w
&;<<+ + =<+8! ! !F F FP P P- - -* [##* 	- $  
4+ + +>' ' '' ' '4( ( (( ( (  &, , ,J J J&  4@ 4@ 4@n
 UWW 
 UWW . . .$   1 1 1 O,@AA' ' BA'@ )9?(KLL9 9 ML9> #v//< < 0/<&! ! !' ' '  B@ @ @  ,? ? ? ? ?r   