use of com.rockwellcollins.atc.agree.analysis.AgreeRenaming in project AMASE by loonwerks.
the class GenMCSHandler method createVerification.
/**
* Copied from AGREE VerifyHandler - allows for min cut set Analysis Type in
* param analysisType
*
* @param resultName
* @param compInst
* @param lustreProgram
* @param agreeProgram
* @param analysisType
* @return
*/
private AnalysisResult createVerification(String resultName, ComponentInstance compInst, Program lustreProgram, AgreeProgram agreeProgram, AnalysisType analysisType) {
AgreeAutomaterRegistry aAReg = (AgreeAutomaterRegistry) ExtensionRegistry.getRegistry(ExtensionRegistry.AGREE_AUTOMATER_EXT_ID);
List<AgreeAutomater> automaters = aAReg.getAgreeAutomaters();
AgreeRenaming renaming = new AgreeRenaming();
AgreeLayout layout = new AgreeLayout();
Node mainNode = null;
for (Node node : lustreProgram.nodes) {
if (node.id.equals(lustreProgram.main)) {
mainNode = node;
break;
}
}
if (mainNode == null) {
throw new AgreeException("Could not find main lustre node after translation");
}
List<String> properties = new ArrayList<>();
RenamingVisitor.addRenamings(lustreProgram, renaming, compInst, layout);
addProperties(renaming, properties, mainNode, agreeProgram);
for (AgreeAutomater aa : automaters) {
renaming = aa.rename(renaming);
layout = aa.transformLayout(layout);
}
JKindResult result;
switch(analysisType) {
case Consistency:
result = new ConsistencyResult(resultName, mainNode.properties, Collections.singletonList(true), renaming);
break;
case Realizability:
result = new JRealizabilityResult(resultName, renaming);
break;
case AssumeGuarantee:
result = new JKindResult(resultName, properties, renaming);
break;
default:
throw new AgreeException("Unhandled Analysis Type");
}
queue.add(result);
ComponentImplementation compImpl = AgreeUtils.getInstanceImplementation(compInst);
linker.setProgram(result, lustreProgram);
linker.setComponent(result, compImpl);
linker.setContract(result, getContract(compImpl));
linker.setLayout(result, layout);
linker.setReferenceMap(result, renaming.getRefMap());
linker.setLog(result, AgreeLogger.getLog());
linker.setRenaming(result, renaming);
return result;
}
use of com.rockwellcollins.atc.agree.analysis.AgreeRenaming in project AMASE by loonwerks.
the class SafetyAnalysisResultLabelProvider method getText.
@Override
public String getText(Object element) {
if (element instanceof SafetyPropertyResult) {
SafetyPropertyResult pr = (SafetyPropertyResult) element;
switch(column) {
case PROPERTY:
if (AddPairwiseFaultDriverWitnesses.FAULT_DRIVER_PAIR_WITNESS_PATTERN.matcher(pr.getName()).find()) {
List<String> guarantees = new ArrayList<>();
AgreeRenaming renaming = (AgreeRenaming) pr.getRenaming();
final Pattern GUARANTEE_PATTERN = Pattern.compile(renaming.forceRename(GUARANTEE_BASENAME).replaceAll(".", "\\.") + "(\\d+)");
Matcher matcher = GUARANTEE_PATTERN.matcher(pr.getName());
while (matcher.find()) {
String varName = GUARANTEE_BASENAME + matcher.group(1);
String guaranteeName = renaming.rename(varName);
if (guaranteeName.length() > TRUNCATION_LENGTH) {
guaranteeName = guaranteeName.substring(0, TRUNCATION_LENGTH) + " ...";
}
guarantees.add("\"" + guaranteeName + "\"");
}
return String.join(" and ", guarantees) + " cannot fail together";
}
default:
}
}
return super.getText(element);
}
use of com.rockwellcollins.atc.agree.analysis.AgreeRenaming in project AGREE by loonwerks.
the class VerifyHandler method createVerification.
private AnalysisResult createVerification(String resultName, ComponentInstance compInst, Program lustreProgram, AgreeProgram agreeProgram, AnalysisType analysisType) {
// ///////
// Logger logger = Logger.getLogger("MyLog");
// FileHandler fh;
// try {
// This block configure the logger with handler and formatter
// fh = new FileHandler("/home/thomas/zzz.log");
// logger.addHandler(fh);
// SimpleFormatter formatter = new SimpleFormatter();
// fh.setFormatter(formatter);
// logger.info("Agree Program:");
// AgreeASTPrettyprinter pp = new AgreeASTPrettyprinter();
// pp.visit(agreeProgram);
// logger.info(pp.toString());
// } catch (SecurityException ex) {
// ex.printStackTrace();
// }
// catch (IOException ex) {
// ex.printStackTrace();
// }
// //////////////
AgreeAutomaterRegistry aAReg = (AgreeAutomaterRegistry) ExtensionRegistry.getRegistry(ExtensionRegistry.AGREE_AUTOMATER_EXT_ID);
List<AgreeAutomater> automaters = aAReg.getAgreeAutomaters();
AgreeRenaming renaming = new AgreeRenaming();
AgreeLayout layout = new AgreeLayout();
Node mainNode = null;
for (Node node : lustreProgram.nodes) {
if (node.id.equals(lustreProgram.main)) {
mainNode = node;
break;
}
}
if (mainNode == null) {
throw new AgreeException("Could not find main lustre node after translation");
}
List<String> properties = new ArrayList<>();
RenamingVisitor.addRenamings(lustreProgram, renaming, compInst, layout);
addProperties(renaming, properties, mainNode, agreeProgram);
for (AgreeAutomater aa : automaters) {
renaming = aa.rename(renaming);
layout = aa.transformLayout(layout);
}
JKindResult result;
switch(analysisType) {
case Consistency:
result = new ConsistencyResult(resultName, mainNode.properties, Collections.singletonList(true), renaming);
break;
case Realizability:
result = new JRealizabilityResult(resultName, renaming);
break;
case AssumeGuarantee:
final Set<String> invertedProperties = renaming.getInvertedProperties();
List<Boolean> invertedPropertyMask = mainNode.properties.stream().map(p -> invertedProperties.contains(p)).collect(Collectors.toList());
result = new JKindResult(resultName, properties, invertedPropertyMask, renaming);
break;
default:
throw new AgreeException("Unhandled Analysis Type");
}
queue.add(result);
ComponentImplementation compImpl = AgreeUtils.getInstanceImplementation(compInst);
linker.setProgram(result, lustreProgram);
linker.setComponent(result, compImpl);
linker.setContract(result, getContract(compImpl));
linker.setLayout(result, layout);
linker.setReferenceMap(result, renaming.getRefMap());
linker.setLog(result, AgreeLogger.getLog());
linker.setRenaming(result, renaming);
// System.out.println(program);
return result;
}
use of com.rockwellcollins.atc.agree.analysis.AgreeRenaming in project AGREE by loonwerks.
the class AgreeMenuListener method addViewSupportConsole.
private IAction addViewSupportConsole(String text, IMenuManager manager, AnalysisResult result) {
return new Action(text) {
@Override
public void run() {
Map<String, EObject> tempRefMap = linker.getReferenceMap(result.getParent());
if (tempRefMap == null) {
tempRefMap = linker.getReferenceMap(result);
}
final Map<String, EObject> refMap = tempRefMap;
final MessageConsole console = findConsole("Support");
Renaming tempRenaming = linker.getRenaming(result);
while (tempRenaming == null) {
AnalysisResult parent = result.getParent();
if (parent == null) {
throw new AgreeException("Problem finding renaming");
}
tempRenaming = linker.getRenaming(parent);
}
final Renaming renaming = tempRenaming;
showConsole(console);
console.clearConsole();
if (patternListener != null) {
console.removePatternMatchListener(patternListener);
}
patternListener = new AgreePatternListener(refMap);
console.addPatternMatchListener(patternListener);
new Thread(() -> {
if (renaming instanceof AgreeRenaming) {
writeIvcResult(result, console, (AgreeRenaming) renaming);
}
}).start();
}
};
}
use of com.rockwellcollins.atc.agree.analysis.AgreeRenaming in project AGREE by loonwerks.
the class AgreeMenuListener method addViewTraceabilityConsole.
private IAction addViewTraceabilityConsole(String text, IMenuManager manager, AnalysisResult result) {
return new Action(text) {
@Override
public void run() {
Map<String, EObject> tempRefMap = linker.getReferenceMap(result.getParent());
if (tempRefMap == null) {
tempRefMap = linker.getReferenceMap(result);
}
final Map<String, EObject> refMap = tempRefMap;
final MessageConsole console = findConsole("Traceability");
final Renaming renaming = linker.getRenaming(result);
showConsole(console);
console.clearConsole();
console.addPatternMatchListener(new AgreePatternListener(refMap));
new Thread(() -> {
try {
MessageConsoleStream out = console.newMessageStream();
printHLine(out, 2);
out.println("Traceability for Valid Contract Guarantees");
printHLine(out, 2);
out.println("");
List<PropertyResult> allProperties = new ArrayList<PropertyResult>(((JKindResult) result).getPropertyResults());
if (!allProperties.isEmpty()) {
for (PropertyResult prop : allProperties) {
if (prop.getStatus().equals(jkind.api.results.Status.VALID)) {
if (renaming instanceof AgreeRenaming) {
writeIvcResult(prop, console, (AgreeRenaming) renaming);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
};
}
Aggregations