code: def get_edge_data(
      self,
      u: NodeKey,
      v: NodeKey,
      key: EdgeKey | None = None,
      default: EdgeValue | None = None,
  ):
      if self.key_to_id is not None:
          try:
              u = self.key_to_id[u]
              v = self.key_to_id[v]
          except KeyError:
              return default
      else:
          try:
              if u < 0 or v < 0 or u >= self._N or v >= self._N:
                  return default
          except TypeError:
              return default
      mask = (self.src_indices == u) & (self.dst_indices == v)
      if not mask.any():
          return default
      if self.edge_keys is None:
          if self.edge_indices is None:
              self._calculate_edge_indices()
          if key is not None:
              try:
                  mask = mask & (self.edge_indices == key)
              except TypeError:
                  return default
      indices = cp.nonzero(mask)[0]
      if indices.size == 0:
          return default
      edge_keys = self.edge_keys
      if key is not None and edge_keys is not None:
          mask[
              [i for i in indices.tolist() if edge_keys[i] != key]
          ] = False
          indices = cp.nonzero(mask)[0]
          if indices.size == 0:
              return default
      if key is not None:
          [index] = indices.tolist()
          return {
              k: v[index].tolist()
              for k, v in self.edge_values.items()
              if k not in self.edge_masks or self.edge_masks[k][index]
          }
      return {
          edge_keys[index]
          if edge_keys is not None
          else index: {
              k: v[index].tolist()
              for k, v in self.edge_values.items()
              if k not in self.edge_masks or self.edge_masks[k][index]
          }
          for index in indices.tolist()
      }
  
imports: from __future__ import annotations
  from copy import deepcopy
  from typing import TYPE_CHECKING, ClassVar
  import cupy
  import networkx
  import numpy
  import nx_cugraph
  from ..utils import index_dtype
  from .graph import Graph
label_desc: Use image node_id 15 for calling the MultiGraph obj's underlying member method code with example usage: obj.get_edge_data(u, v, key, default) and returns: unknown, default, default, unknown, default, default, default, default, default