U
    e»{j¹©  ã                	   @   sê  d dl 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mZmZmZ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 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.m/Z/ d dl0m1Z1m2Z2 e,dd�Z3dge3j4_5dd„ Z6dZ7e  8¡ �$ e  9de¡ e,ej:e7dd�ƒZ;W 5 Q R X dd„ Z<dZ=e  8¡ �$ e  9de¡ e,ej:e=dd�ƒZ>W 5 Q R X dd„ Z?e= @¡ d d  ZAe  8¡ �$ e  9de¡ e,ej:eAdd�ƒZBW 5 Q R X d!d"„ ZCd#ZDe  8¡ �( e  9dee-f¡ e,ej:eDdd�ƒZEW 5 Q R X d$d%„ ZFd&ZGe
e*ƒe
d'ƒk�rReGd(7 ZGejHd)d*„ ƒZId+d,„ ZJejK Ld-d.¡d/d0„ ƒZMd1d2„ ZNd3d4„ ZOd5d6„ ZPejKjQejK Ld-d7¡d8d9„ ƒƒZRd:d;„ ZSd<d=„ ZTejHd>d?„ ƒZUd@dA„ ZVdBdC„ ZWdDdE„ ZXdFdG„ ZYdHdI„ ZZdJdK„ Z[dLdM„ Z\dNdO„ Z]dPdQ„ Z^dRdS„ Z_dTdU„ Z`dVZaejHdWdX„ ƒZbdYdZ„ Zcd[ZdejHd\d]„ ƒZed^d_„ ZfejK Ld`edadbdcdddegdfdggƒ¡dhdi„ ƒZgdjdk„ ZhdlZiejHdmdn„ ƒZjejK Ldoedadbdcdddegdfdggƒ¡dpdq„ ƒZkdrZlejHdsdt„ ƒZmdudv„ ZndS )wé    N)Úproduct)Úassert_allcloseÚassert_equal)ÚVersion)Úunits)ÚFK5ÚICRSÚITRSÚEarthLocationÚGalacticÚSkyCoordÚSpectralCoord)ÚHeader)ÚVerifyWarning)Úassert_quantity_allclose)ÚTime)ÚQuantity)ÚUnitsWarning)Úiers)Úget_pkg_data_filename)ÚAstropyUserWarning)Ú__version__)ÚWCSÚFITSFixedWarningÚNoConvergenceÚSip)ÚVELOCITY_FRAMESÚcustom_ctype_to_ucd_mappingé   ©Únaxisc                  C   sB  t } | jdkst‚| jdks t‚| jd ks.t‚| jd ks<t‚| jd gksLt‚| jdgks\t‚| jdgkslt‚| j	dgks|t‚t
| jdƒ | jdgks˜t‚| jd d tks®t‚| jd d dksÄt‚| jd d d	 tjksàt‚t|  d
¡d
ƒ t|  d
¡d
ƒ t |  d
¡¡dk�st‚t |  d
¡¡dk�s4t‚t|  d
¡d
ƒ t
|  d
¡dƒ t |  d
¡¡dk�snt‚t |  d
¡¡dk�sˆt‚|  d
¡}t|d
tj ƒ t |¡dk�s¶t‚|  d
¡}t|d
tj ƒ t |¡dk�sät‚dtj }|  |¡}t|dƒ t |¡dk�st‚|  |¡}t
|dƒ t |¡dk�s>t‚d S )Nr   Ú T)Úworldr   Úvaluer"   r   © é   Úunité   )r'   é   g      .@)Ú	WCS_EMPTYÚpixel_n_dimÚAssertionErrorÚworld_n_dimÚarray_shapeÚpixel_shapeÚworld_axis_physical_typesÚworld_axis_unitsÚpixel_axis_namesÚworld_axis_namesr   Úaxis_correlation_matrixÚworld_axis_object_componentsÚworld_axis_object_classesr   ÚuÚoner   Úpixel_to_world_valuesÚarray_index_to_world_valuesÚnpÚndimÚworld_to_pixel_valuesÚworld_to_array_index_valuesÚpixel_to_worldr   Úarray_index_to_worldÚworld_to_pixelÚworld_to_array_index)ÚwcsÚcoordÚxÚir$   r$   úd/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/wcs/wcsapi/tests/test_fitswcs.pyÚ
test_empty-   sF    






