125 lines
4.4 KiB
Python
125 lines
4.4 KiB
Python
"""Top-level objects and functions offered by the Skyfield library.
|
|
|
|
Importing this library is not always the fastest way to use a Skyfield
|
|
feature, since importing this module involves importing almost the
|
|
entirety of Skyfield and its dependencies, but is the most convenient
|
|
way for most users to use Skyfield's main features.
|
|
|
|
"""
|
|
from datetime import datetime
|
|
from .constants import B1950, T0, pi, tau
|
|
from .constellationlib import load_constellation_map
|
|
from .errors import DeprecationError
|
|
from .iokit import Loader, load_file
|
|
from .planetarylib import PlanetaryConstants
|
|
from .positionlib import position_from_radec, position_of_radec
|
|
from .starlib import Star
|
|
from .sgp4lib import EarthSatellite
|
|
from .timelib import Time, Timescale, utc
|
|
from .toposlib import Topos
|
|
from .units import Angle, Distance
|
|
from .named_stars import NamedStar
|
|
|
|
load = Loader('.')
|
|
|
|
__all__ = ['Angle', 'B1950', 'Distance', 'EarthSatellite', 'Loader',
|
|
'NamedStar', 'PlanetaryConstants', 'Star', 'T0', 'Time',
|
|
'Timescale', 'Topos', 'datetime', 'load', 'load_constellation_map',
|
|
'load_file', 'position_from_radec', 'position_of_radec',
|
|
'utc', 'pi', 'tau']
|
|
|
|
# An attempt at friendliest-possible deprecations:
|
|
|
|
class DeprecatedPlanet(object):
|
|
def __init__(self, name):
|
|
self.name = name
|
|
|
|
def __call__(self, *args, **kw):
|
|
raise DeprecationError("""Skyfield no longer auto-loads the planets.
|
|
|
|
If you simply want your old Skyfield script to start working again,
|
|
downgrade to Skyfield version 0.4 using a command like:
|
|
|
|
pip install skyfield==0.4
|
|
|
|
To upgrade your script to a modern version of Skyfield, find each place
|
|
that you loaded a body from the skyfield.api module and called it:
|
|
|
|
from skyfield.api import {body}
|
|
position = {body}(t)
|
|
|
|
Instead, load the ephemeris like DE421 explicitly, look up the body in
|
|
the ephemeris, and use the method at() to generate a position:
|
|
|
|
from skyfield.api import load
|
|
planets = load('de421.bsp')
|
|
{body} = planets['{body}']
|
|
position = {body}.at(t)
|
|
|
|
More documentation can be found at: http://rhodesmill.org/skyfield/"""
|
|
.format(body=self.name))
|
|
|
|
class DeprecatedEarth(DeprecatedPlanet):
|
|
def topos(self, *args, **kw):
|
|
raise DeprecationError("""Skyfield no longer auto-loads an ephemeris.
|
|
|
|
If you simply want your old Skyfield script to start working again,
|
|
downgrade to Skyfield version 0.4 using a command like:
|
|
|
|
pip install skyfield==0.4
|
|
|
|
To upgrade your script to a modern version of Skyfield, find each place
|
|
you loaded the Earth from skyfield.api and called its topos() method:
|
|
|
|
from skyfield.api import earth
|
|
place = earth.topos(...)
|
|
|
|
Instead, load the ephemeris like DE421 explicitly, look up Earth in the
|
|
ephemeris, and add it to a Topos object:
|
|
|
|
from skyfield.api import Topos, load
|
|
planets = load('de421.bsp')
|
|
earth = planets['earth']
|
|
place = earth + Topos(...)
|
|
|
|
More documentation can be found at: http://rhodesmill.org/skyfield/""")
|
|
|
|
sun = DeprecatedPlanet('sun')
|
|
moon = DeprecatedPlanet('moon')
|
|
mercury = DeprecatedPlanet('mercury')
|
|
venus = DeprecatedPlanet('venus')
|
|
earth = DeprecatedEarth('earth')
|
|
mars = DeprecatedPlanet('mars')
|
|
jupiter = DeprecatedPlanet('jupiter')
|
|
saturn = DeprecatedPlanet('saturn')
|
|
uranus = DeprecatedPlanet('uranus')
|
|
neptune = DeprecatedPlanet('neptune')
|
|
pluto = DeprecatedPlanet('pluto')
|
|
|
|
def now():
|
|
raise DeprecationError("""Skyfield no longer supports a standalone now() function
|
|
|
|
If you need to quickly get an old Skyfield script working again, simply
|
|
downgrade to Skyfield version 0.6.1 using a command like:
|
|
|
|
pip install skyfield==0.6.1
|
|
|
|
Skyfield used to provide a now() method returning the current time:
|
|
|
|
t = now() # the old way
|
|
|
|
But this forced Skyfield to maintain secret global copies of several
|
|
time scale data files, that need to be downloaded and kept up to date.
|
|
Skyfield now makes the collection of data files explicit, and calls the
|
|
bundle of files a "Timescale" object. You can create one with the
|
|
"load.timescale()" method and then call its now() method:
|
|
|
|
from skyfield.api import load
|
|
ts = load.timescale()
|
|
t = ts.now() # the new way""")
|
|
|
|
class JulianDate(object):
|
|
def __init__(self, *args, **kw):
|
|
from skyfield.timelib import _JulianDate_deprecation_message
|
|
raise DeprecationError(_JulianDate_deprecation_message)
|