diff --git a/.travis.yml b/.travis.yml
index fd235711..769e58c4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -12,6 +12,9 @@ branches:
     - 0.5.x
     - 0.6.x
 
+env:
+  - MPLBACKEND="Agg"
+
 matrix:
   include:
     - os: osx
@@ -34,12 +37,17 @@ before_install:
 
 install:
   - pip install numpy  # Required
-  - pip install .  # Test installation correctness
+  - pip install pep8 mypy
   - pip install sphinx sphinx_rtd_theme nbsphinx ipython  # Install documentation dependencies
+  - pip install .  # Test installation correctness
+
+before_script:
+  - pep8 setup.py src/  # Check PEP8 compliance
+  - mypy --ignore-missing-imports --check-untyped-defs src/  # Check MyPy diagnostics
 
 script:
   - python setup.py test -vv  # Test against installed code
-  - sphinx-build -vW -b html docs/source _HTMLTest #Test docs build
+  - sphinx-build -vW -b html docs/source _HTMLTest  # Test docs build
 
 after_success:
   # Uninstall to test coverage against sources
diff --git a/setup.cfg b/setup.cfg
index 0e1fa302..06b96ece 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -6,3 +6,7 @@ norecursedirs =
 python_files =
     test_*.py
 doctest_plus = disabled
+
+[pep8]
+ignore = E731
+max-line-length = 120
diff --git a/setup.py b/setup.py
index 20ff6ca8..a17e69c4 100644
--- a/setup.py
+++ b/setup.py
@@ -40,8 +40,8 @@ setup(
     download_url="https://github.com/poliastro/poliastro",
     license="MIT",
     keywords=[
-      "aero", "aerospace", "engineering",
-      "astrodynamics", "orbits", "kepler", "orbital mechanics"
+        "aero", "aerospace", "engineering",
+        "astrodynamics", "orbits", "kepler", "orbital mechanics"
     ],
     python_requires=">=3.5",
     install_requires=[
@@ -64,24 +64,24 @@ setup(
     packages=find_packages('src'),
     package_dir={'': 'src'},
     entry_points={
-              'console_scripts': [
-                  'poliastro = poliastro.cli:main'
-              ]
+        'console_scripts': [
+            'poliastro = poliastro.cli:main'
+        ]
     },
     classifiers=[
-      "Development Status :: 4 - Beta",
-      "Intended Audience :: Education",
-      "Intended Audience :: Science/Research",
-      "License :: OSI Approved :: MIT License",
-      "Operating System :: OS Independent",
-      "Programming Language :: Python",
-      "Programming Language :: Python :: 3",
-      "Programming Language :: Python :: 3.5",
-      "Programming Language :: Python :: 3.6",
-      "Programming Language :: Python :: Implementation :: CPython",
-      "Topic :: Scientific/Engineering",
-      "Topic :: Scientific/Engineering :: Physics",
-      "Topic :: Scientific/Engineering :: Astronomy",
+        "Development Status :: 4 - Beta",
+        "Intended Audience :: Education",
+        "Intended Audience :: Science/Research",
+        "License :: OSI Approved :: MIT License",
+        "Operating System :: OS Independent",
+        "Programming Language :: Python",
+        "Programming Language :: Python :: 3",
+        "Programming Language :: Python :: 3.5",
+        "Programming Language :: Python :: 3.6",
+        "Programming Language :: Python :: Implementation :: CPython",
+        "Topic :: Scientific/Engineering",
+        "Topic :: Scientific/Engineering :: Physics",
+        "Topic :: Scientific/Engineering :: Astronomy",
     ],
     long_description=io.open('README.rst', encoding='utf-8').read(),
     package_data={"poliastro": ['tests/*.py']},
diff --git a/src/poliastro/cli.py b/src/poliastro/cli.py
index 03b66b96..ce09ab62 100644
--- a/src/poliastro/cli.py
+++ b/src/poliastro/cli.py
@@ -14,21 +14,12 @@ def main():
         description="Command line tools for the poliastro Python library.")
     parser.add_argument("--version", action='version',
                         version=poliastro.__version__)
-
-    subparsers = parser.add_subparsers(help='Available commands')
-
-    download_parser = subparsers.add_parser(
-        "download-dastcom5",
-        help="Downloads DASTCOM5 database")
-    download_parser.add_argument(
-        "-p", "--path", help="Download path")
+    parser.add_argument("--download-dastcom5", action="store_true",
+                        help="Downloads DASTCOM5 database")
 
     args = parser.parse_args()
-    try:
-        if args.path:
-            download_dastcom5(args.path)
-        else:
-            download_dastcom5()
-    except AttributeError:
-        parser.print_help()
 
+    if args.download_dastcom5:
+        download_dastcom5()
+    else:
+        parser.print_help()
diff --git a/src/poliastro/maneuver.py b/src/poliastro/maneuver.py
index 95bf6436..8340bf50 100644
--- a/src/poliastro/maneuver.py
+++ b/src/poliastro/maneuver.py
@@ -93,7 +93,7 @@ class Maneuver(object):
         Rs = r_b / r_i
         dv_a = ((np.sqrt(2 * Rs / (1 + Rs)) - 1) * v_i).decompose()
         dv_b = (-np.sqrt(2 / Rs) * (np.sqrt(1 / (1 + Rs / R)) -
-                                   np.sqrt(1 / (1 + Rs))) * v_i).decompose()
+                                    np.sqrt(1 / (1 + Rs))) * v_i).decompose()
         dv_c = (-(np.sqrt(2 * Rs / (R + Rs)) - 1) / np.sqrt(R) * v_i).decompose()
         t_trans1 = (np.pi * np.sqrt((r_i * (1 + Rs) / 2) ** 3 / k)).decompose()
         t_trans2 = (np.pi * np.sqrt((r_i * (R + Rs) / 2) ** 3 / k)).decompose()