rG   z®
WCSAXES = 2
CTYPE1  = RA---TAN
CTYPE2  = DEC--TAN
CRVAL1  = 10
CRVAL2  = 20
CRPIX1  = 30
CRPIX2  = 40
CDELT1  = -0.1
CDELT2  =  0.1
CROTA2  = 0.
CUNIT1  = deg
CUNIT2  = deg
ÚignoreÚ
©Úsepc            	      C   sò  t } | jdkst‚| jdks t‚| jd ks.t‚| jd ks<t‚| jddgksNt‚| jddgks`t‚| jddgksrt‚| j	ddgks„t‚t
| jdƒ | jddgks¢t‚| jd	 d
 tks¸t‚| jd	 d dksÎt‚t| jd	 d d tƒsêt‚| jd	 d d tjk�st‚t|  dd¡dƒ t|  dd¡dƒ t|  dd¡dƒ t
|  dd¡dƒ |  dd¡}t|tƒ�slt‚t|jtƒ�s~t‚t|jjdƒ t|jjdƒ |  dd¡}t|tƒ�s¶t‚t|jtƒ�sÈt‚t|jjdƒ t|jjdƒ tddddd�}|  |¡\}}t|dƒ t|dƒ |  |¡\}}t
|dƒ t
|dƒ |j}|  |¡\}}t|dƒ t|dƒ |  |¡\}}t
|dƒ t
|dƒ t  !d¡ "d¡}tddddd�}|  |¡}t
|| dƒ tddgddgddd�}|  |¡}t
|| ddgƒ d S ) Nr%   ú	pos.eq.raú
pos.eq.decÚdegr!   T©Ú	celestialr   zspherical.lon.degree©rP   r   zspherical.lat.degreerP   r   r   r$   Úframer&   r'   é'   )é
   é   rT   rU   )ç      =@ç     €C@)rS   r'   Zicrs©r&   rR   rV   rW   i  )é<   rY   iA	  é   é   iÞ  )#ÚWCS_SIMPLE_CELESTIALr*   r+   r,   r-   r.   r/   r0   r1   r2   r   r3   r4   r5   r   Ú
isinstancer   r6   rN   r   r8   r9   r<   r=   r>   rR   ÚraÚdecr?   r@   rA   Úgalacticr:   ÚarangeZreshape)	rB   rC   rD   ÚyrE   ÚjZcoord_galacticÚdataÚindexr$   r$   rF   Útest_simple_celestial|   sj    þ










rf   a!  
WCSAXES = 3
CTYPE1  = GLAT-CAR
CTYPE2  = FREQ
CTYPE3  = GLON-CAR
CNAME1  = Latitude
CNAME2  = Frequency
CNAME3  = Longitude
CRVAL1  = 10
CRVAL2  = 20
CRVAL3  = 25
CRPIX1  = 30
CRPIX2  = 40
CRPIX3  = 45
CDELT1  = -0.1
CDELT2  =  0.5
CDELT3  =  0.1
CUNIT1  = deg
CUNIT2  = Hz
CUNIT3  = deg
c            	   	   C   s0  t } | jdkst‚| jdks t‚| jd ks.t‚| jd ks<t‚| jdddgksPt‚| jdddgksdt‚| jdddgksxt‚| j	dd	d
gksŒt‚t
| jdddgdddgdddggƒ t| jƒdksÂt‚| jd dksÔt‚| jd d d… dksît‚| jd dk�st‚| jd d tk�st‚| jd d dk�s2t‚t| jd d d tƒ�sPt‚| jd d d tjk�snt‚| jd d tk�s†t‚| jd d dk�sžt‚| jd d i k�s¶t‚t|  ddd¡dƒ t|  ddd¡dƒ t|  ddd¡dƒ t
|  ddd¡d ƒ |  ddd¡\}}t|tƒ�s(t‚t|jtƒ�s:t‚t|jjdƒ t|jjdƒ t|tƒ�sft‚t| tj ¡dƒ |  !ddd¡\}}t|tƒ�sšt‚t|jtƒ�s¬t‚t|jjdƒ t|jjdƒ t|tƒ�sØt‚t| tj ¡dƒ tdddd!d"�}dtj  }t"j#t$d#d$�� |  %||¡\}}}W 5 Q R X t|d%ƒ t|d&ƒ t|d'ƒ t"j#t$d#d$�� |  %||¡\}}}W 5 Q R X t|d%ƒ t|d&ƒ t|d'ƒ t"j#t$d#d$�� |  &||¡\}}}W 5 Q R X t
|dƒ t
|dƒ t
|dƒ t"j#t$d#d$�� |  &||¡\}}}W 5 Q R X t
|dƒ t
|dƒ t
|dƒ d S )(Né   úpos.galactic.latúem.freqúpos.galactic.lonrN   ÚHzr!   ÚLatitudeÚ	FrequencyÚ	LongitudeTFr   rQ   r   r%   ©Úspectralr   rO   rP   r$   rR   r&   rp   r'   rS   é,   )rT   rU   é   rT   rU   rr   )rV   rW   ç      F@)rq   rS   r'   r`   rX   úNo observer defined on WCS©ÚmatchrV   rW   rs   )'ÚWCS_SPECTRAL_CUBEr*   r+   r,   r-   r.   r/   r0   r1   r2   r   r3   Úlenr4   r5   r   r]   r   r6   rN   r   r   r8   r9   r<   r=   r>   rR   ÚlÚbr   Úto_valuerk   r?   ÚpytestÚwarnsr   r@   rA   )	rB   rC   ÚspecrD   rb   ÚzrE   rc   Úkr$   r$   rF   Útest_spectral_cubeí   sˆ    ý
þ











