Пример #1
0
    def test_iter_melted(self):

        def _assert_key_(attr, key, row, actual_none=None):
            key_value = row[key]
            if attr is not None:
                self.assertEqual(key_value, attr)
            else:
                if actual_none is None:
                    self.assertIsNone(key_value)
                else:
                    self.assertEqual(key_value, actual_none)

        keywords = dict(value=[np.ma.array([[4, 5], [6, 7]], mask=[[False, True], [False, False]])],
                        use_mask=[True, False],
                        name=[None, 'tmax'],
                        alias=[None, 'tmax_alias'],
                        units=[None, 'celsius'],
                        uid=[None, 3],
                        did=[None, 7],
                        name_uid=[None, 'vid'],
                        attrs=[None, {'foo': 1, 'foo3': 2}])

        for k in self.iter_product_keywords(keywords):
            var = Variable(value=k.value, name=k.name, alias=k.alias, units=k.units, uid=k.uid, did=k.did,
                           attrs=k.attrs)
            rows = []
            for row in var.iter_melted(use_mask=k.use_mask):
                self.assertAsSetEqual(row.keys(), ['slice', 'name', 'did', 'value', 'alias', 'units', 'uid', 'attrs'])
                self.assertIn('slice', row)

                if k.name is None:
                    if k.alias is None:
                        self.assertIsNone(row['alias'])
                    else:
                        self.assertEqual(row['alias'], k.alias)
                else:
                    if k.alias is None:
                        self.assertEqual(row['alias'], k.name)
                    else:
                        self.assertEqual(row['alias'], k.alias)

                _assert_key_(k.name, 'name', row)
                _assert_key_(k.units, 'units', row)
                _assert_key_(k.uid, 'uid', row)
                _assert_key_(k.did, 'did', row)
                _assert_key_(k.attrs, 'attrs', row, actual_none=OrderedDict())

                rows.append(row)
            if k.use_mask:
                self.assertEqual(len(rows), 3)
            else:
                self.assertEqual(len(rows), 4)