Merge lp:~tapaal-contributor/tapaal/ltl-icon-selection-1997234 into lp:tapaal/3.9

Proposed by Lena Ernstsen
Status: Merged
Approved by: Jiri Srba
Approved revision: 1179
Merge reported by: Jiri Srba
Merged at revision: not available
Proposed branch: lp:~tapaal-contributor/tapaal/ltl-icon-selection-1997234
Merge into: lp:tapaal/3.9
Diff against target: 310 lines (+112/-32)
9 files modified
src/dk/aau/cs/model/tapn/TAPNQuery.java (+6/-7)
src/dk/aau/cs/verification/QueryResult.java (+2/-0)
src/dk/aau/cs/verification/QueryType.java (+3/-1)
src/dk/aau/cs/verification/Stats.java (+3/-3)
src/dk/aau/cs/verification/VerificationResult.java (+16/-0)
src/dk/aau/cs/verification/VerifyTAPN/VerifyPN.java (+0/-1)
src/dk/aau/cs/verification/VerifyTAPN/VerifyPNCTLOutputParser.java (+18/-10)
src/dk/aau/cs/verification/VerifyTAPN/VerifyTAPNIconSelector.java (+28/-8)
src/pipe/gui/RunVerification.java (+36/-2)
To merge this branch: bzr merge lp:~tapaal-contributor/tapaal/ltl-icon-selection-1997234
Reviewer Review Type Date Requested Status
Jiri Srba Approve
Review via email: mp+435360@code.launchpad.net

This proposal supersedes a proposal from 2023-01-09.

Commit message

Considers LTL nodes when selecting icons for verification

To post a comment you must log in.
1177. By Lena Ernstsen

Reverted change to avoid NPE

1178. By Lena Ernstsen

Added 'show raw query results' button for state equation results

1179. By Lena Ernstsen

Fixed wrong statistics for CTL queries

Revision history for this message
Jiri Srba (srba) wrote :

