Skip to content
Snippets Groups Projects
Commit 92116f14 authored by Amy Stamile's avatar Amy Stamile
Browse files

fixed tests.

parent 2257afbe
No related branches found
No related tags found
No related merge requests found
...@@ -8,7 +8,7 @@ class Ellipsoid: ...@@ -8,7 +8,7 @@ class Ellipsoid:
A biaxial ellipsoid shape model. A biaxial ellipsoid shape model.
""" """
def __init__(self, semi_major, semi_minor = None): def __init__(self, semi_major, semi_minor=None, median=None):
""" """
Create an ellipsoid shape model from a set of radii Create an ellipsoid shape model from a set of radii
...@@ -23,9 +23,13 @@ class Ellipsoid: ...@@ -23,9 +23,13 @@ class Ellipsoid:
self.b = semi_major self.b = semi_major
self.c = semi_major self.c = semi_major
if median is not None:
self.b = median
if semi_minor is not None: if semi_minor is not None:
self.c = semi_minor self.c = semi_minor
@classmethod @classmethod
def from_csm_sensor(cls, sensor): def from_csm_sensor(cls, sensor):
semi_major, semi_minor = csm.get_radii(sensor) semi_major, semi_minor = csm.get_radii(sensor)
......
...@@ -29,6 +29,7 @@ def sep_angle(a_vec, b_vec): ...@@ -29,6 +29,7 @@ def sep_angle(a_vec, b_vec):
: np.ndarray : np.ndarray
""" """
dot_prod = a_vec.x * b_vec.x + a_vec.y * b_vec.y + a_vec.z * b_vec.z dot_prod = a_vec.x * b_vec.x + a_vec.y * b_vec.y + a_vec.z * b_vec.z
print(dot_prod)
dot_prod /= magnitude(a_vec) * magnitude(b_vec) dot_prod /= magnitude(a_vec) * magnitude(b_vec)
if(dot_prod >= 1.0): return 0.0 if(dot_prod >= 1.0): return 0.0
......
...@@ -86,11 +86,3 @@ def test_get_state(mock_sensor, pt): ...@@ -86,11 +86,3 @@ def test_get_state(mock_sensor, pt):
} }
assert state == expected assert state == expected
@mock.patch.object(csm, 'get_radii', return_value=(10, 10))
def test_get_surface_normal(mock_sensor):
ground_pt = utils.Point(1, 0, 0)
normal = csm.get_surface_normal(mock_sensor, ground_pt)
assert normal == (1.0, 0.0, 0.0)
\ No newline at end of file
import unittest
from unittest import mock
import csmapi
from knoten import utils
from knoten.illuminator import Illuminator
class TestIlluminator(unittest.TestCase):
def test_get_position_from_csm_sensor(self):
mock_sensor = mock.MagicMock(spec=csmapi.RasterGM)
mock_sensor.getIlluminationDirection.return_value = utils.Point(1.0, 10.0, 0.0)
test_illum = Illuminator()
ground_pt = utils.Point(10.0, 10.0, 0.0)
position = test_illum.get_position_from_csm_sensor(mock_sensor, ground_pt)
self.assertEqual(position, (9.0, 0.0, 0.0))
def tearDown(self):
pass
\ No newline at end of file
...@@ -3,7 +3,7 @@ import pytest ...@@ -3,7 +3,7 @@ import pytest
import numpy as np import numpy as np
import csmapi import csmapi
from knoten import csm, sensor_utils, utils, bundle from knoten import csm, sensor_utils, utils, bundle, shape, illuminator
@pytest.fixture @pytest.fixture
def mock_sensor(): def mock_sensor():
...@@ -14,30 +14,44 @@ def mock_sensor(): ...@@ -14,30 +14,44 @@ def mock_sensor():
def pt(): def pt():
return csmapi.ImageCoord(0.0, 0.0) return csmapi.ImageCoord(0.0, 0.0)
@mock.patch.object(csm, 'get_state', return_value={'sensorPos': utils.Point(100.0, 0.0, 0.0)}) @pytest.fixture
@mock.patch.object(csm, 'generate_ground_point', return_value=utils.Point(0,0,0)) def test_shape():
def test_phase_angle(mock_sensor, pt): return shape.Ellipsoid(0, 0)
mock_sensor.getIlluminationDirection.return_value = utils.Point(100.0, 100.0, 0.0)
phase_angle = sensor_utils.phase_angle(pt, mock_sensor) @pytest.fixture
def test_illuminator():
return illuminator.Illuminator(0, 0)
np.testing.assert_array_equal(phase_angle, 135.0)
def test_phase_angle(mock_sensor, pt, test_shape, test_illuminator):
with (
mock.patch.object(illuminator.Illuminator, 'get_position_from_csm_sensor', return_value=utils.Point(100.0, 100.0, 0.0)),
mock.patch.object(csm, 'get_state', return_value={'sensorPos': utils.Point(100.0, 0.0, 0.0), 'lookVec': utils.Point(-1.0, 0.0, 0.0)}),
mock.patch.object(shape.Ellipsoid, 'intersect_surface', return_value=utils.Point(0,0,0))
):
phase_angle = sensor_utils.phase_angle(pt, mock_sensor, test_shape, test_illuminator)
@mock.patch.object(csm, 'get_state', return_value={'sensorPos': utils.Point(100.0, 0.0, 0.0)}) np.testing.assert_allclose(phase_angle, 45.0)
@mock.patch.object(csm, 'generate_ground_point', return_value=utils.Point(0,0,0))
def test_emission_angle(mock_sensor, pt):
with mock.patch.object(csm, 'get_surface_normal', return_value=utils.Point(-1,0,0)) as mock_normal:
emission_angle = sensor_utils.emission_angle(pt, mock_sensor)
mock_normal.assert_called()
def test_emission_angle(mock_sensor, pt, test_shape):
with (
mock.patch.object(shape.Ellipsoid, 'get_surface_normal', return_value=utils.Point(-1,0,0)),
mock.patch.object(shape.Ellipsoid, 'intersect_surface', return_value=utils.Point(0,0,0)),
mock.patch.object(csm, 'get_state', return_value={'sensorPos': utils.Point(100.0, 0.0, 0.0), 'lookVec': utils.Point(-1.0, 0.0, 0.0)}),
mock.patch.object(illuminator.Illuminator, 'get_position_from_csm_sensor', return_value=utils.Point(100.0, 100.0, 0.0))
):
emission_angle = sensor_utils.emission_angle(pt, mock_sensor, test_shape)
np.testing.assert_array_equal(emission_angle, 180.0) np.testing.assert_array_equal(emission_angle, 180.0)
@mock.patch.object(csm, 'get_state', return_value={'sensorPos': utils.Point(-100.0, 0.0, 0.0)}) def test_slant_distance(mock_sensor, pt, test_shape):
@mock.patch.object(csm, 'generate_ground_point', return_value=utils.Point(0,0,0)) with (
def test_slant_distance(mock_sensor, pt): mock.patch.object(csm, 'get_state', return_value={'sensorPos': utils.Point(100.0, 0.0, 0.0), 'lookVec': utils.Point(-1.0, 0.0, 0.0)}),
slant_distance = sensor_utils.slant_distance(pt, mock_sensor) mock.patch.object(shape.Ellipsoid, 'intersect_surface', return_value=utils.Point(0,0,0))
):
slant_distance = sensor_utils.slant_distance(pt, mock_sensor, test_shape)
np.testing.assert_array_equal(slant_distance, 100.0) np.testing.assert_array_equal(slant_distance, 100.0)
...@@ -56,18 +70,18 @@ def test_sub_spacecraft_point(mock_sensor, pt): ...@@ -56,18 +70,18 @@ def test_sub_spacecraft_point(mock_sensor, pt):
np.testing.assert_array_equal(sub_spacecraft_point, [90.0, 0.0]) np.testing.assert_array_equal(sub_spacecraft_point, [90.0, 0.0])
@mock.patch.object(csm, 'get_state', return_value={'sensorPos': utils.Point(100.0, 0.0, 0.0)}) @mock.patch.object(csm, 'get_state', return_value={'sensorPos': utils.Point(100.0, 0.0, 0.0), 'lookVec': utils.Point(-1.0, 0.0, 0.0)})
@mock.patch.object(csm, 'generate_ground_point', return_value=utils.Point(10.0, 0.0, 0.0)) @mock.patch.object(shape.Ellipsoid, 'intersect_surface', return_value=utils.Point(10.0, 0.0, 0.0))
def test_local_radius_intersection(mock_sensor, pt): def test_local_radius_intersection(mock_sensor, pt, test_shape):
local_radius = sensor_utils.local_radius(pt, mock_sensor) local_radius = sensor_utils.local_radius(pt, mock_sensor, test_shape)
np.testing.assert_array_equal(local_radius, 10.0) np.testing.assert_array_equal(local_radius, 10.0)
@mock.patch.object(csm, 'get_state', return_value={'sensorPos': utils.Point(-1000.0, 0.0, 0.0)}) @mock.patch.object(csm, 'get_state', return_value={'sensorPos': utils.Point(1000.0, 0.0, 0.0), 'lookVec': utils.Point(-1000.0, 0.0, 0.0)})
@mock.patch.object(csm, 'generate_ground_point', return_value=utils.Point(10.0, 0.0, 0.0)) @mock.patch.object(shape.Ellipsoid, 'intersect_surface', return_value=utils.Point(10.0, 0.0, 0.0))
def test_local_radius_ground(mock_sensor, pt): def test_local_radius_ground(mock_sensor, pt, test_shape):
local_radius = sensor_utils.local_radius(pt, mock_sensor) local_radius = sensor_utils.local_radius(pt, mock_sensor, test_shape)
np.testing.assert_array_equal(local_radius, 10.0) np.testing.assert_array_equal(local_radius, 10.0)
...@@ -79,25 +93,35 @@ def test_right_ascension_declination(mock_sensor, pt): ...@@ -79,25 +93,35 @@ def test_right_ascension_declination(mock_sensor, pt):
np.testing.assert_array_equal(right_ascension_declination, [180.0, 0.0]) np.testing.assert_array_equal(right_ascension_declination, [180.0, 0.0])
@mock.patch.object(csm, 'generate_ground_point', return_value=utils.Point(0.0, 0.0, 0.0)) def test_line_resolution(mock_sensor, pt, test_shape):
@mock.patch.object(bundle, 'compute_image_partials', return_value=np.array([2, 1, 4, 4, 4, 8])) with (
def test_line_resolution(mock_sensor, pt): mock.patch.object(bundle, 'compute_image_partials', return_value=np.array([2, 1, 4, 4, 4, 8])),
line_resolution = sensor_utils.line_resolution(pt, mock_sensor) mock.patch.object(shape.Ellipsoid, 'intersect_surface', return_value=utils.Point(0,0,0)),
mock.patch.object(csm, 'get_state', return_value={'sensorPos': utils.Point(100.0, 0.0, 0.0), 'lookVec': utils.Point(-1.0, 0.0, 0.0)})
):
line_resolution = sensor_utils.line_resolution(pt, mock_sensor, test_shape)
np.testing.assert_array_equal(line_resolution, 6.0) np.testing.assert_array_equal(line_resolution, 6.0)
@mock.patch.object(csm, 'generate_ground_point', return_value=utils.Point(0.0, 0.0, 0.0))
@mock.patch.object(bundle, 'compute_image_partials', return_value=np.array([2, 1, 4, 4, 4, 8])) def test_sample_resolution(mock_sensor, pt, test_shape):
def test_sample_resolution(mock_sensor, pt): with (
sample_resolution = sensor_utils.sample_resolution(pt, mock_sensor) mock.patch.object(bundle, 'compute_image_partials', return_value=np.array([2, 1, 4, 4, 4, 8])),
mock.patch.object(shape.Ellipsoid, 'intersect_surface', return_value=utils.Point(0,0,0)),
mock.patch.object(csm, 'get_state', return_value={'sensorPos': utils.Point(100.0, 0.0, 0.0), 'lookVec': utils.Point(-1.0, 0.0, 0.0)})
):
sample_resolution = sensor_utils.sample_resolution(pt, mock_sensor, test_shape)
np.testing.assert_array_equal(sample_resolution, 9.0) np.testing.assert_array_equal(sample_resolution, 9.0)
@mock.patch.object(csm, 'generate_ground_point', return_value=utils.Point(0.0, 0.0, 0.0)) def test_pixel_resolution(mock_sensor, pt, test_shape):
@mock.patch.object(bundle, 'compute_image_partials', return_value=np.array([2, 1, 4, 4, 4, 8])) with (
def test_pixel_resolution(mock_sensor, pt): mock.patch.object(bundle, 'compute_image_partials', return_value=np.array([2, 1, 4, 4, 4, 8])),
pixel_resolution = sensor_utils.pixel_resolution(pt, mock_sensor) mock.patch.object(shape.Ellipsoid, 'intersect_surface', return_value=utils.Point(0,0,0)),
mock.patch.object(csm, 'get_state', return_value={'sensorPos': utils.Point(100.0, 0.0, 0.0), 'lookVec': utils.Point(-1.0, 0.0, 0.0)})
):
pixel_resolution = sensor_utils.pixel_resolution(pt, mock_sensor, test_shape)
np.testing.assert_array_equal(pixel_resolution, 7.5) np.testing.assert_array_equal(pixel_resolution, 7.5)
\ No newline at end of file
import unittest
from unittest import mock
from knoten import shape, utils
class TestEllipsoid(unittest.TestCase):
def test_get_surface_normal(self):
test_shape = shape.Ellipsoid(10, 10)
ground_pt = utils.Point(1, 0, 0)
normal = test_shape.get_surface_normal(ground_pt)
self.assertEqual(normal, (1.0, 0.0, 0.0))
def test_intersect_surface(self):
test_shape = shape.Ellipsoid(10, 10)
sensor_pos = utils.Point(100, 0, 0)
look_vec = utils.Point(-1, 0, 0)
intersection = test_shape.intersect_surface(sensor_pos, look_vec)
self.assertEqual(intersection.x, 10.0)
self.assertEqual(intersection.y, 0.0)
self.assertEqual(intersection.z, 0.0)
def tearDown(self):
pass
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment