class_docstr: Generate edge feature for the model input preparation:
  as well as do the normalization work.
  Parameters
  ==========
  node_feats : int
      Number of node features
  
  stat : dict
      dictionary which represent the statistics needed for normalization
class_docstr_tok: ["Generate","edge","feature","for","the","model","input","preparation",":","as","well","as","do","the","normalization","work",".","Parameters","==========","node_feats",":","int","Number","of","node","features","stat",":","dict","dictionary","which","represent","the","statistics","needed","for","normalization"]
code: def forward(self, g, node_feature):
      with g.local_scope():
          node_feature = self.normalize_input(node_feature)
          g.ndata["feat"] = node_feature  # Only dynamic feature
          g.apply_edges(fn.u_sub_v("feat", "feat", "e"))
          edge_feature = g.edata["e"]
          return node_feature, edge_feature
  
imports: import copy
  from functools import partial
  import dgl
  import dgl.function
  import dgl.nn
  import torch
  import torch.nn
  from torch.nn import functional
label_desc: Use image node_id 3 for calling the PrepareLayer obj's underlying member method code with example usage: obj.forward(g, node_feature) and returns: node_feature,  edge_feature