Commit 5e5a6948 authored by Alexandre Duret-Lutz's avatar Alexandre Duret-Lutz
Browse files

twa_graph: do not order BDDs by IDs in merge_edges()

Fixes #282.

* spot/misc/bddlt.hh (bdd_less_than_stable): New function.
* spot/twa/twagraph.cc (merge_edges): Use it.
* tests/core/genltl.test: Adjust, and add an extra test
for the behavior of #282.
* tests/core/complement.test, tests/core/degenid.test,
tests/core/ltldo.test, tests/core/prodor.test,
tests/core/readsave.test, tests/core/sbacc.test,
tests/python/atva16-fig2a.ipynb, tests/python/automata.ipynb,
tests/python/decompose.ipynb, tests/python/dualize.py,
tests/python/highlighting.ipynb, tests/python/piperead.ipynb,
tests/python/product.ipynb, tests/python/simstate.py,
tests/python/tra2tba.py: Adjust all expected outputs.
* NEWS: Mention the bug.
parent 2bca21f7
...@@ -76,6 +76,14 @@ New in spot 2.4.0.dev (not yet released) ...@@ -76,6 +76,14 @@ New in spot 2.4.0.dev (not yet released)
spot::scc_info::marks(), spot::scc_info::marks_of() and spot::scc_info::marks(), spot::scc_info::marks_of() and
spot::scc_info::acc_sets_of() respectively. spot::scc_info::acc_sets_of() respectively.
Bugs fixed:
- The twa_graph::mege_edges() function relied on BDD IDs to sort
edges. This in turn caused some algorithm (like the
degeneralization) to produce slighltly different outputs (but
still correct outputs) depending on the BDD operations performed
before.
New in spot 2.4 (2017-09-06) New in spot 2.4 (2017-09-06)
Build: Build:
......
// -*- coding: utf-8 -*- // -*- coding: utf-8 -*-
// Copyright (C) 2011, 2014 Laboratoire de Recherche et Developpement de // Copyright (C) 2011, 2014, 2017 Laboratoire de Recherche et
// l'Epita (LRDE). // Developpement de l'Epita (LRDE).
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6), // Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre // département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie. // et Marie Curie.
...@@ -29,6 +29,10 @@ namespace spot ...@@ -29,6 +29,10 @@ namespace spot
{ {
/// \ingroup misc_tools /// \ingroup misc_tools
/// \brief Comparison functor for BDDs. /// \brief Comparison functor for BDDs.
///
/// This comparison function use BDD ids for efficiency. An
/// algorithm depending on this order may return different results
/// depending on how the BDD library has been used before.
struct bdd_less_than : struct bdd_less_than :
public std::binary_function<const bdd&, const bdd&, bool> public std::binary_function<const bdd&, const bdd&, bool>
{ {
...@@ -39,6 +43,43 @@ namespace spot ...@@ -39,6 +43,43 @@ namespace spot
} }
}; };
/// \ingroup misc_tools
/// \brief Comparison functor for BDDs.
///
/// This comparison function actually check for BDD variables, so as
/// long as the variable order is the same, the output of this
/// comparison will be stable and independent on previous BDD
/// operations.
struct bdd_less_than_stable :
public std::binary_function<const bdd&, const bdd&, bool>
{
bool
operator()(const bdd& left, const bdd& right) const
{
int li = left.id();
int ri = right.id();
if (li == ri)
return false;
if (li <= 1 || ri <= 1)
return li < ri;
{
int vl = bdd_var(left);
int vr = bdd_var(right);
if (vl != vr)
return vl < vr;
}
// We check the high side before low, this way
// !a&b comes before a&!b and a&b
{
bdd hl = bdd_high(left);
bdd hr = bdd_high(right);
if (hl != hr)
return operator()(hl, hr);
return operator()(bdd_low(left), bdd_low(right));
}
}
};
/// \ingroup misc_tools /// \ingroup misc_tools
/// \brief Hash functor for BDDs. /// \brief Hash functor for BDDs.
struct bdd_hash : struct bdd_hash :
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <spot/twa/twagraph.hh> #include <spot/twa/twagraph.hh>
#include <spot/tl/print.hh> #include <spot/tl/print.hh>
#include <spot/misc/bddlt.hh>
#include <vector> #include <vector>
#include <deque> #include <deque>
...@@ -79,11 +80,11 @@ namespace spot ...@@ -79,11 +80,11 @@ namespace spot
delete namer; delete namer;
} }
/// \brief Merge universal destinations /// \brief Merge universal destinations
/// ///
/// If several states have the same universal destination, merge /// If several states have the same universal destination, merge
/// them all. Also remove unused destination, and any redundant /// them all. Also remove unused destination, and any redundant
/// state in each destination. /// state in each destination.
void twa_graph::merge_univ_dests() void twa_graph::merge_univ_dests()
{ {
auto& g = get_graph(); auto& g = get_graph();
...@@ -198,7 +199,8 @@ namespace spot ...@@ -198,7 +199,8 @@ namespace spot
return true; return true;
if (lhs.dst > rhs.dst) if (lhs.dst > rhs.dst)
return false; return false;
return lhs.cond.id() < rhs.cond.id(); bdd_less_than_stable lt;
return lt(lhs.cond, rhs.cond);
// Do not sort on acceptance, we'll merge // Do not sort on acceptance, we'll merge
// them. // them.
}); });
......
...@@ -62,10 +62,10 @@ properties: trans-labels explicit-labels trans-acc complete ...@@ -62,10 +62,10 @@ properties: trans-labels explicit-labels trans-acc complete
properties: deterministic stutter-invariant properties: deterministic stutter-invariant
--BODY-- --BODY--
State: 0 State: 0
[0&1] 0 {0 1}
[!0&!1] 0 [!0&!1] 0
[!0&1] 0 {1} [!0&1] 0 {1}
[0&!1] 0 {0} [0&!1] 0 {0}
[0&1] 0 {0 1}
--END-- --END--
HOA: v1 HOA: v1
States: 4 States: 4
......
#!/bin/sh #!/bin/sh
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Copyright (C) 2011, 2013, 2014, 2015 Laboratoire de Recherche et # Copyright (C) 2011, 2013, 2014, 2015, 2017 Laboratoire de Recherche
# Développement de l'Epita (LRDE). # et Développement de l'Epita (LRDE).
# #
# This file is part of Spot, a model checking library. # This file is part of Spot, a model checking library.
# #
...@@ -242,15 +242,15 @@ State: 0 ...@@ -242,15 +242,15 @@ State: 0
[0] 1 [0] 1
State: 1 {0} State: 1 {0}
[1&2] 1 [1&2] 1
[!1&2] 2 [!2] 2
[!2] 3 [!1&2] 3
State: 2 State: 2
[1] 1
[!1] 2
State: 3
[1&2] 1 [1&2] 1
[!1&2] 2 [!2] 2
[!2] 3 [!1&2] 3
State: 3
[1] 1
[!1] 3
--END-- --END--
EOF EOF
diff out expected diff out expected
...@@ -136,7 +136,7 @@ test $(genltl --kr-nlogn=4 | ltl2tgba --low --stats=%s) -ge 16 ...@@ -136,7 +136,7 @@ test $(genltl --kr-nlogn=4 | ltl2tgba --low --stats=%s) -ge 16
test $(genltl --kr-n=4 | ltl2tgba --low --stats=%s) -ge 16 test $(genltl --kr-n=4 | ltl2tgba --low --stats=%s) -ge 16
genltl --ms-example=0..4 --ms-phi-r=0..2 --ms-phi-s=0..2 --ms-phi-h=0..4 \ genltl --ms-example=0..4 --ms-phi-r=0..2 --ms-phi-s=0..2 --ms-phi-h=0..4 \
--format=%F=%L,%f | --gf-equiv=0..5 --format=%F=%L,%f |
ltl2tgba -G -D -F-/2 --stats='%<,%s' > out ltl2tgba -G -D -F-/2 --stats='%<,%s' > out
cat >exp<<EOF cat >exp<<EOF
ms-example=0,1 ms-example=0,1
...@@ -146,21 +146,15 @@ ms-example=3,7 ...@@ -146,21 +146,15 @@ ms-example=3,7
ms-example=4,12 ms-example=4,12
ms-phi-r=0,2 ms-phi-r=0,2
ms-phi-r=1,16 ms-phi-r=1,16
ms-phi-r=2,25 ms-phi-r=2,29
ms-phi-s=0,5 ms-phi-s=0,5
ms-phi-s=1,7 ms-phi-s=1,8
ms-phi-s=2,1322 ms-phi-s=2,497
ms-phi-h=0,2 ms-phi-h=0,2
ms-phi-h=1,4 ms-phi-h=1,4
ms-phi-h=2,21 ms-phi-h=2,21
ms-phi-h=3,170 ms-phi-h=3,170
ms-phi-h=4,1816 ms-phi-h=4,1816
EOF
diff out exp
genltl --gf-equiv=0..5 --format=%F=%L,%f |
ltl2tgba -G -D -F-/2 --stats='%<,%s' > out
cat >exp<<EOF
gf-equiv=0,1 gf-equiv=0,1
gf-equiv=1,4 gf-equiv=1,4
gf-equiv=2,8 gf-equiv=2,8
...@@ -169,3 +163,9 @@ gf-equiv=4,81 ...@@ -169,3 +163,9 @@ gf-equiv=4,81
gf-equiv=5,431 gf-equiv=5,431
EOF EOF
diff out exp diff out exp
# Running ltl2tgba on one formula at a time should give the same results
genltl --ms-example=0..4 --ms-phi-r=0..2 --ms-phi-s=0..2 --ms-phi-h=0..4 \
--gf-equiv=0..5 --format=%F=%L,%f |
ltldo -F-/2 'ltl2tgba -G -D' --stats='%<,%s' > out
diff out exp
...@@ -82,8 +82,8 @@ properties: trans-labels explicit-labels trans-acc complete ...@@ -82,8 +82,8 @@ properties: trans-labels explicit-labels trans-acc complete
properties: deterministic stutter-invariant properties: deterministic stutter-invariant
--BODY-- --BODY--
State: 0 State: 0
[0] 0 {0}
[!0] 0 [!0] 0
[0] 0 {0}
--END-- --END--
EOF EOF
diff output expected diff output expected
...@@ -103,8 +103,8 @@ properties: trans-labels explicit-labels trans-acc complete ...@@ -103,8 +103,8 @@ properties: trans-labels explicit-labels trans-acc complete
properties: deterministic stutter-invariant properties: deterministic stutter-invariant
--BODY-- --BODY--
State: 0 State: 0
[0] 0 {0}
[!0] 0 [!0] 0
[0] 0 {0}
--END-- --END--
EOF EOF
diff output expected diff output expected
...@@ -124,8 +124,8 @@ properties: trans-labels explicit-labels trans-acc complete ...@@ -124,8 +124,8 @@ properties: trans-labels explicit-labels trans-acc complete
properties: deterministic properties: deterministic
--BODY-- --BODY--
State: 0 State: 0
[0] 0 {0}
[!0] 0 [!0] 0
[0] 0 {0}
--END-- --END--
EOF EOF
diff output expected diff output expected
......
...@@ -65,18 +65,18 @@ properties: trans-labels explicit-labels trans-acc complete ...@@ -65,18 +65,18 @@ properties: trans-labels explicit-labels trans-acc complete
properties: stutter-invariant properties: stutter-invariant
--BODY-- --BODY--
State: 0 State: 0
[0] 0 {1}
[!0] 0 [!0] 0
[0&1] 1 {1} [0] 0 {1}
[!0&1] 1 [!0&1] 1
[0&1] 1 {1}
State: 1 State: 1
[0&1] 1 {0 1}
[!0&1] 1 {0} [!0&1] 1 {0}
[0&!1] 2 {0 1} [0&1] 1 {0 1}
[!0&!1] 2 {0} [!0&!1] 2 {0}
[0&!1] 2 {0 1}
State: 2 State: 2
[0] 2 {1}
[!0] 2 [!0] 2
[0] 2 {1}
--END-- --END--
EOF EOF
diff por.hoa exp diff por.hoa exp
...@@ -96,13 +96,13 @@ Acceptance: 2 Inf(0)&Inf(1) ...@@ -96,13 +96,13 @@ Acceptance: 2 Inf(0)&Inf(1)
properties: trans-labels explicit-labels trans-acc stutter-invariant properties: trans-labels explicit-labels trans-acc stutter-invariant
--BODY-- --BODY--
State: 0 State: 0
[0] 0 {1}
[!0] 0 [!0] 0
[0&1] 1 {1} [0] 0 {1}
[!0&1] 1 [!0&1] 1
[0&1] 1 {1}
State: 1 State: 1
[0&1] 1 {0 1}
[!0&1] 1 {0} [!0&1] 1 {0}
[0&1] 1 {0 1}
--END-- --END--
EOF EOF
diff pand.hoa exp diff pand.hoa exp
......
...@@ -363,10 +363,10 @@ digraph G { ...@@ -363,10 +363,10 @@ digraph G {
I [label="", style=invis, width=0] I [label="", style=invis, width=0]
I -> 0 I -> 0
0 [label="0"] 0 [label="0"]
0 -> 0 [label="a & b\n{0,1}"]
0 -> 0 [label="!a & !b"] 0 -> 0 [label="!a & !b"]
0 -> 0 [label="!a & b\n{1}"] 0 -> 0 [label="!a & b\n{1}"]
0 -> 0 [label="a & !b\n{0}"] 0 -> 0 [label="a & !b\n{0}"]
0 -> 0 [label="a & b\n{0,1}"]
} }
EOF EOF
diff output expected diff output expected
...@@ -382,10 +382,10 @@ digraph G { ...@@ -382,10 +382,10 @@ digraph G {
I [label="", style=invis, width=0] I [label="", style=invis, width=0]
I -> 0 I -> 0
0 [label="0"] 0 [label="0"]
0 -> 0 [label="a & b\n⓿❶"]
0 -> 0 [label="!a & !b"] 0 -> 0 [label="!a & !b"]
0 -> 0 [label="!a & b\n❶"] 0 -> 0 [label="!a & b\n❶"]
0 -> 0 [label="a & !b\n⓿"] 0 -> 0 [label="a & !b\n⓿"]
0 -> 0 [label="a & b\n⓿❶"]
} }
EOF EOF
diff output expected diff output expected
...@@ -407,10 +407,10 @@ digraph G { ...@@ -407,10 +407,10 @@ digraph G {
I [label="", style=invis, width=0] I [label="", style=invis, width=0]
I -> 0 I -> 0
0 [label=<0>] 0 [label=<0>]
0 -> 0 [label=<a &amp; b<br/>$zero$one>]
0 -> 0 [label=<!a &amp; !b>] 0 -> 0 [label=<!a &amp; !b>]
0 -> 0 [label=<!a &amp; b<br/>$one>] 0 -> 0 [label=<!a &amp; b<br/>$one>]
0 -> 0 [label=<a &amp; !b<br/>$zero>] 0 -> 0 [label=<a &amp; !b<br/>$zero>]
0 -> 0 [label=<a &amp; b<br/>$zero$one>]
} }
EOF EOF
diff output expected diff output expected
......
...@@ -37,26 +37,26 @@ Acceptance: 2 Inf(0)&Inf(1) ...@@ -37,26 +37,26 @@ Acceptance: 2 Inf(0)&Inf(1)
properties: trans-labels explicit-labels state-acc complete properties: trans-labels explicit-labels state-acc complete
properties: deterministic stutter-invariant properties: deterministic stutter-invariant
--BODY-- --BODY--
State: 0 {0} State: 0 {0 1}
[0&!1] 0 [0&1] 0
[0&1] 1 [!0&!1] 1
[!0&!1] 2 [!0&1] 2
[!0&1] 3 [0&!1] 3
State: 1 {0 1} State: 1
[0&!1] 0 [0&1] 0
[0&1] 1 [!0&!1] 1
[!0&!1] 2 [!0&1] 2
[!0&1] 3 [0&!1] 3
State: 2 State: 2 {1}
[0&!1] 0 [0&1] 0
[0&1] 1 [!0&!1] 1
[!0&!1] 2 [!0&1] 2
[!0&1] 3 [0&!1] 3
State: 3 {1} State: 3 {0}
[0&!1] 0 [0&1] 0
[0&1] 1 [!0&!1] 1
[!0&!1] 2 [!0&1] 2
[!0&1] 3 [0&!1] 3
--END-- --END--
EOF EOF
......
...@@ -140,29 +140,29 @@ ...@@ -140,29 +140,29 @@
"<g id=\"edge5\" class=\"edge\"><title>1&#45;&gt;1</title>\n", "<g id=\"edge5\" class=\"edge\"><title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M166.467,-136.153C166.078,-145.539 166.922,-154 169,-154 170.526,-154 171.387,-149.437 171.582,-143.295\"/>\n", "<path fill=\"none\" stroke=\"black\" d=\"M166.467,-136.153C166.078,-145.539 166.922,-154 169,-154 170.526,-154 171.387,-149.437 171.582,-143.295\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"171.533,-136.153 174.731,-143.131 171.557,-139.653 171.581,-143.153 171.581,-143.153 171.581,-143.153 171.557,-139.653 168.431,-143.174 171.533,-136.153 171.533,-136.153\"/>\n", "<polygon fill=\"black\" stroke=\"black\" points=\"171.533,-136.153 174.731,-143.131 171.557,-139.653 171.581,-143.153 171.581,-143.153 171.581,-143.153 171.557,-139.653 168.431,-143.174 171.533,-136.153 171.533,-136.153\"/>\n",
"<text text-anchor=\"start\" x=\"150.5\" y=\"-172.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n", "<text text-anchor=\"start\" x=\"148.5\" y=\"-157.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"161\" y=\"-157.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">\u2776</text>\n",
"</g>\n", "</g>\n",
"<!-- 1&#45;&gt;1 -->\n", "<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\"><title>1&#45;&gt;1</title>\n", "<g id=\"edge6\" class=\"edge\"><title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M165.104,-135.577C162.424,-156.718 163.723,-184 169,-184 173.7,-184 175.244,-162.36 173.633,-142.691\"/>\n", "<path fill=\"none\" stroke=\"black\" d=\"M164.828,-135.699C162.523,-152.996 163.914,-172 169,-172 173.371,-172 175.012,-157.965 173.925,-143.04\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"172.896,-135.577 176.75,-142.215 173.257,-139.059 173.617,-142.54 173.617,-142.54 173.617,-142.54 173.257,-139.059 170.484,-142.864 172.896,-135.577 172.896,-135.577\"/>\n", "<polygon fill=\"black\" stroke=\"black\" points=\"173.172,-135.699 177.02,-142.341 173.529,-139.181 173.886,-142.663 173.886,-142.663 173.886,-142.663 173.529,-139.181 170.753,-142.984 173.172,-135.699 173.172,-135.699\"/>\n",
"<text text-anchor=\"start\" x=\"148.5\" y=\"-187.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n", "<text text-anchor=\"start\" x=\"150.5\" y=\"-190.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"161\" y=\"-175.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">\u2776</text>\n",
"</g>\n", "</g>\n",
"<!-- 1&#45;&gt;1 -->\n", "<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge7\" class=\"edge\"><title>1&#45;&gt;1</title>\n", "<g id=\"edge7\" class=\"edge\"><title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M164.049,-135.467C158.901,-163.149 160.551,-202 169,-202 176.756,-202 178.783,-169.261 175.081,-142.477\"/>\n", "<path fill=\"none\" stroke=\"black\" d=\"M164.049,-135.467C158.901,-163.149 160.551,-202 169,-202 176.756,-202 178.783,-169.261 175.081,-142.477\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"173.951,-135.467 178.174,-141.877 174.508,-138.923 175.065,-142.378 175.065,-142.378 175.065,-142.378 174.508,-138.923 171.955,-142.879 173.951,-135.467 173.951,-135.467\"/>\n", "<polygon fill=\"black\" stroke=\"black\" points=\"173.951,-135.467 178.174,-141.877 174.508,-138.923 175.065,-142.378 175.065,-142.378 175.065,-142.378 174.508,-138.923 171.955,-142.879 173.951,-135.467 173.951,-135.467\"/>\n",
"<text text-anchor=\"start\" x=\"152\" y=\"-219.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n", "<text text-anchor=\"start\" x=\"150.5\" y=\"-220.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"153\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n", "<text text-anchor=\"start\" x=\"161\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"<text text-anchor=\"start\" x=\"169\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">\u2776</text>\n",
"</g>\n", "</g>\n",
"<!-- 1&#45;&gt;1 -->\n", "<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge8\" class=\"edge\"><title>1&#45;&gt;1</title>\n", "<g id=\"edge8\" class=\"edge\"><title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M163.463,-135.36C155.342,-171.623 157.188,-230 169,-230 180.074,-230 182.389,-178.692 175.943,-142.399\"/>\n", "<path fill=\"none\" stroke=\"black\" d=\"M163.519,-135.237C155.333,-171.922 157.16,-232 169,-232 180.1,-232 182.399,-179.197 175.898,-142.369\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"174.537,-135.36 178.997,-141.607 175.223,-138.792 175.908,-142.224 175.908,-142.224 175.908,-142.224 175.223,-138.792 172.819,-142.841 174.537,-135.36 174.537,-135.36\"/>\n", "<polygon fill=\"black\" stroke=\"black\" points=\"174.481,-135.237 178.935,-141.488 175.163,-138.669 175.845,-142.102 175.845,-142.102 175.845,-142.102 175.163,-138.669 172.756,-142.716 174.481,-135.237 174.481,-135.237\"/>\n",
"<text text-anchor=\"start\" x=\"150.5\" y=\"-248.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n", "<text text-anchor=\"start\" x=\"152\" y=\"-249.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"161\" y=\"-233.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n", "<text text-anchor=\"start\" x=\"153\" y=\"-235.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"<text text-anchor=\"start\" x=\"169\" y=\"-235.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">\u2776</text>\n",
"</g>\n", "</g>\n",
"<!-- 2&#45;&gt;2 -->\n", "<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge9\" class=\"edge\"><title>2&#45;&gt;2</title>\n", "<g id=\"edge9\" class=\"edge\"><title>2&#45;&gt;2</title>\n",
...@@ -176,7 +176,7 @@ ...@@ -176,7 +176,7 @@
"</svg>\n" "</svg>\n"
], ],
"text": [ "text": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7ffb2c16a630> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f0d2406cc00> >"
] ]
} }
], ],
......
This diff is collapsed.
...@@ -212,7 +212,7 @@ ...@@ -212,7 +212,7 @@
"</svg>\n" "</svg>\n"
], ],
"text": [ "text": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f71e062e720> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7effc5466510> >"
] ]
} }
], ],
...@@ -330,7 +330,7 @@ ...@@ -330,7 +330,7 @@
"</svg>\n" "</svg>\n"
], ],
"text": [ "text": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f71e062e6f0> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7effc4bca420> >"
] ]
} }
], ],
...@@ -472,7 +472,7 @@ ...@@ -472,7 +472,7 @@
"</svg>\n" "</svg>\n"
], ],
"text": [ "text": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f71e062e5d0> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7effc4bca1b0> >"
] ]
} }
], ],
...@@ -563,7 +563,7 @@ ...@@ -563,7 +563,7 @@
"</svg>\n" "</svg>\n"
], ],
"text": [ "text": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f71e062e600> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7effc5466330> >"
] ]
} }
], ],
...@@ -628,20 +628,20 @@ ...@@ -628,20 +628,20 @@
"<g id=\"edge2\" class=\"edge\"><title>0&#45;&gt;0</title>\n",