Exemple #1
0
    def test_geometry_3(self):
        """Test nodes in a file with no node count variable."""
        f = cfdm.read(self.geometry_3_file, verbose=False)

        self.assertEqual(len(f), 2, "f = " + repr(f))

        for g in f:
            self.assertTrue(g.equals(g.copy(), verbose=3))
            self.assertEqual(len(g.auxiliary_coordinates()), 3)

        g = f[0]
        for axis in ("X", "Y", "Z"):
            coord = g.construct("axis=" + axis)
            self.assertFalse(coord.has_node_count(), "axis=" + axis)
            self.assertFalse(coord.has_part_node_count(), "axis=" + axis)
            self.assertFalse(coord.has_interior_ring(), "axis=" + axis)

        cfdm.write(f, tempfile, Conventions="CF-" + VN, verbose=False)

        f2 = cfdm.read(tempfile, verbose=False)

        self.assertEqual(len(f2), 2, "f2 = " + repr(f2))

        for a, b in zip(f, f2):
            self.assertTrue(a.equals(b, verbose=3))
Exemple #2
0
    def test_geometry_interior_ring(self):
        if self.test_only and inspect.stack()[0][3] not in self.test_only:
            return

        f = cfdm.read(self.geometry_interior_ring_file, verbose=False)

        self.assertTrue(len(f) == 2, 'f = ' + repr(f))

        for g in f:
            self.assertTrue(g.equals(g.copy(), verbose=True))
            self.assertTrue(len(g.auxiliary_coordinates) == 4)
#            g.dump()

        g = f[0]
        for axis in ('X', 'Y', 'Z'):
            coord = g.construct('axis=' + axis)
            self.assertTrue(coord.has_node_count(), 'axis=' + axis)
            self.assertTrue(coord.has_part_node_count(), 'axis=' + axis)
            self.assertTrue(coord.has_interior_ring(), 'axis=' + axis)

        cfdm.write(f, self.tempfilename, Conventions='CF-1.8', verbose=False)
        #        cfdm.write(f, 'delme.nc', Conventions='CF-1.8', verbose=False)

        f2 = cfdm.read(self.tempfilename, verbose=False)

        self.assertTrue(len(f2) == 2, 'f2 = ' + repr(f2))

        for a, b in zip(f, f2):
            self.assertTrue(a.equals(b, verbose=True))
Exemple #3
0
    def test_geometry_4(self):
        if self.test_only and inspect.stack()[0][3] not in self.test_only:
            return

        f = cfdm.read(self.geometry_4_file, verbose=False)

        self.assertEqual(len(f), 2, 'f = ' + repr(f))

        for g in f:
            self.assertTrue(g.equals(g.copy(), verbose=3))
            self.assertEqual(len(g.auxiliary_coordinates), 3)

        for axis in ('X', 'Y'):
            coord = g.construct('axis=' + axis)
            self.assertTrue(coord.has_node_count(), 'axis=' + axis)
            self.assertFalse(coord.has_part_node_count(), 'axis=' + axis)
            self.assertFalse(coord.has_interior_ring(), 'axis=' + axis)

        cfdm.write(f, tempfile, Conventions='CF-' + VN, verbose=False)

        f2 = cfdm.read(tempfile, verbose=False)

        self.assertEqual(len(f2), 2, 'f2 = ' + repr(f2))

        for a, b in zip(f, f2):
            self.assertTrue(a.equals(b, verbose=3))

        # Setting of node count properties
        coord = f[0].construct('axis=X')
        nc = coord.get_node_count()
        cfdm.write(f, tempfile)
        nc.set_property('long_name', 'Node counts')
        cfdm.write(f, tempfile, verbose=False)
        nc.nc_set_variable('new_var_name')
        cfdm.write(f, tempfile, verbose=False)
