a
    ߙfbE                     @   s<  d dl Z d dlmZ d dl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 d d
lmZ d dlmZmZmZ d dl m!Z! d dl"m#Z# eej$j%Z&e&edkZ'e(d Z)eej*j+Z,dd Z-dd Z.dd Z/ej0j1dddZ2ej34dddgdd Z5dd Z6d d! Z7d"d# Z8ej0j1d$ddZ9d%d& Z:d'd( Z;d)d* Z<d+d, Z=d-d. Z>d/d0 Z?d1d2 Z@d3d4 ZAd5d6 ZBd7d8 ZCd9D ZEd:D ZFd;d< ZGejHd=d> ZId?d@ ZJej3KdAdBdC ZLej34dDeegdEdF ZMej34dGdHdIgdJdK ZNdLdM ZOdNdO ZPdS )P    N)Version)QuadContourSet)units)WCS)fits)SkyCoord)get_pkg_data_filename)SlicedLowLevelWCSHighLevelWCSWrapper)WCSAxes)EllipticalFrameRectangularFrameRectangularFrame1D)get_coord_meta)CurvedTransformz2.6.1Tc                 C   s   t d d S )Nall)pltclose)Zfunction r   Llib/python3.9/site-packages/astropy/visualization/wcsaxes/tests/test_misc.pyteardown_function    s    r   c                 C   s,   t jddd t jdd}t|g d d S )NZaxesT)grid   r   Zfigsize皙?r   皙?r   )r   rcfigurer   )ignore_matplotlibrcfigr   r   r   test_grid_regression$   s    r"   c                 C   s   t jdd}t|g d}|| |dddks8J |jd ddksPJ |jd ddkshJ ||dj |ddd	ksJ |jd dd
ksJ |jd dd
ksJ d S )Nr   r   r   
    r      Znothingz10.0 10.0 (world)z10.0)	r   r   r   add_axesZformat_coordcoordssavefigjoinstrpath)r    tmpdirr!   axr   r   r   test_format_coord_regression,   s    
r-   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                 C   s   t  }|jdddttd}|td |jj	d|d t
 Z t
jddd t
jdd	d t
jdd
d t
jddd ||dj W d    n1 s0    Y  d S )Nr%   
projection)d      Zwhitecolorr0   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zerosr'   r   warningscatch_warningsfilterwarningsr(   r)   r*   )r    r+   r0   r!   r,   r   r   r   test_no_numpy_warningsM   s    
rE   c                 C   s   t jdddttd}tt}|d W d    n1 s@0    Y  |jj	d dks^J tt}t
d W d    n1 s0    Y  |jj	d dksJ d S )Nr%   r3   Zbananar   zFrame banana not foundzUnknown frame: banana)r   subplotr   r>   pytestraises
ValueErrorZget_coords_overlayvalueargsr   )r    r,   excr   r   r   test_invalid_frame_overlayb   s    (&rM   c                 C   s   t d}tj|}tjdd}|jg dt|dd}|dd |	dd t
d	tj d
tj }tt& |j|d|dd W d    n1 s0    Y  d S )Nzdata/2MASS_k_header)   rN   r   )333333?rO   r   r   Zequal)r4   Zaspect      g     @gS *|v@gS>f3?oZgalactic	transform)r   r   HeaderZfromtextfiler   r   r&   r   set_xlimset_ylimr   udegrG   rH   	TypeErrorZ
plot_coordget_transform)r    ZtwoMASS_k_headerr!   r,   cr   r   r   test_plot_coord_transformo   s    
r\   c                 C   s   t jdddttd}|jdddd |jddd	d |jd
 j dksNJ |jd
 j	ddkshJ |jd
 j
 dksJ |jd j dksJ |jd j	ddksJ |jd j
 d	ksJ | dksJ | dksJ d S )Nr%   r3   zTest x label   Zred)Zlabelpadr8   zTest y labelr   Zgreenr   bl)r   rF   r   r>   
set_xlabel
set_ylabelr'   Z
axislabelsZget_textZ
get_minpadZ	get_color
get_xlabel
get_ylabel)r    r,   r   r   r   test_set_label_properties   s    rd   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                 C   s  t dd}g d|j_g d|j_g d|j_g d|j_g d|j_t D tj	dd	d
 t
jddd|dd t
|dj W d    n1 s0    Y  t t}t L tj	dd	d
 t
  t
