code: def pulse_odegen_qnode_wrapper(self, qnode, targs, tkwargs):
      """A custom QNode wrapper for the gradient transform :func:`~.pulse_odegen`.
      It raises an error, so that applying ``pulse_odegen`` to a ``QNode`` directly
      is not supported.
      """
      # pylint:disable=unused-argument
      transform_name = "pulse generator parameter-shift"
      raise_pulse_diff_on_qnode(transform_name)
  
file_path: pennylane/pennylane/gradients/pulse_gradient_odegen.py
imports: from typing import Callable, Sequence
  from functools import partial
  import numpy
  import pennylane
  from pennylane.pulse import ParametrizedEvolution
  from pennylane.ops.qubit.special_unitary import pauli_basis_strings, _pauli_decompose
  from pennylane import transform
  from .parameter_shift import _make_zero_rep
  from .pulse_gradient import _assert_has_jax, raise_pulse_diff_on_qnode
  from .gradient_transform import _all_zero_grad, assert_no_state_returns, assert_no_tape_batching, assert_no_variance, choose_trainable_params, find_and_validate_gradient_methods, _no_trainable_grad, reorder_grads
label_desc: Use image node_id 9 for calling a global function with example usage: pulse_odegen_qnode_wrapper(qnode, targs, tkwargs) without return types