Exemple #4
0
    def test_DSG_indexed_contiguous(self):  
        if self.test_only and inspect.stack()[0][3] not in self.test_only:
            return

        f = cfdm.read(self.indexed_contiguous, verbose=False)

        self.assertTrue(len(f) == 2)

        # Select the specific humidity field
        q = [g for g in f
             if g.get_property('standard_name') == 'specific_humidity'][0]

        qa = q.data.array
        
        message= repr(qa-self.b) +'\n'+repr(qa[2,0])+'\n'+repr(self.b[2, 0])
        self.assertTrue(q._equals(qa, self.b), message)        

#        print ('\nf\n')
#        for x in f:
#            print(x)
            
        cfdm.write(f, self.tempfilename, verbose=False)
        g = cfdm.read(self.tempfilename, verbose=False)
        
#        print ('\ng\n')
#        for x in g:
#            print(x)

        self.assertTrue(len(g) == len(f))

        for i in range(len(f)):
            self.assertTrue(g[i].equals(f[i], verbose=True))
Exemple #5
0
    def test_read_write_multiple_geometries(self):
        """Test reading and writing with a mixture of geometry cells."""
        a = []
        for filename in (
                "geometry_1.nc",
                "geometry_2.nc",
                "geometry_3.nc",
                "geometry_4.nc",
                "geometry_interior_ring_2.nc",
                "geometry_interior_ring.nc",
        ):
            a.extend(cfdm.read(filename))

        for n, f in enumerate(a):
            f.set_property("test_id", str(n))

        cfdm.write(a, tmpfile, verbose=1)

        f = cfdm.read(tmpfile, verbose=1)

        self.assertEqual(len(a), len(f))

        for x in a:
            for n, y in enumerate(f[:]):
                if x.equals(y):
                    f.pop(n)
                    break

        self.assertFalse(f)
Exemple #6
0
    def test_geometry_3(self):
        if self.test_only and inspect.stack()[0][3] not in self.test_only:
            return

        f = cfdm.read(self.geometry_3_file, verbose=False)

        self.assertEqual(len(f), 2, 'f = ' + repr(f))

        for g in f:
            self.assertTrue(g.equals(g.copy(), verbose=3))
            self.assertEqual(len(g.auxiliary_coordinates), 3)

        g = f[0]
        for axis in ('X', 'Y', 'Z'):
            coord = g.construct('axis=' + axis)
            self.assertFalse(coord.has_node_count(), 'axis=' + axis)
            self.assertFalse(coord.has_part_node_count(), 'axis=' + axis)
            self.assertFalse(coord.has_interior_ring(), 'axis=' + axis)

        cfdm.write(f, tempfile, Conventions='CF-' + VN, verbose=False)

        f2 = cfdm.read(tempfile, verbose=False)

        self.assertEqual(len(f2), 2, 'f2 = ' + repr(f2))

        for a, b in zip(f, f2):
            self.assertTrue(a.equals(b, verbose=3))
Exemple #7
0
    def test_read_write_string(self):
        """Test the `string` keyword argument to `read` and `write`."""
        f = cfdm.read(self.string_filename)

        n = int(len(f) / 2)

        for i in range(0, n):
            j = i + n
            self.assertTrue(
                f[i].data.equals(f[j].data, verbose=3),
                f"{f[i]!r} {f[j]!r}",
            )
            self.assertTrue(
                f[j].data.equals(f[i].data, verbose=3),
                f"{f[j]!r} {f[i]!r}",
            )

        # Note: Don't loop round all netCDF formats for better
        #       performance. Just one netCDF3 and one netCDF4 format
        #       is sufficient to test the functionality

        f0 = cfdm.read(self.string_filename)
        for string0 in (True, False):
            for fmt0 in ("NETCDF4", "NETCDF3_CLASSIC"):
                cfdm.write(f0, tmpfile0, fmt=fmt0, string=string0)

                for string1 in (True, False):
                    for fmt1 in ("NETCDF4", "NETCDF3_CLASSIC"):
                        cfdm.write(f0, tmpfile1, fmt=fmt1, string=string1)

                        for i, j in zip(cfdm.read(tmpfile1),
                                        cfdm.read(tmpfile0)):
                            self.assertTrue(i.equals(j, verbose=3))