diff --git a/src/poliastro/neos/dastcom5.py b/src/poliastro/neos/dastcom5.py
index 701dc367..b50d1bfc 100644
--- a/src/poliastro/neos/dastcom5.py
+++ b/src/poliastro/neos/dastcom5.py
@@ -506,8 +506,8 @@ def download_dastcom5():
 
 
 def _show_download_progress(transferred, block, totalsize):
-    trans_mb = transferred*block/(1024*1024)
-    total_mb = totalsize/(1024*1024)
+    trans_mb = transferred * block / (1024 * 1024)
+    total_mb = totalsize / (1024 * 1024)
     print('%.2f MB / %.2f MB' % (trans_mb, total_mb), end='\r', flush=True)
 
 
@@ -526,13 +526,13 @@ def entire_db():
     ast_database = asteroid_db()
     com_database = comet_db()
 
-    ast_database = pd.DataFrame(ast_database[list(ast_database.dtype.names[:17])
-                                             + list(ast_database.dtype.names[-4:-3])
-                                             + list(ast_database.dtype.names[-2:])])
+    ast_database = pd.DataFrame(ast_database[list(ast_database.dtype.names[:17]) +
+                                             list(ast_database.dtype.names[-4:-3]) +
+                                             list(ast_database.dtype.names[-2:])])
     ast_database.rename(columns={'ASTNAM': 'NAME', 'NO': 'NUMBER', 'CALEPO': 'CALEPOCH'}, inplace=True)
-    com_database = pd.DataFrame(com_database[list(com_database.dtype.names[:17])
-                                             + list(com_database.dtype.names[-4:-3])
-                                             + list(com_database.dtype.names[-2:])])
+    com_database = pd.DataFrame(com_database[list(com_database.dtype.names[:17]) +
+                                             list(com_database.dtype.names[-4:-3]) +
+                                             list(com_database.dtype.names[-2:])])
     com_database.rename(columns={'COMNAM': 'NAME', 'NO': 'NUMBER', 'CALEPO': 'CALEPOCH'}, inplace=True)
     df = ast_database.append(com_database, ignore_index=True)
     df[['NAME', 'DESIG', 'IREF']] = df[['NAME', 'DESIG', 'IREF']].apply(lambda x: x.str.strip().str.decode('utf-8'))
diff --git a/src/poliastro/neos/neows.py b/src/poliastro/neos/neows.py
index 25b2d265..0c551ca9 100644
--- a/src/poliastro/neos/neows.py
+++ b/src/poliastro/neos/neows.py
@@ -37,7 +37,7 @@ def orbit_from_spk_id(spk_id):
         NEA orbit.
 
     """
-    payload = {'api_key' : 'DEMO_KEY'}
+    payload = {'api_key': 'DEMO_KEY'}
 
     response = requests.get(NEOWS_URL + spk_id, params=payload)
     response.raise_for_status()
@@ -55,7 +55,7 @@ def orbit_from_spk_id(spk_id):
     epoch = Time(orbital_data['orbit_determination_date'])
 
     return Orbit.from_classical(attractor, a, ecc, inc,
-                                    raan, argp, nu, epoch)
+                                raan, argp, nu, epoch)
 
 
 def spk_id_from_name(name):
@@ -102,8 +102,8 @@ def spk_id_from_name(name):
             bodies += body.string + '\n'
         raise ValueError(str(len(object_list)) + ' different bodies found:\n' + bodies)
     else:
-        raise ValueError('Object could not be found. You can visit: '
-                         + SBDB_URL + '?sstr=' + name + ' for more information.')
+        raise ValueError('Object could not be found. You can visit: ' +
+                         SBDB_URL + '?sstr=' + name + ' for more information.')
 
 
 def orbit_from_name(name):
diff --git a/src/poliastro/plotting.py b/src/poliastro/plotting.py
index 6e02b4cf..1472b294 100644
--- a/src/poliastro/plotting.py
+++ b/src/poliastro/plotting.py
@@ -2,7 +2,6 @@
 """ Plotting utilities.
 
 """
-
 import numpy as np
 
 import matplotlib as mpl
@@ -58,7 +57,6 @@ class OrbitPlotter(object):
             _, self.ax = plt.subplots(figsize=(6, 6))
         self.num_points = num_points
         self._frame = None
-        self._states = []
         self._attractor_radius = None
 
     def set_frame(self, p_vec, q_vec, w_vec):
@@ -119,8 +117,6 @@ class OrbitPlotter(object):
         elif new_radius < self._attractor_radius:
             self.set_attractor(orbit)
 
-        self._states.append(orbit)
-
         lines = []
 
         nu_vals = self._generate_vals(orbit.state)
diff --git a/src/poliastro/twobody/classical.py b/src/poliastro/twobody/classical.py
index 7e661a76..b01fa9a9 100644
--- a/src/poliastro/twobody/classical.py
+++ b/src/poliastro/twobody/classical.py
@@ -151,8 +151,8 @@ class ClassicalState(BaseState):
                       self.nu.to(u.rad).value)
 
         return poliastro.twobody.rv.RVState(self.attractor,
-                                                        r * u.km,
-                                                        v * u.km / u.s)
+                                            r * u.km,
+                                            v * u.km / u.s)
 
     def to_classical(self):
         """Converts to classical orbital elements representation.
