scipp.isclose#

scipp.isclose(x, y, *, rtol=None, atol=None, equal_nan=False)#

Checks element-wise if the inputs are close to each other.

Compares values of x and y element by element against absolute and relative tolerances according to (non-symmetric)

abs(x - y) <= atol + rtol * abs(y)

If both x and y have variances, the variances are also compared between elements. In this case, both values and variances must be within the computed tolerance limits. That is:

abs(x.value - y.value) <= atol + rtol * abs(y.value) and
  abs(sqrt(x.variance) - sqrt(y.variance)) <= atol + rtol * abs(sqrt(y.variance))

Attention

Vectors and matrices are compared element-wise. This is not necessarily a good measure for the similarity of spatial dtypes like scipp.DType.rotation3 or scipp.Dtype.affine_transform3 (see scipp.spatial).

Parameters:
  • x (Variable) – Left input.

  • y (Variable) – Right input.

  • rtol (Variable, default: None) – Tolerance value relative (to y). Can be a scalar or non-scalar. Defaults to scalar 1e-5 if unset.

  • atol (Variable, default: None) – Tolerance value absolute. Can be a scalar or non-scalar. Defaults to scalar 1e-8 if unset and takes units from y arg.

  • equal_nan (bool, default: False) – If true, non-finite values at the same index in (x, y) are treated as equal. Signbit must match for infs.

Returns:

Variable – Variable same size as input. Element True if absolute diff of value <= atol + rtol * abs(y), otherwise False.

See also

scipp.allclose

Equivalent of sc.all(sc.isclose(...)).value.

Examples

Compare with default tolerances:

>>> import scipp as sc
>>> x = sc.array(dims=['x'], values=[1.0, 2.0, 3.0], unit='m')
>>> y = sc.array(dims=['x'], values=[1.0001, 2.0, 2.999], unit='m')
>>> sc.isclose(x, y)
<scipp.Variable> (x: 3)       bool        <no unit>  [False, True, False]

With custom tolerances:

>>> sc.isclose(x, y, rtol=sc.scalar(1e-3), atol=sc.scalar(1e-3, unit='m'))
<scipp.Variable> (x: 3)       bool        <no unit>  [True, True, True]