def test_to_timedelta64_a(self): timedelta = datetime.timedelta self.assertEqual(to_timedelta64(timedelta(days=4)), np.timedelta64(4, 'D')) self.assertEqual(to_timedelta64(timedelta(seconds=4)), np.timedelta64(4, 's')) self.assertEqual(to_timedelta64(timedelta(minutes=4)), np.timedelta64(240, 's'))
def _ufunc_binary_operator(self, *, operator: tp.Callable[..., tp.Any], other: object) -> np.ndarray: if self._recache: self._update_array_cache() if operator.__name__ == 'matmul' or operator.__name__ == 'rmatmul': raise NotImplementedError('matrix multiplication not supported') if isinstance(other, Index): other = other.values # operate on labels to labels elif isinstance(other, str): # do not pass dtype, as want to coerce to this parsed type, not the type of sled other = to_datetime64(other) if isinstance(other, np.datetime64): # convert labels to other's datetime64 type to enable matching on month, year, etc. array = operator(self._labels.astype(other.dtype), other) elif isinstance(other, datetime.timedelta): array = operator(self._labels, to_timedelta64(other)) else: # np.timedelta64 should work fine here array = operator(self._labels, other) array.flags.writeable = False return array
def _ufunc_binary_operator(self, *, operator: tp.Callable[..., tp.Any], other: object, fill_value: object = np.nan, ) -> np.ndarray: if self._recache: self._update_array_cache() if operator.__name__ == 'matmul' or operator.__name__ == 'rmatmul': raise NotImplementedError('matrix multiplication not supported') if isinstance(other, Index): other = other.values # operate on labels to labels other_is_array = True elif isinstance(other, str): # do not pass dtype, as want to coerce to this parsed type, not the type of sled other = to_datetime64(other) other_is_array = False elif other.__class__ is np.ndarray: other_is_array = True else: other_is_array = False if isinstance(other, np.datetime64): # convert labels to other's datetime64 type to enable matching on month, year, etc. result = operator(self._labels.astype(other.dtype), other) elif isinstance(other, datetime.timedelta): result = operator(self._labels, to_timedelta64(other)) else: # np.timedelta64 should work fine here with WarningsSilent(): result = operator(self._labels, other) # NOTE: similar branching as in container_util.apply_binary_operator # NOTE: all string will have been converted to dt64, or raise ValueError; comparison to same sized iterables (list, tuple) will result in an array when they are the same size if result is False: # will never be True if not other_is_array and hasattr(other, '__len__') and len(other) == len(self): # NOTE: equality comparisons of an array to same sized iterable normally return an array, but with dt64 types they just return False result = np.full(self.shape, result, dtype=DTYPE_BOOL) elif other_is_array and other.size == 1: # elements in arrays of 0 or more dimensions are acceptable; this is what NP does for arithmetic operators when the types are compatible result = np.full(self.shape, result, dtype=DTYPE_BOOL) else: raise ValueError('operands could not be broadcast together') # raise on unaligned shapes as is done for arithmetic operators result.flags.writeable = False return result
def _ufunc_binary_operator(self, *, operator: tp.Callable, other) -> np.ndarray: if self._recache: self._update_array_cache() if issubclass(other.__class__, Index): other = other.values # operate on labels to labels elif isinstance(other, str): # do not pass dtype, as want to coerce to this parsed type, not the type of sled other = to_datetime64(other) if isinstance(other, np.datetime64): # convert labels to other's datetime64 type to enable matching on month, year, etc. array = operator(self._labels.astype(other.dtype), other) elif isinstance(other, datetime.timedelta): array = operator(self._labels, to_timedelta64(other)) else: # np.timedelta64 should work fine here array = operator(self._labels, other) array.flags.writeable = False return array