Exemple #8
0
    def test_read_write_string(self):
        if self.test_only and inspect.stack()[0][3] not in self.test_only:
            return

        f = cfdm.read(self.string_filename)

        n = int(len(f) / 2)

        for i in range(0, n):
            j = i + n
            self.assertTrue(f[i].data.equals(f[j].data, verbose=3),
                            "{!r} {!r}".format(f[i], f[j]))
            self.assertTrue(f[j].data.equals(f[i].data, verbose=3),
                            "{!r} {!r}".format(f[j], f[i]))

        f0 = cfdm.read(self.string_filename)
        for string0 in (True, False):
            for fmt0 in ('NETCDF4', 'NETCDF3_CLASSIC'):
                cfdm.write(f0, tmpfile0, fmt=fmt0, string=string0)

                for string1 in (True, False):
                    for fmt1 in ('NETCDF4', 'NETCDF3_CLASSIC'):
                        cfdm.write(f0, tmpfile1, fmt=fmt1, string=string1)

                        for i, j in zip(cfdm.read(tmpfile1),
                                        cfdm.read(tmpfile0)):
                            self.assertTrue(i.equals(j, verbose=3))
Exemple #9
0
    def test_read_mask(self):
        """Test reading and writing of netCDF with masked data."""
        f = cfdm.example_field(0)

        N = f.size

        f.data[1, 1] = cfdm.masked
        f.data[2, 2] = cfdm.masked

        f.del_property("_FillValue", None)
        f.del_property("missing_value", None)

        cfdm.write(f, tmpfile)

        g = cfdm.read(tmpfile)[0]
        self.assertEqual(numpy.ma.count(g.data.array), N - 2)

        g = cfdm.read(tmpfile, mask=False)[0]
        self.assertEqual(numpy.ma.count(g.data.array), N)

        g.apply_masking(inplace=True)
        self.assertEqual(numpy.ma.count(g.data.array), N - 2)

        f.set_property("_FillValue", 999)
        f.set_property("missing_value", -111)
        cfdm.write(f, tmpfile)

        g = cfdm.read(tmpfile)[0]
        self.assertEqual(numpy.ma.count(g.data.array), N - 2)

        g = cfdm.read(tmpfile, mask=False)[0]
        self.assertEqual(numpy.ma.count(g.data.array), N)

        g.apply_masking(inplace=True)
        self.assertEqual(numpy.ma.count(g.data.array), N - 2)
Exemple #10
0
    def test_read_write_unlimited(self):
        """Test reading and writing with an unlimited dimension."""
        for fmt in self.netcdf_fmts:

            f = cfdm.read(self.filename)[0]
            domain_axes = f.domain_axes()

            domain_axes["domainaxis0"].nc_set_unlimited(True)
            cfdm.write(f, tmpfile, fmt=fmt)

            f = cfdm.read(tmpfile)[0]
            domain_axes = f.domain_axes()
            self.assertTrue(domain_axes["domainaxis0"].nc_is_unlimited())

        f = cfdm.read(self.filename)[0]

        domain_axes = f.domain_axes()

        domain_axes["domainaxis0"].nc_set_unlimited(True)
        domain_axes["domainaxis2"].nc_set_unlimited(True)
        cfdm.write(f, tmpfile, fmt="NETCDF4")

        f = cfdm.read(tmpfile)[0]
        domain_axes = f.domain_axes()
        self.assertTrue(domain_axes["domainaxis0"].nc_is_unlimited())
        self.assertTrue(domain_axes["domainaxis2"].nc_is_unlimited())
Exemple #11
0
    def test_read_write_multiple_geometries(self):
        if self.test_only and inspect.stack()[0][3] not in self.test_only:
            return

        a = []
        for filename in (
                'geometry_1.nc',
                'geometry_2.nc',
                'geometry_3.nc',
                'geometry_4.nc',
                'geometry_interior_ring_2.nc',
                'geometry_interior_ring.nc',
        ):
            a.extend(cfdm.read(filename))

        for n, f in enumerate(a):
            f.set_property('test_id', str(n))

        cfdm.write(a, tmpfile, verbose=1)

        f = cfdm.read(tmpfile, verbose=1)

        self.assertEqual(len(a), len(f))

        for x in a:
            for n, y in enumerate(f[:]):
                if x.equals(y):
                    f.pop(n)
                    break
        # --- End: for

        self.assertFalse(f)
