def METHOD_NAME(data_dir,
                     dataset_name,
                     num_classes,
                     max_nodes = 100,
                     graph_format="sparse"):
    def data_extract(description):
        with open(os.path.join(data_dir, f"{dataset_name}_{description}.txt"),'r') as _fd:
            _data = _fd.read().rstrip().split('\n')
        return _data
    adj_list = data_extract("A")
    graph_labels = data_extract("graph_labels")
    graph_ind = data_extract("graph_indicator")
    node_attr = data_extract("node_attributes")
    node_labels = data_extract("node_labels")
    NUM_GRAPHS =  len(graph_labels)
    NUM_NODES = len(node_attr)
    NUM_EDGES = len(adj_list)
    edge_list = [] 
    for edge in adj_list:
        edge = np.array([int(x) for x in edge.split(',')])
        edge_list.append(edge)
    edge_list = np.array(edge_list)
    node_slices = dataset_node_slices(graph_ind, NUM_GRAPHS)
    num_features = 3
    node_features = extract_node_features(node_slices, node_labels,max_nodes, num_features)
    node_features = np.array(node_features)
    if graph_format == 'dense':
        adj_mat, removed_graphs = extract_adj_mat(node_slices, edge_list, max_nodes)
        targets = extract_targets(graph_labels, num_classes, removed_graphs)
        return (node_features, adj_mat, targets)
    else:
        source_node_indices, target_node_inidices, removed_graphs = \
            extract_coo_list(node_slices, edge_list, max_nodes)
        targets = extract_targets(graph_labels, num_classes, removed_graphs)
        return (node_features, source_node_indices, target_node_inidices, targets )