diff --git a/src/poliastro/twobody/decorators.py b/src/poliastro/twobody/decorators.py
index 87c6a956..0782dd76 100644
--- a/src/poliastro/twobody/decorators.py
+++ b/src/poliastro/twobody/decorators.py
@@ -18,7 +18,7 @@ def state_from_vector(func):
     @wraps(func)
     def wrapper(t, u_, k, *args, **kwargs):
         r, v = u_[:3], u_[3:]
-        ss = RVState(Body(k * u.km3s2), r * u.km, v * u.kms)
+        ss = RVState(Body(None, k * u.km3s2, "_Dummy"), r * u.km, v * u.kms)
 
         return func(t, ss, *args, **kwargs)
 
diff --git a/src/poliastro/twobody/orbit.py b/src/poliastro/twobody/orbit.py
index d76b6dc8..2143823f 100644
--- a/src/poliastro/twobody/orbit.py
+++ b/src/poliastro/twobody/orbit.py
@@ -183,10 +183,10 @@ class Orbit(object):
         k = attractor.k.to(u.km ** 3 / u.s ** 2)
         ecc = 1.0 * u.one
         r, v = poliastro.twobody.classical.coe2rv(
-                k.to(u.km ** 3 / u.s ** 2).value,
-                p.to(u.km).value, ecc.value, inc.to(u.rad).value,
-                raan.to(u.rad).value, argp.to(u.rad).value,
-                nu.to(u.rad).value)
+            k.to(u.km ** 3 / u.s ** 2).value,
+            p.to(u.km).value, ecc.value, inc.to(u.rad).value,
+            raan.to(u.rad).value, argp.to(u.rad).value,
+            nu.to(u.rad).value)
 
         ss = cls.from_vectors(attractor, r * u.km, v * u.km / u.s, epoch)
         return ss
diff --git a/src/poliastro/twobody/rv.py b/src/poliastro/twobody/rv.py
index bbb83259..c9f3e50e 100644
--- a/src/poliastro/twobody/rv.py
+++ b/src/poliastro/twobody/rv.py
@@ -99,10 +99,11 @@ class RVState(BaseState):
 
         a = p / (1 - ecc**2)
 
-        return poliastro.twobody.classical.ClassicalState(self.attractor,
-                                                   a * u.km,
-                                                   ecc * u.one,
-                                                   inc * u.rad,
-                                                   raan * u.rad,
-                                                   argp * u.rad,
-                                                   nu * u.rad)
+        return poliastro.twobody.classical.ClassicalState(
+            self.attractor,
+            a * u.km,
+            ecc * u.one,
+            inc * u.rad,
+            raan * u.rad,
+            argp * u.rad,
+            nu * u.rad)

Try to compile with MyPy
"Mypy is an experimental optional static type checker for Python that aims to combine the benefits of dynamic (or "duck") typing and static typing". A new version is out:

http://mypy-lang.blogspot.com.es/2017/05/mypy-0510-released.html

The first question is: does this make any sense? The only way to find out is to try it at least once and decide.

Adding stubs might be needed to improve editor type hints and catch bugs:

https://www.caktusgroup.com/blog/2017/02/22/python-type-annotations/

For external libraries, there's `typeshed` but it includes none of our core dependencies:

https://github.com/python/typeshed

Though this might be a good starting point

https://github.com/machinalis/mypy-data

This is a very, very good article on good practices:

http://blog.zulip.org/2016/10/13/static-types-in-python-oh-mypy/

Ideally this would also be integrated in continuous integration, though I don't know how.
diff --git a/src/poliastro/neos/tests/test_dastcom5.py b/src/poliastro/neos/tests/test_dastcom5.py
index 0de46e1a..f94a7f52 100644
--- a/src/poliastro/neos/tests/test_dastcom5.py
+++ b/src/poliastro/neos/tests/test_dastcom5.py
@@ -32,7 +32,6 @@ def test_orbit_from_name(mock_record_from_name, mock_orbit_from_record):
     mock_record_from_name.assert_called_with(name)
 
 
-
 @mock.patch('poliastro.neos.dastcom5.orbit_from_record')
 @mock.patch('poliastro.neos.dastcom5.record_from_name')
 def test_record_from_name(mock_record_from_name, mock_orbit_from_record):
@@ -56,14 +55,15 @@ def test_read_headers(mock_open, mock_np_fromfile):
 @mock.patch('poliastro.neos.dastcom5.np.fromfile')
 @mock.patch('poliastro.neos.dastcom5.open')
 def test_read_record(mock_open, mock_np_fromfile, mock_read_headers):
-    mocked_ast_headers = np.array([(3184, -1, b'00740473', b'00496815')],
-      dtype=[('IBIAS1', np.int32), ('IBIAS0', np.int32), ('ENDPT2', '|S8'), ('ENDPT1', '|S8')])
-    mocked_com_headers = np.array([(99999,)],  dtype=[('IBIAS2', '<i4')])
+    mocked_ast_headers = np.array(
+        [(3184, -1, b'00740473', b'00496815')],
+        dtype=[('IBIAS1', np.int32), ('IBIAS0', np.int32), ('ENDPT2', '|S8'), ('ENDPT1', '|S8')])
+    mocked_com_headers = np.array([(99999,)], dtype=[('IBIAS2', '<i4')])
 
     mock_read_headers.return_value = mocked_ast_headers, mocked_com_headers
     dastcom5.read_record(740473)
     mock_open.assert_called_with(os.path.join(dastcom5.DBS_LOCAL_PATH, 'dast5_le.dat'), 'rb')
-    dastcom5.read_record(740473+1)
+    dastcom5.read_record(740473 + 1)
     mock_open.assert_called_with(os.path.join(dastcom5.DBS_LOCAL_PATH, 'dcom5_le.dat'), 'rb')
 
 
