Skip to content

Commit da64edd

Browse files
authored
Merge pull request #30 from ocefpaf/use_cftime
use cftime
2 parents 013c5c1 + f1ca7b2 commit da64edd

File tree

6 files changed

+49
-49
lines changed

6 files changed

+49
-49
lines changed

nc_time_axis/__init__.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"""
2-
Support for netcdftime axis in matplotlib.
2+
Support for cftime axis in matplotlib.
33
44
"""
55

@@ -12,7 +12,7 @@
1212
import matplotlib.ticker as mticker
1313
import matplotlib.transforms as mtransforms
1414
import matplotlib.units as munits
15-
import netcdftime
15+
import cftime
1616
import numpy as np
1717

1818
# Define __version__ based on versioneer's interpretation.
@@ -27,7 +27,7 @@
2727

2828
class CalendarDateTime(object):
2929
"""
30-
Container for :class:`netcdftime.datetime` object and calendar.
30+
Container for :class:`cftime.datetime` object and calendar.
3131
3232
"""
3333
def __init__(self, datetime, calendar):
@@ -49,7 +49,7 @@ def __repr__(self):
4949

5050
class NetCDFTimeDateFormatter(mticker.Formatter):
5151
"""
52-
Formatter for netcdftime.datetime data.
52+
Formatter for cftime.datetime data.
5353
5454
"""
5555
# Some magic numbers. These seem to work pretty well.
@@ -81,13 +81,13 @@ def pick_format(self, ndays):
8181

8282
def __call__(self, x, pos=0):
8383
format_string = self.pick_format(ndays=self.locator.ndays)
84-
dt = netcdftime.utime(self.time_units, self.calendar).num2date(x)
84+
dt = cftime.utime(self.time_units, self.calendar).num2date(x)
8585
return dt.strftime(format_string)
8686

8787

8888
class NetCDFTimeDateLocator(mticker.Locator):
8989
"""
90-
Determines tick locations when plotting netcdftime.datetime data.
90+
Determines tick locations when plotting cftime.datetime data.
9191
9292
"""
9393
def __init__(self, max_n_ticks, calendar, date_unit, min_n_ticks=3):
@@ -143,7 +143,7 @@ def tick_values(self, vmin, vmax):
143143

144144
self.ndays = float(abs(vmax - vmin))
145145

146-
utime = netcdftime.utime(self.date_unit, self.calendar)
146+
utime = cftime.utime(self.date_unit, self.calendar)
147147
lower = utime.num2date(vmin)
148148
upper = utime.num2date(vmax)
149149

@@ -153,7 +153,7 @@ def tick_values(self, vmin, vmax):
153153
# TODO START AT THE BEGINNING OF A DECADE/CENTURY/MILLENIUM as
154154
# appropriate.
155155
years = self._max_n_locator.tick_values(lower.year, upper.year)
156-
ticks = [netcdftime.datetime(int(year), 1, 1) for year in years]
156+
ticks = [cftime.datetime(int(year), 1, 1) for year in years]
157157
elif resolution == 'MONTHLY':
158158
# TODO START AT THE BEGINNING OF A DECADE/CENTURY/MILLENIUM as
159159
# appropriate.
@@ -162,27 +162,27 @@ def tick_values(self, vmin, vmax):
162162
for offset in months_offset:
163163
year = lower.year + np.floor((lower.month + offset) / 12)
164164
month = ((lower.month + offset) % 12) + 1
165-
ticks.append(netcdftime.datetime(int(year), int(month), 1))
165+
ticks.append(cftime.datetime(int(year), int(month), 1))
166166
elif resolution == 'DAILY':
167167
# TODO: It would be great if this favoured multiples of 7.
168168
days = self._max_n_locator_days.tick_values(vmin, vmax)
169169
ticks = [utime.num2date(dt) for dt in days]
170170
elif resolution == 'HOURLY':
171171
hour_unit = 'hours since 2000-01-01'
172-
hour_utime = netcdftime.utime(hour_unit, self.calendar)
172+
hour_utime = cftime.utime(hour_unit, self.calendar)
173173
in_hours = hour_utime.date2num([lower, upper])
174174
hours = self._max_n_locator.tick_values(in_hours[0], in_hours[1])
175175
ticks = [hour_utime.num2date(dt) for dt in hours]
176176
elif resolution == 'MINUTELY':
177177
minute_unit = 'minutes since 2000-01-01'
178-
minute_utime = netcdftime.utime(minute_unit, self.calendar)
178+
minute_utime = cftime.utime(minute_unit, self.calendar)
179179
in_minutes = minute_utime.date2num([lower, upper])
180180
minutes = self._max_n_locator.tick_values(in_minutes[0],
181181
in_minutes[1])
182182
ticks = [minute_utime.num2date(dt) for dt in minutes]
183183
elif resolution == 'SECONDLY':
184184
second_unit = 'seconds since 2000-01-01'
185-
second_utime = netcdftime.utime(second_unit, self.calendar)
185+
second_utime = cftime.utime(second_unit, self.calendar)
186186
in_seconds = second_utime.date2num([lower, upper])
187187
seconds = self._max_n_locator.tick_values(in_seconds[0],
188188
in_seconds[1])
@@ -196,7 +196,7 @@ def tick_values(self, vmin, vmax):
196196

