code: def atan_taylor_get_cached(n, prec):
      # Taylor series with caching wins up to huge precisions
      # To avoid unnecessary precomputation at low precision, we
      # do it in steps
      # Round to next power of 2
      prec2 = (1 << (bitcount(prec - 1))) + 20
      dprec = prec2 - prec
      if (n, prec2) in atan_taylor_cache:
          a, atan_a = atan_taylor_cache[n, prec2]
      else:
          a = n << (prec2 - ATAN_TAYLOR_SHIFT)
          atan_a = atan_newton(a, prec2)
          atan_taylor_cache[n, prec2] = (a, atan_a)
      return (a >> dprec), (atan_a >> dprec)
  
imports: import math
  from bisect import bisect
  from .backend import xrange
  from .backend import MPZ, MPZ_ZERO, MPZ_ONE, MPZ_TWO, MPZ_FIVE, BACKEND
  from .libmpf import round_floor, round_ceiling, round_down, round_up, round_nearest, round_fast, ComplexResult, bitcount, bctable, lshift, rshift, giant_steps, sqrt_fixed, from_int, to_int, from_man_exp, to_fixed, to_float, from_float, from_rational, normalize, fzero, fone, fnone, fhalf, finf, fninf, fnan, mpf_cmp, mpf_sign, mpf_abs, mpf_pos, mpf_neg, mpf_add, mpf_sub, mpf_mul, mpf_div, mpf_shift, mpf_rdiv_int, mpf_pow_int, mpf_sqrt, reciprocal_rnd, negative_rnd, mpf_perturb, isqrt_fast
  from .libintmath import ifib
label_desc: Use image node_id 29 for calling a global function with example usage: atan_taylor_get_cached(n, prec) and returns: unknown,  unknown