B
    îq\öz  ã               @   s–  d Z ddlmZ yddlmZ W n  ek
r@   ddlmZ Y nX ddl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 dd	lmZ dd
lmZ ddddddddddddddddddddgZdZd Zd!Zed"ƒZed#ƒZd$Zed%ƒZdZd&Zd'Z d(Z!d)Z"d*Z#d+Z$d,d-„ Z%G d.d„ deƒZ&G d/d„ de
j'ƒZ(e(ƒ Z)G d0d„ de*ƒZ+G d1d„ deƒZ,G d2d„ de,ƒZ-G d3d„ de,ƒZ.G d4d„ de-ƒZ/e.j0e,_0dS )5a¬  
The astropy.utils.iers package provides access to the tables provided by
the International Earth Rotation and Reference Systems Service, in
particular allowing interpolation of published UT1-UTC values for given
times.  These are used in `astropy.time` to provide UT1 values.  The polar
motions are also used for determining earth orientation for
celestial-to-terrestrial coordinate transformations
(in `astropy.coordinates`).
é    )Úwarn)ÚurlparseN)Úconfig)Úunits)ÚTableÚQTable)Úget_pkg_data_filenameÚclear_download_cache)Úutils)ÚAstropyWarningÚConfÚconfÚIERSÚIERS_BÚIERS_AÚ	IERS_AutoÚFROM_IERS_BÚFROM_IERS_AÚFROM_IERS_A_PREDICTIONÚTIME_BEFORE_IERS_RANGEÚTIME_BEYOND_IERS_RANGEÚIERS_A_FILEÚ
IERS_A_URLÚIERS_A_URL_MIRRORÚIERS_A_READMEÚIERS_B_FILEÚ
IERS_B_URLÚIERS_B_READMEÚIERSRangeErrorÚIERSStaleWarningzfinals2000A.allz.http://maia.usno.navy.mil/ser7/finals2000A.allz/http://toshi.nofs.navy.mil/ser7/finals2000A.allzdata/ReadMe.finals2000Azdata/eopc04_IAU2000.62-nowz<http://hpiers.obspm.fr/iers/eop/eopc04/eopc04_IAU2000.62-nowzdata/ReadMe.eopc04_IAU2000é   é   éÿÿÿÿéþÿÿÿg   @€OBAa¦  interpolating from IERS_Auto using predictive values that are more
than {0} days old.

Normally you should not see this error because this class
automatically downloads the latest IERS-A table.  Perhaps you are
offline?  If you understand what you are doing then this error can be
suppressed by setting the auto_max_age configuration variable to
``None``:

  from astropy.utils.iers import conf
  conf.auto_max_age = None
c           	   O   s,   t jj dtj¡ t jj| |ŽS Q R X dS )a  
    Overload astropy.utils.data.download_file within iers module to use a
    custom (longer) wait time.  This just passes through ``*args`` and
    ``**kwargs`` after temporarily setting the download_file remote timeout to
    the local ``iers.conf.remote_timeout`` value.
    Úremote_timeoutN)r
   Údatar   Zset_tempr$   Údownload_file)ÚargsÚkwargs© r)   ú6lib/python3.7/site-packages/astropy/utils/iers/iers.pyr&   G   s    r&   c               @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__r)   r)   r)   r*   r   R   s   c               @   sL   e Zd ZdZe dd¡Ze dd¡Ze ed¡Z	e e
d¡Ze dd	¡Zd
S )r   z<
    Configuration parameters for `astropy.utils.iers`.
    Tz†Enable auto-downloading of the latest IERS data.  If set to False then the local IERS-B file will be used by default. Default is True.g      >@zMMaximum age (days) of predictive data before auto-downloading. Default is 30.z(URL for auto-downloading IERS file data.z/Mirror URL for auto-downloading IERS file data.g      $@z4Remote timeout downloading IERS file data (seconds).N)r+   r,   r-   Ú__doc__Ú_configZ
ConfigItemÚauto_downloadÚauto_max_ager   Úiers_auto_urlr   Úiers_auto_url_mirrorr$   r)   r)   r)   r*   r   V   s    c               @   s   e Zd ZdZdS )r   zJ
    Any error for when dates are outside of the valid range for IERS
    N)r+   r,   r-   r.   r)   r)   r)   r*   r   o   s   c               @   s”   e Zd ZdZdZeddd„ƒZedd„ ƒZd d	d
