Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Resolution Testing #39

Closed
wants to merge 17 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,13 @@ workspace(name = "graknlabs_verification")
###########################

load("//dependencies/graknlabs:dependencies.bzl", "graknlabs_build_tools", "graknlabs_common",
"graknlabs_graql", "graknlabs_client_java", "graknlabs_grakn_core")
"graknlabs_graql", "graknlabs_client_java", "graknlabs_grakn_core", "graknlabs_console")
graknlabs_build_tools()
graknlabs_common()
graknlabs_graql()
graknlabs_client_java()
graknlabs_grakn_core()
graknlabs_console()

load("@graknlabs_build_tools//distribution:dependencies.bzl", "graknlabs_bazel_distribution")
graknlabs_bazel_distribution()
Expand Down
17 changes: 12 additions & 5 deletions dependencies/graknlabs/dependencies.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ def graknlabs_build_tools():
git_repository(
name = "graknlabs_build_tools",
remote = "https://github.com/graknlabs/build-tools",
commit = "6cf8cad67fa232d020869fde84e56984bf36d5e7", # sync-marker: do not remove this comment, this is used for sync-dependencies by @graknlabs_build_tools
commit = "abbee2441ccb14c5e9ff12eb7668ecc89d1c6b1d", # sync-marker: do not remove this comment, this is used for sync-dependencies by @graknlabs_build_tools
)

def graknlabs_common():
Expand All @@ -18,19 +18,26 @@ def graknlabs_graql():
git_repository(
name = "graknlabs_graql",
remote = "https://github.com/graknlabs/graql",
commit = "1c573108b3ab8505ab0168f146071fe032d62a61",
commit = "9441a23346177e2605b607e6dfab01869cd40530",
)

def graknlabs_client_java():
git_repository(
name = "graknlabs_client_java",
remote = "https://github.com/graknlabs/client-java",
commit = "18c4f726ce7b32ae1b9c151794d1eed937898e23",
commit = "ea151d9125bfa958099126fb1af2ae320def2139",
)

def graknlabs_grakn_core():
git_repository(
name = "graknlabs_grakn_core",
remote = "https://github.com/graknlabs/grakn",
commit = "a950ed90cac3e4cbd1d338b13f7f33e5a6616a35",
remote = "https://github.com/jmsfltchr/grakn",
commit = "e6d73c0061fab01b346716ae04b667167f60c3c0",
)

def graknlabs_console():
git_repository(
name = "graknlabs_console",
remote = "https://github.com/graknlabs/console",
tag = "1.0.5"
)
14 changes: 14 additions & 0 deletions dependencies/maven/artifacts/org/zeroturnaround/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
java_library(
name = "zt-exec",
exports = [
"//external:jar/org/zeroturnaround/zt-exec"
],
runtime_deps = [
"//dependencies/maven/artifacts/org/slf4j:slf4j-api"
],
visibility = [
"//visibility:public"
]
)


