Ejemplo n.º 1
0
    def test_ensure_completeness(self):
        template = DatasetTemplate(dimensions={'X': 1})
        template.variables = {
            'A': {'_dimensions': ['X'], '_datatype': 'float32', '_data': [12.3]},
            'B': {'_dimensions': ['X'], '_data': [12.3]},
            'X': {'_dimensions': ['X'], '_data': self.values1},
            'Y': {'_datatype': 'float32', '_data': None}
        }
        template.ensure_completeness()

        self.assertEqual(['X'], template.variables['A']['_dimensions'])
        self.assertEqual(np.dtype('float32'), template.variables['A']['_datatype'])
        self.assertEqual([12.3], template.variables['A']['_data'])
        self.assertIsInstance(template.variables['A']['_data'], np.ndarray)

        self.assertEqual(np.dtype('float64'), template.variables['B']['_datatype'])

        self.assertIs(self.values1.dtype, template.variables['X']['_datatype'])

        self.assertEqual([], template.variables['Y']['_dimensions'])

        template.variables = {'Z': {'_dimensions': [], '_data': None}}
        self.assertRaisesRegexp(ValidationError, r"No data type information for variable 'Z'",
                                template.ensure_completeness)

        template.variables = {'Z': {'_dimensions': []}}
        self.assertRaisesRegexp(ValidationError, r"No data specified for variable 'Z'",
                                template.ensure_completeness)
Ejemplo n.º 2
0
    def test_ensure_consistency(self):
        template = DatasetTemplate()
        scalar = {'_dimensions': [], '_data': np.array(1)}
        template.variables = {'SCALAR': scalar}
        template.ensure_consistency()
        self.assertEqual({}, template.dimensions)
        self.assertIs(scalar, template.variables['SCALAR'])

        template = DatasetTemplate(dimensions={'TEN': 10})
        var_10 = {'_dimensions': ['TEN'], '_data': self.values10}
        template.variables = {'TEN': var_10}
        template.ensure_consistency()
        self.assertEqual({'TEN': 10}, template.dimensions)
        self.assertIs(var_10, template.variables['TEN'])

        template = DatasetTemplate(dimensions={'X': None})
        var_12 = {'_dimensions': ['X'], '_data': np.arange(12)}
        template.variables = {'X': var_12}
        template.ensure_consistency()
        self.assertEqual({'X': 12}, template.dimensions)
        self.assertIs(var_12, template.variables['X'])

        empty = {'_dimensions': ['X'], '_data': None}
        template.variables['EMPTY'] = empty
        template.ensure_consistency()
        self.assertEqual({'X': 12}, template.dimensions)
        self.assertIs(empty, template.variables['EMPTY'])

        template.variables['X']['_data'] = self.values1
        self.assertRaisesRegexp(
            ValueError,
            'inconsistent with dimension sizes defined in template', template.
            ensure_consistency)  # now should fail because dim X is already set

        template.variables = {
            'Z': {
                '_dimensions': ["NOSUCHTHING"],
                '_data': self.values10
            }
        }
        self.assertRaisesRegexp(ValidationError, 'undefined dimensions',
                                template.ensure_consistency)

        template.variables = {
            'W': {
                '_dimensions': ['X'],
                '_data': np.arange(20).reshape((10, 2))
            }
        }
        self.assertRaisesRegexp(
            ValueError,
            "Variable 'W' has 1 dimensions, but value array has 2 dimensions.",
            template.ensure_consistency)