split: add separate_edges() and a edge_separator class

This generalizes (and replaces) the two-argument split that was
introduced in c2832cabfc.

* spot/twaalgos/split.cc, spot/twaalgos/split.hh (edge_separator): New
class.
(separate_edges): New function.
(split_edges): Remove the two argument version.
* spot/twaalgos/forq_contains.cc: Adjust to use the edge_separator
class.
* tests/python/splitedge.py: Adjust test case.
* tests/python/split.ipynb: New file.
* tests/Makefile.am, doc/org/tut.org: Add it.
* NEWS: Mention it.
This commit is contained in:
Alexandre Duret-Lutz 2024-03-18 16:31:07 +01:00
parent 0a045e5f76
commit 3bcffa2fcd
8 changed files with 2395 additions and 200 deletions

View file

@ -27,8 +27,11 @@ def create_aps(aut):
def do_edge_test(aut, aps, edges_before, edges_after):
tc.assertEqual(aut.num_edges(), edges_before)
aut = spot.split_edges(aut, aps)
tc.assertEqual(aut.num_edges(), edges_after)
es = spot.edge_separator()
for ap in aps:
es.add_to_basis(ap)
res = es.separate_compat(aut)
tc.assertEqual(res.num_edges(), edges_after)
aut = spot.automaton("""
HOA: v1