U
    e»{jw� ã                   @   s‚  d dl Z d dlZd dlZd dlZd dl mZ d dlmZm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mZ d d
lmZmZmZmZmZmZm Z m!Z! d dl"m#Z#m$Z$ d dl%m&Z&m'Z' d dl(m)Z) ej*ej+e ,e-¡j.d d�Z/ej*ej+e ,e-¡j.e ,e-¡j.d�Z0ej*ej+e ,e-¡j.e ,e-¡j.d d d�Z1ej*ej+e ,e-¡j.dd�Z2dd„ Z3dd„ Z4G dd„ dƒZ5G dd„ dƒZ6G dd„ dƒZ7G dd„ dƒZ8G dd„ dƒZ9G d d!„ d!ƒZ:G d"d#„ d#ƒZ;d$d%„ Z<d&d'„ Z=d(d)„ Z>d*d+„ Z?d,d-„ Z@d.d/„ ZAd0d1„ ZBd2d3„ ZCd4d5„ ZDd6d7„ ZEejFjGd8d9„ ƒZHd:d;„ ZId<d=„ ZJd>d?„ ZKd@dA„ ZLdBdC„ ZMdDdE„ ZNdFdG„ ZOdHdI„ ZPdJdK„ ZQdLdM„ ZRdNdO„ ZSejFjTe' dPdQ�dRdS„ ƒZUdTdU„ ZVdVdW„ ZWdXdY„ ZXdZd[„ ZYd\d]„ ZZd^d_„ Z[d`da„ Z\dbdc„ Z]ddde„ Z^dfdg„ Z_dhdi„ Z`djdk„ Zadldm„ Zbdndo„ Zcdpdq„ Zddrds„ Zedtdu„ Zfdvdw„ Zgdxdy„ Zhdzd{„ Zid|d}„ Zjd~d„ Zkd€d�„ Zld‚dƒ„ Zmd„d…„ Znd†d‡„ Zodˆd‰„ ZpdŠd‹„ ZqdŒd�„ ZrdŽd�„ Zsd�d‘„ Ztd’d“„ Zud”d•„ Zvd–d—„ Zwd˜d™„ Zxdšd›„ Zydœd�gdždŸgd d¡gd¢d£gd¤d¥gd¦d§gd¨œZzeezƒZ{e{ |¡ Z}e} ~ej¡Z€d¨Z�ejF ‚d©e{e}e€g¡ejF ‚dªi d«d¬ig¡ejF ‚d­d®d¯g¡d°d±„ ƒƒƒZƒd²d³„ Z„ejF ‚dªi d«d¬ig¡d´dµ„ ƒZ…d¶d·„ Z†d¸d¹„ Z‡dºd»„ ZˆejF ‚d¼e¡d½d¾„ ƒZ‰ejF ‚d¼e¡d¿dÀ„ ƒZŠejFjTe& dÁdQ�ejF ‚d¼e¡dÂdÃ„ ƒƒZ‹dÄdÅ„ ZŒdÆdÇ„ Z�ejF ‚dÈdÉdÊg¡dËdÌ„ ƒZŽejF ‚dÍe �¡ ¡dÎdÏ„ ƒZ�ejF ‚dÐddÑg¡dÒdÓ„ ƒZ‘dÔdÕ„ Z’dÖd×„ Z“dØdÙ„ Z”dÚdÛ„ Z•dÜdÝ„ Z–dS )Þé    N)Údeepcopy)ÚDecimalÚlocalcontext)ÚStringIO)ÚErfaWarning)Úassert_allclose)Úunits)ÚEarthLocation)ÚColumnÚTable)ÚSTANDARD_TIME_SCALESÚTIME_FORMATSÚScaleValueErrorÚTimeÚ	TimeDeltaÚ
TimeStringÚTimezoneInfoÚconf)ÚiersÚ
isiterable)ÚHAS_H5PYÚHAS_PYTZ)ÚAstropyDeprecationWarning©ÚrtolÚatolé   i  ç        c                 C   s   t tjƒ| _d S ©N)r   r   ÚFORMATSÚFORMATS_ORIG©Úfunc© r#   ú\/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/time/tests/test_basic.pyÚsetup_function.   s    r%   c                 C   s   t j ¡  t j | j¡ d S r   )r   r   ÚclearÚupdater    r!   r#   r#   r$   Úteardown_function2   s    
r(   c                   @   sÜ   e Zd ZdZdd„ Zdd„ Zej de	j
¡dd„ ƒZej d	d
d
gg¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/S )0Ú	TestBasicz;Basic tests stemming from initial example and API referencec                 C   sÔ   ddg}t |ddd�}t|ƒdks&t‚t|jt ddg¡ƒs@t‚t|jt d	d
g¡ƒsZt‚|j	}t|ƒdkspt‚t|jt ddg¡ƒsŠt‚t|jt ddg¡ƒs¤t‚t|j
ƒdks¶t‚t|jt ddg¡ƒsÐt‚d S )Nú1999-01-01 00:00:00.123456789ú2010-01-01 00:00:00ÚisoÚutc©ÚformatÚscalezc<Time object: scale='utc' format='iso' value=['1999-01-01 00:00:00.123' '2010-01-01 00:00:00.000']>g    v³BAg    O»BAg·€»úÿß¿g      à¿zc<Time object: scale='tai' format='iso' value=['1999-01-01 00:00:32.123' '2010-01-01 00:00:34.000']>g#M“�èùß¿g2Iµv�ùß¿zb<Time object: scale='tt' format='iso' value=['1999-01-01 00:01:04.307' '2010-01-01 00:01:06.184']>gÏWë<~Aç /Â^’¶A)r   ÚreprÚAssertionErrorÚallclose_jdÚjd1ÚnpÚarrayÚallclose_jd2Újd2ÚtaiÚttÚallclose_secÚcxcsec©ÚselfÚtimesÚtr#   r#   r$   Útest_simple:   s.    
ÿ ÿ
ÿþ	ÿ	 ÿzTestBasic.test_simplec                 C   sÚ   d\}}t ||dd�}|jdkr*|jdks.t‚t dd¡}t |dd�}|jdkr\|j|jks`t‚d	}t ||dd�}|jdkrˆ|j|jksŒt‚t d
¡d  dd¡}t ||dd�}|jdks¾t‚|jt ||¡jksÖt‚dS )z+Test scalars, vector, and higher-dimensions)ç    (±BAg      À?Újd©r/   Tr#   rC   g    -±BAFr   ç      @ç      $@é   é   N)r   ÚisscalarÚshaper3   r6   ÚarangeÚreshapeÚ	broadcast)r?   ÚvalÚval1Út1Út2Úval2Út3Út4r#   r#   r$   Útest_different_dimensionsb   s    z#TestBasic.test_different_dimensionsÚformat_c                 C   sÐ   t g |d�}|jdkst‚|jdks(t‚|j|ks6t‚|j}|jdksJt‚|jdksXt‚t ||d�}|jdksrt‚|jdks€t‚|j|ksŽt‚|j}|jdks¢t‚|jdks°t‚|j|ks¾t‚|jdksÌt‚d S )NrE   r   ©r   r:   )r   Úsizer3   rK   r/   Úvaluer:   r0   )r?   rW   rA   Út_valuerR   rT   r#   r#   r$   Útest_empty_valuev   s     zTestBasic.test_empty_valuerZ   ç   ÀN»BAc                 C   s  t |ddd�}t |dd�}t |j|j dk¡s4t‚t || jdk¡sLt‚|jj|jjks`t‚|jj|jjkstt‚t |dd�}t |j|j dk¡sšt‚t || jdk¡s²t‚|jj|jjk	sÆt‚|jj|jjk	sÚt‚t |dd	d
d�}|jdksøt‚t |dd	dd�}|jdk�st‚dS )zbTest copying the values of a Time object by passing it into the
        Time initializer.
        rD   r-   r.   F)Úcopyr   Tr,   r:   rI   ©r/   r0   Ú	precisionz2010-01-01 00:00:34.0Údate©r/   r0   Ú
out_subfmtz
2010-01-01N)	r   r6   ÚallrD   r3   Ú_timer5   r9   rZ   )r?   rZ   rA   rR   r#   r#   r$   Útest_copy_time‰   s    zTestBasic.test_copy_timec              	   C   sb  t  dd¡}t|dddd�}|d }|jdks2t‚|jj|jjd ksJt‚|j|jksZt‚t|d ddd	�}|jdkszt‚t  |jj|jjk¡s”t‚t|d ƒ}|jdks®t‚t  |jj|jjk¡sÈt‚|d
d… }|jdksât‚t  |jj|jjd
d… k¡�st‚|j|jk�st‚t|d
d… ƒ}|jdk�s8t‚t  |jj|jjd
d… k¡�s\t‚t|d
 |d gƒ}|jdk�s€t‚t  |jj|jjd
d… k¡�s¤t‚t|d
 |d fƒ}	|	jdk�sÈt‚t  |	jj|jjd
d… k¡�sìt‚t  t	|ƒ¡|_
|d
d… }
t  |
j|jd
d… k¡�s(t‚t|ddt  t	|ƒ¡t  t	|ƒ¡fd�}|d }|j|jd k�snt‚|jjdk�s€t‚|dd
… }|jjdk�sžt‚|d }|jjdk�s¸t‚|d
d… }t  |j|jd
d… k¡�sät‚t jd|jjd�}|j t j¡d |k�st‚|j t j¡d |k�s.t‚||j t j¡d< |j t j¡d |k�s\t‚t  ddd¡}t|dd…t jf | dddd�}|d jj|jjd k�sªt‚|d jdk�s¾t‚t  |d jj|jjd k¡�sât‚t  |d jj|jjd k¡�st‚t  |dd…df jj|jjdd…df k¡�s:t‚t  |dd…df jj|jjdd…df k¡�snt‚t  |dd…df jj|jjk¡�s–t‚t  |dd…df jj|jjk¡�s¾t‚|j}|d j
|j
d k�sÞt‚t  |d j
|j
d k¡�sþt‚t  |dd…df j
|j
dd…df k¡�s.t‚d|_
|j}|d j
dk�sNt‚|d j
dk�sbt‚|dd…df j
dk�s~t‚t|dd…t jf | ddt  t	|ƒ¡t  t	|ƒ¡fd�}|d j|jd k�sÒt‚t  |d j|jd k¡�sòt‚t  |dd…df j|jdd…df k¡�s"t‚|dd… }|jdk�s>t‚|jdk�sNt‚|jdk�s^t‚dS )z�Test that Time objects holding arrays are properly subscriptable,
        set isscalar as appropriate, and also subscript delta_ut1_utc, etc.éPÃ  éZÃ  Úmjdr-   )Ú45dZ50d©r/   r0   Úlocationé   Tr.   é   é   FrH   r#   )rI   r   )r   r   r   ©Údtypeéÿÿÿÿr   ç+‡ÙÎ÷ï?çš™™™™™É?N©r   r   é   çš™™™™™¹?rX   )r6   rL   r   rJ   r3   re   r5   rl   rd   ÚlenÚdelta_tdb_ttÚ_delta_tdb_ttrK   r7   rq   ÚviewZndarrayÚnewaxisr9   ÚtdbrY   )r?   ri   rA   rQ   Zt1aZt1brR   Zt2aZt2bZt2crT   rU   Zt5aZt5bZt5cZt6ZallzerosÚfracZt7Zt7_tdbZt7_tdb2Zt8Zt9r#   r#   r$   Útest_getitem¢   sª    $$$$ ü ü$$44(( 0ü 0zTestBasic.test_getitemc                 C   sÒ   t dddd�}d|_t|jdƒs$t‚|jdks2t‚|jjdksBt‚|jjd	ksRt‚t|j	jdƒsdt‚t|j
jd
ƒsvt‚|jjdks†t‚t|jdƒs–t‚t|jdƒs¦t‚t|jdƒs¶t‚|jt ddd¡ksÎt‚dS )a  Use properties to convert scales and formats.  Note that the UT1 to
        UTC transformation requires a supplementary value (``delta_ut1_utc``)
        that can be obtained by interpolating from a table supplied by IERS.
        This is tested separately.r+   r,   r-   r.   ç‹ýe÷äaÕ?r]   ú2010-01-01 00:00:00.000z2010-01-01 00:01:06.184z2010-01-01T00:00:34.000gp  ÀN»BAz2010-01-01T00:01:06.910g   ÀNÏÒAr1   g  €Çþ3ÌAiÚ  rI   N)r   Údelta_ut1_utcr4   rD   r3   r,   r;   r:   Úfitsr-   Úut1ÚtcgÚisotr<   Úunixr=   ÚgpsÚdatetime©r?   rA   r#   r#   r$   Útest_properties  s    zTestBasic.test_propertiesc                 C   sF   t dddd�}|jdkst‚d|_|jdks0t‚|jjjdksBt‚dS )	zŸSet the output precision which is used for some formats.  This is
        also a test of the code that provides a dict for global and instance
        options.r+   r,   r-   r.   r�   é	   z2010-01-01 00:00:00.000000000N)r   r,   r3   r`   r:   r-   rŠ   r#   r#   r$   Útest_precision  s
    zTestBasic.test_precisionc              	   C   s`   d}t jt|d�� tddddd�}W 5 Q R X t jt|d�� tdddd�}d	|_W 5 Q R X d
