Ejemplo n.º 1
0
 def test_get_images(self):
     provider = SnowWaterEquivalentProvider(CubeConfig(), dir=SOURCE_DIR)
     provider.prepare()
     images = provider.compute_variable_images(datetime(2010, 1, 1),
                                               datetime(2010, 12, 31))
     self.assertIsNotNone(images)
     self.assertTrue('snow_water_equivalent' in images)
     image = images['snow_water_equivalent']
     self.assertEqual((720, 1440), image.shape)
     self.assertEqual(0, np.isnan(image).sum())
Ejemplo n.º 2
0
 def test_get_high_res_images(self):
     provider = MPIBGCProvider(
         CubeConfig(grid_width=4320, grid_height=2160, spatial_res=1 / 12, end_time=datetime(2001, 12, 31, 23, 0)),
         dir=SOURCE_DIR + "/NEE", var="NEE")
     provider.prepare()
     images = provider.compute_variable_images(datetime(2001, 1, 1), datetime(2001, 1, 9))
     self.assertIsNotNone(images)
     self.assertTrue('net_ecosystem_exchange' in images)
     image = images['net_ecosystem_exchange']
     self.assertEqual((2160, 4320), image.shape)
Ejemplo n.º 3
0
 def test_get_high_res_images(self):
     provider = GleamProvider(
         CubeConfig(grid_width=4320, grid_height=2160, spatial_res=1 / 12, end_time=datetime(2001, 12, 31, 23, 0)),
         dir=SOURCE_DIR, var="S")
     provider.prepare()
     images = provider.compute_variable_images(datetime(2001, 1, 1), datetime(2001, 1, 9))
     self.assertIsNotNone(images)
     self.assertTrue('evaporative_stress' in images)
     image = images['evaporative_stress']
     self.assertEqual((2160, 4320), image.shape)
Ejemplo n.º 4
0
    def test_get_images_outside_time_range(self):
        provider = WaterMaskProvider(CubeConfig(end_time=datetime(2002, 1, 1)), dir=SOURCE_DIR)
        provider.prepare()
        images = provider.compute_variable_images(datetime(2016, 7, 27), datetime(2016, 8, 4))

        self.assertIsNotNone(images)

        self.assertTrue('water_mask' in images)
        image = images['water_mask']
        self.assertEqual((720, 1440), image.shape)
Ejemplo n.º 5
0
    def test_get_high_res_images(self):
        provider = WaterMaskProvider(CubeConfig(grid_width=4320, grid_height=2160, spatial_res=1 / 12,
                                                end_time=datetime(2003, 1, 1)), dir=SOURCE_DIR)
        provider.prepare()
        images = provider.compute_variable_images(datetime(2002, 7, 27), datetime(2002, 8, 4))

        self.assertIsNotNone(images)

        self.assertTrue('water_mask' in images)
        image = images['water_mask']
        self.assertEqual((2160, 4320), image.shape)
Ejemplo n.º 6
0
    def test_get_images(self):
        provider = CountryMaskProvider(
            CubeConfig(end_time=datetime(2003, 1, 1)), dir=SOURCE_DIR)
        provider.prepare()
        images = provider.compute_variable_images(datetime(2002, 7, 27),
                                                  datetime(2002, 8, 4))

        self.assertIsNotNone(images)

        self.assertTrue('country_mask' in images)
        image = images['country_mask']
        self.assertEqual((720, 1440), image.shape)
Ejemplo n.º 7
0
 def test_get_high_res_images(self):
     provider = SoilMoistureProvider(CubeConfig(grid_width=4320,
                                                grid_height=2160,
                                                spatial_res=1 / 12),
                                     dir=SOURCE_DIR)
     provider.prepare()
     images = provider.compute_variable_images(datetime(1996, 1, 1),
                                               datetime(1996, 1, 9))
     self.assertIsNotNone(images)
     self.assertTrue('soil_moisture' in images)
     image = images['soil_moisture']
     self.assertEqual((2160, 4320), image.shape)
