1
1
# Licensed under a 3-clause BSD style license - see LICENSE.rst
2
2
3
+ import random
3
4
4
- import pytest
5
5
from numpy .ma import is_masked
6
+ import numpy as np
7
+ import pytest
6
8
9
+ from astropy .coordinates import spherical_to_cartesian
7
10
from astropy .tests .helper import assert_quantity_allclose
11
+ import astropy .units as u
8
12
from astropy .utils .exceptions import AstropyDeprecationWarning
9
13
10
14
from ... import jplhorizons
@@ -23,7 +27,7 @@ def test_ephemerides_query(self):
23
27
assert res ['targetname' ] == "1 Ceres (A801 AA)"
24
28
assert res ['datetime_str' ] == "2000-Jan-01 00:00:00.000"
25
29
assert res ['solar_presence' ] == ""
26
- assert res ['flags ' ] == ""
30
+ assert res ['lunar_presence ' ] == ""
27
31
assert res ['elongFlag' ] == '/L'
28
32
assert res ['airmass' ] == 999
29
33
@@ -75,7 +79,7 @@ def test_ephemerides_query_two(self):
75
79
assert res ['targetname' ] == "1P/Halley"
76
80
assert res ['datetime_str' ] == "2080-Jan-11 09:00"
77
81
assert res ['solar_presence' ] == ""
78
- assert res ['flags ' ] == "m"
82
+ assert res ['lunar_presence ' ] == "m"
79
83
assert res ['elongFlag' ] == '/L'
80
84
81
85
for value in ['H' , 'G' ]:
@@ -98,7 +102,7 @@ def test_ephemerides_query_three(self):
98
102
assert res ['targetname' ] == "73P/Schwassmann-Wachmann 3"
99
103
assert res ['datetime_str' ] == "2080-Jan-01 00:00"
100
104
assert res ['solar_presence' ] == "*"
101
- assert res ['flags ' ] == "m"
105
+ assert res ['lunar_presence ' ] == "m"
102
106
assert res ['elongFlag' ] == '/L'
103
107
104
108
for value in ['H' , 'G' ]:
@@ -123,7 +127,7 @@ def test_ephemerides_query_four(self):
123
127
assert res ['targetname' ] == "167P/CINEOS"
124
128
assert res ['datetime_str' ] == "2080-Jan-01 00:00"
125
129
assert res ['solar_presence' ] == "*"
126
- assert res ['flags ' ] == "m"
130
+ assert res ['lunar_presence ' ] == "m"
127
131
assert res ['elongFlag' ] == '/T'
128
132
129
133
for value in ['H' , 'G' , 'M1' , 'k1' ]:
@@ -150,7 +154,7 @@ def test_ephemerides_query_five(self):
150
154
assert res ['targetname' ] == "12P/Pons-Brooks"
151
155
assert res ['datetime_str' ] == "2080-Jan-01 00:00"
152
156
assert res ['solar_presence' ] == "*"
153
- assert res ['flags ' ] == "m"
157
+ assert res ['lunar_presence ' ] == "m"
154
158
assert res ['elongFlag' ] == '/L'
155
159
156
160
for value in ['H' , 'G' , 'phasecoeff' ]:
@@ -405,3 +409,51 @@ def test_ephemerides_extraprecision(self):
405
409
vec_highprec = obj .ephemerides (extra_precision = True )
406
410
407
411
assert (vec_simple ['RA' ][0 ]- vec_highprec ['RA' ][0 ]) > 1e-7
412
+
413
+ def test_geodetic_queries (self ):
414
+ """
415
+ black-box test for observer and vectors queries with geodetic
416
+ coordinates. checks spatial sensibility.
417
+ """
418
+ phobos = {
419
+ 'body' : 401 ,
420
+ 'lon' : random .randint (- 150 , - 1 ),
421
+ 'lat' : random .randint (- 80 , 80 ),
422
+ 'elevation' : 0
423
+ }
424
+ deimos = {
425
+ 'body' : 402 ,
426
+ 'lon' : random .randint (- 150 , - 1 ),
427
+ 'lat' : random .randint (- 80 , 80 ),
428
+ 'elevation' : 0
429
+ }
430
+ epochs = [random .randint (int (2.3e6 ), int (2.5e6 ))]
431
+ deimos_phobos = jplhorizons .Horizons (
432
+ phobos , location = deimos , epochs = epochs
433
+ )
434
+ phobos_deimos = jplhorizons .Horizons (
435
+ deimos , location = phobos , epochs = epochs
436
+ )
437
+ pd_eph = phobos_deimos .ephemerides ()
438
+ dp_eph = deimos_phobos .ephemerides ()
439
+ dp_xyz = spherical_to_cartesian (
440
+ dp_eph ['delta' ], dp_eph ['DEC' ], dp_eph ['RA' ]
441
+ )
442
+ pd_xyz = spherical_to_cartesian (
443
+ pd_eph ['delta' ], pd_eph ['DEC' ], pd_eph ['RA' ]
444
+ )
445
+ elementwise = [(dp_el + pd_el ) for dp_el , pd_el in zip (dp_xyz , pd_xyz )]
446
+ eph_offset = (sum ([off ** 2 for off in elementwise ]) ** 0.5 ).to (u .km )
447
+ # horizons can do better than this, but we'd have to go to a little
448
+ # more trouble than is necessary for a software test...
449
+ assert eph_offset < 10 * u .km
450
+ # ...and vectors queries are really what you're meant to use for
451
+ # this sort of thing.
452
+ pd_vec , dp_vec = phobos_deimos .vectors (), deimos_phobos .vectors ()
453
+ vec_offset = np .sum (
454
+ (
455
+ pd_vec .as_array (names = ('x' , 'y' , 'z' )).view ('f8' )
456
+ + dp_vec .as_array (names = ('x' , 'y' , 'z' )).view ('f8' )
457
+ ) ** 2
458
+ )
459
+ assert (vec_offset * u .au .to (u .km )) < 1
0 commit comments