S )zqVerifies that precision can only be 0-9 (inclusive). Any other
        value should raise a ValueError exception.z"precision attribute must be an int©Úmatchr+   r,   r-   é
   r_   r.   rr   N)ÚpytestÚraisesÚ
ValueErrorr   r`   )r?   Zerr_messagerA   r#   r#   r$   Útest_precision_input'  s    zTestBasic.test_precision_inputc                 C   s˜   d}d}t dddd||fd�}d|_|jjd	ks4t‚|jjd
ksDt‚|jjdksTt‚|jjdksdt‚|jjdkstt‚|j	jdks„t‚|j
jdks”t‚dS )z¢Transform from UTC to all supported time scales (TAI, TCB, TCG,
        TDB, TT, UT1, UTC).  This requires auxiliary information (latitude and
        longitude).ç33333{3@ç=bôÜ}cÀú2006-01-15 21:24:37.5r,   r-   é   ©r/   r0   r`   rl   r€   ú2006-01-15 21:24:37.5000000ú2006-01-15 21:24:37.8341000ú2006-01-15 21:25:10.5000000ú2006-01-15 21:25:42.6840000ú2006-01-15 21:25:43.3226905z2006-01-15 21:25:42.6843728z2006-01-15 21:25:56.8939523N)r   r‚   r-   r,   r3   r„   r:   r;   r…   r}   Útcb)r?   ÚlatÚlonrA   r#   r#   r$   Útest_transforms4  s"    ûzTestBasic.test_transformsc                 C   sÎ   t ddddd�}d|_|jjdks&t‚|jjdks6t‚|jjd	ksFt‚|jjd
ksVt‚|jjdksft‚|j	jdksvt‚|j
jdks†t‚t ddddtj dtj dtj fd�}||ksºt‚|j	|j	ksÊt‚dS )z=Location should default to geocenter (relevant for TDB, TCB).r—   r,   r-   r˜   r_   r€   rš   r›   rœ   r�   rž   z2006-01-15 21:25:42.6843725z2006-01-15 21:25:56.8939519r   rk   N)r   r‚   r-   r,   r3   r„   r:   r;   r…   r}   rŸ   ÚuÚm)r?   rA   rR   r#   r#   r$   Útest_transforms_no_locationK  s"    üz%TestBasic.test_transforms_no_locationc                 C   s²   d}d}t dgddd||fd�}t|jtƒs0t‚t||ƒ}t dgddd|d�}t|jtƒs^t‚|j|jksnt‚t dgddd|j|j|jfd�}t|jtƒsžt‚|j|jks®t‚dS )	zuCheck that location creates an EarthLocation object, and that
        such objects can be used as arguments.
        r•   r–   r—   r,   r-   ro   r™   N)r   Ú
isinstancerl   r	   r3   ÚxÚyÚz)r?   r    r¡   rA   rl   rR   rT   r#   r#   r$   Útest_location`  s:    û
ûûzTestBasic.test_locationc           	      C   s‚  d}d}t dgd ddd||fd�}t |jjd	k¡s:t‚t |jjd
 dk¡sTt‚t dgd dddt |d
g¡t |d
g¡fd�}t |jjd	k¡sšt‚|jjd
 dks®t‚|jjd dksÂt‚t 	t
¡�0 t ddddt |d
g¡t |d
g¡fd� W 5 Q R X t 	t
¡�6 t dgd dddt |d
g¡t |d
g¡fd� W 5 Q R X t dd¡ dd¡}t |dd||fd�}|jdk�s€t‚|jjdk�s’t‚|jj|jk�s¦t‚t |ddt |d
g¡t |d
g¡fd�}|jdk�sÞt‚|jj|jk�sòt‚|jj|jk�st‚t |ddt |gd
gd
gd
gg¡t |gd
gd
gd
gg¡fd�}|jdk�sVt‚|jj|jk�sjt‚|jj|jk�s~t‚dS )zËCheck that location arrays are checked for size and used
        for the corresponding times.  Also checks that erfa
        can handle array-valued locations, and can broadcast these if needed.
        r•   r–   r—   rv   r,   r-   ro   r™   z2006-01-15 21:24:37.500000r   z2006-01-15 21:25:42.684373rI   rm   ç     jè@g     kè@rn   ri   rk   )rn   rv   r#   N)r   r6   rd   r-   r,   r3   r}   r7   r‘   r’   r“   rL   rM   rK   rl   )	r?   r    r¡   rA   rR   ri   rT   rU   Út5r#   r#   r$   Útest_location_array‚  s|    ûûûûüþü	zTestBasic.test_location_arrayc           	      C   s˜   d}d}t j dd¡�x tD ]l}tdd|||fd�}tD ]*}t||ƒ}t||ƒ}t|j|jƒs8t‚q8d}t	 
t¡� t||ƒ}W 5 Q R X qW 5 Q R X d	S )
z¶Test that standard scale transforms work.  Does not test correctness,
        except reversibility [#2074]. Also tests that standard scales can't be
        converted to local scalesr•   r–   Zauto_downloadFr—   r,   rk   ÚlocalN)r   r   Úset_tempr   r   Úgetattrr4   rD   r3   r‘   r’   r   )	r?   r    r¡   Zscale1rQ   Zscale2rR   Zt21Zscale3r#   r#   r$   Útest_all_scale_transformsÉ  s"    ü

z#TestBasic.test_all_scale_transformsc              	   C   sZ  t ddd� t ddd� t ddd� t ddd� t dd	d
d� t ddd
d� t ddd
d� t ddd
d� t ddd
d� t dddd� t ddd
d� t dddd� t ddd� t dddd� t dddd
d� t dddd
d� t d d!d
d� t d"d!dd� t d#d$d%d&d'd(d)¡}t |d*d
d� t ||gd*d
d� t d+¡}t |d,d
d� t ||gd,d
d� d-S ).z.Create a time object using each defined formatç     BŸ@ÚdecimalyearrE   ç      Y@r=   r‡   rˆ   ç     xž@Úbyearr:   r.   ç     @Ÿ@ÚjyearzB1950.0Ú	byear_strzJ2000.0Ú	jyear_strz2000-01-01 12:23:34.0r,   z2000-01-01 12:23:34.0Zr-   z2000-01-01T12:23:34.0r†   z2000-01-01T12:23:34.0Zrƒ   r}   ç   @€OBAghä˜+é@rD   r   ri   z2000:001:12:23:34.0Úydayz2000:001:12:23:34.0ZéÐ  rI   rv   rm   rn   rH   é@â r‰   z2012-06-18T02:00:05.453000000Ú
datetime64N)r   r‰   r6   r¿   )r?   ÚdtÚdt64r#   r#   r$   Útest_creating_all_formatsá  s0    
z#TestBasic.test_creating_all_formatsc              
   C   s@  t ddd�}t|jdddd� t|jdddd� t|jd	d
dd� |jt ddddddd¡ksbt‚|jdkspt‚|jdks~t‚|j	dksŒt‚t|j
dd
dd� t|jdd
dd� |jdks¾t‚|jdksÌt‚t t¡� |j W 5 Q R X t t¡� |j W 5 Q R X t t¡� |j W 5 Q R X t t¡� |j W 5 Q R X dS )z¢
        Test transformation of local time to different formats
        Transformation to formats with reference time should give
        ScalevalueError
        r—   r®   ©r0   g[0²{¸BAg÷LêÚH>r   ©r   r   glÁŒÜ>ê@g5*ŒÇ)XŸ@g s­¨ÁnÁ=iÖ  rI   é   é   r   é%   i ¡ z2006-01-15T21:24:37.500z2006:015:21:24:37.500g~Gñ0+XŸ@g˜:À)XŸ@z	B2006.042z	J2006.041N)r   r   rD   ri   r³   r‰   r3   r†   r¼   rƒ   r¶   r¸   r¹   rº   r‘   r’   r   rˆ   r‡   r=   Ú	plot_daterŠ   r#   r#   r$   Útest_local_format_transformsü  sF    ü    ÿ   ÿz&TestBasic.test_local_format_transformsc              
   C   sº  t   ddddddd¡}t   ddd¡}t|d	d
