docstr: Tests handling coefficients under the mixed second derivative.
  
  Take the equation from the previous test,
  `u_{t} = u_{xx} + 5u_{zz} - 2u_{xz}` and substitute `u = exp(xz) w`,
  leaving the exponent under the derivatives:
  `w_{t} = exp(-xz) [exp(xz) u]_{xx} + 5 exp(-xz) [exp(xz) u]_{zz}
  - 2 exp(-xz) [exp(xz) u]_{xz}`.
  We now have a coefficient under the mixed derivative. Test that the solution
  is `w = exp(-xz) u`, where u is from the previous test.
docstr_tok: ["Tests","handling","coefficients","under","the","mixed","second","derivative",".","Take","the","equation","from","the","previous","test",",","`","u_","{","t","}","=","u_","{","xx","}","+","5u_","{","zz","}","-","2u_","{","xz","}","`","and","substitute","`","u","=","exp","(","xz",")","w","`",",","leaving","the","exponent","under","the","derivatives",":","`","w_","{","t","}","=","exp","(","-xz",")","[","exp","(","xz",")","u","]","_","{","xx","}","+","5","exp","(","-xz",")","[","exp","(","xz",")","u","]","_","{","zz","}","-","2","exp","(","-xz",")","[","exp","(","xz",")","u","]","_","{","xz","}","`",".","We","now","have","a","coefficient","under","the","mixed","derivative",".","Test","that","the","solution","is","`","w","=","exp","(","-xz",")","u","`",",","where","u","is","from","the","previous","test","."]
code: def testInnerMixedSecondOrderCoeffs(self):
      """Tests handling coefficients under the mixed second derivative.
  
      Take the equation from the previous test,
      `u_{t} = u_{xx} + 5u_{zz} - 2u_{xz}` and substitute `u = exp(xz) w`,
      leaving the exponent under the derivatives:
      `w_{t} = exp(-xz) [exp(xz) u]_{xx} + 5 exp(-xz) [exp(xz) u]_{zz}
      - 2 exp(-xz) [exp(xz) u]_{xz}`.
      We now have a coefficient under the mixed derivative. Test that the solution
      is `w = exp(-xz) u`, where u is from the previous test.
      """
      grid = grids.uniform_grid(
          minimums=[0, 0],
          maximums=[1, 1],
          sizes=[201, 251],
          dtype=tf.float32,
      )
  
      final_t = 0.1
      time_step = 0.002
  
      def second_order_coeff_fn(t, coord_grid):
          del (t,)
          z, x = tf.meshgrid(*coord_grid, indexing="ij")
          exp = tf.math.exp(-z * x)
          return [[-5 * exp, exp], [None, -exp]]
  
      def inner_second_order_coeff_fn(t, coord_grid):
          del (t,)
          z, x = tf.meshgrid(*coord_grid, indexing="ij")
          exp = tf.math.exp(z * x)
          return [[exp, exp], [None, exp]]
  
      @dirichlet
      def boundary_lower_z(t, coord_grid):
          x = coord_grid[1]
          return _reference_pde_solution(
              x, t
          ) * _reference_pde_solution(x / 2, t)
  
      @dirichlet
      def boundary_upper_z(t, coord_grid):
          x = coord_grid[1]
          return (
              tf.exp(-x)
              * _reference_pde_solution(x, t)
              * _reference_pde_solution((x + 1) / 2, t)
          )
  
      z, x = tf.meshgrid(*grid, indexing="ij")
      exp = tf.math.exp(-z * x)
      initial = exp * (
          _reference_pde_initial_cond(x)
          * _reference_pde_initial_cond((x + z) / 2)
      )
      expected = exp * (
          _reference_pde_solution(x, final_t)
          * _reference_pde_solution((x + z) / 2, 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,
          inner_second_order_coeff_fn=inner_second_order_coeff_fn,
          boundary_conditions=[
              (boundary_lower_z, boundary_upper_z),
              (_zero_boundary, _zero_boundary),
          ],
      )[0]
  
      self.assertAllClose(expected, actual, atol=1e-3, rtol=1e-3)
  
imports: 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 23 for calling the MultidimParabolicEquationStepperTest obj's underlying member method code with example usage: obj.testInnerMixedSecondOrderCoeffs() and returns: list, list, unknown, unknown