@@ -72,7 +72,7 @@ def test_read_record(mock_open, mock_np_fromfile, mock_read_headers):
 @mock.patch('poliastro.neos.dastcom5.os.path.isdir')
 @mock.patch('poliastro.neos.dastcom5.urllib.request')
 def test_download_dastcom5_raises_error_when_folder_exists(mock_request, mock_isdir, mock_zipfile, mock_makedirs):
-    mock_isdir.side_effect = lambda x:  x == os.path.join(dastcom5.POLIASTRO_LOCAL_PATH, 'dastcom5')
+    mock_isdir.side_effect = lambda x: x == os.path.join(dastcom5.POLIASTRO_LOCAL_PATH, 'dastcom5')
     with pytest.raises(FileExistsError):
         dastcom5.download_dastcom5()
     mock_isdir.assert_called_once_with(os.path.join(dastcom5.POLIASTRO_LOCAL_PATH, 'dastcom5'))
@@ -93,10 +93,9 @@ def test_download_dastcom5_creates_folder(mock_isdir, mock_zipfile, mock_makedir
 @mock.patch('poliastro.neos.dastcom5.os.path.isdir')
 @mock.patch('poliastro.neos.dastcom5.urllib.request.urlretrieve')
 def test_download_dastcom5_downloads_file(mock_request, mock_isdir, mock_zipfile):
-    mock_isdir.side_effect = lambda x:  x == dastcom5.POLIASTRO_LOCAL_PATH
+    mock_isdir.side_effect = lambda x: x == dastcom5.POLIASTRO_LOCAL_PATH
     mock_zipfile.is_zipfile.return_value = False
     dastcom5.download_dastcom5()
     mock_request.assert_called_once_with(dastcom5.FTP_DB_URL + 'dastcom5.zip',
                                          os.path.join(dastcom5.POLIASTRO_LOCAL_PATH, 'dastcom5.zip'),
                                          dastcom5._show_download_progress)
-
diff --git a/src/poliastro/neos/tests/test_neos_neows.py b/src/poliastro/neos/tests/test_neos_neows.py
index 5d818d2e..2786f5c6 100644
--- a/src/poliastro/neos/tests/test_neos_neows.py
+++ b/src/poliastro/neos/tests/test_neos_neows.py
@@ -39,7 +39,7 @@ def test_orbit_from_spk_id_raises_when_error(mock_get):
     resp = requests.Response()
 
     resp.status_code = 404
-    mock_get.return_value = resp   
+    mock_get.return_value = resp
     with pytest.raises(requests.HTTPError):
         ss = neows.orbit_from_spk_id('')
 
@@ -59,7 +59,7 @@ def test_spk_id_from_name_raises_when_error(mock_get):
 def test_spk_id_from_name_parses_body(mock_get, mock_response):
     with open('src/poliastro/tests/table.html', 'r') as demo_html:
         html = demo_html.read().replace('\n', '')
-    
+
     mock_response.text = html
     mock_get.return_value = mock_response
     assert '2000433' == neows.spk_id_from_name('')
diff --git a/src/poliastro/testing.py b/src/poliastro/testing.py
index 224395b2..7697264e 100644
--- a/src/poliastro/testing.py
+++ b/src/poliastro/testing.py
@@ -7,7 +7,7 @@ import pytest
 
 
 def test():
-    '''Initiate poliastro testing
-    
-    '''
+    """Initiate poliastro testing
+
+    """
     pytest.main([os.path.dirname(os.path.abspath(__file__))])
diff --git a/src/poliastro/tests/test_hyper.py b/src/poliastro/tests/test_hyper.py
index e652b3cf..aeaf6196 100644
--- a/src/poliastro/tests/test_hyper.py
+++ b/src/poliastro/tests/test_hyper.py
@@ -9,7 +9,7 @@ from poliastro.hyper import hyp2f1b as hyp2f1
 
 @pytest.mark.parametrize("x", np.linspace(0, 1, num=11))
 def test_hyp2f1_battin_scalar(x):
-    expected_res = special.hyp2f1(3, 1, 5/2, x)
+    expected_res = special.hyp2f1(3, 1, 5 / 2, x)
 
     res = hyp2f1(x)
     assert_allclose(res, expected_res)
diff --git a/src/poliastro/tests/test_plotting.py b/src/poliastro/tests/test_plotting.py
index fbbf308b..3b0fca52 100644
--- a/src/poliastro/tests/test_plotting.py
+++ b/src/poliastro/tests/test_plotting.py
@@ -3,8 +3,6 @@ import pytest
 
 import astropy.units as u
 
-import matplotlib
-matplotlib.use("Agg")  # use Agg backend for these tests
 import matplotlib.pyplot as plt
 
 from poliastro.examples import iss
@@ -12,7 +10,7 @@ from poliastro.examples import iss
 from poliastro.plotting import OrbitPlotter
 
 
-def test_OrbitPlotter_has_axes():
+def test_orbitplotter_has_axes():
     ax = "Unused axes"
     op = OrbitPlotter(ax)
     assert op.ax is ax
diff --git a/src/poliastro/twobody/tests/test_decorators.py b/src/poliastro/twobody/tests/test_decorators.py
new file mode 100644
index 00000000..6a24852f
--- /dev/null
+++ b/src/poliastro/twobody/tests/test_decorators.py
@@ -0,0 +1,31 @@
+import inspect
+
+from astropy import units as u
+
+from poliastro.twobody.decorators import state_from_vector
+
+
+def fun(t, ss):
+    return 1
+
+
+def decorated_fun(t, u_, k):
+    pass
+
+
+def test_decorator_has_correct_signature():
+    expected_signature = inspect.getfullargspec(decorated_fun)
+
+    new_fun = state_from_vector(fun)
+
+    assert inspect.getfullargspec(new_fun).args == expected_signature.args
+
+
+def test_decorated_function_calls_rvstate():
+    _t = 0
+    _u = [1, 0, 0, 0, 1, 0]
+    _k = 1
+
+    new_fun = state_from_vector(fun)
+
+    assert new_fun(_t, _u, _k) == 1
diff --git a/src/poliastro/twobody/tests/test_propagation.py b/src/poliastro/twobody/tests/test_propagation.py
index e44a7ac4..68c64d34 100644
--- a/src/poliastro/twobody/tests/test_propagation.py
+++ b/src/poliastro/twobody/tests/test_propagation.py
@@ -69,9 +69,9 @@ def test_apply_zero_maneuver_returns_equal_state():
     dv = [0, 0, 0] * u.km / u.s
     orbit_new = ss.apply_maneuver([(dt, dv)])
     assert_allclose(orbit_new.r.to(u.km).value,
-                        ss.r.to(u.km).value)
+                    ss.r.to(u.km).value)
     assert_allclose(orbit_new.v.to(u.km / u.s).value,
-                        ss.v.to(u.km / u.s).value)
+                    ss.v.to(u.km / u.s).value)
 
 
 def test_cowell_propagation_callback():
