Exemple #1
0
    def test_name2_field(self):
        filepath = tests.get_data_path(('NAME', 'NAMEII_field.txt'))
        name_cubes = iris.load(filepath)
        # Check gribapi version, because we currently have a known load/save
        # problem with gribapi 1v14 (at least).
        gribapi_ver = gribapi.grib_get_api_version()
        gribapi_fully_supported_version = \
            (StrictVersion(gribapi.grib_get_api_version()) <
             StrictVersion('1.13'))
        for i, name_cube in enumerate(name_cubes):
            if not gribapi_fully_supported_version:
                data = name_cube.data
                if np.min(data) == np.max(data):
                    msg = ('NAMEII cube #{}, "{}" has empty data : '
                           'SKIPPING test for this cube, as save/load will '
                           'not currently work with gribabi > 1v12.')
                    warnings.warn(msg.format(i, name_cube.name()))
                    continue

            with self.temp_filename('.grib2') as temp_filename:
                iris.save(name_cube, temp_filename)
                grib_cube = iris.load_cube(temp_filename, callback=name_cb)
                self.check_common(name_cube, grib_cube)
                self.assertCML(
                    grib_cube, tests.get_result_path(
                        ('integration', 'name_grib', 'NAMEII',
                         '{}_{}.cml'.format(i, name_cube.name()))))
Exemple #2
0
    def test_name2_field(self):
        filepath = tests.get_data_path(('NAME', 'NAMEII_field.txt'))
        name_cubes = iris.load(filepath)
        # Check gribapi version, because we currently have a known load/save
        # problem with gribapi 1v14 (at least).
        gribapi_ver = gribapi.grib_get_api_version()
        gribapi_fully_supported_version = \
            (StrictVersion(gribapi.grib_get_api_version()) <
             StrictVersion('1.13'))
        for i, name_cube in enumerate(name_cubes):
            if not gribapi_fully_supported_version:
                data = name_cube.data
                if np.min(data) == np.max(data):
                    msg = ('NAMEII cube #{}, "{}" has empty data : '
                           'SKIPPING test for this cube, as save/load will '
                           'not currently work with gribabi > 1v12.')
                    warnings.warn(msg.format(i, name_cube.name()))
                    continue

            with self.temp_filename('.grib2') as temp_filename:
                iris.save(name_cube, temp_filename)
                grib_cube = iris.load_cube(temp_filename, callback=name_cb)
                self.check_common(name_cube, grib_cube)
                self.assertCML(
                    grib_cube,
                    tests.get_result_path(
                        ('integration', 'name_grib', 'NAMEII',
                         '{}_{}.cml'.format(i, name_cube.name()))))
Exemple #3
0
 def _problem_gribapi_ver(self):
     # The difference we're checking for here arrived in v1.12.0
     try:
         # gribapi v1.9.16 has no __version__ attribute.
         gribapi_ver = gribapi.__version__
     except AttributeError:
         gribapi_ver = gribapi.grib_get_api_version()
     return StrictVersion(gribapi_ver) < StrictVersion('1.12.0')
Exemple #4
0
 def _problem_gribapi_ver(self):
     # The difference we're checking for here arrived in v1.12.0
     try:
         # gribapi v1.9.16 has no __version__ attribute.
         gribapi_ver = gribapi.__version__
     except AttributeError:
         gribapi_ver = gribapi.grib_get_api_version()
     return StrictVersion(gribapi_ver) < StrictVersion('1.12.0')
    def test_load_probability_forecast(self):
        # Test GribWrapper interpretation of PDT 4.9 data.
        # NOTE:
        #   Currently Iris has only partial support for PDT 4.9.
        #   Though it can load the data, key metadata (thresholds) is lost.
        #   At present, we are not testing for this.

        # Make a testing grib message in memory, with gribapi.
        grib_message = gribapi.grib_new_from_samples('GRIB2')
        gribapi.grib_set_long(grib_message, 'productDefinitionTemplateNumber',
                              9)
        gribapi.grib_set_string(grib_message, 'stepRange', '10-55')
        grib_wrapper = iris.fileformats.grib.GribWrapper(grib_message)

        # Define two expected datetimes for _periodEndDateTime as
        # gribapi v1.9.16 mis-calculates this.
        # See https://software.ecmwf.int/wiki/display/GRIB/\
        #     GRIB+API+version+1.9.18+released
        try:
            # gribapi v1.9.16 has no __version__ attribute.
            gribapi_ver = gribapi.__version__
        except AttributeError:
            gribapi_ver = gribapi.grib_get_api_version()

        if StrictVersion(gribapi_ver) < StrictVersion('1.9.18'):
            exp_end_date = datetime.datetime(year=2007,
                                             month=3,
                                             day=25,
                                             hour=12,
                                             minute=0,
                                             second=0)
        else:
            exp_end_date = datetime.datetime(year=2007,
                                             month=3,
                                             day=25,
                                             hour=19,
                                             minute=0,
                                             second=0)

        # Check that it captures the statistics time period info.
        # (And for now, nothing else)
        self.assertEqual(
            grib_wrapper._referenceDateTime,
            datetime.datetime(year=2007,
                              month=3,
                              day=23,
                              hour=12,
                              minute=0,
                              second=0))
        self.assertEqual(
            grib_wrapper._periodStartDateTime,
            datetime.datetime(year=2007,
                              month=3,
                              day=23,
                              hour=22,
                              minute=0,
                              second=0))
        self.assertEqual(grib_wrapper._periodEndDateTime, exp_end_date)
Exemple #6
0
    def test_load_probability_forecast(self):
        # Test GribWrapper interpretation of PDT 4.9 data.
        # NOTE:
        #   Currently iris-grib has only partial support for PDT 4.9.
        #   Though it can load the data, key metadata (thresholds) is lost.
        #   At present, we are not testing for this.

        # Make a testing grib message in memory, with gribapi.
        grib_message = gribapi.grib_new_from_samples('GRIB2')
        gribapi.grib_set_long(grib_message, 'productDefinitionTemplateNumber',
                              9)
        gribapi.grib_set_string(grib_message, 'stepRange', '10-55')
        grib_wrapper = iris.fileformats.grib.GribWrapper(grib_message)

        # Define two expected datetimes for _periodEndDateTime as
        # gribapi v1.9.16 mis-calculates this.
        # See https://software.ecmwf.int/wiki/display/GRIB/\
        #     GRIB+API+version+1.9.18+released
        try:
            # gribapi v1.9.16 has no __version__ attribute.
            gribapi_ver = gribapi.__version__
        except AttributeError:
            gribapi_ver = gribapi.grib_get_api_version()

        if StrictVersion(gribapi_ver) < StrictVersion('1.9.18'):
            exp_end_date = datetime.datetime(year=2007, month=3, day=25,
                                             hour=12, minute=0, second=0)
        else:
            exp_end_date = datetime.datetime(year=2007, month=3, day=25,
                                             hour=19, minute=0, second=0)

        # Check that it captures the statistics time period info.
        # (And for now, nothing else)
        self.assertEqual(
            grib_wrapper._referenceDateTime,
            datetime.datetime(year=2007, month=3, day=23,
                              hour=12, minute=0, second=0)
        )
        self.assertEqual(
            grib_wrapper._periodStartDateTime,
            datetime.datetime(year=2007, month=3, day=23,
                              hour=22, minute=0, second=0)
        )
        self.assertEqual(grib_wrapper._periodEndDateTime, exp_end_date)