|
7 | 7 | import pytest
|
8 | 8 | from numpy import array, nan
|
9 | 9 |
|
10 |
| -from xarray import DataArray, Dataset, concat |
| 10 | +from xarray import DataArray, Dataset, concat, cftime_range |
11 | 11 | from xarray.core import dtypes, duck_array_ops
|
12 | 12 | from xarray.core.duck_array_ops import (
|
13 | 13 | array_notnull_equiv, concatenate, count, first, gradient, last, mean,
|
14 | 14 | rolling_window, stack, where)
|
15 | 15 | from xarray.core.pycompat import dask_array_type
|
16 |
| -from xarray.testing import assert_allclose, assert_equal |
| 16 | +from xarray.testing import assert_allclose, assert_equal, assert_identical |
17 | 17 |
|
18 | 18 | from . import (
|
19 |
| - assert_array_equal, has_dask, has_np113, raises_regex, requires_dask) |
| 19 | + assert_array_equal, has_dask, has_np113, raises_regex, requires_cftime, |
| 20 | + requires_dask) |
20 | 21 |
|
21 | 22 |
|
22 | 23 | class TestOps(object):
|
@@ -569,3 +570,42 @@ def test_docs():
|
569 | 570 | indicated dimension(s) removed.
|
570 | 571 | """)
|
571 | 572 | assert actual == expected
|
| 573 | + |
| 574 | + |
| 575 | +def test_datetime_to_numeric_datetime64(): |
| 576 | + times = pd.date_range('2000', periods=5, freq='7D').values |
| 577 | + result = duck_array_ops.datetime_to_numeric(times, datetime_unit='h') |
| 578 | + expected = 24 * np.arange(0, 35, 7) |
| 579 | + np.testing.assert_array_equal(result, expected) |
| 580 | + |
| 581 | + offset = times[1] |
| 582 | + result = duck_array_ops.datetime_to_numeric( |
| 583 | + times, offset=offset, datetime_unit='h') |
| 584 | + expected = 24 * np.arange(-7, 28, 7) |
| 585 | + np.testing.assert_array_equal(result, expected) |
| 586 | + |
| 587 | + dtype = np.float32 |
| 588 | + result = duck_array_ops.datetime_to_numeric( |
| 589 | + times, datetime_unit='h', dtype=dtype) |
| 590 | + expected = 24 * np.arange(0, 35, 7).astype(dtype) |
| 591 | + np.testing.assert_array_equal(result, expected) |
| 592 | + |
| 593 | + |
| 594 | +@requires_cftime |
| 595 | +def test_datetime_to_numeric_cftime(): |
| 596 | + times = cftime_range('2000', periods=5, freq='7D').values |
| 597 | + result = duck_array_ops.datetime_to_numeric(times, datetime_unit='h') |
| 598 | + expected = 24 * np.arange(0, 35, 7) |
| 599 | + np.testing.assert_array_equal(result, expected) |
| 600 | + |
| 601 | + offset = times[1] |
| 602 | + result = duck_array_ops.datetime_to_numeric( |
| 603 | + times, offset=offset, datetime_unit='h') |
| 604 | + expected = 24 * np.arange(-7, 28, 7) |
| 605 | + np.testing.assert_array_equal(result, expected) |
| 606 | + |
| 607 | + dtype = np.float32 |
| 608 | + result = duck_array_ops.datetime_to_numeric( |
| 609 | + times, datetime_unit='h', dtype=dtype) |
| 610 | + expected = 24 * np.arange(0, 35, 7).astype(dtype) |
| 611 | + np.testing.assert_array_equal(result, expected) |
0 commit comments