Exemple #12
0
    def test_read_write_Conventions(self):
        """TODO DOCS."""
        f = cfdm.read(self.filename)[0]

        version = "CF-" + cfdm.CF()
        other = "ACDD-1.3"

        for Conventions in (other,):
            cfdm.write(f, tmpfile0, Conventions=Conventions)
            g = cfdm.read(tmpfile0)[0]
            self.assertEqual(
                g.get_property("Conventions"),
                " ".join([version, other]),
                "{!r}, {!r}".format(
                    g.get_property("Conventions"), Conventions
                ),
            )

        for Conventions in (
            version,
            "",
            " ",
            ",",
            ", ",
        ):
            Conventions = version
            cfdm.write(f, tmpfile0, Conventions=Conventions)
            g = cfdm.read(tmpfile0)[0]
            self.assertEqual(
                g.get_property("Conventions"),
                version,
                "{!r}, {!r}".format(
                    g.get_property("Conventions"), Conventions
                ),
            )

        for Conventions in (
            [version],
            [version, other],
        ):
            cfdm.write(f, tmpfile0, Conventions=Conventions)
            g = cfdm.read(tmpfile0)[0]
            self.assertEqual(
                g.get_property("Conventions"),
                " ".join(Conventions),
                "{!r}, {!r}".format(
                    g.get_property("Conventions"), Conventions
                ),
            )

        for Conventions in ([other, version],):
            cfdm.write(f, tmpfile0, Conventions=Conventions)
            g = cfdm.read(tmpfile0)[0]
            self.assertEqual(
                g.get_property("Conventions"),
                " ".join([version, other]),
                "{!r}, {!r}".format(
                    g.get_property("Conventions"), Conventions
                ),
            )
Exemple #13
0
    def test_geometry_4(self):
        """Test nodes all not tied to auxiliary coordinate variables."""
        f = cfdm.read(self.geometry_4_file, verbose=False)

        self.assertEqual(len(f), 2, "f = " + repr(f))

        for g in f:
            self.assertTrue(g.equals(g.copy(), verbose=3))
            self.assertEqual(len(g.auxiliary_coordinates()), 3)

        for axis in ("X", "Y"):
            coord = g.construct("axis=" + axis)
            self.assertTrue(coord.has_node_count(), "axis=" + axis)
            self.assertFalse(coord.has_part_node_count(), "axis=" + axis)
            self.assertFalse(coord.has_interior_ring(), "axis=" + axis)

        cfdm.write(f, tempfile, Conventions="CF-" + VN, verbose=False)

        f2 = cfdm.read(tempfile, verbose=False)

        self.assertEqual(len(f2), 2, "f2 = " + repr(f2))

        for a, b in zip(f, f2):
            self.assertTrue(a.equals(b, verbose=3))

        # Setting of node count properties
        coord = f[0].construct("axis=X")
        nc = coord.get_node_count()
        cfdm.write(f, tempfile)
        nc.set_property("long_name", "Node counts")
        cfdm.write(f, tempfile, verbose=False)
        nc.nc_set_variable("new_var_name")
        cfdm.write(f, tempfile, verbose=False)
