ltsmin: implement a two-step loading

* spot/ltsmin/ltsmin.cc, spot/ltsmin/ltsmin.hh: Split load_ltsmin() into
ltsmin_model::load() and ltsmin_model::kripke().  Report errors using
exceptions instead of on std::cerr.
* python/spot/ltsmin.i: Deal with exceptions.
* tests/ltsmin/modelcheck.cc, tests/python/ltsmin.ipynb: Adjust.
This commit is contained in:
Alexandre Duret-Lutz 2016-01-25 17:04:09 +01:00
parent 84031d2ae1
commit 907b72fbfb
6 changed files with 230 additions and 191 deletions

View file

@ -1,6 +1,6 @@
// -*- coding: utf-8 -*-
// Copyright (C) 2011, 2012, 2013, 2014, 2015 Laboratoire de Recherche
// et Developpement de l'Epita (LRDE)
// Copyright (C) 2011, 2012, 2013, 2014, 2015, 2016 Laboratoire de
// Recherche et Developpement de l'Epita (LRDE)
//
// This file is part of Spot, a model checking library.
//
@ -216,8 +216,15 @@ checked_main(int argc, char **argv)
if (output != DotFormula)
{
tm.start("loading ltsmin model");
model = spot::load_ltsmin(argv[1], dict, &ap, deadf,
compress_states, true);
try
{
model = spot::ltsmin_model::load(argv[1]).kripke(&ap, dict, deadf,
compress_states);
}
catch (std::runtime_error& e)
{
std::cerr << e.what() << '\n';
}
tm.stop("loading ltsmin model");
if (!model)

View file

@ -1,7 +1,7 @@
{
"metadata": {
"name": "",
"signature": "sha256:d5994cc04991eaf218539c16319f17128cf42be5d813785fd977ee3d991a5c00"
"signature": "sha256:eba4457368b676284d4696dd7afe5596d865c6f9f6f44b5fd5dc7c6585757c89"
},
"nbformat": 3,
"nbformat_minor": 0,
@ -59,7 +59,7 @@
"cell_type": "code",
"collapsed": false,
"input": [
"m = spot.ltsmin.load(srcdir + '/../ltsmin/finite.dve', ['P.a<1', 'P.b>2'])\n",
"m = spot.ltsmin.load(srcdir + '/../ltsmin/finite.dve')\n",
"m"
],
"language": "python",
@ -69,6 +69,27 @@
"metadata": {},
"output_type": "pyout",
"prompt_number": 3,
"text": [
"<spot.ltsmin.model; proxy of <Swig Object of type 'spot::ltsmin_model *' at 0x7f6990bd44e0> >"
]
}
],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"k = m.kripke([\"P.a<1\", \"P.b>2\"])\n",
"k"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 4,
"svg": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
@ -310,11 +331,11 @@
"</svg>\n"
],
"text": [
"<spot.impl.kripke; proxy of <Swig Object of type 'std::shared_ptr< spot::kripke > *' at 0x7f40740974e0> >"
"<spot.impl.kripke; proxy of <Swig Object of type 'std::shared_ptr< spot::kripke > *' at 0x7f6990bd4600> >"
]
}
],
"prompt_number": 3
"prompt_number": 4
},
{
"cell_type": "code",
@ -328,7 +349,7 @@
{
"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",
@ -380,17 +401,17 @@
"</svg>\n"
],
"text": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f40740977e0> >"
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6990bd4c90> >"
]
}
],
"prompt_number": 4
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"spot.otf_product(m, a)"
"spot.otf_product(k, a)"
],
"language": "python",
"metadata": {},
@ -398,7 +419,7 @@
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"prompt_number": 6,
"svg": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
@ -510,20 +531,11 @@
"</svg>\n"
],
"text": [
"<spot.impl.twa_product; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_product > *' at 0x7f4074097720> >"
"<spot.impl.twa_product; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_product > *' at 0x7f6990bd49c0> >"
]
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 5
"prompt_number": 6
}
],
"metadata": {}