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)