def _get_model_from_roundtrip(model): _roundtrip_stringstream = IOStreamHandle(StringIO()) _roundtrip_streamreader = ParametricModelYamlReader( _roundtrip_stringstream) _roundtrip_streamwriter = ParametricModelYamlWriter( model, _roundtrip_stringstream) _roundtrip_streamwriter.write() _roundtrip_stringstream.seek(0) # return to beginning return _roundtrip_streamreader.read()
def setUp(self): _data = [1, 1, 4, 1, 1, 4, 2, 5, 5, 5, 2, 4, 2, 2, 18, 2, 8, 8, 9] _nbins = 3 self._container = HistContainer(n_bins=_nbins, bin_range=(0.0, 10.), fill_data=_data) self._container.add_error(err_val=0.1, name='SC5A_1', correlation=0.5, relative=False) self._container.add_error( err_val=[i / 10. for i in range(1, _nbins + 1)], name='SC5A_2', correlation=0.5, relative=False) self._container.add_matrix_error(err_matrix=np.eye(_nbins) * 0.1, name='MCov', relative=False, matrix_type='covariance') self._container.add_matrix_error(err_matrix=np.eye(_nbins), name='MCor', relative=False, matrix_type='correlation', err_val=0.03) self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._testfile_stringstream = IOStreamHandle( StringIO(TEST_DATASET_HIST)) self._roundtrip_streamreader = DataContainerYamlReader( self._roundtrip_stringstream) self._roundtrip_streamwriter = DataContainerYamlWriter( self._container, self._roundtrip_stringstream) self._testfile_streamreader = DataContainerYamlReader( self._testfile_stringstream) self._testfile_stringstream_missing_keyword = IOStreamHandle( StringIO(TEST_DATASET_HIST_MSSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle( StringIO(TEST_DATASET_HIST_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = DataContainerYamlReader( self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = DataContainerYamlReader( self._testfile_stringstream_extra_keyword) self._ref_testfile_n_bins = 2 self._ref_testfile_bin_range = [1.0, 3.0] self._ref_testfile_bin_edges = [1.0, 2.0, 3.0] self._ref_testfile_data = [1, 1] self._ref_testfile_err = [0.89442719, 1] self._ref_testfile_cov_mat = np.array([[0.8, 0.3], [0.3, 1.0]]) self._ref_testfile_error_names = { 'ErrorOne', 'ErrorTwo', 'ErrorThree', 'ErrorFour' }
def setUp(self): self._test_n_bins = 5 self._test_bin_range = (0, 5) self._test_bin_edges = np.arange(6) self._test_model_parameters = np.array([0.0, 0.08]) self._test_x = np.linspace(start=0.0, stop=5.0, num=11, endpoint=True) self._test_parametric_model = HistParametricModel( n_bins=self._test_n_bins, bin_range=self._test_bin_range, model_density_func=HistModelFunction( TestHistParametricModelYamlRepresenter.linear_model), model_parameters=self._test_model_parameters) self._test_parametric_model_with_errors = HistParametricModel( n_bins=self._test_n_bins, bin_range=self._test_bin_range, model_density_func=HistModelFunction( TestHistParametricModelYamlRepresenter.linear_model), model_parameters=self._test_model_parameters) self._test_parametric_model_with_errors.add_error(err_val=0.1, name='test_error', correlation=0, relative=False) self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._roundtrip_stringstream_with_errors = IOStreamHandle(StringIO()) self._testfile_stringstream = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_HIST)) self._testfile_stringstream_with_errors = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_HIST_WITH_ERRORS)) self._roundtrip_streamreader = ParametricModelYamlReader( self._roundtrip_stringstream) self._roundtrip_streamreader_with_errors = ParametricModelYamlReader( self._roundtrip_stringstream_with_errors) self._roundtrip_streamwriter = ParametricModelYamlWriter( self._test_parametric_model, self._roundtrip_stringstream) self._roundtrip_streamwriter_with_errors = ParametricModelYamlWriter( self._test_parametric_model_with_errors, self._roundtrip_stringstream_with_errors) self._testfile_streamreader = ParametricModelYamlReader( self._testfile_stringstream) self._testfile_streamreader_with_errors = ParametricModelYamlReader( self._testfile_stringstream_with_errors) self._testfile_stringstream_missing_keyword = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_HIST_MISSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_HIST_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = ParametricModelYamlReader( self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = ParametricModelYamlReader( self._testfile_stringstream_extra_keyword)
def setUp(self): self._model_function_formatter = IndexedModelFunctionFormatter( name='quadratic_model', latex_name='quadratic model', index_name='x', latex_index_name='X', arg_formatters=[ ParameterFormatter(arg_name='a', value=1.1, error=0.1, latex_name='A'), ParameterFormatter(arg_name='b', value=2.2, error=0.1, latex_name='B'), ParameterFormatter(arg_name='c', value=3.3, error=0.1, latex_name='C') ], expression_string='{0} * {x} ** 2 + {1} * {x} + {2}', latex_expression_string='{0}{x}^2 + {1}{x} + {2}') self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._testfile_stringstream = IOStreamHandle( StringIO(TEST_MODEL_FUNCTION_FORMATTER_INDEXED)) self._roundtrip_streamreader = ModelFunctionFormatterYamlReader( self._roundtrip_stringstream) self._roundtrip_streamwriter = ModelFunctionFormatterYamlWriter( self._model_function_formatter, self._roundtrip_stringstream) self._testfile_streamreader = ModelFunctionFormatterYamlReader( self._testfile_stringstream) self._testfile_stringstream_missing_keyword = IOStreamHandle( StringIO(TEST_MODEL_FUNCTION_FORMATTER_INDEXED_MISSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle( StringIO(TEST_MODEL_FUNCTION_FORMATTER_INDEXED_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = ModelFunctionFormatterYamlReader( self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = ModelFunctionFormatterYamlReader( self._testfile_stringstream_extra_keyword)
def setUp(self): self._test_x = np.arange(10) self._test_a = 2.0 self._test_b = -1.0 self._test_y = self.linear_model(self._test_x, self._test_a, self._test_b) self._model_function = HistModelFunction(self.linear_model) self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._testfile_stringstream = IOStreamHandle( StringIO(TEST_MODEL_FUNCTION_HIST)) self._testfile_stringstream_with_formatter = IOStreamHandle( StringIO(TEST_MODEL_FUNCTION_HIST_WITH_FORMATTER)) self._roundtrip_streamreader = ModelFunctionYamlReader( self._roundtrip_stringstream) self._roundtrip_streamwriter = ModelFunctionYamlWriter( self._model_function, self._roundtrip_stringstream) self._testfile_streamreader = ModelFunctionYamlReader( self._testfile_stringstream) self._testfile_streamreader_with_formatter = ModelFunctionYamlReader( self._testfile_stringstream_with_formatter) self._testfile_stringstream_missing_keyword = IOStreamHandle( StringIO(TEST_MODEL_FUNCTION_HIST_MISSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle( StringIO(TEST_MODEL_FUNCTION_HIST_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = ModelFunctionYamlReader( self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = ModelFunctionYamlReader( self._testfile_stringstream_extra_keyword)
def setUp(self): self._test_x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0]) self._test_model_parameters = np.array([1.1, -1.5]) self._test_parametric_model = XYParametricModel( self._test_x, ModelFunctionBase( TestXYParametricModelYamlRepresenter.linear_model), self._test_model_parameters) self._test_parametric_model_with_errors = XYParametricModel( self._test_x, ModelFunctionBase( TestXYParametricModelYamlRepresenter.linear_model), self._test_model_parameters) self._test_parametric_model_with_errors.add_error(axis='x', err_val=0.1, name='test_x_error', correlation=0, relative=False) self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._roundtrip_stringstream_with_errors = IOStreamHandle(StringIO()) self._testfile_stringstream = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_XY)) self._testfile_stringstream_with_errors = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_XY_WITH_ERRORS)) self._roundtrip_streamreader = ParametricModelYamlReader( self._roundtrip_stringstream) self._roundtrip_streamreader_with_errors = ParametricModelYamlReader( self._roundtrip_stringstream_with_errors) self._roundtrip_streamwriter = ParametricModelYamlWriter( self._test_parametric_model, self._roundtrip_stringstream) self._roundtrip_streamwriter_with_errors = ParametricModelYamlWriter( self._test_parametric_model_with_errors, self._roundtrip_stringstream_with_errors) self._testfile_streamreader = ParametricModelYamlReader( self._testfile_stringstream) self._testfile_streamreader_with_errors = ParametricModelYamlReader( self._testfile_stringstream_with_errors) self._testfile_stringstream_missing_keyword = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_XY_MISSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_XY_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = ParametricModelYamlReader( self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = ParametricModelYamlReader( self._testfile_stringstream_extra_keyword)
def setUp(self): self._model_parameter_formatter = ParameterFormatter( 'phi', name='ph', value=1.571, error=0.1, latex_name=r"\phi") self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._testfile_stringstream = IOStreamHandle( StringIO(TEST_MODEL_PARAMETER_FORMATTER)) self._roundtrip_streamreader = ParameterFormatterYamlReader( self._roundtrip_stringstream) self._roundtrip_streamwriter = ParameterFormatterYamlWriter( self._model_parameter_formatter, self._roundtrip_stringstream) self._testfile_streamreader = ParameterFormatterYamlReader( self._testfile_stringstream) self._testfile_stringstream_missing_keyword = IOStreamHandle( StringIO(TEST_MODEL_PARAMETER_FORMATTER_MISSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle( StringIO(TEST_MODEL_PARAMETER_FORMATTER_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = ParameterFormatterYamlReader( self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = ParameterFormatterYamlReader( self._testfile_stringstream_extra_keyword)
def setUp(self): self._test_model_parameters = np.array([1.1, -1.5]) self._test_parametric_model = IndexedParametricModel( IndexedModelFunction( TestIndexedParametricModelYamlRepresenter.linear_model), self._test_model_parameters) self._test_parametric_model_with_errors = IndexedParametricModel( IndexedModelFunction( TestIndexedParametricModelYamlRepresenter.linear_model), self._test_model_parameters) self._test_parametric_model_with_errors.add_error(err_val=0.1, name='test_x_error', correlation=0, relative=False) self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._roundtrip_stringstream_with_errors = IOStreamHandle(StringIO()) self._testfile_stringstream = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_INDEXED)) self._testfile_stringstream_with_errors = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_INDEXED_WITH_ERRORS)) self._roundtrip_streamreader = ParametricModelYamlReader( self._roundtrip_stringstream) self._roundtrip_streamreader_with_errors = ParametricModelYamlReader( self._roundtrip_stringstream_with_errors) self._roundtrip_streamwriter = ParametricModelYamlWriter( self._test_parametric_model, self._roundtrip_stringstream) self._roundtrip_streamwriter_with_errors = ParametricModelYamlWriter( self._test_parametric_model_with_errors, self._roundtrip_stringstream_with_errors) self._testfile_streamreader = ParametricModelYamlReader( self._testfile_stringstream) self._testfile_streamreader_with_errors = ParametricModelYamlReader( self._testfile_stringstream_with_errors) self._testfile_stringstream_missing_keyword = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_INDEXED_MISSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_INDEXED_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = ParametricModelYamlReader( self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = ParametricModelYamlReader( self._testfile_stringstream_extra_keyword)
def setup_streams(self): self._testfile_stringstream = IOStreamHandle(StringIO(self.TEST_FIT)) self._testfile_stringstream_simple = IOStreamHandle(StringIO(self.TEST_FIT_SIMPLE)) self._testfile_streamreader = FitYamlReader(self._testfile_stringstream) self._testfile_streamreader_simple = FitYamlReader(self._testfile_stringstream_simple) self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._roundtrip_streamreader = FitYamlReader(self._roundtrip_stringstream) self._roundtrip_streamwriter = FitYamlWriter(self._fit, self._roundtrip_stringstream) self._testfile_stringstream_missing_keyword = IOStreamHandle(StringIO(self.TEST_FIT_MISSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle(StringIO(self.TEST_FIT_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = FitYamlReader(self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = FitYamlReader(self._testfile_stringstream_extra_keyword)
def _get_model_from_string(input_string): _testfile_stringstream = IOStreamHandle(StringIO(input_string)) return ParametricModelYamlReader(_testfile_stringstream).read()
class TestHistModelFunctionYamlRepresenter(unittest.TestCase): @staticmethod def linear_model(x, a, b): return a * x + b def setUp(self): self._test_x = np.arange(10) self._test_a = 2.0 self._test_b = -1.0 self._test_y = self.linear_model(self._test_x, self._test_a, self._test_b) self._model_function = HistModelFunction(self.linear_model) self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._testfile_stringstream = IOStreamHandle( StringIO(TEST_MODEL_FUNCTION_HIST)) self._testfile_stringstream_with_formatter = IOStreamHandle( StringIO(TEST_MODEL_FUNCTION_HIST_WITH_FORMATTER)) self._roundtrip_streamreader = ModelFunctionYamlReader( self._roundtrip_stringstream) self._roundtrip_streamwriter = ModelFunctionYamlWriter( self._model_function, self._roundtrip_stringstream) self._testfile_streamreader = ModelFunctionYamlReader( self._testfile_stringstream) self._testfile_streamreader_with_formatter = ModelFunctionYamlReader( self._testfile_stringstream_with_formatter) self._testfile_stringstream_missing_keyword = IOStreamHandle( StringIO(TEST_MODEL_FUNCTION_HIST_MISSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle( StringIO(TEST_MODEL_FUNCTION_HIST_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = ModelFunctionYamlReader( self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = ModelFunctionYamlReader( self._testfile_stringstream_extra_keyword) def test_write_to_roundtrip_stringstream(self): self._roundtrip_streamwriter.write() def test_read_from_testfile_stream(self): _read_model_function = self._testfile_streamreader.read() self.assertTrue(isinstance(_read_model_function, HistModelFunction)) self.assertTrue( np.allclose( _read_model_function.func(self._test_x, self._test_a, self._test_b), self._test_y)) def test_read_from_testfile_stream_missing_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_missing_keyword.read() def test_read_from_testfile_stream_extra_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_extra_keyword.read() def test_read_from_testfile_stream_with_formatter(self): _read_model_function = self._testfile_streamreader_with_formatter.read( ) self.assertTrue(isinstance(_read_model_function, HistModelFunction)) self.assertTrue( np.allclose( _read_model_function.func(self._test_x, self._test_a, self._test_b), self._test_y)) _read_formatter = _read_model_function.formatter self.assertTrue(isinstance(_read_formatter, ModelFunctionFormatter)) _read_arg_formatters = _read_formatter.arg_formatters self.assertTrue(_read_formatter.name == 'linear_model') self.assertTrue(_read_formatter.latex_name == 'linear model') self.assertTrue(_read_arg_formatters[0].name == 'x') self.assertTrue(_read_arg_formatters[0].latex_name == r'{r}') self.assertTrue(_read_arg_formatters[1].name == 'alpha') self.assertTrue(_read_arg_formatters[1].latex_name == r'{\alpha}') self.assertTrue(_read_arg_formatters[2].name == 'beta') self.assertTrue(_read_arg_formatters[2].latex_name == r'{\beta}') self.assertTrue( _read_formatter.expression_format_string == '{0} * {x} + {1}') self.assertTrue( _read_formatter.latex_expression_format_string == '{0}{x} + {1}') def test_round_trip_with_stringstream(self): self._roundtrip_streamwriter.write() self._roundtrip_stringstream.seek(0) # return to beginning _read_model_function = self._roundtrip_streamreader.read() self.assertTrue(isinstance(_read_model_function, HistModelFunction)) self.assertTrue( np.allclose( self._test_y, _read_model_function.func(self._test_x, self._test_a, self._test_b))) _given_formatter = self._model_function.formatter _read_formatter = _read_model_function.formatter self.assertTrue(isinstance(_read_formatter, ModelFunctionFormatter)) _given_arg_formatters = _given_formatter.arg_formatters _read_arg_formatters = _read_formatter.arg_formatters self.assertTrue(_read_formatter.name == _given_formatter.name) self.assertTrue( _read_formatter.latex_name == _given_formatter.latex_name) self.assertTrue( _read_arg_formatters[0].name == _given_arg_formatters[0].name) self.assertTrue(_read_arg_formatters[0].latex_name == _given_arg_formatters[0].latex_name) self.assertTrue( _read_arg_formatters[1].name == _given_arg_formatters[1].name) self.assertTrue(_read_arg_formatters[1].latex_name == _given_arg_formatters[1].latex_name) self.assertTrue( _read_arg_formatters[2].name == _given_arg_formatters[2].name) self.assertTrue(_read_arg_formatters[2].latex_name == _given_arg_formatters[2].latex_name) self.assertTrue(_read_formatter.expression_format_string == _given_formatter.expression_format_string) self.assertTrue(_read_formatter.latex_expression_format_string == _given_formatter.latex_expression_format_string)
class TestXYContainerYamlRepresentation(unittest.TestCase): def setUp(self): _data = [[0.0, .1, .3], [10, 24, 44]] _ndat = len(_data[0]) self._container = XYContainer(x_data=_data[0], y_data=_data[1]) self._container.add_error(axis='y', name="ySUA", err_val=0.1, correlation=0.0, relative=False) self._container.add_error(axis='y', name="ySUR", err_val=0.1, correlation=0.0, relative=True) self._container.add_error(axis='y', name="ySCA", err_val=0.1, correlation=1.0, relative=False) self._container.add_matrix_error(axis='y', name="yMCov", err_matrix=np.eye(_ndat) * 0.1, relative=False, matrix_type='covariance') self._container.add_matrix_error(axis='y', name="yMCor", err_matrix=np.eye(_ndat), relative=False, matrix_type='correlation', err_val=0.1) self._container.add_error(axis='x', name="xSUA", err_val=0.1, correlation=0.0, relative=False) self._container.add_error(axis='x', name="xSUR", err_val=0.1, correlation=0.0, relative=True) self._container.add_matrix_error(axis='x', name="xMCov", err_matrix=np.eye(_ndat) * 0.1, relative=False, matrix_type='covariance') # self._container.add_simple_error(axis='x', err_val=0.1, correlation=0.0, relative=False) # self._container.add_simple_error(axis='y', err_val=0.2, correlation=0.0, relative=False) # self._container.add_matrix_error(axis='y', err_matrix=np.eye(8) * 0.1, relative=False, matrix_type='covariance') self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._testfile_stringstream = IOStreamHandle(StringIO(TEST_DATASET_XY)) self._roundtrip_streamreader = DataContainerYamlReader( self._roundtrip_stringstream) self._roundtrip_streamwriter = DataContainerYamlWriter( self._container, self._roundtrip_stringstream) self._testfile_streamreader = DataContainerYamlReader( self._testfile_stringstream) self._testfile_stringstream_missing_keyword = IOStreamHandle( StringIO(TEST_DATASET_XY_MISSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle( StringIO(TEST_DATASET_XY_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = DataContainerYamlReader( self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = DataContainerYamlReader( self._testfile_stringstream_extra_keyword) self._ref_testfile_x_data = [5, 17] self._ref_testfile_y_data = [80.429, 80.339] self._ref_testfile_x_err = [0.70710678, 0.70710678] self._ref_testfile_y_err = [0.54772256, 0.54772256] self._ref_testfile_y_cov_mat = np.array([[0.3, 0.1], [0.1, 0.3]]) self._ref_testfile_x_cov_mat = np.array([[0.5, 0.2], [0.2, 0.5]]) self._ref_testfile_error_names = { 'XErrorOne', 'XErrorTwo', 'YErrorOne', 'YErrorTwo' } def test_write_to_roundtrip_stringstream(self): self._roundtrip_streamwriter.write() def test_read_from_testfile_stream(self): _read_container = self._testfile_streamreader.read() self.assertTrue(isinstance(_read_container, XYContainer)) self.assertTrue( np.allclose(_read_container.x, self._ref_testfile_x_data)) self.assertTrue( np.allclose(_read_container.y, self._ref_testfile_y_data)) self.assertTrue( np.allclose(_read_container.x_err, self._ref_testfile_x_err)) self.assertTrue( np.allclose(_read_container.y_err, self._ref_testfile_y_err)) self.assertTrue( np.allclose( _read_container.x_cov_mat, self._ref_testfile_x_cov_mat, )) self.assertTrue( np.allclose( _read_container.y_cov_mat, self._ref_testfile_y_cov_mat, )) # check that the error names are the same self.assertEqual(set(_read_container._error_dicts.keys()), self._ref_testfile_error_names) def test_read_from_testfile_stream_missing_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_missing_keyword.read() def test_read_from_testfile_stream_extra_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_extra_keyword.read() def test_round_trip_with_stringstream(self): self._roundtrip_streamwriter.write() self._roundtrip_stringstream.seek(0) # return to beginning _read_container = self._roundtrip_streamreader.read() self.assertTrue(isinstance(_read_container, XYContainer)) # compare data members self.assertTrue(np.allclose(self._container.x, _read_container.x)) self.assertTrue(np.allclose(self._container.y, _read_container.y)) # compare (total) errors and cov mats # TODO: compare individual error components -> nontrivial because error ids change... self.assertTrue( np.allclose(self._container.x_err, _read_container.x_err)) self.assertTrue( np.allclose(self._container.y_err, _read_container.y_err)) self.assertTrue( np.allclose(self._container.x_cov_mat, _read_container.x_cov_mat)) self.assertTrue( np.allclose(self._container.y_cov_mat, _read_container.y_cov_mat)) # check that the error names are the same self.assertEqual(set(self._container._error_dicts.keys()), set(_read_container._error_dicts.keys()))
class TestHistParametricModelYamlRepresenter(unittest.TestCase): @staticmethod def linear_model(x, a, b): return a * x + b def setUp(self): self._test_n_bins = 5 self._test_bin_range = (0, 5) self._test_bin_edges = np.arange(6) self._test_model_parameters = np.array([0.0, 0.08]) self._test_x = np.linspace(start=0.0, stop=5.0, num=11, endpoint=True) self._test_parametric_model = HistParametricModel( n_bins=self._test_n_bins, bin_range=self._test_bin_range, model_density_func=HistModelFunction( TestHistParametricModelYamlRepresenter.linear_model), model_parameters=self._test_model_parameters) self._test_parametric_model_with_errors = HistParametricModel( n_bins=self._test_n_bins, bin_range=self._test_bin_range, model_density_func=HistModelFunction( TestHistParametricModelYamlRepresenter.linear_model), model_parameters=self._test_model_parameters) self._test_parametric_model_with_errors.add_error(err_val=0.1, name='test_error', correlation=0, relative=False) self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._roundtrip_stringstream_with_errors = IOStreamHandle(StringIO()) self._testfile_stringstream = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_HIST)) self._testfile_stringstream_with_errors = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_HIST_WITH_ERRORS)) self._roundtrip_streamreader = ParametricModelYamlReader( self._roundtrip_stringstream) self._roundtrip_streamreader_with_errors = ParametricModelYamlReader( self._roundtrip_stringstream_with_errors) self._roundtrip_streamwriter = ParametricModelYamlWriter( self._test_parametric_model, self._roundtrip_stringstream) self._roundtrip_streamwriter_with_errors = ParametricModelYamlWriter( self._test_parametric_model_with_errors, self._roundtrip_stringstream_with_errors) self._testfile_streamreader = ParametricModelYamlReader( self._testfile_stringstream) self._testfile_streamreader_with_errors = ParametricModelYamlReader( self._testfile_stringstream_with_errors) self._testfile_stringstream_missing_keyword = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_HIST_MISSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_HIST_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = ParametricModelYamlReader( self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = ParametricModelYamlReader( self._testfile_stringstream_extra_keyword) def test_write_to_roundtrip_stringstream(self): self._roundtrip_streamwriter.write() def test_write_to_roundtrip_stringstream_with_errors(self): self._roundtrip_streamwriter_with_errors.write() def test_read_from_testfile_stream(self): _read_parametric_model = self._testfile_streamreader.read() self.assertTrue(isinstance(_read_parametric_model, HistParametricModel)) self.assertTrue( np.allclose(_read_parametric_model.parameters, self._test_model_parameters)) self.assertTrue(_read_parametric_model.n_bins == self._test_n_bins) self.assertTrue( np.allclose(_read_parametric_model.bin_range, self._test_bin_range)) self.assertTrue( np.allclose(_read_parametric_model.bin_edges, self._test_bin_edges)) self.assertTrue( np.allclose( _read_parametric_model.eval_model_function_density( self._test_x), self._test_parametric_model.eval_model_function_density( self._test_x))) def test_read_from_testfile_stream_missing_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_missing_keyword.read() def test_read_from_testfile_stream_extra_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_extra_keyword.read() def test_read_from_testfile_stream_with_errors(self): _read_parametric_model = self._testfile_streamreader_with_errors.read() self.assertTrue(isinstance(_read_parametric_model, HistParametricModel)) self.assertTrue( np.allclose(_read_parametric_model.parameters, self._test_model_parameters)) self.assertTrue(_read_parametric_model.n_bins == self._test_n_bins) self.assertTrue( np.allclose(_read_parametric_model.bin_range, self._test_bin_range)) self.assertTrue( np.allclose(_read_parametric_model.bin_edges, self._test_bin_edges)) self.assertTrue( np.allclose( _read_parametric_model.eval_model_function_density( self._test_x), self._test_parametric_model_with_errors. eval_model_function_density(self._test_x))) _given_error = self._test_parametric_model_with_errors.get_error( 'test_error') _read_error = _read_parametric_model.get_error('test_error') self.assertTrue(_given_error['enabled'] == _read_error['enabled']) self.assertTrue( np.allclose(_given_error['err'].error, _read_error['err'].error)) self.assertTrue( _given_error['err'].corr_coeff == _read_error['err'].corr_coeff) def test_round_trip_with_stringstream(self): self._roundtrip_streamwriter.write() self._roundtrip_stringstream.seek(0) # return to beginning _read_parametric_model = self._roundtrip_streamreader.read() self.assertTrue(isinstance(_read_parametric_model, HistParametricModel)) self.assertTrue( np.allclose(_read_parametric_model.parameters, self._test_model_parameters)) self.assertTrue(_read_parametric_model.n_bins == self._test_n_bins) self.assertTrue( np.allclose(_read_parametric_model.bin_range, self._test_bin_range)) self.assertTrue( np.allclose(_read_parametric_model.bin_edges, self._test_bin_edges)) self.assertTrue( np.allclose( _read_parametric_model.eval_model_function_density( self._test_x), self._test_parametric_model.eval_model_function_density( self._test_x))) def test_round_trip_with_stringstream_with_errors(self): self._roundtrip_streamwriter_with_errors.write() self._roundtrip_stringstream_with_errors.seek(0) # return to beginning _read_parametric_model = self._roundtrip_streamreader_with_errors.read( ) self.assertTrue(isinstance(_read_parametric_model, HistParametricModel)) self.assertTrue( np.allclose(_read_parametric_model.parameters, self._test_model_parameters)) self.assertTrue(_read_parametric_model.n_bins == self._test_n_bins) self.assertTrue( np.allclose(_read_parametric_model.bin_range, self._test_bin_range)) self.assertTrue( np.allclose(_read_parametric_model.bin_edges, self._test_bin_edges)) self.assertTrue( np.allclose( _read_parametric_model.eval_model_function_density( self._test_x), self._test_parametric_model_with_errors. eval_model_function_density(self._test_x))) _given_error = self._test_parametric_model_with_errors.get_error( 'test_error') _read_error = _read_parametric_model.get_error('test_error') self.assertTrue(_given_error['enabled'] == _read_error['enabled']) self.assertTrue( np.allclose(_given_error['err'].error, _read_error['err'].error)) self.assertTrue( _given_error['err'].corr_coeff == _read_error['err'].corr_coeff)
def setUp(self): _data = [[0.0, .1, .3], [10, 24, 44]] _ndat = len(_data[0]) self._container = XYContainer(x_data=_data[0], y_data=_data[1]) self._container.add_error(axis='y', name="ySUA", err_val=0.1, correlation=0.0, relative=False) self._container.add_error(axis='y', name="ySUR", err_val=0.1, correlation=0.0, relative=True) self._container.add_error(axis='y', name="ySCA", err_val=0.1, correlation=1.0, relative=False) self._container.add_matrix_error(axis='y', name="yMCov", err_matrix=np.eye(_ndat) * 0.1, relative=False, matrix_type='covariance') self._container.add_matrix_error(axis='y', name="yMCor", err_matrix=np.eye(_ndat), relative=False, matrix_type='correlation', err_val=0.1) self._container.add_error(axis='x', name="xSUA", err_val=0.1, correlation=0.0, relative=False) self._container.add_error(axis='x', name="xSUR", err_val=0.1, correlation=0.0, relative=True) self._container.add_matrix_error(axis='x', name="xMCov", err_matrix=np.eye(_ndat) * 0.1, relative=False, matrix_type='covariance') # self._container.add_simple_error(axis='x', err_val=0.1, correlation=0.0, relative=False) # self._container.add_simple_error(axis='y', err_val=0.2, correlation=0.0, relative=False) # self._container.add_matrix_error(axis='y', err_matrix=np.eye(8) * 0.1, relative=False, matrix_type='covariance') self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._testfile_stringstream = IOStreamHandle(StringIO(TEST_DATASET_XY)) self._roundtrip_streamreader = DataContainerYamlReader( self._roundtrip_stringstream) self._roundtrip_streamwriter = DataContainerYamlWriter( self._container, self._roundtrip_stringstream) self._testfile_streamreader = DataContainerYamlReader( self._testfile_stringstream) self._testfile_stringstream_missing_keyword = IOStreamHandle( StringIO(TEST_DATASET_XY_MISSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle( StringIO(TEST_DATASET_XY_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = DataContainerYamlReader( self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = DataContainerYamlReader( self._testfile_stringstream_extra_keyword) self._ref_testfile_x_data = [5, 17] self._ref_testfile_y_data = [80.429, 80.339] self._ref_testfile_x_err = [0.70710678, 0.70710678] self._ref_testfile_y_err = [0.54772256, 0.54772256] self._ref_testfile_y_cov_mat = np.array([[0.3, 0.1], [0.1, 0.3]]) self._ref_testfile_x_cov_mat = np.array([[0.5, 0.2], [0.2, 0.5]]) self._ref_testfile_error_names = { 'XErrorOne', 'XErrorTwo', 'YErrorOne', 'YErrorTwo' }
class TestXYParametricModelYamlRepresenter(unittest.TestCase): @staticmethod def linear_model(x, a, b): return a * x + b def setUp(self): self._test_x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0]) self._test_model_parameters = np.array([1.1, -1.5]) self._test_parametric_model = XYParametricModel( self._test_x, ModelFunctionBase( TestXYParametricModelYamlRepresenter.linear_model), self._test_model_parameters) self._test_parametric_model_with_errors = XYParametricModel( self._test_x, ModelFunctionBase( TestXYParametricModelYamlRepresenter.linear_model), self._test_model_parameters) self._test_parametric_model_with_errors.add_error(axis='x', err_val=0.1, name='test_x_error', correlation=0, relative=False) self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._roundtrip_stringstream_with_errors = IOStreamHandle(StringIO()) self._testfile_stringstream = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_XY)) self._testfile_stringstream_with_errors = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_XY_WITH_ERRORS)) self._roundtrip_streamreader = ParametricModelYamlReader( self._roundtrip_stringstream) self._roundtrip_streamreader_with_errors = ParametricModelYamlReader( self._roundtrip_stringstream_with_errors) self._roundtrip_streamwriter = ParametricModelYamlWriter( self._test_parametric_model, self._roundtrip_stringstream) self._roundtrip_streamwriter_with_errors = ParametricModelYamlWriter( self._test_parametric_model_with_errors, self._roundtrip_stringstream_with_errors) self._testfile_streamreader = ParametricModelYamlReader( self._testfile_stringstream) self._testfile_streamreader_with_errors = ParametricModelYamlReader( self._testfile_stringstream_with_errors) self._testfile_stringstream_missing_keyword = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_XY_MISSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_XY_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = ParametricModelYamlReader( self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = ParametricModelYamlReader( self._testfile_stringstream_extra_keyword) def test_write_to_roundtrip_stringstream(self): self._roundtrip_streamwriter.write() def test_write_to_roundtrip_stringstream_with_errors(self): self._roundtrip_streamwriter_with_errors.write() def test_read_from_testfile_stream(self): _read_parametric_model = self._testfile_streamreader.read() self.assertTrue(isinstance(_read_parametric_model, XYParametricModel)) self.assertTrue( np.allclose(_read_parametric_model.parameters, self._test_model_parameters)) _read_parametric_model.x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0]) self.assertTrue( np.allclose(_read_parametric_model.y, self._test_parametric_model.y)) def test_read_from_testfile_stream_missing_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_missing_keyword.read() def test_read_from_testfile_stream_extra_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_extra_keyword.read() def test_read_from_testfile_stream_with_errors(self): _read_parametric_model = self._testfile_streamreader_with_errors.read() self.assertTrue(isinstance(_read_parametric_model, XYParametricModel)) self.assertTrue( np.allclose(_read_parametric_model.parameters, self._test_model_parameters)) _read_parametric_model.x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0]) self.assertTrue( np.allclose(_read_parametric_model.y, self._test_parametric_model_with_errors.y)) _given_error = self._test_parametric_model_with_errors.get_error( 'test_x_error') _read_error = _read_parametric_model.get_error('test_x_error') self.assertTrue(_given_error['axis'] == _read_error['axis']) self.assertTrue(_given_error['enabled'] == _read_error['enabled']) self.assertTrue( np.allclose(_given_error['err'].error, _read_error['err'].error)) self.assertTrue( _given_error['err'].corr_coeff == _read_error['err'].corr_coeff) def test_round_trip_with_stringstream(self): self._roundtrip_streamwriter.write() self._roundtrip_stringstream.seek(0) # return to beginning _read_parametric_model = self._roundtrip_streamreader.read() self.assertTrue(isinstance(_read_parametric_model, XYParametricModel)) self.assertTrue( np.allclose(_read_parametric_model.parameters, self._test_model_parameters)) _read_parametric_model.x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0]) self.assertTrue( np.allclose(_read_parametric_model.y, self._test_parametric_model.y)) def test_round_trip_with_stringstream_with_errors(self): self._roundtrip_streamwriter_with_errors.write() self._roundtrip_stringstream_with_errors.seek(0) # return to beginning _read_parametric_model = self._roundtrip_streamreader_with_errors.read( ) self.assertTrue(isinstance(_read_parametric_model, XYParametricModel)) self.assertTrue( np.allclose(_read_parametric_model.parameters, self._test_model_parameters)) _read_parametric_model.x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0]) self.assertTrue( np.allclose(_read_parametric_model.y, self._test_parametric_model_with_errors.y)) _given_error = self._test_parametric_model_with_errors.get_error( 'test_x_error') _read_error = _read_parametric_model.get_error('test_x_error') self.assertTrue(_given_error['axis'] == _read_error['axis']) self.assertTrue(_given_error['enabled'] == _read_error['enabled']) self.assertTrue( np.allclose(_given_error['err'].error, _read_error['err'].error)) self.assertTrue( _given_error['err'].corr_coeff == _read_error['err'].corr_coeff)
class TestHistContainerYamlRepresentation(unittest.TestCase): def setUp(self): _data = [1, 1, 4, 1, 1, 4, 2, 5, 5, 5, 2, 4, 2, 2, 18, 2, 8, 8, 9] _nbins = 3 self._container = HistContainer(n_bins=_nbins, bin_range=(0.0, 10.), fill_data=_data) self._container.add_error(err_val=0.1, name='SC5A_1', correlation=0.5, relative=False) self._container.add_error( err_val=[i / 10. for i in range(1, _nbins + 1)], name='SC5A_2', correlation=0.5, relative=False) self._container.add_matrix_error(err_matrix=np.eye(_nbins) * 0.1, name='MCov', relative=False, matrix_type='covariance') self._container.add_matrix_error(err_matrix=np.eye(_nbins), name='MCor', relative=False, matrix_type='correlation', err_val=0.03) self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._testfile_stringstream = IOStreamHandle( StringIO(TEST_DATASET_HIST)) self._roundtrip_streamreader = DataContainerYamlReader( self._roundtrip_stringstream) self._roundtrip_streamwriter = DataContainerYamlWriter( self._container, self._roundtrip_stringstream) self._testfile_streamreader = DataContainerYamlReader( self._testfile_stringstream) self._testfile_stringstream_missing_keyword = IOStreamHandle( StringIO(TEST_DATASET_HIST_MSSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle( StringIO(TEST_DATASET_HIST_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = DataContainerYamlReader( self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = DataContainerYamlReader( self._testfile_stringstream_extra_keyword) self._ref_testfile_n_bins = 2 self._ref_testfile_bin_range = [1.0, 3.0] self._ref_testfile_bin_edges = [1.0, 2.0, 3.0] self._ref_testfile_data = [1, 1] self._ref_testfile_err = [0.89442719, 1] self._ref_testfile_cov_mat = np.array([[0.8, 0.3], [0.3, 1.0]]) self._ref_testfile_error_names = { 'ErrorOne', 'ErrorTwo', 'ErrorThree', 'ErrorFour' } def test_write_to_roundtrip_stringstream(self): self._roundtrip_streamwriter.write() def test_read_from_testfile_stream(self): _read_container = self._testfile_streamreader.read() self.assertTrue(isinstance(_read_container, HistContainer)) self.assertTrue(_read_container.n_bins == self._ref_testfile_n_bins) self.assertTrue( np.allclose(_read_container.bin_range, self._ref_testfile_bin_range)) self.assertTrue( np.allclose(_read_container.bin_edges, self._ref_testfile_bin_edges)) self.assertTrue( np.allclose(_read_container.data, self._ref_testfile_data)) self.assertTrue( np.allclose(_read_container.err, self._ref_testfile_err)) self.assertTrue( np.allclose( _read_container.cov_mat, self._ref_testfile_cov_mat, )) # check that the error names are the same self.assertEqual(set(_read_container._error_dicts.keys()), self._ref_testfile_error_names) def test_read_from_testfile_stream_missing_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_missing_keyword.read() def test_read_from_testfile_stream_extra_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_extra_keyword.read() def test_round_trip_with_stringstream(self): self._roundtrip_streamwriter.write() self._roundtrip_stringstream.seek(0) # return to beginning _read_container = self._roundtrip_streamreader.read() self.assertTrue(isinstance(_read_container, HistContainer)) self.assertTrue(self._container.n_bins == _read_container.n_bins) self.assertTrue( np.allclose(self._container.bin_range, _read_container.bin_range)) self.assertTrue( np.allclose(self._container.bin_edges, _read_container.bin_edges)) # compare data members self.assertTrue(np.allclose(self._container.data, _read_container.data)) # compare (total) errors and cov mats # TODO: compare individual error components -> nontrivial because error ids change... self.assertTrue(np.allclose(self._container.err, _read_container.err)) self.assertTrue( np.allclose(self._container.cov_mat, _read_container.cov_mat)) # check that the error names are the same self.assertEqual(set(self._container._error_dicts.keys()), set(_read_container._error_dicts.keys()))
class TestIndexedContainerYamlRepresentation(unittest.TestCase): def setUp(self): _data = [4, 5, 6, 2, 4, 5., 3.01e-5, 4.4e+45] _ndat = len(_data) self._container = IndexedContainer(data=_data) self._container.add_error(err_val=0.1, name="SUA", correlation=0.0, relative=False) self._container.add_error(err_val=0.1, name="SUR", correlation=0.0, relative=True) self._container.add_error(err_val=0.1, name="SCA", correlation=1.0, relative=False) self._container.add_matrix_error(err_matrix=np.eye(_ndat) * 0.1, name="MCov", relative=False, matrix_type='covariance') self._container.add_matrix_error(err_matrix=np.eye(_ndat), name="MCor", relative=False, matrix_type='correlation', err_val=0.1) # # xy # self._container.add_simple_error(axis='x', err_val=0.1, correlation=0.0, relative=False) # self._container.add_simple_error(axis='y', err_val=0.2, correlation=0.0, relative=False) # self._container.add_matrix_error(axis='y', err_matrix=np.eye(8) * 0.1, relative=False, matrix_type='covariance') # # hist # self._container.add_simple_error(err_val=2, correlation=0.5, relative=False) self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._testfile_stringstream = IOStreamHandle( StringIO(TEST_DATASET_INDEXED)) self._roundtrip_streamreader = DataContainerYamlReader( self._roundtrip_stringstream) self._roundtrip_streamwriter = DataContainerYamlWriter( self._container, self._roundtrip_stringstream) self._testfile_streamreader = DataContainerYamlReader( self._testfile_stringstream) self._ref_testfile_data = [80.429, 80.339] self._ref_testfile_err = [0.89442719, 0.89442719] self._ref_testfile_cov_mat = np.array([[0.8, 0.3], [0.3, 0.8]]) self._ref_testfile_error_names = { 'ErrorOne', 'ErrorTwo', 'ErrorThree', 'ErrorFour' } self._testfile_stringstream_missing_keyword = IOStreamHandle( StringIO(TEST_DATASET_INDEXED_MISSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle( StringIO(TEST_DATASET_INDEXED_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = DataContainerYamlReader( self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = DataContainerYamlReader( self._testfile_stringstream_extra_keyword) def test_write_to_roundtrip_stringstream(self): self._roundtrip_streamwriter.write() def test_read_from_testfile_stream(self): _read_container = self._testfile_streamreader.read() self.assertTrue(isinstance(_read_container, IndexedContainer)) self.assertTrue( np.allclose(_read_container.data, self._ref_testfile_data)) self.assertTrue( np.allclose(_read_container.err, self._ref_testfile_err)) self.assertTrue( np.allclose( _read_container.cov_mat, self._ref_testfile_cov_mat, )) # check that the error names are the same self.assertEqual(set(_read_container._error_dicts.keys()), self._ref_testfile_error_names) def test_read_from_testfile_stream_missing_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_missing_keyword.read() def test_read_from_testfile_stream_extra_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_extra_keyword.read() def test_round_trip_with_stringstream(self): self._roundtrip_streamwriter.write() self._roundtrip_stringstream.seek(0) # return to beginning _read_container = self._roundtrip_streamreader.read() self.assertTrue(isinstance(_read_container, IndexedContainer)) # compare data members self.assertTrue(np.allclose(self._container.data, _read_container.data)) # compare (total) errors and cov mats # TODO: compare individual error components -> nontrivial because error ids change... self.assertTrue(np.allclose(self._container.err, _read_container.err)) self.assertTrue( np.allclose(self._container.cov_mat, _read_container.cov_mat)) # check that the error names are the same self.assertEqual(set(self._container._error_dicts.keys()), set(_read_container._error_dicts.keys()))
def setUp(self): _data = [4, 5, 6, 2, 4, 5., 3.01e-5, 4.4e+45] _ndat = len(_data) self._container = IndexedContainer(data=_data) self._container.add_error(err_val=0.1, name="SUA", correlation=0.0, relative=False) self._container.add_error(err_val=0.1, name="SUR", correlation=0.0, relative=True) self._container.add_error(err_val=0.1, name="SCA", correlation=1.0, relative=False) self._container.add_matrix_error(err_matrix=np.eye(_ndat) * 0.1, name="MCov", relative=False, matrix_type='covariance') self._container.add_matrix_error(err_matrix=np.eye(_ndat), name="MCor", relative=False, matrix_type='correlation', err_val=0.1) # # xy # self._container.add_simple_error(axis='x', err_val=0.1, correlation=0.0, relative=False) # self._container.add_simple_error(axis='y', err_val=0.2, correlation=0.0, relative=False) # self._container.add_matrix_error(axis='y', err_matrix=np.eye(8) * 0.1, relative=False, matrix_type='covariance') # # hist # self._container.add_simple_error(err_val=2, correlation=0.5, relative=False) self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._testfile_stringstream = IOStreamHandle( StringIO(TEST_DATASET_INDEXED)) self._roundtrip_streamreader = DataContainerYamlReader( self._roundtrip_stringstream) self._roundtrip_streamwriter = DataContainerYamlWriter( self._container, self._roundtrip_stringstream) self._testfile_streamreader = DataContainerYamlReader( self._testfile_stringstream) self._ref_testfile_data = [80.429, 80.339] self._ref_testfile_err = [0.89442719, 0.89442719] self._ref_testfile_cov_mat = np.array([[0.8, 0.3], [0.3, 0.8]]) self._ref_testfile_error_names = { 'ErrorOne', 'ErrorTwo', 'ErrorThree', 'ErrorFour' } self._testfile_stringstream_missing_keyword = IOStreamHandle( StringIO(TEST_DATASET_INDEXED_MISSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle( StringIO(TEST_DATASET_INDEXED_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = DataContainerYamlReader( self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = DataContainerYamlReader( self._testfile_stringstream_extra_keyword)
class TestModelParameterFormatterYamlRepresenter(unittest.TestCase): def setUp(self): self._model_parameter_formatter = ParameterFormatter( 'phi', name='ph', value=1.571, error=0.1, latex_name=r"\phi") self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._testfile_stringstream = IOStreamHandle( StringIO(TEST_MODEL_PARAMETER_FORMATTER)) self._roundtrip_streamreader = ParameterFormatterYamlReader( self._roundtrip_stringstream) self._roundtrip_streamwriter = ParameterFormatterYamlWriter( self._model_parameter_formatter, self._roundtrip_stringstream) self._testfile_streamreader = ParameterFormatterYamlReader( self._testfile_stringstream) self._testfile_stringstream_missing_keyword = IOStreamHandle( StringIO(TEST_MODEL_PARAMETER_FORMATTER_MISSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle( StringIO(TEST_MODEL_PARAMETER_FORMATTER_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = ParameterFormatterYamlReader( self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = ParameterFormatterYamlReader( self._testfile_stringstream_extra_keyword) def test_write_to_roundtrip_stringstream(self): self._roundtrip_streamwriter.write() def test_read_from_testfile_stream(self): _read_model_parameter_formatter = self._testfile_streamreader.read() self.assertTrue( isinstance(_read_model_parameter_formatter, ParameterFormatter)) self.assertTrue(_read_model_parameter_formatter.name == self._model_parameter_formatter.name) self.assertTrue(_read_model_parameter_formatter.value is None) self.assertTrue(_read_model_parameter_formatter.error is None) self.assertTrue(_read_model_parameter_formatter.latex_name == self._model_parameter_formatter.latex_name) def test_read_from_testfile_stream_missing_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_missing_keyword.read() def test_read_from_testfile_stream_extra_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_extra_keyword.read() def test_round_trip_with_stringstream(self): self._roundtrip_streamwriter.write() self._roundtrip_stringstream.seek(0) # return to beginning _read_parameter_formatter = self._roundtrip_streamreader.read() self.assertTrue( isinstance(_read_parameter_formatter, ParameterFormatter)) self.assertTrue(_read_parameter_formatter.name == self._model_parameter_formatter.name) self.assertTrue(_read_parameter_formatter.value is None) self.assertTrue(_read_parameter_formatter.error is None) self.assertTrue(_read_parameter_formatter.latex_name == self._model_parameter_formatter.latex_name)
class TestIndexedParametricModelYamlRepresenter(unittest.TestCase): TEST_X = np.arange(6) @staticmethod def linear_model(a, b): return a * np.arange(6) + b def setUp(self): self._test_model_parameters = np.array([1.1, -1.5]) self._test_parametric_model = IndexedParametricModel( IndexedModelFunction( TestIndexedParametricModelYamlRepresenter.linear_model), self._test_model_parameters) self._test_parametric_model_with_errors = IndexedParametricModel( IndexedModelFunction( TestIndexedParametricModelYamlRepresenter.linear_model), self._test_model_parameters) self._test_parametric_model_with_errors.add_error(err_val=0.1, name='test_x_error', correlation=0, relative=False) self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._roundtrip_stringstream_with_errors = IOStreamHandle(StringIO()) self._testfile_stringstream = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_INDEXED)) self._testfile_stringstream_with_errors = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_INDEXED_WITH_ERRORS)) self._roundtrip_streamreader = ParametricModelYamlReader( self._roundtrip_stringstream) self._roundtrip_streamreader_with_errors = ParametricModelYamlReader( self._roundtrip_stringstream_with_errors) self._roundtrip_streamwriter = ParametricModelYamlWriter( self._test_parametric_model, self._roundtrip_stringstream) self._roundtrip_streamwriter_with_errors = ParametricModelYamlWriter( self._test_parametric_model_with_errors, self._roundtrip_stringstream_with_errors) self._testfile_streamreader = ParametricModelYamlReader( self._testfile_stringstream) self._testfile_streamreader_with_errors = ParametricModelYamlReader( self._testfile_stringstream_with_errors) self._testfile_stringstream_missing_keyword = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_INDEXED_MISSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle( StringIO(TEST_PARAMETRIC_MODEL_INDEXED_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = ParametricModelYamlReader( self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = ParametricModelYamlReader( self._testfile_stringstream_extra_keyword) def test_write_to_roundtrip_stringstream(self): self._roundtrip_streamwriter.write() def test_write_to_roundtrip_stringstream_with_errors(self): self._roundtrip_streamwriter_with_errors.write() def test_read_from_testfile_stream(self): _read_parametric_model = self._testfile_streamreader.read() self.assertTrue( isinstance(_read_parametric_model, IndexedParametricModel)) self.assertTrue( np.allclose(_read_parametric_model.parameters, self._test_model_parameters)) self.assertTrue( np.allclose(_read_parametric_model.eval_model_function(), self._test_parametric_model.eval_model_function())) def test_read_from_testfile_stream_missing_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_missing_keyword.read() def test_read_from_testfile_stream_extra_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_extra_keyword.read() def test_read_from_testfile_stream_with_errors(self): _read_parametric_model = self._testfile_streamreader_with_errors.read() self.assertTrue( isinstance(_read_parametric_model, IndexedParametricModel)) self.assertTrue( np.allclose(_read_parametric_model.parameters, self._test_model_parameters)) self.assertTrue( np.allclose( _read_parametric_model.eval_model_function(), self._test_parametric_model_with_errors.eval_model_function())) _given_error = self._test_parametric_model_with_errors.get_error( 'test_x_error') _read_error = _read_parametric_model.get_error('test_error') self.assertTrue(_given_error['enabled'] == _read_error['enabled']) self.assertTrue( np.allclose(_given_error['err'].error, _read_error['err'].error)) self.assertTrue( _given_error['err'].corr_coeff == _read_error['err'].corr_coeff) def test_round_trip_with_stringstream(self): self._roundtrip_streamwriter.write() self._roundtrip_stringstream.seek(0) # return to beginning _read_parametric_model = self._roundtrip_streamreader.read() self.assertTrue( isinstance(_read_parametric_model, IndexedParametricModel)) self.assertTrue( np.allclose(_read_parametric_model.parameters, self._test_model_parameters)) self.assertTrue( np.allclose(_read_parametric_model.eval_model_function(), self._test_parametric_model.eval_model_function())) def test_round_trip_with_stringstream_with_errors(self): self._roundtrip_streamwriter_with_errors.write() self._roundtrip_stringstream_with_errors.seek(0) # return to beginning _read_parametric_model = self._roundtrip_streamreader_with_errors.read( ) self.assertTrue( isinstance(_read_parametric_model, IndexedParametricModel)) self.assertTrue( np.allclose(_read_parametric_model.parameters, self._test_model_parameters)) self.assertTrue( np.allclose( _read_parametric_model.eval_model_function(), self._test_parametric_model_with_errors.eval_model_function())) _given_error = self._test_parametric_model_with_errors.get_error( 'test_x_error') _read_error = _read_parametric_model.get_error('test_x_error') self.assertTrue(_given_error['enabled'] == _read_error['enabled']) self.assertTrue( np.allclose(_given_error['err'].error, _read_error['err'].error)) self.assertTrue( _given_error['err'].corr_coeff == _read_error['err'].corr_coeff)
class TestModelFunctionFormatterYamlRepresenter(unittest.TestCase): def setUp(self): self._model_function_formatter = ModelFunctionFormatter( name='quadratic_model', latex_name='quadratic model', arg_formatters=[ ParameterFormatter(arg_name='x', latex_name='X'), ParameterFormatter(arg_name='a', value=1.1, error=0.1, latex_name='A'), ParameterFormatter(arg_name='b', value=2.2, error=0.1, latex_name='B'), ParameterFormatter(arg_name='c', value=3.3, error=0.1, latex_name='C') ], expression_string='{0} * {x} ** 2 + {1} * {x} + {2}', latex_expression_string='{0}{x}^2 + {1}{x} + {2}') self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._testfile_stringstream = IOStreamHandle( StringIO(TEST_MODEL_FUNCTION_FORMATTER)) self._roundtrip_streamreader = ModelFunctionFormatterYamlReader( self._roundtrip_stringstream) self._roundtrip_streamwriter = ModelFunctionFormatterYamlWriter( self._model_function_formatter, self._roundtrip_stringstream) self._testfile_streamreader = ModelFunctionFormatterYamlReader( self._testfile_stringstream) self._testfile_stringstream_missing_keyword = IOStreamHandle( StringIO(TEST_MODEL_FUNCTION_FORMATTER_MISSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle( StringIO(TEST_MODEL_FUNCTION_FORMATTER_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = ModelFunctionFormatterYamlReader( self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = ModelFunctionFormatterYamlReader( self._testfile_stringstream_extra_keyword) def _assert_model_function_formatters_equal(self, formatter1, formatter2): self.assertTrue(formatter1.name == formatter2.name) self.assertTrue(formatter1.latex_name == formatter2.latex_name) for _arg_formatter_1, _arg_formatter_2 in zip( formatter1._arg_formatters, formatter2._arg_formatters): self.assertTrue(_arg_formatter_1.name == _arg_formatter_2.name) self.assertTrue( _arg_formatter_1.latex_name == _arg_formatter_2.latex_name) self.assertTrue(formatter1.expression_format_string == formatter2.expression_format_string) self.assertTrue(formatter1.latex_expression_format_string == formatter2.latex_expression_format_string) def test_write_to_roundtrip_stringstream(self): self._roundtrip_streamwriter.write() def test_read_from_testfile_stream(self): _read_model_function_formatter = self._testfile_streamreader.read() self.assertTrue( isinstance(_read_model_function_formatter, ModelFunctionFormatter)) self._assert_model_function_formatters_equal( _read_model_function_formatter, self._model_function_formatter) def test_read_from_testfile_stream_missing_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_missing_keyword.read() def test_read_from_testfile_stream_extra_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_extra_keyword.read() def test_round_trip_with_stringstream(self): self._roundtrip_streamwriter.write() self._roundtrip_stringstream.seek(0) # return to beginning _read_model_function_formatter = self._roundtrip_streamreader.read() self.assertTrue( isinstance(_read_model_function_formatter, ModelFunctionFormatter)) self._assert_model_function_formatters_equal( _read_model_function_formatter, self._model_function_formatter)
class AbstractTestFitRepresenter(object): FIT_CLASS = None TEST_FIT = None TEST_FIT_SIMPLE = None TEST_FIT_MISSING_KEYWORD = None TEST_FIT_EXTRA_KEYWORD = None @abc.abstractmethod def setUp(self): pass def setup_streams(self): self._testfile_stringstream = IOStreamHandle(StringIO(self.TEST_FIT)) self._testfile_stringstream_simple = IOStreamHandle(StringIO(self.TEST_FIT_SIMPLE)) self._testfile_streamreader = FitYamlReader(self._testfile_stringstream) self._testfile_streamreader_simple = FitYamlReader(self._testfile_stringstream_simple) self._roundtrip_stringstream = IOStreamHandle(StringIO()) self._roundtrip_streamreader = FitYamlReader(self._roundtrip_stringstream) self._roundtrip_streamwriter = FitYamlWriter(self._fit, self._roundtrip_stringstream) self._testfile_stringstream_missing_keyword = IOStreamHandle(StringIO(self.TEST_FIT_MISSING_KEYWORD)) self._testfile_stringstream_extra_keyword = IOStreamHandle(StringIO(self.TEST_FIT_EXTRA_KEYWORD)) self._testfile_streamreader_missing_keyword = FitYamlReader(self._testfile_stringstream_missing_keyword) self._testfile_streamreader_extra_keyword = FitYamlReader(self._testfile_stringstream_extra_keyword) def test_write_to_roundtrip_stringstream(self): self._roundtrip_streamwriter.write() def test_read_from_testfile_stream_missing_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_missing_keyword.read() def test_read_from_testfile_stream_extra_keyword(self): with self.assertRaises(YamlReaderException): self._testfile_streamreader_extra_keyword.read() def test_round_trip_save_results(self): self._fit.do_fit() self._roundtrip_streamwriter.write() self._roundtrip_stringstream.seek(0) # return to beginning _read_fit = self._roundtrip_streamreader.read() self.assertTrue(isinstance(_read_fit, self.FIT_CLASS)) self.assertTrue(self._fit.did_fit == _read_fit.did_fit) self.assertTrue( np.allclose( self._fit.parameter_cov_mat, _read_fit.parameter_cov_mat ) ) self.assertTrue( np.allclose( self._fit.parameter_errors, _read_fit.parameter_errors ) ) self.assertTrue( np.allclose( self._fit.parameter_cor_mat, _read_fit.parameter_cor_mat ) )