Ejemplo n.º 8
0
 def test_get_images(self):
     provider = AirTemperatureProvider(
         CubeConfig(end_time=datetime(2001, 6, 1, 0, 0)),
         dir=SOURCE_DIR,
         resampling_order="space_first")
     provider.prepare()
     images = provider.compute_variable_images(datetime(2001, 1, 1),
                                               datetime(2001, 1, 9))
     self.assertIsNotNone(images)
     self.assertTrue('air_temperature_2m' in images)
     image = images['air_temperature_2m']
     self.assertEqual((720, 1440), image.shape)
Ejemplo n.º 9
0
 def test_get_high_res_images(self):
     provider = GlobVapourProvider(CubeConfig(grid_width=4320,
                                              grid_height=2160,
                                              spatial_res=1 / 12),
                                   dir=SOURCE_DIR)
     provider.prepare()
     images = provider.compute_variable_images(datetime(2007, 1, 1),
                                               datetime(2007, 1, 9))
     self.assertIsNotNone(images)
     self.assertTrue('water_vapour' in images)
     image = images['water_vapour']
     self.assertEqual((2160, 4320), image.shape)
Ejemplo n.º 10
0
    def test_get_images(self):
        provider = MyCubeSourceProvider(
            CubeConfig(), [(datetime(2010, 1, 1), datetime(2010, 1, 5)),
                           (datetime(2010, 1, 5), datetime(2010, 1, 9)),
                           (datetime(2010, 1, 9), datetime(2010, 1, 13))])

        provider.prepare()

        temporal_coverage = provider.temporal_coverage
        self.assertEqual((datetime(2010, 1, 1), datetime(2010, 1, 13)),
                         temporal_coverage)

        # Requested range is exactly within all source ranges
        provider.compute_variable_images(datetime(2010, 1, 1),
                                         datetime(2010, 1, 13))
        self.assertEqual([{0: 1.0, 1: 1.0, 2: 1.0}], provider.trace)

        # Requested range overlaps all source ranges
        provider.trace = []
        provider.compute_variable_images(datetime(2009, 12, 30),
                                         datetime(2010, 1, 14))
        self.assertEqual([{0: 1.0, 1: 1.0, 2: 1.0}], provider.trace)

        # Requested range is equal to first source range
        provider.trace = []
        provider.compute_variable_images(datetime(2010, 1, 1),
                                         datetime(2010, 1, 5))
        self.assertEqual([{0: 1.0}], provider.trace)

        # Requested range is within first source range and within last source range
        provider.trace = []
        provider.compute_variable_images(datetime(2010, 1, 2),
                                         datetime(2010, 1, 10))
        self.assertEqual([{0: 0.375, 1: 1.0, 2: 0.125}], provider.trace)

        # Requested range is sub-range of first source range
        provider.trace = []
        provider.compute_variable_images(datetime(2010, 1, 1, 12),
                                         datetime(2010, 1, 4, 12))
        self.assertEqual([{0: 1.0}], provider.trace)

        # Requested range is below first source range
        provider.trace = []
        provider.compute_variable_images(datetime(2009, 1, 2),
                                         datetime(2009, 1, 10))
        self.assertEqual([], provider.trace)

        # Requested range is after last source range
        provider.trace = []
        provider.compute_variable_images(datetime(2012, 1, 2),
                                         datetime(2012, 1, 10))
        self.assertEqual([], provider.trace)
 def test_get_images(self):
     provider = LandSurfTemperatureProvider(CubeConfig(
         start_time=datetime(2002, 6, 1, 0, 0),
         end_time=datetime(2002, 7, 1, 0, 0)),
                                            dir=SOURCE_DIR,
                                            resampling_order="space_first")
     provider.prepare()
     images = provider.compute_variable_images(datetime(2002, 6, 1),
                                               datetime(2002, 6, 10))
     self.assertIsNotNone(images)
     self.assertTrue('land_surface_temperature' in images)
     image = images['land_surface_temperature']
     self.assertEqual((720, 1440), image.shape)