d�}|jdks@t‚|j |ksNt‚|j|ks\t‚t|jd	d�}|j |ksxt‚t||gd	d�}t |j||gk¡s t‚tddd�}|j t   ddddddd¡ksÌt‚||| t d¡   dd¡}t|d	d�}|j	dk�st‚|d j|d k�st‚|d t|d ƒk�s8t‚t |j|k¡�sNt‚t |d j|d k¡�slt‚t |dd…df t|dd…df ƒk¡�sœt‚t|d ƒ|d k�s¶t‚dS )zŽ
        Test datetime format, including guessing the format from the input type
        by not providing the format keyword to Time.
        r½   rI   rv   rm   rn   rH   r¾   éÑ  r-   rŒ   ©r0   r`   z2000-01-02 03:04:05.123456000rÃ   ú2000-01-01 01:01:01.123456789r:   iAâ é   ©rn   rm   ©rv   rI   N©rv   r   )
r‰   r   r,   r3   rZ   r6   rd   rL   rM   rK   )r?   rÀ   Zdt2rA   rR   Údt3rT   r#   r#   r$   Útest_datetime"  s*     0zTestBasic.test_datetimec                 C   s  t  d¡}t  d¡}t|dddd�}|jdks2t‚|j|ks@t‚|j|ksNt‚t|jdd�}|j|ksjt‚t|dd	dd�}|jd
ksˆt‚|j|ks–t‚|j|ks¤t‚t|jdd�}|j|ksÀt‚t||gddd�}t  |j||gk¡sêt‚tddd�}|jt  d¡k�st‚||| t  d¡   dd	¡}t|ddd�}|j	dk�sHt‚|d j|d k�s`t‚|d t|d dd�k�s~t‚t  |j|k¡�s”t‚t  |d j|d k¡�s²t‚t  |d d …df t|d d …df dd�k¡�sæt‚t|d dd�|d k�st‚d S )Nú2000-01-02T03:04:05.123456789z
2000-01-02r-   rŒ   r¿   )r0   r`   r/   ú2000-01-02 03:04:05.123456789rÃ   rm   z2000-01-02 00:00:00.000©r0   r/   rÌ   r:   z2000-01-01T01:01:01.123456789rÍ   rn   rÎ   rÏ   rE   rI   rv   rÐ   )
r6   r¿   r   r,   r3   rZ   rd   rL   rM   rK   )r?   rÁ   Zdt64_2rA   rR   rÑ   rT   r#   r#   r$   Útest_datetime64A  s6    

4zTestBasic.test_datetime64c                 C   sÈ   d}t |dddd�}t|jdƒs$t‚t|jdƒs4t‚|jdksBt‚|jd	ksPt‚t |jd
dd�}t|j|ƒspt‚t |jddd�}t|j|ƒs�t‚t d	ddd�}t	j
|j|ddd�s¶t‚|jdksÄt‚dS )z%Besselian and julian epoch transformsg„*5‡ø¾BArD   r:   ro   r_   gSß‹|Ÿ@g2T°;Š|Ÿ@zB2015.136594zJ2015.134993r¶   r.   r¸   rË   g»½×Ùß|Û=r   r   N)r   Úallclose_yearr¶   r3   r¸   r¹   rº   r4   rD   r6   Úallclose)r?   rD   rA   rR   r#   r#   r$   Útest_epoch_transformc  s$       ÿ
zTestBasic.test_epoch_transformc              
   C   s~  ddg}t  t¡� t|ddd� W 5 Q R X t  t¡� tdddd� W 5 Q R X t  t¡� tg ƒ W 5 Q R X t  t¡� tdgd	gd
dd� W 5 Q R X t  t¡� tdd	d
dd� W 5 Q R X t  t¡� tddd� W 5 Q R X t  t¡� ttjddd� W 5 Q R X t  t¡�( t  t¡� tddd� W 5 Q R X W 5 Q R X t  t¡� tdƒ W 5 Q R X t  t¡� tdƒ W 5 Q R X dS )zWrong input type raises errorr�   é   r,   r-   r.   ú2000:001rD   r«   Úbadri   r:   z2005-08-04T00:01:02.000ZrÃ   z2000-01-02T03:04:05(TAI)z2000-01-02T03:04:05(TAIz2000-01-02T03:04:05(UT(NIST)N)r‘   r’   r“   r   r6   ÚnanÚwarnsr   )r?   r@   r#   r#   r$   Útest_input_validationv  s,     zTestBasic.test_input_validationc           	   
   C   st  dD �]h\}}}|d›d|d›�}|d›d|d›d|d›�}t  t¡� t|d dd�}W 5 Q R X |j|d kstt‚t|d	 dd�}|j|d	 ks–t‚t|d
 dd�}|j|d
 ks¸t‚t|d dd�}|j|d ksÚt‚|dkrð|d›d�}n|d d›d�}t  t¡� t|d dd�}W 5 Q R X |j|d k�s:t‚t|d dd�}t|d dd�}t|| jdƒst‚qdS )zlTime behaves properly near or in UTC leap second.  This
        uses the 2012-06-30 leap second for testing.))éÜ  ro   é   )éà  rÍ   é   Ú04dú-Ú02dz-01 23:59:60.0r-   rÃ   z-02 00:00:00.000z 23:59:59.900z 23:59:60.000z 23:59:60.999ro   z-07-01rI   z-01-01z 23:59:61.0z 00:00:00.000z	 23:59:59z	 00:00:00ç       @N)r‘   rÞ   r   r   r,   r3   r<   Úsec)	r?   ÚyearÚmonthÚdayZyyyy_mmZ
yyyy_mm_ddrQ   Zyyyy_mm_dd_plus1Út0r#   r#   r$   Útest_utc_leap_sec�  s*    zTestBasic.test_utc_leap_secc              	   C   sà  t ddd�}t ddgdd�}t ||gƒ}t|ƒdks8t‚|j|jksHt‚|j|jksXt‚t |jt |j	g|j
j	g¡k¡s~t‚t |ƒ}|js�t‚|j|jks t‚|j|jks°t‚t |j|jk¡sÆt‚t |dd�}|jdksàt‚t |j|jjk¡søt‚t ||gdd�}|jdk�st‚|j|jk�s*t‚t |jt |jj	g|jj	g¡k¡�sTt‚t d	d
¡}t ddd¡}t |dd…tjf | ddd�}t |dd… |dd… gƒ}|jdk�sºt‚t t¡� t |dd� W 5 Q R X dS )z(Initialize from one or more Time objectsú2007:001r:   rÃ   z
2007-01-02z
2007-01-03r-   rm   r;   r«   g    Àjè@r   rs   rt   Nri   r.   rv   rn   rH   )rm   rH   r®   )r   rx   r3   r0   r/   r6   rd   rZ   Zconcatenater¼   r:   rJ   r-   r;   rL   r|   rK   r‘   r’   r“   )r?   rQ   rR   rT   ri   r~   rU   r¬   r#   r#   r$   Útest_init_from_time_objects³  s4    &
* z%TestBasic.test_init_from_time_objectsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rB   rV   r‘   ÚmarkÚparametrizer   r   r\   rf   r   r‹   r�   r”   r¢   r¥   rª   r­   r±   rÂ   rÉ   rÒ   rÖ   rÙ   rß   rí   rï   r#   r#   r#   r$   r)   7   s0   (

c"G&"#r)   c                   @   sš   e Zd ZdZej dedddd�eddd	d
dddœddd�ee 	d¡ddd�ee
 
dddd
dd¡ddd�g¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestVal2zTests related to val2Údú2001:001Zignoredr-   )rO   rS   r0   éß  rv   rm   rÍ   é   çü©ñÒM"-@©ré   rê   rë   ÚhourÚminuteÚsecondz
2005-02-25r½   rI   r   c              	   C   s$   t  t¡� tf |Ž W 5 Q R X dS )zKTest that providing val2 is for string input lets user know we won't use itN©r‘   r’   r“   r   )r?   r÷   r#   r#   r$   Útest_unused_val2_raisesâ  s    z TestVal2.test_unused_val2_raisesc                 C   sL   t ddgddgddd�}|jd |jd ks0t‚|jd |jd ksHt‚dS )	zVarious tests of the val2 inputr   r«   ri   r:   r.   r   rI   N)r   ri   r3   rD   rŠ   r#   r#   r$   Ú	test_val2ý  s    zTestVal2.test_val2c              	   C   sz   t  dd¡}t  ddd¡}t|d d …t jf |ddd�}|jd	ksFt‚t t¡�  tddgdd
dgddd� W 5 Q R X d S )Nr«   g    àjè@r   rs   rt   ri   r-   r.   )r˜   rH   ç      ð?rç   r:   )	r6   rL   r   r|   rK   r3   r‘   r’   r“   )r?   ri   r~   rA   r#   r#   r$   Ú test_val_broadcasts_against_val2  s    z)TestVal2.test_val_broadcasts_against_val2c                 C   sÞ   dt  d¡ d d …d f }t jddddd�}t||dd	d
�}t|d|  d| | dd	d
�}tdddd	d
�}||d< ||d< |d |d ks”tdƒ‚|d |d ks¬tdƒ‚|d |d ksÄtdƒ‚t  ||k¡sÚtdƒ‚d S )Né��% rm   r   rI   rn   F©ZendpointrD   r:   ©rO   rS   r/   r0   é†â  ç333333Ó?)rI   rv   úwriting worked)r   rv   ú"broadcasting didn't cause problems)rI   rI   úbehaved as expected)r6   rL   Úlinspacer   r3   rd   ©r?   rO   rS   rA   Zt_bZt_ir#   r#   r$   Útest_broadcast_not_writable  s     z$TestVal2.test_broadcast_not_writablec                 C   s²   dt  d¡ }t  d¡}t||ddd�}t|d|  d| | ddd�}tdd	ddd�}||d< ||d< |d |d ks€td
ƒ‚|d |d ks˜tdƒ‚t  ||k¡s®tdƒ‚d S )Nr  rm   rI   rD   r:   r  r   r  r	  r
  r  r  )r6   rL   r   r3   rd   r  r#   r#   r$   Útest_broadcast_one_not_writable  s    
 z(TestVal2.test_broadcast_one_not_writableN)rð   rñ   rò   ró   r‘   rô   rõ   Údictr6   r¿   r‰   r  r  r  r  r  r#   r#   r#   r$   rö   ß  s8   úö  ÿñþ
rö   c                   @   sh   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestSubFormatz-Test input and output subformat functionalityc              	   C   sz   ddddg}t |ddd�}t |jt dd	d
dg¡k¡s<t‚dddg}t |dddd�}t |jt d	d
dg¡k¡svt‚dS )úInput subformat selectionú
2000-01-01ú2000-01-01 01:01ú2000-01-01 01:01:01ú2000-01-01 01:01:01.123r,   r:   r.   ú2000-01-01 00:00:00.000z2000-01-01 01:01:00.000z2000-01-01 01:01:01.000zdate_*©r/   r0   Ú	in_subfmtN©r   r6   rd   r,   r7   r3   r>   r#   r#   r$   Útest_input_subformat(  s:    üüÿÿÿ
ýÿÿÿz"TestSubFormat.test_input_subformatc              	   C   s*   t  t¡� tddddd� W 5 Q R X dS )zFailed format matchingr  r,   r:   ra   r  Nr   ©r?   r#   r#   r$   Útest_input_subformat_failL  s    z'TestSubFormat.test_input_subformat_failc              	   C   s*   t  t¡� tddddd� W 5 Q R X dS )zNon-existent input subformatr  r,   r:   zdoesnt existr  Nr   r  r#   r#   r$   Útest_bad_input_subformatQ  s       ÿz&TestSubFormat.test_bad_input_subformatc              	   C   sB   ddddg}t |dddd�}t |jt d	dddg¡k¡s>t‚d
S )r  r  r  r  r  r,   r:   Údate_hmrb   z2000-01-01 00:00Nr  r>   r#   r#   r$   Útest_output_subformatX  s"    üüÿÿÿz#TestSubFormat.test_output_subformatc                 C   sÖ   dddg}t |ddd�}t |jt dddg¡k¡s8t‚t |dd	d
�}t |jt dddg¡k¡sft‚d|d< t |ddd�}t |jt dddg¡k¡sœt‚d|d< t |ddd�}t |jt dddg¡k¡sÒt‚dS )z"FITS format includes bigger years.r  z2000-01-01T01:01:01z2000-01-01T01:01:01.123rƒ   r:   r.   z2000-01-01T00:00:00.000z2000-01-01T01:01:01.000zlong*©r/   rc   z+02000-01-01T00:00:00.000z+02000-01-01T01:01:01.000z+02000-01-01T01:01:01.123z-00594-01-01rv   z-00594-01-01T00:00:00.000z+10594-01-01z+10594-01-01T00:00:00.000N)r   r6   rd   rƒ   r7   r3   )r?   r@   rA   rR   rT   rU   r#   r#   r$   Útest_fits_formatn  s^    
ýÿÿÿýÿÿÿýÿÿÿýÿÿÿzTestSubFormat.test_fits_formatc                 C   sb   ddg}t |ddd�}d|_t |jt ddg¡k¡s:t‚d	|_t |jt d
dg¡k¡s^t‚dS )zYear:Day_of_year formatz
2000-12-01z2001-12-01 01:01:01.123r,   r:   r.   r   z2000:336:00:00z2001:335:01:01Ú*z2000:336:00:00:00.000z2001:335:01:01:01.123N)r   rc   r6   rd   r¼   r7   r3   r>   r#   r#   r$   Útest_yday_format¤  s    ÿzTestSubFormat.test_yday_formatc              	   C   sž   t dddd�}|jdkst‚t dddd�}|jdks8t‚t dddd�}|jdksTt‚t t¡� t dd	d
d� W 5 Q R X t t¡� t dd
d� W 5 Q R X dS )z&Test for issues related to scale inputr´   r=   r-   r.   r‡   r:   rˆ   rµ   r¶   z	bad scalez2000:001:00:00:00rÃ   N)r   r0   r3   r‘   r’   r   rŠ   r#   r#   r$   Útest_scale_input°  s    zTestSubFormat.test_scale_inputc              
   C   sv  dD ]l}t  t¡� t|d ƒ}W 5 Q R X |j|d ks<t‚t|d d|d  d¡… d|d d�}||kst‚qt  t¡� tdƒ}W 5 Q R X |j}|jd	ks¤t‚t  t¡� td
ƒ}W 5 Q R X |j	}|jdksÖt‚t  t¡� td
dd�}W 5 Q R X |jdk�st‚t  t¡� tddd�}W 5 Q R X |jdk�s:t‚t  
t¡�( t  t¡� td
dd�}W 5 Q R X W 5 Q R X dS )ziTest that the previous FITS-string formatting can still be handled
        but with a DeprecationWarning.))z2000-01-02(TAI)r:   )z!1999-01-01T00:00:00.123(ET(NIST))r;   )z2014-12-12T01:00:44.1(UTC)r-   r   rI   Nú(r†   r.   z"1999-01-01T00:00:00.123456789(UTC)z1999-01-01T00:00:32.123z"1999-01-01T00:00:32.123456789(TAI)z1999-01-01T00:00:00.123r:   rÃ   z!1999-01-01T00:00:32.123456789(ET)r;   r-   )r‘   rÞ   r   r   r0   r3   Úindexr:   r†   r-   r’   r“   )r?   ÚinputsrA   rR   r#   r#   r$   Útest_fits_scaleÃ  s,    (zTestSubFormat.test_fits_scalec                 C   s¢   t ddd�}|jdkst‚t ddd�}|jdks4t‚t ddd�}|jdksNt‚d	D ]}t |ƒ}|jdksRt‚qRt d
dd�}|jdksˆt‚t dƒ}|jdksžt‚dS )z'Test behavior when no scale is providedr´   r=   rE   r;   r‡   r-   rˆ   r:   )rÛ   z2000-01-01T00:00:00çfffff@Ÿ@r¶   ÚJ2000N)r   r0   r3   )r?   rA   ra   r#   r#   r$   Útest_scale_defaultè  s    z TestSubFormat.test_scale_defaultc                 C   sZ  t dddd�}|jjdkst‚t |ddd�}|jdks:t‚d	}t |dd
d�}t|j|ƒs\t‚t|j|ƒslt‚t|jj|ƒs~t‚t|jj|ƒs�t‚|jdksžt‚t dd
d�}t|j|ƒsºt‚t|jj|ƒsÌt‚dD ]4}t d|d�}t |j|dd�}t	||ƒjdksÐt‚qÐt dd
d�}t|jdƒ�s$t‚t|jjdƒ�s8t‚t dd
d�}t|jdƒ�sVt‚dS )z,Test time formats derived from EpochFromTimer   r=   r:   r.   z1998-01-01 00:00:00.000r;   r,   rÕ   r1   r-   z2010:001:00:00:00.000rÃ   )r-   r;   rÛ   r‡   r  z2013-05-20 21:18:46g  €Í¤fÔAz2004-09-16T23:59:59g  À?ŠRÐAN)
r   r;   r,   r3   rZ   r<   r=   r¼   r‡   r°   )r?   rA   rR   Zt_cxcsecr0   r#   r#   r$   Útest_epoch_timesû  s.    zTestSubFormat.test_epoch_timesc                 C   sd   zddl m} W n tk
r(   d}Y nX |t ddd¡ƒ}tddd�}tj|j|d	dd
�s`t‚dS )a‡  Test the plot_date format.

        Depending on the situation with matplotlib, this can give different
        results because the plot date epoch time changed in matplotlib 3.3. This
        test tries to use the matplotlib date2num function to make the test
        independent of version, but if matplotlib isn't available then the code
        (and test) use the pre-3.3 epoch.
        r   )Údate2numg    H&Ar½   rI   z2000-01-01 00:00:00r-   rÃ   gñhãˆµøä>rÄ   N)	Zmatplotlib.datesr/  ÚImportErrorr‰   r   r6   rØ   rÈ   r3   )r?   r/  rO   rA   r#   r#   r$   Útest_plot_date  s    	