Exemple #14
0
    def test_Field_compress_uncompress(self):
        """Test the compress and uncompress Field methods."""
        contiguous = os.path.join(
            os.path.dirname(os.path.abspath(__file__)),
            "DSG_timeSeries_contiguous.nc",
        )
        indexed = os.path.join(
            os.path.dirname(os.path.abspath(__file__)),
            "DSG_timeSeries_indexed.nc",
        )
        indexed_contiguous = os.path.join(
            os.path.dirname(os.path.abspath(__file__)),
            "DSG_timeSeriesProfile_indexed_contiguous.nc",
        )

        files = (contiguous, indexed, indexed_contiguous)
        methods = ("contiguous", "indexed", "indexed_contiguous")

        for filename, method in zip(files, methods):
            message = "method=" + method
            for f in cfdm.read(filename):
                self.assertTrue(bool(f.data.get_compression_type()), message)

                u = f.uncompress()
                self.assertFalse(bool(u.data.get_compression_type()), message)
                self.assertTrue(f.equals(u, verbose=3), message)

                for method1 in methods:
                    message += ", method1=" + method1
                    if method1 == "indexed_contiguous":
                        if f.data.ndim != 3:
                            continue
                    elif f.data.ndim != 2:
                        continue

                    c = u.compress(method1)

                    self.assertTrue(
                        bool(c.data.get_compression_type()), message
                    )

                    self.assertTrue(u.equals(c, verbose=3), message)
                    self.assertTrue(f.equals(c, verbose=3), message)

                    c = f.compress(method1)
                    self.assertTrue(
                        bool(c.data.get_compression_type()), message
                    )

                    self.assertTrue(u.equals(c, verbose=3), message)
                    self.assertTrue(f.equals(c, verbose=3), message)

                    cfdm.write(c, tmpfile)
                    c = cfdm.read(tmpfile)[0]

                    self.assertTrue(
                        bool(c.data.get_compression_type()), message
                    )
                    self.assertTrue(f.equals(c, verbose=3), message)
Exemple #15
0
 def test_read_write_missing_data(self):
     """Test reading and writing of netCDF with missing data."""
     f = cfdm.read(self.filename)[0]
     for fmt in self.netcdf_fmts:
         cfdm.write(f, tmpfile, fmt=fmt)
         g = cfdm.read(tmpfile)[0]
         self.assertTrue(f.equals(g, verbose=3),
                         f"Bad read/write of format: {fmt}")
Exemple #16
0
    def test_groups_compression(self):
        f = cfdm.example_field(4)

        ungrouped_file = ungrouped_file3
        grouped_file = grouped_file3

        f.compress('indexed_contiguous', inplace=True)
        f.data.get_count().nc_set_variable('count')
        f.data.get_index().nc_set_variable('index')

        cfdm.write(f, ungrouped_file, verbose=1)
        g = cfdm.read(ungrouped_file)[0]
        self.assertTrue(f.equals(g, verbose=2))

        # ------------------------------------------------------------
        # Move the field construct to the /forecast/model group
        # ------------------------------------------------------------
        g.nc_set_variable_groups(['forecast', 'model'])

        # ------------------------------------------------------------
        # Move the count variable to the /forecast group
        # ------------------------------------------------------------
        g.data.get_count().nc_set_variable_groups(['forecast'])

        # ------------------------------------------------------------
        # Move the index variable to the /forecast group
        # ------------------------------------------------------------
        g.data.get_index().nc_set_variable_groups(['forecast'])

        # ------------------------------------------------------------
        # Move the coordinates that span the element dimension to the
        # /forecast group
        # ------------------------------------------------------------
        name = 'altitude'
        g.construct(name).nc_set_variable_groups(['forecast'])

        # ------------------------------------------------------------
        # Move the sample dimension to the /forecast group
        # ------------------------------------------------------------
        g.data.get_count().nc_set_sample_dimension_groups(['forecast'])

        cfdm.write(g, grouped_file, verbose=1)

        nc = netCDF4.Dataset(grouped_file, 'r')
        self.assertIn(f.nc_get_variable(),
                      nc.groups['forecast'].groups['model'].variables)
        self.assertIn(f.data.get_count().nc_get_variable(),
                      nc.groups['forecast'].variables)
        self.assertIn(f.data.get_index().nc_get_variable(),
                      nc.groups['forecast'].variables)
        self.assertIn(
            f.construct('altitude').nc_get_variable(),
            nc.groups['forecast'].variables)
        nc.close()

        h = cfdm.read(grouped_file, verbose=1)
        self.assertEqual(len(h), 1, repr(h))
        self.assertTrue(f.equals(h[0], verbose=2))
