U
    e»{j¹L  ã                   @   sZ  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d„ Z-dd„ Z.dd„ Z/ej0j1ddd�Z2e	j3 4dddg¡dd„ ƒZ5d d!„ Z6d"d#„ Z7d$d%„ Z8d&d'„ Z9ej0j1d(dd�Z:d)d*„ Z;d+d,„ Z<d-d.„ Z=d/d0„ Z>d1d2„ Z?d3d4„ Z@d5d6„ ZAd7d8„ ZBd9d:„ ZCd;d<„ ZDd= E¡ ZFd> E¡ ZGd?d@„ ZHe	jIdAdB„ ƒZJdCdD„ ZKe	j3jLe*dEdF�dGdH„ ƒZMe	j3 4dIeeg¡dJdK„ ƒZNe	j3 4dLdMdNg¡dOdP„ ƒZOdQdR„ ZPdSdT„ ZQdUdV„ ZRdS )Wé    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.6.99c                 C   s   t  d¡ d S )NÚall)ÚpltÚclose)Úfunction© r   úl/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/visualization/wcsaxes/tests/test_misc.pyÚteardown_function&   s    r   c                 C   s0   t jddd� t jdd�}t|ddddgƒ d S )NZaxesT)Úgrid©é   r   ©Zfigsizeçš™™™™™¹?çš™™™™™é?)r   ÚrcÚfigurer	   )Úignore_matplotlibrcÚfigr   r   r   Útest_grid_regression*   s    r#   c                 C   sÂ   t jdd�}t|ddddgƒ}| |¡ | dd¡dks<t‚|jd  d¡dksTt‚|jd  d¡dkslt‚| |d	 ¡ | dd¡d
ksŽt‚|jd  d¡dks¦t‚|jd  d¡dks¾t‚d S )Nr   r   r   r   é
   Ú r   é   Znothingz10.0 10.0 (world)z10.0)r   r    r	   Úadd_axesZformat_coordÚAssertionErrorÚcoordsÚsavefig)r!   Útmp_pathr"   Úaxr   r   r   Útest_format_coord_regression2   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
 ¡ �L t
jddd� t
jdd	d� t
jdd
d� t
jddd� | |d ¡ W 5 Q R X d S )Nr&   ©Ú
projection)éd   éÈ   Ú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+   r0   r"   r,   r   r   r   Útest_no_numpy_warningsV   s,    
 ÿ ÿ ÿ ÿrF   c              	   C   s`   t jdddttƒd�}tjtdd�� | d¡ W 5 Q R X tjtdd�� tdƒ W 5 Q R X d S )Nr&   r3   zFrame banana not found©ÚmatchÚbananazUnknown frame: banana)	r   Úsubplotr   r?   ÚpytestÚraisesÚ
ValueErrorZget_coords_overlayr   ©r!   r,   r   r   r   Útest_invalid_frame_overlays   s
    rO   c              	   C   sš   t dƒ}tj |¡}tjdd�}|jddddgt|ƒdd�}| dd	¡ | 	dd	¡ t
d
tj dtj ƒ}t t¡� |j|d| d¡d� W 5 Q R X d S )Núdata/2MASS_k_header©é   rR   r   ç333333Ã?r   Úequal©r4   Zaspectç      à¿ç     „†@çS õÏ*|v@çØS£>f3Ñ?ÚoÚgalactic©Ú	transform)r   r   ÚHeaderÚfromtextfiler   r    r'   r   Úset_xlimÚset_ylimr   ÚuÚdegrK   rL   Ú	TypeErrorZ
plot_coordÚget_transform©r!   ZtwoMASS_k_headerr"   r,   Úcr   r   r   Útest_plot_coord_transform}   s    
  ÿrh   c              	   C   sš   t dƒ}tj |¡}tjdd�}|jddddgt|ƒdd�}| dd	¡ | 	dd	¡ t
d
tj dtj ƒ}t t¡� |j|d| d¡d� W 5 Q R X d S )NrP   rQ   r   rS   r   rT   rU   rV   rW   rX   rY   rZ   r[   )Úmarkerr]   )r   r   r^   r_   r   r    r'   r   r`   ra   r   rb   rc   rK   rL   rd   Zscatter_coordre   rf   r   r   r   Útest_scatter_coord_transformŒ   s    
  ÿrj   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sNt	‚|jd
 j 
d¡dksht	‚|jd
 j ¡ dks€t	‚|jd j ¡ dks˜t	‚|jd j 