zTestSubFormat.test_plot_dateN)rð   rñ   rò   ró   r  r  r  r!  r#  r%  r&  r*  r-  r.  r1  r#   r#   r#   r$   r  %  s   $6%$r  c                
   @   s†  e Zd Zdd„ Zejje ej	¡j
e e¡j
kdd�dd„ ƒZejje ej	¡j
e e¡j
kdd�dd„ ƒZejje ej	¡j
e e¡j
kdd�ej d	d
ddg¡dd„ ƒƒZdd„ Zej dd¡dd„ ƒZej ddddddddg¡dd„ ƒZdd „ Zd!d"„ Zej d	d#d
ddd$d%g¡d&d'„ ƒZd(d)„ Zej d*d+d,ej	fd+d-efd+d.efg¡d/d0„ ƒZd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;S )<ÚTestNumericalSubFormatc                 C   sÂ  t ddd�}|t dddd�ks"t‚|jdks0t‚|jdks>t‚| d¡dksPt‚|jddd�dksft‚| dd	¡d
kszt‚t d¡t d¡ }tj|jddd�|dt t	¡j
d�s¶t‚d|_|jdksÊt‚| d¡dksÜt‚|jdksêt‚|jdd	d�d
k�st‚|jddd�dk�st‚d|_tj|j|dt t	¡j
d��sBt‚tj|jdd d�|dt t	¡j
d��slt‚tj|j|dt t	¡j
d��sŽt‚|jddd�dk�s¦t‚|jddd�dk�s¾t‚d S )Nú54321.000000000001ri   rE   é1Ô  çê-�™—q=ç     †ê@Ústr©ÚsubfmtÚbytess   54321.000000000001Úlongr   r   Úfloatr   )r   r3   ri   rZ   Úto_valuer6   Ú
longdoublerØ   Úfinfor<  Úepsrc   )r?   rA   Zexpected_longr#   r#   r$   Útest_explicit_example8  s>    
ü
"
ü"z,TestNumericalSubFormat.test_explicit_examplez long double is the same as float©Úreasonc                 C   s  d}t dt tj¡j  d t t¡jƒ}t |¡t |¡ }||ksNtdƒ‚t|dd�}t||dd�}t	|| ƒdt
j ks‚t‚t|| dd�}|t|dd�ks¦t‚||ks²t‚|jdksÀt‚tj|jdd	d
�|dt t¡jd�sèt‚t|dd	d�}tj|j|dt t¡jd��st‚d S )Nr4  rç   é   zlongdouble failure!ri   rE   g      4@r6  r;  r8  r   r   r"  )Úmaxr6   r?  r>  Únmantr<  r@  r3   r   Úabsr£   ZpsrZ   rØ   r=  )r?   ÚiÚfZmjd_longrA   ÚexpectedZt_floatrR   r#   r#   r$   Útest_explicit_longdouble[  s&    &
ü
z/TestNumericalSubFormat.test_explicit_longdoublec                 C   s¢   d}t dt tj¡j  d t t¡jƒ}t||dd�}tt |¡|dd�}t|t |¡dd�}tt |¡t |¡dd�}||  kr˜|  kr˜|ksžn t‚dS )znEnsure either val1 or val2 being longdouble is possible.

        Regression test for issue gh-10033.
        r4  rç   rD  ri   rE   N)	rE  r6   r?  r>  rF  r<  r@  r   r3   )r?   rH  rI  rQ   rR   rT   rU   r#   r#   r$   Ú test_explicit_longdouble_one_valv  s    	&z7TestNumericalSubFormat.test_explicit_longdouble_one_valÚfmtri   r‡   r=   c           	      C   s´   t tddd�|ƒ}t |¡}t t¡j|dkr2dnd }|t|t tj¡j d |ƒ }||kshtdƒ‚t||d�}t||d�}||ksŒt‚|j	|dd	�}tj
||d
|d�s°t‚d S )Né�â  ri   rE   r  g     õ@rv   zlongdouble weird!r;  r8  r   r   )r°   r   r6   r>  r?  r<  r@  rE  r3   r=  rØ   )	r?   rM  Zt_fmtZ
t_fmt_longr   Zt_fmt_long2ÚtmÚtm2Ztm_long2r#   r#   r$   Útest_longdouble_for_other_types‡  s    
 ÿz6TestNumericalSubFormat.test_longdouble_for_other_typesc                 C   s‚   d}|  d¡\}}tt|ƒtd| ƒdd�}t|dd�}t| d¡dd�}tt|ƒdd�}||ksft‚||ksrt‚||ks~t‚d S )Nz54321.01234567890123456789Ú.ri   rE   Úascii)Úsplitr   r<  Úencoder   r3   )r?   ÚsrH  rI  rA   Zt_strZt_bytesZ	t_decimalr#   r#   r$   Útest_subformat_inputœ  s    z+TestNumericalSubFormat.test_subformat_inputrc   )r7  r:  c                 C   sœ   d}t  dddg¡}t||d|d�}|j}t jddd	g|d
�}t  ||k¡sPt‚t  t|dd�|k¡sjt‚t||dd�}|jd|d�}t  ||k¡s˜t‚d S )Nr4  r   g•Ö&è.>r5  ri   r"  z54321.0z54321.000000001r3  rp   rE   r8  )r6   r7   r   rZ   rd   r3   r=  )r?   rc   rH  rI  rA   r[   rJ  Zt_mjd_subfmtr#   r#   r$   Útest_subformat_output§  s     ÿz,TestNumericalSubFormat.test_subformat_outputzfmt,string,val1,val2)rD   z2451544.5333981g   @,´BAgR@FŽ¡?)r³   z
2000.54321r·   gn†ðùaá?)r=   ú100.0123456çø3EÊ Y@N)r‡   rY  rZ  N)rˆ   rY  rZ  N)r¶   z1950.1gfffffxž@N)r¸   z2000.1r+  Nc                 C   s<   t ||d�}|t |||d�ks"t‚|j|dd�|ks8t‚d S )NrE   r7  r8  )r   r3   r=  )r?   rM  ÚstringrP   rS   rA   r#   r#   r$   Ú"test_explicit_string_other_formats¸  s    z9TestNumericalSubFormat.test_explicit_string_other_formatsc                 C   s.   t dddd�}d|_d|_|j d¡s*t‚d S )NÚ2001r¸   r:   r.   ri   r7  Ú5)r   r/   rc   rZ   Ú
startswithr3   rŠ   r#   r#   r$   Útest_basic_subformat_settingÉ  s    z3TestNumericalSubFormat.test_basic_subformat_settingc                 C   s>   t dddd�}|jddd� d|jd	 ks.t‚| dd¡ d S )
Nr]  r¸   r:   r.   ri   r7  r8  )ri   r7  r/   )r   r=  Úcacher3   rŠ   r#   r#   r$   Ú)test_basic_subformat_cache_does_not_crashÏ  s    z@TestNumericalSubFormat.test_basic_subformat_cache_does_not_crashrD   rˆ   r¸   c              	   C   s„   t dddd�}||_tƒ �}d|_| |d¡}W 5 Q R X t dddd�}||_tƒ �}d|_| |d¡}W 5 Q R X ||ks€tdƒ‚d S )	Nr]  r¸   r:   r.   rv   r7  é(   z:String representation should not depend on Decimal context)r   r/   r   Úprecr=  r3   )r?   rM  rA   ÚctxÚt_s_2rR   Út2_s_40r#   r#   r$   Ú+test_decimal_context_does_not_affect_stringÕ  s    ÿþzBTestNumericalSubFormat.test_decimal_context_does_not_affect_stringc              	   C   sž   t ddddd�}tƒ �}d|_|jddd�}W 5 Q R X t ddddd�}tƒ �(}d	|_|jddd�}|jddd�}W 5 Q R X ||ksŠtd
ƒ‚||ksštdƒ‚d S )NrN  g›+¡†›„=ri   r:   r  rv   Údecimalr8  rc  z6Should be the same but cache might make this automaticz3Different precision should produce the same results)r   r   rd  r=  r3   )r?   rA   re  rf  rR   Zt_s_40rg  r#   r#   r$   Útest_decimal_context_cachingå  s    z3TestNumericalSubFormat.test_decimal_context_cachingzf, s, trè   r;  ri  r7  c                 C   sl   t dddd�t dddd� }| ||¡}t||ƒs6t‚||_||_t|j|ƒsRt‚t| |d ¡|ƒsht‚d S )NÚ58000ri   r:   r.   Z58001)r   r=  r¦   r3   r/   rc   rZ   )r?   rI  rV  rA   rÀ   rZ   r#   r#   r$   Útest_timedelta_basicò  s    	  ÿz+TestNumericalSubFormat.test_timedelta_basicc              	   C   sR   t dƒ}tjtdd�� | ¡  W 5 Q R X tjtdd�� | d¡ W 5 Q R X d S )Nr,  zmissing.*required.*'format'rŽ   úformat must be one ofZjulian)r   r‘   r’   Ú	TypeErrorr=  r“   rŠ   r#   r#   r$   Útest_need_format_argument  s
    z0TestNumericalSubFormat.test_need_format_argumentc              	   C   sª   t jtdd�� tdddd� W 5 Q R X t jtdd�� tt d¡ddd� W 5 Q R X t jtdd�� tddd	d� W 5 Q R X t jtdd�� tddd