Ejemplo n.º 12
0
 def test_get_high_res_images(self):
     provider = SnowWaterEquivalentProvider(CubeConfig(grid_width=4320,
                                                       grid_height=2160,
                                                       spatial_res=1 / 12),
                                            dir=SOURCE_DIR)
     provider.prepare()
     images = provider.compute_variable_images(datetime(2010, 1, 1),
                                               datetime(2010, 12, 31))
     self.assertIsNotNone(images)
     self.assertTrue('snow_water_equivalent' in images)
     image = images['snow_water_equivalent']
     self.assertEqual((2160, 4320), image.shape)
     self.assertEqual(0, np.isnan(image).sum())
Ejemplo n.º 13
0
    def test_get_images(self):
        provider = AlbedoProvider(CubeConfig(), dir=SOURCE_DIR)
        provider.prepare()
        images = provider.compute_variable_images(datetime(2001, 1, 1),
                                                  datetime(2001, 1, 9))
        self.assertIsNotNone(images)

        self.assertTrue('white_sky_albedo' in images)
        image = images['white_sky_albedo']
        self.assertEqual((720, 1440), image.shape)

        self.assertTrue('black_sky_albedo' in images)
        image = images['black_sky_albedo']
        self.assertEqual((720, 1440), image.shape)
Ejemplo n.º 14
0
 def test_get_high_res_images(self):
     provider = AirTemperatureProvider(CubeConfig(grid_width=4320,
                                                  grid_height=2160,
                                                  spatial_res=1 / 12,
                                                  end_time=datetime(
                                                      2001, 6, 1, 0, 0)),
                                       dir=SOURCE_DIR)
     provider.prepare()
     images = provider.compute_variable_images(datetime(2001, 1, 1),
                                               datetime(2001, 1, 9))
     self.assertIsNotNone(images)
     self.assertTrue('air_temperature_2m' in images)
     image = images['air_temperature_2m']
     self.assertEqual((2160, 4320), image.shape)
Ejemplo n.º 15
0
 def test_source_time_ranges(self):
     provider = MPIBGCProvider(CubeConfig(end_time=datetime(2001, 12, 31, 23, 0)), dir=SOURCE_DIR + "/LE", var="LE")
     provider.prepare()
     source_time_ranges = provider.source_time_ranges
     self.assertEqual(46, len(source_time_ranges))
     self.assert_source_time_ranges(source_time_ranges[1],
                                    datetime(2001, 1, 9, 0, 0),
                                    datetime(2001, 1, 17, 0, 0),
                                    self.get_source_dir_list(SOURCE_DIR) + ['LE', 'LE_2001.nc'],
                                    1)
     self.assert_source_time_ranges(source_time_ranges[45],
                                    datetime(2001, 12, 27, 0, 0),
                                    datetime(2002, 1, 4, 0, 0),
                                    self.get_source_dir_list(SOURCE_DIR) + ['LE', 'LE_2001.nc'],
                                    45)