d¡dks²t	‚|jd j ¡ d	ksÊt	‚| ¡ dksÚt	‚| ¡ dksêt	‚d S )Nr&   r3   zTest x labelé   Úred)Zlabelpadr9   zTest y labelr   Úgreenr   ÚbÚl)r   rJ   r   r?   Ú
set_xlabelÚ
set_ylabelr)   Z
axislabelsZget_textr(   Z
get_minpadÚ	get_colorÚ
get_xlabelÚ
get_ylabelrN   r   r   r   Útest_set_label_properties›   s    ru   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�}dddg|j_dddg|j_dd	d
g|j_dddg|j_dddg|j_t ¡ �6 tj	ddd� t
jddd|dd� t
 |d ¡ W 5 Q R X t tƒ}t ¡ �> tj	ddd� t
 ¡  t
jddd|dd� t
 |d ¡ W 5 Q R X d S )Nr   ©ZnaxisÚxÚyÚzrc   úkm/sç     4ƒ@ç     ÄŠ@éM  ç      @é   ç        ç      ð?r:   z.*PY_SSIZE_T_CLEAN.*r;   r&   ©rw   rx   r&   ©r4   Zslicesr=   )rw   rx   rk   )r   ÚwcsÚctypeÚcunitÚcrpixÚcdeltÚcrvalrC   rD   rE   r   rJ   r*   Ú
GAL_HEADERÚclf)r!   r+   Úwcs3dr   r   r   Útest_slicing_warningsÊ   s     


r�   c                 C   s4   t jtƒ d� t  d¡ t  d¡ t  | d ¡ d S )Nr3   zGalactic LongitudezGalactic Latituder=   )r   rJ   r   ZxlabelZylabelr*   )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|ddddg||d	�}| |¡ |jd
d� | 	| d ¡ 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   r]   û   s    zDtest_grid_type_contours_transform.<locals>.CustomTransform.transformN)Ú__name__Ú
__module__Ú__qualname__r]   r   r   r   r   ÚCustomTransform÷   s   r”   )Úscalarr•   )NN©rw   rx   )ÚtypeÚunitÚwrapÚnamer   r   )r]   Ú
coord_metar2   ©r0   r=   )
r   rb   ÚmÚsr   r    r	   r'   r   r*   )r+   r”   r]   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.t‚|  ¡ dks>t‚d S ©Nr3   )rk   rk   )rV   ç      ø?©	r   rJ   r   r@   rA   ZonesZget_xlimr(   Zget_ylim©r,   r   r   r   Útest_plt_imshow_origin  s    r¤   c                  C   sB   t jtƒ d�} |  t d¡¡ |  ¡ dks.t‚|  ¡ dks>t‚d S r    r¢   r£   r   r   r   Útest_ax_imshow_origin  s    r¥   c                 C   s‚   | d }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   rV   r¡   r   )r�   r2   rœ   )r   rJ   r   r`   ra   r)   Ú	set_ticksrb   Úoner   r*   )r+   Úfilenamer,   r   r   r   Útest_grid_contour_large_spacing!  s    
r©   c                  C   sˆ   t  ¡ } t| ddddgƒ}|  |¡ |jt d¡ dd¡| d¡d�}t	|t
ƒsTt‚|jt d¡ dd¡| d¡d�}t	|t
ƒs„t‚d S )Nr   r   é   é   Úworldr\   )r   r    r	   r'   ÚcontourrA   ZarangeZreshapere   Ú
isinstancer   r(   Zcontourf)r"   r,   Zcsetr   r   r   Útest_contour_return4  s    
""r¯   c               	   C   sl   t  ¡ } t| ddddgƒ}|  |¡ tr8tjtdd�}ntƒ }|�  |j	t
 d¡| d¡d� W 5 Q R X d S )Nr   r   z2No contour levels were found within the data rangerG   )r«   r«   r¬   r\   )r   r    r	   r'   ÚMATPLOTLIB_LT_3_7rK   ZwarnsÚUserWarningr   r­   rA   rB   re   )r"   r,   Úctxr   r   r   Útest_contour_emptyC  s    
 ÿr³   c                 C   st   t dd�}dddg|j_dddg|j_dd	d
