code: def drop_path(
      input: torch.Tensor,
      drop_prob: float = 0.0,
      training: bool = False,
  ) -> torch.Tensor:
      """
      Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).
  
      Comment by Ross Wightman: This is the same as the DropConnect impl I created for EfficientNet, etc networks,
      however, the original name is misleading as 'Drop Connect' is a different form of dropout in a separate paper...
      See discussion: https://github.com/tensorflow/tpu/issues/494#issuecomment-532968956 ... I've opted for changing the
      layer and argument names to 'drop path' rather than mix DropConnect as a layer name and use 'survival rate' as the
      argument.
      """
      if drop_prob == 0.0 or not training:
          return input
      keep_prob = 1 - drop_prob
      shape = (input.shape[0],) + (1,) * (
          input.ndim - 1
      )  # work with diff dim tensors, not just 2D ConvNets
      random_tensor = keep_prob + torch.rand(
          shape, dtype=input.dtype, device=input.device
      )
      random_tensor.floor_()  # binarize
      output = input.div(keep_prob) * random_tensor
      return output
  
imports: import math
  from collections import OrderedDict
  from typing import Optional, Tuple, Union
  import torch
  import torch.utils.checkpoint
  from torch import nn
  from torch.nn import BCEWithLogitsLoss, CrossEntropyLoss, MSELoss
  from ....activations import ACT2FN
  from ....modeling_outputs import BaseModelOutputWithNoAttention, BaseModelOutputWithPoolingAndNoAttention, ImageClassifierOutputWithNoAttention
  from ....modeling_utils import PreTrainedModel
  from ....utils import add_code_sample_docstrings, add_start_docstrings, add_start_docstrings_to_model_forward, logging
  from .configuration_van import VanConfig
label_desc: Use image node_id 1 for calling a global function with example usage: drop_path(input, drop_prob, training) and returns: output, input