Source code for isofit.configs.sections.implementation_config

#! /usr/bin/env python3
#
#  Copyright 2018 California Institute of Technology
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#
# ISOFIT: Imaging Spectrometer Optimal FITting
# Author: Philip G. Brodrick, philip.brodrick@jpl.nasa.gov

from typing import Dict, List, Type
from isofit.configs.base_config import BaseConfigSection
from isofit.configs.sections.inversion_config import InversionConfig
import os


[docs]class ImplementationConfig(BaseConfigSection): def __init__(self, sub_configdic: dict = None): """ Input file(s) configuration. """ self._mode_type = str self.mode = 'inversion' """ str: Defines the operating mode for isofit. Current options are: inversion, inversion_mcmc, and 'simulation'. """ self._inversion_type = InversionConfig self.inversion: InversionConfig = None """InversionConfig: optional config for running in inversion mode.""" self._n_cores_type = int self.n_cores = None """int: number of cores to use.""" self._ip_head_type = str self.ip_head = None """str: Ray - parameter. IP-head (for multi-node runs).""" self._redis_password_type = str self.redis_password = None """str: Ray - parameter. Redis-password (for multi-node runs).""" self._rte_configure_and_exit_type = bool self.rte_configure_and_exit = False """bool: Indicates that code should terminate as soon as all radiative transfer engine configuration files are written (without running them)""" self._rte_auto_rebuild_type = bool self.rte_auto_rebuild = True """bool: Flag indicating whether radiative transfer engines should automatically rebuild.""" self.set_config_options(sub_configdic) def _check_config_validity(self) -> List[str]: errors = list() valid_implementation_modes = ['inversion', 'mcmc_inversion', 'simulation'] if self.mode not in valid_implementation_modes: errors.append('Invalid implementation mode: {}. Valid options are: {}'. format(self.mode, valid_implementation_modes)) if self.mode != 'simulation' and self.inversion is None: errors.append('If running outside of simulation mode, Inversion must be defined') elif self.mode == 'simulation' and self.inversion is None: #TODO: fix this errors.append('Even in simulation mode, and inversion config must be defined, though' 'it may be blank.') if int(self.ip_head is not None) + int(self.redis_password is not None) == 1: errors.append('If either ip_head or redis_password are specified, both must be specified') return errors