From 3c2d11e24a0c05fdd12d585765b348e36db548cd Mon Sep 17 00:00:00 2001 From: marqh Date: Thu, 2 Mar 2017 20:15:35 +0000 Subject: [PATCH 1/7] netcdftime behaviour changes --- lib/iris/plot.py | 2 +- .../tests/integration/plot/test_netcdftime.py | 18 ++++++++++++------ lib/iris/tests/test_pandas.py | 16 ++++++++-------- .../test_FieldCollation.py | 6 +++++- 4 files changed, 26 insertions(+), 16 deletions(-) diff --git a/lib/iris/plot.py b/lib/iris/plot.py index cccd7102c5..de1400dc65 100644 --- a/lib/iris/plot.py +++ b/lib/iris/plot.py @@ -1,4 +1,4 @@ -# (C) British Crown Copyright 2010 - 2016, Met Office +# (C) British Crown Copyright 2010 - 2017, Met Office # # This file is part of Iris. # diff --git a/lib/iris/tests/integration/plot/test_netcdftime.py b/lib/iris/tests/integration/plot/test_netcdftime.py index ca6cf89a38..9d7cf4952f 100644 --- a/lib/iris/tests/integration/plot/test_netcdftime.py +++ b/lib/iris/tests/integration/plot/test_netcdftime.py @@ -1,4 +1,4 @@ -# (C) British Crown Copyright 2016, Met Office +# (C) British Crown Copyright 2016 - 2017, Met Office # # This file is part of Iris. # @@ -26,12 +26,15 @@ # importing anything else import iris.tests as tests +import numpy as np +import netcdftime + +from iris.coords import AuxCoord + from cf_units import Unit if tests.NC_TIME_AXIS_AVAILABLE: from nc_time_axis import CalendarDateTime -import numpy as np -from iris.coords import AuxCoord # Run tests in no graphics mode if matplotlib is not available. if tests.MPL_AVAILABLE: @@ -47,9 +50,12 @@ def test_360_day_calendar(self): calendar = '360_day' time_unit = Unit('days since 1970-01-01 00:00', calendar=calendar) time_coord = AuxCoord(np.arange(n), 'time', units=time_unit) - expected_ydata = np.array([CalendarDateTime(time_unit.num2date(point), - calendar) - for point in time_coord.points]) + times = [time_unit.num2date(point) for point in time_coord.points] + times = [netcdftime.datetime(atime.year, atime.month, atime.day, + atime.hour, atime.minute, atime.second) + for atime in times] + expected_ydata = np.array([CalendarDateTime(time, calendar) + for time in times]) line1, = iplt.plot(time_coord) result_ydata = line1.get_ydata() self.assertArrayEqual(expected_ydata, result_ydata) diff --git a/lib/iris/tests/test_pandas.py b/lib/iris/tests/test_pandas.py index 56b2c20e53..eed3296b7d 100644 --- a/lib/iris/tests/test_pandas.py +++ b/lib/iris/tests/test_pandas.py @@ -1,4 +1,4 @@ -# (C) British Crown Copyright 2013 - 2016, Met Office +# (C) British Crown Copyright 2013 - 2017, Met Office # # This file is part of Iris. # @@ -100,11 +100,11 @@ def test_time_360(self): time_coord = DimCoord([0, 100.1, 200.2, 300.3, 400.4], long_name="time", units=time_unit) cube.add_dim_coord(time_coord, 0) - expected_index = [netcdftime.datetime(2000, 1, 1, 0, 0), - netcdftime.datetime(2000, 4, 11, 2, 24), - netcdftime.datetime(2000, 7, 21, 4, 48), - netcdftime.datetime(2000, 11, 1, 7, 12), - netcdftime.datetime(2001, 2, 11, 9, 36)] + expected_index = [netcdftime.Datetime360Day(2000, 1, 1, 0, 0), + netcdftime.Datetime360Day(2000, 4, 11, 2, 24), + netcdftime.Datetime360Day(2000, 7, 21, 4, 48), + netcdftime.Datetime360Day(2000, 11, 1, 7, 12), + netcdftime.Datetime360Day(2001, 2, 11, 9, 36)] series = iris.pandas.as_series(cube) self.assertArrayEqual(series, cube.data) self.assertArrayEqual(series.index, expected_index) @@ -236,8 +236,8 @@ def test_time_360(self): time_coord = DimCoord([100.1, 200.2], long_name="time", units=time_unit) cube.add_dim_coord(time_coord, 0) - expected_index = [netcdftime.datetime(2000, 4, 11, 2, 24), - netcdftime.datetime(2000, 7, 21, 4, 48)] + expected_index = [netcdftime.Datetime360Day(2000, 4, 11, 2, 24), + netcdftime.Datetime360Day(2000, 7, 21, 4, 48)] expected_columns = [0, 1, 2, 3, 4] data_frame = iris.pandas.as_data_frame(cube) self.assertArrayEqual(data_frame, cube.data) diff --git a/lib/iris/tests/unit/fileformats/um/fast_load_structured_fields/test_FieldCollation.py b/lib/iris/tests/unit/fileformats/um/fast_load_structured_fields/test_FieldCollation.py index e2ae06292d..76b81de669 100644 --- a/lib/iris/tests/unit/fileformats/um/fast_load_structured_fields/test_FieldCollation.py +++ b/lib/iris/tests/unit/fileformats/um/fast_load_structured_fields/test_FieldCollation.py @@ -1,4 +1,4 @@ -# (C) British Crown Copyright 2014 - 2015, Met Office +# (C) British Crown Copyright 2014 - 2017, Met Office # # This file is part of Iris. # @@ -52,8 +52,12 @@ def _make_field(lbyr=None, lbyrd=None, lbft=None, header = [0] * 64 if lbyr is not None: header[0] = lbyr + header[1] = 1 + header[2] = 1 if lbyrd is not None: header[6] = lbyrd + header[7] = 1 + header[8] = 1 if lbft is not None: header[13] = lbft if blev is not None: From 4d8a99d97bc5d46057bea273cda80c6631238526 Mon Sep 17 00:00:00 2001 From: marqh Date: Fri, 3 Mar 2017 12:02:32 +0000 Subject: [PATCH 2/7] netcdftime julien day failure --- .../unit/coord_categorisation/test_add_categorised_coord.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/iris/tests/unit/coord_categorisation/test_add_categorised_coord.py b/lib/iris/tests/unit/coord_categorisation/test_add_categorised_coord.py index de21b9a0eb..c54e27807d 100644 --- a/lib/iris/tests/unit/coord_categorisation/test_add_categorised_coord.py +++ b/lib/iris/tests/unit/coord_categorisation/test_add_categorised_coord.py @@ -99,7 +99,6 @@ def setUp(self): 'proleptic_gregorian': np.array(list(range(360, 367)) + list(range(1, 4))), 'noleap': np.array(list(range(359, 366)) + list(range(1, 4))), - 'julian': np.array(list(range(360, 367)) + list(range(1, 4))), 'all_leap': np.array(list(range(360, 367)) + list(range(1, 4))), '365_day': np.array(list(range(359, 366)) + list(range(1, 4))), '366_day': np.array(list(range(360, 367)) + list(range(1, 4))), @@ -115,7 +114,7 @@ def make_cube(self, calendar): return cube def test_calendars(self): - for calendar in calendars: + for calendar in self.expected: cube = self.make_cube(calendar) add_day_of_year(cube, 'time') points = cube.coord('day_of_year').points From 77a58c14011afcb6f9a76e02e64b9b21a84e08bb Mon Sep 17 00:00:00 2001 From: marqh Date: Fri, 3 Mar 2017 13:57:16 +0000 Subject: [PATCH 3/7] avoid double Ellipsis --- lib/iris/coords.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/iris/coords.py b/lib/iris/coords.py index 20d4058b6a..2eec46d15a 100644 --- a/lib/iris/coords.py +++ b/lib/iris/coords.py @@ -492,7 +492,13 @@ def is_full_slice(s): raise IndexError('Cannot index with zero length ' 'slice.') if bounds is not None: - bounds = bounds[keys + (Ellipsis, )] + # Bounds will generally have an extra dimension compared + # to points, so add an Ellipsis at the end, unless there + # is already on, as numpy does not support double Ellipsis. + if keys[-1] == Ellipsis: + bounds = bounds[keys] + else: + bounds = bounds[keys + (Ellipsis, )] new_coord = self.copy(points=points, bounds=bounds) return new_coord From 2d94a8c99b09b48eab7f4594b6ddef93edf14002 Mon Sep 17 00:00:00 2001 From: marqh Date: Fri, 3 Mar 2017 15:14:19 +0000 Subject: [PATCH 4/7] img --- lib/iris/tests/results/imagerepo.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/iris/tests/results/imagerepo.json b/lib/iris/tests/results/imagerepo.json index 9b95de4325..15272623e9 100644 --- a/lib/iris/tests/results/imagerepo.json +++ b/lib/iris/tests/results/imagerepo.json @@ -728,11 +728,12 @@ "iris.tests.test_quickplot.TestTimeReferenceUnitsLabels.test_not_reference_time_units.0": [ "https://scitools.github.io/test-iris-imagehash/images/415f85e9fefb91e94600bb6f07009be7effa1966ab065b273b009b663b007a04.png", "https://scitools.github.io/test-iris-imagehash/images/411d85e9fefb91e14600bb6707009be7effe1966ab06fb273b009b663f007a04.png", - "https://scitools.github.io/test-iris-imagehash/images/411f85e9fefb91e14600bb6f07009be7effe1966ab067b273b009b663b007a04.png" + "https://scitools.github.io/test-iris-imagehash/images/411f85e9fefb91e14600bb6f07009be7effe1966ab067b273b009b663b007a04.png", + "https://scitools.github.io/test-iris-imagehash/images/411f85e9fefb91e14600bb6707009be7effe1966ab06fb273b00bb263b007a04.png" ], "iris.tests.test_quickplot.TestTimeReferenceUnitsLabels.test_reference_time_units.0": [ "https://scitools.github.io/test-iris-imagehash/images/417f8119feebeeff070054bb2b0014a0bb157ba6bb972b46dabf3b0419827b04.png", "https://scitools.github.io/test-iris-imagehash/images/417f8119fefbeeff070054b92b0014a0bb557ba69b95ab46dabf3b0419827b04.png", "https://scitools.github.io/test-iris-imagehash/images/417f8119fefbeeff070054bb2b0014a0bb14fbe69b952b46dabf3b0419827b04.png" ] -} \ No newline at end of file +} From 5d0cf5ef61b90c811c862676dc74e65c0e3c3638 Mon Sep 17 00:00:00 2001 From: marqh Date: Fri, 3 Mar 2017 15:24:05 +0000 Subject: [PATCH 5/7] license date --- lib/iris/coords.py | 2 +- .../unit/coord_categorisation/test_add_categorised_coord.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/iris/coords.py b/lib/iris/coords.py index 2eec46d15a..a4f73e7706 100644 --- a/lib/iris/coords.py +++ b/lib/iris/coords.py @@ -1,4 +1,4 @@ -# (C) British Crown Copyright 2010 - 2016, Met Office +# (C) British Crown Copyright 2010 - 2017, Met Office # # This file is part of Iris. # diff --git a/lib/iris/tests/unit/coord_categorisation/test_add_categorised_coord.py b/lib/iris/tests/unit/coord_categorisation/test_add_categorised_coord.py index c54e27807d..170a92cc6d 100644 --- a/lib/iris/tests/unit/coord_categorisation/test_add_categorised_coord.py +++ b/lib/iris/tests/unit/coord_categorisation/test_add_categorised_coord.py @@ -1,4 +1,4 @@ -# (C) British Crown Copyright 2013 - 2016, Met Office +# (C) British Crown Copyright 2013 - 2017, Met Office # # This file is part of Iris. # From 13b6c3436cb82160c51572ed2accaebbf1f6c4c0 Mon Sep 17 00:00:00 2001 From: marqh Date: Fri, 3 Mar 2017 17:25:25 +0000 Subject: [PATCH 6/7] test patches --- lib/iris/tests/test_pandas.py | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/lib/iris/tests/test_pandas.py b/lib/iris/tests/test_pandas.py index eed3296b7d..abe680b318 100644 --- a/lib/iris/tests/test_pandas.py +++ b/lib/iris/tests/test_pandas.py @@ -28,6 +28,7 @@ import cf_units import matplotlib.units +import netCDF4 import netcdftime import numpy as np @@ -100,11 +101,18 @@ def test_time_360(self): time_coord = DimCoord([0, 100.1, 200.2, 300.3, 400.4], long_name="time", units=time_unit) cube.add_dim_coord(time_coord, 0) - expected_index = [netcdftime.Datetime360Day(2000, 1, 1, 0, 0), - netcdftime.Datetime360Day(2000, 4, 11, 2, 24), - netcdftime.Datetime360Day(2000, 7, 21, 4, 48), - netcdftime.Datetime360Day(2000, 11, 1, 7, 12), - netcdftime.Datetime360Day(2001, 2, 11, 9, 36)] + if netCDF4.__version__ > '1.2.4': + expected_index = [netcdftime.Datetime360Day(2000, 1, 1, 0, 0), + netcdftime.Datetime360Day(2000, 4, 11, 2, 24), + netcdftime.Datetime360Day(2000, 7, 21, 4, 48), + netcdftime.Datetime360Day(2000, 11, 1, 7, 12), + netcdftime.Datetime360Day(2001, 2, 11, 9, 36)] + else: + expected_index = [netcdftime.datetime(2000, 1, 1, 0, 0), + netcdftime.datetime(2000, 4, 11, 2, 24), + netcdftime.datetime(2000, 7, 21, 4, 48), + netcdftime.datetime(2000, 11, 1, 7, 12), + netcdftime.datetime(2001, 2, 11, 9, 36)] series = iris.pandas.as_series(cube) self.assertArrayEqual(series, cube.data) self.assertArrayEqual(series.index, expected_index) @@ -236,8 +244,12 @@ def test_time_360(self): time_coord = DimCoord([100.1, 200.2], long_name="time", units=time_unit) cube.add_dim_coord(time_coord, 0) - expected_index = [netcdftime.Datetime360Day(2000, 4, 11, 2, 24), - netcdftime.Datetime360Day(2000, 7, 21, 4, 48)] + if netCDF4.__version__ > '1.2.4': + expected_index = [netcdftime.Datetime360Day(2000, 4, 11, 2, 24), + netcdftime.Datetime360Day(2000, 7, 21, 4, 48)] + else: + expected_index = [netcdftime.datetime(2000, 4, 11, 2, 24), + netcdftime.datetime(2000, 7, 21, 4, 48)] expected_columns = [0, 1, 2, 3, 4] data_frame = iris.pandas.as_data_frame(cube) self.assertArrayEqual(data_frame, cube.data) From 53ed6063e7537561715127e5ecd7bcbf53321c30 Mon Sep 17 00:00:00 2001 From: marqh Date: Fri, 3 Mar 2017 17:26:33 +0000 Subject: [PATCH 7/7] coord ellipsis --- lib/iris/coords.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/iris/coords.py b/lib/iris/coords.py index a4f73e7706..5e8b0a7fa7 100644 --- a/lib/iris/coords.py +++ b/lib/iris/coords.py @@ -495,7 +495,8 @@ def is_full_slice(s): # Bounds will generally have an extra dimension compared # to points, so add an Ellipsis at the end, unless there # is already on, as numpy does not support double Ellipsis. - if keys[-1] == Ellipsis: + if (not isinstance(keys[-1], np.ndarray) and + keys[-1] == Ellipsis): bounds = bounds[keys] else: bounds = bounds[keys + (Ellipsis, )]