def test_parameters(od, parameters): if not isinstance(parameters, dict): # Raise error if wrong format with pytest.raises(TypeError): od.set_parameters(parameters=parameters) elif not set(parameters.keys()).issubset(AVAILABLE_PARAMETERS.keys()): # Warn but add if parameter is useless with pytest.warns(UserWarning): new_od = od.set_parameters(parameters=parameters) assert set(parameters.keys()).issubset(new_od.parameters.keys()) assert set(od.parameters.keys()).issubset(new_od.parameters.keys()) elif "eq_state" in parameters.keys(): if parameters["eq_state"] not in AVAILABLE_PARAMETERS["eq_state"]: # Raise error if wrong format or not available choice if isinstance(parameters["eq_state"], str): with pytest.raises(ValueError): od.set_parameters(parameters=parameters) else: with pytest.raises(TypeError): od.set_parameters(parameters=parameters) else: # Check defaults new_od = od.set_parameters(parameters=parameters) if parameters is None: assert new_od.parameters == DEFAULT_PARAMETERS else: assert set(parameters.keys()).issubset(new_od.parameters.keys()) # Inhibit setter with pytest.raises(AttributeError): od.parameters = parameters
def test_parameters(): # OceanDataset assert od_in.parameters == DEFAULT_PARAMETERS # Parameters default and checks assert DEFAULT_PARAMETERS.keys() == TYPE_PARAMETERS.keys() assert set(AVAILABLE_PARAMETERS.keys()).issubset(AVAILABLE_PARAMETERS.keys()) # Wrong type test_dict = 1 with pytest.raises(TypeError) as e: od_in.set_parameters(test_dict) assert str(e.value) == "`parameters` must be dict" # Inhibit setter test_dict = DEFAULT_PARAMETERS.copy() test_dict['c_p'] = 0 with pytest.raises(AttributeError) as e: od_in.parameters = test_dict assert str(e.value) == _setter_error_message('parameters') # Check set od_out = od_in.set_parameters(test_dict) assert od_out.parameters == test_dict assert od_in.parameters != od_out.parameters # Check wrong parametes with pytest.raises(TypeError): od_out.set_parameters({'eq_state': 1}) with pytest.raises(ValueError): od_out.set_parameters({'eq_state': 'test'}) # Check new parameters with pytest.warns(UserWarning): od_out = od_in.set_parameters({'test': 'test'}) assert 'test' in od_out.parameters
def set_parameters(self, parameters): """ Set model parameters used by OceanSpy. See :py:const:`oceanspy.DEFAULT_PARAMETERS` for a list of parameters, and :py:const:`oceanspy.PARAMETERS_PARAMETERS_DESCRIPTION` for their description. See :py:const:`oceanspy.AVAILABLE_PARAMETERS` for a list of parameters with predefined options. Parameters ---------- parameters: dict {'name': value} """ from oceanspy import DEFAULT_PARAMETERS, AVAILABLE_PARAMETERS, TYPE_PARAMETERS # Check parameters _check_instance({"parameters": parameters}, "dict") # Check parameters warn_params = [] for key, value in parameters.items(): if key not in DEFAULT_PARAMETERS.keys(): warn_params = warn_params + [key] else: if not isinstance(value, TYPE_PARAMETERS[key]): raise TypeError( "Invalid [{}]. " "Check oceanspy.TYPE_PARAMETERS" "".format(key) ) check1 = key in AVAILABLE_PARAMETERS.keys() if check1 and (value not in AVAILABLE_PARAMETERS[key]): raise ValueError( "Requested [{}] not available. " "Check oceanspy.AVAILABLE_PARAMETERS" "".format(key) ) if len(warn_params) != 0: _warnings.warn( "{} are not OceanSpy parameters" "".format(warn_params), stacklevel=2 ) # Set parameters self = self._store_as_global_attr( name="parameters", attr=parameters, overwrite=True ) return self
def set_parameters(self, parameters): """ Set model parameters used by OceanSpy (see oceanspy.DEFAULT_PARAMETERS) Parameters ---------- parameters: dict {'parameter_name': parameter_value} """ from oceanspy import DEFAULT_PARAMETERS, AVAILABLE_PARAMETERS, TYPE_PARAMETERS # Check parameters if not isinstance(parameters, dict): raise TypeError("`parameters` must be dict") # Check parameters warn_params = [] for key, value in parameters.items(): if key not in DEFAULT_PARAMETERS.keys(): warn_params = warn_params + [key] else: if not isinstance(value, TYPE_PARAMETERS[key]): raise TypeError( "Invalid [{}]. Check oceanspy.TYPE_PARAMETERS".format( key)) if key in AVAILABLE_PARAMETERS.keys( ) and value not in AVAILABLE_PARAMETERS[key]: raise ValueError( "Requested [{}] not available. Check oceanspy.AVAILABLE_PARAMETERS" .format(key)) if len(warn_params) != 0: _warnings.warn( ("{} are not OceanSpy parameters").format(warn_params), stacklevel=2) # Set parameters self = self._store_as_global_attr(name='parameters', attr=parameters, overwrite=True) return self