code: def constant_memo(f):
      """
      Decorator for caching computed values of mathematical
      constants. This decorator should be applied to a
      function taking a single argument prec as input and
      returning a fixed-point value with the given precision.
      """
      f.memo_prec = -1
      f.memo_val = None
  
      def g(prec, **kwargs):
          memo_prec = f.memo_prec
          if prec <= memo_prec:
              return f.memo_val >> (memo_prec - prec)
          newprec = int(prec * 1.05 + 10)
          f.memo_val = f(newprec, **kwargs)
          f.memo_prec = newprec
          return f.memo_val >> (newprec - prec)
  
      g.__name__ = f.__name__
      g.__doc__ = f.__doc__
      return g
  
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 1 for calling a global function with example usage: constant_memo(f) and returns: g, unknown, unknown