def wrapper(self, other): if isinstance(other, str): try: other = self._scalar_from_string(other) except ValueError: # failed to parse as timedelta return invalid_comparison(self, other, op) if isinstance(other, self._recognized_scalars) or other is NaT: other = self._scalar_type(other) self._check_compatible_with(other) other_i8 = self._unbox_scalar(other) result = op(self.view("i8"), other_i8) if isna(other): result.fill(nat_result) elif not is_list_like(other): return invalid_comparison(self, other, op) elif len(other) != len(self): raise ValueError("Lengths must match") else: if isinstance(other, list): other = np.array(other) if not isinstance(other, (np.ndarray, cls)): return invalid_comparison(self, other, op) if is_object_dtype(other): with np.errstate(all="ignore"): result = ops.comp_method_OBJECT_ARRAY( op, self.astype(object), other ) o_mask = isna(other) elif not cls._is_recognized_dtype(other.dtype): # e.g. other is datetimearray return invalid_comparison(self, other, op) else: other = type(self)._from_sequence(other) self._check_compatible_with(other) result = op(self.view("i8"), other.view("i8")) o_mask = other._isnan if o_mask.any(): result[o_mask] = nat_result if self._hasnans: result[self._isnan] = nat_result return result
def wrapper(self, other): ordinal_op = getattr(self.asi8, opname) if is_list_like(other) and len(other) != len(self): raise ValueError("Lengths must match") if isinstance(other, str): try: other = self._scalar_from_string(other) except ValueError: # string that can't be parsed as Period return invalid_comparison(self, other, op) elif isinstance(other, int): # TODO: sure we want to allow this? we dont for DTA/TDA # 2 tests rely on this other = Period(other, freq=self.freq) result = ordinal_op(other.ordinal) if isinstance(other, Period): self._check_compatible_with(other) result = ordinal_op(other.ordinal) elif other is NaT: result = np.empty(len(self.asi8), dtype=bool) result.fill(nat_result) elif not is_list_like(other): return invalid_comparison(self, other, op) else: if isinstance(other, list): # TODO: could use pd.Index to do inference? other = np.array(other) if not isinstance(other, (np.ndarray, cls)): return invalid_comparison(self, other, op) if is_object_dtype(other): with np.errstate(all="ignore"): result = ops.comp_method_OBJECT_ARRAY( op, self.astype(object), other ) o_mask = isna(other) elif not is_period_dtype(other): # e.g. is_timedelta64_dtype(other) return invalid_comparison(self, other, op) else: assert isinstance(other, cls), type(other) self._check_compatible_with(other) result = ordinal_op(other.asi8) o_mask = other._isnan if o_mask.any(): result[o_mask] = nat_result if self._hasnans: result[self._isnan] = nat_result return result