code: def log_int_fixed(n, prec, ln2=None):
      """
      Fast computation of log(n), caching the value for small n,
      intended for zeta sums.
      """
      if n in log_int_cache:
          value, vprec = log_int_cache[n]
          if vprec >= prec:
              return value >> (vprec - prec)
      wp = prec + 10
      if wp <= LOG_TAYLOR_SHIFT:
          if ln2 is None:
              ln2 = ln2_fixed(wp)
          r = bitcount(n)
          x = n << (wp - r)
          v = log_taylor_cached(x, wp) + r * ln2
      else:
          v = to_fixed(mpf_log(from_int(n), wp + 5), wp)
      if n < MAX_LOG_INT_CACHE:
          log_int_cache[n] = (v, wp)
      return v >> (wp - prec)
  
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 21 for calling a global function with example usage: log_int_fixed(n, prec, ln2) and returns: unknown, unknown