a
    ߙfb                     @   s@  d dl Zd dlmZ d dlZd dlmZ d dlmZm	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 d dlmZmZ d dl m!Z! G dd dZ"G dd de"Z#ej$dd Z%ej&j'ddej&j(ed i ddd Z)ej&j'ddej&j(ed i ddd Z*ej$dd Z+ej&j'ddej&j(ed i ddd Z,ej$dd  Z-ej&.d!ej/d ddf d"fej/ddd f d#fgej&j'ddej&j(ed i dd$d% Z0ej&.d!d&d'gej&j'ddej&j(ed i dd(d) Z1ej&j'ddej&j(ed i dd*d+ Z2dS ),    N)
rc_context)Circle	Rectangle)units)SkyCoord)fits)IMAGE_REFERENCE_DIR)get_pkg_data_filename)AstropyUserWarning)WCSAxes)EllipticalFrame)
QuadrangleSphericalCircle)WCSc                   @   s    e Zd Zedd Zdd ZdS )BaseImageTestsc                 C   sr   t d}tj|| _t d}tj|| _t d}tj|| _t d}tj|| _t d}tj|| _d S )Nzdata/msx_headerzdata/rosat_headerzdata/2MASS_k_headerzdata/cube_headerzdata/slice_header)	r	   r   ZHeaderZfromtextfile
msx_headerrosat_headertwoMASS_k_headercube_headerslice_header)clsr   r   r   r   r    r   Nlib/python3.9/site-packages/astropy/visualization/wcsaxes/tests/test_images.pysetup_class   s    zBaseImageTests.setup_classc                 C   s   t d d S )Nall)pltclose)selfmethodr   r   r   teardown_method*   s    zBaseImageTests.teardown_methodN)__name__
__module____qualname__classmethodr   r   r   r   r   r   r      s   
r   c                   @   sl  e Zd Zejjddejjedi ddd Zejjddejjedi ddd Z	ejjddejjed	i dej
d
g ddd Zejjddejjedi ddd Zejjddejjedi ddd Zejjddejjedi ddd Zejjddejjedi ddd Zejjddejjedi ddd Zejjddejjedi ddd Zejjddejjedi ddd Zejjddejjedi ddd Zejjddejjedi ddd Zejjddejjedi dd d! Zejjddejjedi dd"d# Zejjddejjedi dd$d% Zejjddejjedi dd&d' Zejjddejjedi dd(d) Zejjddejjedi dd*d+ Zejjddejjedi dd,d- Zejjddejjed.d/idi d0d1d2 Zejjddejjed.d/idi d0d3d4 Zejjddejjed.d/idi d0d5d6 Zejjddejjedi dd7d8 Zejjddejjedi dd9d: Z ejjddejjedi dd;d< Z!ejjddejjedd=d>idd?d@ Z"ejjddejjedi ddAdB Z#dCS )D	TestBasicastropysourcer   baseline_dir	tolerancestylec                 C   sb   t jdd}|jg dt| jdd}|dd |dd |jd jg d	t	j
 d
dd |S )N   r-   Zfigsize皙?r0   皙?r1   equal
projectionaspect           b@r   g333333ӿ        皙?      sizewidth)r   figureadd_axesr   r   set_xlimset_ylimcoords	set_ticksudegreer   figaxr   r   r   test_image_plot0   s     zTestBasic.test_image_plotc                 C   sF   t jdd}|jg dt| jd}|tdd |	  |S )N   rM   r.   r/   r4      )rM      )
r   r@   rA   r   r   imshownpZarangeZreshapeZset_axis_offrH   r   r   r   test_axes_off<   s
    zTestBasic.test_axes_offg      ?	axisbelow)TFlinec                 C   s   t jdd}|jg dt| jdd}|| |dd |dd |jd j	g d	t
j d
dd |  |jd d |jd d |td tdddddd}|| |jddgddgdd |S )Nr,   r.   r/   r2   r3   r6   r7   r   r8   r;   r<   r=   F)@   rV         >@      I@      N@rY   greenred)	facecolor	edgecolor       
   )Z	linewidth)r   r@   rA   r   r   Zset_axisbelowrB   rC   rD   rE   rF   rG   gridset_auto_axislabelrQ   rR   zerosr   	add_patchplot)r   rT   rI   rJ   rr   r   r   test_axisbelowG   s    
 
