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()
Esempio n. 2
0
    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'
        }
Esempio n. 3
0
    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)
Esempio n. 6
0
    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)
Esempio n. 8
0
    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)
Esempio n. 9
0
    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)
Esempio n. 12
0
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()))
Esempio n. 13
0
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)
Esempio n. 14
0
    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'
        }
Esempio n. 15
0
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)
Esempio n. 16
0
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()))
Esempio n. 17
0
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()))
Esempio n. 18
0
    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)
Esempio n. 20
0
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)
Esempio n. 22
0
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
            )
        )