„Zd!dd„Z	d"dd„Z
d#dd„Zdd„ Zd$dd„Zdd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZdS )%r   zÍGeneric IERS table class, defining interpolation functions.

    Sub-classed from `astropy.table.QTable`.  The table should hold columns
    'MJD', 'UT1_UTC', 'dX_2000A'/'dY_2000A', and 'PM_x'/'PM_y'.
    NFc             K   sZ   |dk	s| j dkrT|dk	rFt|ƒjr:|jt||dd n|j|d | jf |Ž| _ | j S )a¶  Open an IERS table, reading it from a file if not loaded before.

        Parameters
        ----------
        file : str or None
            full local or network path to the ascii file holding IERS data,
            for passing on to the ``read`` class methods (further optional
            arguments that are available for some IERS subclasses can be added).
            If None, use the default location from the ``read`` class method.
        cache : bool
            Whether to use cache. Defaults to False, since IERS files
            are regularly updated.

        Returns
        -------
        An IERS table class instance

        Notes
        -----
        On the first call in a session, the table will be memoized (in the
        ``iers_table`` class attribute), and further calls to ``open`` will
        return this stored table if ``file=None`` (the default).

        If a table needs to be re-read from disk, pass on an explicit file
        location or use the (sub-class) close method and re-open.

        If the location is a network location it is first downloaded via
        download_file.

        For the IERS class itself, an IERS_B sub-class instance is opened.

        N)Úcache)Úfile)Ú
iers_tabler   ZnetlocÚupdater&   Úread)Úclsr5   r4   r(   r)   r)   r*   Úopen~   s    "
z	IERS.openc             C   s
   d| _ dS )zÃRemove the IERS table from the class.

        This allows the table to be re-read from disk during one's session
        (e.g., if one finds it is out of date and has updated the file).
        N)r6   )r9   r)   r)   r*   Úclose©   s    z
IERS.closeç        c             C   sV   y|j j|j j }}W n tk
r*   Y nX t |t | ¡}|t|  | }||fS )aô  Turn a time to MJD, returning integer and fractional parts.

        Parameters
        ----------
        jd1 : float, array, or Time
            first part of two-part JD, or Time object
        jd2 : float or array, optional
            second part of two-part JD.
            Default is 0., ignored if jd1 is `~astropy.time.Time`.
        Returns
        -------
        mjd : float or array
            integer part of MJD
        utc : float or array
            fractional part of MJD
        )ÚutcÚjd1Újd2Ú	ExceptionÚnpZfloorÚMJD_ZERO)Úselfr>   r?   Úmjdr=   r)   r)   r*   Úmjd_utc²   s    zIERS.mjd_utcc             C   s   |   ||dg|r| jnd¡S )aÔ  Interpolate UT1-UTC corrections in IERS Table for given dates.

        Parameters
        ----------
        jd1 : float, float array, or Time object
            first part of two-part JD, or Time object
        jd2 : float or float array, optional
            second part of two-part JD.
            Default is 0., ignored if jd1 is `~astropy.time.Time`.
        return_status : bool
            Whether to return status values.  If False (default),
            raise ``IERSRangeError`` if any time is out of the range covered
            by the IERS table.

        Returns
        -------
        ut1_utc : float or float array
            UT1-UTC, interpolated in IERS Table
        status : int or int array
            Status values (if ``return_status``=``True``)::
            ``iers.FROM_IERS_B``
            ``iers.FROM_IERS_A``
            ``iers.FROM_IERS_A_PREDICTION``
            ``iers.TIME_BEFORE_IERS_RANGE``
            ``iers.TIME_BEYOND_IERS_RANGE``
        ÚUT1_UTCN)Ú_interpolateÚut1_utc_source)rC   r>   r?   Úreturn_statusr)   r)   r*   Úut1_utcÌ   s    zIERS.ut1_utcc             C   s   |   ||ddg|r| jnd¡S )a.  Interpolate CIP corrections in IERS Table for given dates.

        Parameters
        ----------
        jd1 : float, float array, or Time object
            first part of two-part JD, or Time object
        jd2 : float or float array, optional
            second part of two-part JD (default 0., ignored if jd1 is Time)
        return_status : bool
            Whether to return status values.  If False (default),
            raise ``IERSRangeError`` if any time is out of the range covered
            by the IERS table.

        Returns
        -------
        D_x : Quantity with angle units
            x component of CIP correction for the requested times
        D_y : Quantity with angle units
            y component of CIP correction for the requested times
        status : int or int array
            Status values (if ``return_status``=``True``)::
            ``iers.FROM_IERS_B``
            ``iers.FROM_IERS_A``
            ``iers.FROM_IERS_A_PREDICTION``
            ``iers.TIME_BEFORE_IERS_RANGE``
            ``iers.TIME_BEYOND_IERS_RANGE``
        ÚdX_2000AÚdY_2000AN)rG   Údcip_source)rC   r>   r?   rI   r)   r)   r*   Údcip_xyê   s    zIERS.dcip_xyc             C   s   |   ||ddg|r| jnd¡S )aK  Interpolate polar motions from IERS Table for given dates.

        Parameters
        ----------
        jd1 : float, float array, or Time object
            first part of two-part JD, or Time object
        jd2 : float or float array, optional
            second part of two-part JD.
            Default is 0., ignored if jd1 is `~astropy.time.Time`.
        return_status : bool
            Whether to return status values.  If False (default),
            raise ``IERSRangeError`` if any time is out of the range covered
            by the IERS table.

        Returns
        -------
        PM_x : Quantity with angle units
            x component of polar motion for the requested times
        PM_y : Quantity with angle units
            y component of polar motion for the requested times
        status : int or int array
            Status values (if ``return_status``=``True``)::
            ``iers.FROM_IERS_B``
            ``iers.FROM_IERS_A``
            ``iers.FROM_IERS_A_PREDICTION``
            ``iers.TIME_BEFORE_IERS_RANGE``
            ``iers.TIME_BEYOND_IERS_RANGE``
        ÚPM_xÚPM_yN)rG   Ú	pm_source)rC   r>   r?   rI   r)   r)   r*   Úpm_xy	  s    z