r�   z
PC2_3 = -0.5
PC3_2 = +0.5
c                  C   s|  t } | jdddgkst‚| jdddgks,t‚| jdddgks@t‚| jddd	gksTt‚t| jd
d
d
gdd
d
gd
d
d
ggƒ t| j	ƒdksŠt‚| j	d dksœt‚| j	d d d… dks¶t‚| j	d dksÈt‚| j
d d tksÞt‚| j
d d dksôt‚t| j
d d d tƒ�st‚| j
d d d tjk�s0t‚| j
d d tk�sHt‚| j
d d dk�s`t‚| j
d d i k�sxt‚d S )Nrh   ri   rj   rN   rk   r!   rl   rm   rn   TFrg   r   rQ   r   r%   ro   rO   rP   r$   rR   r&   rp   )ÚWCS_SPECTRAL_CUBE_NONALIGNEDr/   r+   r0   r1   r2   r   r3   rx   r4   r5   r   r]   r   r6   rN   r   ©rB   r$   r$   rF   Útest_spectral_cube_nonalignedb  s6    ý
ýþr„   aA  
SIMPLE  = T / Fits standard
BITPIX  = -32 / Bits per pixel
NAXIS   = 3 / Number of axes
NAXIS1  = 2048 / Axis length
NAXIS2  = 2048 / Axis length
NAXIS3  = 11 / Axis length
DATE    = '2008-10-28T14:39:06' / Date FITS file was generated
OBJECT  = '2008 TC3' / Name of the object observed
EXPTIME = 1.0011 / Integration time
MJD-OBS = 54746.02749237 / Obs start
DATE-OBS= '2008-10-07T00:39:35.3342' / Observing date
TELESCOP= 'VISTA' / ESO Telescope Name
INSTRUME= 'VIRCAM' / Instrument used.
TIMESYS = 'UTC' / From Observatory Time System
TREFPOS = 'TOPOCENT' / Topocentric
MJDREF  = 54746.0 / Time reference point in MJD
RADESYS = 'ICRS' / Not equinoctal
CTYPE2  = 'RA---ZPN' / Zenithal Polynomial Projection
CRVAL2  = 2.01824372640628 / RA at ref pixel
CUNIT2  = 'deg' / Angles are degrees always
CRPIX2  = 2956.6 / Pixel coordinate at ref point
CTYPE1  = 'DEC--ZPN' / Zenithal Polynomial Projection
CRVAL1  = 14.8289418840003 / Dec at ref pixel
CUNIT1  = 'deg' / Angles are degrees always
CRPIX1  = -448.2 / Pixel coordinate at ref point
CTYPE3  = 'UTC' / linear time (UTC)
CRVAL3  = 2375.341 / Relative time of first frame
CUNIT3  = 's' / Time unit
CRPIX3  = 1.0 / Pixel coordinate at ref point
CTYPE3A = 'TT' / alternative linear time (TT)
CRVAL3A = 2440.525 / Relative time of first frame
CUNIT3A = 's' / Time unit
CRPIX3A = 1.0 / Pixel coordinate at ref point
OBSGEO-B= -24.6157 / [deg] Tel geodetic latitute (=North)+
OBSGEO-L= -70.3976 / [deg] Tel geodetic longitude (=East)+
OBSGEO-H= 2530.0000 / [m] Tel height above reference ellipsoid
CRDER3  = 0.0819 / random error in timings from fit
CSYER3  = 0.0100 / absolute time error
PC1_1   = 0.999999971570892 / WCS transform matrix element
PC1_2   = 0.000238449608932 / WCS transform matrix element
PC2_1   = -0.000621542859395 / WCS transform matrix element
PC2_2   = 0.999999806842218 / WCS transform matrix element
CDELT1  = -9.48575432499806E-5 / Axis scale at reference point
CDELT2  = 9.48683176211164E-5 / Axis scale at reference point
CDELT3  = 13.3629 / Axis scale at reference point
PV1_1   = 1. / ZPN linear term
PV1_3   = 42. / ZPN cubic term
c            
      C   s¼  t } | jdkst‚| jdks t‚| jdks.t‚| jdks<t‚| jdddgksPt‚| jdddgksdt‚| jd	d	d	gksxt‚| j	d	d	d	gksŒt‚t
| jd
d
dgd
d
dgddd
ggƒ | j}|d dksÆt‚|d dksÖt‚|d d d… dksît‚t|d d ƒ�st‚| jd d tk�st‚| jd d dk�s4t‚t| jd d d tƒ�sRt‚| jd d d tjk�spt‚| jd d tk�sˆt‚| jd d dk�s t‚| jd d i k�s¸t‚t| jd d ƒ�sÐt‚t|  ddd¡dƒ t|  ddd¡dƒ t|  ddd¡dƒ t
|  ddd¡dƒ |  ddd ¡\}}t|tƒ�sBt‚t|jtƒ�sTt‚t|jjd!ƒ t|jjd"ƒ t|tƒ�s€t‚t|jd#ƒ |  d dd¡\}}t|tƒ�s®t‚t|jtƒ�sÀt‚t|jjd!ƒ t|jjd"ƒ t|tƒ�sìt‚t|jd#ƒ |   ||¡\}}}t|d$ƒ t|d%ƒ t|d&ƒ |   ||¡\}}}t|d$ƒ t|d%ƒ t|d&ƒ |  !||¡\}}}	t
|d ƒ t
|dƒ t
|	dƒ |  !||¡\}}}	t
|d ƒ t
|dƒ t
|	dƒ d S )'Nrg   )é   é   r†   )r†   r†   r…   rM   rL   ÚtimerN   Úsr!   TFr   rQ   r   rO   r%   )r‡   r   rP   r$   rR   r&   ç33333|Àç33333§@)çÀ!k¨-@çZ-‚÷\% @çßO�—®Ž¢@r‹   rŒ   r�   )r‰   rŠ   r   )r   iŒ  i?þÿÿr'   rS   rq   g:ìO›¥·û?g±ª.)‘-@g°.÷A»ê@rV   rW   rs   )"ÚWCS_TIME_CUBEr*   r+   r,   r-   r.   r/   r0   r1   r2   r   r3   r4   Úcallabler5   r   r]   r   r6   rN   r   r   r8   r9   r<   r=   r>   rR   r^   r_   Úmjdr?   r@   rA   )
rB   Ú
componentsrC   r‡   rD   rb   r   rE   rc   r€   r$   r$   rF   Útest_time_cubeÒ  s�    þþþþþ










r’   zÜ
SIMPLE  = T
BITPIX  = -32
NAXIS   = 1
NAXIS1  = 2048
TIMESYS = 'UTC'
TREFPOS = 'TOPOCENT'
MJDREF  = 50002.6
CTYPE1  = 'UTC'
CRVAL1  = 5
CUNIT1  = 's'
CRPIX1  = 1.0
CDELT1  = 2
OBSGEO-L= -20
OBSGEO-B= -70
OBSGEO-H= 2530
z7.1z DATEREF = '1995-10-12T14:24:00'
c                   C   s   t jtdd�S ©NrI   rJ   ©r   Ú
fromstringÚHEADER_TIME_1Dr$   r$   r$   rF   Úheader_time_1dM  s    r—   c              	   C   sr   t  ¡ � t  dt¡ t| ƒ}W 5 Q R X | |¡}t|j|dd� t|j|dd� |j	|ks`t
‚|j|ksnt
‚d S )NrH   g»½×Ùß|Û=©Úrtol)ÚwarningsÚcatch_warningsÚsimplefilterr   r   r>   r   Újd1Újd2Úformatr+   Úscale)ÚheaderÚpositionr�   rž   r    rŸ   rB   r‡   r$   r$   rF   Úassert_time_atR  s    

