class_docstr: Implementation of a multiscale attention block. Compare to a conventional attention
  block, a multiscale attention block optionally supports pooling (either
  before or after qkv projection). If pooling is not used, a multiscale attention
  block is equivalent to a conventional attention block.
  
  ::
                                 Input
                                   |
                  |----------------|-----------------|
                  ↓                ↓                 ↓
                Linear           Linear            Linear
                  &                &                 &
               Pool (Q)         Pool (K)          Pool (V)
                  → -------------- ←                 |
                           ↓                         |
                     MatMul & Scale                  |
                           ↓                         |
                        Softmax                      |
                           → ----------------------- ←
                                       ↓
                                 MatMul & Scale
                                       ↓
                                    DropOut
code: def _get_qkv_length(
      self,
      q_shape: List[int],
      k_shape: List[int],
      v_shape: List[int],
  ) -> Tuple[int]:
      q_N = (
          numpy.prod(q_shape) + 1
          if self.has_cls_embed
          else numpy.prod(q_shape)
      )
      k_N = (
          numpy.prod(k_shape) + 1
          if self.has_cls_embed
          else numpy.prod(k_shape)
      )
      v_N = (
          numpy.prod(v_shape) + 1
          if self.has_cls_embed
          else numpy.prod(v_shape)
      )
      return q_N, k_N, v_N
  
imports: from typing import List, Optional, Tuple
  import numpy
  import torch
  import torch.fx
  import torch.nn
  from torch.nn.common_types import _size_3_t
  from .drop_path import DropPath
label_desc: Use image node_id 4 for calling the MultiScaleAttention obj's underlying member method code with example usage: obj._get_qkv_length(q_shape, k_shape, v_shape) and returns: q_N,  k_N,  v_N