docstr: Determine whether the difference between `s` and `t` is smaller
  than a given epsilon, either relatively or absolutely.
  
  Both a maximum relative difference and a maximum difference
  ('epsilons') may be specified. The absolute difference is
  defined as `|s-t|` and the relative difference is defined
  as `|s-t|/\max(|s|, |t|)`.
  
  If only one epsilon is given, both are set to the same value.
  If none is given, both epsilons are set to `2^{-p+m}` where
  `p` is the current working precision and `m` is a small
  integer. The default setting typically allows :func:`~mpmath.almosteq`
  to be used to check for mathematical equality
  in the presence of small rounding errors.
  
  **Examples**
  
      >>> from mpmath import *
      >>> mp.dps = 15
      >>> almosteq(3.141592653589793, 3.141592653589790)
      True
      >>> almosteq(3.141592653589793, 3.141592653589700)
      False
      >>> almosteq(3.141592653589793, 3.141592653589700, 1e-10)
      True
      >>> almosteq(1e-20, 2e-20)
      True
      >>> almosteq(1e-20, 2e-20, rel_eps=0, abs_eps=0)
      False
code: def almosteq(ctx, s, t, rel_eps=None, abs_eps=None):
      r"""
      Determine whether the difference between `s` and `t` is smaller
      than a given epsilon, either relatively or absolutely.
  
      Both a maximum relative difference and a maximum difference
      ('epsilons') may be specified. The absolute difference is
      defined as `|s-t|` and the relative difference is defined
      as `|s-t|/\max(|s|, |t|)`.
  
      If only one epsilon is given, both are set to the same value.
      If none is given, both epsilons are set to `2^{-p+m}` where
      `p` is the current working precision and `m` is a small
      integer. The default setting typically allows :func:`~mpmath.almosteq`
      to be used to check for mathematical equality
      in the presence of small rounding errors.
  
      **Examples**
  
          >>> from mpmath import *
          >>> mp.dps = 15
          >>> almosteq(3.141592653589793, 3.141592653589790)
          True
          >>> almosteq(3.141592653589793, 3.141592653589700)
          False
          >>> almosteq(3.141592653589793, 3.141592653589700, 1e-10)
          True
          >>> almosteq(1e-20, 2e-20)
          True
          >>> almosteq(1e-20, 2e-20, rel_eps=0, abs_eps=0)
          False
  
      """
      t = ctx.convert(t)
      if abs_eps is None and rel_eps is None:
          rel_eps = abs_eps = ctx.ldexp(1, -ctx.prec + 4)
      if abs_eps is None:
          abs_eps = rel_eps
      elif rel_eps is None:
          rel_eps = abs_eps
      diff = abs(s - t)
      if diff <= abs_eps:
          return True
      abss = abs(s)
      abst = abs(t)
      if abss < abst:
          err = diff / abst
      else:
          err = diff / abss
      return err <= rel_eps
  
imports: from operator import gt, lt
  from .libmp.backend import xrange
  from .functions.functions import SpecialFunctions
  from .functions.rszeta import RSCache
  from .calculus.quadrature import QuadratureMethods
  from .calculus.inverselaplace import LaplaceTransformInversionMethods
  from .calculus.calculus import CalculusMethods
  from .calculus.optimization import OptimizationMethods
  from .calculus.odes import ODEMethods
  from .matrices.matrices import MatrixMethods
  from .matrices.calculus import MatrixCalculusMethods
  from .matrices.linalg import LinearAlgebraMethods
  from .matrices.eigen import Eigen
  from .identification import IdentificationMethods
  from .visualization import VisualizationMethods
  from .None import libmp
label_desc: Use image node_id 18 for calling the StandardBaseContext obj's underlying member method code with example usage: obj.almosteq(ctx, s, t, rel_eps, abs_eps) and returns: unknown, True