jddd|dd t
|dj W d    n1 s0    Y  d S )Nr   ZnaxisxyzrX   rX   zkm/sg     4@g     Ċ@iM        @rm              rp   g      ?r9   z.*PY_SSIZE_T_CLEAN.*r:   r%   rg   rh   r%   r4   Zslicesr<   )rg   rh   r]   )r   wcsctypecunitcrpixcdeltcrvalrB   rC   rD   r   rF   r(   r)   r*   
GAL_HEADERclf)r    r+   wcs3dr   r   r   test_slicing_warnings   s     

0
r|   c                 C   s8   t jt d t d t d t | dj d S )Nr3   zGalactic LongitudezGalactic Latituder<   )r   rF   r   ZxlabelZylabelr(   r)   r*   )r+   r   r   r   test_plt_xlabel_ylabel   s    

r}   c                 C   st   G dd dt }| }dtjtjfddd}t }t|g d||d}|| |jd	d
 |	| 
dj d S )Nc                   @   s   e Zd Zdd ZdS )z:test_grid_type_contours_transform.<locals>.CustomTransformc                 S   s   |d S )Ng?r   )selfvaluesr   r   r   rS      s    zDtest_grid_type_contours_transform.<locals>.CustomTransform.transformN)__name__
__module____qualname__rS   r   r   r   r   CustomTransform   s   r   )scalarr   )NNrg   rh   )typeZunitZwrapnamer   )rS   
coord_metar2   r0   r<   )r   rW   msr   r   r   r&   r   r(   r)   r*   )r+   r   rS   r   r!   r,   r   r   r   !test_grid_type_contours_transform   s    


r   c                  C   sB   t jt d} t td |  dks.J |  dks>J d S Nr3   )r]   r]   )rP         ?r   rF   r   r?   r@   ZonesZget_xlimZget_ylimr,   r   r   r   test_plt_imshow_origin   s    r   c                  C   sB   t jt d} | td |  dks.J |  dks>J d S r   r   r   r   r   r   test_ax_imshow_origin   s    r   c                 C   s   |  dj}tjt d}|dd |dd |jd jg t	j
 d |jd jdd t| |jd jdd t| d S )	Nr<   r3   rP   r   r   )r   r2   r   )r)   r*   r   rF   r   rU   rV   r'   	set_ticksrW   Zoner   r(   )r+   filenamer,   r   r   r   test_grid_contour_large_spacing  s    
r   c                  C   s   t  } t| g d}| | |jtddd|dd}t	|t
sPJ |jtddd|dd}t	|t
sJ d S )Nr         worldrR   )r   r   r   r&   contourr@   ZarangeZreshaperZ   
isinstancer   Zcontourf)r!   r,   Zcsetr   r   r   test_contour_return  s    
""r   c                  C   sl   t  } t| g d}| | tjtdd* |jt	d|
dd W d    n1 s^0    Y  d S )Nr   z2No contour levels were found within the data range)match)r   r   r   rR   )r   r   r   r&   rG   ZwarnsUserWarningr   r@   rA   rZ   )r!   r,   r   r   r   test_contour_empty,  s
    
