Source code for materials.property_test

"""Unit tests for Property."""

import unittest
import numpy as np

from materials.property import Property, StateDependentProperty
import materials.variation_with_state as vstate


[docs]class TestProperty(unittest.TestCase): """Tests for "simple" Property."""
[docs] def test_init(self): """Test constructor.""" yaml_dict = {'default_value': 1.0, 'units': 'MPa', 'reference': 'mmpds'} prop = Property('name', yaml_dict) self.assertEqual(1.0, prop.default_value) self.assertEqual('MPa', prop.units) self.assertEqual('mmpds', prop.reference)
[docs] def test_str(self): """Test __str__.""" yaml_dict = {'default_value': 1.0, 'units': 'MPa', 'reference': 'mmpds'} prop = Property('Strength', yaml_dict) string = str(prop) print('\n' + string + '\n')
[docs]class TestStateDependentProperty(unittest.TestCase): """Tests for StateDependentProperty class."""
[docs] def test_query_1d(self): """Test query_value with a 1-d lookup table.""" # Setup dv = 2.0 yaml_dict = { 'default_value': dv, 'units': 'MPa', 'reference': 'mmpds', 'variations_with_state': { 'thermal': { 'state_vars': ['temperature'], 'state_vars_units': {'temperature': 'kelvin'}, 'value_type': 'multiplier', 'representation': 'table', 'reference': 'mmpds', 'temperature': np.arange(4), 'values': np.arange(4) ** 2, } } } prop = StateDependentProperty('name', yaml_dict) model_args_dict = {'method': 'linear'} # Action and verification # Check queries at given points self.assertEqual(prop.query_value({'temperature': 1}), 1 ** 2 * dv) self.assertEqual(prop.query_value({'temperature': 2}), 2 ** 2 * dv) # Check interpolation between given points self.assertAlmostEqual(prop.query_value( {'temperature': 2.5}, model_args_dict=model_args_dict), 6.5 * dv) # Check bad query with self.assertRaises(ValueError): prop.query_value({'fish': 1.}) # fish is not a state variable.
[docs] def test_init_2d(self): """Test init with a 2-d lookup table.""" # Setup yaml_dict = { 'default_value': 2.0, 'units': 'MPa', 'reference': 'mmpds', 'variations_with_state': { 'thermal': { 'state_vars': ['exposure time', 'temperature'], 'state_vars_units': {'exposure time': 'hour', 'temperature': 'kelvin'}, 'value_type': 'multiplier', 'representation': 'table', 'reference': 'mmpds', 'exposure time': { 0.0: { 'temperature': np.arange(4), 'values': np.arange(4) ** 2 }, 0.1: { 'temperature': np.arange(4), 'values': (np.arange(4) + 0.1) ** 2 }, } } } } # Action prop = StateDependentProperty('name', yaml_dict) # Verification self.assertEqual(2.0, prop.default_value) self.assertEqual('MPa', prop.units) self.assertEqual('mmpds', prop.reference) self.assertEqual(len(prop.variations_with_state['thermal'].state_vars), 2) self.assertEqual(prop.variations_with_state['thermal'].state_vars[0], 'exposure time') self.assertEqual(prop.variations_with_state['thermal'].state_vars[1], 'temperature')
[docs] def test_query_2d(self): """Test query_value with a 2-d lookup table.""" # Setup dv = 2.0 yaml_dict = { 'default_value': dv, 'units': 'MPa', 'reference': 'mmpds', 'variations_with_state': { 'thermal': { 'state_vars': ['exposure time', 'temperature'], 'state_vars_units': {'exposure time': 'hour', 'temperature': 'kelvin'}, 'value_type': 'multiplier', 'representation': 'table', 'reference': 'mmpds', 'exposure time': { 0.0: { 'temperature': np.arange(4), 'values': np.arange(4) ** 2 }, 0.1: { 'temperature': np.arange(4), 'values': (np.arange(4) + 0.5) ** 2 }, } } }} model_args_dict = {'method': 'linear'} prop = StateDependentProperty('name', yaml_dict) # Action and verification # Check queries at given points result = prop.query_value({'exposure time': 0, 'temperature': 1}) self.assertEqual(result, 1 ** 2 * dv) result = prop.query_value({'exposure time': 0.1, 'temperature': 3}) self.assertEqual(result, 3.5 ** 2 * dv) # Check interpolation between given points result = prop.query_value({'exposure time': 0, 'temperature': 2.5}, model_args_dict=model_args_dict) self.assertAlmostEqual(result, 6.5 * dv) result = prop.query_value({'exposure time': 0.05, 'temperature': 2}, model_args_dict=model_args_dict) self.assertAlmostEqual(result, (2 ** 2 + 2.5 ** 2) / 2 * dv) # Check query of multiple points result = prop.query_value({'exposure time': [0, 0.05], 'temperature': [1, 2]}) self.assertEqual(result[0], 1 ** 2 * dv) self.assertAlmostEqual(result[1], (2 ** 2 + 2.5 ** 2) / 2 * dv) # Check bad query with self.assertRaises(ValueError): prop.query_value({'fish': 1., 'temperature': 1}) # fish is not a state variable. with self.assertRaises(ValueError): prop.query_value({'fish': 1., 'exposure time': 1}) # fish is not a state variable.
[docs] def test_query_1d_eqn(self): """Test query_value with a single varaible equation.""" # Setup dv = 2.0 yaml_dict = { 'default_value': dv, 'units': 'MPa', 'reference': 'mmpds', 'variations_with_state': { 'thermal': { 'state_vars': ['temperature'], 'state_vars_units': {'temperature': 'kelvin'}, 'value_type': 'multiplier', 'representation': 'equation', 'reference': 'reference', 'expression': 'value = temperature**2', 'state_domain': {'temperature': (0, 1000)}, } } } prop = StateDependentProperty('name', yaml_dict) # Action and verification # Check good queries self.assertEqual(prop.query_value({'temperature': 1}), 1 ** 2 * dv) self.assertEqual(prop.query_value({'temperature': 2}), 2 ** 2 * dv) # Check bad query with self.assertRaises(ValueError): prop.query_value({'fish': 1.}) # fish is not a state variable.
[docs] def test_getitem(self): """Unit test for __getitem__""" # Setup dv = 2.0 yaml_dict = { 'default_value': dv, 'units': 'MPa', 'reference': 'mmpds', 'variations_with_state': { 'thermal': { 'state_vars': ['temperature'], 'state_vars_units': {'temperature': 'kelvin'}, 'value_type': 'multiplier', 'representation': 'table', 'reference': 'mmpds', 'temperature': np.arange(4), 'values': np.arange(4) ** 2, } } } prop = StateDependentProperty('name', yaml_dict) # Action state_model = prop['thermal'] # Verification self.assertTrue(issubclass( type(state_model), vstate.VariationWithState))
[docs] def test_str(self): """Unit test for __str__""" # Setup dv = 2.0 yaml_dict = { 'default_value': dv, 'units': 'MPa', 'reference': 'mmpds', 'variations_with_state': { 'thermal': { 'state_vars': ['temperature'], 'state_vars_units': {'temperature': 'kelvin'}, 'value_type': 'multiplier', 'representation': 'table', 'reference': 'mmpds', 'temperature': np.arange(4), 'values': np.arange(4) ** 2, } } } prop = StateDependentProperty('Strength', yaml_dict) # Action string = str(prop) # Verification print('\n' + string + '\n')
if __name__ == '__main__': unittest.main()