code: def __init__(self, sde, **kwargs):
      if not isinstance(sde, adjoint_sde.AdjointSDE):
          raise ValueError(
              f"{METHODS.adjoint_reversible_heun} can only be used for adjoint_method."
          )
      self.strong_order = (
          1.0 if sde.noise_type == NOISE_TYPES.additive else 0.5
      )
      super(AdjointReversibleHeun, self).__init__(sde=sde, **kwargs)
      self.forward_sde = sde.forward_sde
  
      if self.forward_sde.noise_type == NOISE_TYPES.diagonal:
          self._adjoint_of_prod = (
              lambda tensor1, tensor2: tensor1 * tensor2
          )
      else:
          self._adjoint_of_prod = (
              lambda tensor1, tensor2: tensor1.unsqueeze(-1)
              * tensor2.unsqueeze(-2)
          )
  
file_path: torchsde/torchsde/_core/methods/reversible_heun.py
imports: import torch
  from ..None import adjoint_sde
  from ..None import base_solver
  from ..None import misc
  from ...settings import SDE_TYPES, NOISE_TYPES, LEVY_AREA_APPROXIMATIONS, METHODS
label_desc: Use image node_id 1 to create a new AdjointReversibleHeun object from inherited base classes: base_solver with example: obj = AdjointReversibleHeun(sde)