code: def mpf_pow(s, t, prec, rnd=round_fast):
      """
      Compute s**t. Raises ComplexResult if s is negative and t is
      fractional.
      """
      ssign, sman, sexp, sbc = s
      tsign, tman, texp, tbc = t
      if ssign and texp < 0:
          raise ComplexResult(
              "negative number raised to a fractional power"
          )
      if texp >= 0:
          return mpf_pow_int(
              s, (-1) ** tsign * (tman << texp), prec, rnd
          )
      # s**(n/2) = sqrt(s)**n
      if texp == -1:
          if tman == 1:
              if tsign:
                  return mpf_div(
                      fone,
                      mpf_sqrt(s, prec + 10, reciprocal_rnd[rnd]),
                      prec,
                      rnd,
                  )
              return mpf_sqrt(s, prec, rnd)
          else:
              if tsign:
                  return mpf_pow_int(
                      mpf_sqrt(s, prec + 10, reciprocal_rnd[rnd]),
                      -tman,
                      prec,
                      rnd,
                  )
              return mpf_pow_int(
                  mpf_sqrt(s, prec + 10, rnd), tman, prec, rnd
              )
      # General formula: s**t = exp(t*log(s))
      # TODO: handle rnd direction of the logarithm carefully
      c = mpf_log(s, prec + 10, rnd)
      return mpf_exp(mpf_mul(t, c), prec, rnd)
  
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 16 for calling a global function with example usage: mpf_pow(s, t, prec, rnd) and returns: mpf_exp, mpf_pow_int, mpf_sqrt, mpf_pow_int, mpf_div, mpf_pow_int