Exemple #17
0
    def test_read_write_unlimited(self):
        if self.test_only and inspect.stack()[0][3] not in self.test_only:
            return

        f = cfdm.read(self.filename)[0]
        f.nc_set_unlimited_dimensions(['domainaxis0'])
        cfdm.write(f, tmpfile)
        f = cfdm.read(tmpfile)[0]
        self.assertTrue(f.nc_unlimited_dimensions() == set(['domainaxis0']))
Exemple #18
0
 def test_read_write_format(self):
     """Test the `fmt` keyword argument of the `read` function."""
     f = cfdm.read(self.filename)[0]
     for fmt in self.netcdf_fmts:
         cfdm.write(f, tmpfile, fmt=fmt)
         g = cfdm.read(tmpfile)
         self.assertEqual(len(g), 1)
         g = g[0]
         self.assertTrue(f.equals(g, verbose=3),
                         f"Bad read/write of format: {fmt}")
Exemple #19
0
 def test_read_write_format(self):
     """TODO DOCS."""
     f = cfdm.read(self.filename)[0]
     for fmt in self.netcdf_fmts:
         cfdm.write(f, tmpfile, fmt=fmt)
         g = cfdm.read(tmpfile)
         self.assertEqual(len(g), 1)
         g = g[0]
         self.assertTrue(
             f.equals(g, verbose=3), f"Bad read/write of format: {fmt}"
         )
Exemple #20
0
    def test_read_field(self):
        if self.test_only and inspect.stack()[0][3] not in self.test_only:
            return

        # Test field keyword of cfdm.read
        filename = self.filename

        f = cfdm.read(filename)
        self.assertEqual(len(f), 1, '\n' + str(f))

        f = cfdm.read(filename,
                      extra=['dimension_coordinate'],
                      warnings=warnings)
        self.assertEqual(len(f), 4, '\n' + str(f))

        f = cfdm.read(filename,
                      extra=['auxiliary_coordinate'],
                      warnings=warnings)
        self.assertEqual(len(f), 4, '\n' + str(f))

        f = cfdm.read(filename, extra='cell_measure')
        self.assertEqual(len(f), 2, '\n' + str(f))

        f = cfdm.read(filename, extra=['field_ancillary'])
        self.assertEqual(len(f), 4, '\n' + str(f))

        f = cfdm.read(filename, extra='domain_ancillary', warnings=warnings)
        self.assertEqual(len(f), 4, '\n' + str(f))

        f = cfdm.read(filename,
                      extra=['field_ancillary', 'auxiliary_coordinate'],
                      warnings=warnings)
        self.assertEqual(len(f), 7, '\n' + str(f))

        self.assertEqual(
            len(
                cfdm.read(filename,
                          extra=['domain_ancillary', 'auxiliary_coordinate'],
                          warnings=warnings)), 7)
        self.assertEqual(
            len(
                cfdm.read(filename,
                          extra=[
                              'domain_ancillary', 'cell_measure',
                              'auxiliary_coordinate'
                          ],
                          warnings=warnings)), 8)

        f = cfdm.read(filename,
                      extra=('field_ancillary', 'dimension_coordinate',
                             'cell_measure', 'auxiliary_coordinate',
                             'domain_ancillary'),
                      warnings=warnings)
        self.assertEqual(len(f), 14, '\n' + str(f))
Exemple #21
0
    def test_read_write_missing_data(self):
        if self.test_only and inspect.stack()[0][3] not in self.test_only:
            return

        f = cfdm.read(self.filename)[0]
        for fmt in ('NETCDF3_CLASSIC', 'NETCDF3_64BIT', 'NETCDF3_64BIT_OFFSET',
                    'NETCDF3_64BIT_DATA', 'NETCDF4', 'NETCDF4_CLASSIC'):
            cfdm.write(f, tmpfile, fmt=fmt)
            g = cfdm.read(tmpfile)[0]
            self.assertTrue(f.equals(g, verbose=3),
                            'Bad read/write of format: {}'.format(fmt))