4 changes: 4 additions & 0 deletions dependencies/maven/dependencies.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,11 @@ def list_dependencies():
{"artifact": "org.codehaus.mojo:animal-sniffer-annotations:1.14", "lang": "java", "sha1": "775b7e22fb10026eed3f86e8dc556dfafe35f2d5", "sha256": "2068320bd6bad744c3673ab048f67e30bef8f518996fa380033556600669905d", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14.jar", "source": {"sha1": "886474da3f761d39fcbb723d97ecc5089e731f42", "sha256": "d821ae1f706db2c1b9c88d4b7b0746b01039dac63762745ef3fe5579967dd16b", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14-sources.jar"} , "name": "org-codehaus-mojo-animal-sniffer-annotations", "actual": "@org-codehaus-mojo-animal-sniffer-annotations//jar", "bind": "jar/org/codehaus/mojo/animal-sniffer-annotations"},
{"artifact": "org.mockito:mockito-core:2.6.4", "lang": "java", "sha1": "b0fa48f9f385948a1e067dd94ab813318abb0a9e", "sha256": "21c5536a3facfe718baa802609b0c38311fedf6660430da3fd29cce1cb00dbb0", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/org/mockito/mockito-core/2.6.4/mockito-core-2.6.4.jar", "source": {"sha1": "aa6a259b1917e2b964b87cc902058d14347e0409", "sha256": "f3ce9f4978692345ce09f9c28674279475577122cbf6cae8aca21a7e08b8195b", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/org/mockito/mockito-core/2.6.4/mockito-core-2.6.4-sources.jar"} , "name": "org-mockito-mockito-core", "actual": "@org-mockito-mockito-core//jar", "bind": "jar/org/mockito/mockito-core"},
{"artifact": "org.objenesis:objenesis:2.5", "lang": "java", "sha1": "612ecb799912ccf77cba9b3ed8c813da086076e9", "sha256": "293328e1b0d31ed30bb89fca542b6c52fac00989bb0e62eb9d98d630c4dd6b7c", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/org/objenesis/objenesis/2.5/objenesis-2.5.jar", "source": {"sha1": "e2b450699731118d1498645e36577371afced20f", "sha256": "727eaf4bece2f9587702b3d64a7e091afb98ab38c87b3f36728e4fe456bdd6cb", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/org/objenesis/objenesis/2.5/objenesis-2.5-sources.jar"} , "name": "org-objenesis-objenesis", "actual": "@org-objenesis-objenesis//jar", "bind": "jar/org/objenesis/objenesis"},
# duplicates in org.slf4j:slf4j-api fixed to 1.7.20
# - ch.qos.logback:logback-classic:1.2.3 wanted version 1.7.25
# - org.zeroturnaround:zt-exec:1.11 wanted version 1.7.2
{"artifact": "org.slf4j:slf4j-api:1.7.20", "lang": "java", "sha1": "867d63093eff0a0cb527bf13d397d850af3dcae3", "sha256": "2967c337180f6dca88a8a6140495b9f0b8a85b8527d02b0089bdbf9cdb34d40b", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.20/slf4j-api-1.7.20.jar", "source": {"sha1": "a12636375205fa54af1ec30d1ca2e6dbb96bf9bd", "sha256": "3bb14e45d8431c2bb35ffff82324763d1bed6e9b8782d48943b163e8fee2134c", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.20/slf4j-api-1.7.20-sources.jar"} , "name": "org-slf4j-slf4j-api", "actual": "@org-slf4j-slf4j-api//jar", "bind": "jar/org/slf4j/slf4j-api"},
{"artifact": "org.zeroturnaround:zt-exec:1.11", "lang": "java", "sha1": "ee0092fd27178e1a966aa90771478338aa0c8f05", "sha256": "5b9131ca9de1477e3f38bb4e6ef951ed13d1edf34329d1a98d6f48e174523233", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/org/zeroturnaround/zt-exec/1.11/zt-exec-1.11.jar", "source": {"sha1": "c16101d68a54140a42e925240d9b0ba40f96c7e2", "sha256": "065a8cb9a82b7b5b28314269d0eb4875c1a713b959a03a635fb8b7371c8ea820", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/org/zeroturnaround/zt-exec/1.11/zt-exec-1.11-sources.jar"} , "name": "org-zeroturnaround-zt-exec", "actual": "@org-zeroturnaround-zt-exec//jar", "bind": "jar/org/zeroturnaround/zt-exec"},
]

def maven_dependencies(callback = jar_artifact_callback):
Expand Down
5 changes: 5 additions & 0 deletions dependencies/maven/dependencies.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,8 @@ dependencies:
mockito-core:
version: "2.6.4"
lang: java

org.zeroturnaround:
zt-exec:
version: "1.11"
lang: java
47 changes: 47 additions & 0 deletions resolution/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
java_library(
name = "resolution-lib",
srcs = glob([
"*.java",
]
),
# resource_strip_prefix = "conf/",
# resources = [
# "conf/logback.xml",
# ],
visibility = ["//visibility:public"],
deps = [
# "//dependencies/maven/artifacts/ch/qos/logback:logback-classic",
# "//dependencies/maven/artifacts/commons-cli",
# "//dependencies/maven/artifacts/org/slf4j:slf4j-api",
# "//yaml_tool",
"//resolution/complete",
"//resolution/resolve",
"//resolution/common",
"@graknlabs_client_java//:client-java",
"@graknlabs_graql//java:graql",
],
)

java_binary(
name = "resolution",
# args = [
# "$(locations //data)",
# "$(locations //schema)",
# ],
# data = [
# "//data",
# "//schema",
# ],
main_class = "grakn.verification.resolution.Resolution",
runtime_deps = [":resolution-lib"],
)

java_binary(
name = "resolution-debug",
jvm_flags = [
"-Xdebug",
"-Xrunjdwp:transport=dt_socket,server=y,address=5005",
],
main_class = "grakn.verification.resolution.Resolution",
runtime_deps = [":resolution-lib"],
)
108 changes: 108 additions & 0 deletions resolution/Resolution.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
package grakn.verification.resolution;

import grakn.client.GraknClient;
import grakn.client.GraknClient.Session;
import grakn.client.GraknClient.Transaction;
import grakn.client.answer.ConceptMap;
import grakn.verification.resolution.complete.Completer;
import grakn.verification.resolution.complete.SchemaManager;
import grakn.verification.resolution.resolve.QueryBuilder;
import graql.lang.query.GraqlGet;

import java.io.IOException;
import java.nio.file.Path;
import java.util.List;

import static grakn.verification.resolution.common.Utils.loadGqlFile;
import static grakn.verification.resolution.common.Utils.thingCount;