197197
class NetCDFTimeConverter(mdates.DateConverter):
198198
"""
199-
Converter for netcdftime.datetime data.
199+
Converter for cftime.datetime data.
200200
201201
"""
202202
standard_unit = 'days since 2000-01-01'
@@ -215,8 +215,8 @@ def axisinfo(unit, axis):
215215
date_unit=date_unit)
216216
majfmt = NetCDFTimeDateFormatter(majloc, calendar=calendar,
217217
time_units=date_unit)
218-
datemin = CalendarDateTime(netcdftime.datetime(2000, 1, 1), calendar)
219-
datemax = CalendarDateTime(netcdftime.datetime(2010, 1, 1), calendar)
218+
datemin = CalendarDateTime(cftime.datetime(2000, 1, 1), calendar)
219+
datemax = CalendarDateTime(cftime.datetime(2010, 1, 1), calendar)
220220
return munits.AxisInfo(majloc=majloc, majfmt=majfmt, label='',
221221
default_limits=(datemin, datemax))
222222

@@ -238,7 +238,7 @@ def default_units(cls, sample_point, axis):
238238
else:
239239
# Deal with a single `sample_point` value.
240240
if not hasattr(sample_point, 'calendar'):
241-
msg = ('Expecting netcdftimes with an extra '
241+
msg = ('Expecting cftimes with an extra '
242242
'"calendar" attribute.')
243243
raise ValueError(msg)
244244
else:
@@ -249,7 +249,7 @@ def default_units(cls, sample_point, axis):
249249
def convert(cls, value, unit, axis):
250250
"""
251251
Converts value, if it is not already a number or sequence of numbers,
252-
with :func:`netcdftime.utime().date2num`.
252+
with :func:`cftime.utime().date2num`.
253253
254254
"""
255255
shape = None
@@ -270,11 +270,11 @@ def convert(cls, value, unit, axis):
270270
raise ValueError('The values must be numbers or instances of '
271271
'"nc_time_axis.CalendarDateTime".')
272272

273-
if not isinstance(first_value.datetime, netcdftime.datetime):
273+
if not isinstance(first_value.datetime, cftime.datetime):
274274
raise ValueError('The datetime attribute of the CalendarDateTime '
275-
'object must be of type `netcdftime.datetime`.')
275+
'object must be of type `cftime.datetime`.')
276276

277-
ut = netcdftime.utime(cls.standard_unit, calendar=first_value.calendar)
277+
ut = cftime.utime(cls.standard_unit, calendar=first_value.calendar)
278278

279279
if isinstance(value, CalendarDateTime):
280280
value = [value]

nc_time_axis/tests/integration/test_plot.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import matplotlib
99
matplotlib.use('agg')
1010
import matplotlib.pyplot as plt # nopep8
11-
import netcdftime # nopep8
11+
import cftime # nopep8
1212
import numpy as np # nopep8
1313

1414
import nc_time_axis # nopep8
@@ -26,7 +26,7 @@ def tearDown(self):
2626
plt.close('all')
2727

