code: def evalf_sum(expr: "Sum", prec: int, options: OPT_DICT) -> TMP_RES:
      from .numbers import Float
  
      if "subs" in options:
          expr = expr.subs(options["subs"])
      func = expr.function
      limits = expr.limits
      if len(limits) != 1 or len(limits[0]) != 3:
          raise NotImplementedError
      if func.is_zero:
          return None, None, prec, None
      prec2 = prec + 10
      try:
          n, a, b = limits[0]
          if (
              b is not S.Infinity
              or a is S.NegativeInfinity
              or a != int(a)
          ):
              raise NotImplementedError
          # Use fast hypergeometric summation if possible
          v = hypsum(func, n, int(a), prec2)
          delta = prec - fastlog(v)
          if fastlog(v) < -10:
              v = hypsum(func, n, int(a), delta)
          return v, None, min(prec, delta), None
      except NotImplementedError:
          # Euler-Maclaurin summation for general series
          eps = Float(2.0) ** (-prec)
          for i in range(1, 5):
              m = n = 2**i * prec
              s, err = expr.euler_maclaurin(
                  m=m, n=n, eps=eps, eval_integral=False
              )
              err = err.evalf()
              if err is S.NaN:
                  raise NotImplementedError
              if err <= eps:
                  break
          err = fastlog(evalf(abs(err), 20, options)[0])
          re, im, re_acc, im_acc = evalf(s, prec2, options)
          if re_acc is None:
              re_acc = -err
          if im_acc is None:
              im_acc = -err
          return re, im, re_acc, im_acc
  
imports: from __future__ import annotations
  from typing import Tuple, Optional, Union, Callable, List, Dict, Type, TYPE_CHECKING, Any, overload
  import math
  import mpmath.libmp
  from mpmath import make_mpc, make_mpf, mp, mpc, mpf, nsum, quadts, quadosc, workprec
  from mpmath import inf
  from mpmath.libmp import from_int, from_man_exp, from_rational, fhalf, fnan, finf, fninf, fnone, fone, fzero, mpf_abs, mpf_add, mpf_atan, mpf_atan2, mpf_cmp, mpf_cos, mpf_e, mpf_exp, mpf_log, mpf_lt, mpf_mul, mpf_neg, mpf_pi, mpf_pow, mpf_pow_int, mpf_shift, mpf_sin, mpf_sqrt, normalize, round_nearest, to_int, to_str
  from mpmath.libmp import bitcount
  from mpmath.libmp.backend import MPZ
  from mpmath.libmp.libmpc import _infs_nan
  from mpmath.libmp.libmpf import dps_to_prec, prec_to_dps
  from .sympify import sympify
  from .singleton import S
  from sympy.external.gmpy import SYMPY_INTS
  from sympy.utilities.iterables import is_sequence
  from sympy.utilities.lambdify import lambdify
  from sympy.utilities.misc import as_int
label_desc: Use image node_id 40 for calling a global function with example usage: evalf_sum(expr, prec, options) and returns: None,  None,  prec,  None, v,  None,  min,  None, re,  im,  re_acc,  im_acc