def __eq__(self, other): """ Pandas/Numpy-style array/series comparison function. :param other: Second operand of a Pandas "==" comparison with the series that wraps this TokenSpanArray. :return: Returns a boolean mask indicating which rows match `other`. """ if isinstance(other, (ABCDataFrame, ABCSeries, ABCIndexClass)): # Rely on pandas to unbox and dispatch to us. return NotImplemented if isinstance(other, TokenSpan) and self.tokens.equals(other.tokens): mask = np.full(len(self), True, dtype=np.bool) mask[self.begin_token != other.begin_token] = False mask[self.end_token != other.end_token] = False return mask elif isinstance(other, TokenSpanArray) and self.tokens.equals( other.tokens): if len(self) != len(other): raise ValueError("Can't compare arrays of differing lengths " "{} and {}".format(len(self), len(other))) return np.logical_and(self.begin_token == other.begin_token, self.end_token == other.end_token) else: # Different tokens, no tokens, unexpected type ==> fall back on superclass return SpanArray.__eq__(self, other)
def __eq__(self, other): """ Pandas/Numpy-style array/series comparison function. :param other: Second operand of a Pandas "==" comparison with the series that wraps this TokenSpanArray. :return: Returns a boolean mask indicating which rows match `other`. """ if isinstance(other, (ABCDataFrame, ABCSeries, ABCIndex)): # Rely on pandas to unbox and dispatch to us. return NotImplemented elif (isinstance(other, TokenSpanArray) and len(self) == len(other) and self.same_tokens(other)): return np.logical_and(self.begin_token == other.begin_token, self.end_token == other.end_token) else: # Different tokens, no tokens, unexpected type ==> fall back on superclass return SpanArray.__eq__(self, other)