diff --git a/src/PseudoNetCDF/core/_variables.py b/src/PseudoNetCDF/core/_variables.py index 138e1b9..fce717c 100644 --- a/src/PseudoNetCDF/core/_variables.py +++ b/src/PseudoNetCDF/core/_variables.py @@ -345,6 +345,7 @@ def array(self): def __array_finalize__(self, obj): np.ma.MaskedArray.__array_finalize__(self, obj) + PseudoNetCDFVariable.__array_finalize__(self, obj) def _update_from(self, obj): dt = self.dtype.char diff --git a/src/PseudoNetCDF/test/test_core.py b/src/PseudoNetCDF/test/test_core.py index a3a541b..9e86413 100644 --- a/src/PseudoNetCDF/test/test_core.py +++ b/src/PseudoNetCDF/test/test_core.py @@ -2,6 +2,7 @@ import numpy as np from PseudoNetCDF import PseudoNetCDFFile, PseudoNetCDFVariables from PseudoNetCDF import PseudoNetCDFVariable, pncopen +from PseudoNetCDF.core._variables import PseudoNetCDFMaskedVariable from . import requires_basemap, requires_pyproj, requires_matplotlib from . import compare_files from PseudoNetCDF.pncwarn import warn @@ -49,6 +50,24 @@ def testFromArray(self): assert (var.dimensions == ('y', 'x')) np_all_close(var[:], self.myarray) + def testMaskedArrayFinalizeCopiesPseudoNetCDFMetadata(self): + parent = PseudoNetCDFFile() + parent.createDimension('y', 1) + parent.createDimension('x', 5) + masked = np.ma.array(self.myarray[:1], mask=[[0, 1, 0, 1, 0]]) + var = PseudoNetCDFMaskedVariable( + parent, 'unknown', 'f', ('y', 'x'), + values=masked, units='unknown', long_name='masked variable' + ) + + copied = var.copy() + + assert (copied.dimensions == ('y', 'x')) + assert (copied.getncatts() == { + 'units': 'unknown', 'long_name': 'masked variable', + }) + np.testing.assert_array_equal(copied.mask, masked.mask) + class PseudoNetCDFFileTest(unittest.TestCase): def setUp(self):