code: def send_backward_recv_backward(
      self,
      model_chunk_id_send: int,
      model_chunk_id_recv: int,
      input_tensor_grad: Any,
      send_prior: bool,
  ):
      if send_prior:
          self.send_backward(model_chunk_id_send, input_tensor_grad)
          output_tensor_grad = self.recv_backward(model_chunk_id_recv)
      else:
          output_tensor_grad = self.recv_backward(model_chunk_id_recv)
          self.send_backward(model_chunk_id_send, input_tensor_grad)
  
      return output_tensor_grad
  
imports: from functools import partial
  from typing import Any, Callable, Dict, Iterable, List, Optional, Union
  import torch
  import torch.cuda
  from torch.nn import Module, ModuleList
  from torch.utils._pytree import tree_map
  from colossalai.interface import OptimizerWrapper
  from colossalai.pipeline.p2p import PipelineP2PCommunication, create_send_metadata
  from colossalai.pipeline.stage_manager import PipelineStageManager
  from colossalai.utils.device import get_current_device
  from ._utils import detach, get_batch_size, get_micro_batch, merge_batch, model_forward, retain_grad, to_device
  from .base import PipelineSchedule
label_desc: Use image node_id 12 for calling the InterleavedSchedule obj's underlying member method code with example usage: obj.send_backward_recv_backward(model_chunk_id_send, model_chunk_id_recv, input_tensor_grad, send_prior) and returns: output_tensor_grad