def __init__(self, adj_full_norm, adj_train, role, class_arr, placeholders, train_params, **kwargs):
        """
        role:       array of string (length |V|)
                    storing role of the node ('tr'/'va'/'te')
        class_arr: array of float (shape |V|xf)
                    storing initial feature vectors
        """
        self.node_train = np.array(role['tr'])
        self.node_val = np.array(role['va'])
        self.node_test = np.array(role['te'])

        self.class_arr = class_arr
        self.adj_full_norm = adj_full_norm
        s1=int(adj_full_norm.shape[0]/8*1)
        s2=int(adj_full_norm.shape[0]/8*2)
        s3=int(adj_full_norm.shape[0]/8*3)
        s4=int(adj_full_norm.shape[0]/8*4)
        s5=int(adj_full_norm.shape[0]/8*5)
        s6=int(adj_full_norm.shape[0]/8*6)
        s7=int(adj_full_norm.shape[0]/8*7)
        self.dim0_adj_sub = adj_full_norm.shape[0]/8
        self.adj_full_norm_0=adj_full_norm[:s1,:]
        self.adj_full_norm_1=adj_full_norm[s1:s2,:]
        self.adj_full_norm_2=adj_full_norm[s2:s3,:]
        self.adj_full_norm_3=adj_full_norm[s3:s4,:]
        self.adj_full_norm_4=adj_full_norm[s4:s5,:]
        self.adj_full_norm_5=adj_full_norm[s5:s6,:]
        self.adj_full_norm_6=adj_full_norm[s6:s7,:]
        self.adj_full_norm_7=adj_full_norm[s7:,:]
        self.adj_train = adj_train

        assert self.class_arr.shape[0] == self.adj_full_norm.shape[0]

        # below: book-keeping for mini-batch
        self.placeholders = placeholders
        self.node_subgraph = None
        self.batch_num = -1

        self.method_sample = None
        self.subgraphs_remaining_indptr = []
        self.subgraphs_remaining_indices = []
        self.subgraphs_remaining_data = []
        self.subgraphs_remaining_nodes = []
        self.subgraphs_remaining_edge_index = []
        
        self.norm_loss_train = np.zeros(self.adj_train.shape[0])
        # norm_loss_test is used in full batch evaluation (without sampling). so neighbor features are simply averaged.
        self.norm_loss_test = np.zeros(self.adj_full_norm.shape[0])
        _denom = len(self.node_train) + len(self.node_val) +  len(self.node_test)
        self.norm_loss_test[self.node_train] = 1./_denom
        self.norm_loss_test[self.node_val] = 1./_denom
        self.norm_loss_test[self.node_test] = 1./_denom
        self.norm_aggr_train = np.zeros(self.adj_train.size)
       
        self.sample_coverage = train_params['sample_coverage']
        self.dropout = train_params['dropout']
        self.deg_train = np.array(self.adj_train.sum(1)).flatten()

        role:       array of string (length |V|)
                    storing role of the node ('tr'/'va'/'te')
        class_arr: array of float (shape |V|xf)
                    storing initial feature vectors
        
graphsaint/tensorflow_version/minibatch.py