code: def _f_uncorrected(self, f, y, adj_y, requires_grad):
      vjp_y_and_params = misc.vjp(
          outputs=f,
          inputs=[y] + self.params,
          grad_outputs=adj_y,
          allow_unused=True,
          retain_graph=True,
          create_graph=requires_grad,
      )
      if not requires_grad:
          # We had to build a computational graph to be able to compute the above vjp.
          # However, if we don't require_grad then we don't need to backprop through this function, so we should
          # delete the computational graph to avoid a memory leak. (Which for example would keep the local
          # variable `y` in memory: f->grad_fn->...->AccumulatedGrad->y.)
  
          # Note: `requires_grad` might not be equal to what `torch.is_grad_enabled` returns here.
          f = f.detach()
      return misc.flatten((-f, *vjp_y_and_params)).unsqueeze(0)
  
imports: import torch
  from .None import base_sde
  from .None import misc
  from ..settings import NOISE_TYPES, SDE_TYPES
  from ..types import Sequence, TensorOrTensors
label_desc: Use image node_id 3 for calling the AdjointSDE obj's underlying member method code with example usage: obj._f_uncorrected(f, y, adj_y, requires_grad) and returns: misc