code: def read_input(input_folder):
      X = pd.read_csv(f"{input_folder}/X.csv")
      y = pd.read_csv(f"{input_folder}/y.csv")
  
      categorical_columns = []
      if os.path.exists(f"{input_folder}/cat_features.txt"):
          with open(f"{input_folder}/cat_features.txt") as f:
              for line in f:
                  if line.strip():
                      categorical_columns.append(line.strip())
  
      cat_features = None
      if categorical_columns:
          columns = X.columns
          cat_features = np.where(columns.isin(categorical_columns))[0]
  
          for col in list(columns[cat_features]):
              X[col] = X[col].astype(str)
  
      gs, _ = load_graphs(f"{input_folder}/graph.dgl")
      graph = gs[0]
  
      with open(f"{input_folder}/masks.json") as f:
          masks = json.load(f)
  
      return graph, X, y, cat_features, masks
  
file_path: dgl/examples/pytorch/bgnn/run.py
imports: import json
  import os
  import numpy
  import pandas
  import torch
  import torch.nn.functional
  from BGNN import BGNNPredictor
  from category_encoders import CatBoostEncoder
  from dgl.data.utils import load_graphs
  from dgl.nn.pytorch import AGNNConv, APPNPConv, ChebConv, GATConv, GraphConv
  from sklearn import preprocessing
  from torch.nn import Dropout, ELU, Linear, ReLU, Sequential
label_desc: Use image node_id 1 for calling a global function with example usage: read_input(input_folder) and returns: graph,  X,  y,  cat_features,  masks