r£   r    )ÚtaiÚtcbÚtcgÚtdbÚttÚut1ÚutcÚlocalc                 C   s"   |  ¡ | d< t| ddd|dƒ d S )NÚCTYPE1r   éSb% ç¼Æ|Ýèž¹?r�   )Úupperr£   )r—   r    r$   r$   rF   Útest_time_1d_values]  s    r°   c                 C   s   d| d< t | dddddƒ d S )NZGPSr¬   r   r­   g<AœLR­¹?r¤   r�   ©r£   ©r—   r$   r$   rF   Útest_time_1d_values_gpsh  s    r³   c                 C   sl   d| d< t | dddddƒ d| d< t | dddd	dƒ d
| d< t | dddddƒ d| d< t | dddddƒ d S )NZTDTr¬   r   r­   r®   r¨   r�   ZIATr¤   ÚGMTrª   ÚETr±   r²   r$   r$   rF   Útest_time_1d_values_deprecatedn  s    r¶   c                 C   s8   d| d< t | dddddƒ d| d	< t | dddd
dƒ d S )NZTIMEr¬   r   r­   r®   rª   r�   ZTAIÚTIMESYSr¤   r±   r²   r$   r$   rF   Útest_time_1d_values_timez  s    r¸   )r¤   r¥   r¦   r§   r¨   r©   rª   c              	   C   sˆ   t  dd¡}| ¡ | d< t ¡ � t dt¡ t| ƒ}W 5 Q R X | |¡}| 	|¡}t
||ƒ | |¡j}d|_| 	|¡}t
||ƒ d S )Nrg   rT   r¬   rH   Úisot)r:   ra   r¯   rš   r›   rœ   r   r   r>   r@   r   r§   rŸ   )r—   r    Zpixel_inrB   r‡   Z	pixel_outr$   r$   rF   Útest_time_1d_roundtrip�  s    




