code: def loggamma(x):
      if type(x) not in (float, complex):
          try:
              x = float(x)
          except (ValueError, TypeError):
              x = complex(x)
      try:
          xreal = x.real
          ximag = x.imag
      except AttributeError:  # py2.5
          xreal = x
          ximag = 0.0
      # Reflection formula
      # http://functions.wolfram.com/GammaBetaErf/LogGamma/16/01/01/0003/
      if xreal < 0.0:
          if abs(x) < 0.5:
              v = log(gamma(x))
              if ximag == 0:
                  v = v.conjugate()
              return v
          z = 1 - x
          try:
              re = z.real
              im = z.imag
          except AttributeError:  # py2.5
              re = z
              im = 0.0
          refloor = floor(re)
          if im == 0.0:
              imsign = 0
          elif im < 0.0:
              imsign = -1
          else:
              imsign = 1
          return (
              (-pi * 1j) * abs(refloor) * (1 - abs(imsign))
              + logpi
              - log(sinpi(z - refloor))
              - loggamma(z)
              + 1j * pi * refloor * imsign
          )
      if x == 1.0 or x == 2.0:
          return x * 0
      p = 0.0
      while abs(x) < 11:
          p -= log(x)
          x += 1.0
      s = 0.918938533204672742 + (x - 0.5) * log(x) - x
      r = 1.0 / x
      r2 = r * r
      s += 0.083333333333333333333 * r
      r *= r2
      s += -0.0027777777777777777778 * r
      r *= r2
      s += 0.00079365079365079365079 * r
      r *= r2
      s += -0.0005952380952380952381 * r
      r *= r2
      s += 0.00084175084175084175084 * r
      r *= r2
      s += -0.0019175269175269175269 * r
      r *= r2
      s += 0.0064102564102564102564 * r
      r *= r2
      s += -0.02955065359477124183 * r
      return s + p
  
imports: import operator
  import math
  import cmath
label_desc: Use image node_id 16 for calling a global function with example usage: loggamma(x) and returns: unknown, unknown, unknown, v