Ejemplo n.º 16
0
 def test_source_time_ranges(self):
     provider = GleamProvider(CubeConfig(end_time=datetime(2001, 12, 31, 23, 0)), dir=SOURCE_DIR, var="E")
     provider.prepare()
     source_time_ranges = provider.source_time_ranges
     self.assertEqual(365, len(source_time_ranges))
     self.assert_source_time_ranges(source_time_ranges[3],
                                    datetime(2001, 1, 4, 0, 0),
                                    datetime(2001, 1, 5, 0, 0),
                                    self.get_source_dir_list(SOURCE_DIR) + ['2001', 'E_2001_GLEAM_v3a_BETA.nc'],
                                    3)
     self.assert_source_time_ranges(source_time_ranges[364],
                                    datetime(2001, 12, 31, 0, 0),
                                    datetime(2002, 1, 1, 0, 0),
                                    self.get_source_dir_list(SOURCE_DIR) + ['2001', 'E_2001_GLEAM_v3a_BETA.nc'],
                                    364)
 def test_get_high_res_images(self):
     provider = LandSurfTemperatureProvider(CubeConfig(
         grid_width=4320,
         grid_height=2160,
         spatial_res=1 / 12,
         start_time=datetime(2002, 6, 1, 0, 0),
         end_time=datetime(2002, 7, 1, 0, 0)),
                                            dir=SOURCE_DIR,
                                            resampling_order="space_first")
     provider.prepare()
     images = provider.compute_variable_images(datetime(2002, 6, 1),
                                               datetime(2002, 6, 10))
     self.assertIsNotNone(images)
     self.assertTrue('land_surface_temperature' in images)
     image = images['land_surface_temperature']
     self.assertEqual((2160, 4320), image.shape)
Ejemplo n.º 18
0
 def setUpClass(cls):
     _del_cube_dir()
     cube = Cube.create(
         CUBE_DIR,
         CubeConfig(spatial_res=1.0,
                    start_time=datetime(2005, 1, 1),
                    end_time=datetime(2005, 3, 1),
                    grid_width=360,
                    grid_height=180,
                    compression=True))
     try:
         cube.update(TestCubeSourceProvider(cube.config, var='a_var'))
         cube.update(TestCubeSourceProvider(cube.config, var='b_var'))
         cube.update(TestCubeSourceProvider(cube.config, var='c_var'))
     finally:
         cube.close()
Ejemplo n.º 19
0
    def test_get_images(self):
        provider = MyStaticCubeSourceProvider(CubeConfig())

        provider.prepare()
        im1 = provider.compute_variable_images(datetime(2010, 1, 1),
                                               datetime(2010, 1, 10))
        im2 = provider.compute_variable_images(datetime(2010, 1, 10),
                                               datetime(2010, 1, 20))
        im3 = provider.compute_variable_images(datetime(2010, 1, 20),
                                               datetime(2010, 1, 30))
        self.assertIsNotNone(im1)
        self.assertEqual(len(im1), 1)
        self.assertIn('WaterMask', im1)
        self.assertEqual(im1['WaterMask'].shape, (720, 1440))
        self.assertEqual(im1['WaterMask'].dtype, numpy.int32)
        self.assertIsNone(im2)
        self.assertIsNone(im3)
Ejemplo n.º 20
0
 def test_source_time_ranges(self):
     provider = CEmissionsProvider(CubeConfig(), dir=SOURCE_DIR)
     provider.prepare()
     source_time_ranges = provider.source_time_ranges
     self.assertEqual(120, len(source_time_ranges))
     self.assert_source_time_ranges(
         source_time_ranges[0], datetime(2001, 1, 1, 0, 0),
         datetime(2001, 2, 1, 0, 0),
         self.get_source_dir_list(SOURCE_DIR) + ['fire_C_Emissions.nc'], 0)
     self.assert_source_time_ranges(
         source_time_ranges[11], datetime(2001, 12, 1, 0, 0),
         datetime(2002, 1, 1, 0, 0),
         self.get_source_dir_list(SOURCE_DIR) + ['fire_C_Emissions.nc'], 11)
     self.assert_source_time_ranges(
         source_time_ranges[119], datetime(2010, 12, 1, 0, 0),
         datetime(2011, 1, 1, 0, 0),
         self.get_source_dir_list(SOURCE_DIR) + ['fire_C_Emissions.nc'],
         119)
