Commit f7bbfd28 authored by Arthur Remaud's avatar Arthur Remaud Committed by Arthur Remaud

autfilt: Better display of cluster when universal edge loops in it

Fixes #208

* NEWS: Informations about the modifications
* spot/twaalgos/dot.cc (print): Gestion of cluster for
universal transitions
* tests/core/alternating.test: tests added
* tests/core/neverclaimread.test: tests changed for
new dot format
* tests/core/readsave.test: tests changed
* tests/core/sccdot.test: tests changed
* tests/python/_altscc.ipynb: tests changed
* tests/python/decompose.ipynb: tests changed
parent 34859568
......@@ -41,6 +41,10 @@ New in spot 2.3.0.dev (not yet released)
caused any user-defined CPPFLAGS to be ignored while building
Spot.
- The display of clusters with universal edges was confused, because the
intermediate node was not in the cluster even if one of the target was
in the same one.
New in spot 2.3 (2017-01-19)
Build:
......
......@@ -369,7 +369,8 @@ namespace spot
std::set<std::pair<int, int>> done;
void
print_dst(int dst, const char* style = nullptr, int color_num = -1)
print_dst(int dst, const char* style = nullptr, int scc_num = -1,
int color_num = -1)
{
std::ostringstream tmp_dst;
tmp_dst << dst;
......@@ -584,9 +585,14 @@ namespace spot
}
void
process_link(const twa_graph::edge_storage_t& t, int number)
process_link(const twa_graph::edge_storage_t& t, int number,
int scc_num = -1)
{
os_ << " " << t.src << " -> " << (int)t.dst;
if (scc_num >= 0)
{
os_ << '.' << scc_num;
}
if (aut_->is_univ_dest(t.dst) && highlight_edges_
&& !opt_shared_univ_dest_)
{
......@@ -659,9 +665,9 @@ namespace spot
if (aut_->is_univ_dest(t.dst))
{
if (color_num >= 0)
print_dst(t.dst, highlight.c_str(), color_num);
print_dst(t.dst, highlight.c_str(), scc_num, color_num);
else
print_dst(t.dst, highlight.c_str());
print_dst(t.dst, highlight.c_str(), scc_num);
}
}
......@@ -764,7 +770,29 @@ namespace spot
os_ << " label=\"\"\n";
}
for (auto s: si->states_of(i))
process_state(s);
{
process_state(s);
int trans_num = 0;
for (auto& t : aut_->out(s))
{
if (aut_->is_univ_dest(t.dst))
{
bool to_write = false;
for (unsigned d: aut_->univ_dests(t.dst))
{
to_write = si->scc_of(d) == si->scc_of(s);
if (to_write)
break;
}
if (to_write)
process_link(t, trans_num++, i);
else
process_link(t, trans_num++);
}
else
process_link(t, trans_num++);
}
}
os_ << " }\n";
}
}
......@@ -772,10 +800,12 @@ namespace spot
for (unsigned n = 0; n < ns; ++n)
{
if (!si || !si->reachable_state(n))
process_state(n);
int trans_num = 0;
for (auto& t: aut_->out(n))
process_link(t, trans_num++);
{
process_state(n);
int trans_num = 0;
for (auto& t: aut_->out(n))
process_link(t, trans_num++);
}
}
end();
}
......
......@@ -69,37 +69,49 @@ digraph G {
color=green
label=""
2 [label="G(a)"]
2 -> 2 [label="a"]
}
subgraph cluster_1 {
color=red
label=""
1 [label="FG(a)\n⓿"]
1 -> 2 [label="a"]
1 -> 1 [label="1"]
}
subgraph cluster_2 {
color=green
label=""
6 [label="t"]
6 -> 6 [label="1"]
}
subgraph cluster_3 {
color=red
label=""
4 [label="F(b)\n⓿"]
4 -> 6 [label="b"]
4 -> 4 [label="!b"]
}
subgraph cluster_4 {
color=green
label=""
3 [label="GF(b)"]
3 -> 3 [label="b"]
3 -> -8.4 [label="!b", style=bold, color="#FAA43A", arrowhead=onormal]
-8.4 [label=<>,shape=point]
-8.4 -> 3 [style=bold, color="#FAA43A"]
-8.4 -> 4 [style=bold, color="#FAA43A"]
}
subgraph cluster_5 {
color=red
label=""
5 [label="((a) U (b))\n⓿"]
5 -> 6 [label="b"]
5 -> 5 [label="a & !b"]
}
subgraph cluster_6 {
color=black
label=""
0 [label="((((a) U (b)) && GF(b)) && FG(a))"]
}
0 -> -1 [label="b", arrowhead=onormal]
-1 [label=<>,shape=point]
-1 -> 1
......@@ -109,19 +121,7 @@ digraph G {
-4 -> 1 [style=bold, color="#F15854"]
-4 -> 3 [style=bold, color="#F15854"]
-4 -> 5 [style=bold, color="#F15854"]
1 -> 2 [label="a"]
1 -> 1 [label="1"]
2 -> 2 [label="a"]
3 -> 3 [label="b"]
3 -> -8 [label="!b", style=bold, color="#FAA43A", arrowhead=onormal]
-8 [label=<>,shape=point]
-8 -> 3 [style=bold, color="#FAA43A"]
-8 -> 4 [style=bold, color="#FAA43A"]
4 -> 6 [label="b"]
4 -> 4 [label="!b"]
5 -> 6 [label="b"]
5 -> 5 [label="a & !b"]
6 -> 6 [label="1"]
}
}
EOF
......@@ -353,7 +353,7 @@ State: 0
EOF
diff out5 expect
# Test if split option is correct
# Test if split option with color is correct
cat >ex6<<EOF
HOA: v1.1
States: 2
......@@ -373,6 +373,7 @@ EOF
run 0 autfilt --dot='baryf(Lato)' ex6 > ex6.dot
style='arrowhead=onormal'
cat >expect6.dot<<EOF
digraph G {
rankdir=LR
......@@ -389,11 +390,11 @@ digraph G {
-1 -> 1
0 [label=<0>]
0 -> 0 [label=<!a &amp; !c>]
0 -> -1.1 [label=<a &amp; b &amp; !c>, style=bold, color="#F17CB0", arrowhead=onormal]
0 -> -1.1 [label=<a &amp; b &amp; !c>, style=bold, color="#F17CB0", $style]
-1.1 [label=<>,shape=point]
-1.1 -> 0 [style=bold, color="#F17CB0"]
-1.1 -> 1 [style=bold, color="#F17CB0"]
0 -> -1.2 [label=<a &amp; !c>, style=bold, color="#FAA43A", arrowhead=onormal]
0 -> -1.2 [label=<a &amp; !c>, style=bold, color="#FAA43A", $style]
-1.2 [label=<>,shape=point]
-1.2 -> 0 [style=bold, color="#FAA43A"]
-1.2 -> 1 [style=bold, color="#FAA43A"]
......@@ -690,6 +691,79 @@ EOF
diff ex10.dot expect10.dot
cat >ex11 <<EOF
HOA: v1
tool: "LTL3HOA"
name: "SLAA for G((b & Fa) | (!b & G!a))"
States: 4
AP: 2 "b" "a"
Start: 0
Acceptance: 1 Fin(0)
--BODY--
State: 0 "G((b & Fa) | (!b & G!a))"
[(0 & 1)] 0
[(0 & !1)] 0&1
[(!0 & !1)] 0&2
State: 1 "Fa"
[(1)] 3
[(!1)] 1 {1}
State: 2 "G!a"
[(!1)] 2
State: 3 "t"
[t] 3
--END--
EOF
run 2 autfilt --dot='sbarf(Lato)' ex11 > ex11.dot
cat >expect11.dot <<EOF
digraph G {
rankdir=LR
label=<Fin(<font color="#5DA5DA"></font>)>
labelloc="t"
fontname="Lato"
node [fontname="Lato"]
edge [fontname="Lato"]
I [label="", style=invis, width=0]
I -> 0
subgraph cluster_0 {
color=green
label=""
3 [label="t"]
3 -> 3 [label=<1>]
}
subgraph cluster_1 {
color=green
label=""
1 [label="Fa"]
1 -> 3 [label=<a>]
1 -> 1 [label=<!a>]
}
subgraph cluster_2 {
color=green
label=""
2 [label="G!a"]
2 -> 2 [label=<!a>]
}
subgraph cluster_3 {
color=green
label=""
0 [label="G((b & Fa) | (!b & G!a))"]
0 -> 0 [label=<a &amp; b>]
0 -> -1.3 [label=<!a &amp; b>, arrowhead=onormal]
-1.3 [label=<>,shape=point]
-1.3 -> 0
-1.3 -> 1
0 -> -4.3 [label=<!a &amp; !b>, arrowhead=onormal]
-4.3 [label=<>,shape=point]
-4.3 -> 0
-4.3 -> 2
}
}
EOF
diff ex11.dot expect11.dot
# Detect cases where alternation-removal cannot work.
cat >in <<EOF
HOA: v1
......
......@@ -336,15 +336,15 @@ digraph G {
color=green
label=""
1 [label="1", peripheries=2]
1 -> 1 [label="1"]
}
subgraph cluster_1 {
color=red
label=""
0 [label="0"]
}
0 -> 1 [label="b"]
0 -> 0 [label="0"]
1 -> 1 [label="1"]
}
}
EOF
diff stdout expected
......
......@@ -327,21 +327,21 @@ digraph G {
subgraph cluster_0 {
color=green
1 [label="s1", peripheries=2]
1 -> 1 [label="a"]
}
subgraph cluster_1 {
color=green
0 [label="s0", peripheries=2]
0 -> 0 [label="b"]
}
subgraph cluster_2 {
color=black
3 [label="s3"]
3 -> 1 [label="a"]
3 -> 0 [label="b"]
}
0 -> 0 [label="b"]
1 -> 1 [label="a"]
2 [label="s2"]
2 -> 0 [label="b"]
3 -> 1 [label="a"]
3 -> 0 [label="b"]
}
EOF
......
......@@ -83,67 +83,67 @@ digraph G {
color=grey
label=""
5 [label="5"]
5 -> 6 [label="1"]
6 [label="6"]
6 -> 5 [label="1"]
}
subgraph cluster_1 {
color=grey
label=""
0 [label="0"]
0 -> 0 [label="a & b\n{0,1,2}"]
0 -> 0 [label="!a & !b\n{2}"]
0 -> 5 [label="a\n{2}"]
}
subgraph cluster_2 {
color=green
label=""
9 [label="9"]
9 -> 9 [label="!a & b\n{0,2}"]
9 -> 10 [label="a & b\n{0,1}"]
10 [label="10"]
10 -> 9 [label="!a & b\n{0,1}"]
10 -> 10 [label="a & b\n{0,2}"]
}
subgraph cluster_3 {
color=green
label=""
8 [label="8"]
8 -> 8 [label="!a & b\n{0,2}"]
8 -> 8 [label="a & b\n{0,1}"]
8 -> 9 [label="1"]
}
subgraph cluster_4 {
color=green
label=""
7 [label="7"]
7 -> 7 [label="!a & b\n{0,1}"]
7 -> 7 [label="a & b\n{0,2}"]
7 -> 8 [label="1"]
}
subgraph cluster_5 {
color=black
label=""
2 [label="2"]
2 -> 0 [label="a"]
2 -> 7 [label="b"]
}
subgraph cluster_6 {
color=red
label=""
4 [label="4"]
4 -> 4 [label="!b\n{1,2}"]
4 -> 2 [label="b"]
}
subgraph cluster_7 {
color=green
label=""
1 [label="1"]
3 [label="3"]
}
0 -> 0 [label="a & b\n{0,1,2}"]
0 -> 0 [label="!a & !b\n{2}"]
0 -> 5 [label="a\n{2}"]
1 -> 4 [label="b"]
1 -> 3 [label="a & !b"]
2 -> 0 [label="a"]
2 -> 7 [label="b"]
3 [label="3"]
3 -> 1 [label="a & b\n{0,1}"]
4 -> 4 [label="!b\n{1,2}"]
4 -> 2 [label="b"]
5 -> 6 [label="1"]
6 -> 5 [label="1"]
7 -> 7 [label="!a & b\n{0,1}"]
7 -> 7 [label="a & b\n{0,2}"]
7 -> 8 [label="1"]
8 -> 8 [label="!a & b\n{0,2}"]
8 -> 8 [label="a & b\n{0,1}"]
8 -> 9 [label="1"]
9 -> 9 [label="!a & b\n{0,2}"]
9 -> 10 [label="a & b\n{0,1}"]
10 -> 9 [label="!a & b\n{0,1}"]
10 -> 10 [label="a & b\n{0,2}"]
}
}
EOF
......
......@@ -15,7 +15,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2+"
"version": "3.5.3"
},
"name": ""
},
......@@ -122,19 +122,19 @@
"<polygon fill=\"black\" stroke=\"black\" points=\"161.511,-30.9167 154.101,-32.9203 158.055,-30.3633 154.599,-29.8099 154.599,-29.8099 154.599,-29.8099 158.055,-30.3633 155.097,-26.6995 161.511,-30.9167 161.511,-30.9167\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge4\" class=\"edge\"><title>0&#45;&gt;0</title>\n",
"<g id=\"edge5\" class=\"edge\"><title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M90.2208,-73.0373C88.9189,-82.8579 91.0453,-92 96.6,-92 100.766,-92 103.004,-86.8576 103.313,-80.1433\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"102.979,-73.0373 106.454,-79.8818 103.143,-76.5335 103.308,-80.0296 103.308,-80.0296 103.308,-80.0296 103.143,-76.5335 100.161,-80.1774 102.979,-73.0373 102.979,-73.0373\"/>\n",
"<text text-anchor=\"start\" x=\"93.1\" y=\"-95.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge5\" class=\"edge\"><title>0&#45;&gt;1</title>\n",
"<g id=\"edge6\" class=\"edge\"><title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M114.383,-51.4416C126.191,-48.2346 142.151,-43.8996 155.206,-40.3538\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"162.115,-38.4773 156.186,-43.352 158.738,-39.3947 155.36,-40.3121 155.36,-40.3121 155.36,-40.3121 158.738,-39.3947 154.534,-37.2723 162.115,-38.4773 162.115,-38.4773\"/>\n",
"<text text-anchor=\"start\" x=\"132.6\" y=\"-50.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\"><title>1&#45;&gt;1</title>\n",
"<g id=\"edge4\" class=\"edge\"><title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M172.569,-50.6641C171.006,-60.625 173.35,-70 179.6,-70 184.288,-70 186.778,-64.7266 187.071,-57.8876\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"186.631,-50.6641 190.201,-57.4598 186.844,-54.1576 187.056,-57.6511 187.056,-57.6511 187.056,-57.6511 186.844,-54.1576 183.912,-57.8425 186.631,-50.6641 186.631,-50.6641\"/>\n",
"<text text-anchor=\"start\" x=\"175.1\" y=\"-88.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
......@@ -144,7 +144,7 @@
"</svg>\n"
],
"text": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f7620378330> >"
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7faa50350420> >"
]
}
],
......@@ -189,68 +189,73 @@
"<!-- Generated by graphviz version 2.38.0 (20140413.2041)\n",
" -->\n",
"<!-- Title: G Pages: 1 -->\n",
"<svg width=\"154pt\" height=\"192pt\"\n",
" viewBox=\"0.00 0.00 153.60 192.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 188)\">\n",
"<svg width=\"244pt\" height=\"210pt\"\n",
" viewBox=\"0.00 0.00 243.90 210.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 206)\">\n",
"<title>G</title>\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-188 149.6,-188 149.6,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"50.3\" y=\"-169.8\" font-family=\"Lato\" font-size=\"14.00\">Fin(</text>\n",
"<text text-anchor=\"start\" x=\"75.3\" y=\"-169.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#5da5da\">\u24ff</text>\n",
"<text text-anchor=\"start\" x=\"91.3\" y=\"-169.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-206 239.895,-206 239.895,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"95.4476\" y=\"-187.8\" font-family=\"Lato\" font-size=\"14.00\">Fin(</text>\n",
"<text text-anchor=\"start\" x=\"120.448\" y=\"-187.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#5da5da\">\u24ff</text>\n",
"<text text-anchor=\"start\" x=\"136.448\" y=\"-187.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<g id=\"clust1\" class=\"cluster\"><title>cluster_0</title>\n",
"<polygon fill=\"none\" stroke=\"green\" points=\"85.6,-8 85.6,-93 137.6,-93 137.6,-8 85.6,-8\"/>\n",
"<polygon fill=\"none\" stroke=\"green\" points=\"70.6,-8 70.6,-93 122.6,-93 122.6,-8 70.6,-8\"/>\n",
"</g>\n",
"<g id=\"clust2\" class=\"cluster\"><title>cluster_1</title>\n",
"<polygon fill=\"none\" stroke=\"red\" points=\"85.6,-101 85.6,-153 137.6,-153 137.6,-101 85.6,-101\"/>\n",
"<polygon fill=\"none\" stroke=\"red\" points=\"70.6,-101 70.6,-171 227.895,-171 227.895,-101 70.6,-101\"/>\n",
"</g>\n",
"<!-- I -->\n",
"<!-- &#45;1 -->\n",
"<g id=\"node2\" class=\"node\"><title>&#45;1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"39.8\" cy=\"-82\" rx=\"1.8\" ry=\"1.8\"/>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"39.8\" cy=\"-90\" rx=\"1.8\" ry=\"1.8\"/>\n",
"</g>\n",
"<!-- I&#45;&gt;&#45;1 -->\n",
"<g id=\"edge1\" class=\"edge\"><title>I&#45;&gt;&#45;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.10844,-82C2.6468,-82 20.196,-82 30.7973,-82\"/>\n",
"<polygon fill=\"none\" stroke=\"black\" points=\"30.9213,-84.4501 37.9213,-82 30.9212,-79.5501 30.9213,-84.4501\"/>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.10844,-90C2.6468,-90 20.196,-90 30.7973,-90\"/>\n",
"<polygon fill=\"none\" stroke=\"black\" points=\"30.9213,-92.4501 37.9213,-90 30.9212,-87.5501 30.9213,-92.4501\"/>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node3\" class=\"node\"><title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"111.6\" cy=\"-127\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"111.6\" y=\"-123.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"96.6\" cy=\"-130\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"96.6\" y=\"-126.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- &#45;1&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\"><title>&#45;1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M41.2389,-83.4339C42.8255,-88.3703 48.7502,-104.807 59.6,-113 67.3475,-118.85 77.3952,-122.256 86.5214,-124.239\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"93.5814,-125.543 86.1255,-127.369 90.1396,-124.907 86.6979,-124.272 86.6979,-124.272 86.6979,-124.272 90.1396,-124.907 87.2703,-121.174 93.5814,-125.543 93.5814,-125.543\"/>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M41.7512,-90.6943C45.7938,-93.6451 61.9639,-105.448 75.5392,-115.357\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"81.541,-119.738 74.0298,-118.155 78.714,-117.674 75.887,-115.611 75.887,-115.611 75.887,-115.611 78.714,-117.674 77.7442,-113.067 81.541,-119.738 81.541,-119.738\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node4\" class=\"node\"><title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"111.6\" cy=\"-34\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"111.6\" y=\"-30.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"96.6\" cy=\"-34\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"96.6\" y=\"-30.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- &#45;1&#45;&gt;1 -->\n",
"<g id=\"edge3\" class=\"edge\"><title>&#45;1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M41.5839,-81.4609C46.3474,-78.1852 71.8242,-60.6653 90.4426,-47.8618\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"96.4539,-43.728 92.471,-50.2899 93.57,-45.7112 90.6861,-47.6944 90.6861,-47.6944 90.6861,-47.6944 93.57,-45.7112 88.9012,-45.0989 96.4539,-43.728 96.4539,-43.728\"/>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M41.7512,-89.028C46.0802,-84.6041 64.3165,-65.9685 78.3809,-51.5962\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"83.3402,-46.5283 80.6957,-53.7345 80.8923,-49.0298 78.4443,-51.5314 78.4443,-51.5314 78.4443,-51.5314 80.8923,-49.0298 76.1929,-49.3282 83.3402,-46.5283 83.3402,-46.5283\"/>\n",
"</g>\n",
"<!-- &#45;1.1 -->\n",
"<g id=\"node5\" class=\"node\"><title>&#45;1.1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"193.248\" cy=\"-136\" rx=\"26.7961\" ry=\"26.7961\"/>\n",
"<text text-anchor=\"middle\" x=\"193.248\" y=\"-132.3\" font-family=\"Lato\" font-size=\"14.00\">&#45;1.1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;&#45;1 -->\n",
"<g id=\"edge4\" class=\"edge\"><title>0&#45;&gt;&#45;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M98.8419,-113.981C94.4601,-108.857 89.5866,-102.816 85.6,-97 80.4256,-89.4515 83.4876,-83.6411 75.6,-79 67.3683,-74.1565 56.0932,-76.4083 48.6353,-78.8582\"/>\n",
"<polygon fill=\"none\" stroke=\"black\" points=\"47.3759,-76.7198 41.7465,-81.5482 49.1582,-81.2841 47.3759,-76.7198\"/>\n",
"<text text-anchor=\"start\" x=\"64.1\" y=\"-97.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"59.6\" y=\"-82.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#5da5da\">\u24ff</text>\n",
"<!-- 0&#45;&gt;&#45;1.1 -->\n",
"<g id=\"edge5\" class=\"edge\"><title>0&#45;&gt;&#45;1.1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M114.96,-131.1C127.343,-131.885 144.375,-132.965 159.3,-133.911\"/>\n",
"<polygon fill=\"none\" stroke=\"black\" points=\"159.287,-136.365 166.428,-134.363 159.597,-131.475 159.287,-136.365\"/>\n",
"<text text-anchor=\"start\" x=\"137.1\" y=\"-151.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"132.6\" y=\"-136.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#5da5da\">\u24ff</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge5\" class=\"edge\"><title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M103.932,-50.2903C102.083,-60.3892 104.639,-70 111.6,-70 116.821,-70 119.564,-64.5939 119.829,-57.6304\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"119.268,-50.2903 122.942,-57.0299 119.535,-53.7801 119.801,-57.2699 119.801,-57.2699 119.801,-57.2699 119.535,-53.7801 116.66,-57.5099 119.268,-50.2903 119.268,-50.2903\"/>\n",
"<text text-anchor=\"start\" x=\"107.1\" y=\"-73.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"<g id=\"edge4\" class=\"edge\"><title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M90.2208,-51.0373C88.9189,-60.8579 91.0453,-70 96.6,-70 100.766,-70 103.004,-64.8576 103.313,-58.1433\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"102.979,-51.0373 106.454,-57.8818 103.143,-54.5335 103.308,-58.0296 103.308,-58.0296 103.308,-58.0296 103.143,-54.5335 100.161,-58.1774 102.979,-51.0373 102.979,-51.0373\"/>\n",
"<text text-anchor=\"start\" x=\"92.1\" y=\"-73.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f7620378870> >"
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7faa50350810> >"
]
}
],
......@@ -276,12 +281,14 @@
"''')"
],
"language": "python",
"metadata": {},
"metadata": {
"scrolled": true
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 4,
"prompt_number": 5,
"svg": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
......@@ -289,75 +296,80 @@
"<!-- Generated by graphviz version 2.38.0 (20140413.2041)\n",
" -->\n",
"<!-- Title: G Pages: 1 -->\n",
"<svg width=\"181pt\" height=\"170pt\"\n",
" viewBox=\"0.00 0.00 181.00 169.80\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 165.8)\">\n",
"<svg width=\"320pt\" height=\"147pt\"\n",
" viewBox=\"0.00 0.00 319.90 147.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 143)\">\n",
"<title>G</title>\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-165.8 177,-165.8 177,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"64\" y=\"-147.6\" font-family=\"Lato\" font-size=\"14.00\">Fin(</text>\n",
"<text text-anchor=\"start\" x=\"89\" y=\"-147.6\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#5da5da\">\u24ff</text>\n",
"<text text-anchor=\"start\" x=\"105\" y=\"-147.6\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-143 315.895,-143 315.895,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"133.448\" y=\"-124.8\" font-family=\"Lato\" font-size=\"14.00\">Fin(</text>\n",
"<text text-anchor=\"start\" x=\"158.448\" y=\"-124.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#5da5da\">\u24ff</text>\n",
"<text text-anchor=\"start\" x=\"174.448\" y=\"-124.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<g id=\"clust1\" class=\"cluster\"><title>cluster_0</title>\n",
"<polygon fill=\"none\" stroke=\"green\" points=\"30,-8 30,-108 165,-108 165,-8 30,-8\"/>\n",
"<polygon fill=\"none\" stroke=\"green\" points=\"70.6,-8 70.6,-108 303.895,-108 303.895,-8 70.6,-8\"/>\n",
"</g>\n",
"<!-- I -->\n",
"<!-- &#45;1 -->\n",
"<g id=\"node2\" class=\"node\"><title>&#45;1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-137\" rx=\"1.8\" ry=\"1.8\"/>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"39.8\" cy=\"-5\" rx=\"1.8\" ry=\"1.8\"/>\n",
"</g>\n",
"<!-- I&#45;&gt;&#45;1 -->\n",
"<g id=\"edge1\" class=\"edge\"><title>I&#45;&gt;&#45;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15491,-137C3.52733,-137 32.5548,-137 46.9758,-137\"/>\n",
"<polygon fill=\"none\" stroke=\"black\" points=\"47.1189,-139.45 54.1189,-137 47.1188,-134.55 47.1189,-139.45\"/>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.10844,-5C2.6468,-5 20.196,-5 30.7973,-5\"/>\n",
"<polygon fill=\"none\" stroke=\"black\" points=\"30.9213,-7.4501 37.9213,-5 30.9212,-2.5501 30.9213,-7.4501\"/>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node3\" class=\"node\"><title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-34\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-30.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"96.6\" cy=\"-34\" rx=\"18\" ry=\"18\"/>\n",