rº   c              	   C   sl   | d= d| d< d| d< t  ¡ � t  dt¡ t| ƒ}W 5 Q R X | d¡}t|jdd	d
� t|jddd
� d S )NZMJDREFg     dé@ZMJDREFIg•dyáý¥=ZMJDREFFrH   rT   g   €µBAgê-�™—q=r˜   gØÍ^Bûß¿g‚vIhÂ%<=)	rš   r›   rœ   r   r   r>   r   r�   rž   )r—   rB   r‡   r$   r$   rF   Útest_time_1d_high_precisionš  s    

r»   c              	   C   s^   t  ¡ � t  dt¡ t| ƒ}W 5 Q R X | d¡}|j ¡ \}}}t|j	dƒ t|j	dƒ d S )NrH   rT   éìÿÿÿiºÿÿÿ)
rš   r›   rœ   r   r   r>   ÚlocationZto_geodeticr   Údegree)r—   rB   r‡   ÚlonÚlatZaltr$   r$   rF   Útest_time_1d_location_geodetic¬  s    

rÁ   c                  C   s$   t jtdd�} | d= | d= | d= | S )NrI   rJ   úOBSGEO-LúOBSGEO-BúOBSGEO-Hr”   )r¡   r$   r$   rF   Úheader_time_1d_no_obs¾  s
    rÅ   c              	   C   s˜   | }d|d< d|d< d|d< t  ¡ � t  dt¡ t|ƒ}W 5 Q R X | d¡}|j ¡ \}}}t| 	t
j¡dƒ t| 	t
j¡dƒ t| 	t
j¡dƒ d S )NrT   zOBSGEO-Xr¼   zOBSGEO-Yé   zOBSGEO-ZrH   )rš   r›   rœ   r   r   r>   r½   Úto_geocentricr   r{   r6   Úm)rÅ   r¡   rB   r‡   rD   rb   r   r$   r$   rF   Ú test_time_1d_location_geocentricÇ  s    

rÉ   c                 C   sd   d| d< t | ƒ}| d¡}|j ¡ \}}}t| tj¡dƒ t| tj¡dƒ t| tj¡dƒ d S )NZ	GEOCENTERÚTREFPOSrT   r   )r   r>   r½   rÇ   r   r{   r6   rÈ   )rÅ   rB   r‡   rD   rb   r   r$   r$   rF   Útest_time_1d_location_geocenterÝ  s    
rË   c              	   C   s>   t | ƒ}tjtdd�� | d¡}W 5 Q R X |jd ks:t‚d S )NúUMissing or incomplete observer location information, setting location in Time to Noneru   rT   ©r   r|   r}   ÚUserWarningr>   r½   r+   ©rÅ   rB   r‡   r$   r$   rF   Útest_time_1d_location_missingê  s    ýrÐ   c              	   C   sf   d| d< t  ¡ � t  dt¡ t| ƒ}W 5 Q R X tjtdd�� | d¡}W 5 Q R X |j	d ksbt
‚d S )Ng      $@rÂ   rH   rÌ   ru   rT   )rš   r›   rœ   r   r   r|   r}   rÎ   r>   r½   r+   rÏ   r$   r$   rF   Ú test_time_1d_location_incompleteú  s    
ýrÑ   c              	   C   sF   d| d< t | ƒ}tjtdd�� | d¡}W 5 Q R X |jd ksBt‚d S )NZ
BARYCENTERrÊ   zTObservation location 'barycenter' is not supported, setting location in Time to Noneru   rT   rÍ   rÏ   r$   r$   rF   Ú!test_time_1d_location_unsupported  s    ýrÒ   c              	   C   sF   d| d< t | ƒ}tjtdd�� | d¡}W 5 Q R X t|tƒsBt‚d S )NzUT(WWV)r¬   z0Dropping unsupported sub-scale WWV from scale UTru   rT   )r   r|   r}   rÎ   r>   r]   r   r+   rÏ   r$   r$   rF   Útest_time_1d_unsupported_ctype!  s     ÿrÓ   c               	   C   s>   t dd�} t t¡�  dg| j_| jdgks0t‚W 5 Q R X d S )Nr   r   zbananas // sekonds)r   r|   r}   r   rB   Zcunitr0   r+   rƒ   r$   r$   rF   Útest_unrecognized_unit5  s    