IERS.pm_xyc             C   s   t  ||k¡rtdƒ‚dS )zÛ
        Check that the indices from interpolation match those after clipping
        to the valid table range.  This method gets overridden in the IERS_Auto
        class because it has different requirements.
        z8(some) times are outside of range covered by IERS table.N)rA   Úanyr   )rC   Úindices_origÚindices_clippedÚmax_input_mjdr)   r)   r*   Ú_check_interpolate_indices)  s    zIERS._check_interpolate_indicesc             C   s¾  |   ||¡\}}t|dƒ p$|jdk}|rBt |g¡}t |g¡}|  |¡ tj| d j|dd}t |dt	| ƒd ¡}	|	d }
| d |
 j| d |	 j }}g }x¢|D ]š}| | |
 | | |	  }}|| }|dkrâ|| 
¡ 8 }||| | ||  |  }| | d ||dk< | | d ||t	| ƒk< |r8|d }| |¡ q¨W |rŒ||	ƒ}t||dk< t||t	| ƒk< |r~|d }| |¡ |S |  |	|t |¡¡ t	|ƒdkr¶|d S |S d S )	NZ	__array__r   ÚMJDÚright)Úsider    rF   r"   )rE   ÚhasattrÚndimrA   ZarrayÚ_refresh_table_as_neededÚsearchsortedÚvalueZclipÚlenÚroundÚappendr   r   rW   Úmax)rC   r>   r?   ÚcolumnsÚsourcerD   r=   Z	is_scalarÚiÚi1Úi0Zmjd_0Zmjd_1ZresultsÚcolumnZval_0Zval_1Zd_valÚvalZstatusr)   r)   r*   rG   3  s@    


zIERS._interpolatec             C   s   dS )zó
        Potentially update the IERS table in place depending on the requested
        time values in ``mdj`` and the time span of the table.  The base behavior
        is not to update the table.  ``IERS_Auto`` overrides this method.
        Nr)   )rC   rD   r)   r)   r*   r]   l  s    zIERS._refresh_table_as_neededc             C   s
   t  |¡S )z2Source for UT1-UTC.  To be overridden by subclass.)rA   Ú
zeros_like)rC   rf   r)   r)   r*   rH   t  s    zIERS.ut1_utc_sourcec             C   s
   t  |¡S )z9Source for CIP correction.  To be overridden by subclass.)rA   rk   )rC   rf   r)   r)   r*   rM   x  s    zIERS.dcip_sourcec             C   s
   t  |¡S )z7Source for polar motion.  To be overridden by subclass.)rA   rk   )rC   rf   r)   r)   r*   rQ   |  s    zIERS.pm_sourcec             C   s0   ddl m} y| jS  tk
