use of com.sri.ai.praise.lang.translate.Translator in project aic-praise by aic-sri-international.
the class VECSolverEvaluator method solveProbabilityEvidence.
@Override
public SolverEvaluatorProbabilityEvidenceResult solveProbabilityEvidence(String solveRequestId, ModelLanguage modelLanguage, String model, String evidenceQuery) throws Exception {
if (modelLanguage != ModelLanguage.HOGMv1) {
throw new UnsupportedOperationException(modelLanguage.name() + " is currently not supported by this solver.");
}
Translator inputToUAITranslator = TranslatorFactory.newTranslator(modelLanguage, ModelLanguage.UAI);
// NOTE: This trick is dependent on the input model being HOGMv1
String hogmv1Model = model + "\nrandom UAIQuery : Boolean;\nif " + evidenceQuery + " then UAIQuery else not UAIQuery;\n";
VECCallResult partitionResult = callVECPR("Partition Function " + solveRequestId, inputToUAITranslator, hogmv1Model, new Reader[] { new StringReader(hogmv1Model) });
VECCallResult evidenceResult = callVECPR("Evidence " + solveRequestId, inputToUAITranslator, hogmv1Model + "\nUAIQuery;", new Reader[] { new StringReader(hogmv1Model), new StringReader("UAIQuery") });
Double probabilityResult = Math.pow(10, evidenceResult.resultLog10) / Math.pow(10, partitionResult.resultLog10);
SolverEvaluatorProbabilityEvidenceResult result = new SolverEvaluatorProbabilityEvidenceResult(Math.max(partitionResult.translationTookMS, evidenceResult.translationTookMS), Math.max(partitionResult.vecProcessTookMS, evidenceResult.vecProcessTookMS), probabilityResult.isNaN() ? null : Expressions.makeSymbol(probabilityResult));
return result;
}
use of com.sri.ai.praise.lang.translate.Translator in project aic-praise by aic-sri-international.
the class RunTranslationsCLI method main.
/**
* Translate Probabilistic Models based on given command line arguments.
*
* @param args
* pass '--help' to see description of expected program arguments.
*/
public static void main(String[] args) {
TranslationArgs translationArgs = getArgs(args);
for (Translator translator : translationArgs.translators) {
File sourceDirectory = new File(translationArgs.rootModelOutputDirectory, translator.getSource().getCode());
if (!sourceDirectory.isDirectory()) {
throw new IllegalArgumentException("Source Directory " + sourceDirectory + " does not exist");
}
File targetDirectory = new File(translationArgs.rootModelOutputDirectory, translator.getTarget().getCode());
if (!targetDirectory.isDirectory()) {
targetDirectory.mkdir();
}
String sourceModelFileExtension = translator.getInputFileExtensions()[0];
for (File sourceModelFile : sourceDirectory.listFiles((dir, name) -> name.endsWith(sourceModelFileExtension))) {
System.out.println("Translating " + sourceModelFile.getName() + " from " + translator.getSource().getCode() + " to " + translator.getTarget().getCode());
String sourceModelFileNameWithNoExtension = translator.getInputModelFileNameWithNoExtension(sourceModelFile);
Stopwatch sw = Stopwatch.createStarted();
try (InputModelReaders inputModelReaders = new InputModelReaders(translator, sourceModelFile, sourceModelFileExtension);
TranslatedOutputs translatedOutputs = new TranslatedOutputs(translator, sourceModelFile, sourceModelFileExtension)) {
translator.translate(sourceModelFileNameWithNoExtension, inputModelReaders.readers, translatedOutputs.writers, new TranslatorOptions());
} catch (Exception ex) {
System.err.println("Error during translation");
ex.printStackTrace();
System.exit(-1);
}
sw.stop();
System.out.println("Took " + sw.toString());
// TODO - append the time it took to translate the file to a .csv file
}
}
}
Aggregations