zTestBasic.test_axisbelowc                 C   s   t d}t|}|d j}W d    n1 s20    Y  t| j}tjdd}|jg dt| j	dd}|
dd	 |dd	 |j|||d
g dd |jd jddd |jd jddd |
dd |dd |jd tj |S )Ngalactic_center/gc_msx_e.fitsr   r,   r.   333333?rk   r1   r1   r2   r3   r6        @orangeg-C6>g-C6
?g-C6?)	transformcolorslevelsr;   r<   r=   r9        @)r	   r   opendatar   r   r   r@   rA   r   rB   rC   Zcontourget_transformrD   rE   set_format_unitrF   rG   r   pathZpfrt   Zwcs_msxrI   rJ   r   r   r   test_contour_overlayd   s(    (

zTestBasic.test_contour_overlayc                 C   s   t d}t|}|d j}W d    n1 s20    Y  t| j}tjdd}|jg dt| j	dd}|
dd	 |dd	 |j|||g d
d |jd jddd |jd jddd |
dd |dd |jd tj |S )Nri   r   r,   r.   rj   r2   r3   r6   rl   rn   )ro   rq   r;   r<   r=   r9   rr   )r	   r   rs   rt   r   r   r   r@   rA   r   rB   rC   Zcontourfru   rD   rE   rv   rF   rG   rw   r   r   r   test_contourf_overlay   s(    (

zTestBasic.test_contourf_overlayc                 C   s   t jdd}|jg dt| jdd}|jd d |jd d	 |jd
dddd |jd jdt	j
 ddd |jd jdddd |jd jddd |jd jddd |jjd
 |jjd |jj d
ksJ |jj dksJ |S )Nr,   r.   )      ?r{   ?r|   r2   r3   r   zdd:mm:ssr<   zdd:mm:ss.ssssr\         ?dashedcoloralphaZlw	linestyleglonrP   r;   )spacingr>   r?   glat	   )Znumberr>   r?   zGalactic Longitudeg?)ZminpadzGalactic Latitudeg         )r   r@   rA   r   r   rD   set_major_formatterrb   rE   rF   arcsecset_axislabelframeZ	set_colorZset_linewidthZ	get_colorZget_linewidthrH   r   r   r   test_overlay_features_image   s     

z%TestBasic.test_overlay_features_imagec                 C   s   t jdd}|jg dt| jdd}|dd |dd |jd	d
ddd tddddd}|	| tdddd|
dd}|	| tdddd|
dd}|	| tdddd|
dd}|	| |S )N)   r   r.   r/   r2   r3   r6   g     }@g     m@blackr}   r<   r~   r   ),  d   (   Zyellownone)radiusecfc)rX         4@r   rm   Zworld)r   r   r   ro   )rZ   rY   r\   fk5)g      D@rZ   r[   Zgalactic)r   r@   rA   r   r   rB   rC   rb   r   re   ru   )r   rI   rJ   pr   r   r   #test_curvilinear_grid_patches_image   s,    








z-TestBasic.test_curvilinear_grid_patches_imagec                 C   s   t  }|jg dt| jddd}|dd |dd |jd d	 |jd
 j	dt
j d
d |jd j	dt
j t
j d
d |jd
 jdd |jd jdd |jd jdddd |jd
 jdddd |jd jdddd |S )Nr/   2   yxr2   r4   slicesr5   r6        @J@     Z@r   zVelocity m/sr<   r:   )r   r?   i  TZexclude_overlappingr   contourspurplesolidZ	grid_typer   r   rm   r\   )r   r@   rA   r   r   rB   rC   rD   r   rE   rF   degmsset_ticklabelrb   rH   r   r   r   test_cube_slice_image   s     
 zTestBasic.test_cube_slice_imagec                 C   s~   t  }|jg dt| jddd}|dd |dd |jd jdd	d