public class Resolution {

private static final String COMPLETE_KEYSPACE = "complete";
private static final String TEST_KEYSPACE = "test";
private static GraknClient graknClient;
private final Path schemaPath;
private final Path dataPath;
private Session completeSession;
private Session testSession;
private int completedInferredThingCount;
private int initialThingCount;

public Resolution(String graknUri, Path schemaPath, Path dataPath) {
this.schemaPath = schemaPath;
this.dataPath = dataPath;
graknClient = new GraknClient(graknUri);

testSession = graknClient.session(TEST_KEYSPACE);
completeSession = graknClient.session(COMPLETE_KEYSPACE);

initialiseKeyspace(testSession);
initialiseKeyspace(completeSession);

// TODO Check that nothing in the given schema conflicts with the resolution schema
// TODO Also check that all of the data in the initial data given has keys/ is uniquely identifiable

// Complete the KB-complete
Completer completer = new Completer(completeSession);
try (GraknClient.Transaction tx = completeSession.transaction().write()) {
completer.loadRules(tx, SchemaManager.getAllRules(tx));
}

SchemaManager.undefineAllRules(completeSession);
SchemaManager.enforceAllTypesHaveKeys(completeSession);
SchemaManager.addResolutionSchema(completeSession);
SchemaManager.connectResolutionSchema(completeSession);
initialThingCount = thingCount(completeSession);
completedInferredThingCount = completer.complete();
}

public void close() {
completeSession.close();
testSession.close();
graknClient.keyspaces().delete(COMPLETE_KEYSPACE);
graknClient.keyspaces().delete(TEST_KEYSPACE);
}

public void testQuery(GraqlGet inferenceQuery) {
QueryBuilder rb = new QueryBuilder();
List<GraqlGet> queries;

try (Transaction tx = testSession.transaction().read()) {
queries = rb.buildMatchGet(tx, inferenceQuery);
}

try (Transaction tx = completeSession.transaction().read()) {
for (GraqlGet query: queries) {
testResolution(tx, query);
}
}
}

public void testCompleteness() {
int testInferredCount = thingCount(testSession) - initialThingCount;
if (testInferredCount != completedInferredThingCount) {
String msg = String.format("The complete KB contains %d inferred concepts, whereas the test KB contains %d inferred concepts.", completedInferredThingCount, testInferredCount);
throw new RuntimeException(msg);
}
}

private void testResolution(Transaction tx, GraqlGet query) {
List<ConceptMap> answers = tx.execute(query);
if (answers.size() != 1) {
String msg = String.format("Resolution query had %d answers, it should have had 1. The query is:\n %s", answers.size(), query);
throw new RuntimeException(msg);
}
}

private void initialiseKeyspace(Session session) {
try {
// Load a schema incl. rules
loadGqlFile(session, schemaPath);
// Load data
loadGqlFile(session, dataPath);
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
}
}
13 changes: 13 additions & 0 deletions resolution/common/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
java_library(
name = "common",
srcs = glob([
"*.java",
]
),
visibility = ["//visibility:public"],
deps = [
"//dependencies/maven/artifacts/com/google/guava",
"@graknlabs_client_java//:client-java",
"@graknlabs_graql//java:graql",
],
)
48 changes: 48 additions & 0 deletions resolution/common/Utils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package grakn.verification.resolution.common;

import grakn.client.GraknClient;
import graql.lang.Graql;
import graql.lang.pattern.Conjunction;
import graql.lang.pattern.Pattern;
import graql.lang.query.GraqlQuery;
import graql.lang.statement.Statement;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

import static com.google.common.collect.Iterables.getOnlyElement;

public class Utils {

public static void loadGqlFile(GraknClient.Session session, Path... gqlPath) throws IOException {
for (Path path : gqlPath) {
String query = new String(Files.readAllBytes(path), StandardCharsets.UTF_8);

try (GraknClient.Transaction tx = session.transaction().write()) {
tx.execute((GraqlQuery) Graql.parse(query));
tx.commit();
}
}
}

/**
* Get a count of the number of instances in the KB
* @param session Grakn Session
* @return number of instances
*/
public static int thingCount(GraknClient.Session session) {
try (GraknClient.Transaction tx = session.transaction().read()) {
return getOnlyElement(tx.execute(Graql.match(Graql.var("x").isa("thing")).get().count())).number().intValue();
}
}

public static Set<Statement> getStatements(List<Pattern> patternList) {
LinkedHashSet<Pattern> patternSet = new LinkedHashSet<>(patternList);
return new Conjunction<>(patternSet).statements();
}
}
19 changes: 19 additions & 0 deletions resolution/complete/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
exports_files(["completion_schema.gql"])

java_library(
name = "complete",
srcs = glob([
"*.java",
]
),
visibility = ["//visibility:public"],
deps = [
"//resolution/common:common",
"//resolution/resolve:resolve",
"@graknlabs_client_java//:client-java",
"@graknlabs_graql//java:graql",
],
data = [
"//resolution/complete:completion_schema.gql",
],
)
Loading