def allclose (a, b, masked_equal=True, rtol=<NUM_LIT>, atol=<NUM_LIT>):
x = masked_array(a, copy=False)<EOL>y = masked_array(b, copy=False)<EOL>dtype = np.result_type(y, <NUM_LIT:1.>)<EOL>if y.dtype != dtype:<EOL><INDENT>y = masked_array(y, dtype=dtype, copy=False)<EOL><DEDENT>m = mask_or(getmask(x), getmask(y))<EOL>xinf = np.isinf(masked_array(x, copy=False, mask=m)).filled(False)<EOL>if not np.all(xinf == filled(np.isinf(y), False)):<EOL><INDENT>return False<EOL><DEDENT>if not np.any(xinf):<EOL><INDENT>d = filled(umath.less_equal(umath.absolute(x - y),<EOL>atol + rtol * umath.absolute(y)),<EOL>masked_equal)<EOL>return np.all(d)<EOL><DEDENT>if not np.all(filled(x[xinf] == y[xinf], masked_equal)):<EOL><INDENT>return False<EOL><DEDENT>x = x[~xinf]<EOL>y = y[~xinf]<EOL>d = filled(umath.less_equal(umath.absolute(x - y),<EOL>atol + rtol * umath.absolute(y)),<EOL>masked_equal)<EOL>return np.all(d)<EOL>
Returns True if two arrays are element-wise equal within a tolerance.

This function is equivalent to `allclose` except that masked values
are treated as equal (default) or unequal, depending on the `masked_equal`
argument.

Parameters
----------
a, b : array_like
    Input arrays to compare.
masked_equal : bool, optional
    Whether masked values in `a` and `b` are considered equal (True) or not
    (False). They are considered equal by default.
rtol : float, optional
    Relative tolerance. The relative difference is equal to ``rtol * b``.
    Default is 1e-5.
atol : float, optional
    Absolute tolerance. The absolute difference is equal to `atol`.
    Default is 1e-8.

Returns
-------
y : bool
    Returns True if the two arrays are equal within the given
    tolerance, False otherwise. If either array contains NaN, then
    False is returned.

See Also
--------
all, any
numpy.allclose : the non-masked `allclose`.

Notes
-----
If the following equation is element-wise True, then `allclose` returns
True::

  absolute(`a` - `b`) <= (`atol` + `rtol` * absolute(`b`))

Return True if all elements of `a` and `b` are equal subject to
given tolerances.

Examples
--------
>>> a = ma.array([1e10, 1e-7, 42.0], mask=[0, 0, 1])
>>> a
masked_array(data = [10000000000.0 1e-07 --],
             mask = [False False  True],
       fill_value = 1e+20)
>>> b = ma.array([1e10, 1e-8, -42.0], mask=[0, 0, 1])
>>> ma.allclose(a, b)
False

>>> a = ma.array([1e10, 1e-8, 42.0], mask=[0, 0, 1])
>>> b = ma.array([1.00001e10, 1e-9, -42.0], mask=[0, 0, 1])
>>> ma.allclose(a, b)
True
>>> ma.allclose(a, b, masked_equal=False)
False

Masked values are not compared directly.

>>> a = ma.array([1e10, 1e-8, 42.0], mask=[0, 0, 1])
>>> b = ma.array([1.00001e10, 1e-9, 42.0], mask=[0, 0, 1])
>>> ma.allclose(a, b)
True
>>> ma.allclose(a, b, masked_equal=False)
False