Esempio n. 1
0
def test_plot_trajectory_without_attractor_raises_error():
    frame = OrbitPlotter3D()

    with pytest.raises(ValueError) as excinfo:
        frame.plot_trajectory({})
    assert ("An attractor must be set up first, please use "
            "set_attractor(Major_Body)." in excinfo.exconly())
def test_show_calls_prepare_plot(mock_prepare_plot, mock_iplot):
    m = OrbitPlotter3D()
    earth = Orbit.from_body_ephem(Earth)
    m.plot(orbit=earth, label="Object")
    m.show()

    assert mock_iplot.call_count == 1
    mock_prepare_plot.assert_called_once_with()
Esempio n. 3
0
def test_plot_sets_attractor():
    frame = OrbitPlotter3D()
    assert frame._attractor is None
    assert frame._attractor_data == {}

    frame.plot(iss)
    assert frame._attractor == iss.attractor
    assert frame._attractor_data["name"] == iss.attractor.name
Esempio n. 4
0
def test_set_view():
    frame = OrbitPlotter3D()
    frame.set_view(0 * u.deg, 0 * u.deg, 1000 * u.m)

    eye = frame.figure["layout"]["scene"]["camera"]["eye"]
    assert eye["x"] == 1
    assert eye["y"] == 0
    assert eye["z"] == 0
    def plot(self, sats_to_plot=None):
        if not sats_to_plot:
            sats_to_plot = self.planes
        s = np.arange(0, len(self), len(self) // sats_to_plot)

        op = OrbitPlotter3D()
        for sat in self.satellites[s]:
            f = op.plot(sat)
        return f
def test_savefig_calls_prepare_plot(mock_prepare_plot, mock_export):
    m = OrbitPlotter3D()
    earth = Orbit.from_body_ephem(Earth)
    m.plot(orbit=earth, label="Object")
    with tempfile.NamedTemporaryFile() as fp:
        m.savefig(filename=fp.name + ".jpeg")

    assert mock_export.call_count == 1
    mock_prepare_plot.assert_called_once_with()
Esempio n. 7
0
def test_get_3d_figure_has_expected_properties():
    frame = OrbitPlotter3D()
    figure = frame.show()

    assert figure.data == ()
    assert figure.layout.autosize is True
    assert "xaxis" in figure.layout.scene
    assert "yaxis" in figure.layout.scene
    assert "zaxis" in figure.layout.scene
    assert "aspectmode" in figure.layout.scene
Esempio n. 8
0
def test_plot_3d_trajectory_plots_a_trajectory():
    frame = OrbitPlotter3D()
    assert len(frame.trajectories) == 0

    trajectory = churi.sample()
    frame.set_attractor(Sun)
    frame.plot_trajectory(trajectory)

    assert len(frame.trajectories) == 1
    assert frame._attractor == Sun
def test_plot_trajectory_plots_a_trajectory():
    frame = OrbitPlotter3D()
    assert len(frame._data) == 0

    earth = Orbit.from_body_ephem(Earth)
    trajectory = earth.sample()
    frame.set_attractor(Sun)
    frame.plot_trajectory(trajectory)
    assert len(frame._data) == 1
    assert frame._attractor == Sun
Esempio n. 10
0
def test_get_figure_has_expected_properties():
    frame = OrbitPlotter3D()
    figure = frame.figure

    assert figure["data"] == [{}]
    assert figure["layout"]["autosize"] is True
    assert "xaxis" in figure["layout"]["scene"]
    assert "yaxis" in figure["layout"]["scene"]
    assert "zaxis" in figure["layout"]["scene"]
    assert "aspectmode" in figure["layout"]["scene"]
Esempio n. 11
0
def test_show_calls_prepare_plot():
    patcher = mock.patch.object(OrbitPlotter3D, '_prepare_plot')
    patched = patcher.start()

    m = OrbitPlotter3D()
    earth = Orbit.from_body_ephem(Earth)
    m.plot(orbit=earth, label="Object")
    m.show()

    assert patched.call_count == 1
    patched.assert_called_with()
Esempio n. 12
0
def test_savefig_calls_prepare_plot():
    patcher = mock.patch.object(OrbitPlotter3D, '_prepare_plot')
    patched = patcher.start()

    m = OrbitPlotter3D()
    earth = Orbit.from_body_ephem(Earth)
    m.plot(orbit=earth, label="Object")
    with tempfile.NamedTemporaryFile() as fp:
        m.savefig(filename=fp.name + ".jpeg")

    assert patched.call_count == 1
    patched.assert_called_with()
Esempio n. 13
0
def test_set_different_attractor_raises_error():
    body1 = mock.MagicMock()
    body1.name = "1"

    body2 = mock.MagicMock()
    body2.name = "2"

    frame = OrbitPlotter3D()
    frame.set_attractor(body1)

    with pytest.raises(NotImplementedError) as excinfo:
        frame.set_attractor(body2)
    assert "Attractor has already been set to 1." in excinfo.exconly()
Esempio n. 14
0
#Plot
from plotly.offline import init_notebook_mode
init_notebook_mode(connected=True)

from poliastro.plotting import OrbitPlotter3D
from poliastro.bodies import Earth, Mars

#Visual setting of the graph
color_earth0 = '#3d4cd5'
color_earthf = '#525fd5'
color_mars0 = '#ec3941'
color_marsf = '#ec1f28'
color_sun = '#ffcc00'
color_orbit = '#888888'
color_trans = '#444444'

frame = OrbitPlotter3D()

frame.set_attractor(Sun)

frame.plot_trajectory(rr_earth, label=Earth)
frame.plot_trajectory(rr_mars, label=Mars, color=color_marsf)

frame.plot_trajectory(ss0_trans.sample(times_vector),
                      label="MSL trajectory",
                      color=color_trans)

frame.set_view(30 * u.deg, 260 * u.deg, distance=3 * u.km)
frame.show(title="MSL Mission: from Earth to Mars")
Esempio n. 15
0
def test_plot_appends_data():
    frame = OrbitPlotter3D()
    assert len(frame._data) == 0

    frame.plot(iss)
    assert len(frame._data) == 1 + 1
Esempio n. 16
0
def plot_object(objectplo):
    obj = Orbit.from_body_ephem(objectplo)
    a = OrbitPlotter3D()
    a.plot(orbit=obj, label=str(objectplo))
    return a.figure
# Solve for the transfer maneuver
man_lambert = Maneuver.lambert(ss_earth, ss_mars)

# Get the transfer and final orbits
ss_trans, ss_target = ss_earth.apply_maneuver(man_lambert, intermediate=True)

# Let's plot this transfer orbit in 3D!

# In[8]:

from poliastro.plotting import OrbitPlotter3D

# In[9]:

plotter = OrbitPlotter3D()
plotter.set_attractor(Sun)

plotter.plot_ephem(earth, date_launch, label="Earth at launch position")
plotter.plot_ephem(mars, date_arrival, label="Mars at arrival position")
plotter.plot_trajectory(ss_trans.sample(max_anomaly=180 * u.deg),
                        color="black",
                        label="Transfer orbit")
plotter.set_view(30 * u.deg, 260 * u.deg, distance=3 * u.km)

# Not bad! Let's celebrate with some music!

# In[10]:

from IPython.display import YouTubeVideo
YouTubeVideo('zSgiXGELjbc')
  def __init__(self, position, velocity):
    self.r_start =  position*u.km
    self.v_start =  velocity*u.km/u.s

    self.orbit = Orbit.from_vectors(Earth, self.r_start, self.v_start)

  def maneuver(self, dv):
    man = Maneuver.impulse(dv*u.km/u.s)
    self.orbit = self.orbit.apply_maneuver(man)

"""This section is just testing out the orbit plotter and the maneuver functions"""

test1 = Spacecraft((-6045, -3490, 2500),(2, 0.5, 8))
test2 = Spacecraft((8000, 0, 0), (0, 8, 0))

op = OrbitPlotter3D()
op.plot(test1.orbit)
op.plot(test2.orbit)

#test1.maneuver((0,0,1))
test1.orbit = test1.orbit.propagate(30*u.min)
test2.orbit = test2.orbit.propagate(30*u.min)

op = OrbitPlotter3D()
op.plot(test1.orbit)
op.plot(test2.orbit)

test2.orbit.inc

"""This section is the first, most simple simulation. The goal is for a single spacecraft to change its orbit to a circular, polar orbit through a series of impulse maneuvers. The series of impulse maneuvers are 30 impulses that are each 20 minutes apart. A maneuver can be along the x, y or z axis and is fixed at 500 mps impulses for the purpose of this first experiment."""
# In[3]:

roadster = Ephem.from_horizons(
    "SpaceX Roadster",
    epochs=time_range(EPOCH, end=EPOCH + 360 * u.day),
    attractor=Sun,
    plane=Planes.EARTH_ECLIPTIC,
    id_type="majorbody",
)
roadster

# In[4]:

from poliastro.plotting.misc import plot_solar_system

# In[5]:

frame = plot_solar_system(outer=False, epoch=EPOCH)
frame.plot_ephem(roadster, EPOCH, label="SpaceX Roadster", color="black")

# In[6]:

frame = OrbitPlotter3D(plane=Planes.EARTH_ECLIPTIC)

frame.plot_body_orbit(Earth, EPOCH)
frame.plot_body_orbit(Mars, EPOCH)

frame.plot_ephem(roadster, EPOCH, label="SpaceX Roadster", color="black")

frame.set_view(45 * u.deg, -120 * u.deg, 4 * u.km)
def test_dark_theme():
    frame = OrbitPlotter3D(dark=True)
    assert frame._layout.template.layout.plot_bgcolor == "rgb(17,17,17)"