@@ -134,9 +134,8 @@ def test_cowell_propagation_circle_to_circle():
                   tof.to(u.s).value,
                   ad=constant_accel)
 
-    ss_final = Orbit.from_vectors(Earth,
-                       r * u.km,
-                       v * u.km / u.s)
+    ss_final = Orbit.from_vectors(
+        Earth, r * u.km, v * u.km / u.s)
 
     da_a0 = (ss_final.a - ss.a) / ss.a
     dv_v0 = abs(norm(ss_final.v) - norm(ss.v)) / norm(ss.v)
diff --git a/src/poliastro/twobody/tests/test_states.py b/src/poliastro/twobody/tests/test_states.py
index 29e07e93..82a519da 100644
--- a/src/poliastro/twobody/tests/test_states.py
+++ b/src/poliastro/twobody/tests/test_states.py
@@ -63,9 +63,9 @@ def test_perigee_and_apogee():
     _a = 1.0 * u.deg  # Unused angle
     ss = ClassicalState(Earth, a, ecc, _a, _a, _a, _a)
     assert_allclose(ss.r_a.to(u.km).value,
-                        expected_r_a.to(u.km).value)
+                    expected_r_a.to(u.km).value)
     assert_allclose(ss.r_p.to(u.km).value,
-                        expected_r_p.to(u.km).value)
+                    expected_r_p.to(u.km).value)
 
 
 def test_convert_from_rv_to_coe():
@@ -138,4 +138,4 @@ def test_pqw_returns_dimensionless():
 
     assert p.unit == u.one
     assert q.unit == u.one
-    assert w.unit == u.one
\ No newline at end of file
+    assert w.unit == u.one