r*   | ¡ S X dS )z“
        Property to provide the current time, but also allow for explicitly setting
        the _time_now attribute for testing purposes.
        r   )ÚTimeN)Zastropy.timerl   Z	_time_nowr@   Znow)rC   rl   r)   r)   r*   Útime_now€  s
    zIERS.time_now)NF)r<   )r<   F)r<   F)r<   F)N)r+   r,   r-   r.   r6   Úclassmethodr:   r;   rE   rJ   rN   rR   rW   rG   r]   rH   rM   rQ   Úpropertyrm   r)   r)   r)   r*   r   u   s    *	



 

9c               @   sR   e Zd ZdZdZedd„ ƒZedd„ ƒZeddd„ƒZd	d
„ Z	dd„ Z
dd„ ZdS )r   am  IERS Table class targeted to IERS A, provided by USNO.

    These include rapid turnaround and predicted times.
    See http://maia.usno.navy.mil/

    Notes
    -----
    The IERS A file is not part of astropy.  It can be downloaded from
    ``iers.IERS_A_URL`` or ``iers.IERS_A_URL_MIRROR``. See ``iers.__doc__``
    for instructions on use in ``Time``, etc.
    Nc             C   sÎ  ||d j  |d j  @  }|  |¡}t |d j |d j|d j¡|d< |d j|d _t |d j |d jd¡|d< t |d j |d	 j|d j¡|d
< |d	 j|d
 _t |d j |d j|d j¡|d< |d j|d _t |d j |d jd¡|d< t |d j |d j|d j¡|d< |d j|d _t |d j |d j|d j¡|d< |d j|d _t |d j |d jd¡|d< |d dk|d dkB }t t |¡¡|jd< |d |jd  |jd< |S )zZ
        Return a new table with appropriate combination of IERS_A and B columns.
        Z	UT1_UTC_AZPolPMFlag_AÚ	UT1_UTC_BrF   Z	UT1Flag_AÚBÚUT1FlagÚPM_X_BZPM_x_ArO   ÚPM_Y_BZPM_y_ArP   Ú	PolPMFlagZ
dX_2000A_BZ
dX_2000A_ArK   Z
dY_2000A_BZ
dY_2000A_ArL   Z	NutFlag_AÚNutFlagÚPÚpredictive_indexrX   Úpredictive_mjd)	ÚmaskÚ_substitute_iers_brA   Úwherer%   ZunitÚminZflatnonzeroÚmeta)r9   Úiers_aÚtableZis_predictiver)   r)   r*   Ú_combine_a_b_columnsœ  sH    



zIERS_A._combine_a_b_columnsc             C   s   |S )Nr)   )r9   r€   r)   r)   r*   r{   Û  s    zIERS_A._substitute_iers_bc             C   sR   |dkrt }|dkrt}tj|d|d}|  |¡}||jd< ||jd< | | ¡ ƒS )a¾  Read IERS-A table from a finals2000a.* file provided by USNO.

        Parameters
        ----------
        file : str
            full path to ascii file holding IERS-A data.
            Defaults to ``iers.IERS_A_FILE``.
        readme : str
            full path to ascii file holding CDS-style readme.
            Defaults to package version, ``iers.IERS_A_README``.

        Returns
        -------
        ``IERS_A`` class instance
        NÚcds)ÚformatÚreadmeZ	data_pathZreadme_path)r   r   r   r8   r   r~   Úfilled)r9   r5   r„   r   r€   r)   r)   r*   r8   à  s    


zIERS_A.readc             C   s6   | d | }t  |¡t }t||dk< t||dk< |S )z1Set UT1-UTC source flag for entries in IERS tablerr   ÚIrw   )rA   Ú	ones_liker   r   r   )rC   rf   Zut1flagre   r)   r)   r*   rH     s
    zIERS_A.ut1_utc_sourcec             C   s6   | d | }t  |¡t }t||dk< t||dk< |S )z8Set CIP correction source flag for entries in IERS tablerv   r†   rw   )rA   r‡   r   r   r   )rC   rf   Znutflagre   r)   r)   r*   rM   
  s
    zIERS_A.dcip_sourcec             C   s6   | d | }t  |¡t }t||dk< t||dk< |S )z6Set polar motion source flag for entries in IERS tableru   r†   rw   )rA   r‡   r   r   r   )rC   rf   Zpmflagre   r)   r)   r*   rQ     s
    zIERS_A.pm_source)NN)r+   r,   r-   r.   r6   rn   r   r{   r8   rH   rM   rQ   r)   r)   r)   r*   r     s   ?!c               @   s:   e Zd ZdZdZeddd„ƒZdd„ Zdd	„ Zd