Exemple #22
0
    def test_write_datatype(self):
        if self.test_only and inspect.stack()[0][3] not in self.test_only:
            return

        f = cfdm.read(self.filename)[0] 
        self.assertTrue(f.data.dtype == numpy.dtype(float))

        cfdm.write(f, tmpfile, fmt='NETCDF4', 
                 datatype={numpy.dtype(float): numpy.dtype('float32')})
        g = cfdm.read(tmpfile)[0]
        self.assertTrue(g.data.dtype == numpy.dtype('float32'), 
                        'datatype read in is '+str(g.data.dtype))
Exemple #23
0
    def test_read_write_Conventions(self):
        """Test the `Conventions` keyword argument to `write`."""
        f = cfdm.read(self.filename)[0]

        version = "CF-" + cfdm.CF()
        other = "ACDD-1.3"

        for Conventions in (other, ):
            cfdm.write(f, tmpfile0, Conventions=Conventions)
            g = cfdm.read(tmpfile0)[0]
            self.assertEqual(
                g.get_property("Conventions"),
                " ".join([version, other]),
                f"{g.get_property('Conventions')!r}, {Conventions!r}",
            )

        for Conventions in (
                version,
                "",
                " ",
                ",",
                ", ",
        ):
            Conventions = version
            cfdm.write(f, tmpfile0, Conventions=Conventions)
            g = cfdm.read(tmpfile0)[0]
            self.assertEqual(
                g.get_property("Conventions"),
                version,
                f"{g.get_property('Conventions')!r}, {Conventions!r}",
            )

        for Conventions in (
            [version],
            [version, other],
        ):
            cfdm.write(f, tmpfile0, Conventions=Conventions)
            g = cfdm.read(tmpfile0)[0]
            self.assertEqual(
                g.get_property("Conventions"),
                " ".join(Conventions),
                f"{g.get_property('Conventions')!r}, {Conventions!r}",
            )

        for Conventions in ([other, version], ):
            cfdm.write(f, tmpfile0, Conventions=Conventions)
            g = cfdm.read(tmpfile0)[0]
            self.assertEqual(
                g.get_property("Conventions"),
                " ".join([version, other]),
                f"{g.get_property('Conventions')!r}, {Conventions!r}",
            )
Exemple #24
0
    def test_read_write_Conventions(self):
        if self.test_only and inspect.stack()[0][3] not in self.test_only:
            return

        f = cfdm.read(self.filename)[0]

        version = 'CF-' + cfdm.CF()
        other = 'ACDD-1.3'

        for Conventions in (other, ):
            cfdm.write(f, tmpfile0, Conventions=Conventions)
            g = cfdm.read(tmpfile0)[0]
            self.assertEqual(
                g.get_property('Conventions'), ' '.join([version, other]),
                "{!r}, {!r}".format(g.get_property('Conventions'),
                                    Conventions))

        for Conventions in (
                version,
                '',
                ' ',
                ',',
                ', ',
        ):
            Conventions = version
            cfdm.write(f, tmpfile0, Conventions=Conventions)
            g = cfdm.read(tmpfile0)[0]
            self.assertEqual(
                g.get_property('Conventions'), version,
                "{!r}, {!r}".format(g.get_property('Conventions'),
                                    Conventions))

        for Conventions in (
            [version],
            [version, other],
        ):
            cfdm.write(f, tmpfile0, Conventions=Conventions)
            g = cfdm.read(tmpfile0)[0]
            self.assertEqual(
                g.get_property('Conventions'), ' '.join(Conventions),
                "{!r}, {!r}".format(g.get_property('Conventions'),
                                    Conventions))

        for Conventions in ([other, version], ):
            cfdm.write(f, tmpfile0, Conventions=Conventions)
            g = cfdm.read(tmpfile0)[0]
            self.assertEqual(
                g.get_property('Conventions'), ' '.join([version, other]),
                "{!r}, {!r}".format(g.get_property('Conventions'),
                                    Conventions))
Exemple #25
0
 def test_read_write_netCDF4_compress_shuffle(self):
     """TODO DOCS."""
     f = cfdm.read(self.filename)[0]
     for fmt in self.netcdf4_fmts:
         for shuffle in (True,):
             for compress in (4,):  # range(10):
                 cfdm.write(
                     f, tmpfile, fmt=fmt, compress=compress, shuffle=shuffle
                 )
                 g = cfdm.read(tmpfile)[0]
                 self.assertTrue(
                     f.equals(g, verbose=3),
                     "Bad read/write with lossless compression: "
                     f"{fmt}, {compress}, {shuffle}",
                 )