Ejemplo n.º 21
0
 def test_source_time_ranges(self):
     provider = AirTemperatureProvider(
         CubeConfig(end_time=datetime(2001, 12, 31, 23, 0)), dir=SOURCE_DIR)
     provider.prepare()
     source_time_ranges = provider.source_time_ranges
     self.assertEqual(730, len(source_time_ranges))
     self.assert_source_time_ranges(
         source_time_ranges[0], datetime(2001, 1, 1, 0, 0),
         datetime(2001, 1, 1, 12, 0),
         self.get_source_dir_list(SOURCE_DIR) + ['t2m_2001_01.nc'], 0)
     self.assert_source_time_ranges(
         source_time_ranges[6], datetime(2001, 1, 4, 0, 0),
         datetime(2001, 1, 4, 12, 0),
         self.get_source_dir_list(SOURCE_DIR) + ['t2m_2001_01.nc'], 6)
     self.assert_source_time_ranges(
         source_time_ranges[729], datetime(2001, 12, 31, 12, 0),
         datetime(2002, 1, 1, 0, 0),
         self.get_source_dir_list(SOURCE_DIR) + ['t2m_2001_12.nc'], 61)
Ejemplo n.º 22
0
 def test_source_time_ranges(self):
     provider = AlbedoProvider(CubeConfig(), dir=SOURCE_DIR)
     provider.prepare()
     source_time_ranges = provider.source_time_ranges
     self.assertEqual(461, len(source_time_ranges))
     self.assert_source_time_ranges(
         source_time_ranges[0], datetime(2001, 1, 1, 0),
         datetime(2001, 1, 9, 0),
         self.get_source_dir_list(SOURCE_DIR) +
         ['GlobAlbedo.merge.albedo.05.2001001.nc'], 0)
     self.assert_source_time_ranges(
         source_time_ranges[1], datetime(2001, 1, 9, 0),
         datetime(2001, 1, 17, 0),
         self.get_source_dir_list(SOURCE_DIR) +
         ['GlobAlbedo.merge.albedo.05.2001009.nc'], 0)
     self.assert_source_time_ranges(
         source_time_ranges[10], datetime(2001, 3, 22, 0),
         datetime(2001, 3, 30, 0),
         self.get_source_dir_list(SOURCE_DIR) +
         ['GlobAlbedo.merge.albedo.05.2001081.nc'], 0)
Ejemplo n.º 23
0
 def test_source_time_ranges(self):
     provider = PrecipProvider(CubeConfig(), dir=SOURCE_DIR)
     provider.prepare()
     source_time_ranges = provider.source_time_ranges
     self.assertEqual(13149, len(source_time_ranges))
     self.assert_source_time_ranges(source_time_ranges[0],
                                    datetime(1979, 1, 1, 0, 0, 0, 33),
                                    datetime(1979, 1, 2, 0, 0, 0, 33),
                                    self.get_source_dir_list(SOURCE_DIR) + ['Precip.V1.720.360.1979.nc.gz'],
                                    0)
     self.assert_source_time_ranges(source_time_ranges[6],
                                    datetime(1979, 1, 7, 0, 0, 0, 33),
                                    datetime(1979, 1, 8, 0, 0, 0, 33),
                                    self.get_source_dir_list(SOURCE_DIR) + ['Precip.V1.720.360.1979.nc.gz'],
                                    6)
     self.assert_source_time_ranges(source_time_ranges[13148],
                                    datetime(2014, 12, 31, 0, 0, 0, 33),
                                    datetime(2015, 1, 1, 0, 0, 0, 33),
                                    self.get_source_dir_list(SOURCE_DIR) + ['Precip.RT.720.360.2014.nc.gz'],
                                    364)
