code: def test_pow(self):
      f, g = self.f, self.g
  
      self.check_constant_output(f**g, 3.0**2)
      self.check_constant_output(2**f, 2.0**3)
      self.check_constant_output(f**2, 3.0**2)
  
      self.check_constant_output((f + g) ** 2, (3.0 + 2.0) ** 2)
      self.check_constant_output(2 ** (f + g), 2 ** (3.0 + 2.0))
  
      self.check_constant_output(f ** (f**g), 3.0 ** (3.0**2.0))
      self.check_constant_output((f**f) ** g, (3.0**3.0) ** 2.0)
  
      self.check_constant_output((f**g) ** (f**g), 9.0**9.0)
      self.check_constant_output((f**g) ** (g**f), 9.0**8.0)
      self.check_constant_output((g**f) ** (f**g), 8.0**9.0)
      self.check_constant_output((g**f) ** (g**f), 8.0**8.0)
  
imports: from itertools import permutations
  from operator import add, ge, gt, le, lt, methodcaller, mul, ne, sub
  from string import ascii_uppercase
  from unittest import TestCase
  import numpy
  from numpy import arange, array, eye, float64, full, isnan, zeros
  from pandas import DataFrame, date_range, Int64Index
  from catalyst.pipeline import Factor, Filter
  from catalyst.pipeline.expression import NumericalExpression, NUMEXPR_MATH_FUNCS
  from catalyst.testing import check_allclose
  from catalyst.utils.numpy_utils import datetime64ns_dtype, float64_dtype
label_desc: Use image node_id 15 for calling the NumericalExpressionTestCase obj's underlying member method code with example usage: obj.test_pow() without return types