d„ Z	dS )r   a  IERS Table class targeted to IERS B, provided by IERS itself.

    These are final values; see http://www.iers.org/

    Notes
    -----
    If the package IERS B file (```iers.IERS_B_FILE``) is out of date, a new
    version can be downloaded from ``iers.IERS_B_URL``.
    Né   c             C   s6   |dkrt }|dkrt}tj|d||d}| | ¡ ƒS )a9  Read IERS-B table from a eopc04_iau2000.* file provided by IERS.

        Parameters
        ----------
        file : str
            full path to ascii file holding IERS-B data.
            Defaults to package version, ``iers.IERS_B_FILE``.
        readme : str
            full path to ascii file holding CDS-style readme.
            Defaults to package version, ``iers.IERS_B_README``.
        data_start : int
            starting row. Default is 14, appropriate for standard IERS files.

        Returns
        -------
        ``IERS_B`` class instance
        Nr‚   )rƒ   r„   Ú
data_start)r   r   r   r8   r…   )r9   r5   r„   r‰   Úiers_br)   r)   r*   r8   (  s    
zIERS_B.readc             C   s   t  |¡t S )z1Set UT1-UTC source flag for entries in IERS table)rA   r‡   r   )rC   rf   r)   r)   r*   rH   F  s    zIERS_B.ut1_utc_sourcec             C   s   t  |¡t S )z8Set CIP correction source flag for entries in IERS table)rA   r‡   r   )rC   rf   r)   r)   r*   rM   J  s    zIERS_B.dcip_sourcec             C   s   t  |¡t S )z,Set PM source flag for entries in IERS table)rA   r‡   r   )rC   rf   r)   r)   r*   rQ   N  s    zIERS_B.pm_source)NNrˆ   )
r+   r,   r-   r.   r6   rn   r8   rH   rM   rQ   r)   r)   r)   r*   r     s   	c               @   s<   e Zd ZdZdZedd„ ƒZdd„ Zdd„ Zed	d
„ ƒZ	dS )r   zp
    Provide most-recent IERS data and automatically handle downloading
    of updated values as necessary.
    Nc             C   sú   t jst ¡ | _| jS t jt jf}| jdk	rD| jj d¡|krD| jS d}g }xT|D ]L}yt	|dd}W n0 t
k
r– } z| t|ƒ¡ W dd}~X Y qRX d}P qRW |sÖttd d |¡d |¡¡ƒƒ t ¡ | _| jS | j|d	| _t|ƒ| jjd< | jS )
aÖ  If the configuration setting ``astropy.utils.iers.conf.auto_download``
        is set to True (default), then open a recent version of the IERS-A
        table with predictions for UT1-UTC and polar motion out to
        approximately one year from now.  If the available version of this file
        is older than ``astropy.utils.iers.conf.auto_max_age`` days old
        (or non-existent) then it will be downloaded over the network and cached.

        If the configuration setting ``astropy.utils.iers.conf.auto_download``
        is set to False then ``astropy.utils.iers.IERS()`` is returned.  This
        is normally the IERS-B table that is supplied with astropy.

        On the first call in a session, the table will be memoized (in the
        ``iers_table`` class attribute), and further calls to ``open`` will
        return this stored table.

        Returns
        -------
        `~astropy.table.QTable` instance with IERS (Earth rotation) data columns

        NÚdata_urlFT)r4   z-failed to download {}, using local IERS-B: {}z and ú;)r5   )r   r0   r   r:   r6   r2   r3   r~   Úgetr&   r@   rb   Ústrr   r   rƒ   Újoinr8   )r9   Úall_urlsÚ
dl_successÚerr_listÚurlÚfilenameÚerrr)   r)   r*   r:   Z  s2    


 
zIERS_Auto.openc             C   sP   | j d }tjdk	rtjn
t t¡j}||krL| jj| |krLt	t
 |¡ƒ‚dS )aF  Check that the indices from interpolation match those after clipping to the
        valid table range.  The IERS_Auto class is exempted as long as it has
        sufficiently recent available data so the clipped interpolation is
        always within the confidence bounds of current Earth rotation
        knowledge.
        ry   N)r~   r   r1   rA   ÚfinfoÚfloatrc   rm   rD   Ú
ValueErrorÚINTERPOLATE_ERRORrƒ   )rC   rT   rU   rV   ry   r1   r)   r)   r*   rW   ™  s    
z$IERS_Auto._check_interpolate_indicesc             C   sô  t  |¡}| jj}| jd }| jd }tjdk	r6tjn
t  t¡j}|dk rRt	dƒ‚||krð|| |krðtj
tjf}d}g }	x\|D ]T}
yt|
ƒ t|
dd}W n0 tk
rÐ } z|	 t|ƒ¡ W dd}~X Y q„X d}P q„W |sttd	 d
 |¡d |	¡¡ƒƒ dS | jj|d}t|
ƒ|jd< |d d | d d krÜt j|d j|dd}t| ƒ| }|||| … | |d…< |d ||  | d d  dtj kr¦t	dƒ‚x$||| d… D ]}|  |¡ q¸W | j |j¡ nttd tj¡ƒƒ dS )a—  Potentially update the IERS table in place depending on the requested
        time values in ``mjd`` and the time span of the table.

        For IERS_Auto the behavior is that the table is refreshed from the IERS
        server if both the following apply:

        - Any of the requested IERS values are predictive.  The IERS-A table
          contains predictive data out for a year after the available
          definitive values.
        - The first predictive values are at least ``conf.auto_max_age days`` old.
          In other words the IERS-A table was created by IERS long enough
          ago that it can be considered stale for predictions.
        rx   ry   Né
   zAIERS auto_max_age configuration value must be larger than 10 daysFT)r4   a  failed to download {}: {}.
A coordinate or time-related calculation might be compromised or fail because the dates are not covered by the available IERS file.  See the "IERS data access" section of the astropy documentation for additional information on working offline.z and rŒ   )r5   r‹   rX   r"   rY   )rZ   g      ð?z0unexpected gap in MJD when refreshing IERS tablezmIERS_Auto predictive values are older than {} days but downloading the latest table did not find newer values)rA   rc   rm   rD   r~   r   r1   r–   r—   r˜   r2   r3   r	   r&   r@   rb   rŽ   r   r   rƒ   r   Ú	__class__r8   r^   r_   r`   ÚuÚdZadd_rowr7   r   )rC   rD   rV   Znow_mjdZfpiry   r1   r   r‘   r’   r“   r”   r•   Z	new_tableZnew_fpiZ	n_replaceÚrowr)   r)   r*   r]   ©  sN    




 (z"IERS_Auto._refresh_table_as_neededc             C   sØ   t  ¡ }|d |d j  }tj|d j|d dd}tj|d j|d dd}|||… }t|ƒ}|dkrÔt |d d|… |d j¡s’td	ƒ‚|d
 j|d d|…< |d j|d d|…< |d j|d d|…< |S )aM  Substitute IERS B values with those from a real IERS B table.

        IERS-A has IERS-B values included, but for reasons unknown these
        do not match the latest IERS-B values (see comments in #4436).
        Here, we use the bundled astropy IERS-B table to overwrite the values
        in the downloaded IERS-A table.
        rX   rp   r   Úleft)rZ   r"   rY   NzAunexpected mismatch when copying IERS-B values into IERS-A table.rF   rO   rs   rP   rt   )	r   r:   rz   rA   r^   r_   r`   Zallcloser˜   )r9   r€   rŠ   Zmjd_brh   rg   Zn_iers_br)   r)   r*   r{      s    	zIERS_Auto._substitute_iers_b)
r+   r,   r-   r.   r6   rn   r:   rW   r]   r{   r)   r)   r)   r*   r   S  s   ?W)1r.   Úwarningsr   r   ÚImportErrorZurllib.parseZnumpyrA   Zastropyr   r/   r   rœ   Zastropy.tabler   r   Zastropy.utils.datar   r	   r
   Zastropy.utils.exceptionsr   Ú__all__r   r   r   r   r   r   r   r   r   r   r   r   rB   r™   r&   r   ZConfigNamespacer   r   Ú
IndexErrorr   r   r   r   r   r8   r)   r)   r)   r*   Ú<module>
   s^      8 M