Ejemplo n.º 24
0
 def test_source_time_ranges(self):
     provider = SoilMoistureProvider(CubeConfig(), dir=SOURCE_DIR)
     provider.prepare()
     source_time_ranges = provider.source_time_ranges
     self.assertEqual(12784, len(source_time_ranges))
     self.assert_source_time_ranges(
         source_time_ranges[0], datetime(1979, 1, 1, 0, 0, 0, 33),
         datetime(1979, 1, 2, 0, 0, 0, 33),
         self.get_source_dir_list(SOURCE_DIR) +
         ['SoilMoisture.ESACCI-L3S.1979.v2_1.nc.gz'], 0)
     self.assert_source_time_ranges(
         source_time_ranges[6], datetime(1979, 1, 7, 0, 0, 0, 33),
         datetime(1979, 1, 8, 0, 0, 0, 33),
         self.get_source_dir_list(SOURCE_DIR) +
         ['SoilMoisture.ESACCI-L3S.1979.v2_1.nc.gz'], 6)
     self.assert_source_time_ranges(
         source_time_ranges[12783], datetime(2013, 12, 31, 0, 0, 0, 33),
         datetime(2014, 1, 31, 0, 0, 0, 33),
         self.get_source_dir_list(SOURCE_DIR) +
         ['SoilMoisture.ESACCI-L3S.2013.v2_1.nc.gz'], 364)
Ejemplo n.º 25
0
 def test_source_time_ranges(self):
     provider = GlobVapourProvider(CubeConfig(), dir=SOURCE_DIR)
     provider.prepare()
     source_time_ranges = provider.source_time_ranges
     self.assertEqual(156, len(source_time_ranges))
     self.assert_source_time_ranges(
         source_time_ranges[0], datetime(1996, 1, 1, 0, 0),
         datetime(1996, 2, 1, 0, 0),
         self.get_source_dir_list(SOURCE_DIR) +
         ['1996', 'GV_GOMExxxxxxx_MM_19960101_E_3.nc'], 0)
     self.assert_source_time_ranges(
         source_time_ranges[125], datetime(2006, 6, 1, 0, 0),
         datetime(2006, 7, 1, 0, 0),
         self.get_source_dir_list(SOURCE_DIR) + [
             '2006',
             'SCIAxxxxxxx_L3_MM_ENV_20060630000000_E_20120214101955.nc.gz'
         ], 0)
     self.assert_source_time_ranges(
         source_time_ranges[155], datetime(2008, 12, 1, 0, 0),
         datetime(2009, 1, 1, 0, 0),
         self.get_source_dir_list(SOURCE_DIR) +
         ['2008', 'GV_GOME2xxxxxx_MM_20081201_E_3.nc'], 0)
Ejemplo n.º 26
0
 def test_source_time_ranges(self):
     provider = OzoneProvider(CubeConfig(), dir=SOURCE_DIR)
     provider.prepare()
     source_time_ranges = provider.source_time_ranges
     self.assertEqual(185, len(source_time_ranges))
     self.assert_source_time_ranges(source_time_ranges[0],
                                    datetime(1996, 3, 10, 0, 0),
                                    datetime(1996, 3, 31, 0, 0),
                                    self.get_source_dir_list(SOURCE_DIR) + [
                                        'ESACCI-OZONE-L3S-TC-MERGED-DLR_1M-19960310-fv0100.nc'],
                                    None)
     self.assert_source_time_ranges(source_time_ranges[6],
                                    datetime(1996, 9, 1, 0, 0),
                                    datetime(1996, 9, 30, 0, 0),
                                    self.get_source_dir_list(SOURCE_DIR) + [
                                        'ESACCI-OZONE-L3S-TC-MERGED-DLR_1M-19960901-fv0100.nc'],
                                    None)
     self.assert_source_time_ranges(source_time_ranges[184],
                                    datetime(2011, 6, 1, 0, 0),
                                    datetime(2011, 6, 30, 0, 0),
                                    self.get_source_dir_list(SOURCE_DIR) + [
                                        'ESACCI-OZONE-L3S-TC-MERGED-DLR_1M-20110601-fv0100.nc'],
                                    None)
