From c381fc47517c1811bba847cdb7ac8b07a434e8db Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Tue, 18 Jun 2024 17:26:14 -0400 Subject: [PATCH 1/4] xo-pyexpression: + typedescr arg to make_var() --- src/pyexpression/pyexpression.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pyexpression/pyexpression.cpp b/src/pyexpression/pyexpression.cpp index bc58917d..283df9ac 100644 --- a/src/pyexpression/pyexpression.cpp +++ b/src/pyexpression/pyexpression.cpp @@ -137,7 +137,9 @@ namespace xo { .def_property_readonly("name", &Variable::name, py::doc("variable name")) ; - m.def("make_var", &make_var); + m.def("make_var", &make_var, + py::arg("name"), + py::arg("var_type")); // ----- Lambdas ----- From dc4f13815a19b386cee6f9cd7b9094e74bee83f5 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Wed, 19 Jun 2024 11:01:24 -0400 Subject: [PATCH 2/4] xo-pyexpression: + Expression.valuetype --- src/pyexpression/pyexpression.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pyexpression/pyexpression.cpp b/src/pyexpression/pyexpression.cpp index 283df9ac..a69828d1 100644 --- a/src/pyexpression/pyexpression.cpp +++ b/src/pyexpression/pyexpression.cpp @@ -55,6 +55,7 @@ namespace xo { py::class_>(m, "Expression") .def_property_readonly("extype", &Expression::extype) + .def_property_readonly("valuetype", &Expression::valuetype) .def("__repr__", &Expression::display_string); ; @@ -106,7 +107,8 @@ namespace xo { m.def("make_sqrt_pm", []() { return make_primitive("sqrt", sqrt); }, py::doc("create primitive representing the ::sqrt() function")); - m.def("make_sin_pm", []() { return make_primitive("sin", ::sin); }, + m.def("make_sin_pm", + []() { return make_primitive("sin", ::sin); }, py::doc("create primitive representing the ::sin() function")); m.def("make_cos_pm", []() { return make_primitive("cos", ::cos); }, py::doc("create primitive representing the ::cos() function")); From 34123662b8d33735318e987fb8aa0f60aec86388 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Wed, 19 Jun 2024 18:16:47 -0400 Subject: [PATCH 3/4] xo-pyexpression: supply explicit_symbol_def to make_primitive --- src/pyexpression/pyexpression.cpp | 38 +++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/src/pyexpression/pyexpression.cpp b/src/pyexpression/pyexpression.cpp index a69828d1..10307d68 100644 --- a/src/pyexpression/pyexpression.cpp +++ b/src/pyexpression/pyexpression.cpp @@ -103,27 +103,45 @@ namespace xo { py::doc("number of arguments to this function (not counting return value)")) ; - using Fn_dbl_dbl_type = double (*)(double); + using int32_t = std::int32_t; - m.def("make_sqrt_pm", []() { return make_primitive("sqrt", sqrt); }, - py::doc("create primitive representing the ::sqrt() function")); - m.def("make_sin_pm", - []() { return make_primitive("sin", ::sin); }, - py::doc("create primitive representing the ::sin() function")); - m.def("make_cos_pm", []() { return make_primitive("cos", ::cos); }, - py::doc("create primitive representing the ::cos() function")); - m.def("make_pow_pm", []() { return make_primitive("pow", ::pow); }, - py::doc("create primitive representing the ::pow() function")); + py::class_, + PrimitiveInterface, + rp>>(m, "Primitive_i32_i32") + ; py::class_, PrimitiveInterface, rp>>(m, "Primitive_double_double") ; + using Fn_dbl_dbl_type = double (*)(double); + + m.def("make_sqrt_pm", []() { return make_primitive("sqrt", + ::sqrt, + false /*!explicit_symbol_def*/); }, + py::doc("create primitive representing the ::sqrt() function")); + m.def("make_sin_pm", + []() { return make_primitive("sin", + ::sin, + false /*!explicit_symbol_def*/); }, + py::doc("create primitive representing the ::sin() function")); + m.def("make_cos_pm", + []() { return make_primitive("cos", + ::cos, + false /*!explicit_symbol_def*/); }, + py::doc("create primitive representing the ::cos() function")); + py::class_, PrimitiveInterface, rp>>(m, "Primitive_double_double_double") ; + m.def("make_pow_pm", + []() { return make_primitive("pow", + ::pow, + false /*!explicit_symbol_def*/); }, + py::doc("create primitive representing the ::pow() function")); + // ----- Apply ----- py::class_>(m, "Apply") From f4efdd970060c9b6d96495b8a47f8dbee6087df8 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Fri, 21 Jun 2024 14:06:26 -0400 Subject: [PATCH 4/4] xo-pyexpression: supply llvm intrinsic to each primitive --- src/pyexpression/pyexpression.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/pyexpression/pyexpression.cpp b/src/pyexpression/pyexpression.cpp index 10307d68..0768c502 100644 --- a/src/pyexpression/pyexpression.cpp +++ b/src/pyexpression/pyexpression.cpp @@ -118,17 +118,20 @@ namespace xo { m.def("make_sqrt_pm", []() { return make_primitive("sqrt", ::sqrt, - false /*!explicit_symbol_def*/); }, + false /*!explicit_symbol_def*/, + llvmintrinsic::fp_sqrt); }, py::doc("create primitive representing the ::sqrt() function")); m.def("make_sin_pm", []() { return make_primitive("sin", ::sin, - false /*!explicit_symbol_def*/); }, + false /*!explicit_symbol_def*/, + llvmintrinsic::fp_sin); }, py::doc("create primitive representing the ::sin() function")); m.def("make_cos_pm", []() { return make_primitive("cos", ::cos, - false /*!explicit_symbol_def*/); }, + false /*!explicit_symbol_def*/, + llvmintrinsic::fp_cos); }, py::doc("create primitive representing the ::cos() function")); py::class_, @@ -139,7 +142,8 @@ namespace xo { m.def("make_pow_pm", []() { return make_primitive("pow", ::pow, - false /*!explicit_symbol_def*/); }, + false /*!explicit_symbol_def*/, + llvmintrinsic::fp_pow); }, py::doc("create primitive representing the ::pow() function")); // ----- Apply -----