Пример #1
0
 def test_get_time_series_for_point_out_of_bounds(self):
     ctx = new_test_service_context()
     actual_result = get_time_series(
         ctx, 'demo', 'conc_tsm',
         dict(type="Point", coordinates=[-150.0, -30.0]))
     expected_result = []
     self.assertEqual(expected_result, actual_result)
Пример #2
0
 def test_get_time_series_for_polygon_only_valids(self):
     ctx = new_test_service_context()
     actual_result = get_time_series(ctx,
                                     'demo',
                                     'conc_tsm',
                                     dict(type="Polygon",
                                          coordinates=[[[1.,
                                                         51.], [2., 51.],
                                                        [2.,
                                                         52.], [1., 52.],
                                                        [1., 51.]]]),
                                     agg_methods=['mean', 'count'],
                                     max_valids=-1)
     expected_result = [{
         'count': 122392,
         'count_tot': 159600,
         'mean': 56.12519223634024,
         'time': '2017-01-16T10:09:22Z'
     }, {
         'count': 132066,
         'count_tot': 159600,
         'mean': 49.70755256053988,
         'time': '2017-01-28T09:58:11Z'
     }]
     self.assertAlmostEqualDeep(expected_result, actual_result)
Пример #3
0
 def test_get_time_series_for_point_collection(self):
     ctx = new_test_service_context()
     actual_result = get_time_series(
         ctx,
         'demo',
         'conc_tsm',
         dict(type="GeometryCollection",
              geometries=[dict(type="Point", coordinates=[2.1, 51.4])]),
         agg_methods=['mean', 'count'],
         start_date=np.datetime64('2017-01-15'),
         end_date=np.datetime64('2017-01-29'))
     expected_result = [[{
         'mean': 3.534773588180542,
         'time': '2017-01-16T10:09:22Z'
     }, {
         'mean': None,
         'time': '2017-01-25T09:35:51Z'
     }, {
         'mean': None,
         'time': '2017-01-26T10:50:17Z'
     }, {
         'mean': 20.12085723876953,
         'time': '2017-01-28T09:58:11Z'
     }]]
     self.assertAlmostEqualDeep(expected_result, actual_result)
Пример #4
0
    def test_get_time_series_for_polygon_collection(self):
        ctx = new_test_service_context()
        actual_result = get_time_series(ctx,
                                        'demo', 'conc_tsm',
                                        dict(type="GeometryCollection",
                                             geometries=[dict(type="Polygon", coordinates=[[
                                                 [1., 51.], [2., 51.], [2., 52.], [1., 52.],
                                                 [1., 51.]
                                             ]])]),
                                        agg_methods=['mean', 'count'])
        expected_result = [[{'count': 122392,
                             'count_tot': 159600,
                             'mean': 56.12519223634024,
                             'time': '2017-01-16T10:09:22Z'},
                            {'count': 0,
                             'count_tot': 159600,
                             'mean': None,
                             'time': '2017-01-25T09:35:51Z'},
                            {'count': 0,
                             'count_tot': 159600,
                             'mean': None,
                             'time': '2017-01-26T10:50:17Z'},
                            {'count': 132066,
                             'count_tot': 159600,
                             'mean': 49.70755256053988,
                             'time': '2017-01-28T09:58:11Z'},
                            {'count': 0,
                             'count_tot': 159600,
                             'mean': None,
                             'time': '2017-01-30T10:46:34Z'}]]

        self.assertAlmostEqualDeep(expected_result, actual_result)