d |jd jddd
d |jd 	t
j |S )Nr/   )r   r   r   r2   r   r6   r   r   r   bluer   r   r<   r\   )r   r@   rA   r   r   rB   rC   rD   rb   rv   rF   rG   rH   r   r   r   test_cube_slice_image_lonlat  s    
z&TestBasic.test_cube_slice_image_lonlatc                 C   s   t jdd}|jg dt| jdd}|dd |dd tdtj	 d	tj	 }|
|d
}t|tsnJ t|d tjjsJ |jd tj |S )Nr,   r.   rj   r2   r3   r6   rl   
  or   )r   r@   rA   r   r   rB   rC   r   rF   r   
plot_coord
isinstancelist
matplotliblinesZLine2DrD   rv   rG   )r   rI   rJ   cr   r   r   r   test_plot_coord'  s    
zTestBasic.test_plot_coordc                 C   s|   t jdd}|jg dt| jdd}|dd |dd tdd	gtj	 d
dgtj	 }|
| |jd tj |S )Nr,   r.   rj   r2   r3   r6   rl   r   g̬p@r   fffff<r   )r   r@   rA   r   r   rB   rC   r   rF   r   r   rD   rv   rG   )r   rI   rJ   r   r   r   r   test_plot_lineA  s    

zTestBasic.test_plot_linec                 C   sP  t  }|jg dt| jddd}|dd |dd |jd d	 |jd 	d	 |jd 
d	 |jd
 d |jd
 	d |jd
 
d |jd d |jd 	d |jd 
d |jd d |jd tjtj  |jd d |jd
 jd
d |jd jd
d |jd
 jdd |jd jdd |S )Nr/   r   r2   r   r6   r   r   r    r<   lrlr   btbzx.xxzVelocity km/s)r?   Tr   )r   r@   rA   r   r   rB   rC   rD   set_ticks_positionset_ticklabel_positionset_axislabel_positionr   rv   rF   kmr   r   rE   r   rH   r   r   r   test_changed_axis_unitsW  s0    
z!TestBasic.test_changed_axis_unitsc                 C   s4  t  }|jg dt| jddd}|dd |dd |jd d	 |jd 	d	 |jd 
d	 |jd
 d |jd
 	d |jd
 
d |jd d |jd 	d |jd 
d |jd jdd |jd
 jdd |jd d |jd
 d |jd d |jd
 d |S )Nr/   r   r2   r   r6   r   r   r   r   r<   r   r   r   r   r   Tr   rM   ra   )r   r@   rA   r   r   rB   rC   rD   r   r   r   r   display_minor_ticksZset_minor_frequencyrH   r   r   r   test_minor_ticksu  s.    
zTestBasic.test_minor_ticksc                 C   s:  t jdd}t|g dd d}|| |dd |dd |jd jdd	d
dd |jd jddddd |jd d |jd d |jd j	ddd |jd j	ddddddd |jd 
d |jd 
d |jd jddddddd  |jd jd!d"dd#d$d% |jd d |jd d |S )&Nr,   r.   )r0   r0   ffffff?r   wcsr6   r   r   ra   r   r:   r<   )r>   r   r   r?      r\   g?r   zX-axis)r>   zY-axisr[      ZregularZnormalZcmtt10)r   r>   weightr+   familytrg   r      ZlightZcmss10)r   r>   r   r   r+   r   r      boldZcmr10)r   r>   r   r   r   )r   r@   r   rA   rB   rC   rD   rE   r   r   r   r   r   rH   r   r   r   test_ticks_labels  s4    
zTestBasic.test_ticks_labelsc                 C   s   t ddddddddd	d
ddddddddd tjdd}t|g dd d}|| |dd |dd |  |d |	d |j
d jd
d |j
d jd
d |W  d    S 1 s0    Y  d S )Nr      r   rM   z0.5r[   r\   r   inTr;   r   ra   r   :r<         ?)zaxes.labelcolorzaxes.labelsizezaxes.labelweightzaxes.linewidthzaxes.facecolorzaxes.edgecolorzxtick.colorzxtick.labelsizezxtick.directionzxtick.minor.visiblezxtick.minor.sizezxtick.major.sizezxtick.major.widthzxtick.major.padz
grid.colorzgrid.linestylezgrid.linewidthz
grid.alphar,   r.   )rk   r0   r   r   r   r6   r   zX labelzY labelr   r   )r   r   r@   r   rA   rB   rC   rb   
set_xlabel
set_ylabelrD   r   rH   r   r   r   test_rcparams  s>    



