Skip to content
Snippets Groups Projects
Select Git revision
  • 2ef95bc8701e430e217ad0d17f9e9278c4c0fdec
  • main default protected
  • Kelvinrr-patch-3
  • radius_update
  • revert-616-apollo_pan
  • vims
  • 0.10
  • Kelvinrr-patch-2
  • revert-563-minirf_fix
  • Kelvinrr-patch-1
  • 0.9
  • acpaquette-patch-3
  • acpaquette-patch-2
  • acpaquette-patch-1
  • spiceql
  • ci-coverage
  • 0.10.0
  • 0.9.1
  • 0.9.0
  • 0.8.7
  • 0.8.8
  • 0.8.6
  • 0.8.3
  • 0.8.4
  • 0.8.5
  • 0.8.2
  • 0.8.1
  • 0.8.0
  • 0.7.3
  • 0.7.2
  • 0.7.1
  • 0.7.0
  • 0.6.5
  • 0.6.4
  • 0.6.3
  • 0.6.2
36 results

test_kaguya_drivers.py

Blame
  • user avatar
    Kelvin authored and Jesse Mapel committed
    2ef95bc8
    History
    test_kaguya_drivers.py 5.14 KiB
    import pytest
    import os
    import numpy as np
    import datetime
    import spiceypy as spice
    from importlib import reload
    import json
    
    import unittest
    from unittest.mock import MagicMock, PropertyMock, patch
    
    from conftest import get_isd, get_image_label, get_image_kernels, convert_kernels, compare_dicts
    
    import ale
    
    from ale.drivers.selene_drivers import KaguyaTcPds3NaifSpiceDriver
    
    image_dict = {
        'TC1S2B0_01_06691S820E0465' : get_isd("kaguyatc"),
        'MVA_2B2_01_02329N002E0302' : get_isd("kaguyami")
    }
    
    
    @pytest.fixture(scope='module')
    def test_kernels():
        updated_kernels = {}
        binary_kernels = {}
        for image in image_dict.keys():
            kernels = get_image_kernels(image)
            updated_kernels[image], binary_kernels[image] = convert_kernels(kernels)
        yield updated_kernels
        for kern_list in binary_kernels.values():
            for kern in kern_list:
                os.remove(kern)
    
    @pytest.mark.parametrize("label_type", ['pds3'])
    @pytest.mark.parametrize("image", image_dict.keys())
    def test_kaguya_load(test_kernels, label_type, image):
        label_file = get_image_label(image, label_type)
    
        isd_str = ale.loads(label_file, props={'kernels': test_kernels[image]})
        isd_obj = json.loads(isd_str)
        print(json.dumps(isd_obj, indent=2))
    
        assert compare_dicts(isd_obj, image_dict[image]) == []
    
    
    # ========= Test pdslabel and naifspice driver =========
    class test_pds_naif(unittest.TestCase):
    
        def setUp(self):
            label = get_image_label("TC1S2B0_01_06691S820E0465", "pds3")
            self.driver = KaguyaTcPds3NaifSpiceDriver(label)
    
        def test_short_mission_name(self):
            assert self.driver.short_mission_name == 'selene'
    
        def test_utc_start_time(self):
            assert self.driver.utc_start_time == datetime.datetime(2009, 4, 5, 20, 9, 53, 607478, tzinfo=datetime.timezone.utc)
    
        def test_utc_stop_time(self):
            assert self.driver.utc_stop_time == datetime.datetime(2009, 4, 5, 20, 10, 23, 864978, tzinfo=datetime.timezone.utc)
    
        def test_instrument_id(self):
            assert self.driver.instrument_id == 'LISM_TC1_STF'
    
        def test_sensor_frame_id(self):
            with patch('ale.drivers.selene_drivers.spice.namfrm', return_value=12345) as namfrm:
                assert self.driver.sensor_frame_id == 12345
                namfrm.assert_called_with('LISM_TC1_HEAD')
    
        def test_instrument_host_name(self):
            assert self.driver.instrument_host_name == 'SELENE-M'
    
        def test_ikid(self):
            with patch('ale.drivers.selene_drivers.spice.bods2c', return_value=12345) as bods2c:
                assert self.driver.ikid == 12345
                bods2c.assert_called_with('LISM_TC1')
    
        def test_spacecraft_name(self):
            assert self.driver.spacecraft_name == 'SELENE'
    
        def test_spacecraft_clock_start_count(self):
            assert self.driver.spacecraft_clock_start_count == 922997380.174174
    
        def test_spacecraft_clock_stop_count(self):
            assert self.driver.spacecraft_clock_stop_count == 922997410.431674
    
        def test_ephemeris_start_time(self):
            with patch('ale.drivers.selene_drivers.spice.sct2e', return_value=12345) as sct2e, \
                 patch('ale.drivers.selene_drivers.spice.bods2c', return_value=-12345) as bods2c:
                assert self.driver.ephemeris_start_time == 12345
                sct2e.assert_called_with(-12345, 922997380.174174)
    
        def test_detector_center_line(self):
            with patch('ale.drivers.selene_drivers.spice.gdpool', return_value=np.array([54321, 12345])) as gdpool, \
                 patch('ale.drivers.selene_drivers.spice.bods2c', return_value=-12345) as bods2c:
                assert self.driver.detector_center_line == 12344.5
                gdpool.assert_called_with('INS-12345_CENTER', 0, 2)
    
        def test_detector_center_sample(self):
            with patch('ale.drivers.selene_drivers.spice.gdpool', return_value=np.array([54321, 12345])) as gdpool, \
                 patch('ale.drivers.selene_drivers.spice.bods2c', return_value=-12345) as bods2c:
                assert self.driver.detector_center_sample == 54320.5
                gdpool.assert_called_with('INS-12345_CENTER', 0, 2)
    
        def test_focal2pixel_samples(self):
            with patch('ale.drivers.selene_drivers.spice.gdpool', return_value=np.array([2])) as gdpool, \
                 patch('ale.drivers.selene_drivers.spice.bods2c', return_value=-12345) as bods2c:
                assert self.driver.focal2pixel_samples == [0, 0, -1/2]
                gdpool.assert_called_with('INS-12345_PIXEL_SIZE', 0, 1)
    
        def test_focal2pixel_lines(self):
            with patch('ale.drivers.selene_drivers.spice.gdpool', return_value=np.array([2])) as gdpool, \
                 patch('ale.drivers.selene_drivers.spice.bods2c', return_value=-12345) as bods2c, \
                 patch('ale.drivers.selene_drivers.KaguyaTcPds3NaifSpiceDriver.spacecraft_direction', \
                 new_callable=PropertyMock) as spacecraft_direction:
                spacecraft_direction.return_value = 1
                assert self.driver.focal2pixel_lines == [0, 1/2, 0]
                spacecraft_direction.return_value = -1
                assert self.driver.focal2pixel_lines == [0, -1/2, 0]
                gdpool.assert_called_with('INS-12345_PIXEL_SIZE', 0, 1)
    
        def test_spacecraft_direction(self):
            assert self.driver.spacecraft_direction == 1