d� W 5 Q R X d S )Nznot among selectedrŽ   rk  ri   r<  ©r/   r  rN  ç     Rì@r7  r;  )r‘   r’   r“   r   r6   r>  r  r#   r#   r$   Útest_wrong_in_subfmt  s    z+TestNumericalSubFormat.test_wrong_in_subfmtc              	   C   sx   t ddd�}tjtdd�� |jddd� W 5 Q R X tjtdd�� d|_W 5 Q R X tjtdd�� d|_W 5 Q R X d S )Nrq  ri   rE   zmust match onerŽ   Úparrotr8  ©r   r‘   r’   r“   r=  rc   r  rŠ   r#   r#   r$   Útest_wrong_subfmt  s    z(TestNumericalSubFormat.test_wrong_subfmtc              	   C   sÆ   t dƒ}d}tjt|d�� |jddd� W 5 Q R X tjt|d�� d|_W 5 Q R X tjt|d�� t ddd� W 5 Q R X tjt|d�� d|_W 5 Q R X tjt|d�� t dddd� W 5 Q R X d	S )
z-Test case where format has no defined subfmtsr,  z*subformat not allowed for format jyear_strrŽ   rº   rs  r8  ©rc   rp  Nrt  )r?   rA   r�   r#   r#   r$   Útest_not_allowed_subfmt%  s    z.TestNumericalSubFormat.test_not_allowed_subfmtc                 C   s@   t ddd�}|jdkst‚d|_|jdks.t‚|jdks<t‚d S )Nú
2001-01-01r   rv  rº   r$  z	J2001.001)r   rc   r3   r/   rZ   rŠ   r#   r#   r$   Ú(test_switch_to_format_with_no_out_subfmt8  s
    z?TestNumericalSubFormat.test_switch_to_format_with_no_out_subfmtN)rð   rñ   rò   rA  r‘   rô   Úskipifr6   r?  r>  r@  r<  rK  rL  rõ   rQ  rW  rX  r\  r`  rb  rh  rj  r   r7  rl  ro  rr  ru  rw  ry  r#   r#   r#   r$   r2  7  sd   #þ
þ
þ
ùþ


ýþ
r2  c                   @   s   e Zd ZdZdd„ ZdS )ÚTestSofaErrorsz9Test that erfa status return values are handled correctlyc              	   C   sþ   t jdgt jd�}t jdgt jd�}t jdgt jd�}t t¡� t |||¡\}}W 5 Q R X d|d< d|d< t t¡� t |||¡\}}W 5 Q R X d|d< tjt	dd��}t |||¡\}}W 5 Q R X t
|ƒdksÚt‚t|d	gƒsêt‚t|d
gƒsút‚d S )Nr½   rp   ixìÿÿr   rv   zbad day    \(JD computed\)rŽ   rI   r»   g    À(ê@)r6   r7   Zintcr‘   r’   r“   ÚerfaZcal2jdrÞ   r   rx   r3   r4   )r?   ZiyZimÚidZdjm0ZdjmÚwr#   r#   r$   Útest_bad_timeF  s    zTestSofaErrors.test_bad_timeN)rð   rñ   rò   ró   r  r#   r#   r#   r$   r{  C  s   r{  c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚTestCopyReplicatez3Test issues related to copying and replicating datac                 C   s˜   t jdgt jd�}t|ddd�}t|j|ƒs0t‚d|d< t|j|ƒrHt‚t jdgt jd�}t|d	dd�}t|jdgƒszt‚d
|d< t|jdgƒs”t‚dS )zInternals are never mutable.g   @(±BArp   rD   r:   r.   i„% r   r«   ri   r   N)r6   r7   Údoubler   r4   rD   r3   )r?   ZjdsrA   Zmjdsr#   r#   r$   Útest_immutable_input^  s    z&TestCopyReplicate.test_immutable_inputc                 C   sê   t dgdddd�}|j}|jj ¡ }| ¡ }|j|jks<t‚|j|jksLt‚|j|jks\t‚|j|jkslt‚|j	 j
d7  _
|`|`|j|jks”t‚|j|ks¢t‚|jj}d|d< |jj|ksÂt‚|jj|jjksÖt‚|jj|ksæt‚d	S )
zTest replicate methodrÛ   r¼   r:   ©rj   rj   rk   r´   r   r#   N)r   r¼   rl   r§   r^   Ú	replicater3   r/   r0   re   r5   ra  ©r?   rA   Zt_ydayZt_loc_xrR   Zt2_loc_x_viewr#   r#   r$   Útest_replicatel  s$    z TestCopyReplicate.test_replicatec                 C   s¸   t ddddd�}|j}|jj ¡ }| ¡ }|j|jks:t‚|j jd7  _|`|`|j|jksbt‚|j|kspt‚|jj}d|d< |jj|ks�t‚|jj|jjks¤t‚|jj|ks´t‚d	S )
zTest copy methodrÛ   r¼   r:   rƒ  rk   r´   r   r#   N)	r   r¼   rl   r§   r^   r3   re   r5   ra  r…  r#   r#   r$   Ú	test_copy‡  s    zTestCopyReplicate.test_copyN)rð   rñ   rò   ró   r‚  r†  r‡  r#   r#   r#   r$   r€  [  s   r€  c                   @   s4   e Zd ZdZdd„ Zej ddddg¡dd	„ ƒZd
S )ÚTestStardatez(Sync chronometers with Starfleet Commandc                 C   sj   t tddd�jƒd d… dks"t‚t tddd�jƒd d… dksDt‚t td	dd�jƒd d… d
ksft‚d S )Nz
2320-01-01r:   rÃ   r˜   z1368.99z
2330-01-01é   z10552.76z
2340-01-01z19734.02)r7  r   Ústardater3   r  r#   r#   r$   Útest_iso_to_stardate£  s    ""z!TestStardate.test_iso_to_stardateÚdates)i'  z2329-05-26 03:02)i N  z2340-04-15 19:05)i0u  z2351-03-07 11:08c                 C   s4   |\}}t |dd�}t |ddd�}|j|ks0t‚d S )NrŠ  rE   r,   r   r"  )r   rZ   r3   )r?   rŒ  rŠ  r,   Zt_starZt_isor#   r#   r$   Útest_stardate_to_iso¨  s    	z!TestStardate.test_stardate_to_isoN)	rð   rñ   rò   ró   r‹  r‘   rô   rõ   r�  r#   r#   r#   r$   rˆ     s   ýþrˆ  c                  C   sF   t dddd�} t | ¡}t | ¡}| j|jks2t‚| j|jksBt‚d S )NrÛ   r¼   r:   r.   )r   r^   r   rD   r3   )rA   rR   rT   r#   r#   r$   Útest_python_builtin_copy·  s
    

rŽ  c                  C   sL   t j  ¡ } t ¡ }|jdks t‚|jdks.t‚|j |  }| ¡ dk sHt‚dS )zC
    Tests creating a Time object with the `now` class method.
    r‰   r-   rw   N)r‰   Úutcnowr   Únowr/   r3   r0   Útotal_seconds)r�  rA   rÀ   r#   r#   r$   Útest_nowÀ  s    

r’  c                  C   sŒ   t ddd�} | jdkst‚t dddgdd�} t | jd	d
gk¡sDt‚t dƒj}t dƒj}|| }t | j|d|  |d|  gk¡sˆt‚d S )Nrø   r¼   rE   g     DŸ@r·   ç      à?g      è?r³   r²   g     CŸ@rÛ   )r   r³   r3   r6   rd   rZ   rD   )rA   Zjd0r5   Zd_jdr#   r#   r$   Útest_decimalyearÕ  s    

r”  c                  C   sX   t dddd�} | jdkst‚t dddd�} | jdks8t‚t dddd�} | jd	ksTt‚d S )
Ng   €QD:ArD   r:   r.   z0001-01-01T00:00:00.000g   €ãB:Az+00000-01-01T00:00:00.000g   €vA:Az-00001-01-01T00:00:00.000©r   rƒ   r3   ©rA   r#   r#   r$   Útest_fits_year0â  s    r—  c                  C   sZ   t dddd�} | jdkst‚t dddd�} | jdks8t‚t ddddd�} | jd	ksVt‚d S )
Ng    ‹TArD   r:   r.   z+10000-01-01T00:00:00.000g   à/TAz9999-01-01T00:00:00.000g)QÎ ÈEè¾z9999-12-31T23:59:59.000r•  r–  r#   r#   r$   Útest_fits_year10000ë  s    r˜  c                  C   s"   t dddd�} dt| ƒkst‚d S )NrÛ   r¼   r:   r.   r-   )r   Údirr3   r–  r#   r#   r$   Útest_dirô  s    rš  c                  C   s®   t  ddd¡} | D ]:}t|dd�}t  |j¡|jks8t‚t  |j¡dkst‚qt| dd�}t  t  |j¡|jk¡svt‚t  t  |j¡dk¡s�t‚t  	t  |j¡dk¡sªt‚dS )zyTest that jd1/jd2 in a TimeFromEpoch format is always well-formed:
    jd1 is an integral value and abs(jd2) <= 0.5.
    r   g     ¤ÿ@é1   r=   rE   r“  N)
r6   r  r   Úroundr5   r3   rG  r9   rd   Úany)Zcxcsecsr=   rA   r#   r#   r$   Útest_time_from_epoch_jdsù  s    rž  c                  C   sV   t t dd¡ddd�} t| ƒdks&t‚t| d ƒdks:t‚t| dd… ƒd	ksRt‚dS )
zCAny Time object should evaluate to True unless it is empty [#3520].rg   rh   ri   r-   r.   Tr   NF)r   r6   rL   Úboolr3   r–  r#   r#   r$   Ú	test_bool  s    r   c               	   C   sð   t t dd¡ddd�} t| ƒdkr,| jdks0t‚t t dd¡ dd¡ddd�}t|ƒdkrd|jdksht‚| d	d
… }t|ƒd
krŠ|jd
ksŽt‚| d	d… }t|ƒdkr°|jdks´t‚| d }t t	¡�}t|ƒ W 5 Q R X dt
|jƒksìt‚d	S )zBCheck length of Time objects and that scalar ones do not have one.rg   rh   ri   r-   r.   r�   rv   rH   NrI   r   r   )r   r6   rL   rx   rY   r3   rM   r‘   r’   rn  r7  rZ   )rA   rQ   rR   rT   rU   Úerrr#   r#   r$   Útest_len_size  s    r¢  c               	   C   sD   t ddd�} d| _t t¡� | j | j| jjks6t‚W 5 Q R X dS )z�guard against recurrence of #1122, where TimeFormat class looses uses
    attributes (delta_ut1_utc here), preventing conversion to unix, cxcz
1900-01-01r„   rÃ   r   N)r   r‚   r‘   rÞ   r   r‡   r-   r3   r–  r#   r#   r$   Útest_TimeFormat_scale'  s
    r£  c                 C   s$   |   dd¡ tt ¡ jddd� d S )Nz%astropy.utils.iers.conf.auto_downloadTr=   r„   r.   )Úsetattrr   r�  r=   )Zmonkeypatchr#   r#   r$   Útest_scale_conversion1  s    r¥  c                  C   sn   t  ddg¡} |  d¡}|  d¡}t| dd�}t|dd�}t|dd�}t  ||k¡sXt‚t  ||k¡sjt‚dS )z@Ensure that bigendian and little-endian both work (closes #2942)g     áé@g     ^ê@z>f8z<f8ri   rE   N)r6   r7   Úastyper   rd   r3   )ri   Z
big_endianZlittle_endianZtime_mjdZtime_bigZtime_littler#   r#   r$   Útest_byteorder:  s    

r§  c               	   C   sV   G dd„ dt jƒ} t j dddddd| ƒ d	�}t|ƒ}|jt   dddd
dd¡ksRt‚dS )zJ
    Test #3160 that time zone info in datetime objects is respected.
    c                   @   s   e Zd Zdd„ ZdS )z"test_datetime_tzinfo.<locals>.TZm6c                 S   s   t jdd�S )Niúÿÿÿ)Úhours)r‰   Ú	timedelta)r?   rÀ   r#   r#   r$   Ú	utcoffsetL  s    z,test_datetime_tzinfo.<locals>.TZm6.utcoffsetN)rð   rñ   rò   rª  r#   r#   r#   r$   ÚTZm6K  s   r«  éÒ  rI   rv   r�   rm   rn   )Útzinfoé   N)r‰   r­  r   rZ   r3   )r«  r÷   rA   r#   r#   r$   Útest_datetime_tzinfoF  s    r¯  c                  C   sB   G dd„ dt ƒ} tddd�}|jdks*t‚|jtdƒjks>t‚dS )z@
    Test having a custom subfmts with a regular expression
    c                   @   s   e Zd ZdZdZdS )z(test_subfmts_regex.<locals>.TimeLongYearÚlongyear))ra   z(?P<year>[+-]\d{5})-%m-%dz{year:+06d}-{mon:02d}-{day:02d}N)rð   rñ   rò   ÚnameÚsubfmtsr#   r#   r#   r$   ÚTimeLongYearY  s   r³  ú+02000-02-03r°  rE   z
2000-02-03N)r   r   rZ   r3   rD   )r³  rA   r#   r#   r$   Útest_subfmts_regexT  s    
rµ  c                  C   s~   ddddt   ddddd¡fd	fD ]X\} }td
dd�}| ¡ }| |_|j|ksPt‚|jj|jjksdt‚|jj|jjks t‚q dS )z2
    Test basics of setting format attribute.
    )rD   g   À<´BA)ri   g     /é@)r=   gþÔxFo�Ar‰   r½   rv   rm   r   )r,   z2000-02-03 00:00:00.000r´  rƒ   rE   N)	r‰   r   r„  r/   rZ   r3   re   r5   r9   )r/   rZ   rA   rì   r#   r#   r$   Útest_set_format_basich  s    ûr¶  c                  C   sH   t ddd�} t| j| j dƒs"t‚t ddd�} t| j| j dƒsDt‚d S )Nú
2020-01-01r-   rÃ   g     €B@z
1970-01-01gõ¢v¿
  @)r   r<   Zunix_tair‡   r3   r–  r#   r#   r$   Útest_unix_tai_format|  s    r¸  c                  C   sp   t ddddd�} |  ¡ }d| _| jdks,t‚| jdks:t‚| jdksHt‚d| _| j|jks^t‚| jdkslt‚dS )	zK
    Set format and round trip through a format that shares out_subfmt
    r´  rƒ   Zdate_hmsrH   )r/   rc   r`   r†   z2000-02-03T00:00:00.00000N)r   r^   r/   r`   r3   rc   rZ   )rA   Ztcr#   r#   r$   Útest_set_format_shares_subfmtƒ  s    r¹  c                  C   sV   t dddd�} d| _| jdks"t‚| jdks0t‚d| _| jdksDt‚| jdksRt‚dS )	zS
    Set format and round trip through a format that does not share out_subfmt
    r´  rƒ   Zlongdater"  r†   r$  z2000-02-03T00:00:00.000N)r   r/   rc   r3   rZ   r–  r#   r#   r$   Ú%test_set_format_does_not_share_subfmt”  s    rº  c               	   C   sD   t ddd�} t t¡�}| jdd� W 5 Q R X dt|jƒks@t‚dS )z`
    Passing a bad format to replicate should raise ValueError, not KeyError.
    PR #3857.
    rî   r:   rÃ   Zdefinitely_not_a_valid_formatrE   rm  N)r   r‘   r’   r“   r„  r7  rZ   r3   ©rQ   r¡  r#   r#   r$   Útest_replicate_value_error£  s    r¼  c               	   C   sR   t ddd�} d| jkst‚t t¡�}t | dd� W 5 Q R X dt|jƒksNt‚dS )zw
    Make sure that 'astropy_time' format is really gone after #3857.  Kind of
    silly test but just to be sure.
    rî   r:   rÃ   Zastropy_timerE   rm  N)r   r   r3   r‘   r’   r“   r7  rZ   r»  r#   r#   r$   Útest_remove_astropy_time®  s
    r½  c                  C   s6   t  ¡ } t| ƒrt‚t ddgddd�}t|ƒs2t‚dS )z³
    Ensure that scalar `Time` instances are not reported as iterable by the
    `isiterable` utility.

    Regression test for https://github.com/astropy/astropy/issues/4048
    r*   r+   r,   r-   r.   N)r   r�  r   r3   )rQ   rR   r#   r#   r$   Útest_isiterableº  s    ýr¾  c               	   C   sð   t dtj dd�} tdƒ}| | ¡}| ¡ t dd¡ks<t‚t|ƒ}|  |j¡| ¡ ks\t‚||ksht‚tdddgƒ}| | ¡}t|ƒ}t	|j|ƒD ]\}}|  |¡| ¡ ks”t‚q”t
 ||k¡sÆt‚tjtd	d
�� tdƒ ¡  W 5 Q R X d S )Niöÿÿÿú	US/Hawaii)Z
utc_offsetÚtznameú2010-09-03 00:00:00é   r   ú2005-09-03 06:00:00ú1990-09-03 06:00:00zdoes not support leap secondsrŽ   z2015-06-30 23:59:60.000)r   r£   rý   r   Úto_datetimeÚtimer‰   r3   rÀ  Úzipr6   rd   r‘   r’   r“   )ÚtzrÆ  Útz_aware_datetimeÚforced_to_astropy_timerÀ   Útz_dtr#   r#   r$   Útest_to_datetimeÍ  s    

rÌ  zrequires pytzrB  c                  C   sÊ   dd l } |  d¡}tdƒ}| |¡}t|ƒ}| ¡ t dd¡ksDt‚| |j¡| ¡ ks\t‚||ksht‚tdddgƒ}| |¡}t|ƒ}t|j|ƒD ]\}}| |¡| ¡ ks”t‚q”t	 
||k¡sÆt‚d S )Nr   r¿  rÁ  rÂ  rÃ  rÄ  )ÚpytzÚtimezoner   rÅ  rÆ  r‰   r3   rÀ  rÇ  r6   rd   )rÍ  rÈ  rÆ  rÉ  rÊ  rÀ   rË  r#   r#   r$   Útest_to_datetime_pytzä  s    


rÏ  c                  C   s    t dƒ} t dƒ}d| jjks t‚| j | jd d |jks>t‚| j | jd d |jks\t‚d| jjjksnt‚| `d| jjks‚t‚| jrŒt‚d| jjksœt‚d S )NrÁ  ra  r/   r,   r0   r:   )r   re   Ú__dict__r3   r,   ra  r:   r;   ©rA   rR   r#   r#   r$   Ú
test_cacheù  s    
rÒ  c               	   C   sd   t ddd�} | jdkst‚| jdks(t‚t t ddddd	d	¡dd�}|jdksRt‚|jdks`t‚d
S )zm
    Ensure that jd1 and jd2 of an epoch Time are respect the (day, fraction) convention
    (see #6638)
    r,  r}   rÃ   g   €,´BAr   r½   rI   rÍ   r   N)r   r5   r3   r9   r‰   ©rì   rQ   r#   r#   r$   Ú"test_epoch_date_jd_is_day_fraction  s    rÔ  c                  C   sH   t ddd�} t ddd�}| |ks$t‚| dtj  |dtj  ksDt‚dS )zV
    Ensure that two equal dates defined in different ways behave equally (#6638)
    r,  r}   rÃ   z2000-01-01 12:00:00rI   N)r   r3   r£   rÿ   rÓ  r#   r#   r$   Útest_sum_is_equivalent#  s    rÕ  c                  C   sž   dd„ t ddƒD ƒ} t| ƒ}| d¡}t|ƒ}t|ƒ}t ||k¡sHt‚ttdgƒƒ}ttdgƒƒ}||kspt‚tdd	gƒ} t t| ƒtd
dgƒk¡sšt‚d S )Nc                    s$   g | ]‰ ‡ fd d„t ddƒD ƒ‘qS )c                    s&   g | ]‰ ‡ ‡fd d„t ddƒD ƒ‘qS )c                    s&   g | ]}ˆd ›dˆ d›d|d›�‘qS )rä   rå   ræ   r#   )Ú.0r÷   )r¤   r¨   r#   r$   Ú
<listcomp>2  s     zDtest_string_valued_columns.<locals>.<listcomp>.<listcomp>.<listcomp>rI   rm   ©Úrange©rÖ  ©r¨   )r¤   r$   r×  2  s     z9test_string_valued_columns.<locals>.<listcomp>.<listcomp>rH   r˜   rØ  rÚ  r#   rÛ  r$   r×  1  s   ÿz.test_string_valued_columns.<locals>.<listcomp>rà   iÞ  ÚSZB1950s   B1950s
   2012-01-01s   2012-01-01T00:00:00z
2012-01-01z2012-01-01T00:00:00)rÙ  r
   r¦  r   r6   rd   r3   )r@   Zcutf32ZcbytesZtutf32Útbytesr#   r#   r$   Útest_string_valued_columns.  s    þ
rÞ  c                  C   sh   d} d}|  d¡| kst‚t| ƒ}t|ƒ}||ks6t‚t |¡}|jjdksPt‚t|ƒ}||ksdt‚d S )Nz2011-01-02T03:04:05s   2011-01-02T03:04:05rS  rÜ  )Údecoder3   r   r6   r7   rq   Úkind)ZtstringrÝ  rì   rQ   ZtarrayrR   r#   r#   r$   Útest_bytes_inputB  s    
rá  c               	   C   s*  t dddgdd�} d| d< t| d jdƒs.t‚d| _t t¡�}d| d< W 5 Q R X dt|jƒksdt‚t t¡�}d| d d …< W 5 Q R X dt|jƒks˜t‚d	| _d
| d< t| d jd
ƒsºt‚t ddd�} d| d< | j 	d¡sÞt‚t ddgdd�} | j
}t t¡�}d|d< W 5 Q R X dt|jƒk�s&t‚d S )NrI   rv   rm   r=   rE   rF   Fz'Time object is read-only. Make a copy()TrG   rÛ   r-   rÃ   ú2000:002r#   z2005:001r   )r   r<   rZ   r3   Z	writeabler‘   r’   r“   r7  r_  r;   )rA   r¡  rR   r#   r#   r$   Útest_writeable_flagO  s*    rã  c               	   C   sê  t ddgtj ddgtj ddgtj d�} tddgddggd| d	�}d
|d< t|jd
dgddggƒsjt‚t t	¡�}tddd�|d< W 5 Q R X d 
| d
 ¡t|jƒks¬t‚tdd| d
 d	�|d< t|jddgddggƒsÞt‚t t	¡�}tdd| d d	�|d< W 5 Q R X d 
| d
 | d ¡t|jƒk�s.t‚tddgddggdd�}t t	¡�}tdd| d d	�|d< W 5 Q R X d 
| d ¡t|jƒk�s�t‚tddgddggd| d	�}tddgd| d	�|d
d d …f< t|jddgddggƒ�sæt‚d S )NrI   rv   rm   rn   rH   ro   )r§   r¨   r©   r=   ©r/   rl   r   ru   rr   rE   zVcannot set to Time with different location: expected location={} and got location=NoneéþÿÿÿzTcannot set to Time with different location: expected location={} and got location={}zVcannot set to Time with different location: expected location=None and got location={}éýÿÿÿéüÿÿÿ)r	   r£   r¤   r   r<   rZ   r3   r‘   r’   r“   r/   r7  )ÚlocrA   r¡  r#   r#   r$   Útest_setitem_locationn  sF    ,þþÿ  þþÿ þþÿré  c               	   C   sl  t ddgddggdd�} | ji ks&t‚| j d| jd ks>t‚t | jd	d
gddggk¡s^t‚d| d< | ji kstt‚t| jddgddggƒs�t‚t | jd	dgddggk¡s°t‚| j d| dd d …f< | ji ksÔt‚t| jddgddggƒsðt‚ddg| d d …df< t| jddgddggƒ�s"t‚t ddgƒ} d| d< t 	t
¡�}d| d< W 5 Q R X dt|jƒk�sht‚d S )NrI   rv   rm   rn   r=   rE   r,   r/   z1998-01-01 00:00:01.000z1998-01-01 00:00:02.000z1998-01-01 00:00:03.000z1998-01-01 00:00:04.000éd   )r   rI   z1998-01-01 00:01:40.000éÈ   z1998:002z1998:003i€Q i £ rÛ   râ  rø   r   z0cannot convert value to a compatible Time object)r   ra  r3   r,   r6   rd   r<   rZ   r‘   r’   r“   r7  )rA   r¡  r#   r#   r$   Ú test_setitem_from_python_objects�  s@    þÿÿ	þÿÿ	rì  c                  C   s„   t ddgdd�} t dgdd�}|d | d< | jd |jjd ksDt‚t ddgdd�} d	|_|d | d< | jd |jjd ks€t‚d
S )zSet from existing Time object.rÛ   râ  r-   rÃ   z2000:010r:   r   rI   r¸   N)r   rZ   r-   r3   r/   r¼   rÑ  r#   r#   r$   Útest_setitem_from_time_objectsÈ  s    rí  c               	   C   s2   t ddgdd�} t t¡� d| d< W 5 Q R X d S )NrI   rv   r=   rE   rm   Zasdf)r   r‘   r’   Ú
IndexErrorr–  r#   r#   r$   Útest_setitem_bad_item×  s    rï  c                  C   sL   t ddgdd�} ddg| _ddg| _d| d< t| dƒr:t‚t| dƒrHt‚d	S )
z(Setting invalidates any transform deltasrI   rv   r=   rE   rm   rn   rz   Z_delta_ut1_utcN)r   ry   r‚   Úhasattrr3   r–  r#   r#   r$   Útest_setitem_deltasÝ  s    

rñ  c                  C   s>   G dd„ dt ƒ} t dƒ}| |ƒ}|j| ks.t‚||ks:t‚dS )z=Check that we can initialize subclasses with a Time instance.c                   @   s   e Zd ZdS )ztest_subclass.<locals>._TimeN)rð   rñ   rò   r#   r#   r#   r$   Ú_Timeë  s   rò  z1999-01-01T01:01:01N)r   Ú	__class__r3   )rò  rQ   rR   r#   r#   r$   Útest_subclassç  s
    rô  c                  C   s4   d} t | ƒ}|jD ]}||_| d¡| kst‚qdS )úTest of Time.strftimez2010-09-03 06:00:00ú%Y-%m-%d %H:%M:%SN©r   r   r/   Ústrftimer3   ©Útime_stringrA   r/   r#   r#   r$   Útest_strftime_scalarõ  s
    