rÔ   c               	   C   sÐ   t dƒ} t t¡� t| ƒ}W 5 Q R X t|jdƒ ddgddgg|j_t|jdƒ ddg|j_	t|jdƒ d |_
t|jddgddggƒ dd	g|j_	t|jdƒ d
dgdd
gg|j_ddg|j_	t|jdƒ d S )Nz../../tests/data/sip.fitsTr   r   ÚXÚYFzRA---TANzDEC--TANgÍÌÌÌÌÌì?gš™™™™™¹¿çš™™™™™¹?)r   r|   r}   r   r   r   r3   rB   ZpcÚctypeÚsip)ÚfilenameÚwr$   r$   rF   Útest_distortion_correlations=  s    rÜ   c               
   C   s~  t dd�} dg| j_| jd gks$t‚tddiƒ� | jd gksBt‚W 5 Q R X tdddœƒ� | jdgkslt‚W 5 Q R X tddiƒ�. tddiƒ� | jdgks¢t‚W 5 Q R X W 5 Q R X tddiƒ�. tddiƒ� | jdgksât‚W 5 Q R X W 5 Q R X tddiƒ�0 tddiƒ� | jdgk�s$t‚W 5 Q R X W 5 Q R X tddiƒ�0 tddiƒ� | jdgk�sft‚W 5 Q R X W 5 Q R X d S )	Nr   r   ÚSPAMÚAPPLEz
food.fruitz	food.spam)rÞ   rÝ   Znotfood)r   rB   rØ   r/   r+   r   rƒ   r$   r$   rF   Ú!test_custom_ctype_to_ucd_mappingsZ  s&    

$$&rß   c                  C   sò   t  ¡ } | jddgkst‚| jd d tks0t‚| jd d dksFt‚t| jd d d tƒsbt‚| jd d d	 tj	ks~t‚d
| j
_| jd d d }t|tƒs¦t‚|jjdks¶t‚d| j
_| jd d d }t|tƒsÞt‚|jjdksît‚d S )NrO   rQ   rP   r   r   r$   r%   rR   r&   r   g     @Ÿ@iÚ  g     hŸ@)r\   Údeepcopyr4   r+   r5   r   r]   r   r6   rN   rB   Zradesysr   ZequinoxZjyear)rB   rR   r$   r$   rF   Ú#test_caching_components_and_classes}  s"    þ
rá   c                  C   s�  t  ¡ } d| _dddg| _| j}|jdks.t‚|jdks<t‚|jdksJt‚|jdksXt‚|jddgksjt‚|j	dd	gks|t‚|j
d
d
gksŽt‚|jddgks t‚|  dddg¡}|jdks¾t‚|jdksÌt‚|jdksÚt‚|jdksèt‚|jd dd gksüt‚|j	d dd gk�st‚|j
dddgk�s(t‚|jdddgk�s>t‚|  ddg¡}|jdk�s\t‚|jdk�slt‚|jdk�s|t‚|jdk�sŒt‚|jddgk�s t‚|j	d	dgk�s´t‚|j
d
d
gk�sÈt‚|jddgk�sÜt‚dg| jj | j_|  ddg¡}|jdk�st‚|jdk�st‚|jdk�s,t‚|jdk�s<t‚|jddgk�sPt‚|j	d	dgk�sdt‚|j
d
d
gk�sxt‚|jddgk�sŒt‚d S )N)rÆ   é(   é2   )éÿÿÿÿr…   )éþÿÿÿé   )é   r(   r%   )rã   rÆ   )rÆ   rã   rh   rj   rN   rl   rn   r   rg   )Nrâ   Nri   r!   rk   rm   Z	longitudeZlatitude)rw   rà   r.   Zpixel_boundsrP   r*   r+   r,   r-   r/   r0   r2   ÚsubrB   r    Úcname)rB   Zwcs_sub1Zwcs_sub2Zwcs_sub3Zwcs_sub4r$   r$   rF   Útest_sub_wcsapi_attributes›  sb    þ
þþrê   z>
CTYPE1  = 'HPLT-TAN'
CTYPE2  = 'HPLN-TAN'
CTYPE3  = 'STOKES'
c                   C   s   t jtdd�S r“   )r   r•   ÚHEADER_POLARIZEDr$   r$   r$   rF   Úheader_polarizedê  s    rì   c                 C   s   t | ƒ}|jd dkst‚d S )Nr%   zphys.polarization.stokes)r   r/   r+   )rì   rÛ   r$   r$   rF   Útest_phys_type_polarizationï  s    rí   a   
BUNIT   = 'Jy/beam'
EQUINOX =      2.000000000E+03
CTYPE1  = 'RA---SIN'
CRVAL1  =    2.60108333333E+02
CDELT1  =     -2.777777845E-04
CRPIX1  =                  1.0
CUNIT1  = 'deg'
CTYPE2  = 'DEC--SIN'
CRVAL2  =   -9.75000000000E-01
CDELT2  =      2.777777845E-04
CRPIX2  =                  1.0
CUNIT2  = 'deg'
CTYPE3  = 'FREQ'
CRVAL3  =    1.37835117405E+09
CDELT3  =      9.765625000E+04
CRPIX3  =                 32.0
CUNIT3  = 'Hz'
SPECSYS = 'TOPOCENT'
RESTFRQ =      1.420405752E+09 / [Hz]
RADESYS = 'FK5'
c                   C   s   t jtdd�S r“   )r   r•   ÚHEADER_SPECTRAL_FRAMESr$   r$   r$   rF   Úheader_spectral_frames  s    rï   c                 C   s„  t j dd¡��j tddd�}|  ¡ }|j|d< d|d< d	|d
< d|d< d|d< d|d< t t¡� t	|ƒ}W 5 Q R X | 
ddd¡d }t|tƒs–t‚t|jtƒs¦t‚|jjj|jksºt‚t|jjjd jjdƒ t dd¡j|d� tƒ ¡}| |j tƒ ¡¡dtj k �st‚t  ¡ D ]Z\}}||d< t t¡� t	|ƒ}W 5 Q R X | 
ddd¡d }	|	 !|¡}
t"|	j#|
j#ƒ �qW 5 Q R X d S )NZauto_downloadFz2009-05-04T04:44:23rª   )r    úMJD-OBSg°¬4)U0@ÚCRVAL1g†8ÖÅmAÀZCRVAL2çfffffb@rÂ   ç3333334ÀrÃ   ç        rÄ   r   é   r   rˆ   )ÚobstimeÚSPECSYS)$r   ZconfZset_tempr   Úcopyr�   r|   r}   r   r   r>   r]   r   r+   Úobserverr	   rö   r¹   r   rd   ZdifferentialsZd_xyzr#   r
   Zfrom_geodeticZget_itrsZtransform_tor   Zseparation_3dr6   Úkmr   ÚitemsZ$with_observer_stationary_relative_tor   Úquantity)rï   rö   r¡   Zwcs_topoZsc_topoZobservatoryZspecsysZexpected_framerB   ÚscZsc_checkr$   r$   rF   Útest_spectralcoord_frame  s>    