Ejemplo n.º 27
0
 def test_source_time_ranges(self):
     provider = SnowWaterEquivalentProvider(CubeConfig(), dir=SOURCE_DIR)
     provider.prepare()
     source_time_ranges = provider.source_time_ranges
     self.assertEqual(12054, len(source_time_ranges))
     self.assert_source_time_ranges(
         source_time_ranges[0], datetime(1980, 1, 1, 0, 0),
         datetime(1980, 1, 2, 0, 0),
         self.get_source_dir_list(SOURCE_DIR) + ['SWE.1440.720.1980.nc'], 0)
     self.assert_source_time_ranges(
         source_time_ranges[1000], datetime(1982, 9, 27, 0, 0),
         datetime(1982, 9, 28, 0, 0),
         self.get_source_dir_list(SOURCE_DIR) + ['SWE.1440.720.1982.nc'],
         269)
     self.assert_source_time_ranges(
         source_time_ranges[5000], datetime(1993, 9, 9, 0, 0),
         datetime(1993, 9, 10, 0, 0),
         self.get_source_dir_list(SOURCE_DIR) + ['SWE.1440.720.1993.nc'],
         251)
     self.assert_source_time_ranges(
         source_time_ranges[12053], datetime(2012, 12, 31, 0, 0),
         datetime(2013, 1, 1, 0, 0),
         self.get_source_dir_list(SOURCE_DIR) + ['SWE.1440.720.2012.nc'],
         365)
Ejemplo n.º 28
0
 def test_temporal_coverage(self):
     provider = WaterMaskProvider(CubeConfig(end_time=datetime(2003, 1, 1)), dir=SOURCE_DIR)
     provider.prepare()
     self.assertEqual((datetime(2001, 1, 1, 0, 0), datetime(2003, 1, 1, 0, 0)),
                      provider.temporal_coverage)
Ejemplo n.º 29
0
 def test_temporal_coverage(self):
     provider = CEmissionsProvider(CubeConfig(), dir=SOURCE_DIR)
     provider.prepare()
     self.assertEqual(
         (datetime(2001, 1, 1, 0, 0), datetime(2011, 1, 1, 0, 0)),
         provider.temporal_coverage)