rû  c                  C   s>   dddg} t | ƒ}|jD ] }||_| d¡ ¡ | kst‚qd S )NrÁ  rÃ  ú1995-12-31 23:59:60rö  )r   r   r/   rø  Útolistr3   ©ÚtstringsrA   r/   r#   r#   r$   Útest_strftime_arrayÿ  s
    

r   c                  C   sf   ddgddgg} t  | ¡} t| ƒ}|jD ]8}||_t  | d¡| k¡sJt‚| d¡j| jks(t‚q(d S )Nú1998-01-01 00:00:01ú1998-01-01 00:00:02ú1998-01-01 00:00:03rü  rö  )	r6   r7   r   r   r/   rd   rø  r3   rK   rþ  r#   r#   r$   Útest_strftime_array_2  s    þ

r  c                  C   s4   d} t | ƒ}|jD ]}||_| d¡| kst‚qd S )Nrü  rö  r÷  rù  r#   r#   r$   Útest_strftime_leapsecond  s
    
r  c                  C   s(   d} t dƒ}t  | d¡}||ks$t‚dS )úTest of Time.strptimez2007-May-04 21:08:12ú2007-05-04 21:08:12ú%Y-%b-%d %H:%M:%SN©r   Ústrptimer3   ©rú  Útime_objectrA   r#   r#   r$   Útest_strptime_scalar   s    r  c                  C   s`   ddgddgg} t  | ¡} tddgddggƒ}t | d	¡}t  ||k¡sLt‚|j| jks\t‚d
S )r  z1998-Jan-01 00:00:01z1998-Jan-01 00:00:02z1998-Jan-01 00:00:03z1998-Jan-01 00:00:04r  r  r  ú1998-01-01 00:00:04r  N©r6   r7   r   r
  rd   r3   rK   ©rÿ  r  rA   r#   r#   r$   Útest_strptime_array)  s    þ
þÿr  c               	   C   s0   dddg} t  t¡� t | d¡ W 5 Q R X d S )NrI   rv   rm   z%S)r‘   r’   rn  r   r
  )rÿ  r#   r#   r$   Útest_strptime_badinput=  s    
r  c                  C   s(   d} t dƒ}t  | d¡}||ks$t‚d S )Ns   2007-May-04 21:08:12r  r  r	  r  r#   r#   r$   Ú test_strptime_input_bytes_scalarC  s    r  c                  C   s`   ddgddgg} t  | ¡} tddgddggƒ}t | d	¡}t  ||k¡sLt‚|j| jks\t‚d S )
Ns   1998-Jan-01 00:00:01s   1998-Jan-01 00:00:02s   1998-Jan-01 00:00:03s   1998-Jan-01 00:00:04r  r  r  r  r  r  r  r#   r#   r$   Útest_strptime_input_bytes_arrayK  s    þ
þÿr  c                  C   s(   t ddd�} t  dd¡}| |ks$t‚d S )Nz1995-12-31T23:59:60r†   rE   z1995-Dec-31 23:59:60r  r	  ©Z	time_obj1Z	time_obj2r#   r#   r$   Útest_strptime_leapsecond^  s    r  c                  C   s.   t dddd�} t jdddd�}| |ks*t‚d S )Nz0995-12-31T00:00:00r†   r:   r.   z0995-Dec-31 00:00:00r  rÃ   r	  r  r#   r#   r$   Útest_strptime_3_digit_yeare  s    r  c                  C   s(   d} t dƒ}t  | d¡}||ks$t‚d S )Nz2007-May-04 21:08:12.123z2007-05-04 21:08:12.123ú%Y-%b-%d %H:%M:%S.%fr	  r  r#   r#   r$   Útest_strptime_fracsec_scalarl  s    r  c                  C   s`   ddgddgg} t  | ¡} tddgddggƒ}t | d	¡}t  ||k¡sLt‚|j| jks\t‚d
S )r  z1998-Jan-01 00:00:01.123z1998-Jan-01 00:00:02.000001z1998-Jan-01 00:00:03.000900z1998-Jan-01 00:00:04.123456z1998-01-01 00:00:01.123z1998-01-01 00:00:02.000001z1998-01-01 00:00:03.000900z1998-01-01 00:00:04.123456r  Nr  r  r#   r#   r$   Útest_strptime_fracsec_arrayt  s    þ
þÿr  c                  C   s4   d} t | ƒ}|jD ]}||_| d¡| kst‚qdS )rõ  ú2010-09-03 06:00:00.123ú%Y-%m-%d %H:%M:%S.%fNr÷  rù  r#   r#   r$   Útest_strftime_scalar_fracsecˆ  s
    
r  c                  C   s:   d} t | ƒ}| d¡dkst‚d|_| d¡dks6t‚d S )Nz2010-09-03 06:00:00.123123123r  r  rŒ   )r   rø  r3   r`   )rú  rA   r#   r#   r$   Ú&test_strftime_scalar_fracsec_precision’  s
    r  c                  C   sD   dddg} t | ƒ}d|_|jD ] }||_| d¡ ¡ | kst‚qd S )Nz2010-09-03 00:00:00.123000z2005-09-03 06:00:00.000001z1995-12-31 23:59:60.000900ro   r  )r   r`   r   r/   rø  rý  r3   rþ  r#   r#   r$   Útest_strftime_array_fracsecš  s    ý
r  c                  C   s†  t ddgdd�} |  dd¡}t |t dddgdd�k¡s<t‚|  dt dƒ¡}t |t dddgdd�k¡slt‚|  dt dƒg¡}t |t dddgdd�k¡sžt‚| jdddgd	d
�}t |t ddddgdd�k¡sÔt‚|  dt ddg¡¡}t |t ddddgdd�k¡�st‚|  dt ddg¡¡}t |t ddddgdd�k¡�sHt‚|  dt ddg¡¡}t |t ddddgdd�k¡�s‚t‚d S )NrI   rv   r‡   rE   z1970-01-01 00:01:00é<   r�   rÚ   r   ©Zaxisrå  )r   Úinsertr6   rd   r3   r7   ©rO  rP  r#   r#   r$   Útest_insert_time¨  s       "$$r$  c                  C   st   t ddgdd�} |  d| d ¡} | jdks.t‚| d | d ksBt‚|  dd¡} | jdks\t‚t| d ƒdkspt‚d S )Nz
1999-01-01z
1999-01-02ra   rv  r   rI   z
1999-01-03)r   r"  rc   r3   r7  )ÚTr#   r#   r$   Útest_insert_time_out_subfmtÊ  s    r&  c               	   C   sø   t ddd�} t t¡�}|  dd¡ W 5 Q R X dt|jƒks@t‚t ddgdd�} t t¡�}| jdddd� W 5 Q R X d	t|jƒksˆt‚t t¡�}|  t	d ƒd¡ W 5 Q R X d
t|jƒksÀt‚t t
¡�}|  dd¡ W 5 Q R X dt|jƒksôt‚d S )NrI   r‡   rE   r   é2   zcannot insert into scalarrv   r!  zaxis must be 0zobj arg must be an integeriœÿÿÿz2index -100 is out of bounds for axis 0 with size 2)r   r‘   r’   rn  r"  r7  rZ   r3   r“   Úslicerî  )rO  r¡  r#   r#   r$   Útest_insert_exceptionsÕ  s    r)  c                  C   sF   t  d¡} t| ddd�}|jdks&t‚|j| ks4t‚|j| ksBt‚d S )NrÓ   r-   rŒ   rË   rÔ   )r6   r¿   r   r,   r3   rZ   )rÁ   rA   r#   r#   r$   Útest_datetime64_no_formaté  s
    
r*  c               
   C   sb  t dtj dtj dtj ƒ} d | fD ]Ê}tddddgd|d�}tjj|d< t|d ƒ}t|d ƒ}t|d ƒ}||ks|t‚||ksˆt‚t	 
t¡�}t|ƒ W 5 Q R X |jjd dksºt‚t	 
t¡�}t|d ƒ W 5 Q R X |jjd dks&t‚q&tdd|d�}tddd	�}t|ƒt|ƒk�s"t‚td
dd�}t|dd�}||k�sHt‚t|ƒt|ƒk�s^t‚d S )NrI   rv   rm   r=   rä  r   z(unhashable type: 'Time' (must be scalar)z)unhashable type: 'Time' (value is masked)rE   z2000:180r-   rÃ   r:   )r	   r£   r¤   r   r6   ÚmaÚmaskedÚhashr3   r‘   r’   rn  rZ   Úargs)Zloc1rè  rA   Úh1Úh2Úh3ÚexcrR   r#   r#   r$   Útest_hash_timeñ  s,    r3  c               	   C   sÈ   t ddddgdd�} tjj| d< t| d ƒ}t| d ƒ}t| d ƒ}||ksPt‚||ks\t‚t t¡�}t| ƒ W 5 Q R X |j	j
d dksŽt‚t t¡�}t| d ƒ W 5 Q R X |j	j
d dksÄt‚d S )	NrI   rv   rm   rè   rE   r   z-unhashable type: 'TimeDelta' (must be scalar)z.unhashable type: 'TimeDelta' (value is masked))r   r6   r+  r,  r-  r3   r‘   r’   rn  rZ   r.  )rA   r/  r0  r1  r2  r#   r#   r$   Útest_hash_time_delta	  s    r4  c               	   C   s  t  t¡�} tdƒ W 5 Q R X dt| jƒks0t‚t  t¡�} tddd� W 5 Q R X dt| jƒksdt‚t  t¡�} tdƒ W 5 Q R X dt| jƒks”t‚t  t¡�} tdd	d� W 5 Q R X d
tj d t| jƒksÒt‚t  t¡�} tdd	d� W 5 Q R X d
tj d t| jƒk�st‚d S )Nr�   z*No time format was given, and the input isrÛ   znot-a-formatrE   z/Format 'not-a-format' is not one of the allowedZ200z3Input values did not match any of the formats wherer,   z0Input values did not match the format class iso:z.ValueError: Time 200 does not match iso formatrë  z5TypeError: Input values for iso class must be strings)	r‘   r’   r“   r   r7  rZ   r3   ÚosÚlinesep)r¡  r#   r#   r$   Ú$test_get_time_fmt_exception_messages!	  s6    ÿþüÿþür7  c                  C   s$   t ddidd�} | t dƒks t‚d S )Nré   rÊ   ÚymdhmsrE   rx  )r   r3   )rQ   r#   r#   r$   Útest_ymdhms_defaults?	  s    r9  rÊ   r¬  rv   rm   rn   rH   ro   r˜   r‰  rŒ   r�   é   rü   Útm_inputÚkwargsr/   r8  Úas_rowFTc                 C   sT   t ddgƒ}|r | d } |d }t | f|Ž}t ||k¡s>t‚|jjjtksPt‚d S )Nz2001-02-04 06:08:10z2002-03-05 07:09:11r   )r   r6   rd   r3   rZ   rq   ÚnamesÚymdhms_names)r;  r<  r=  Útime_nsrO  r#   r#   r$   Ú test_ymdhms_init_from_table_likeR	  s    rA  c                  C   sd   ddgddggddgddœ} t d	d
gddggƒ}t | dd�}t ||k¡sNt‚|jj|jks`t‚d S )NrÊ   r¬  iÓ  iÔ  rv   rm   rn   )ré   rê   rë   z
2001-02-04z
2002-03-04z
2003-02-04z
2004-03-04r8  rE   )r   r6   rd   r3   r8  rK   )Ztimes_dict_shapeZ
time_shaperÆ  r#   r#   r$   Ú test_ymdhms_init_from_dict_array`	  s
    rB  c                 C   sÊ   dddddddœ}t |f| Ž}|t dƒks.t‚|D ]L}|j| t|j|ƒfD ]0}|d	krlt|| |ƒs|t‚qL|| |ksLt‚qLq2t |ƒ}||ks”t‚|jd
ks¢t‚t |jƒ}||ks¸t‚|jd
ksÆt‚dS )z¨
    Test YMDHMS functionality for a dict input. This includes ensuring that
    key and attribute access work.  For extra fun use a time within a leap
    second.
    râ   rÍ   rã   é   é;   g²œ›nÍN@rü   z2016-12-31T23:59:60.123456789rÿ   r8  N)r   r3   rZ   r°   r<   r/   r8  )r<  Z	time_dictrO  ÚattrrZ   Ztm_rtr#   r#   r$   Ú!test_ymdhms_init_from_dict_scalari	  s(    ú	
