U
    e»{j¶E  ã                   @   sj  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d„ ƒZ(e#d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d�Z0dddge0j*_+dddge0j*_,dddge0j*_-dddge0j*_.dddge0j*_/ej'dd „ ƒZ1ej'd!d"„ ƒZ2d#d$„ Z3d%d&„ Z4d'd(„ Z5d)d*„ Z6d+d,„ Z7d-d.„ Z8d/d0„ Z9d1d2„ Z:d3d4„ Z;ej'd5d6„ ƒZ<ej= >d7ej?d8 d d ddgd9dfej?d8 d dd dgd:dfej?d8 dd d dgd;dfej?d8 ddd d gd<dfej?dd…dd…d dd…f d ddgd=dfej?dd…dd…d dd…f dd dgd>dfej?dd…dd…d dd…f ddd gd>dfej?dd…d dd…dd…f ddd gd<dfg¡d?d@„ ƒZ@ej= >dAej?dd…dd…d dd…f g¡dBdC„ ƒZAG dDdE„ dEe%ƒZBdFdG„ ZCdHdI„ ZDedJdK„ ƒZEdS )Lé    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                   c   s   d V  t  d¡ d S )NÚall)ÚpltÚclose© r   r   ún/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/visualization/wcsaxes/tests/test_wcsapi.pyÚ	plt_close   s    r   é   ©ZnaxisÚxÚyÚkmg     4ƒ@g     ÄŠ@g      @ç        é   ÚziM  é   ç      ð?c                  C   s   t dƒ} ttjj| dd�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&   r   r   r   Úwcs_4d1   s    ÿr*   c                  C   s   t dƒ} tj | ¡}t|d�S )Nzdata/cube_headerr&   )r   r   r(   Zfromtextfiler   )Zcube_headerr'   r   r   r   Úcube_wcsQ   s    r+   c                  C   sÊ   t dd�} ddg| j_ddg| j_ddg| j_dd	g| j_t dd�}d
dg|j_ddg|j_ddg|j_ddg|j_t| ƒ}t|ƒ}|| || ¡  ksœt‚|| | ¡ | ks´t‚|| t	ƒ ksÆt‚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      3ÀzRA---SINzDEC--SINg     `m@g33333³7@N)
r   ÚwcsÚctypeÚcrpixÚcdeltÚcrvalr   ÚinvertedÚAssertionErrorr   )Úw1Zw2Út1Út2r   r   r   Útest_shorthand_inversionX   s    

r:   c                  C   sB   t  d¡} ttƒtƒ  }| | ¡}| ¡  |¡}t j | |¡ d S )N©é
   r   )	ÚnpÚonesr   ÚWCS2Dr   Ú	transformr5   ÚtestingÚassert_allclose©Úworldr7   ZpixelZworld_2r   r   r   Útest_2du   s
    

rE   c                  C   s’   t  d¡} ttd d …dd d …f ƒtƒ  }| | ¡}| ¡  |¡}t j | d d …df |d d …df ¡ t j | d d …df |d d …df ¡ d S )Nr;   r   é   )	r=   r>   r   ÚWCS3Dr   r@   r5   rA   rB   rC   r   r   r   Útest_3d   s    
 
&rH   c                 C   s¬  t | tdd�\}}|d }|d }|d }|dddgks<t‚|dddgksNt‚|dddgks`t‚td	d
�}ddg|j_dgd	 |j_dgd	 |j_dgd	 |j_ddg|j_	|j 
¡  t |tƒ\}}|d ddgksØt‚|d tjtjgksðt‚|d d d gk�st‚|d ddgk�st‚|d ddgk�s2t‚td	d
�}ddg|j_dgd	 |j_dgd	 |j_dgd	 |j_|j 
¡  t |tƒ\}}|d ddgk�s t‚|d tjtjgk�sºt‚|d dd gk�sÐt‚t |tdd�\}}|d }|d }|d }|ddgk�st‚|ddgk�st‚|d d gk�s0t‚td	d
�}d!d"g|j_dgd	 |j_dgd	 |j_dgd	 |j_|j 
¡  t |tƒ\}}|d ddgk�sžt‚|d tjtjgk�s¸t‚|d dd gk�sÎt‚td	d
�}d#d$g|j_dgd	 |j_dgd	 |j_dgd	 |j_|j 
¡  t |tƒ\}}|d ddgk�s<t‚|d tjtjgk�sVt‚|d d%d gk�slt‚td	d
�}d&d'g|j_dgd	 |j_dgd	 |j_dgd	 |j_|j 
¡  t |tƒ\}}|d ddgk�sÚt‚|d tjtjgk�sôt‚|d d d gk�s
t‚td	d
�}d(d(g|j_dgd	 |j_dgd	 |j_dgd	 |j_|j 
¡  t |tƒ\}}|d d)d)gk�sxt‚|d tjtjgk�s’t‚|d d d gk�s¨t‚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-tanZglonrU   )r]   zglat-tanZglatzHPLN-TANzHPLT-TANç     €f@)r   r   ÚbltrzHGLN-TANzHGLT-TANzCRLN-TANzCRLT-TANg     €v@r,   r-   ZspamÚscalar)r   r   r6   r   r0   r1   r2   r3   r4   ÚcnameÚsetÚuÚdegÚarcsecÚ	hourangleÚone)r+   Ú_Ú
coord_metaÚaxislabel_positionÚticklabel_positionÚticks_positionr0   r   r   r   Útest_coord_type_from_ctypeŠ   s°      ÿ


