docstr: Args:
      inp_node_features: (B, N, 9)
      inp_adj_features: (B, 4, N, N)
  
  Returns:
      z: [(B, node_num*9), (B, edge_num*4)]
      logdet:  ([B], [B])        
docstr_tok: ["Args",":","inp_node_features",":","(","B",",","N",",","9",")","inp_adj_features",":","(","B",",","4",",","N",",","N",")","Returns",":","z",":","[","(","B",",","node_num","*","9",")",",","(","B",",","edge_num","*","4",")","]","logdet",":","(","[","B","]",",","[","B","]",")"]
code: def forward(self, inp_node_features, inp_adj_features):
      """
      Args:
          inp_node_features: (B, N, 9)
          inp_adj_features: (B, 4, N, N)
  
      Returns:
          z: [(B, node_num*9), (B, edge_num*4)]
          logdet:  ([B], [B])
      """
      inp_node_features_cont = inp_node_features.clone()  # (B, N, 9)
  
      inp_adj_features_cont = inp_adj_features[
          :, :, self.flow_core_edge_masks
      ].clone()  # (B, 4, edge_num)
      inp_adj_features_cont = inp_adj_features_cont.permute(
          0, 2, 1
      ).contiguous()  # (B, edge_num, 4)
  
      z = self.flow_core(
          inp_node_features,
          inp_adj_features,
          inp_node_features_cont,
          inp_adj_features_cont,
      )
      return z
  
file_path: DIG/dig/ggraph/method/GraphDF/model/graphflow.py
imports: import torch
  import torch.nn
  import numpy
  from rdkit import Chem
  from dig.ggraph.utils import check_valency, convert_radical_electrons_to_hydrogens
  from .disgraphaf import DisGraphAF
label_desc: Use image node_id 2 for calling the GraphFlowModel obj's underlying member method code with example usage: obj.forward(inp_node_features, inp_adj_features) and returns: z