Пример #5
0
    def test_get_time_series_for_polygon_with_all_agg_methods(self):
        ctx = new_test_service_context()
        actual_result = get_time_series(
            ctx,
            'demo',
            'conc_tsm',
            dict(type="Polygon",
                 coordinates=[[[1., 51.], [2., 51.], [2., 52.], [1., 52.],
                               [1., 51.]]]),
            agg_methods=['mean', 'median', 'std', 'min', 'max', 'count'])

        expected_result = [{
            'count': 122392,
            'count_tot': 159600,
            'max': 166.57278442382812,
            'mean': 56.12519223634024,
            'median': 48.009796142578125,
            'min': 0.02251400426030159,
            'std': 40.78859862094861,
            'time': '2017-01-16T10:09:22Z'
        }, {
            'count': 0,
            'count_tot': 159600,
            'max': None,
            'mean': None,
            'median': None,
            'min': None,
            'std': None,
            'time': '2017-01-25T09:35:51Z'
        }, {
            'count': 0,
            'count_tot': 159600,
            'max': None,
            'mean': None,
            'median': None,
            'min': None,
            'std': None,
            'time': '2017-01-26T10:50:17Z'
        }, {
            'count': 132066,
            'count_tot': 159600,
            'max': 158.7908477783203,
            'mean': 49.70755256053988,
            'median': 39.326446533203125,
            'min': 0.02607600949704647,
            'std': 34.98868194514787,
            'time': '2017-01-28T09:58:11Z'
        }, {
            'count': 0,
            'count_tot': 159600,
            'max': None,
            'mean': None,
            'median': None,
            'min': None,
            'std': None,
            'time': '2017-01-30T10:46:34Z'
        }]

        self.assertAlmostEqualDeep(expected_result, actual_result)
Пример #6
0
 def test_get_time_series_for_point_only_valids(self):
     ctx = new_test_service_context()
     actual_result = get_time_series(ctx, 'demo', 'conc_tsm',
                                     dict(type="Point", coordinates=[2.1, 51.4]),
                                     start_date=np.datetime64('2017-01-15'),
                                     end_date=np.datetime64('2017-01-29'),
                                     max_valids=-1)
     expected_result = [{'mean': 3.534773588180542, 'time': '2017-01-16T10:09:22Z'},
                        {'mean': 20.12085723876953, 'time': '2017-01-28T09:58:11Z'}]
     self.assertAlmostEqualDeep(expected_result, actual_result)
Пример #7
0
 def test_get_time_series_for_point_one_valid(self):
     ctx = new_test_service_context()
     actual_result = get_time_series(ctx, 'demo', 'conc_tsm',
                                     dict(type="Point", coordinates=[2.1, 51.4]),
                                     agg_methods=['mean', 'count'],
                                     start_date=np.datetime64('2017-01-15'),
                                     end_date=np.datetime64('2017-01-29'),
                                     max_valids=1)
     expected_result = [{'mean': 20.12085723876953, 'time': '2017-01-28T09:58:11Z'}]
     self.assertAlmostEqualDeep(expected_result, actual_result)
Пример #8
0
    def test_point_ts_perf(self):
        TEST_CUBE = 'ts_test.zarr'

        if not os.path.isdir(TEST_CUBE):
            from xcube.core.new import new_cube
            cube = new_cube(time_periods=2000, variables=dict(analysed_sst=280.4))
            cube = cube.chunk(dict(time=1, lon=90, lat=90))
            cube.to_zarr(TEST_CUBE)

        ctx = ServiceContext(
            base_dir='.',
            config=dict(
                Datasets=[
                    dict(Identifier='ts_test',
                         FileSystem='file',
                         Path=TEST_CUBE,
                         Format='zarr')
                ]
            ))

        N = 5
        import random
        import time
        time_sum = 0.0
        for i in range(N):
            lon = -180 + 360 * random.random()
            lat = -90 + 180 * random.random()

            t1 = time.perf_counter()
            result = get_time_series(ctx, 'ts_test', 'analysed_sst', dict(type='Point', coordinates=[lon, lat]))
            t2 = time.perf_counter()

            self.assertIsInstance(result, list)
            self.assertEqual(2000, len(result))

            time_delta = t2 - t1
            time_sum += time_delta
            print(f'test {i + 1} took {time_delta} seconds')

        print(f'all tests took {time_sum / N} seconds in average')