þ

  ÿ








rn   c                  C   s†   t dd�} dg| j_dg| j_dg| j_dg| j_| j ¡  t| tƒ\}}|d dgks\t	‚|d	 t
jgkspt	‚|d
 d gks‚t	‚d S )NrF   r   ÚWAVEr.   r/   rT   rW   ra   rZ   r[   )r   r0   r1   r2   r3   r4   rc   r   r   r6   rd   Úm©r0   ri   rj   r   r   r   Útest_coord_type_1d_1d_wcsú   s    





rr   c                  C   s´   t dd�} ddg| j_dgd | j_dgd | j_dgd | j_| j ¡  t| tdd	�\}}|d
 ddgkspt	‚|d t
jt
jgksˆt	‚|d d d gksœt	‚|d ddgks°t	‚d S )Nr   r   rR   rS   r.   r/   rT   ©r   r   rJ   rW   rX   rY   rZ   r[   ÚvisibleT)r   r0   r1   r2   r3   r4   rc   r   r   r6   rd   re   rq   r   r   r   Ú$test_coord_type_1d_2d_wcs_correlated	  s    

  ÿ
ru   c                  C   sÀ   t dd�} ddg| j_dgd | j_dgd | j_dgd | j_dd	g| j_| j ¡  t| t	d
d�\}}|d ddgks|t
‚|d tjtjgks”t
‚|d d d gks¨t
‚|d ddgks¼t
‚d S )Nr   r   ro   ÚUTCr.   r/   rT   ÚnmÚsrs   rJ   rW   ra   rZ   r[   rt   TF)r   r0   r1   r2   r3   r4   Úcunitrc   r   r   r6   rd   rp   rx   rq   r   r   r   Ú&test_coord_type_1d_2d_wcs_uncorrelated  s     

  ÿ