Ejemplo n.º 30
0
    def test_update(self):
        cube = Cube.create(CUBE_DIR, CubeConfig())
        self.assertTrue(os.path.exists(CUBE_DIR))
        self.assertTrue(os.path.exists(CUBE_DIR + '/CHANGELOG'))

        provider = CubeSourceProviderMock(cube.config,
                                          start_time=datetime(2001, 1, 1),
                                          end_time=datetime(2001, 2, 1))
        cube.update(provider)

        self.assertEqual(
            [(datetime(2001, 1, 1, 0, 0), datetime(2001, 1, 9, 0, 0)),
             (datetime(2001, 1, 9, 0, 0), datetime(2001, 1, 17, 0, 0)),
             (datetime(2001, 1, 17, 0, 0), datetime(2001, 1, 25, 0, 0)),
             (datetime(2001, 1, 25, 0, 0), datetime(2001, 2, 2, 0, 0))],
            provider.trace)

        self.assertTrue(os.path.exists(CUBE_DIR + "/cube.config"))
        self.assertTrue(os.path.exists(CUBE_DIR + "/data/LAI/2001_LAI.nc"))
        self.assertTrue(os.path.exists(CUBE_DIR + "/data/FAPAR/2001_FAPAR.nc"))

        cube.close()

        with self.assertRaises(IOError):
            cube.update(provider)

        cube2 = Cube.open(CUBE_DIR)
        self.assertEqual(cube.config.spatial_res, cube2.config.spatial_res)
        self.assertEqual(cube.config.temporal_res, cube2.config.temporal_res)
        self.assertEqual(cube.config.file_format, cube2.config.file_format)
        self.assertEqual(cube.config.compression, cube2.config.compression)

        provider = CubeSourceProviderMock(cube2.config,
                                          start_time=datetime(2006, 12, 15),
                                          end_time=datetime(2007, 1, 15))
        cube2.update(provider)
        self.assertEqual(
            [
                (datetime(2006, 12, 11, 0, 0), datetime(2006, 12, 19, 0,
                                                        0)),  # 8 days
                (datetime(2006, 12, 19, 0, 0), datetime(2006, 12, 27, 0,
                                                        0)),  # 8 days
                (datetime(2006, 12, 27, 0, 0), datetime(2007, 1, 1, 0,
                                                        0)),  # 8 days
                (datetime(2007, 1, 1, 0, 0), datetime(2007, 1, 9, 0,
                                                      0)),  # 8 days
                (datetime(2007, 1, 9, 0, 0), datetime(2007, 1, 17, 0, 0))
            ],  # 8 days
            provider.trace)

        self.assertTrue(os.path.exists(CUBE_DIR + "/data/LAI/2006_LAI.nc"))
        self.assertTrue(os.path.exists(CUBE_DIR + "/data/LAI/2007_LAI.nc"))
        self.assertTrue(os.path.exists(CUBE_DIR + "/data/FAPAR/2006_FAPAR.nc"))
        self.assertTrue(os.path.exists(CUBE_DIR + "/data/FAPAR/2007_FAPAR.nc"))
        from xarray import Variable
        try:
            data = cube2.data
            self.assertIsNotNone(data)
            self.assertEqual((2, 11 * 46, 720, 1440), data.shape)
            self.assertEquals(['FAPAR', 'LAI'], data.variable_names)

            lai_var = data.variable('LAI')
            self.assert_cf_conformant_time_info(data, 'LAI')
            self.assert_cf_conformant_geospatial_info(data, 'LAI')
            self.assertIsNotNone(lai_var)
            self.assertIs(lai_var, data['LAI'])
            self.assertIs(lai_var, data[1])
            self.assertIsInstance(lai_var, Variable)
            self.assertIs(data.variable(1), data[1])
            array = lai_var[:, :, :]
            self.assertEqual(array.shape, (138, 720, 1440))
            scalar = lai_var[3, 320, 720]
            self.assertEqual(scalar.values, np.array(0.14, dtype=np.float32))

            fapar_var = data.variable('FAPAR')
            self.assert_cf_conformant_time_info(data, 'FAPAR')
            self.assert_cf_conformant_geospatial_info(data, 'FAPAR')
            self.assertIsNotNone(fapar_var)
            self.assertIs(fapar_var, data['FAPAR'])
            self.assertIs(fapar_var, data[0])
            self.assertIs(data.variable(0), data[0])
            array = fapar_var[:, :, :]
            self.assertEqual(array.shape, (138, 720, 1440))
            scalar = fapar_var[3, 320, 720]
            self.assertEqual(scalar.values, np.array(0.62, dtype=np.float32))

            result = data.get('FAPAR',
                              [datetime(2001, 1, 1),
                               datetime(2001, 2, 1)], [-90, 90], [-180, +180])
            self.assertEqual(len(result), 1)
            self.assertEqual(result[0].shape, (4, 720, 1440))

            result = data.get(['FAPAR', 'LAI'],
                              [datetime(2001, 1, 1),
                               datetime(2001, 2, 1)], [50.0, 60.0],
                              [10.0, 30.0])
            self.assertEqual(2, len(result))
            self.assertEqual(result[0].shape, (4, 40, 80))
            self.assertEqual(result[1].shape, (4, 40, 80))

            result, = data.get(1, datetime(2001, 1, 20), 0, 0)
            self.assertEqual(result.shape, ())
            self.assertEqual(result.values, np.array(0.13, dtype=np.float32))

            result, = data.get(0, datetime(2001, 1, 20), -12.6, 5.9)
            self.assertEqual(result.shape, ())
            self.assertEqual(result, np.array(0.615, dtype=np.float32))

            result = data.get((1, 0), datetime(2001, 1, 20), 53.4, 13.1)
            self.assertEqual(len(result), 2)
            self.assertEqual(result[0].shape, ())
            self.assertEqual(result[1].shape, ())
            self.assertEqual(result[0].values, np.array(0.13,
                                                        dtype=np.float32))
            self.assertEqual(result[1].values, np.array(0.615,
                                                        dtype=np.float32))
        finally:
            cube2.close()