code: def update(self, labels, preds):
      mx.metric.check_label_shapes(labels, preds)
      label_weight = labels[0].asnumpy()
      preds = preds[0].asnumpy()
      tmp = []
      for i in range(preds.shape[0]):
          tmp.append((label_weight[i], preds[i][1]))
      tmp = sorted(tmp, key=itemgetter(1), reverse=True)
      label_sum = label_weight.sum()
      if label_sum == 0 or label_sum == label_weight.size:
          return
  
      label_one_num = np.count_nonzero(label_weight)
      label_zero_num = len(label_weight) - label_one_num
      total_area = label_zero_num * label_one_num
      height = 0
      width = 0
      area = 0
      for a, _ in tmp:
          if a == 1.0:
              height += 1.0
          else:
              width += 1.0
              area += height
  
      self.sum_metric += area / total_area
      self.num_inst += 1
  
imports: import logging
  import time
  from operator import attrgetter, itemgetter
  import dgl
  import mxnet
  import numpy
  from dgl.nn.mxnet import GraphConv
  from dgl.utils import toindex
  from gluoncv.data.batchify import Pad
  from gluoncv.model_zoo import get_model
  from mxnet import gluon, nd
  from mxnet.gluon import nn
label_desc: Use image node_id 2 for calling the AUCMetric obj's underlying member method code with example usage: obj.update(labels, preds) without return types