environment.yml
pip install -e .
parse_log_pytest
environment.yml
pytest
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster @ file:///home/ktietz/src/ci/alabaster_1611921544520/work
astropy==4.0.2
async-generator @ file:///home/ktietz/src/ci/async_generator_1611927993394/work
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
Babel @ file:///tmp/build/80754af9/babel_1620871417480/work
backcall @ file:///home/ktietz/src/ci/backcall_1611930011877/work
beautifulsoup4 @ file:///tmp/build/80754af9/beautifulsoup4_1631874778482/work
bleach @ file:///opt/conda/conda-bld/bleach_1641577558959/work
brotlipy==0.7.0
certifi==2021.5.30
cffi @ file:///tmp/build/80754af9/cffi_1625814693874/work
charset-normalizer @ file:///tmp/build/80754af9/charset-normalizer_1630003229654/work
colorama @ file:///tmp/build/80754af9/colorama_1607707115595/work
cryptography @ file:///tmp/build/80754af9/cryptography_1635366128178/work
cycler @ file:///tmp/build/80754af9/cycler_1637851556182/work
decorator @ file:///opt/conda/conda-bld/decorator_1643638310831/work
defusedxml @ file:///tmp/build/80754af9/defusedxml_1615228127516/work
docutils @ file:///tmp/build/80754af9/docutils_1620827982266/work
entrypoints==0.3
idna @ file:///tmp/build/80754af9/idna_1637925883363/work
imagesize @ file:///tmp/build/80754af9/imagesize_1637939814114/work
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1631916693255/work
iniconfig==1.1.1
ipykernel @ file:///tmp/build/80754af9/ipykernel_1596206602906/work/dist/ipykernel-5.3.4-py3-none-any.whl
ipython @ file:///tmp/build/80754af9/ipython_1593447367857/work
ipython-genutils @ file:///tmp/build/80754af9/ipython_genutils_1606773439826/work
jedi @ file:///tmp/build/80754af9/jedi_1606932572482/work
Jinja2 @ file:///opt/conda/conda-bld/jinja2_1647436528585/work
jplephem @ file:///home/conda/feedstock_root/build_artifacts/jplephem_1701439151942/work
jsonschema @ file:///Users/ktietz/demo/mc3/conda-bld/jsonschema_1630511932244/work
jupyter-client @ file:///opt/conda/conda-bld/jupyter_client_1643638337975/work
jupyter-core @ file:///tmp/build/80754af9/jupyter_core_1633420100582/work
jupyterlab-pygments @ file:///tmp/build/80754af9/jupyterlab_pygments_1601490720602/work
kiwisolver @ file:///tmp/build/80754af9/kiwisolver_1612282412546/work
llvmlite==0.36.0
MarkupSafe @ file:///tmp/build/80754af9/markupsafe_1621528150516/work
matplotlib @ file:///tmp/build/80754af9/matplotlib-suite_1613407855456/work
mistune==0.8.4
nbclient @ file:///tmp/build/80754af9/nbclient_1614364831625/work
nbconvert @ file:///tmp/build/80754af9/nbconvert_1601914804165/work
nbformat @ file:///tmp/build/80754af9/nbformat_1617383369282/work
nbsphinx @ file:///home/conda/feedstock_root/build_artifacts/nbsphinx_1741075436613/work
nest-asyncio @ file:///tmp/build/80754af9/nest-asyncio_1613680548246/work
numba @ file:///tmp/build/80754af9/numba_1616771968628/work
numpy @ file:///tmp/build/80754af9/numpy_and_numpy_base_1603483703303/work
olefile @ file:///Users/ktietz/demo/mc3/conda-bld/olefile_1629805411829/work
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
pandas==1.1.5
pandocfilters @ file:///opt/conda/conda-bld/pandocfilters_1643405455980/work
parso==0.7.0
pexpect @ file:///tmp/build/80754af9/pexpect_1605563209008/work
pickleshare @ file:///tmp/build/80754af9/pickleshare_1606932040724/work
Pillow @ file:///tmp/build/80754af9/pillow_1625670622947/work
pluggy==1.0.0
-e git+https://github.com/poliastro/poliastro.git@8cbb3018fb97748a6d66cc4d910657afeb31b7fd#egg=poliastro
prompt-toolkit @ file:///tmp/build/80754af9/prompt-toolkit_1633440160888/work
ptyprocess @ file:///tmp/build/80754af9/ptyprocess_1609355006118/work/dist/ptyprocess-0.7.0-py2.py3-none-any.whl
py==1.11.0
pycparser @ file:///tmp/build/80754af9/pycparser_1636541352034/work
Pygments @ file:///opt/conda/conda-bld/pygments_1644249106324/work
pyOpenSSL @ file:///opt/conda/conda-bld/pyopenssl_1643788558760/work
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pyrsistent @ file:///tmp/build/80754af9/pyrsistent_1600141725711/work
PySocks @ file:///tmp/build/80754af9/pysocks_1605305763431/work
pytest==7.0.1
python-dateutil @ file:///tmp/build/80754af9/python-dateutil_1626374649649/work
pytz==2021.3
pyzmq @ file:///tmp/build/80754af9/pyzmq_1628268400816/work
requests @ file:///opt/conda/conda-bld/requests_1641824580448/work
scipy @ file:///tmp/build/80754af9/scipy_1597686635649/work
six @ file:///tmp/build/80754af9/six_1644875935023/work
snowballstemmer @ file:///tmp/build/80754af9/snowballstemmer_1637937080595/work
soupsieve @ file:///tmp/build/80754af9/soupsieve_1636706018808/work
Sphinx @ file:///opt/conda/conda-bld/sphinx_1643644169832/work
sphinxcontrib-applehelp @ file:///home/ktietz/src/ci/sphinxcontrib-applehelp_1611920841464/work
sphinxcontrib-devhelp @ file:///home/ktietz/src/ci/sphinxcontrib-devhelp_1611920923094/work
sphinxcontrib-htmlhelp @ file:///tmp/build/80754af9/sphinxcontrib-htmlhelp_1623945626792/work
sphinxcontrib-jsmath @ file:///home/ktietz/src/ci/sphinxcontrib-jsmath_1611920942228/work
sphinxcontrib-qthelp @ file:///home/ktietz/src/ci/sphinxcontrib-qthelp_1611921055322/work
sphinxcontrib-serializinghtml @ file:///tmp/build/80754af9/sphinxcontrib-serializinghtml_1624451540180/work
testpath @ file:///tmp/build/80754af9/testpath_1624638946665/work
tomli==1.2.3
tornado @ file:///tmp/build/80754af9/tornado_1606942266872/work
traitlets @ file:///tmp/build/80754af9/traitlets_1632746497744/work
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
urllib3 @ file:///opt/conda/conda-bld/urllib3_1643638302206/work
wcwidth @ file:///Users/ktietz/demo/mc3/conda-bld/wcwidth_1629357192024/work
webencodings==0.5.1
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work