rz   c                 C   sj   t | tdd�\}}|d }|d }|d }|ddddgks>t‚|ddddgksRt‚|ddd	d	gksft‚d S )
N)r   r   r   r   rJ   rL   rM   rN   rV   rQ   rO   r`   )r   r   r6   ©r*   ri   rj   rk   rl   rm   r   r   r   Útest_coord_meta_4d.  s      ÿ
r|   c                 C   sj   t | tdd�\}}|d }|d }|d }|ddddgks>t‚|ddddgksRt‚|ddddgksft‚d S )	N)r   r   r   r   rJ   rL   rM   rN   rV   ÚtrQ   )r   r   r6   r{   r   r   r   Útest_coord_meta_4d_line_plot<  s      ÿ
r~   c                 C   s
   t | |ƒS ©N)r   )r*   Ú	wcs_slicer   r   r   Úsub_wcsK  s    r�   )r€   Úwcsaxes_slicesÚ	world_mapÚndim.)r   r    )rF   r   r    )r   r   r    )r   rF   )rF   r   )r   rF   r   c                 C   s.   t | |ƒ\}}}|j|kst‚||ks*t‚d S r   )r   Úworld_n_dimr6   )r�   r€   r‚   rƒ   r„   Ztransform_wcsri   Zout_world_mapr   r   r   Útest_apply_slicesP  s    r†   r€   c              
   C   sz  dddg}|t | |ƒfD �]Z}t ¡ �& tjdtd� t|t|d�\}}W 5 Q R X tdd„ | ¡ D ƒƒslt	‚|d	 d
ddgks‚t	‚|d dddgks˜t	‚|d d d dgks®t	‚|d t
 d¡t
 d¡t
 d¡gksÖt	‚|d dddgksìt	‚|d t
 d¡t
 d¡t
 d¡gk�st	‚|d dddgk�s.t	‚|d dddgk�sFt	‚|d  dd!d!gk�s^t	‚t ¡  tj||d"� qd S )#Nr   r   r   Úignore)ÚcategoryrJ   c                 s   s   | ]}t |ƒd kV  qdS )r    N)Úlen)Ú.0r   r   r   r   Ú	<genexpr>p  s     z'test_sliced_ND_input.<locals>.<genexpr>r^   Útime)zcustom:pos.helioprojective.latzhplt-tanZhplt)zcustom:pos.helioprojective.lonzhpln-tanZhplnrW   ra   rY   rX   r[   r_   ÚunitÚminre   rt   FTrZ   rf   rL   rV   rQ   rO   rM   rN   r`   )Ú
projectionrK   )r   ÚwarningsÚcatch_warningsÚfilterwarningsÚFutureWarningr   r   r   Úvaluesr6   rd   ÚUnitr   ZclfZsubplot)r*   r�   r€   r   Zslices_wcsaxesri   rj   r   r   r   Útest_sliced_ND_inpute  s:    

  ÿý
(ýr–   c                   @   st   e Zd ZdZedd„ ƒZedd„ ƒZedd„ ƒZedd	„ ƒZed
d„ ƒZ	dd„ Z
dd„ Zedd„ ƒZedd„ ƒZdS )ÚLowLevelWCS5Dr   c                 C   s   | j S r   )Ú	pixel_dim©Úselfr   r   r   Úpixel_n_dimŒ  s    zLowLevelWCS5D.pixel_n_dimc                 C   s   dS )Né   r   r™   r   r   r   r…   �  s    zLowLevelWCS5D.world_n_dimc                 C   s   dddddgS )Núem.freqrŒ   ú	pos.eq.raú
pos.eq.decúphys.polarization.stokesr   r™   r   r   r   Úworld_axis_physical_types”  s    ûz'LowLevelWCS5D.world_axis_physical_typesc                 C   s   dddddgS )NÚHzÚdayre   rV   r   r™   r   r   r   Úworld_axis_unitsž  s    zLowLevelWCS5D.world_axis_unitsc                 C   s   dddddgS )NÚ	FrequencyrV   ÚRAÚDECr   r™   r   r   r   Úworld_axis_names¢  s    zLowLevelWCS5D.world_axis_namesc                 G   s2   t |ƒd d d… }dd„ t|ddddd	gƒD ƒS )
Nr    éÿÿÿÿc                 S   s   g | ]\}}t  |¡| ‘qS r   ©r=   Zasarray)rŠ   ZpixÚscaler   r   r   Ú
<listcomp>¨  s   ÿz7LowLevelWCS5D.pixel_to_world_values.<locals>.<listcomp>r<   çš™™™™™É?gš™™™™™Ù?gö(\�ÂõØ?r   )ÚlistÚzip)rš   Zpixel_arraysr   r   r   Úpixel_to_world_values¦  s    þz#LowLevelWCS5D.pixel_to_world_valuesc                 G   s$   |d d… }dd„ t |ddgƒD ƒS )Nr   c                 S   s   g | ]\}}t  |¡| ‘qS r   rª   )rŠ   rD   r«   r   r   r   r¬   ¯  s    z7LowLevelWCS5D.world_to_pixel_values.<locals>.<listcomp>r<   r­   )r¯   )rš   Zworld_arraysr   r   r   Úworld_to_pixel_values­  s    ÿz#LowLevelWCS5D.world_to_pixel_valuesc                 C   s   dddddgS )N)Úfreqr   Úvalue)rŒ   r   Úmjd)Ú	celestialr   zspherical.lon.degree)rµ   rF   zspherical.lat.degree)Ústokesr   r³   r   r™   r   r   r   Úworld_axis_object_components³  s    ûz*LowLevelWCS5D.world_axis_object_componentsc                 C   s6   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�   re   Úformatr´   r¢   rh   )rµ   rŒ   r²   r¶   )r   r	   r
   r™   r   r   r   Úworld_axis_object_classes½  s
    üz'LowLevelWCS5D.world_axis_object_classesN)Ú__name__Ú
