def METHOD_NAME(self, test_data, device, args):
    logging.info("----------test--------")
    model = self.model
    model.eval()
    model.to(device)
    with torch.no_grad():
        y_pred = []
        y_true = []
        for mol_idx, (forest, feature_matrix, label, _) in enumerate(test_data):
            forest = [
                level.to(device=device, dtype=torch.long, non_blocking=True)
                for level in forest
            ]
            feature_matrix = feature_matrix.to(
                device=device, dtype=torch.float32, non_blocking=True
            )
            label = label.to(device=device, dtype=torch.float32, non_blocking=True)
            logits = model(forest, feature_matrix)
            y_pred.append(logits.cpu().numpy())
            y_true.append(label.cpu().numpy())
        # logging.info(y_true)
        # logging.info(y_pred)
        if args.metric == "rmse":
            score = mean_squared_error(
                np.array(y_true), np.array(y_pred), squared=False
            )
        elif args.metric == "r2":
            score = r2_score(np.array(y_true), np.array(y_pred))
        else:
            score = mean_absolute_error(np.array(y_true), np.array(y_pred))
    return score, model