Skip to content

Commit

Permalink
More and more fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
fvilla committed Sep 13, 2024
1 parent 440b866 commit ab467cc
Show file tree
Hide file tree
Showing 17 changed files with 749 additions and 454 deletions.
64 changes: 58 additions & 6 deletions klab.cli/src/main/java/org/integratedmodelling/cli/Reasoner.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,14 @@

import java.io.File;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Function;

@Command(name = "reason", mixinStandardHelpOptions = true, version = Version.CURRENT, description = {
"Commands to find, access and manipulate semantic knowledge.",
""}, subcommands = {Reasoner.Children.class, Reasoner.Parents.class, Reasoner.Traits.class,
Reasoner.Type.class, Reasoner.BaseConcept.class,
Reasoner.Type.class, Reasoner.BaseConcept.class, Reasoner.Compatible.class,
Reasoner.Strategy.class, Reasoner.Export.class})
public class Reasoner {

Expand Down Expand Up @@ -131,11 +132,11 @@ public void run() {

out.println(CommandLine.Help.Ansi.AUTO.string("Observation strategies for @|bold " + observable.getDescriptionType().name().toLowerCase()
+ "|@ of @|green " + observable.getUrn() + "|@:"));
// for (var strategy : reasoner.inferStrategies(observable, ctx)) {
// out.println(Utils.Strings.indent(strategy.toString(),
// Utils.Strings.fillUpLeftAligned(strategy.getCost() + ".",
// " ", 4)));
// }
// for (var strategy : reasoner.inferStrategies(observable, ctx)) {
// out.println(Utils.Strings.indent(strategy.toString(),
// Utils.Strings.fillUpLeftAligned(strategy.getCost() + ".",
// " ", 4)));
// }
}
}

Expand Down Expand Up @@ -168,6 +169,57 @@ public void run() {
}
}

@Command(name = "compatible", mixinStandardHelpOptions = true, version = Version.CURRENT, description = {
"Check if two concepts are compatible, optionally in context."}, subcommands = {})
public static class Compatible implements Runnable {

@Spec
CommandSpec commandSpec;

@Parameters
java.util.List<String> arguments;

@Override
public void run() {

PrintWriter out = commandSpec.commandLine().getOut();
PrintWriter err = commandSpec.commandLine().getErr();

java.util.List<java.util.List<String>> tokens = new ArrayList<>();

var current = new ArrayList<String>();
for (var token : arguments) {
if (token.equals(",")) {
tokens.add(current);
current = new ArrayList<>();
} else {
current.add(token);
}
}
tokens.add(current);

var urns = tokens.stream().map(l -> Utils.Strings.join(l, " ")).toList();
var reasoner = KlabCLI.INSTANCE.modeler().currentUser()
.getService(org.integratedmodelling.klab.api.services.Reasoner.class);
var concepts = urns.stream().map(reasoner::resolveConcept).toList();
if (concepts.size() < 2) {
err.println("Not enough arguments for compatibility check. Use commas to separate 2 or 3 " +
"definitions.");
} else {
var distance = concepts.size() == 2 ?
reasoner.compatible(concepts.get(0), concepts.get(1)) :
reasoner.contextuallyCompatible(concepts.get(0), concepts.get(1),
concepts.get(2));

out.println("Compatibility check " + (distance ? "SUCCESSFUL" : "UNSUCCESSFUL") + " " +
"between " + concepts.get(0) + " and " + concepts.get(1) + (concepts.size() == 2 ?
"" :
(" in context of " + concepts.get(3))));

}
}
}

@Command(name = "base", mixinStandardHelpOptions = true, version = Version.CURRENT, description = {
"Display the declared base concept for a concept."}, subcommands = {})
public static class BaseConcept implements Runnable {
Expand Down
Loading

0 comments on commit ab467cc

Please sign in to comment.