diff --git a/src/core/counterexample.cpp b/src/core/counterexample.cpp index 6fbb6a1..7f8be55 100644 --- a/src/core/counterexample.cpp +++ b/src/core/counterexample.cpp @@ -5,11 +5,22 @@ using namespace storm::counterexamples; // Define python bindings void define_counterexamples(py::module& m) { - py::class_>(m, "FlatSet", "Container to pass to program"); - - + py::class_>(m, "FlatSet", "Container to pass to program") + .def(py::init<>()) + .def("insert", [](boost::container::flat_set& flatset, uint64_t value) {flatset.insert(value);}) + .def("__str__", [](boost::container::flat_set const& set) { std::stringstream str; str << "["; for(auto const& i : set) { str << i << ", ";} str << "]"; return str.str(); }) + .def("__len__", [](boost::container::flat_set const& set) { return set.size();}) + ; + using CexGeneratorOptions = SMTMinimalLabelSetGenerator::Options; + py::class_(m, "SMTCounterExampleGeneratorOptions", "Options for highlevel counterexample generation") + .def(py::init<>()) + .def_readwrite("check_threshold_feasible", &CexGeneratorOptions::checkThresholdFeasible) + .def_readwrite("encode_reachability", &CexGeneratorOptions::encodeReachability) + .def_readwrite("silent", &CexGeneratorOptions::silent) + .def_readwrite("use_dynamic_constraints", &CexGeneratorOptions::useDynamicConstraints) + ; py::class_>(m, "SMTCounterExampleGenerator", "Highlevel Counterexample Generator with SMT as backend"). - def_static("build", &SMTMinimalLabelSetGenerator::computeCounterexampleLabelSet) + def_static("build", &SMTMinimalLabelSetGenerator::computeCounterexampleLabelSet, "Compute counterexample", py::arg("env"), py::arg("symbolic_model"), py::arg("model"), py::arg("formula"), py::arg("dontcare"), py::arg("options")) ;