zTestBasic.test_rcparamsc                 C   s   t  }ddg|j_ddg|j_ddg|j_ddg|j_d|j_d|j_tj	d	d
}|j
g d|d}|dd |dd |jdddd |jd jddd |jd jddd |jd tj |S )NRA---TANDEC--TANZ   F      r<   ICRS     @@rL   r.   r/   rN   grayr   r   r   r   r   rar\   r   r   r>   decr   r   r   ctypecrvalcdeltcrpixZradesysZequinoxr   r@   rA   rB   rC   rb   rD   rE   rv   rF   rG   r   wrI   rJ   r   r   r   test_tick_angles  s     zTestBasic.test_tick_anglesc                 C   s   t  }ddg|j_ddg|j_ddg|j_ddg|j_d|j_d|j_tj	d	d
}|j
g d|d}|dd |dd |jdddd |jd jddd |jd jddd |jd tj |S )Nr   r   r   r   r   r<   r   r   )r-   rM   r.   r/   rN   r   r   r   r   r   r   r\   r   r   r   r   r   r   r   r   r    test_tick_angles_non_square_axes  s     z*TestBasic.test_tick_angles_non_square_axesc                 C   s   t jdd}|jg dt| jdd}|dd |dd |jd d	 |jd
 d	 |jd 	d |jd
 	d |jd j
dd |jd
 j
