code: def normalize_edge_weights(graph, device, num_ew_channels):
      degs = graph.in_degrees().float()
      degs = torch.clamp(degs, min=1)
      norm = torch.pow(degs, 0.5)
      norm = norm.to(args["device"])
      graph.ndata["norm"] = norm.unsqueeze(1)
      graph.apply_edges(fn.e_div_u("feat", "norm", "feat"))
      graph.apply_edges(fn.e_div_v("feat", "norm", "feat"))
      for channel in range(num_ew_channels):
          graph.edata["feat_" + str(channel)] = graph.edata["feat"][
              :, channel : channel + 1
          ]
  
file_path: dgl/examples/pytorch/ogb/ogbn-proteins/main_proteins_full_dgl.py
imports: import os
  import time
  import dgl.function
  import numpy
  import torch
  import torch.nn
  import torch.nn.functional
  from ogb.nodeproppred import Evaluator
  from ogb.nodeproppred.dataset_dgl import DglNodePropPredDataset
  from torch.optim import Adam
  from torch.optim.lr_scheduler import ReduceLROnPlateau
  from torch.utils.tensorboard import SummaryWriter
  from utils import load_model, set_random_seed
label_desc: Use image node_id 1 for calling a global function with example usage: normalize_edge_weights(graph, device, num_ew_channels) without return types