156 lines
5.3 KiB
Python
156 lines
5.3 KiB
Python
"""Tests of how well we parse various file formats."""
|
|
|
|
import gzip
|
|
from skyfield import iokit
|
|
from skyfield.data import hipparcos, stellarium
|
|
from skyfield.functions import BytesIO
|
|
from skyfield.iokit import parse_tle
|
|
|
|
old_deltat_preds = b"""\
|
|
YEAR TT-UT PREDICTION UT1-UTC PREDICTION ERROR
|
|
|
|
2017.00 68.591 -0.408 0.000
|
|
2017.25 68.72 0.469 0.00
|
|
2017.50 68.81 0.376 0.01
|
|
2017.75 68.86 0.322 0.01
|
|
2018.00 68.99 0.192 0.02
|
|
2018.25 69.14 0.041 0.02
|
|
2018.50 69.3 0.2
|
|
"""
|
|
|
|
def test_old_deltat_preds():
|
|
lines = old_deltat_preds.splitlines()
|
|
expiration_date, data = iokit.parse_deltat_preds(lines)
|
|
assert expiration_date.strftime('%Y-%m-%d') == '2019-01-01'
|
|
|
|
assert data[0][0] == 2457754.5
|
|
assert str(data[1][0]) == '68.591'
|
|
|
|
assert data[0][-1] == 2458300.5
|
|
assert str(data[1][-1]) == '69.3'
|
|
|
|
new_deltat_preds = b"""\
|
|
MJD YEAR TT-UT Pred UT1-UTC Pred ERROR
|
|
58484.000 2019.00 69.34 -0.152 0.117
|
|
58575.000 2019.25 69.48 -0.295 0.162
|
|
58666.000 2019.50 69.62 -0.440 0.215
|
|
58758.000 2019.75 69.71 -0.527 0.273
|
|
58849.000 2020.00 69.87 0.335
|
|
"""
|
|
|
|
def test_new_deltat_preds():
|
|
lines = new_deltat_preds.splitlines()
|
|
expiration_date, data = iokit.parse_deltat_preds(lines)
|
|
|
|
assert expiration_date.strftime('%Y-%m-%d') == '2021-01-01'
|
|
|
|
assert data[0][0] == 2458484.5
|
|
assert str(data[1][0]) == '69.34'
|
|
|
|
assert data[0][-1] == 2458849.5
|
|
assert str(data[1][-1]) == '69.87'
|
|
|
|
sample_celestrak_text = b"""\
|
|
ISS (ZARYA) \n\
|
|
1 25544U 98067A 18135.61844383 .00002728 00000-0 48567-4 0 9998
|
|
2 25544 51.6402 181.0633 0004018 88.8954 22.2246 15.54059185113452
|
|
FLOCK 2E-1 \r\n\
|
|
1 41483U 98067JD 18135.38689952 .00096183 14684-4 28212-3 0 9990
|
|
2 41483 51.6270 103.3896 0004826 61.7810 298.3684 15.92672255114129
|
|
"""
|
|
|
|
sample_spacetrack_two_line_text = b"""\
|
|
1 29273U 06033B 18081.29838594 -.00000056 +00000-0 +00000-0 0 9993
|
|
2 29273 000.0189 154.5198 0004980 202.4902 284.9321 01.00271755042548
|
|
1 29274U 06033C 18081.39999693 +.00002637 +00000-0 +10299-2 0 9992
|
|
2 29274 005.9144 244.7152 6177908 248.3941 037.5897 03.74556424124616
|
|
"""
|
|
|
|
sample_spacetrack_three_line_text = b"""\
|
|
0 First
|
|
1 29273U 06033B 18081.29838594 -.00000056 +00000-0 +00000-0 0 9993
|
|
2 29273 000.0189 154.5198 0004980 202.4902 284.9321 01.00271755042548
|
|
0 Second
|
|
1 29274U 06033C 18081.39999693 +.00002637 +00000-0 +10299-2 0 9992
|
|
2 29274 005.9144 244.7152 6177908 248.3941 037.5897 03.74556424124616
|
|
"""
|
|
|
|
def test_celestrak():
|
|
f = BytesIO(sample_celestrak_text)
|
|
s = list(parse_tle(f))
|
|
print(s)
|
|
assert len(s) == 2
|
|
assert s[0][0] == ['ISS (ZARYA)', 'ISS', 'ZARYA']
|
|
assert s[0][1].name == 'ISS (ZARYA)'
|
|
assert s[1][0] == ['FLOCK 2E-1']
|
|
assert s[1][1].name == 'FLOCK 2E-1'
|
|
|
|
def test_spacetrack_two_line():
|
|
f = BytesIO(sample_spacetrack_two_line_text)
|
|
s = list(parse_tle(f))
|
|
assert len(s) == 2
|
|
print(s)
|
|
assert s[0][0] == ()
|
|
assert s[0][1].name is None
|
|
assert s[1][0] == ()
|
|
assert s[1][1].name is None
|
|
|
|
def test_spacetrack_three_line():
|
|
f = BytesIO(sample_spacetrack_three_line_text)
|
|
s = list(parse_tle(f))
|
|
assert len(s) == 2
|
|
print(s)
|
|
assert s[0][0] == ['First']
|
|
assert s[0][1].name == 'First'
|
|
assert s[1][0] == ['Second']
|
|
assert s[1][1].name == 'Second'
|
|
|
|
def test_extra_lines_in_tle_are_ignored():
|
|
f = BytesIO(b'Sample line\n' + sample_celestrak_text + b'Another line\n')
|
|
s = list(parse_tle(f))
|
|
assert len(s) == 2
|
|
assert s[0][0] == ['ISS (ZARYA)', 'ISS', 'ZARYA']
|
|
assert s[0][1].name == 'ISS (ZARYA)'
|
|
assert s[1][0] == ['FLOCK 2E-1']
|
|
assert s[1][1].name == 'FLOCK 2E-1'
|
|
|
|
sample_hipparcos_line = b"""\
|
|
H| 1| |00 00 00.22|+01 05 20.4| 9.10| |H|000.00091185|+01.08901332| | 3.54| -5.20| -1.88| 1.32| 0.74| 1.39| 1.36| 0.81| 0.32|-0.07|-0.11|-0.24| 0.09|-0.01| 0.10|-0.01| 0.01| 0.34| 0| 0.74| 1| 9.643|0.020| 9.130|0.019| | 0.482|0.025|T|0.55|0.03|L| | 9.2043|0.0020|0.017| 87| | 9.17| 9.24| | | | | | | | 1| | | | | | | | | |S| | |224700|B+00 5077 | | |0.66|F5 |S \n\
|
|
"""
|
|
|
|
def test_hipparcos():
|
|
b = BytesIO()
|
|
g = gzip.GzipFile(mode='wb', fileobj=b)
|
|
g.write(sample_hipparcos_line)
|
|
g.close()
|
|
b.seek(0)
|
|
try:
|
|
df = hipparcos.load_dataframe(b)
|
|
except ImportError:
|
|
# raise SkipTest('pandas not available')
|
|
# Assay doesn't understand skipping tests yet; just pass
|
|
# for now if Pandas cannot be imported.
|
|
return
|
|
assert len(df) == 1
|
|
row = df.iloc[0]
|
|
assert abs(row.ra_degrees - 000.00091185) < 1e-30
|
|
assert abs(row.dec_degrees - +01.08901332) < 1e-30
|
|
|
|
star_text = b"""\
|
|
# star names by constellation
|
|
# Andromeda (And)
|
|
677|_("Alpheratz") 1,2,5,6,11,12
|
|
677|_("Sirrah")
|
|
5447|_("Mirach") 1,2,5,6,11,12,23
|
|
9640|_("Almach") 1,2,5,6,11,12
|
|
9640|_("Almaak")
|
|
"""
|
|
|
|
def test_stellarium_star_names():
|
|
f = BytesIO(star_text)
|
|
star_names = stellarium.parse_star_names(f)
|
|
assert star_names[0].hip == 677
|
|
assert star_names[0].name == 'Alpheratz'
|
|
assert star_names[4].hip == 9640
|
|
assert star_names[4].name == 'Almaak'
|