Exemple #26
0
    def test_DSG_indexed_contiguous(self):
        """TODO DOCS."""
        f = self.ic.copy()

        self.assertEqual(len(f), 2)

        # Select the specific humidity field
        q = [
            g for g in f
            if g.get_property("standard_name") == "specific_humidity"
        ][0]

        qa = q.data.array

        message = (repr(qa - self.b) + "\n" + repr(qa[2, 0]) + "\n" +
                   repr(self.b[2, 0]))
        self.assertTrue(q._equals(qa, self.b), message)

        cfdm.write(f, tempfile)
        g = cfdm.read(tempfile)

        self.assertEqual(len(g), len(f))

        for i in range(len(f)):
            self.assertTrue(g[i].equals(f[i], verbose=3))
Exemple #27
0
    def test_read_write_netCDF4_compress_shuffle(self):
        if self.test_only and inspect.stack()[0][3] not in self.test_only:
            return

        f = cfdm.read(self.filename)[0]
        for fmt in ('NETCDF4',
                    'NETCDF4_CLASSIC'):
            for shuffle in (True, False):
                for compress in range(10):
                    cfdm.write(f, tmpfile, fmt=fmt,
                               compress=compress,
                               shuffle=shuffle)
                    g = cfdm.read(tmpfile)[0]
                    self.assertTrue(
                        f.equals(g, verbose=True),
                        'Bad read/write with lossless compression: {}, {}, {}'.format(fmt, compress, shuffle))
Exemple #28
0
    def test_GATHERING(self):
        """Test reading and writing of a field with a gathered array."""
        f = cfdm.read(self.gathered, verbose=False)

        self.assertEqual(len(f), 3)

        for g in f:
            if g.get_property("long_name") == "temp3":
                break

        cfdm.write(f, tempfile, verbose=False)
        g = cfdm.read(tempfile, verbose=False)
        self.assertEqual(len(g), len(f))

        for i in range(len(f)):
            self.assertTrue(g[i].equals(f[i], verbose=3))
Exemple #29
0
    def test_DSG_indexed_contiguous(self):
        if self.test_only and inspect.stack()[0][3] not in self.test_only:
            return

        f = self.ic.copy()

        self.assertEqual(len(f), 2)

        # Select the specific humidity field
        q = [g for g in f
             if g.get_property('standard_name') == 'specific_humidity'][0]

        qa = q.data.array

        message = (repr(qa-self.b) + '\n' + repr(qa[2, 0]) + '\n' +
                   repr(self.b[2, 0]))
        self.assertTrue(q._equals(qa, self.b), message)

        cfdm.write(f, tempfile)
        g = cfdm.read(tempfile)

        self.assertEqual(len(g), len(f))

        for i in range(len(f)):
            self.assertTrue(g[i].equals(f[i], verbose=3))
Exemple #30
0
    def test_example_field(self):
        """Test the `example_field` function."""
        top = 8

        example_fields = cfdm.example_fields()
        self.assertEqual(len(example_fields), top)

        for f in example_fields:
            _ = f.data.array

            self.assertIsInstance(f.dump(display=False), str)

            cfdm.write(f, temp_file)
            g = cfdm.read(temp_file, verbose=1)

            self.assertEqual(len(g), 1)
            self.assertTrue(f.equals(g[0], verbose=3))

        with self.assertRaises(Exception):
            cfdm.example_field(top + 1)

        with self.assertRaises(ValueError):
            cfdm.example_field(1, 2)

        with self.assertRaises(TypeError):
            cfdm.example_field(1, 2, 3)

        self.assertEqual(len(cfdm.example_fields(0)), 1)
        self.assertEqual(len(cfdm.example_fields(0, 2)), 2)
        self.assertEqual(len(cfdm.example_fields(0, 2, 0)), 3)