name: poliastro
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - alabaster=0.7.12=pyhd3eb1b0_0
  - astropy=4.0.2=py36h7b6447c_0
  - async_generator=1.10=pyhd3eb1b0_0
  - attrs=21.4.0=pyhd3eb1b0_0
  - babel=2.9.1=pyhd3eb1b0_0
  - backcall=0.2.0=pyhd3eb1b0_0
  - beautifulsoup4=4.10.0=pyh06a4308_0
  - blas=1.0=openblas
  - bleach=4.1.0=pyhd3eb1b0_0
  - brotlipy=0.7.0=py36h27cfd23_1003
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - cffi=1.14.6=py36h400218f_0
  - charset-normalizer=2.0.4=pyhd3eb1b0_0
  - colorama=0.4.4=pyhd3eb1b0_0
  - cryptography=35.0.0=py36hd23ed53_0
  - cycler=0.11.0=pyhd3eb1b0_0
  - dbus=1.13.18=hb2f20db_0
  - decorator=5.1.1=pyhd3eb1b0_0
  - defusedxml=0.7.1=pyhd3eb1b0_0
  - docutils=0.17.1=py36h06a4308_1
  - entrypoints=0.3=py36_0
  - expat=2.6.4=h6a678d5_0
  - fontconfig=2.14.1=h52c9d5c_1
  - freetype=2.12.1=h4a9f257_0
  - giflib=5.2.2=h5eee18b_0
  - glib=2.69.1=h4ff587b_1
  - gst-plugins-base=1.14.1=h6a678d5_1
  - gstreamer=1.14.1=h5eee18b_1
  - icu=58.2=he6710b0_3
  - idna=3.3=pyhd3eb1b0_0
  - imagesize=1.3.0=pyhd3eb1b0_0
  - importlib-metadata=4.8.1=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - ipykernel=5.3.4=py36h5ca1d4c_0
  - ipython=7.16.1=py36h5ca1d4c_0
  - ipython_genutils=0.2.0=pyhd3eb1b0_1
  - jedi=0.17.2=py36h06a4308_1
  - jinja2=3.0.3=pyhd3eb1b0_0
  - jpeg=9e=h5eee18b_3
  - jplephem=2.21=pyh864a33b_0
  - jsonschema=3.2.0=pyhd3eb1b0_2
  - jupyter_client=7.1.2=pyhd3eb1b0_0
  - jupyter_core=4.8.1=py36h06a4308_0
  - jupyterlab_pygments=0.1.2=py_0
  - kiwisolver=1.3.1=py36h2531618_0
  - lcms2=2.16=hb9589c4_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - lerc=4.0.0=h6a678d5_0
  - libdeflate=1.22=h5eee18b_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgfortran-ng=7.5.0=ha8ba4b0_17
  - libgfortran4=7.5.0=ha8ba4b0_17
  - libgomp=11.2.0=h1234567_1
  - libllvm10=10.0.1=hbcb73fb_5
  - libopenblas=0.3.18=hf726d26_0
  - libpng=1.6.39=h5eee18b_0
  - libsodium=1.0.18=h7b6447c_0
  - libstdcxx-ng=11.2.0=h1234567_1
  - libtiff=4.5.1=hffd6297_1
  - libuuid=1.41.5=h5eee18b_0
  - libwebp=1.2.4=h11a3e52_1
  - libwebp-base=1.2.4=h5eee18b_1
  - libxcb=1.15=h7f8727e_0
  - libxml2=2.9.14=h74e7548_0
  - llvmlite=0.36.0=py36h612dafd_4
  - lz4-c=1.9.4=h6a678d5_1
  - markupsafe=2.0.1=py36h27cfd23_0
  - matplotlib=3.3.4=py36h06a4308_0
  - matplotlib-base=3.3.4=py36h62a2d02_0
  - mistune=0.8.4=py36h7b6447c_0
  - nbclient=0.5.3=pyhd3eb1b0_0
  - nbconvert=6.0.7=py36_0
  - nbformat=5.1.3=pyhd3eb1b0_0
  - nbsphinx=0.9.7=pyhd8ed1ab_0
  - ncurses=6.4=h6a678d5_0
  - nest-asyncio=1.5.1=pyhd3eb1b0_0
  - numba=0.53.1=py36ha9443f7_0
  - numpy=1.19.2=py36h6163131_0
  - numpy-base=1.19.2=py36h75fe3a5_0
  - olefile=0.46=pyhd3eb1b0_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pandas=1.1.5=py36ha9443f7_0
  - pandoc=2.12=h06a4308_3
  - pandocfilters=1.5.0=pyhd3eb1b0_0
  - parso=0.7.0=py_0
  - pcre=8.45=h295c915_0
  - pexpect=4.8.0=pyhd3eb1b0_3
  - pickleshare=0.7.5=pyhd3eb1b0_1003
  - pillow=8.3.1=py36h5aabda8_0
  - pip=21.2.2=py36h06a4308_0
  - prompt-toolkit=3.0.20=pyhd3eb1b0_0
  - ptyprocess=0.7.0=pyhd3eb1b0_2
  - pycparser=2.21=pyhd3eb1b0_0
  - pygments=2.11.2=pyhd3eb1b0_0
  - pyopenssl=22.0.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pyqt=5.9.2=py36h05f1152_2
  - pyrsistent=0.17.3=py36h7b6447c_0
  - pysocks=1.7.1=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - python-dateutil=2.8.2=pyhd3eb1b0_0
  - pytz=2021.3=pyhd3eb1b0_0
  - pyzmq=22.2.1=py36h295c915_1
  - qt=5.9.7=h5867ecd_1
  - readline=8.2=h5eee18b_0
  - requests=2.27.1=pyhd3eb1b0_0
  - scipy=1.5.2=py36habc2bb6_0
  - setuptools=58.0.4=py36h06a4308_0
  - sip=4.19.8=py36hf484d3e_0
  - six=1.16.0=pyhd3eb1b0_1
  - snowballstemmer=2.2.0=pyhd3eb1b0_0
  - soupsieve=2.3.1=pyhd3eb1b0_0
  - sphinx=4.4.0=pyhd3eb1b0_0
  - sphinxcontrib-applehelp=1.0.2=pyhd3eb1b0_0
  - sphinxcontrib-devhelp=1.0.2=pyhd3eb1b0_0
  - sphinxcontrib-htmlhelp=2.0.0=pyhd3eb1b0_0
  - sphinxcontrib-jsmath=1.0.1=pyhd3eb1b0_0
  - sphinxcontrib-qthelp=1.0.3=pyhd3eb1b0_0
  - sphinxcontrib-serializinghtml=1.1.5=pyhd3eb1b0_0
  - sqlite=3.45.3=h5eee18b_0
  - tbb=2020.3=hfd86e86_0
  - testpath=0.5.0=pyhd3eb1b0_0
  - tk=8.6.14=h39e8969_0
  - tornado=6.1=py36h27cfd23_0
  - traitlets=4.3.3=py36h06a4308_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - urllib3=1.26.8=pyhd3eb1b0_0
  - wcwidth=0.2.5=pyhd3eb1b0_0
  - webencodings=0.5.1=py36_1
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zeromq=4.3.5=h6a678d5_0
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - zstd=1.5.6=hc292b87_0
  - pip:
      - iniconfig==1.1.1
      - pluggy==1.0.0
      - py==1.11.0
      - pytest==7.0.1
      - tomli==1.2.3