g|j_dddg|j_dddg|j_tjddd|dd�}|j	\}}}d S )Nr   rv   rw   rx   ry   rc   rz   r{   r|   r}   r~   r   r€   r�   r&   r‚   rƒ   )
r   r„   r…   r†   r‡   rˆ   r‰   r   rJ   r)   )r!   rŒ   r,   rw   rx   ry   r   r   r   Útest_iterate_coordsV  s    
r´   c              	   C   sâ  t dd�}dddg|j_tjddd|dd� tjtd	d
�� tjddd|d� W 5 Q R X tjtdd
�� tjddd|dd� W 5 Q R X t dd�}ddg|j_t ¡  tjddd|d�}|j	t
ksÄt‚t ¡  tjddd|dd�}|j	t
ksît‚t ¡  tjddd|dd�}|j	t
k�st‚t ¡  tjddd|ddgd�}|j	t
k�sJt‚t ¡  tjddd|dd�}|j	tk�svt‚t dd�}dg|j_t ¡  tjddd|d�}|j	tk�s´t‚t t¡� tjddd|dd� W 5 Q R X d S )Nr   rv   rw   rx   ry   r&   r‚   rƒ   z?WCS has more than 2 pixel dimensions, so 'slices' should be setrG   r3   zO'slices' should have as many elements as WCS has pixel dimensions .should be 3.)rw   rx   r&   rk   rk   r–   )rx   rw   )r&   rw   )r&   rx   )r   r„   r…   r   rJ   rK   rL   rM   r‹   Úframe_classr   r(   r   )r!   rŒ   Zwcs2dr,   Zwcs1dr   r   r   Útest_invalid_slices_errorse  sJ    
þý


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.t‚t ¡  tjddd|dd�}t|jƒt	ks\t‚d S )Nr&   )r&   rw   rx   rƒ   r‚   )
r   rŠ   r   rJ   Úreprr)   ÚEXPECTED_REPR_1r(   r‹   Ú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 )Nrk   rv   ZFREQZTIME)r   r„   r…   Úset)r„   r   r   r   Útime_spectral_wcs_2dÇ  s    

r¼   c                 C   s   t j| d� d S )Nr3   )r   rJ   )r¼   r   r   r   Útest_time_wcsÏ  s    r½   zTeX is unavailable)Úreasonc                 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usetexrk   éh  é´   ç     �f@ç      V@ç     €f@r€   éþÿÿÿzRA---MOLzDEC--MOLZICRS)ÚNAXISÚNAXIS1ÚNAXIS2ÚCRPIX1ÚCRPIX2ÚCRVAL1ÚCRVAL2ÚCDELT1ÚCDELT2ÚCTYPE1ÚCTYPE2ZRADESYS©rµ   r4   ©Z
subplot_kwrV   rÇ   g      à?rÈ   r   )Zexclude_overlappingr&   é-   )Úspacingé   úplot.pngN)r   r   rA   ÚsqrtÚpir   ÚsubplotsÚdictr
   r`   ra   r)   Zset_ticklabelr¦   rb   rc   r   r*   )r!   r+   Úheaderr„   r"   r,   r   r   r   Útest_simplify_labels_usetexÖ  s0    ô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s”t
‚| ¡ |d ks¨t
‚tdƒD ]}|j|  ¡ || ks°t
‚q°dS )zªTest 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Declinationrk   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)rA   r×   rØ   r   r   rÙ   rÚ   rp   rq   rs   r(   rt   Úranger)   Zget_axislabel)r!   rµ   ÚlabelsrÛ   r„   r"   r,   Úir   r   r   Útest_set_labels_with_coords÷  s*    õrà   Úatolgš™™™™™É?g:Œ0âŽyE>c                 C   s|   ddddg}t  ¡ }t|ddddgƒ}| |¡ |j ¡  |jj}| |¡}| dk rbtsbt	 
d¡ tj|j|| d�sxt‚d S )	NgrÇ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_261rK   ZxfailrA   ÚallcloseÚextentsr(   )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   rA   Zs_r   rJ   re   r   )r„   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   Úblackr2   r8   rÖ   )r   r    r>   r   r   r*   )r+   r"   r,   r   r   r   Ú!test_multiple_draws_grid_contours5  s
    rê   c                  C   sŽ   t tƒ} d| jjd< tjddd| d�}| dd¡ | dd¡ t 	|j
 ¡ t ddg¡¡s^t‚| dd¡ t 	|j
 ¡ t d	dg¡¡sŠt‚d S )
Nr   r&   r3   i,  iô  i¼  )gb“cAgá^Àg—»¦_ÌŸ^@)gNLîFÀgÝyQƒVgF@)gW8À8j`ÀrÄ   )r   r?   r„   r‰   r   rJ   ra   r`   rA   rä   r)   Zget_coord_rangeÚarrayr(   )r„   r,   r   r   r   Ú#test_get_coord_range_nan_regression=  s(    þÿþÿþrì   )SrC   Ú
contextlibr   Z
matplotlibZmatplotlib.pyplotZpyplotr   ÚnumpyrA   rK   Zmatplotlib.contourr   Zpackaging.versionr   Zastropyr   rb   Zastropy.coordinatesr   Z
astropy.ior   Zastropy.utils.datar   Z"astropy.visualization.wcsaxes.corer	   Z#astropy.visualization.wcsaxes.framer
   r   r   Z(astropy.visualization.wcsaxes.transformsr   Z#astropy.visualization.wcsaxes.utilsr   Zastropy.wcsr   Zastropy.wcs.wcsapir   r   Zft2fontZ__freetype_version__Z
ft_versionrã   ZTEX_UNAVAILABLEÚ__version__r°   r   r#   r-   r^   Ú
fromstringr?   ÚmarkZparametrizerF   rO   rh   rj   ru   rŠ   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   r   Ú<module>   s~   ï

ê


7

 