ÿþÿÿ
rþ   )Úctype3rù   ZZOPTZBETAZVELOZVRADZVOPTFTc              	   C   s  |   ¡ }||d< d|d< d|d< |d dkr6d|d	< nd
|d	< d|d< d|d< |rrd|d< d|d< d|d< d|d< t ¡ � t dt¡ t|ƒ}W 5 Q R X | ddd¡\}}t|tƒsºt	‚|rÌ| 
||¡}n&tjtdd�� | 
||¡}W 5 Q R X t|dddgddd� d S )NZCTYPE3r×   ZCRVAL3çü©ñÒMbP?ZCDELT3r   ÚVúm s-1ZCUNIT3r!   ç   þj*ÕAÚRESTWAVé�×  rð   rò   rÂ   ró   rÃ   rô   rÄ   ÚBARYCENTr÷   rH   rõ   rt   ru   ç�íµ ÷Æ°>g•Ö&è.>)r™   Zatol)rø   rš   r›   rœ   r   r   r>   r]   r   r+   r@   r|   r}   r   r   )rï   rÿ   rù   r¡   rB   ZskycoordÚspectralcoordÚpixr$   r$   rF   Útest_different_ctypesJ  s0    

r
  c            	   	   C   s´   t dd�} ddg}t d¡ } } }}d|d< ddg}ddg}t|||||ƒ| _| j||dd	d
�}t t¡� |  ||d¡ W 5 Q R X t 	t
¡� t|  ||¡|ƒ W 5 Q R X dS )z¾Test case for issue #11446
    Since we can't define a target accuracy when plotting a WCS `all_world2pix`
    should not error but only warn when the default accuracy can't be reached.
    r%   r   r   )é   r  gßŸ".€¾)rg   r   iè  r   r   )Z	toleranceN)r   r:   Zzerosr   rÙ   Zall_world2pixr|   Zraisesr   r}   rÎ   r   r<   )	rB   ÚcrpixÚarz   ZapÚbpZ
test_pos_xZ
test_pos_yÚexpectedr$   r$   rF   Útest_non_convergence_warnings  s    
r  zÉ
CTYPE1  = 'FREQ'
CRVAL1  =    1.37835117405E+09
CDELT1  =      9.765625000E+04
CRPIX1  =                 32.0
CUNIT1  = 'Hz'
SPECSYS = 'TOPOCENT'
RESTFRQ =      1.420405752E+09 / [Hz]
RADESYS = 'FK5'
c                   C   s   t jtdd�S r“   )r   r•   ÚHEADER_SPECTRAL_1Dr$   r$   r$   rF   Úheader_spectral_1d›  s    r  )Úctype1rù   c                 C   sX  |   ¡ }||d< d|d< d|d< |d dkr6d|d	< nd
|d	< d|d< d|d< |rrd|d< d|d< d|d< d|d< t ¡ � t dt¡ t|ƒ}W 5 Q R X | d¡}t|tƒs²t	‚|j
d ksÀt	‚|jd k	|ksÒt	‚|rÜd}nd}tjt|d�� | |¡}W 5 Q R X t|dgdd� tjtdd��8 t|j|j|jtdtj d tj d!tj d"�d#�}W 5 Q R X |�rld$}nd}tjt|d�� | |¡}	W 5 Q R X t|	dgdd� tjtdd��V t|j|j|jtdtj d tj dtj d"�tdtj d tj d!tj d"�d%�}W 5 Q R X |�r | |¡}
n$tjtdd�� | |¡}
W 5 Q R X t|
dgdd� d S )&Nr¬   r×   rñ   r   ZCDELT1r   r  r  ZCUNIT1r!   r  r  r  rð   rò   rÂ   ró   rÃ   rô   rÄ   r  r÷   rH   rõ   z"No target defined on SpectralCoordrt   ru   r  r˜   zNo velocity defined on framerT   rU   r   )Zdistance)Údoppler_restÚdoppler_conventionÚtargetz$No observer defined on SpectralCoord)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   r6   rN   Zkpc)r  r  rù   r¡   rB   r  Zexpected_messager	  Zspectralcoord_no_obsZpix2Zpix3r$   r$   rF   Útest_spectral_1d   sj    