prefix: /opt/conda/envs/poliastro

src/poliastro/twobody/tests/test_decorators.py::test_decorated_function_calls_rvstate
src/poliastro/neos/tests/test_dastcom5.py::test_asteroid_db_is_called_with_right_path src/poliastro/neos/tests/test_dastcom5.py::test_comet_db_is_called_with_right_path src/poliastro/neos/tests/test_dastcom5.py::test_orbit_from_name src/poliastro/neos/tests/test_dastcom5.py::test_record_from_name src/poliastro/neos/tests/test_dastcom5.py::test_read_headers src/poliastro/neos/tests/test_dastcom5.py::test_read_record src/poliastro/neos/tests/test_dastcom5.py::test_download_dastcom5_raises_error_when_folder_exists src/poliastro/neos/tests/test_dastcom5.py::test_download_dastcom5_creates_folder src/poliastro/neos/tests/test_dastcom5.py::test_download_dastcom5_downloads_file src/poliastro/neos/tests/test_neos_neows.py::test_orbit_from_spk_id_has_proper_values src/poliastro/neos/tests/test_neos_neows.py::test_orbit_from_spk_id_raises_when_error src/poliastro/neos/tests/test_neos_neows.py::test_spk_id_from_name_raises_when_error src/poliastro/neos/tests/test_neos_neows.py::test_spk_id_from_name_parses_body src/poliastro/neos/tests/test_neos_neows.py::test_spk_id_from_name_parses_object_list_and_raises src/poliastro/neos/tests/test_neos_neows.py::test_spk_id_from_name_raises_when_not_found src/poliastro/testing.py::test src/poliastro/tests/test_hyper.py::test_hyp2f1_battin_scalar[0.0] src/poliastro/tests/test_hyper.py::test_hyp2f1_battin_scalar[0.1] src/poliastro/tests/test_hyper.py::test_hyp2f1_battin_scalar[0.2] src/poliastro/tests/test_hyper.py::test_hyp2f1_battin_scalar[0.30000000000000004] src/poliastro/tests/test_hyper.py::test_hyp2f1_battin_scalar[0.4] src/poliastro/tests/test_hyper.py::test_hyp2f1_battin_scalar[0.5] src/poliastro/tests/test_hyper.py::test_hyp2f1_battin_scalar[0.6000000000000001] src/poliastro/tests/test_hyper.py::test_hyp2f1_battin_scalar[0.7000000000000001] src/poliastro/tests/test_hyper.py::test_hyp2f1_battin_scalar[0.8] src/poliastro/tests/test_hyper.py::test_hyp2f1_battin_scalar[0.9] src/poliastro/tests/test_hyper.py::test_hyp2f1_battin_scalar[1.0] src/poliastro/tests/test_plotting.py::test_orbitplotter_has_axes src/poliastro/tests/test_plotting.py::test_set_frame_raises_error_if_frame_exists src/poliastro/tests/test_plotting.py::test_axes_labels_and_title src/poliastro/tests/test_plotting.py::test_number_of_lines_for_osculating_orbit src/poliastro/twobody/tests/test_decorators.py::test_decorator_has_correct_signature src/poliastro/twobody/tests/test_propagation.py::test_propagation src/poliastro/twobody/tests/test_propagation.py::test_propagation_hyperbolic src/poliastro/twobody/tests/test_propagation.py::test_propagation_zero_time_returns_same_state src/poliastro/twobody/tests/test_propagation.py::test_apply_zero_maneuver_returns_equal_state src/poliastro/twobody/tests/test_propagation.py::test_cowell_propagation_callback src/poliastro/twobody/tests/test_propagation.py::test_cowell_propagation_with_zero_acceleration_equals_kepler src/poliastro/twobody/tests/test_propagation.py::test_cowell_propagation_circle_to_circle src/poliastro/twobody/tests/test_states.py::test_state_has_attractor_given_in_constructor src/poliastro/twobody/tests/test_states.py::test_state_has_elements_given_in_constructor src/poliastro/twobody/tests/test_states.py::test_state_has_individual_elements src/poliastro/twobody/tests/test_states.py::test_state_has_rv_given_in_constructor src/poliastro/twobody/tests/test_states.py::test_perigee_and_apogee src/poliastro/twobody/tests/test_states.py::test_convert_from_rv_to_coe src/poliastro/twobody/tests/test_states.py::test_convert_from_coe_to_rv src/poliastro/twobody/tests/test_states.py::test_perifocal_points_to_perigee src/poliastro/twobody/tests/test_states.py::test_arglat_within_range src/poliastro/twobody/tests/test_states.py::test_pqw_returns_dimensionless
src/poliastro/plotting.py src/poliastro/cli.py src/poliastro/neos/dastcom5.py src/poliastro/twobody/classical.py src/poliastro/neos/neows.py setup.py src/poliastro/twobody/orbit.py src/poliastro/twobody/rv.py .travis.yml setup.cfg src/poliastro/maneuver.py src/poliastro/twobody/decorators.py
src/poliastro/plotting.py src/poliastro/cli.py src/poliastro/neos/dastcom5.py src/poliastro/twobody/classical.py src/poliastro/neos/neows.py setup.py src/poliastro/twobody/orbit.py src/poliastro/twobody/rv.py .travis.yml setup.cfg src/poliastro/maneuver.py src/poliastro/twobody/decorators.py