Repository: climate Updated Branches: refs/heads/master 5058b3898 -> 8e1edc873
CLIMATE-938 Unify format of the time information from a netCDF file. Project: http://git-wip-us.apache.org/repos/asf/climate/repo Commit: http://git-wip-us.apache.org/repos/asf/climate/commit/4807c4b8 Tree: http://git-wip-us.apache.org/repos/asf/climate/tree/4807c4b8 Diff: http://git-wip-us.apache.org/repos/asf/climate/diff/4807c4b8 Branch: refs/heads/master Commit: 4807c4b82623e054787e233bab244dd88be98b44 Parents: e8d8d42 Author: michaelarthuranderson <michael.arthur.ander...@gmail.com> Authored: Sun Mar 4 08:36:35 2018 -0500 Committer: michaelarthuranderson <michael.arthur.ander...@gmail.com> Committed: Sun Mar 4 08:36:35 2018 -0500 ---------------------------------------------------------------------- ocw/dataset_processor.py | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/climate/blob/4807c4b8/ocw/dataset_processor.py ---------------------------------------------------------------------- diff --git a/ocw/dataset_processor.py b/ocw/dataset_processor.py index cf2e90e..0bb19dd 100755 --- a/ocw/dataset_processor.py +++ b/ocw/dataset_processor.py @@ -15,20 +15,19 @@ # limitations under the License. # -from ocw import dataset as ds -import ocw.utils as utils - import datetime +import logging + +import netCDF4 import numpy as np import numpy.ma as ma -from scipy.interpolate import griddata import scipy.ndimage -from scipy.stats import rankdata -from scipy.ndimage import map_coordinates -import netCDF4 from matplotlib.path import Path +from scipy.interpolate import griddata +from scipy.ndimage import map_coordinates -import logging +import ocw.utils as utils +from ocw import dataset as ds logger = logging.getLogger(__name__) @@ -149,7 +148,7 @@ def temporal_rebin_with_time_index(target_dataset, nt_average): It is the same as the number of time indicies to be averaged. length of time dimension in the rebinned dataset) = (original time dimension length/nt_average) - :type temporal_resolution: integer + :type nt_average: integer :returns: A new temporally rebinned Dataset :rtype: :class:`dataset.Dataset` @@ -505,10 +504,27 @@ def temporal_slice(target_dataset, start_time, end_time): :raises: ValueError ''' + # https://issues.apache.org/jira/browse/CLIMATE-938 + # netCDF datetimes allow for a variety of calendars while Python has + # only one. This would throw an error about a calendar mismatch when + # comparing a Python datetime object to a netcdf datetime object. + # Cast the date as best we can so the comparison will compare like + # data types This will still throw an excdeption if the start / end date are + # not valid in given calendar. February 29th in a DatetimeNoLeap calendar for example. + slice_start_time =\ + type(target_dataset.times.item(0))(start_time.year, start_time.month, start_time.day, + start_time.hour, start_time.minute, start_time.second) + + slice_end_time =\ + type(target_dataset.times.item(0))(end_time.year, end_time.month, end_time.day, + end_time.hour, end_time.minute, end_time.second) + start_time_index = np.where( - target_dataset.times >= start_time)[0][0] + target_dataset.times >= slice_start_time)[0][0] + end_time_index = np.where( - target_dataset.times <= end_time)[0][-1] + target_dataset.times <= slice_end_time)[0][-1] + new_times = target_dataset.times[start_time_index:end_time_index + 1] new_values = target_dataset.values[start_time_index:end_time_index + 1, :]