|
24 | 24 | map, raise_with_traceback, range, string_types, u, unichr, zip)
|
25 | 25 |
|
26 | 26 | from pandas.core.dtypes.common import (
|
27 |
| - is_bool, is_categorical_dtype, is_datetimelike_v_numeric, |
28 |
| - is_datetimelike_v_object, is_extension_array_dtype, is_interval_dtype, |
29 |
| - is_list_like, is_number, is_sequence, needs_i8_conversion) |
| 27 | + is_bool, is_categorical_dtype, is_datetime64_dtype, is_datetime64tz_dtype, |
| 28 | + is_datetimelike_v_numeric, is_datetimelike_v_object, |
| 29 | + is_extension_array_dtype, is_interval_dtype, is_list_like, is_number, |
| 30 | + is_period_dtype, is_sequence, is_timedelta64_dtype, needs_i8_conversion) |
30 | 31 | from pandas.core.dtypes.missing import array_equivalent
|
31 | 32 |
|
32 | 33 | import pandas as pd
|
|
37 | 38 | from pandas.core.algorithms import take_1d
|
38 | 39 | from pandas.core.arrays import (
|
39 | 40 | DatetimeArrayMixin as DatetimeArray, ExtensionArray, IntervalArray,
|
40 |
| - PeriodArray, period_array) |
| 41 | + PeriodArray, TimedeltaArrayMixin as TimedeltaArray, period_array) |
41 | 42 | import pandas.core.common as com
|
42 | 43 |
|
43 | 44 | from pandas.io.common import urlopen
|
@@ -1080,6 +1081,13 @@ def assert_datetime_array_equal(left, right, obj='DatetimeArray'):
|
1080 | 1081 | assert_attr_equal('tz', left, right, obj=obj)
|
1081 | 1082 |
|
1082 | 1083 |
|
| 1084 | +def assert_timedelta_array_equal(left, right, obj='TimedeltaArray'): |
| 1085 | + _check_isinstance(left, right, TimedeltaArray) |
| 1086 | + assert_numpy_array_equal(left._data, right._data, |
| 1087 | + obj='{obj}._data'.format(obj=obj)) |
| 1088 | + assert_attr_equal('freq', left, right, obj=obj) |
| 1089 | + |
| 1090 | + |
1083 | 1091 | def raise_assert_detail(obj, message, left, right, diff=None):
|
1084 | 1092 | __tracebackhide__ = True
|
1085 | 1093 |
|
@@ -1579,6 +1587,8 @@ def assert_equal(left, right, **kwargs):
|
1579 | 1587 | assert_period_array_equal(left, right, **kwargs)
|
1580 | 1588 | elif isinstance(left, DatetimeArray):
|
1581 | 1589 | assert_datetime_array_equal(left, right, **kwargs)
|
| 1590 | + elif isinstance(left, TimedeltaArray): |
| 1591 | + assert_timedelta_array_equal(left, right, **kwargs) |
1582 | 1592 | elif isinstance(left, ExtensionArray):
|
1583 | 1593 | assert_extension_array_equal(left, right, **kwargs)
|
1584 | 1594 | elif isinstance(left, np.ndarray):
|
@@ -1616,13 +1626,29 @@ def box_expected(expected, box_cls, transpose=True):
|
1616 | 1626 | expected = period_array(expected)
|
1617 | 1627 | elif box_cls is DatetimeArray:
|
1618 | 1628 | expected = DatetimeArray(expected)
|
| 1629 | + elif box_cls is TimedeltaArray: |
| 1630 | + expected = TimedeltaArray(expected) |
1619 | 1631 | elif box_cls is np.ndarray:
|
1620 | 1632 | expected = np.array(expected)
|
| 1633 | + elif box_cls is to_array: |
| 1634 | + expected = to_array(expected) |
1621 | 1635 | else:
|
1622 | 1636 | raise NotImplementedError(box_cls)
|
1623 | 1637 | return expected
|
1624 | 1638 |
|
1625 | 1639 |
|
| 1640 | +def to_array(obj): |
| 1641 | + # temporary implementation until we get pd.array in place |
| 1642 | + if is_period_dtype(obj): |
| 1643 | + return period_array(obj) |
| 1644 | + elif is_datetime64_dtype(obj) or is_datetime64tz_dtype(obj): |
| 1645 | + return DatetimeArray(obj) |
| 1646 | + elif is_timedelta64_dtype(obj): |
| 1647 | + return TimedeltaArray(obj) |
| 1648 | + else: |
| 1649 | + return np.array(obj) |
| 1650 | + |
| 1651 | + |
1626 | 1652 | # -----------------------------------------------------------------------------
|
1627 | 1653 | # Sparse
|
1628 | 1654 |
|
|
0 commit comments