From a343bc6dbd4cbe3f2c2e89536639550b1e6b949a Mon Sep 17 00:00:00 2001 From: Matthias Volk Date: Fri, 22 May 2026 13:55:48 +0900 Subject: [PATCH 1/2] Removed unnecessary #ifdef for Python<=2 --- src/common.h | 8 ----- src/pycarl/common.h | 10 +----- src/pycarl/helpers.h | 15 --------- src/pycarl/typed_core/integer.cpp | 4 +-- src/pycarl/typed_core/polynomial.cpp | 12 ++++---- src/pycarl/typed_core/rational.cpp | 36 +++++++++++----------- src/pycarl/typed_core/rationalfunction.cpp | 10 +++--- src/pycarl/typed_core/term.cpp | 10 +++--- 8 files changed, 37 insertions(+), 68 deletions(-) delete mode 100644 src/pycarl/helpers.h diff --git a/src/common.h b/src/common.h index b04792b8fd..9ed82e0c21 100644 --- a/src/common.h +++ b/src/common.h @@ -10,14 +10,6 @@ namespace py = pybind11; using namespace pybind11::literals; -#if PY_MAJOR_VERSION >= 3 -#define PY_DIV "__truediv__" -#define PY_RDIV "__rtruediv__" -#else -#define PY_DIV "__div__" -#define PY_RDIV "__rdiv__" -#endif - PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr) PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr) diff --git a/src/pycarl/common.h b/src/pycarl/common.h index 854a8c6f91..9fe296cda0 100644 --- a/src/pycarl/common.h +++ b/src/pycarl/common.h @@ -8,15 +8,7 @@ #include -namespace py = pybind11; - -#if PY_MAJOR_VERSION >= 3 -#define PY_DIV "__truediv__" -#define PY_RDIV "__rtruediv__" -#else -#define PY_DIV "__div__" -#define PY_RDIV "__rdiv__" -#endif +#include "src/common.h" struct NoPickling : public std::exception { virtual const char* what() const throw() { diff --git a/src/pycarl/helpers.h b/src/pycarl/helpers.h deleted file mode 100644 index eb23fd73a4..0000000000 --- a/src/pycarl/helpers.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include -#include - -/** - * Helper function to get a string out of the stream operator. - * Used for __str__ functions. - */ -template -std::string streamToString(T const& t) { - std::stringstream ss; - ss << t; - return ss.str(); -} diff --git a/src/pycarl/typed_core/integer.cpp b/src/pycarl/typed_core/integer.cpp index 09a4cb4405..e457fd2774 100644 --- a/src/pycarl/typed_core/integer.cpp +++ b/src/pycarl/typed_core/integer.cpp @@ -42,7 +42,7 @@ void define_cln_integer(py::module& m) { .def("__rmul__", [](const cln::cl_I& rhs, carl::Variable::Arg lhs) -> Term { return cln::cl_RA(rhs) * lhs; }) .def("__rmul__", [](const cln::cl_I& rhs, const Monomial::Arg& lhs) -> Term { return cln::cl_RA(rhs) * lhs; }) - .def(PY_DIV, + .def("__truediv__", [](const cln::cl_I& lhs, const cln::cl_I& rhs) -> cln::cl_RA { if (carl::isZero(rhs)) throw std::runtime_error("Div by zero"); @@ -121,7 +121,7 @@ void define_gmp_integer(py::module& m) { .def("__rmul__", [](const mpz_class& rhs, carl::Variable::Arg lhs) -> Term { return mpq_class(rhs) * lhs; }) .def("__rmul__", [](const mpz_class& rhs, const Monomial::Arg& lhs) -> Term { return mpq_class(rhs) * lhs; }) - .def(PY_DIV, + .def("__truediv__", [](const mpz_class& lhs, const mpz_class& rhs) -> mpq_class { if (carl::isZero(rhs)) throw std::runtime_error("Div by zero"); diff --git a/src/pycarl/typed_core/polynomial.cpp b/src/pycarl/typed_core/polynomial.cpp index 068c58485d..7af1803c76 100644 --- a/src/pycarl/typed_core/polynomial.cpp +++ b/src/pycarl/typed_core/polynomial.cpp @@ -40,13 +40,13 @@ void define_polynomial(py::module& m) { .def(py::self * Term()) .def(py::self * py::self) - .def(PY_DIV, [](const Polynomial& lhs, const RationalFunction& rhs) { return RationalFunction(lhs) / rhs; }) - .def(PY_DIV, [](const Polynomial& lhs, const Polynomial& rhs) { return RationalFunction(lhs, rhs); }) - .def(PY_DIV, [](const Polynomial& lhs, const Term& rhs) { return RationalFunction(lhs) / rhs; }) - .def(PY_DIV, [](const Polynomial& lhs, const Monomial::Arg& rhs) { return RationalFunction(lhs) / rhs; }) - .def(PY_DIV, [](const Polynomial& lhs, carl::Variable::Arg rhs) { return RationalFunction(lhs) / rhs; }) + .def("__truediv__", [](const Polynomial& lhs, const RationalFunction& rhs) { return RationalFunction(lhs) / rhs; }) + .def("__truediv__", [](const Polynomial& lhs, const Polynomial& rhs) { return RationalFunction(lhs, rhs); }) + .def("__truediv__", [](const Polynomial& lhs, const Term& rhs) { return RationalFunction(lhs) / rhs; }) + .def("__truediv__", [](const Polynomial& lhs, const Monomial::Arg& rhs) { return RationalFunction(lhs) / rhs; }) + .def("__truediv__", [](const Polynomial& lhs, carl::Variable::Arg rhs) { return RationalFunction(lhs) / rhs; }) .def(py::self / Rational()) - .def(PY_DIV, [](const Polynomial& lhs, const Integer& rhs) -> Polynomial { return lhs / Rational(rhs); }) + .def("__truediv__", [](const Polynomial& lhs, const Integer& rhs) -> Polynomial { return lhs / Rational(rhs); }) .def("__pow__", [](const Polynomial& var, carl::uint exp) { return var.pow(exp); }) diff --git a/src/pycarl/typed_core/rational.cpp b/src/pycarl/typed_core/rational.cpp index f592fc1416..bd18aa21df 100644 --- a/src/pycarl/typed_core/rational.cpp +++ b/src/pycarl/typed_core/rational.cpp @@ -43,31 +43,31 @@ void define_cln_rational(py::module& m) { .def("__rmul__", [](const cln::cl_RA& rhs, carl::sint lhs) -> cln::cl_RA { return carl::rationalize(lhs) * rhs; }) .def("__rmul__", [](const cln::cl_RA& rhs, carl::Variable::Arg lhs) -> Term { return rhs * lhs; }) - .def(PY_DIV, + .def("__truediv__", [](const cln::cl_RA& lhs, const cln::cl_RA& rhs) -> cln::cl_RA { if (carl::isZero(rhs)) throw std::runtime_error("Div by zero"); return lhs / rhs; }) - .def(PY_DIV, + .def("__truediv__", [](const cln::cl_RA& lhs, carl::sint rhs) -> cln::cl_RA { if (rhs == 0.0) throw std::runtime_error("Div by zero"); return lhs / carl::rationalize(rhs); }) - .def(PY_RDIV, + .def("__rtruediv__", [](const cln::cl_RA& rhs, carl::sint lhs) -> cln::cl_RA { if (carl::isZero(rhs)) throw std::runtime_error("Div by zero"); return carl::rationalize(lhs) / rhs; }) - .def(PY_DIV, [](const Rational& lhs, const RationalFunction& rhs) { return RationalFunction(lhs) / rhs; }) - .def(PY_DIV, [](const Rational& lhs, const Polynomial& rhs) { return RationalFunction(lhs) / rhs; }) - .def(PY_DIV, [](const Rational& lhs, const Term& rhs) { return RationalFunction(lhs) / rhs; }) - .def(PY_DIV, [](const Rational& lhs, const Monomial::Arg& rhs) { return RationalFunction(lhs) / rhs; }) - .def(PY_DIV, [](const Rational& lhs, carl::Variable::Arg rhs) { return RationalFunction(lhs) / rhs; }) - .def(PY_RDIV, [](const Rational& rhs, carl::Variable::Arg lhs) { return RationalFunction(lhs) / rhs; }) + .def("__truediv__", [](const Rational& lhs, const RationalFunction& rhs) { return RationalFunction(lhs) / rhs; }) + .def("__truediv__", [](const Rational& lhs, const Polynomial& rhs) { return RationalFunction(lhs) / rhs; }) + .def("__truediv__", [](const Rational& lhs, const Term& rhs) { return RationalFunction(lhs) / rhs; }) + .def("__truediv__", [](const Rational& lhs, const Monomial::Arg& rhs) { return RationalFunction(lhs) / rhs; }) + .def("__truediv__", [](const Rational& lhs, carl::Variable::Arg rhs) { return RationalFunction(lhs) / rhs; }) + .def("__rtruediv__", [](const Rational& rhs, carl::Variable::Arg lhs) { return RationalFunction(lhs) / rhs; }) .def("__pow__", static_cast(&carl::pow)) .def("__pos__", [](const cln::cl_RA& var) { return cln::cl_RA(var); }) @@ -155,31 +155,31 @@ void define_gmp_rational(py::module& m) { .def("__rmul__", [](const mpq_class& rhs, carl::sint lhs) -> mpq_class { return carl::rationalize(lhs) * rhs; }) .def("__rmul__", [](const mpq_class& rhs, carl::Variable::Arg lhs) -> Term { return rhs * lhs; }) - .def(PY_DIV, + .def("__truediv__", [](const mpq_class& lhs, const mpq_class& rhs) -> mpq_class { if (carl::isZero(rhs)) throw std::runtime_error("Div by zero"); return lhs / rhs; }) - .def(PY_DIV, + .def("__truediv__", [](const mpq_class& lhs, carl::sint rhs) -> mpq_class { if (rhs == 0.0) throw std::runtime_error("Div by zero"); return lhs / carl::rationalize(rhs); }) - .def(PY_RDIV, + .def("__rtruediv__", [](const mpq_class& rhs, carl::sint lhs) -> mpq_class { if (carl::isZero(rhs)) throw std::runtime_error("Div by zero"); return carl::rationalize(lhs) / rhs; }) - .def(PY_DIV, [](const Rational& lhs, const RationalFunction& rhs) { return RationalFunction(lhs) / rhs; }) - .def(PY_DIV, [](const Rational& lhs, const Polynomial& rhs) { return RationalFunction(lhs) / rhs; }) - .def(PY_DIV, [](const Rational& lhs, const Term& rhs) { return RationalFunction(lhs) / rhs; }) - .def(PY_DIV, [](const Rational& lhs, const Monomial::Arg& rhs) { return RationalFunction(lhs) / rhs; }) - .def(PY_DIV, [](const Rational& lhs, carl::Variable::Arg rhs) { return RationalFunction(lhs) / rhs; }) - .def(PY_RDIV, [](const Rational& rhs, carl::Variable::Arg lhs) { return RationalFunction(lhs) / rhs; }) + .def("__truediv__", [](const Rational& lhs, const RationalFunction& rhs) { return RationalFunction(lhs) / rhs; }) + .def("__truediv__", [](const Rational& lhs, const Polynomial& rhs) { return RationalFunction(lhs) / rhs; }) + .def("__truediv__", [](const Rational& lhs, const Term& rhs) { return RationalFunction(lhs) / rhs; }) + .def("__truediv__", [](const Rational& lhs, const Monomial::Arg& rhs) { return RationalFunction(lhs) / rhs; }) + .def("__truediv__", [](const Rational& lhs, carl::Variable::Arg rhs) { return RationalFunction(lhs) / rhs; }) + .def("__rtruediv__", [](const Rational& rhs, carl::Variable::Arg lhs) { return RationalFunction(lhs) / rhs; }) .def("__pow__", static_cast(&carl::pow)) .def("__pos__", [](const mpq_class& var) { return mpq_class(var); }) diff --git a/src/pycarl/typed_core/rationalfunction.cpp b/src/pycarl/typed_core/rationalfunction.cpp index 80587dc263..b96180bb16 100644 --- a/src/pycarl/typed_core/rationalfunction.cpp +++ b/src/pycarl/typed_core/rationalfunction.cpp @@ -36,11 +36,11 @@ void define_rationalfunction(py::module& m) { .def("__mul__", static_cast(&carl::operator*)) .def(py::self * py::self) - .def(PY_DIV, static_cast(&carl::operator/)) - .def(PY_DIV, static_cast(&carl::operator/)) - .def(PY_DIV, static_cast(&carl::operator/)) - .def(PY_DIV, static_cast(&carl::operator/)) - .def(PY_DIV, static_cast(&carl::operator/)) + .def("__truediv__", static_cast(&carl::operator/)) + .def("__truediv__", static_cast(&carl::operator/)) + .def("__truediv__", static_cast(&carl::operator/)) + .def("__truediv__", static_cast(&carl::operator/)) + .def("__truediv__", static_cast(&carl::operator/)) .def(py::self / py::self) .def("__pow__", [](const RationalFunction& var, carl::uint exp) { return carl::pow(var, exp); }) diff --git a/src/pycarl/typed_core/term.cpp b/src/pycarl/typed_core/term.cpp index b4cfaffaba..fe5bcb647f 100644 --- a/src/pycarl/typed_core/term.cpp +++ b/src/pycarl/typed_core/term.cpp @@ -27,11 +27,11 @@ void define_term(py::module& m) { .def("__mul__", static_cast(&carl::operator*)) .def("__mul__", static_cast(&carl::operator*)) - .def(PY_DIV, [](const Term& lhs, const RationalFunction& rhs) { return RationalFunction(Polynomial(lhs)) / rhs; }) - .def(PY_DIV, [](const Term& lhs, const Polynomial& rhs) { return RationalFunction(Polynomial(lhs)) / rhs; }) - .def(PY_DIV, [](const Term& lhs, const Term& rhs) { return RationalFunction(Polynomial(lhs)) / rhs; }) - .def(PY_DIV, [](const Term& lhs, const Monomial::Arg& rhs) { return RationalFunction(Polynomial(lhs)) / rhs; }) - .def(PY_DIV, [](const Term& lhs, carl::Variable::Arg rhs) { return RationalFunction(Polynomial(lhs)) / rhs; }) + .def("__truediv__", [](const Term& lhs, const RationalFunction& rhs) { return RationalFunction(Polynomial(lhs)) / rhs; }) + .def("__truediv__", [](const Term& lhs, const Polynomial& rhs) { return RationalFunction(Polynomial(lhs)) / rhs; }) + .def("__truediv__", [](const Term& lhs, const Term& rhs) { return RationalFunction(Polynomial(lhs)) / rhs; }) + .def("__truediv__", [](const Term& lhs, const Monomial::Arg& rhs) { return RationalFunction(Polynomial(lhs)) / rhs; }) + .def("__truediv__", [](const Term& lhs, carl::Variable::Arg rhs) { return RationalFunction(Polynomial(lhs)) / rhs; }) .def(py::self / Rational()) .def("__pow__", [](const Term& var, carl::uint exp) { return var.pow(exp); }) From 52739267e877397838422fe129e1cec154f1451c Mon Sep 17 00:00:00 2001 From: Matthias Volk Date: Fri, 22 May 2026 14:01:05 +0900 Subject: [PATCH 2/2] Removed src/pycarl/helpers.h --- src/pycarl/core/bound_type.cpp | 2 +- src/pycarl/core/monomial.cpp | 2 +- src/pycarl/core/variable.cpp | 2 +- src/pycarl/formula/relation.cpp | 2 +- src/pycarl/mod_formula.cpp | 2 +- src/pycarl/mod_typed_formula.cpp | 2 +- src/pycarl/typed_core/factorization.cpp | 2 +- src/pycarl/typed_core/factorizedpolynomial.cpp | 2 +- src/pycarl/typed_core/factorizedrationalfunction.cpp | 2 +- src/pycarl/typed_core/integer.cpp | 2 +- src/pycarl/typed_core/interval.h | 2 +- src/pycarl/typed_core/polynomial.cpp | 2 +- src/pycarl/typed_core/rational.cpp | 2 +- src/pycarl/typed_core/rationalfunction.cpp | 2 +- src/pycarl/typed_core/term.cpp | 2 +- src/pycarl/typed_formula/common.h | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/pycarl/core/bound_type.cpp b/src/pycarl/core/bound_type.cpp index 6e9fd1a86f..65369e0957 100644 --- a/src/pycarl/core/bound_type.cpp +++ b/src/pycarl/core/bound_type.cpp @@ -1,6 +1,6 @@ #include "bound_type.h" -#include "src/pycarl/helpers.h" +#include "src/helpers.h" #include "src/pycarl/types.h" void define_boundtype(py::module& m) { diff --git a/src/pycarl/core/monomial.cpp b/src/pycarl/core/monomial.cpp index 27aefbb455..90602ceabf 100644 --- a/src/pycarl/core/monomial.cpp +++ b/src/pycarl/core/monomial.cpp @@ -1,6 +1,6 @@ #include "monomial.h" -#include "src/pycarl/helpers.h" +#include "src/helpers.h" #include "src/pycarl/types.h" void define_monomial(py::module& m) { diff --git a/src/pycarl/core/variable.cpp b/src/pycarl/core/variable.cpp index 439a232aab..c772b09262 100644 --- a/src/pycarl/core/variable.cpp +++ b/src/pycarl/core/variable.cpp @@ -2,7 +2,7 @@ #include #include -#include "src/pycarl/helpers.h" +#include "src/helpers.h" #include "src/pycarl/types.h" #include "variable.h" diff --git a/src/pycarl/formula/relation.cpp b/src/pycarl/formula/relation.cpp index 0922b8649a..76a09dd2f1 100644 --- a/src/pycarl/formula/relation.cpp +++ b/src/pycarl/formula/relation.cpp @@ -1,5 +1,5 @@ #include "relation.h" -#include "src/pycarl/helpers.h" +#include "src/helpers.h" #include diff --git a/src/pycarl/mod_formula.cpp b/src/pycarl/mod_formula.cpp index ac8e1560b7..07d6e45c00 100644 --- a/src/pycarl/mod_formula.cpp +++ b/src/pycarl/mod_formula.cpp @@ -1,5 +1,5 @@ #include "common.h" -#include "helpers.h" +#include "src/helpers.h" #include "formula/formula_type.h" #include "formula/relation.h" diff --git a/src/pycarl/mod_typed_formula.cpp b/src/pycarl/mod_typed_formula.cpp index 15fbc4a032..dc6b06bca7 100644 --- a/src/pycarl/mod_typed_formula.cpp +++ b/src/pycarl/mod_typed_formula.cpp @@ -1,5 +1,5 @@ #include "common.h" -#include "helpers.h" +#include "src/helpers.h" #include "typed_formula/constraint.h" #include "typed_formula/formula.h" diff --git a/src/pycarl/typed_core/factorization.cpp b/src/pycarl/typed_core/factorization.cpp index 47d0370808..16f29b061a 100644 --- a/src/pycarl/typed_core/factorization.cpp +++ b/src/pycarl/typed_core/factorization.cpp @@ -1,6 +1,6 @@ #include "factorization.h" -#include "src/pycarl/helpers.h" +#include "src/helpers.h" #include "src/pycarl/types.h" void define_factorizationcache(py::module& m) { diff --git a/src/pycarl/typed_core/factorizedpolynomial.cpp b/src/pycarl/typed_core/factorizedpolynomial.cpp index 9c33b6b469..1a33074c2d 100644 --- a/src/pycarl/typed_core/factorizedpolynomial.cpp +++ b/src/pycarl/typed_core/factorizedpolynomial.cpp @@ -1,6 +1,6 @@ #include "factorizedpolynomial.h" -#include "src/pycarl/helpers.h" +#include "src/helpers.h" #include "src/pycarl/types.h" void define_factorizedpolynomial(py::module& m) { diff --git a/src/pycarl/typed_core/factorizedrationalfunction.cpp b/src/pycarl/typed_core/factorizedrationalfunction.cpp index 07ad11fc40..bcf125790d 100644 --- a/src/pycarl/typed_core/factorizedrationalfunction.cpp +++ b/src/pycarl/typed_core/factorizedrationalfunction.cpp @@ -1,6 +1,6 @@ #include "factorizedrationalfunction.h" -#include "src/pycarl/helpers.h" +#include "src/helpers.h" #include "src/pycarl/types.h" void define_factorizedrationalfunction(py::module& m) { diff --git a/src/pycarl/typed_core/integer.cpp b/src/pycarl/typed_core/integer.cpp index e457fd2774..c2e14b209c 100644 --- a/src/pycarl/typed_core/integer.cpp +++ b/src/pycarl/typed_core/integer.cpp @@ -1,6 +1,6 @@ #include "rational.h" -#include "src/pycarl/helpers.h" +#include "src/helpers.h" #include "src/pycarl/types.h" #include "carl/numbers/conversion/cln_gmp.h" diff --git a/src/pycarl/typed_core/interval.h b/src/pycarl/typed_core/interval.h index c156990b7b..e77edad5dc 100644 --- a/src/pycarl/typed_core/interval.h +++ b/src/pycarl/typed_core/interval.h @@ -1,7 +1,7 @@ #pragma once +#include "src/helpers.h" #include "src/pycarl/common.h" -#include "src/pycarl/helpers.h" #include "src/pycarl/types.h" template diff --git a/src/pycarl/typed_core/polynomial.cpp b/src/pycarl/typed_core/polynomial.cpp index 7af1803c76..ca3f19e346 100644 --- a/src/pycarl/typed_core/polynomial.cpp +++ b/src/pycarl/typed_core/polynomial.cpp @@ -1,6 +1,6 @@ #include "polynomial.h" -#include "src/pycarl/helpers.h" +#include "src/helpers.h" #include "src/pycarl/types.h" void define_polynomial(py::module& m) { diff --git a/src/pycarl/typed_core/rational.cpp b/src/pycarl/typed_core/rational.cpp index bd18aa21df..eefc65c979 100644 --- a/src/pycarl/typed_core/rational.cpp +++ b/src/pycarl/typed_core/rational.cpp @@ -2,7 +2,7 @@ #include -#include "src/pycarl/helpers.h" +#include "src/helpers.h" #include "src/pycarl/types.h" #include "carl/numbers/conversion/cln_gmp.h" diff --git a/src/pycarl/typed_core/rationalfunction.cpp b/src/pycarl/typed_core/rationalfunction.cpp index b96180bb16..b9475336cf 100644 --- a/src/pycarl/typed_core/rationalfunction.cpp +++ b/src/pycarl/typed_core/rationalfunction.cpp @@ -1,6 +1,6 @@ #include "rationalfunction.h" -#include "src/pycarl/helpers.h" +#include "src/helpers.h" #include "src/pycarl/types.h" void define_rationalfunction(py::module& m) { diff --git a/src/pycarl/typed_core/term.cpp b/src/pycarl/typed_core/term.cpp index fe5bcb647f..caab76abf3 100644 --- a/src/pycarl/typed_core/term.cpp +++ b/src/pycarl/typed_core/term.cpp @@ -1,6 +1,6 @@ #include "term.h" -#include "src/pycarl/helpers.h" +#include "src/helpers.h" #include "src/pycarl/types.h" void define_term(py::module& m) { diff --git a/src/pycarl/typed_formula/common.h b/src/pycarl/typed_formula/common.h index 44637ec2be..7f58af45ab 100644 --- a/src/pycarl/typed_formula/common.h +++ b/src/pycarl/typed_formula/common.h @@ -3,4 +3,4 @@ #include "types.h" // toString -#include "src/pycarl/helpers.h" +#include "src/helpers.h"