code: def extrapolation_step():
      """Creates a stepper function with Extrapolation time marching scheme.
  
      Extrapolation scheme combines two half-steps and the full time step to obtain
      desirable properties. See more details below in `extrapolation_scheme`.
  
      It is slower than Crank-Nicolson scheme, but deals better with value grids
      that have discontinuities. Consider also `oscillation_damped_crank_nicolson`,
      an efficient combination of Crank-Nicolson and Extrapolation schemes.
  
      Returns:
        Callable to be used in finite-difference PDE solvers (see fd_solvers.py).
      """
  
      def step_fn(
          time,
          next_time,
          coord_grid,
          value_grid,
          boundary_conditions,
          second_order_coeff_fn,
          first_order_coeff_fn,
          zeroth_order_coeff_fn,
          inner_second_order_coeff_fn,
          inner_first_order_coeff_fn,
          num_steps_performed,
          dtype=None,
          name=None,
      ):
          """Performs the step."""
          del num_steps_performed
          name = name or "extrapolation_step"
          return parabolic_equation_step(
              time,
              next_time,
              coord_grid,
              value_grid,
              boundary_conditions,
              second_order_coeff_fn,
              first_order_coeff_fn,
              zeroth_order_coeff_fn,
              inner_second_order_coeff_fn,
              inner_first_order_coeff_fn,
              time_marching_scheme=extrapolation_scheme,
              dtype=dtype,
              name=name,
          )
  
      return step_fn
  
imports: from tf_quant_finance.math.pde.steppers.implicit import implicit_scheme
  from tf_quant_finance.math.pde.steppers.parabolic_equation_stepper import parabolic_equation_step
label_desc: Use image node_id 1 for calling a global function with example usage: extrapolation_step() and returns: step_fn, parabolic_equation_step