rF  c               	   C   s˜   t jtdd�� tddd� W 5 Q R X d} t  t¡�}tddd	œdd� W 5 Q R X | t|jƒksdt‚d
} t jt| d�� tdddœdd� W 5 Q R X d S )Nz input must be dict or table-likerŽ   r�   r8  rE   z)'wrong' not allowed as YMDHMS key name(s)iã  rI   )ré   Zwrongz5for 2 input key names you must supply 'year', 'month')ré   rþ   )r‘   r’   r“   r   r7  rZ   r3   )r�   r¡  r#   r#   r$   Útest_ymdhms_exceptions�	  s    rG  c                  C   sb   t dddgidd�} tjj| d< t| jd tjjjƒs:t‚t	D ]}| jd | tjjks>t‚q>d S )Nré   r½   rÊ   r8  rE   r   )
r   r6   r+  r,  r¦   rZ   ÚcoreZmvoidr3   r?  )rO  r±  r#   r#   r$   Útest_ymdhms_maskedŸ	  s
    rI  c                  C   s.   t dddddddœdd	�} | jjdks*t‚d S )
Nrù   rv   rm   rÍ   rú   rû   rü   r-   rÃ   )r   r8  ré   r3   r–  r#   r#   r$   Útest_ymdhms_output¨	  s    ú÷rJ  rM  c                 C   s¬   t ƒ }tdƒddgddggtj  }| |_||d< tƒ }|j|dd� t j| ¡ dd�}|d j|d jkspt	‚t
 |d |d k¡rŠt	‚t
 |d j|d jk¡s¨t	‚d	S )
ú7Test special-case serialization of certain Time formatsr·  rI   ç’$I’$IÂ?rm   ç      @Úaz
ascii.ecsvrE   N)r   r   r£   rV  r/   r   ÚwriteÚreadÚgetvaluer3   r6   rd   rZ   )rM  rA   rO  ÚoutrR   r#   r#   r$   Útest_write_every_format_to_ecsv¹	  s    rS  c                 C   sž   t ƒ }tdƒddgddggtj  }| |_||d< |d }|j|dd	� t j|dd
d�}| |d _t |d |d k¡s|t	‚t |d j
|d j
k¡sšt	‚dS )rK  r·  rI   rL  rm   rM  rN  zout.fitsrƒ   rE   T)r/   Zastropy_nativeN)r   r   r£   rV  r/   rO  rP  r6   rd   r3   rZ   ©rM  Ztmp_pathrA   rO  rR  rR   r#   r#   r$   Útest_write_every_format_to_fitsË	  s    
rU  z
Needs h5pyc                 C   s¸   t ƒ }tdƒddgddggtj  }| |_||d< |d }|jt|ƒdd	d
d� t jt|ƒdd	d�}|d j|d jks|t‚t	 
|d |d k¡s–t‚t	 
|d j|d jk¡s´t‚dS )rK  r·  rI   rL  rm   rM  rN  zout.h5Zhdf5ÚrootT)r/   ÚpathZserialize_meta)r/   rW  N)r   r   r£   rV  r/   rO  r7  rP  r3   r6   rd   rZ   rT  r#   r#   r$   Útest_write_every_format_to_hdf5Ý	  s    rX  c                  C   s0   t dƒt ddd¡tj  } t ddd�| d< d S )	NZJ2015rr   rI   r�   rN  ri   rE   rv   )r   r6   r  r£   rë   r–  r#   r#   r$   Útest_broadcasting_writeableö	  s    rY  c                  C   sì   t ddd�} | jdkst‚| jdks(t‚| jdd�}|jdksBt‚| jdd�}|jdks\t‚t | dd�}|jdksvt‚| jd	d�}|jdks�t‚|jdksžt‚d	| _| jdks²t‚| jdksÀt‚t dd
d�} | jdksÚt‚| jdksèt‚dS )zYTest that changing format with out_subfmt defined is not a problem.
    See #9812, #9810.z
2019-12-20zdate_??rv  g     ºì@z2019:354:00:00ri   rE   r$  r¼   ra   z2019:354N)	r   ri   r3   r¼   r„  rc   r^   rZ   r/   rÑ  r#   r#   r$   Ú#test_format_subformat_compatibilityû	  s$    rZ  Úuse_fast_parserÚforceÚFalsec              
   C   sB   t jtdd��* t d| ¡� tddd� W 5 Q R X W 5 Q R X dS )zXTest that string like "2022-08-01.123" does not parse as ISO.
    See #6476 and the fix.z/Input values did not match the format class isorŽ   r[  z2022-08-01.123r,   rE   N)r‘   r’   r“   r   r¯   r   )r[  r#   r#   r$   Ú%test_format_fractional_string_parsing
  s     ÿr^  zfmt_name,fmt_classc                 C   s>   t dƒ}tdd„ |jD ƒƒddg }|D ]}| | |¡ q(dS )z|From a starting Time value, test that every valid combination of
    to_value(format, subfmt) works.  See #9812, #9361.
    r  c                 s   s   | ]}|d  V  qdS )r   Nr#   )rÖ  r9  r#   r#   r$   Ú	<genexpr>)
  s     z=test_to_value_with_subfmt_for_every_format.<locals>.<genexpr>Nr$  )r   Úlistr²  r=  )Zfmt_nameZ	fmt_classrA   r²  r9  r#   r#   r$   Ú*test_to_value_with_subfmt_for_every_format#
  s    ra  rl   ©é-   rc  c                 C   sø   t d| d�}t |ƒ}t |j|jk¡s*t‚t|jƒt|jƒksBt‚t ||gƒ}| dkrf|jdks€t‚n|jD ]}||jkslt‚qlt|jƒt|jƒks˜t‚t||ggƒd }| dkrÂ|jdksÜt‚n|jD ]}||jksÈt‚qÈt|jƒt|jƒksôt‚dS )z¤Test fix in #9969 for issue #9962 where the location attribute is
    lost when initializing Time from an existing Time instance of list of
    Time instances.
    ÚJ2010©rl   NZcol0)r   r6   rd   rl   r3   Útyper   )rl   rO  rP  rè  r#   r#   r$   Útest_location_init.
  s     

rg  c               	   C   s>   t ddd�} t dƒ}tjtdd�� t | |gƒ W 5 Q R X dS )zÅTest fix in #9969 for issue #9962 where the location attribute is
    lost when initializing Time from an existing Time instance of list of
    Time instances.  Make sure exception is correct.
    rd  rb  re  z-cannot concatenate times unless all locationsrŽ   N)r   r‘   r’   r“   r#  r#   r#   r$   Útest_location_init_failO
  s     ÿrh  c                  C   s¸  t ddgƒ} t ddgƒ}dt t¡j t| | ƒ ¡  }t | d |d d¡}|d jt dƒ|d�sht	‚|d	 jt d
ƒ|d�s‚t	‚|d jt dƒ|d�sœt	‚tj| |d ddd�}|j
dksÀt	‚t|d jt ddgƒ|d�ƒsât	‚t|d	 jt d
dgƒ|d�ƒ�st	‚t | |d¡}|j
dk�s$t	‚t|d jt ddgƒ|d�ƒ�sHt	‚t|d	 jt ddgƒ|d�ƒ�slt	‚t|d jt ddgƒ|d�ƒ�s�t	‚t|d jt ddgƒ|d�ƒ�s´t	‚dS )zITest `np.linspace` `__array_func__` implementation for scalar and arrays.ú2021-01-01 00:00:00ú2021-01-02 00:00:00z2021-01-01 01:00:00z2021-12-28 00:00:00rv   r   rm   ©r   rI   z2021-01-01 00:30:00Fr  )rv   rv   z2021-01-01 12:30:00r˜   ©r˜   rv   z2021-01-01 00:10:00z2021-03-03 00:00:00rH   z2021-01-01 00:50:00z2021-10-29 00:00:00ro   N)r   r6   r?  r<  r@  rG  rE  r  Úiscloser3   rK   rd   )rQ   rR   r   Útsr#   r#   r$   Útest_linspace]
  s:     ÿÿ
ÿ
ÿ
ÿ
ÿro  c                  C   sÔ   t ddgƒ} t dƒ}dt t¡j t| | ƒ ¡  }tj| |ddd�\}}|jdksXt	‚|jd	ksft	‚t
|d
 j|d | |d�ƒsˆt	‚t
|d j|d d|  |d�ƒs®t	‚t
|jtddgdd�|d�ƒsÐt	‚dS )z$Test `np.linspace` `retstep` option.ri  z2021-01-01 12:00:00rj  rv   r˜   T)Zretsteprl  )rv   rI   r   rk  ro   i@8  i   rè   rE   N)r   r6   r?  r<  r@  rG  rE  r  rK   r3   rd   rm  r   )rQ   rR   r   rn  Ústr#   r#   r$   Útest_linspace_steps�
  s     "&rq  c                  C   sb  t ddgƒ} t ddd�}t ddd�}dt t¡j t| t ||gƒ ƒ ¡  }t | |d	¡}|jd
ksht	‚t
|d jt ddgƒ|d�ƒsŠt	‚t
|d jt ddgƒ|d�ƒs¬t	‚t
|d jt ddgƒ|d�ƒsÎt	‚t | t ||gƒd	¡}|jd
ksòt	‚t
|d jt ddgƒ|d�ƒ�st	‚t
|d jt ddgƒ|d�ƒ�s:t	‚t
|d jt ddgƒ|d�ƒ�s^t	‚dS )zoTest `np.linspace` `__array_func__` implementation for start/endpoints
    from different formats/systems.
    z2020-01-01 00:00:00z2020-01-02 00:00:00iâ„% rD   rE   i „^r‡   rv   rm   )rm   rv   r   rk  rI   z2020-01-01 06:00:00z2020-01-01 18:00:00z2020-01-01 12:00:00z2020-01-02 12:00:00z2020-01-03 00:00:00N)r   r6   r?  r<  r@  rG  rE  r  rK   r3   rd   rm  )rQ   rR   rT   r   rn  r#   r#   r$   Útest_linspace_fmts�
  s4    (ÿÿÿÿ
ÿ
ÿrr  c                  C   s²   dddg} t  t  | ¡¡ | ¡}tddd�|tj  }dddd	d
ddddddddg}d |¡}t jdddd�� t	|ƒ}t
|ƒ}W 5 Q R X ||ks–t‚d|› d�}||ks®t‚d S )Nr‰  rv   r·  ra   rv  z;[[['2020-01-01' '2020-01-02' ... '2020-01-07' '2020-01-08']z<  ['2020-01-09' '2020-01-10' ... '2020-01-15' '2020-01-16']]Ú z; [['2020-01-17' '2020-01-18' ... '2020-01-23' '2020-01-24']z<  ['2020-01-25' '2020-01-26' ... '2020-01-31' '2020-02-01']]z ...z; [['2020-04-06' '2020-04-07' ... '2020-04-12' '2020-04-13']z<  ['2020-04-14' '2020-04-15' ... '2020-04-20' '2020-04-21']]z; [['2020-04-22' '2020-04-23' ... '2020-04-28' '2020-04-29']z=  ['2020-04-30' '2020-05-01' ... '2020-05-06' '2020-05-07']]]Ú
rê  éK   )Ú	thresholdZ	edgeitemsZ	linewidthz-<Time object: scale='utc' format='iso' value=ú>)r6   rL   ÚprodrM   r   r£   rë   ÚjoinZprintoptionsr7  r2   r3   )ZdimsZdxrO  Z	exp_linesZexp_strZout_strZout_reprZexp_reprr#   r#   r$   Útest_to_string±
  s0    
ó
rz  )—r^   r‰   Ú	functoolsr5  r   ri  r   r   Úior   r|  Únumpyr6   r‘   r   Znumpy.testingr   Zastropyr   r£   Zastropy.coordinatesr	   Zastropy.tabler
   r   Zastropy.timer   r   r   r   r   r   r   r   Zastropy.utilsr   r   Z"astropy.utils.compat.optional_depsr   r   Zastropy.utils.exceptionsr   ÚpartialrØ   r?  r<  r@  r4   r8   r<   r×   r%   r(   r)   rö   r  r2  r{  r€  rˆ  rŽ  r’  r”  r—  r˜  rš  rž  r   r¢  r£  rô   Zremote_datar¥  r§  r¯  rµ  r¶  r¸  r¹  rº  r¼  r½  r¾  rÌ  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  r  r  r$  r&  r)  r*  r3  r4  r7  r9  Ztimes_dict_nsZtable_nsZas_arrayZstruct_array_nsr{   ZrecarrayZrec_array_nsr?  rõ   rA  rB  rF  rG  rI  rJ  rS  rU  rX  rY  rZ  r^  Úitemsra  rg  rh  ro  rq  rr  rz  r#   r#   r#   r$   Ú<module>   s4  (
 
 
ÿ 
 ÿ 
 ÿ     -F    E			


/+

			
"ú	
%	






 $"