dd |S )NrL   r.   r:   r:   333333?r   r2   r3   r6   r7   r   Zscalarr<   zx.xxxTr   )r   r@   rA   r   r   rB   rC   rD   set_coord_typer   r   rH   r   r   r   test_set_coord_type  s    
zTestBasic.test_set_coord_typec                 C   s   t | j}tjdd}|jg d|dd}|ddgddgdd	 }|j|  |jd jd
t	j
 d |jd	 jdt	j t	j d |jd jdd |jd	 jdd |jd d |jd	 d |S )NrL   r.   r{   r{   r   r   autor3   r   g     @g     @r<   gMb`?r   r;   r   )r   r   )r   r   r   r@   rA   Zwcs_world2pixrC   rD   rE   rF   r   r   r   r   r   )r   r   rI   rJ   Zlimitsr   r   r   test_ticks_regression&  s    



zTestBasic.test_ticks_regressionZbbox_inchesZtight)r)   Zsavefig_kwargsr*   r+   c                 C   sp   t | j}tjdd}|jg d|dd}|jd d |jd d	 |jd d
 |jd j	d |S )NrL   r.   r   r   r3   r   zLabel 1r<   zLabel 2alwaysF)
r   r   r   r@   rA   rD   r   Zset_axislabel_visibility_ruleZ
ticklabelsZset_visibler   r   rI   rJ   r   r   r   test_axislabels_regression>  s    	
z$TestBasic.test_axislabels_regressionc                 C   s   t dd}ddg|j_ddg|j_tjdd}|jddd|d	}|jt	d
d
gdd |j
d jddd |j
d d |j
d d |j
d d |j
d jtjdd |j
d jtjdd |jddd ||dj |dddksJ |S )Nr   Znaxiszsolar-xzsolar-yr   rL   r.   r<   rN   i   lower)originr   Z	longitude   )Z
coord_wrapZlatitudezs.sF)Zshow_decimal_unitZwhiter   )r   ZlsZnothingi   z513.0 513.0 (world))r   r   r   cunitr   r@   add_subplotrQ   rR   rd   rD   r   r   rv   rF   r   rb   ZsavefigjoinZstrpathZformat_coord)r   tmpdirr   rI   rJ   r   r   r   test_noncelestial_angularP  s     
z#TestBasic.test_noncelestial_angularc           
   	   C   s  t | j}tjdd}|jg d|dd}tdddd	d
d}|| tddddd
|dd}|| tdddd
|dd}|| |j	g dg ddddd |j	dd|dddd
d t
dtj dtj fdtj d d
|dd}|| t
tdtj dtj dtj d d
|dd}tjtd!d": t
td#d$d%d&d'dtj d d
|dd}	W d    n1 s|0    Y  |jd( d) |jd* d) | | k sJ t| |	 sJ t| d( dd+gsJ |S ),NrL   r.   r   r2   r3   rW   rZ   rY   r[   r   )r^   r]   )fffffp@r   333333?Zcyanr   )r^   r]   ro   )r  皙=rk   Zmagenta)r   r      )   r  <   r   r\   )r<   r   r   r   )r   r^   r]   g䠄p@gHK<r   )ro   r   r^   r]   r  r  r   zReceived `center` of representation type <class 'astropy.coordinates.representation.CartesianRepresentation'> will be converted to SphericalRepresentation)matchgsP6g,Eg7m ߿Z	cartesian)r   r   zZrepresentation_typer   Fr<   g     @=)r   r   r   r@   rA   r   re   ru   r   Zscatterr   rF   r   rG   r   pytestZwarnsr
   rD   set_ticklabel_visibleZget_xyr   rR   Zallclose)
r   r  r   rI   rJ   rg   r   Zr1Zr2Zr3r   r   r   test_patches_distortionw  sN    	







&z!TestBasic.test_patches_distortionc                 C   s   t | j}tjdd}|jg d|dd}|dd |dd td	tj	 d
tj	 dtj	 ddd|
dd}|| td	d
ddddd|
dd}|| |jd d |jd d |S )NrL   r.   r   r2   r3   r   i'  i)   ir   r   r   r   r   Zicrs)labelr^   r]   ro   r   r\   z--)r  r^   r]   r   ro   Fr<   )r   r   r   r@   rA   rB   rC   r   rF   r   ru   re   r   rD   r  )r   r  r   rI   rJ   qrg   r   r   r   test_quadrangle  s$    


zTestBasic.test_quadranglec                 C   s.   t | j}tjdd}|jg d|td |S )N)r;   rM   r.   r   )r4   Zframe_class)r   r   r   r@   rA   r   )r   r   rI   r   r   r   test_elliptical_frame  s    
zTestBasic.test_elliptical_framec                 C   sZ   t jdd}|jg dt| jdd}|dd |dd |jd jd	t	j
 d
 |S NrL   r.   )r  r:   r|   r   r2   r3   r6   r   r         @r   r   r@   rA   r   r   rB   rC   rD   rE   rF   r   rH   r   r   r   test_hms_labels  s    
zTestBasic.test_hms_labelsztext.usetexTc                 C   sZ   t jdd}|jg dt| jdd}|dd |dd |jd jd	t	j
 d
 |S r  r  rH   r   r   r   test_latex_labels  s    
zTestBasic.test_latex_labelsc                 C   s  t  }ddg|j_tjdd}|jddd|d}tjdd	d
ddddd |jd d |jd d |jddd|d}tjddd	d
ddddddd
 tjddddddddd |jd d |jd d |jddd|d}|jddd	d
d	dddddd
 |jddddddddd t	  |jd d |jd d |jddd|d}|jd jddddddd |jd 
d |jd jddd |jd d |jd d |S ) NZlonZlatr,   r.   r   r<   rN   r   r   r;   r-   r\   r   )	directionlengthr?   pad	labelsizer   
labelcolorr   FrP   Tr   )
axisr  r  r?   r  r  r   r  bottom
grid_coloroutr   )r  r  r  r   r  leftrightr  rM   r   r   rm   ra   )r  r  rp   ZlabelbottomZlabeltopr  minor)whichr  )r   r   r   r   r@   r   Ztick_paramsrD   rc   rb   r   r   r   r   r   test_tick_params  sP    

zTestBasic.test_tick_paramsN)$r    r!   r"   r  markremote_datampl_image_comparer   rK   rS   parametrizerh   ry   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r%  r   r   r   r   r$   .   s  	#*#;

r$   c                  C   sJ   t dd} dg| j_dg| j_dg| j_dg| j_dg| j_| j  | S )Nr<   r   ZWAVEr   r;   -   )r   r   r   r   r   r   r   setr   r   r   r   wave_wcs_1dC  s    






r,  r%   r&   r(   c                 C   sB   t  }|jddd| d}|g d\}|d |d |S )Nr<   rN   ra   rO   r   rO   ra   zthis is the x-axiszthis is the y-axis)r   r@   r   rf   r   r   r,  rI   rJ   r   r   r   r   test_1d_plot_1d_wcsO  s    

r/  c                 C   s>   t  }|jddd| d}|g d\}|jd d |S )z~
    This test ensures that the format unit is updated and displayed for both
    the axis ticks and default axis labels.
    r<   rN   r-  r   Znm)r   r@   r   rf   rD   rv   r.  r   r   r   test_1d_plot_1d_wcs_format_unit]  s
    r0  c                  C   sN   t dd} ddg| j_dgd | j_dgd | j_dgd | j_| j  | S )Nr   r   zGLON-TANzGLAT-TANr  r   rY   r   r   r   r   r   r   r+  r   r   r   r   spatial_wcs_2dn  s    

r2  c                 C   s   t  }|jddd| dd}|jg dddd\}|jd jd	d |jd jd	d |jd jd	d |jd
 jdd |jd
 jdd |jd
 jdd |S )Nr<   r   r   r4   r   r-  -orm   r   r   r\   r   r   )r   r@   r   rf   rD   rE   r   rb   )r2  rI   rJ   r   r   r   r   test_1d_plot_2d_wcs_correlatedy  s    r7  c                  C   sL   t dd} ddg| j_dgd | j_ddg| j_dgd | j_| j  | S )	zv
    This WCS has an almost linear correlation between the pixel and world axes
    close to the reference pixel.
    r   r   zHPLN-TANzHPLT-TANr  gllf?gllV?r   r1  r   r   r   r   spatial_wcs_2d_small_angle  s    

r8  zslices, bottom_axiszcustom:pos.helioprojective.lonzcustom:pos.helioprojective.latc                 C   sZ   t  }|jddd| | d}|jg dddd\}t   |j| j dgksVJ |S )zG
    Test that a SLLWCS through a coupled 2D WCS plots as line OK.
    r<   rN   r-  r5  rm   r6  r   r   r@   r   rf   ZdrawrD   ZticksZget_visible_axesr8  r   Zbottom_axisrI   rJ   r   r   r   r   $test_1d_plot_1d_sliced_low_level_wcs  s    r;  )r3  Zhpln))r   r   Zhpltc                 C   sX   t  }|jddd| |d}|jg dddd\}t   |j| j dgksTJ |S )a  
    When we plot a 1D slice through spatial axes, we want to put the axis which
    actually changes on the bottom.

    For example an aligned wcs, pixel grid where you plot a lon slice through a
    lat axis, you would end up with no ticks on the bottom as the lon doesn't
    change, and a set of lat ticks on the top because it does but it's the
    correlated axis not the actual one you are plotting against.
    r<   r4  r-  r5  rm   r6  r   r9  r:  r   r   r   +test_1d_plot_put_varying_axis_on_bottom_lon  s    r<  c                  C   s   t jdd} d}dD ]}dD ]}|d7 }tdd}||j_|df|j_d	|j_d
|j_| jdd||d}|	dd |j
d jdtj d |j
d d |j
d d |j
d d |j
d d |j
d d qq| jdddddd | S )N)rP   rP   r.   r   ))zGLON-CARzGLAT-CAR)zHGLN-CARzHGLT-CAR)r   r   r   i  r<   r   r   )g     v@g     f@)r6   r   r   rN   r6   g     |@r   r   r   Fg?gffffff?r0   )Zhspacer!  r"  r  top)r   r@   r   r   r   r   r   r   r   rB   rD   rE   rF   r   r   rc   r  Zset_ticks_visibleZsubplots_adjust)rI   Zicenr   Zcenr   rJ   r   r   r   test_allsky_labels_wrap  s(    
r>  )3Zmatplotlib.linesr   Zmatplotlib.pyplotZpyplotr   r  r   Zmatplotlib.patchesr   r   ZnumpyrR   r%   r   rF   Zastropy.coordinatesr   Z
astropy.ior   Zastropy.tests.image_testsr   Zastropy.utils.datar	   Zastropy.utils.exceptionsr
   Zastropy.visualization.wcsaxesr   Z#astropy.visualization.wcsaxes.framer   Z%astropy.visualization.wcsaxes.patchesr   r   Zastropy.wcsr   r   r$   Zfixturer,  r&  r'  r(  r/  r0  r2  r7  r8  r)  Zs_r;  r<  r>  r   r   r   r   <module>   s         



