def __eq__(self, other): """Returns True if `self` is equal `other`, False otherwise""" # object identity if self is other: return True # quick tests on attributes if self.shape != other.shape: return False if self.dtype != other.dtype: return False # properties equality if not dict_equal(self.properties, other.properties): return False # timestamps equality if not np.array_equal(self.times, other.times): return False # features matrices equality if not np.array_equal(self.data, other.data): return False return True
def is_close(self, other, rtol=1e-5, atol=1e-8): """Returns True if `self` is approximately equal to `other` Parameters ---------- other : Features The Features instance to be compared to this one rtol : float, optional Relative tolerance atol : float, optional Absolute tolerance Returns ------- equal : bool True if these features are almost equal to the `other` See Also -------- FeaturesCollection.is_close, numpy.allclose """ if self is other: return True if self.shape != other.shape: return False if not dict_equal(self.properties, other.properties): return False if not np.array_equal(self.times, other.times): return False if not np.allclose(self.data, other.data, atol=atol, rtol=rtol): return False return True