Skip to content

Commit 9570932

Browse files
Edward Molterbsipocz
authored andcommitted
forgot to test before push 🤦
1 parent a33753b commit 9570932

File tree

4 files changed

+69
-229
lines changed

4 files changed

+69
-229
lines changed

astroquery/solarsystem/pds/core.py

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# 1. standard library imports
22
import re
3+
import os
34

45
# 2. third party imports
56
from astropy.time import Time
@@ -185,13 +186,13 @@ def ephemeris_async(self, planet, *, epoch=None, location=None, neptune_arcmodel
185186
)
186187

187188
# configure request_payload for ephemeris query
188-
# thankfully, adding extra planet-specific keywords here does not break query for other planets
189+
189190
request_payload = dict(
190191
[
191192
("abbrev", planet[:3]),
192193
("ephem", planet_defaults[planet]["ephem"]),
193194
("time", epoch.utc.iso[:16]),
194-
("fov", 10), # next few are figure options, can be hardcoded and ignored
195+
("fov", 10), # figure option - hardcode ok
195196
("fov_unit", planet.capitalize() + " radii"),
196197
("center", "body"),
197198
("center_body", planet.capitalize()),
@@ -202,7 +203,7 @@ def ephemeris_async(self, planet, *, epoch=None, location=None, neptune_arcmodel
202203
("center_dec", ""),
203204
("center_star", ""),
204205
("viewpoint", viewpoint),
205-
("observatory", observatory), # has no effect if viewpoint != observatory so can hardcode. no plans to implement calling observatories by name since ring node only names like 8 observatories
206+
("observatory", observatory),
206207
("latitude", latitude),
207208
("longitude", longitude),
208209
("lon_dir", "east"),
@@ -263,18 +264,15 @@ def _parse_result(self, response, verbose=None):
263264

264265
soup = BeautifulSoup(response.text, "html.parser")
265266
text = soup.get_text()
266-
if "\n" in text:
267-
text = text.replace("\r", "")
268-
else:
269-
text = text.replace("\r", "\n")
270-
textgroups = re.split("\n\n|\n \n", text)
267+
# need regex because some blank lines have spacebar and some do not
268+
textgroups = re.split(2*os.linesep+"|"+os.linesep+" "+os.linesep, text)
271269
ringtable = None
272270
for group in textgroups:
273-
group = group.strip(", \n")
271+
group = group.strip()
274272

275273
# input parameters. only thing needed is epoch
276274
if group.startswith("Observation"):
277-
epoch = group.split("\n")[0].split("e: ")[-1].strip(", \n")
275+
epoch = group.splitlines()[0].split("e: ")[-1].strip()
278276

279277
# minor body table part 1
280278
elif group.startswith("Body"):
@@ -292,7 +290,7 @@ def _parse_result(self, response, verbose=None):
292290
# minor body table part 2
293291
elif group.startswith("Sub-"):
294292

295-
group = "\n".join(group.split("\n")[2:]) # removing two-row header entirely
293+
group = os.linesep.join(group.splitlines()[2:]) # removing two-row header entirely
296294
bodytable2_names = ("NAIF ID", "Body", "sub_obs_lon", "sub_obs_lat", "sub_sun_lon", "sub_sun_lat", "phase", "distance")
297295
bodytable2_units = [None, None, u.deg, u.deg, u.deg, u.deg, u.deg, u.km * 1e6]
298296
bodytable2 = table.QTable.read(group, format="ascii.fixed_width",
@@ -306,12 +304,12 @@ def _parse_result(self, response, verbose=None):
306304

307305
# ring plane data
308306
elif group.startswith("Ring s"):
309-
lines = group.split("\n")
307+
lines = group.splitlines()
310308
for line in lines:
311309
l = line.split(":")
312310
if "Ring sub-solar latitude" in l[0]:
313311
[sub_sun_lat, sub_sun_lat_min, sub_sun_lat_max] = [
314-
float(s.strip(", \n()")) for s in re.split(r"\(|to", l[1])
312+
float(s.strip("()")) for s in re.split(r"\(|to", l[1])
315313
]
316314
systemtable = {
317315
"sub_sun_lat": sub_sun_lat * u.deg,
@@ -321,22 +319,22 @@ def _parse_result(self, response, verbose=None):
321319

322320
elif "Ring plane opening angle" in l[0]:
323321
systemtable["opening_angle"] = (
324-
float(re.sub("[a-zA-Z]+", "", l[1]).strip(", \n()")) * u.deg
322+
float(re.sub("[a-zA-Z]+", "", l[1]).strip("()")) * u.deg
325323
)
326324
elif "Ring center phase angle" in l[0]:
327-
systemtable["phase_angle"] = float(l[1].strip(", \n")) * u.deg
325+
systemtable["phase_angle"] = float(l[1].strip()) * u.deg
328326
elif "Sub-solar longitude" in l[0]:
329327
systemtable["sub_sun_lon"] = (
330-
float(re.sub("[a-zA-Z]+", "", l[1]).strip(", \n()")) * u.deg
328+
float(re.sub("[a-zA-Z]+", "", l[1]).strip("()")) * u.deg
331329
)
332330
elif "Sub-observer longitude" in l[0]:
333-
systemtable["sub_obs_lon"] = float(l[1].strip(", \n")) * u.deg
331+
systemtable["sub_obs_lon"] = float(l[1].strip()) * u.deg
334332
else:
335333
pass
336334

337335
# basic info about the planet
338336
elif group.startswith("Sun-planet"):
339-
lines = group.split("\n")
337+
lines = group.splitlines()
340338
for line in lines:
341339
l = line.split(":")
342340
if "Sun-planet distance (AU)" in l[0]:
@@ -347,14 +345,14 @@ def _parse_result(self, response, verbose=None):
347345
pass
348346
elif "Sun-planet distance (km)" in l[0]:
349347
systemtable["d_sun"] = (
350-
float(l[1].split("x")[0].strip(", \n")) * 1e6 * u.km
348+
float(l[1].split("x")[0].strip()) * 1e6 * u.km
351349
)
352350
elif "Observer-planet distance (km)" in l[0]:
353351
systemtable["d_obs"] = (
354-
float(l[1].split("x")[0].strip(", \n")) * 1e6 * u.km
352+
float(l[1].split("x")[0].strip()) * 1e6 * u.km
355353
)
356354
elif "Light travel time" in l[0]:
357-
systemtable["light_time"] = float(l[1].strip(", \n")) * u.second
355+
systemtable["light_time"] = float(l[1].strip()) * u.second
358356
else:
359357
pass
360358

@@ -373,13 +371,13 @@ def _parse_result(self, response, verbose=None):
373371

374372
# Saturn F-ring data
375373
elif group.startswith("F Ring"):
376-
lines = group.split("\n")
374+
lines = group.splitlines()
377375
for line in lines:
378376
l = line.split(":")
379377
if "F Ring pericenter" in l[0]:
380-
peri = float(re.sub("[a-zA-Z]+", "", l[1]).strip(", \n()"))
378+
peri = float(re.sub("[a-zA-Z]+", "", l[1]).strip("()"))
381379
elif "F Ring ascending node" in l[0]:
382-
ascn = float(l[1].strip(", \n"))
380+
ascn = float(l[1].strip())
383381
ringtable_names = ("ring", "pericenter", "ascending node")
384382
ringtable_units = [None, u.deg, u.deg]
385383
ringtable = table.QTable(
@@ -391,13 +389,13 @@ def _parse_result(self, response, verbose=None):
391389

392390
# Neptune ring arcs data
393391
elif group.startswith("Courage"):
394-
lines = group.split("\n")
392+
lines = group.split(os.linesep)[:5] #requires explicit split by os.linesep because windows and macos handle this text block differently
395393
for i in range(len(lines)):
396394
l = lines[i].split(":")
397-
ring = l[0].split("longitude")[0].strip(", \n")
395+
ring = l[0].split("longitude")[0].strip()
398396
[min_angle, max_angle] = [
399-
float(s.strip(", \n"))
400-
for s in re.sub("[a-zA-Z]+", "", l[1]).strip(", \n()").split()
397+
float(s)
398+
for s in re.sub("[a-zA-Z]+", "", l[1]).split()
401399
]
402400
if i == 0:
403401
ringtable_names = ("ring", "min_angle", "max_angle")

astroquery/solarsystem/pds/tests/test_pds.py

Lines changed: 16 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -63,30 +63,8 @@ def test_ephemeris_query_Uranus(patch_request):
6363
# check system table
6464
systemtable = bodytable.meta
6565
assert np.allclose(
66-
[
67-
-56.12233,
68-
-56.13586,
69-
-56.13586,
70-
-56.01577,
71-
0.10924,
72-
354.11072,
73-
354.12204,
74-
2947896667.0,
75-
3098568884.0,
76-
10335.713263,
77-
],
78-
[
79-
systemtable["sub_sun_lat"].to(u.deg).value,
80-
systemtable["sub_sun_lat_min"].to(u.deg).value,
81-
systemtable["sub_sun_lat_max"].to(u.deg).value,
82-
systemtable["opening_angle"].to(u.deg).value,
83-
systemtable["phase_angle"].to(u.deg).value,
84-
systemtable["sub_sun_lon"].to(u.deg).value,
85-
systemtable["sub_obs_lon"].to(u.deg).value,
86-
systemtable["d_sun"].to(u.km).value,
87-
systemtable["d_obs"].to(u.km).value,
88-
systemtable["light_time"].to(u.second).value,
89-
],
66+
[-56.12233, -56.13586, -56.13586, -56.01577, 0.10924, 354.11072, 354.12204, 2947896667.0, 3098568884.0, 10335.713263, ],
67+
[systemtable["sub_sun_lat"].to(u.deg).value, systemtable["sub_sun_lat_min"].to(u.deg).value, systemtable["sub_sun_lat_max"].to(u.deg).value, systemtable["opening_angle"].to(u.deg).value, systemtable["phase_angle"].to(u.deg).value, systemtable["sub_sun_lon"].to(u.deg).value, systemtable["sub_obs_lon"].to(u.deg).value, systemtable["d_sun"].to(u.km).value, systemtable["d_obs"].to(u.km).value, systemtable["light_time"].to(u.second).value, ],
9068
rtol=1e-2,
9169
)
9270

@@ -95,30 +73,8 @@ def test_ephemeris_query_Uranus(patch_request):
9573
assert mab["NAIF ID"] == 726
9674
assert mab["Body"] == "Mab"
9775
assert np.allclose(
98-
[
99-
42.011201,
100-
15.801323,
101-
5.368,
102-
0.623,
103-
223.976,
104-
55.906,
105-
223.969,
106-
56.013,
107-
0.10932,
108-
3098.514,
109-
],
110-
[
111-
mab["RA (deg)"].to(u.deg).value,
112-
mab["Dec (deg)"].to(u.deg).value,
113-
mab["dRA"].to(u.arcsec).value,
114-
mab["dDec"].to(u.arcsec).value,
115-
mab["sub_obs_lon"].to(u.deg).value,
116-
mab["sub_obs_lat"].to(u.deg).value,
117-
mab["sub_sun_lon"].to(u.deg).value,
118-
mab["sub_sun_lat"].to(u.deg).value,
119-
mab["phase"].to(u.deg).value,
120-
mab["distance"].to(u.km * 1e6).value,
121-
],
76+
[42.011201, 15.801323, 5.368, 0.623, 223.976, 55.906, 223.969, 56.013, 0.10932, 3098.514, ],
77+
[mab["RA (deg)"].to(u.deg).value, mab["Dec (deg)"].to(u.deg).value, mab["dRA"].to(u.arcsec).value, mab["dDec"].to(u.arcsec).value, mab["sub_obs_lon"].to(u.deg).value, mab["sub_obs_lat"].to(u.deg).value, mab["sub_sun_lon"].to(u.deg).value, mab["sub_sun_lat"].to(u.deg).value, mab["phase"].to(u.deg).value, mab["distance"].to(u.km * 1e6).value, ],
12278
rtol=1e-2,
12379
)
12480

@@ -139,30 +95,8 @@ def test_ephemeris_query_Pluto(patch_request):
13995
systemtable = bodytable.meta
14096
# check system table
14197
assert np.allclose(
142-
[
143-
57.57737,
144-
57.56961,
145-
57.56961,
146-
56.50534,
147-
1.64048,
148-
116.55873,
149-
118.8369,
150-
5142696000,
151-
5114486810,
152-
17060.091666,
153-
],
154-
[
155-
systemtable["sub_sun_lat"].to(u.deg).value,
156-
systemtable["sub_sun_lat_min"].to(u.deg).value,
157-
systemtable["sub_sun_lat_max"].to(u.deg).value,
158-
systemtable["opening_angle"].to(u.deg).value,
159-
systemtable["phase_angle"].to(u.deg).value,
160-
systemtable["sub_sun_lon"].to(u.deg).value,
161-
systemtable["sub_obs_lon"].to(u.deg).value,
162-
systemtable["d_sun"].to(u.km).value,
163-
systemtable["d_obs"].to(u.km).value,
164-
systemtable["light_time"].to(u.second).value,
165-
],
98+
[57.57737, 57.56961, 57.56961, 56.50534, 1.64048, 116.55873, 118.8369, 5142696000, 5114486810, 17060.091666, ],
99+
[systemtable["sub_sun_lat"].to(u.deg).value, systemtable["sub_sun_lat_min"].to(u.deg).value, systemtable["sub_sun_lat_max"].to(u.deg).value, systemtable["opening_angle"].to(u.deg).value, systemtable["phase_angle"].to(u.deg).value, systemtable["sub_sun_lon"].to(u.deg).value, systemtable["sub_obs_lon"].to(u.deg).value, systemtable["d_sun"].to(u.km).value, systemtable["d_obs"].to(u.km).value, systemtable["light_time"].to(u.second).value, ],
166100
rtol=1e-2,
167101
)
168102

@@ -171,30 +105,8 @@ def test_ephemeris_query_Pluto(patch_request):
171105
assert styx["NAIF ID"] == 905
172106
assert styx["Body"] == "Styx"
173107
assert np.allclose(
174-
[
175-
296.212477,
176-
-22.93533,
177-
-0.557,
178-
-1.259,
179-
350.443,
180-
56.472,
181-
352.72,
182-
57.544,
183-
1.64047,
184-
5114.509238,
185-
],
186-
[
187-
styx["RA (deg)"].to(u.deg).value,
188-
styx["Dec (deg)"].to(u.deg).value,
189-
styx["dRA"].to(u.arcsec).value,
190-
styx["dDec"].to(u.arcsec).value,
191-
styx["sub_obs_lon"].to(u.deg).value,
192-
styx["sub_obs_lat"].to(u.deg).value,
193-
styx["sub_sun_lon"].to(u.deg).value,
194-
styx["sub_sun_lat"].to(u.deg).value,
195-
styx["phase"].to(u.deg).value,
196-
styx["distance"].to(u.km * 1e6).value,
197-
],
108+
[296.212477, -22.93533, -0.557, -1.259, 350.443, 56.472, 352.72, 57.544, 1.64047, 5114.509238, ],
109+
[styx["RA (deg)"].to(u.deg).value, styx["Dec (deg)"].to(u.deg).value, styx["dRA"].to(u.arcsec).value, styx["dDec"].to(u.arcsec).value, styx["sub_obs_lon"].to(u.deg).value, styx["sub_obs_lat"].to(u.deg).value, styx["sub_sun_lon"].to(u.deg).value, styx["sub_sun_lat"].to(u.deg).value, styx["phase"].to(u.deg).value, styx["distance"].to(u.km * 1e6).value, ],
198110
rtol=1e-2,
199111
)
200112

@@ -214,27 +126,10 @@ def test_ephemeris_query_Neptune(patch_request):
214126
)
215127

216128
assert np.allclose(
217-
[63.81977,
218-
55.01978,
219-
44.21976,
220-
40.41978,
221-
26.41978,
222-
64.81977,
223-
59.11976,
224-
45.21976,
225-
43.41978,
226-
36.01978],
227-
[ringtable[ringtable.loc_indices["Courage"]]["min_angle"].to(u.deg).value,
228-
ringtable[ringtable.loc_indices["Liberte"]]["min_angle"].to(u.deg).value,
229-
ringtable[ringtable.loc_indices["Egalite A"]]["min_angle"].to(u.deg).value,
230-
ringtable[ringtable.loc_indices["Egalite B"]]["min_angle"].to(u.deg).value,
231-
ringtable[ringtable.loc_indices["Fraternite"]]["min_angle"].to(u.deg).value,
232-
ringtable[ringtable.loc_indices["Courage"]]["max_angle"].to(u.deg).value,
233-
ringtable[ringtable.loc_indices["Liberte"]]["max_angle"].to(u.deg).value,
234-
ringtable[ringtable.loc_indices["Egalite A"]]["max_angle"].to(u.deg).value,
235-
ringtable[ringtable.loc_indices["Egalite B"]]["max_angle"].to(u.deg).value,
236-
ringtable[ringtable.loc_indices["Fraternite"]]["max_angle"].to(u.deg).value,
237-
], rtol=1e-3)
129+
[63.81977, 55.01978, 44.21976, 40.41978, 26.41978, 64.81977, 59.11976, 45.21976, 43.41978, 36.01978],
130+
[ringtable[ringtable.loc_indices["Courage"]]["min_angle"].to(u.deg).value, ringtable[ringtable.loc_indices["Liberte"]]["min_angle"].to(u.deg).value, ringtable[ringtable.loc_indices["Egalite A"]]["min_angle"].to(u.deg).value, ringtable[ringtable.loc_indices["Egalite B"]]["min_angle"].to(u.deg).value, ringtable[ringtable.loc_indices["Fraternite"]]["min_angle"].to(u.deg).value, ringtable[ringtable.loc_indices["Courage"]]["max_angle"].to(u.deg).value, ringtable[ringtable.loc_indices["Liberte"]]["max_angle"].to(u.deg).value, ringtable[ringtable.loc_indices["Egalite A"]]["max_angle"].to(u.deg).value, ringtable[ringtable.loc_indices["Egalite B"]]["max_angle"].to(u.deg).value, ringtable[ringtable.loc_indices["Fraternite"]]["max_angle"].to(u.deg).value, ],
131+
rtol=1e-3
132+
)
238133

239134

240135
def test_ephemeris_query_Saturn(patch_request):
@@ -247,13 +142,10 @@ def test_ephemeris_query_Saturn(patch_request):
247142
)
248143

249144
assert np.allclose(
250-
[249.23097,
251-
250.34081
252-
],
253-
[
254-
ringtable[ringtable.loc_indices["F"]]["pericenter"].to(u.deg).value,
255-
ringtable[ringtable.loc_indices["F"]]["ascending node"].to(u.deg).value
256-
], rtol=1e-3)
145+
[249.23097, 250.34081],
146+
[ringtable[ringtable.loc_indices["F"]]["pericenter"].to(u.deg).value, ringtable[ringtable.loc_indices["F"]]["ascending node"].to(u.deg).value],
147+
rtol=1e-3
148+
)
257149

258150

259151
def test_ephemeris_query_payload():

0 commit comments

Comments
 (0)