code: def drop_path(x, drop_prob: float = 0.0, training: bool = False):
      """
      Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).
      "Deep Networks with Stochastic Depth", https://arxiv.org/pdf/1603.09382.pdf
  
      This function is taken from the rwightman.
      It can be seen here:
      https://github.com/rwightman/pytorch-image-models/blob/master/timm/models/layers/drop.py#L140
      """
      if drop_prob == 0.0 or not training:
          return x
      keep_prob = 1 - drop_prob
      shape = (x.shape[0],) + (1,) * (
          x.ndim - 1
      )  # work with diff dim tensors, not just 2D ConvNets
      random_tensor = keep_prob + torch.rand(
          shape, dtype=x.dtype, device=x.device
      )
      random_tensor.floor_()  # binarize
      output = x.div(keep_prob) * random_tensor
      return output
  
imports: import math
  import copy
  from functools import partial
  from collections import OrderedDict
  from typing import Optional, Callable
  import torch
  import torch.nn
  from torch import Tensor
  from torch.nn import functional
label_desc: Use image node_id 2 for calling a global function with example usage: drop_path(x, drop_prob, training) and returns: output, x