üûr  a\  
WCSAXES = 3
CTYPE1  = 'RA---TAN'
CTYPE2  = 'DEC--TAN'
CTYPE3  = 'WAVE'
CRVAL1  = 98.83153
CRVAL2  = -66.818
CRVAL3  = 6.4205
CRPIX1  = 21.
CRPIX2  = 22.
CRPIX3  = 1.
CDELT1  = 3.6111E-05
CDELT2  = 3.6111E-05
CDELT3  = 0.001
CUNIT1  = 'deg'
CUNIT2  = 'deg'
CUNIT3  = 'um'
MJD-AVG = 59045.41466
RADESYS = 'ICRS'
SPECSYS = 'BARYCENT'
TIMESYS = 'UTC'
c                   C   s   t jtdd�S r“   )r   r•   ÚHEADER_SPECTRAL_WITH_TIMEr$   r$   r$   rF   Úheader_spectral_with_time  s    r  c              	      sr  ‡ fdd„}|   ¡ }t ¡ �D t dttf¡ t|ƒ‰ t ˆ j	j
¡ sJt‚t ˆ j	j¡s\t‚W 5 Q R X |ˆ ƒ |d |d< |d= t ¡ �D t dttf¡ t|ƒ‰ t ˆ j	j¡ s¶t‚t ˆ j	j
¡sÈt‚W 5 Q R X |ˆ ƒ d|d< |d= t ¡ �b t dttf¡ t|ƒ‰ tjˆ j	_t ˆ j	j¡�s(t‚t ˆ j	j
¡�s<t‚ˆ j	jdk�sNt‚W 5 Q R X ||ƒ |d	= ||ƒ d S )
Nc                    sX   t ˆ jˆ jjdžŽ ˆ jjƒ ˆ jˆ jjŽ \}}t |jjj|jj	j|j
fˆ jjdd� d S )Nr   r   r˜   )r   )r   Zall_pix2worldrB   r  Zcrvalr>   Z	sphericalr¿   r¾   rÀ   r#   )r¡   Zskyr~   ©rÛ   r$   rF   Ú	check_wcs  s    ýz-test_spectral_with_time_kw.<locals>.check_wcsrH   zMJD-AVGrð   z
2020-07-15zDATE-OBSr!   r·   )rø   rš   r›   rœ   r   r   r   r:   ÚisnanrB   Zmjdavgr+   ZmjdobsÚnanZdateobs)r  r  Úhdrr$   r  rF   Útest_spectral_with_time_kw  s8    




r  )orš   Ú	itertoolsr   Únumpyr:   r|   Znumpy.testingr   r   Zpackaging.versionr   Zastropyr   r6   Zastropy.coordinatesr   r   r	   r
   r   r   r   Zastropy.io.fitsr   Zastropy.io.fits.verifyr   Zastropy.tests.helperr   Zastropy.timer   Zastropy.unitsr   Zastropy.units.corer   Zastropy.utilsr   Zastropy.utils.datar   Zastropy.utils.exceptionsr   Zastropy.wcs._wcsr   ZwcsverZastropy.wcs.wcsr   r   r   r   Zastropy.wcs.wcsapi.fitswcsr   r   r)   rB   r  rG   ZHEADER_SIMPLE_CELESTIALr›   rœ   r•   r\   rf   ZHEADER_SPECTRAL_CUBErw   r�   ÚstripZHEADER_SPECTRAL_CUBE_NONALIGNEDr‚   r„   ZHEADER_TIME_CUBErŽ   r’   r–   Zfixturer—   r£   ÚmarkZparametrizer°   r³   r¶   r¸   Zremote_datarº   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  r  r$   r$   r$   rF   Ú<module>   sÖ   $	

;
V
fÿþÿ	
ÿ92
e
 ÿ

#H
	
5þ
%
þ
V