2828
def test_360_day_calendar(self):
29-
datetimes = [netcdftime.datetime(1986, month, 30)
29+
datetimes = [cftime.datetime(1986, month, 30)
3030
for month in range(1, 6)]
3131
cal_datetimes = [nc_time_axis.CalendarDateTime(dt, '360_day')
3232
for dt in datetimes]

nc_time_axis/tests/unit/test_CalendarDateTime.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,26 @@
55

66
import unittest
77

8-
import netcdftime
8+
import cftime
99

1010
from nc_time_axis import CalendarDateTime
1111

1212

1313
class Test___eq__(unittest.TestCase):
1414
def setUp(self):
15-
self.cdt = CalendarDateTime(netcdftime.datetime(1967, 7, 22, 3, 6),
15+
self.cdt = CalendarDateTime(cftime.datetime(1967, 7, 22, 3, 6),
1616
'360_day')
1717

1818
def test_equal(self):
1919
self.assertTrue(self.cdt == self.cdt)
2020

2121
def test_diff_cal(self):
22-
other_cdt = CalendarDateTime(netcdftime.datetime(1967, 7, 22, 3, 6),
22+
other_cdt = CalendarDateTime(cftime.datetime(1967, 7, 22, 3, 6),
2323
'365_day')
2424
self.assertFalse(self.cdt == other_cdt)
2525

2626
def test_diff_datetime(self):
27-
other_cdt = CalendarDateTime(netcdftime.datetime(1992, 11, 23, 3, 6),
27+
other_cdt = CalendarDateTime(cftime.datetime(1992, 11, 23, 3, 6),
2828
'360_day')
2929
self.assertFalse(self.cdt == other_cdt)
3030

@@ -34,19 +34,19 @@ def test_diff_type(self):
3434

3535
class Test__ne__(unittest.TestCase):
3636
def setUp(self):
37-
self.cdt = CalendarDateTime(netcdftime.datetime(1967, 7, 22, 3, 6),
37+
self.cdt = CalendarDateTime(cftime.datetime(1967, 7, 22, 3, 6),
3838
'360_day')
3939

4040
def test_equal(self):
4141
self.assertFalse(self.cdt != self.cdt)
4242

4343
def test_diff_cal(self):
44-
other_cdt = CalendarDateTime(netcdftime.datetime(1967, 7, 22, 3, 6),
44+
other_cdt = CalendarDateTime(cftime.datetime(1967, 7, 22, 3, 6),
4545
'365_day')
4646
self.assertTrue(self.cdt != other_cdt)
4747

4848
def test_diff_datetime(self):
49-
other_cdt = CalendarDateTime(netcdftime.datetime(1992, 11, 23, 3, 6),
49+
other_cdt = CalendarDateTime(cftime.datetime(1992, 11, 23, 3, 6),
5050
'360_day')
5151
self.assertTrue(self.cdt != other_cdt)
5252

nc_time_axis/tests/unit/test_NetCDFTimeConverter.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import unittest
77

8-
import netcdftime
8+
import cftime
99
import numpy as np
1010

1111
from nc_time_axis import NetCDFTimeConverter, CalendarDateTime
@@ -16,8 +16,8 @@ def test_axis_default_limits(self):
1616
cal = '360_day'
1717
unit = (cal, 'days since 2000-02-25 00:00:00')
1818
result = NetCDFTimeConverter().axisinfo(unit, None)
19-
expected_dt = [netcdftime.datetime(2000, 1, 1),
20-
netcdftime.datetime(2010, 1, 1)]
19+
expected_dt = [cftime.datetime(2000, 1, 1),
20+
cftime.datetime(2010, 1, 1)]
2121
np.testing.assert_array_equal(
2222
result.default_limits,
2323
[CalendarDateTime(edt, cal) for edt in expected_dt])
@@ -27,24 +27,24 @@ class Test_default_units(unittest.TestCase):
2727
def test_360_day_calendar_point(self):
2828
calendar = '360_day'
2929
unit = 'days since 2000-01-01'
30-
val = CalendarDateTime(netcdftime.datetime(2014, 8, 12), calendar)
30+
val = CalendarDateTime(cftime.datetime(2014, 8, 12), calendar)
3131
result = NetCDFTimeConverter().default_units(val, None)
3232
self.assertEqual(result, (calendar, unit))
3333

3434
def test_360_day_calendar_list(self):
3535
calendar = '360_day'
3636
unit = 'days since 2000-01-01'
37-
val = [CalendarDateTime(netcdftime.datetime(2014, 8, 12), calendar)]
37+
val = [CalendarDateTime(cftime.datetime(2014, 8, 12), calendar)]
3838
result = NetCDFTimeConverter().default_units(val, None)
3939
self.assertEqual(result, (calendar, unit))
4040

4141
def test_360_day_calendar_nd(self):
4242
# Test the case where the input is an nd-array.
4343
calendar = '360_day'
4444
unit = 'days since 2000-01-01'
45-
val = np.array([[CalendarDateTime(netcdftime.datetime(2014, 8, 12),
45+
val = np.array([[CalendarDateTime(cftime.datetime(2014, 8, 12),
4646
calendar)],
47-
[CalendarDateTime(netcdftime.datetime(2014, 8, 13),
47+
[CalendarDateTime(cftime.datetime(2014, 8, 13),
4848
calendar)]])
4949
result = NetCDFTimeConverter().default_units(val, None)
5050
self.assertEqual(result, (calendar, unit))
@@ -54,8 +54,8 @@ def test_nonequal_calendars(self):
5454
calendar_1 = '360_day'
5555
calendar_2 = '365_day'
5656
unit = 'days since 2000-01-01'
57-
val = [CalendarDateTime(netcdftime.datetime(2014, 8, 12), calendar_1),
58-
CalendarDateTime(netcdftime.datetime(2014, 8, 13), calendar_2)]
57+
val = [CalendarDateTime(cftime.datetime(2014, 8, 12), calendar_1),
58+
CalendarDateTime(cftime.datetime(2014, 8, 13), calendar_2)]
5959
with self.assertRaisesRegexp(ValueError, 'not all equal'):
6060
NetCDFTimeConverter().default_units(val, None)
6161

@@ -83,26 +83,26 @@ def test_numeric_iterable(self):
8383
result = NetCDFTimeConverter().convert(val, None, None)
8484
np.testing.assert_array_equal(result, val)
8585

86-
def test_netcdftime(self):
87-
val = CalendarDateTime(netcdftime.datetime(2014, 8, 12), '365_day')
86+
def test_cftime(self):
87+
val = CalendarDateTime(cftime.datetime(2014, 8, 12), '365_day')
8888
result = NetCDFTimeConverter().convert(val, None, None)
8989
np.testing.assert_array_equal(result, 5333.)
9090

91-
def test_netcdftime_np_array(self):
92-
val = np.array([CalendarDateTime(netcdftime.datetime(2012, 6, 4),
91+
def test_cftime_np_array(self):
92+
val = np.array([CalendarDateTime(cftime.datetime(2012, 6, 4),
9393
'360_day')], dtype=np.object)
9494
result = NetCDFTimeConverter().convert(val, None, None)
9595
self.assertEqual(result, np.array([4473.]))
9696

97-
def test_non_netcdftime_datetime(self):
97+
def test_non_cftime_datetime(self):
9898
val = CalendarDateTime(4, '360_day')
9999
msg = 'The datetime attribute of the CalendarDateTime object must ' \
100-
'be of type `netcdftime.datetime`.'
100+
'be of type `cftime.datetime`.'
101101
with self.assertRaisesRegexp(ValueError, msg):
102102
result = NetCDFTimeConverter().convert(val, None, None)
103103

104104
def test_non_CalendarDateTime(self):
105-
val = netcdftime.datetime(1988, 5, 6)
105+
val = cftime.datetime(1988, 5, 6)
106106
msg = 'The values must be numbers or instances of ' \
107107
'"nc_time_axis.CalendarDateTime".'
108108
with self.assertRaisesRegexp(ValueError, msg):

nc_time_axis/tests/unit/test_NetCDFTimeDateLocator.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import unittest
77

88
import matplotlib.dates as mdates
9-
import netcdftime
9+
import cftime
1010
import numpy as np
1111

1212
from nc_time_axis import NetCDFTimeDateLocator
@@ -21,7 +21,7 @@ def check(self, max_n_ticks, num1, num2):
2121
locator = NetCDFTimeDateLocator(max_n_ticks=max_n_ticks,
2222
calendar=self.calendar,
2323
date_unit=self.date_unit)
24-
utime = netcdftime.utime(self.date_unit, self.calendar)
24+
utime = cftime.utime(self.date_unit, self.calendar)
2525
return locator.compute_resolution(num1, num2, utime.num2date(num1),
2626
utime.num2date(num2))
2727

setup.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@
1515
name='nc-time-axis',
1616
version=versioneer.get_version(),
1717
cmdclass=versioneer.get_cmdclass(),
18-
description='netcdftime support for matplotlib axis',
18+
description='cftime support for matplotlib axis',
1919
license='BSD3',
2020
author='Laura Dreyer, Philip Elson',
2121
url='https://github.com/scitools/nc-time-axis',
2222
packages=packages,
2323
install_requires = ['matplotlib==1.*',
24-
'netcdf4',
24+
'cftime',
2525
'numpy',
2626
'six'],
2727
tests_require = ['mock', 'pep8'],

0 commit comments

Comments
 (0)