code: public static GraphicalModel readFromProto(GraphicalModelProto.GraphicalModel proto) {
      if (proto == null) return null;
      GraphicalModel model = new GraphicalModel();
      model.modelMetaData = readMetaDataFromProto(proto.getMetaData());
      model.variableMetaData = new ArrayList<>();
      for (int i = 0; i < proto.getVariableMetaDataCount(); i++) {
        model.variableMetaData.add(readMetaDataFromProto(proto.getVariableMetaData(i)));
      }
      for (int i = 0; i < proto.getFactorCount(); i++) {
        model.factors.add(Factor.readFromProto(proto.getFactor(i)));
      }
      return model;
    }
docs: Recreates an in-memory GraphicalModel from a proto serialization, recursively creating all the ConcatVectorTable's
  and ConcatVector's in memory as well.
  
  @param proto the proto to read
  @return an in-memory GraphicalModel