Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_earth_satellite_orbit():
r = [3_539.08827417, 5_310.19903462, 3_066.31301457] * u.km
v = [-6.49780849, 3.24910291, 1.87521413] * u.km / u.s
ss = Orbit.from_vectors(Earth, r, v)
C_D = 2.2 * u.one # dimentionless (any value would do)
A = ((np.pi / 4.0) * (u.m ** 2)).to(u.km ** 2)
m = 100 * u.kg
spacecraft = Spacecraft(A, C_D, m)
earth_satellite = EarthSatellite(ss, spacecraft)
assert isinstance(earth_satellite.orbit, Orbit)
def near_parabolic():
r = [8.0e3, 1.0e3, 0.0] * u.km
v = [-0.5, -0.5, 0.0] * u.km / u.s
return Orbit.from_vectors(Earth, r, v)
def test_orbit_change_attractor_open():
r = [-6_045, -3_490, 2_500] * u.km
v = [-15.457, 6.618, 2.533] * u.km / u.s
ss = Orbit.from_vectors(Earth, r, v)
with pytest.warns(PatchedConicsWarning) as record:
ss.change_attractor(Sun)
w = record.pop(PatchedConicsWarning)
assert "Leaving the SOI of the current attractor" in w.message.args[0]
def test_orbit_no_frame_representation():
date_launch = Time("2011-11-26 15:02", scale="utc")
r = [61_445.76498656, 24_827.93010168, 0.0] * u.km
v = [-0.42581645, -0.18867869, 0.0] * u.km / u.s
ss = Orbit.from_vectors(Moon, r, v, date_launch)
expected_str = "106 x -142299 km x 180.0 deg orbit around Moon (\u263E) at epoch 2011-11-26 15:02:00.000 (UTC)"
assert str(ss) == repr(ss) == expected_str
def test_state_raises_unitserror_if_rv_units_are_wrong():
_d = [1.0, 0.0, 0.0] * u.AU
wrong_v = [0.0, 1.0e-6, 0.0] * u.AU
with pytest.raises(u.UnitsError) as excinfo:
Orbit.from_vectors(Sun, _d, wrong_v)
assert (
"UnitsError: Argument 'v' to function 'from_vectors' must be in units convertible to 'm / s'."
in excinfo.exconly()
)
def test_orbit_from_custom_body_raises_error_when_asked_frame():
attractor = Body(Sun, 1 * u.km ** 3 / u.s ** 2, "_DummyPlanet")
r = [1e09, -4e09, -1e09] * u.km
v = [5e00, -1e01, -4e00] * u.km / u.s
ss = Orbit.from_vectors(attractor, r, v)
with pytest.raises(NotImplementedError) as excinfo:
ss.get_frame()
assert (
"Frames for orbits around custom bodies are not yet supported"
in excinfo.exconly()
)
def test_sample_big_orbits():
# See https://github.com/poliastro/poliastro/issues/265
ss = Orbit.from_vectors(
Sun,
[-9_018_878.6, -94_116_055, 22_619_059] * u.km,
[-49.950923, -12.948431, -4.2925158] * u.km / u.s,
)
positions = ss.sample(15)
assert len(positions) == 15
def _targetting(departure_body, target_body, t_launch, t_arrival):
"""This function returns the increment in departure and arrival velocities."""
# Get position and velocities for departure and arrival
rr_dpt_body, vv_dpt_body = _get_state(departure_body, t_launch)
rr_arr_body, vv_arr_body = _get_state(target_body, t_arrival)
# Transform into Orbit objects
attractor = departure_body.parent
ss_dpt = Orbit.from_vectors(attractor, rr_dpt_body, vv_dpt_body, epoch=t_launch)
ss_arr = Orbit.from_vectors(attractor, rr_arr_body, vv_arr_body, epoch=t_arrival)
# Define time of flight
tof = ss_arr.epoch - ss_dpt.epoch
if tof <= 0:
return None, None, None, None, None
try:
# Lambert is now a Maneuver object
man_lambert = Maneuver.lambert(ss_dpt, ss_arr)
# Get norm delta velocities
dv_dpt = norm(man_lambert.impulses[0][1])
dv_arr = norm(man_lambert.impulses[1][1])
# Compute all the output variables
def _targetting(departure_body, target_body, t_launch, t_arrival):
"""This function returns the increment in departure and arrival velocities."""
# Get position and velocities for departure and arrival
rr_dpt_body, vv_dpt_body = _get_state(departure_body, t_launch)
rr_arr_body, vv_arr_body = _get_state(target_body, t_arrival)
# Transform into Orbit objects
attractor = departure_body.parent
ss_dpt = Orbit.from_vectors(attractor, rr_dpt_body, vv_dpt_body, epoch=t_launch)
ss_arr = Orbit.from_vectors(attractor, rr_arr_body, vv_arr_body, epoch=t_arrival)
# Define time of flight
tof = ss_arr.epoch - ss_dpt.epoch
if tof <= 0:
return None, None, None, None, None
try:
# Lambert is now a Maneuver object
man_lambert = Maneuver.lambert(ss_dpt, ss_arr)
# Get norm delta velocities
dv_dpt = norm(man_lambert.impulses[0][1])
dv_arr = norm(man_lambert.impulses[1][1])