private static void computeGraphStatistics(
      RDFDataSet tripleStore, ClassificationDataSet ds, boolean[] inference, int[] depths) {
    Map<Boolean, Map<Integer, Pair<Double, Double>>> stats =
        new HashMap<Boolean, Map<Integer, Pair<Double, Double>>>();

    for (boolean inf : inference) {
      stats.put(inf, new HashMap<Integer, Pair<Double, Double>>());
      for (int depth : depths) {

        Set<Statement> st =
            RDFUtils.getStatements4Depth(tripleStore, ds.getRDFData().getInstances(), depth, inf);
        st.removeAll(ds.getRDFData().getBlackList());
        DTGraph<String, String> graph = RDFUtils.statements2Graph(st, RDFUtils.REGULAR_LITERALS);
        List<DTNode<String, String>> instanceNodes =
            RDFUtils.findInstances(graph, ds.getRDFData().getInstances());
        graph = RDFUtils.simplifyInstanceNodeLabels(graph, instanceNodes);
        GraphList<DTGraph<String, String>> graphs =
            RDFUtils.getSubGraphs(graph, instanceNodes, depth);

        double v = 0;
        double e = 0;
        for (DTGraph<String, String> g : graphs.getGraphs()) {
          v += g.nodes().size();
          e += g.links().size();
        }
        v /= graphs.numInstances();
        e /= graphs.numInstances();

        stats.get(inf).put(depth, new Pair<Double, Double>(v, e));
      }
    }

    for (boolean k1 : stats.keySet()) {
      System.out.println("Inference: " + k1);
      for (int k2 : stats.get(k1).keySet()) {
        System.out.println(
            "Depth "
                + k2
                + ", vertices: "
                + (stats.get(k1).get(k2).getFirst())
                + " , edges: "
                + (stats.get(k1).get(k2).getSecond()));
      }
    }
  }