__module__Ú__qualname__r˜   Úpropertyr›   r…   r¡   r¤   r¨   r°   r±   r·   r¹   r   r   r   r   r—   ‰  s"   


	


	r—   c                  C   sÚ   ddg} t jj| Ž }ddddddddd	d
d
d
ddœ}t|ƒ}t ¡ }|jddddg|d�}|j|dd� |jd }|jd }|j	 
¡  t j |jjd t  ddddd
g¡¡ t j |jjd t  dddd
dddg¡¡ d S )Né´   ih  r   g     �f@g      V@r#   re   zCRLN-CARzCRLT-CARr   g     €V@)ZwcsaxesZcrpix1Zcrpix2Zcdelt1Zcdelt2Zcunit1Zcunit2Zctype1Zctype2Zcrval1Zcrval2ZlonpoleZlatpoleçš™™™™™¹?çš™™™™™é?©r�   Úlower)Úoriginr   rF   rQ   r_   g     àp@rO   g     €VÀg      NÀg      >Àg      >@g      N@)r=   ÚrandomZrandr   r   ÚfigureÚadd_axesZimshowZcoordsZcanvasZdrawrA   Zassert_equalZticksrD   Úarray)ÚshapeÚdatar'   r0   ÚfigÚaxZlonZlatr   r   r   Útest_edge_axesÇ  s>    ó



 ÿ
 ÿrÌ   c                  C   sl  t ƒ } d| _t| tdddddgd�\}}|d ddd	d
dgksBt‚|d dddddgks\t‚|d d d d d d gksvt‚|d t d¡t d¡t d¡t d¡tjgksªt‚|d dddddgksÄt‚|d t d¡t d¡t d¡t d¡tjgksøt‚|d dddddgk�st‚|d dddddgk�s0t‚|d  dddddgk�sLt‚|d! d"dd#d$dgk�sht‚d S )%Nrœ   r   r   r   rJ   r^   )r�   r¥   rŒ   )rž   r¦   )rŸ   r§   r    rW   ra   rX   rY   r[   r�   r¢   Údre   rt   TrZ   rg   rL   rQ   rO   r}   rP   rV   rM   rN   r\   r¥   r¦   r§   )r—   r˜   r   r   r6   rd   r•   rh   rq   r   r   r   Útest_coord_meta_wcsapië  sR      ÿ
û
û
û
ûrÎ   c                 C   s@   t jdd�}|jddddgtƒ d�}| dd¡ | dd¡ |S )N)é   rÏ   )Zfigsizer¿   rÀ   rÁ   g      à¿g     �b@)r   rÅ   rÆ   r—   Zset_xlimZset_ylim)r   rÊ   rË   r   r   r   Útest_wcsapi_5d_with_names  s
    rÐ   )Fr�   Útextwrapr   Zmatplotlib.pyplotZpyplotr   Únumpyr=   ZpytestZmatplotlib.transformsr   r   Zastropyr   rd   Zastropy.coordinatesr   Z
astropy.ior   Zastropy.tests.figuresr   Zastropy.timer	   Zastropy.unitsr
   Zastropy.utils.datar   Z#astropy.visualization.wcsaxes.framer   r   Z$astropy.visualization.wcsaxes.wcsapir   r   r   Zastropy.wcsr   Zastropy.wcs.wcsapir   r   Zfixturer   r?   r0   r1   ry   r2   r3   r4   rG   r*   r+   r:   rE   rH   rn   rr   ru   rz   r|   r~   r�   ÚmarkZparametrizeZs_r†   r–   r—   rÌ   rÎ   rÐ   r   r   r   r   Ú<module>   s‚   





p
****øþ
(
#>$+