r   c                 C   sj   t dd}g d|j_g d|j_g d|j_g d|j_g d|j_tjddd|d	d
}|j	\}}}d S )Nr   re   rf   rj   rk   rl   ro   r%   rq   rr   )
r   rs   rt   ru   rv   rw   rx   r   rF   r'   )r    r+   r{   r,   rg   rh   ri   r   r   r   test_iterate_coords8  s    
r   c                 C   sB  t dd}g d|j_tjddd|dd tt"}tjddd|d W d    n1 s\0    Y  |jj	d d	kszJ tt$}tjddd|d
d W d    n1 s0    Y  |jj	d dksJ t dd}ddg|j_t
  tjddd|d}|jtu sJ t
  tjddd|dd}|jtu s8J t
  tjddd|dd}|jtu sdJ t
  tjddd|ddgd}|jtu sJ t
  tjddd|dd}|jtu sJ t dd}dg|j_t
  tjddd|d}|jtu sJ tt$ tjddd|dd W d    n1 s40    Y  d S )Nr   re   rf   r%   rq   rr   r3   r   z?WCS has more than 2 pixel dimensions, so 'slices' should be set)rg   rh   r%   r]   zO'slices' should have as many elements as WCS has pixel dimensions (should be 3)r]   rg   rh   r   )rh   rg   )r%   rg   )r%   rh   )r   rs   rt   r   rF   rG   rH   rI   rJ   rK   rz   frame_classr   r   )r    r{   rL   Zwcs2dr,   Zwcs1dr   r   r   test_invalid_slices_errorsH  sB    
02


r   a  
<CoordinatesMap with 3 world coordinates:

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

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

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

>
 c                 C   s`   t t}tjddd|dd}t|jtks.J t  tjddd|dd}t|jtks\J d S )Nr%   )r%   rg   rh   rr   rq   )	r   ry   r   rF   reprr'   EXPECTED_REPR_1rz   EXPECTED_REPR_2)r    r{   r,   r   r   r   	test_repr  s    r   c                  C   s$   t dd} ddg| j_| j  | S )Nr]   re   ZFREQZTIME)r   rs   rt   set)rs   r   r   r   time_spectral_wcs_2d  s    

r   c                 C   s   t j| d d S )Nr3   )r   rF   )r   r   r   r   test_time_wcs  s    r   TEX_UNAVAILABLEc                 C   s  t jddd dddddd	d
dtd tj dtd tj dddd}t|}t jtt|dd\}}|	d|d d  |
d|d d  |jd jdd |jd jdd |jd jdtj d |jd jdtj d |  ||d  dS )zCRegression test for https://github.com/astropy/astropy/issues/8004.textT)Zusetexr]   h          f@     V@     f@rp   zRA---MOLzDEC--MOLZICRS)NAXISNAXIS1NAXIS2CRPIX1CRPIX2CRVAL1CRVAL2CDELT1CDELT2CTYPE1CTYPE2ZRADESYSr   r4   Z
subplot_kwrP   r   g      ?r   r   )Zexclude_overlappingr%   -   )Zspacing   plot.pngN)r   r   r@   sqrtpir   subplotsdictr   rU   rV   r'   Zset_ticklabelr   rW   rX   r   r(   )r    r+   headerrs   r!   r,   r   r   r   test_simplify_labels_usetex  s4    

r   r   c                 C   s   ddg}ddddddd	d
t d t j dt d t j ddd}t|}tjt||dd\}}||d  ||d  |	 |d ksJ |
 |d ksJ tdD ]}|j|  || ksJ qd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.
    ZRAZDeclinationr]   r   r   r   r   r   rp   r   zRA---AITzDEC--AIT)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   N)r@   r   r   r   r   r   r   r`   ra   rb   rc   ranger'   Zget_axislabel)r    r   labelsr   rs   r!   r,   ir   r   r   test_set_labels_with_coords  s.    

r   atolg?g:0yE>c                 C   st   g d}t  }t|g d}|| |j  |jj}||}| dk rZtsZt	
d tj|j|| dspJ 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&   ZcanvasZdrawrendererZget_tightbboxFREETYPE_261rG   Zxfailr@   Zallcloseextents)r   r   r!   r,   r   Zax_bboxr   r   r   test_bbox_size  s    



r   c                  C   sV   t t} t| tjddddf }tjddd| d}|| t|}|| d S )Nr%   r3   )	r   r>   r	   r@   Zs_r   rF   rZ   r
   )rs   Z
sliced_wcsr,   Zhigh_wcsr   r   r   "test_wcs_type_transform_regression
  s    
r   c                 C   sJ   t  }|jdddt d}|jddd || d  || d  d S )Nr%   r3   Zblackr2   r7   r   )r   r   r=   r   r   r(   )r+   r!   r,   r   r   r   !test_multiple_draws_grid_contours  s
    r   )QrB   Zpackaging.versionr   rG   Znumpyr@   Z
matplotlibZmatplotlib.pyplotZpyplotr   Zmatplotlib.contourr   Zastropyr   rW   Zastropy.wcsr   Z
astropy.ior   Zastropy.coordinatesr   Zastropy.utils.datar   Zastropy.wcs.wcsapir	   r
   Z"astropy.visualization.wcsaxes.corer   Z#astropy.visualization.wcsaxes.framer   r   r   Z#astropy.visualization.wcsaxes.utilsr   Z(astropy.visualization.wcsaxes.transformsr   Zft2fontZ__freetype_version__Z
ft_versionr   Zcheckdep_usetexr   __version__Zis_devreleaseZMATPLOTLIB_DEVr   r"   r-   rT   Z
fromstringr>   ZmarkZparametrizerE   rM   r\   rd   ry   r|   r}   r   r   r   r   r   r   r   r   stripr   r   r   Zfixturer   r   Zskipifr   r   r   r   r   r   r   r   r   <module>   st   
 3


 


