docstr: Tests handling both inner_first_order_coeff and inner_second_order_coeff.
  
  We saw previously that the solution of `u_{t} - u_{xx} - 2u_{x} - u = 0` is
  `u = exp(-x) v`, where v solves the diffusion equation. Substitute now
  `u = exp(-x) v` without expanding the derivatives:
  `v_{t} - exp(x)[exp(-x)v]_{xx} - 2exp(x)[exp(-x)v]_{x} - v = 0`.
  Solve this equation and expect the solution of the diffusion equation.
docstr_tok: ["Tests","handling","both","inner_first_order_coeff","and","inner_second_order_coeff",".","We","saw","previously","that","the","solution","of","`","u_","{","t","}","-","u_","{","xx","}","-","2u_","{","x","}","-","u","=","0","`","is","`","u","=","exp","(","-x",")","v","`",",","where","v","solves","the","diffusion","equation",".","Substitute","now","`","u","=","exp","(","-x",")","v","`","without","expanding","the","derivatives",":","`","v_","{","t","}","-","exp","(","x",")","[","exp","(","-x",")","v","]","_","{","xx","}","-","2exp","(","x",")","[","exp","(","-x",")","v","]","_","{","x","}","-","v","=","0","`",".","Solve","this","equation","and","expect","the","solution","of","the","diffusion","equation","."]
code: def testInnerFirstAndSecondOrderCoeff(self):
      """Tests handling both inner_first_order_coeff and inner_second_order_coeff.
  
      We saw previously that the solution of `u_{t} - u_{xx} - 2u_{x} - u = 0` is
      `u = exp(-x) v`, where v solves the diffusion equation. Substitute now
      `u = exp(-x) v` without expanding the derivatives:
      `v_{t} - exp(x)[exp(-x)v]_{xx} - 2exp(x)[exp(-x)v]_{x} - v = 0`.
      Solve this equation and expect the solution of the diffusion equation.
      """
      grid = grids.uniform_grid(
          minimums=[0], maximums=[1], sizes=[501], dtype=tf.float32
      )
      xs = grid[0]
  
      final_t = 0.1
      time_step = 0.001
  
      def second_order_coeff_fn(t, coord_grid):
          del t
          x = coord_grid[0]
          return [[-tf.math.exp(x)]]
  
      def inner_second_order_coeff_fn(t, coord_grid):
          del t
          x = coord_grid[0]
          return [[tf.math.exp(-x)]]
  
      def first_order_coeff_fn(t, coord_grid):
          del t
          x = coord_grid[0]
          return [-2 * tf.math.exp(x)]
  
      def inner_first_order_coeff_fn(t, coord_grid):
          del t
          x = coord_grid[0]
          return [tf.math.exp(-x)]
  
      def zeroth_order_coeff_fn(t, coord_grid):
          del t, coord_grid
          return -1
  
      initial = _reference_pde_initial_cond(xs)
      expected = _reference_pde_solution(xs, final_t)
  
      actual = fd_solvers.solve_forward(
          start_time=0,
          end_time=final_t,
          coord_grid=grid,
          values_grid=initial,
          time_step=time_step,
          second_order_coeff_fn=second_order_coeff_fn,
          first_order_coeff_fn=first_order_coeff_fn,
          zeroth_order_coeff_fn=zeroth_order_coeff_fn,
          inner_second_order_coeff_fn=inner_second_order_coeff_fn,
          inner_first_order_coeff_fn=inner_first_order_coeff_fn,
      )[0]
  
      self.assertAllClose(expected, actual, atol=1e-3, rtol=1e-3)
  
imports: import math
  from absl.testing import parameterized
  import numpy
  import tensorflow.compat.v2
  import tf_quant_finance
  from tensorflow.python.framework import test_util
label_desc: Use image node_id 16 for calling the ParabolicEquationStepperTest obj's underlying member method code with example usage: obj.testInnerFirstAndSecondOrderCoeff() and returns: list, list, list, list, unknown