code: def _count_upsample(self, m, x, y):
      if m.mode == "linear":
          total_ops = y[0].nelement() * 5  # 2 muls + 3 add
      elif m.mode == "bilinear":
          # https://en.wikipedia.org/wiki/Bilinear_interpolation
          total_ops = y[0].nelement() * 11  # 6 muls + 5 adds
      elif m.mode == "bicubic":
          # https://en.wikipedia.org/wiki/Bicubic_interpolation
          # Product matrix [4x4] x [4x4] x [4x4]
          ops_solve_A = 224  # 128 muls + 96 adds
          ops_solve_p = 35  # 16 muls + 12 adds + 4 muls + 3 adds
          total_ops = y[0].nelement() * (ops_solve_A + ops_solve_p)
      elif m.mode == "trilinear":
          # https://en.wikipedia.org/wiki/Trilinear_interpolation
          # can viewed as 2 bilinear + 1 linear
          total_ops = y[0].nelement() * (13 * 2 + 5)
      else:
          total_ops = 0
  
      return self._get_result(m, total_ops)
  
imports: import functools
  from collections import Counter
  from prettytable import PrettyTable
  import torch
  import torch.nn
  from torch.nn.utils.rnn import PackedSequence
  from nni.compression.base.wrapper import ModuleWrapper
label_desc: Use image node_id 10 for calling the ModelProfiler obj's underlying member method code with example usage: obj._count_upsample(m, x, y) and returns: self