from collections import namedtuple from unittest import mock import pytest import ale from ale.drivers import mdis_driver, base from ale.drivers.mdis_driver import MdisPDS3Driver # 'Mock' the spice module where it is imported from conftest import SimpleSpice, get_mockkernels simplespice = SimpleSpice() base.spice = simplespice mdis_driver.spice = simplespice MdisPDS3Driver.metakernel = get_mockkernels @pytest.fixture def mdislabel(): return """ PDS_VERSION_ID = PDS3 /*** FILE FORMAT ***/ RECORD_TYPE = FIXED_LENGTH RECORD_BYTES = 2048 FILE_RECORDS = 1028 LABEL_RECORDS = 0004 /*** POINTERS TO START BYTE OFFSET OF OBJECTS IN IMAGE FILE ***/ ^IMAGE = 0005 /*** GENERAL DATA DESCRIPTION PARAMETERS ***/ MISSION_NAME = "MESSENGER" INSTRUMENT_HOST_NAME = "MESSENGER" DATA_SET_ID = "MESS-E/V/H-MDIS-2-EDR-RAWDATA-V1.0" DATA_QUALITY_ID = "0000000000000000" PRODUCT_ID = "EN0024934993M" PRODUCT_VERSION_ID = "3" SOURCE_PRODUCT_ID = ("0024934993_IM3WV") PRODUCER_INSTITUTION_NAME = "APPLIED COHERENT TECHNOLOGY CORPORATION" SOFTWARE_NAME = "MDIS2EDR" SOFTWARE_VERSION_ID = "1.0" MISSION_PHASE_NAME = "EARTH CRUISE" TARGET_NAME = "EARTH" SEQUENCE_NAME = "05138_MLA_SUPP_1" OBSERVATION_ID = "703" OBSERVATION_TYPE = "N/A" SITE_ID = "N/A" /*** TIME PARAMETERS ***/ START_TIME = 2005-05-18T20:24:10.515023 STOP_TIME = 2005-05-18T20:24:10.707023 SPACECRAFT_CLOCK_START_COUNT = "1/0024934993:798000" SPACECRAFT_CLOCK_STOP_COUNT = "1/0024934993:990000" ORBIT_NUMBER = "N/A" PRODUCT_CREATION_TIME = 2011-11-21T22:17:22 /*** INSTRUMENT ENGINEERING PARAMETERS ***/ INSTRUMENT_NAME = "MERCURY DUAL IMAGING SYSTEM NARROW ANGLE CAMERA" INSTRUMENT_ID = "MDIS-NAC" FILTER_NAME = "748 BP 53" FILTER_NUMBER = "N/A" CENTER_FILTER_WAVELENGTH = 747.7 BANDWIDTH = 52.6 EXPOSURE_DURATION = 192 EXPOSURE_TYPE = AUTO DETECTOR_TEMPERATURE = -42.55 FOCAL_PLANE_TEMPERATURE = -35.94 FILTER_TEMPERATURE = "N/A" OPTICS_TEMPERATURE = -37.36 /*** INSTRUMENT RAW PARAMETERS ***/ MESS:MET_EXP = 24934993 MESS:IMG_ID_LSB = "N/A" MESS:IMG_ID_MSB = "N/A" MESS:ATT_CLOCK_COUNT = 24934991 MESS:ATT_Q1 = 0.38073087 MESS:ATT_Q2 = -0.50538123 MESS:ATT_Q3 = 0.72235280 MESS:ATT_Q4 = 0.27899864 MESS:ATT_FLAG = 7 MESS:PIV_POS_MOTOR = "N/A" MESS:PIV_GOAL = 0 MESS:PIV_POS = -1 MESS:PIV_READ = 20740 MESS:PIV_CAL = -26758 MESS:FW_GOAL = 17376 MESS:FW_POS = 17420 MESS:FW_READ = 17420 MESS:CCD_TEMP = 1026 MESS:CAM_T1 = 454 MESS:CAM_T2 = 478 MESS:EXPOSURE = 192 MESS:DPU_ID = 0 MESS:IMAGER = 1 MESS:SOURCE = 0 MESS:FPU_BIN = 0 MESS:COMP12_8 = 0 MESS:COMP_ALG = 2 MESS:COMP_FST = 1 MESS:TIME_PLS = 1 MESS:LATCH_UP = 0 MESS:EXP_MODE = 1 MESS:PIV_STAT = 3 MESS:PIV_MPEN = 0 MESS:PIV_PV = 1 MESS:PIV_RV = 1 MESS:FW_PV = 1 MESS:FW_RV = 1 MESS:AEX_STAT = 256 MESS:AEX_STHR = 0 MESS:AEX_TGTB = 2800 MESS:AEX_BACB = 240 MESS:AEX_MAXE = 714 MESS:AEX_MINE = 1 MESS:DLNKPRIO = 3 MESS:WVLRATIO = 4 MESS:PIXELBIN = 0 MESS:SUBFRAME = 0 MESS:SUBF_X1 = 4 MESS:SUBF_Y1 = 0 MESS:SUBF_DX1 = 0 MESS:SUBF_DY1 = 0 MESS:SUBF_X2 = 4 MESS:SUBF_Y2 = 0 MESS:SUBF_DX2 = 0 MESS:SUBF_DY2 = 0 MESS:SUBF_X3 = 0 MESS:SUBF_Y3 = 0 MESS:SUBF_DX3 = 0 MESS:SUBF_DY3 = 0 MESS:SUBF_X4 = 0 MESS:SUBF_Y4 = 0 MESS:SUBF_DX4 = 0 MESS:SUBF_DY4 = 0 MESS:SUBF_X5 = 0 MESS:SUBF_Y5 = 0 MESS:SUBF_DX5 = 0 MESS:SUBF_DY5 = 0 MESS:CRITOPNV = 0 MESS:JAILBARS = 0 MESS:JB_X0 = 0 MESS:JB_X1 = 0 MESS:JB_SPACE = 0 /*** GEOMETRY INFORMATION ***/ RIGHT_ASCENSION = 285.95273 DECLINATION = 11.71507 TWIST_ANGLE = 212.43017 RA_DEC_REF_PIXEL = (512.00000,512.00000) RETICLE_POINT_RA = (286.18172 ,284.89969 ,287.00146 , 285.71292 ) RETICLE_POINT_DECLINATION = (12.74731 ,11.95067 ,11.48768 , 10.68847 ) /*** TARGET PARAMETERS ***/ SC_TARGET_POSITION_VECTOR = (-7282598.25457 ,25612610.91152 , -5411326.66758 ) TARGET_CENTER_DISTANCE = 27172127.83986 /*** TARGET WITHIN SENSOR FOV ***/ SLANT_DISTANCE = "N/A" CENTER_LATITUDE = "N/A" CENTER_LONGITUDE = "N/A" HORIZONTAL_PIXEL_SCALE = "N/A" VERTICAL_PIXEL_SCALE = "N/A" SMEAR_MAGNITUDE = "N/A" SMEAR_AZIMUTH = "N/A" NORTH_AZIMUTH = "N/A" RETICLE_POINT_LATITUDE = ("N/A","N/A","N/A","N/A") RETICLE_POINT_LONGITUDE = ("N/A","N/A","N/A","N/A") /*** SPACECRAFT POSITION WITH RESPECT TO CENTRAL BODY ***/ SUB_SPACECRAFT_LATITUDE = -11.49546 SUB_SPACECRAFT_LONGITUDE = 283.33197 SPACECRAFT_ALTITUDE = 27165750.55671 SUB_SPACECRAFT_AZIMUTH = "N/A" /*** SPACECRAFT LOCATION ***/ SPACECRAFT_SOLAR_DISTANCE = 139069138.64129 SC_SUN_POSITION_VECTOR = (-87690987.23333 ,-92023335.85736 , -56411184.51298 ) SC_SUN_VELOCITY_VECTOR = (-24.04359 ,19.51186 ,7.92341 ) /*** VIEWING AND LIGHTING GEOMETRY (SUN ON TARGET) ***/ SOLAR_DISTANCE = 151343022.60304 SUB_SOLAR_AZIMUTH = "N/A" SUB_SOLAR_LATITUDE = 19.70999 SUB_SOLAR_LONGITUDE = 233.12030 INCIDENCE_ANGLE = "N/A" PHASE_ANGLE = "N/A" EMISSION_ANGLE = "N/A" LOCAL_HOUR_ANGLE = "N/A" /*** GEOMETRY FOR EACH SUBFRAME ***/ GROUP = SUBFRAME1_PARAMETERS RETICLE_POINT_LATITUDE = ("N/A","N/A","N/A","N/A") RETICLE_POINT_LONGITUDE = ("N/A","N/A","N/A","N/A") END_GROUP = SUBFRAME1_PARAMETERS GROUP = SUBFRAME2_PARAMETERS RETICLE_POINT_LATITUDE = ("N/A","N/A","N/A","N/A") RETICLE_POINT_LONGITUDE = ("N/A","N/A","N/A","N/A") END_GROUP = SUBFRAME2_PARAMETERS GROUP = SUBFRAME3_PARAMETERS RETICLE_POINT_LATITUDE = ("N/A","N/A","N/A","N/A") RETICLE_POINT_LONGITUDE = ("N/A","N/A","N/A","N/A") END_GROUP = SUBFRAME3_PARAMETERS GROUP = SUBFRAME4_PARAMETERS RETICLE_POINT_LATITUDE = ("N/A","N/A","N/A","N/A") RETICLE_POINT_LONGITUDE = ("N/A","N/A","N/A","N/A") END_GROUP = SUBFRAME4_PARAMETERS GROUP = SUBFRAME5_PARAMETERS RETICLE_POINT_LATITUDE = ("N/A","N/A","N/A","N/A") RETICLE_POINT_LONGITUDE = ("N/A","N/A","N/A","N/A") END_GROUP = SUBFRAME5_PARAMETERS OBJECT = IMAGE LINES = 1024 LINE_SAMPLES = 1024 SAMPLE_TYPE = MSB_UNSIGNED_INTEGER SAMPLE_BITS = 16 UNIT = "N/A" DARK_STRIP_MEAN = 267.777 /*** IMAGE STATISTICS OF ***/ /*** THE EXPOSED CCD AREA ***/ MINIMUM = 262.000 MAXIMUM = 2978.000 MEAN = 267.684 STANDARD_DEVIATION = 17.810 /*** PIXEL COUNTS ***/ SATURATED_PIXEL_COUNT = 0 MISSING_PIXELS = 0 END_OBJECT = IMAGE END """ def test_mdis_creation(mdislabel): with MdisPDS3Driver(mdislabel) as m: d = m.to_dict() assert isinstance(d, dict) assert(set(d.keys()) == m.required_keys)