Tested and works fine.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/dk/aau/cs/model/tapn/TAPNQuery.java'
--- src/dk/aau/cs/model/tapn/TAPNQuery.java 2016-04-14 20:09:47 +0000
+++ src/dk/aau/cs/model/tapn/TAPNQuery.java 2023-01-23 10:20:36 +0000
@@ -1,9 +1,6 @@
1package dk.aau.cs.model.tapn;1package dk.aau.cs.model.tapn;
22
3import dk.aau.cs.TCTL.TCTLAFNode;3import dk.aau.cs.TCTL.*;
4import dk.aau.cs.TCTL.TCTLAbstractProperty;
5import dk.aau.cs.TCTL.TCTLEFNode;
6import dk.aau.cs.TCTL.TCTLEGNode;
7import dk.aau.cs.TCTL.visitors.HasDeadlockVisitor;4import dk.aau.cs.TCTL.visitors.HasDeadlockVisitor;
8import dk.aau.cs.verification.QueryType;5import dk.aau.cs.verification.QueryType;
9import pipe.dataLayer.TAPNQuery.QueryCategory;6import pipe.dataLayer.TAPNQuery.QueryCategory;
@@ -27,9 +24,11 @@
27 }24 }
28 25
29 public QueryType queryType(){26 public QueryType queryType(){
30 if(property instanceof TCTLEFNode) return QueryType.EF;27 if (property instanceof TCTLEFNode) return QueryType.EF;
31 else if(property instanceof TCTLEGNode) return QueryType.EG;28 else if (property instanceof TCTLEGNode) return QueryType.EG;
32 else if(property instanceof TCTLAFNode) return QueryType.AF;29 else if (property instanceof LTLENode) return QueryType.E;
30 else if (property instanceof LTLANode) return QueryType.A;
31 else if (property instanceof TCTLAFNode) return QueryType.AF;
33 else return QueryType.AG;32 else return QueryType.AG;
34 }33 }
35 34
3635
=== modified file 'src/dk/aau/cs/verification/QueryResult.java'
--- src/dk/aau/cs/verification/QueryResult.java 2020-07-13 13:58:47 +0000
+++ src/dk/aau/cs/verification/QueryResult.java 2023-01-23 10:20:36 +0000
@@ -61,6 +61,8 @@
61 || (queryType().equals(QueryType.EG)) // && !isQuerySatisfied()) 61 || (queryType().equals(QueryType.EG)) // && !isQuerySatisfied())
62 || (queryType().equals(QueryType.AF)) // && isQuerySatisfied())62 || (queryType().equals(QueryType.AF)) // && isQuerySatisfied())
63 || (queryType().equals(QueryType.AG) && isQuerySatisfied())63 || (queryType().equals(QueryType.AG) && isQuerySatisfied())
64 || (queryType().equals(QueryType.A))
65 || (queryType().equals(QueryType.E))
64 || (hasDeadlock() && 66 || (hasDeadlock() &&
65 (!isQuerySatisfied() && queryType().equals(QueryType.EF)) || 67 (!isQuerySatisfied() && queryType().equals(QueryType.EF)) ||
66 (isQuerySatisfied() && queryType().equals(QueryType.AG))68 (isQuerySatisfied() && queryType().equals(QueryType.AG))
6769
=== modified file 'src/dk/aau/cs/verification/QueryType.java'
--- src/dk/aau/cs/verification/QueryType.java 2011-05-21 13:00:05 +0000
+++ src/dk/aau/cs/verification/QueryType.java 2023-01-23 10:20:36 +0000
@@ -4,5 +4,7 @@
4 EF,4 EF,
5 EG,5 EG,
6 AF,6 AF,
7 AG7 AG,
8 A,
9 E
8}10}
911
=== modified file 'src/dk/aau/cs/verification/Stats.java'
--- src/dk/aau/cs/verification/Stats.java 2020-07-13 13:58:47 +0000
+++ src/dk/aau/cs/verification/Stats.java 2023-01-23 10:20:36 +0000
@@ -137,15 +137,15 @@
137 @Override137 @Override
138 public String toString() {138 public String toString() {
139 StringBuilder buffer = new StringBuilder();139 StringBuilder buffer = new StringBuilder();
140 buffer.append("Discovered markings: ");140 buffer.append("Discovered configurations: ");
141 buffer.append(discovered);141 buffer.append(discovered);
142 buffer.append(System.getProperty("line.separator"));142 buffer.append(System.getProperty("line.separator"));
143 143
144 buffer.append("Explored markings: ");144 buffer.append("Explored configurations: ");
145 buffer.append(explored);145 buffer.append(explored);
146 buffer.append(System.getProperty("line.separator"));146 buffer.append(System.getProperty("line.separator"));
147 147
148 buffer.append("Stored markings: ");148 buffer.append("Stored configurations: ");
149 buffer.append(stored);149 buffer.append(stored);
150 return buffer.toString();150 return buffer.toString();
151 }151 }
152152
=== modified file 'src/dk/aau/cs/verification/VerificationResult.java'
--- src/dk/aau/cs/verification/VerificationResult.java 2021-10-13 18:51:36 +0000
+++ src/dk/aau/cs/verification/VerificationResult.java 2023-01-23 10:20:36 +0000
@@ -4,6 +4,8 @@
4import java.util.ArrayList;4import java.util.ArrayList;
5import java.util.Comparator;5import java.util.Comparator;
6import java.util.List;6import java.util.List;
7import java.util.regex.Matcher;
8import java.util.regex.Pattern;
79
8import dk.aau.cs.model.tapn.NetworkMarking;10import dk.aau.cs.model.tapn.NetworkMarking;
9import dk.aau.cs.model.tapn.TimedArcPetriNetNetwork;11import dk.aau.cs.model.tapn.TimedArcPetriNetNetwork;
@@ -21,6 +23,7 @@
21 private NameMapping nameMapping;23 private NameMapping nameMapping;
22 private TTrace secondaryTrace;24 private TTrace secondaryTrace;
23 private boolean isSolvedUsingStateEquation = false;25 private boolean isSolvedUsingStateEquation = false;
26 private int bound;
24 27
25 public boolean isQuerySatisfied() {28 public boolean isQuerySatisfied() {
26 return queryResult.isQuerySatisfied();29 return queryResult.isQuerySatisfied();
@@ -32,6 +35,15 @@
32 this.verificationTime = verificationTime;35 this.verificationTime = verificationTime;
33 this.stats = stats;36 this.stats = stats;
34 this.rawOutput = rawOutput;37 this.rawOutput = rawOutput;
38
39 String[] lines = rawOutput.split(System.getProperty("line.separator"));
40 for (String line : lines) {
41 Matcher matcher = Pattern.compile("\\s*-k\\s*(\\d+)\\s*").matcher(line);
42 if (matcher.find()) {
43 this.bound = Integer.parseInt(matcher.group(1));
44 break;
45 }
46 }
35 }47 }
3648
37 public VerificationResult(QueryResult queryResult, TTrace trace, long verificationTime, Stats stats, boolean isSolvedUsingStateEquation){49 public VerificationResult(QueryResult queryResult, TTrace trace, long verificationTime, Stats stats, boolean isSolvedUsingStateEquation){
@@ -231,4 +243,8 @@
231 public String getRawOutput() {243 public String getRawOutput() {
232 return rawOutput;244 return rawOutput;
233 }245 }
246
247 public int getBound() {
248 return bound;
249 }
234}250}
235251
=== modified file 'src/dk/aau/cs/verification/VerifyTAPN/VerifyPN.java'
--- src/dk/aau/cs/verification/VerifyTAPN/VerifyPN.java 2021-07-16 20:39:22 +0000
+++ src/dk/aau/cs/verification/VerifyTAPN/VerifyPN.java 2023-01-23 10:20:36 +0000
@@ -340,7 +340,6 @@
340 tapnTrace = parseTrace(trace, options, model, exportedModel, query, queryResult.value1());340 tapnTrace = parseTrace(trace, options, model, exportedModel, query, queryResult.value1());
341 } else {341 } else {
342 tapnTrace = parseTrace(errorOutput, options, model, exportedModel, query, queryResult.value1());342 tapnTrace = parseTrace(errorOutput, options, model, exportedModel, query, queryResult.value1());
343
344 }343 }
345 return new VerificationResult<TimedArcPetriNetTrace>(queryResult.value1(), tapnTrace, runner.getRunningTime(), queryResult.value2(), approximationResult, standardOutput);344 return new VerificationResult<TimedArcPetriNetTrace>(queryResult.value1(), tapnTrace, runner.getRunningTime(), queryResult.value2(), approximationResult, standardOutput);
346 }345 }
347346
=== modified file 'src/dk/aau/cs/verification/VerifyTAPN/VerifyPNCTLOutputParser.java'
--- src/dk/aau/cs/verification/VerifyTAPN/VerifyPNCTLOutputParser.java 2020-07-13 14:30:00 +0000
+++ src/dk/aau/cs/verification/VerifyTAPN/VerifyPNCTLOutputParser.java 2023-01-23 10:20:36 +0000
@@ -13,15 +13,16 @@
13 private static final String Query_IS_NOT_SATISFIED_STRING = "Query is NOT satisfied";13 private static final String Query_IS_NOT_SATISFIED_STRING = "Query is NOT satisfied";
14 private static final String Query_IS_SATISFIED_STRING = "Query is satisfied";14 private static final String Query_IS_SATISFIED_STRING = "Query is satisfied";
1515
16 private static final Pattern configurationsPattern = Pattern.compile("\\s*Configurations:\\s*(\\d+)\\s*");16 private static final Pattern configurationsPattern = Pattern.compile("\\s*Configurations\\s*:\\s*(\\d+)\\s*");
17 private static final Pattern markingsPattern = Pattern.compile("\\s*Markings:\\s*(\\d+)\\s*");17 private static final Pattern markingsPattern = Pattern.compile("\\s*Markings\\s*:\\s*(\\d+)\\s*");
18 private static final Pattern edgesPattern = Pattern.compile("\\t+Edges:\\s*(\\d+)\\s*");18 private static final Pattern edgesPattern = Pattern.compile("\\t+Edges\\s*:\\s*(\\d+)\\s*");
1919
20 private static final Pattern processedEdgesPattern = Pattern.compile("\\s*Processed Edges:\\s*(\\d+)\\s*");20 private static final Pattern processedEdgesPattern = Pattern.compile("\\s*Processed Edges\\s*:\\s*(\\d+)\\s*");
21 private static final Pattern processedNEdgesPattern = Pattern.compile("\\s*Processed N. Edges:\\s*(\\d+)\\s*");21 private static final Pattern processedNEdgesPattern = Pattern.compile("\\s*Processed N. Edges\\s*:\\s*(\\d+)\\s*");
22 private static final Pattern exploredConfigurationsPattern = Pattern.compile("\\s*Explored Configs:\\s*(\\d+)\\s*");22 private static final Pattern exploredConfigurationsPattern = Pattern.compile("\\s*Explored Configs\\s*:\\s*(\\d+)\\s*");
2323
24 private static final Pattern maxUsedTokensPattern = Pattern.compile("\\s*Max number of tokens found in any reachable marking:\\s*(>)?(\\d+)\\s*");24 private static final Pattern maxUsedTokensPattern = Pattern.compile("\\s*Max number of tokens found in any reachable marking\\s*:\\s*(>)?(\\d+)\\s*");
25 private static final Pattern maxTokensPattern = Pattern.compile("\\s*max tokens\\s*:\\s*(>)?(\\d+)\\s*");
2526
26 public VerifyPNCTLOutputParser(int totalTokens, int extraTokens, TAPNQuery queryType) {27 public VerifyPNCTLOutputParser(int totalTokens, int extraTokens, TAPNQuery queryType) {
27 super(totalTokens, extraTokens, queryType);28 super(totalTokens, extraTokens, queryType);
@@ -76,7 +77,14 @@
7677
77 matcher = maxUsedTokensPattern.matcher(line);78 matcher = maxUsedTokensPattern.matcher(line);
78 if(matcher.find()){79 if(matcher.find()){
79 maxUsedTokens = Integer.parseInt(matcher.group(1));80 maxUsedTokens += Integer.parseInt(matcher.group(2));
81 String operator = matcher.group(1) == null ? "" : matcher.group(1);
82 if(operator.equals(">")) maxUsedTokens += 1; // Indicate non-k-boundedness by encoding that an extra token was used.
83 }
84
85 matcher = maxTokensPattern.matcher(line);
86 if(matcher.find()){
87 maxUsedTokens += Integer.parseInt(matcher.group(2));
80 String operator = matcher.group(1) == null ? "" : matcher.group(1);88 String operator = matcher.group(1) == null ? "" : matcher.group(1);
81 if(operator.equals(">")) maxUsedTokens += 1; // Indicate non-k-boundedness by encoding that an extra token was used.89 if(operator.equals(">")) maxUsedTokens += 1; // Indicate non-k-boundedness by encoding that an extra token was used.
82 }90 }
8391
=== modified file 'src/dk/aau/cs/verification/VerifyTAPN/VerifyTAPNIconSelector.java'
--- src/dk/aau/cs/verification/VerifyTAPN/VerifyTAPNIconSelector.java 2019-03-22 10:13:18 +0000
+++ src/dk/aau/cs/verification/VerifyTAPN/VerifyTAPNIconSelector.java 2023-01-23 10:20:36 +0000
@@ -15,27 +15,47 @@
15 switch(result.getQueryResult().queryType())15 switch(result.getQueryResult().queryType())
16 {16 {
17 case EF:17 case EF:
18 if(result.isQuerySatisfied()){18 if (result.isQuerySatisfied()) {
19 return satisfiedIcon;19 return satisfiedIcon;
20 }else if(!result.isQuerySatisfied() && result.getQueryResult().boundednessAnalysis().boundednessResult().equals(Boundedness.Bounded)){20 } else if (!result.isQuerySatisfied() && result.getQueryResult().boundednessAnalysis().boundednessResult().equals(Boundedness.Bounded)) {
21 return notSatisfiedIcon;21 return notSatisfiedIcon;
22 }22 }
23 break;23 break;
24 case AG:24 case AG:
25 if(!result.isQuerySatisfied()) return notSatisfiedIcon;25 if (!result.isQuerySatisfied() && result.getBound() >= result.getQueryResult().boundednessAnalysis().usedTokens()) {
26 else if(result.isQuerySatisfied() && result.getQueryResult().boundednessAnalysis().boundednessResult().equals(Boundedness.Bounded)) return satisfiedIcon;26 return notSatisfiedIcon;
27 } else if (result.isQuerySatisfied() && result.getQueryResult().boundednessAnalysis().boundednessResult().equals(Boundedness.Bounded)) {
28 return satisfiedIcon;
29 }
27 break;30 break;
28 case AF:31 case AF:
29 if(!result.isQuerySatisfied() && result.getQueryResult().boundednessAnalysis().boundednessResult().equals(Boundedness.Bounded)){32 if (!result.isQuerySatisfied() && result.getQueryResult().boundednessAnalysis().boundednessResult().equals(Boundedness.Bounded)) {
30 return notSatisfiedIcon;33 return notSatisfiedIcon;
31 } else if(result.isQuerySatisfied() && result.getQueryResult().boundednessAnalysis().boundednessResult().equals(Boundedness.Bounded)){34 } else if (result.isQuerySatisfied() && result.getQueryResult().boundednessAnalysis().boundednessResult().equals(Boundedness.Bounded)) {
32 return satisfiedIcon;35 return satisfiedIcon;
33 }36 }
34 break;37 break;
35 case EG:38 case EG:
36 if(result.isQuerySatisfied() && result.getQueryResult().boundednessAnalysis().boundednessResult().equals(Boundedness.Bounded)) return satisfiedIcon;39 if (result.isQuerySatisfied() && result.getQueryResult().boundednessAnalysis().boundednessResult().equals(Boundedness.Bounded)) {
37 else if(!result.isQuerySatisfied() && result.getQueryResult().boundednessAnalysis().boundednessResult().equals(Boundedness.Bounded)) return notSatisfiedIcon;40 return satisfiedIcon;
41 } else if (!result.isQuerySatisfied() && result.getQueryResult().boundednessAnalysis().boundednessResult().equals(Boundedness.Bounded)) {
42 return notSatisfiedIcon;
43 }
38 break;44 break;
45 case A:
46 if (!result.isQuerySatisfied()) {
47 return notSatisfiedIcon;
48 } else if (result.isQuerySatisfied() && result.getBound() >= result.getQueryResult().boundednessAnalysis().usedTokens()) {
49 return satisfiedIcon;
50 }
51 break;
52 case E:
53 if (!result.isQuerySatisfied() && result.getBound() >= result.getQueryResult().boundednessAnalysis().usedTokens()) {
54 return notSatisfiedIcon;
55 } else if (result.isQuerySatisfied()) {
56 return satisfiedIcon;
57 }
58 break;
39 default:59 default:
40 return null;60 return null;
41 }61 }
4262
=== modified file 'src/pipe/gui/RunVerification.java'
--- src/pipe/gui/RunVerification.java 2021-10-13 18:51:36 +0000
+++ src/pipe/gui/RunVerification.java 2023-01-23 10:20:36 +0000
@@ -298,11 +298,20 @@
298 gbc.anchor = GridBagConstraints.WEST; 298 gbc.anchor = GridBagConstraints.WEST;
299 panel.add(new JLabel(toHTML(result.getResultString())), gbc);299 panel.add(new JLabel(toHTML(result.getResultString())), gbc);
300300
301 if (result.getBound() < result.getQueryResult().boundednessAnalysis().usedTokens() &&
302 !result.getQueryResult().toString().toLowerCase().contains("only markings with")) {
303 gbc = new GridBagConstraints();
304 gbc.gridx = 0;
305 gbc.gridy = 0;
306 gbc.gridwidth = 2;
307 gbc.anchor = GridBagConstraints.WEST;
308 panel.add(new JLabel("<html><br/><br/>Only markings with at most " + result.getBound() + " tokens were explored<br/><br/></html>"), gbc);
309 }
310
301 // TODO remove this when the engine outputs statistics311 // TODO remove this when the engine outputs statistics
302 boolean isCTLQuery = result.getQueryResult().isCTL;312 boolean isCTLQuery = result.getQueryResult().isCTL;
303313
304 if(modelChecker.supportsStats() && !result.isSolvedUsingStateEquation() && !isCTLQuery){314 if(modelChecker.supportsStats() && !result.isSolvedUsingStateEquation() && !isCTLQuery){
305
306 displayStats(panel, result.getStatsAsString(), modelChecker.getStatsExplanations());315 displayStats(panel, result.getStatsAsString(), modelChecker.getStatsExplanations());
307 316
308 if(!result.getTransitionStatistics().isEmpty()){317 if(!result.getTransitionStatistics().isEmpty()){
@@ -383,15 +392,40 @@
383 } else if (modelChecker.supportsStats() && !result.isSolvedUsingStateEquation() && isCTLQuery){392 } else if (modelChecker.supportsStats() && !result.isSolvedUsingStateEquation() && isCTLQuery){
384 displayStats(panel, result.getCTLStatsAsString(), modelChecker.getStatsExplanations());393 displayStats(panel, result.getCTLStatsAsString(), modelChecker.getStatsExplanations());
385394
395 if (result.getRawOutput() != null) {
396 JButton showRawQueryButton = new JButton("Show raw query results");
397 showRawQueryButton.addActionListener(arg0 -> {
398 JOptionPane.showMessageDialog(panel, createRawQueryPanel(result.getRawOutput()), "Raw query results", JOptionPane.INFORMATION_MESSAGE);
399 });
400 gbc = new GridBagConstraints();
401 gbc.gridx = 0;
402 gbc.gridy = 4;
403 gbc.insets = new Insets(0,0,10,0);
404 gbc.anchor = GridBagConstraints.WEST;
405 panel.add(showRawQueryButton, gbc);
406 }
386 }407 }
387408
388 if(result.isSolvedUsingStateEquation()){409 if(result.isSolvedUsingStateEquation()){
389 gbc = new GridBagConstraints();410 gbc = new GridBagConstraints();
390 gbc.gridx = 0;411 gbc.gridx = 0;
391 gbc.gridy = 6;412 gbc.gridy = 4;
392 gbc.insets = new Insets(0,0,15,0);413 gbc.insets = new Insets(0,0,15,0);
393 gbc.anchor = GridBagConstraints.WEST;414 gbc.anchor = GridBagConstraints.WEST;
394 panel.add(new JLabel(toHTML("The query was resolved using state equations.")), gbc);415 panel.add(new JLabel(toHTML("The query was resolved using state equations.")), gbc);
416
417 if (result.getRawOutput() != null) {
418 JButton showRawQueryButton = new JButton("Show raw query results");
419 showRawQueryButton.addActionListener(arg0 -> {
420 JOptionPane.showMessageDialog(panel, createRawQueryPanel(result.getRawOutput()), "Raw query results", JOptionPane.INFORMATION_MESSAGE);
421 });
422 gbc = new GridBagConstraints();
423 gbc.gridx = 0;
424 gbc.gridy = 5;
425 gbc.insets = new Insets(0,0,10,0);
426 gbc.anchor = GridBagConstraints.WEST;
427 panel.add(showRawQueryButton, gbc);
428 }
395 }429 }
396 430
397 gbc = new GridBagConstraints();431 gbc = new GridBagConstraints();

Subscribers

People subscribed via source and target branches