HAL
boolean_function_decorator.cpp
Go to the documentation of this file.
2 
3 namespace hal
4 {
6  {
7  py::class_<BooleanFunctionDecorator> py_boolean_function_decorator(m, "BooleanFunctionDecorator", R"()");
8 
9  py_boolean_function_decorator.def(py::init<const BooleanFunction&>(), py::arg("bf"), R"(
10  Construct new BooleanFunctionDecorator object.
11 
12  :param hal_py.BooleanFunction bf: The Booelan function to operate on.
13  )");
14 
15  py_boolean_function_decorator.def(
16  "substitute_power_ground_nets",
17  [](const BooleanFunctionDecorator& self, const Netlist* nl) -> std::optional<BooleanFunction> {
18  auto res = self.substitute_power_ground_nets(nl);
19  if (res.is_ok())
20  {
21  return res.get();
22  }
23  else
24  {
25  log_error("python_context", "error encountered while substituting power and ground nets:\n{}", res.get_error().get());
26  return std::nullopt;
27  }
28  },
29  py::arg("nl"),
30  R"(
31  Substitute all Boolean function variables fed by power or ground gates by constant ``0`` and ``1``.
32 
33  :param hal_py.Netlist nl: The netlist to operate on.
34  :returns: The resulting Boolean function on success, ``None`` otherwise.
35  :rtype: hal_py.BooleanFunction or None
36  )");
37 
38  py_boolean_function_decorator.def(
39  "substitute_power_ground_pins",
40  [](const BooleanFunctionDecorator& self, const Gate* g) -> std::optional<BooleanFunction> {
41  auto res = self.substitute_power_ground_pins(g);
42  if (res.is_ok())
43  {
44  return res.get();
45  }
46  else
47  {
48  log_error("python_context", "error encountered while substituting power and ground pins:\n{}", res.get_error().get());
49  return std::nullopt;
50  }
51  },
52  py::arg("g"),
53  R"(
54  Substitute all Boolean function variables that belong to a pin connected to a power or ground gate by constant ``0`` and ``1``.
55 
56  :param hal_py.Gate g: The gate which is connected to the pins and belongs to the Boolean function under inspection.
57  :returns: The resulting Boolean function on success, ``None`` otherwise.
58  :rtype: hal_py.BooleanFunction or None
59  )");
60 
61  py_boolean_function_decorator.def_static(
62  "get_boolean_function_from",
63  [](const std::vector<BooleanFunction>& functions, u32 extend_to_size = 0, bool sign_extend = false) -> std::optional<BooleanFunction> {
64  auto res = BooleanFunctionDecorator::get_boolean_function_from(functions, extend_to_size, sign_extend);
65  if (res.is_ok())
66  {
67  return res.get();
68  }
69  else
70  {
71  log_error("python_context", "error encountered while getting Boolean function from Boolean function vector:\n{}", res.get_error().get());
72  return std::nullopt;
73  }
74  },
75  py::arg("functions"),
76  py::arg("extend_to_size") = 0,
77  py::arg("sign_extend") = false,
78  R"(
79  Get the Boolean function that is the concatenation of Boolean functions.
80  The Boolean function can optionally be extended to any desired size greater the size of the given net vector.
81 
82  :param list[hal_py.BooleanFunction] functions: The Boolean functions to concatenate.
83  :param int extend_to_size: The size to which to extend the Boolean function. Set to ``0`` to prevent extension. Defaults to ``0``.
84  :param bool sign_extend: Set ``True`` to sign extend, ``False`` to zero extend. Defaults to ``False``.
85  :returns: The resulting Boolean function on success, ``None`` otherwise.
86  :rtype: hal_py.BooleanFunction or None
87  )");
88 
89  py_boolean_function_decorator.def_static(
90  "get_boolean_function_from",
91  [](const std::vector<Net*>& nets, u32 extend_to_size = 0, bool sign_extend = false) -> std::optional<BooleanFunction> {
92  auto res = BooleanFunctionDecorator::get_boolean_function_from(nets, extend_to_size, sign_extend);
93  if (res.is_ok())
94  {
95  return res.get();
96  }
97  else
98  {
99  log_error("python_context", "error encountered while getting Boolean function from net vector:\n{}", res.get_error().get());
100  return std::nullopt;
101  }
102  },
103  py::arg("nets"),
104  py::arg("extend_to_size") = 0,
105  py::arg("sign_extend") = false,
106  R"(
107  Get the Boolean function that is the concatenation of variable names corresponding to nets of a netlist.
108  The Boolean function can optionally be extended to any desired size greater the size of the given net vector.
109 
110  :param list[hal_py.Net] nets: The nets to concatenate.
111  :param int extend_to_size: The size to which to extend the Boolean function. Set to ``0`` to prevent extension. Defaults to ``0``.
112  :param bool sign_extend: Set ``True`` to sign extend, ``False`` to zero extend. Defaults to ``False``.
113  :returns: The resulting Boolean function on success, ``None`` otherwise.
114  :rtype: hal_py.BooleanFunction or None
115  )");
116 
117  py_boolean_function_decorator.def_static(
118  "get_boolean_function_from",
119  [](const PinGroup<ModulePin>* pin_group, u32 extend_to_size = 0, bool sign_extend = false) -> std::optional<BooleanFunction> {
120  auto res = BooleanFunctionDecorator::get_boolean_function_from(pin_group, extend_to_size, sign_extend);
121  if (res.is_ok())
122  {
123  return res.get();
124  }
125  else
126  {
127  log_error("python_context", "error encountered while getting Boolean function from net vector:\n{}", res.get_error().get());
128  return std::nullopt;
129  }
130  },
131  py::arg("pin_group"),
132  py::arg("extend_to_size") = 0,
133  py::arg("sign_extend") = false,
134  R"(
135  Get the Boolean function that is the concatenation of variable names corresponding to the nets connected to the pins of the given pin group.
136  The Boolean function can optionally be extended to any desired size greater the size of the given net vector.
137 
138  :param hal_py.ModulePinGroup pin_group: The module pin group.
139  :param int extend_to_size: The size to which to extend the Boolean function. Set to ``0`` to prevent extension. Defaults to ``0``.
140  :param bool sign_extend: Set ``True`` to sign extend, ``False`` to zero extend. Defaults to ``False``.
141  :returns: The resulting Boolean function on success, ``None`` otherwise.
142  :rtype: hal_py.BooleanFunction or None
143  )");
144  }
145 } // namespace hal
static Result< BooleanFunction > get_boolean_function_from(const std::vector< BooleanFunction > &functions, u32 extend_to_size=0, bool sign_extend=false)
Definition: gate.h:58
void boolean_function_decorator_init(py::module &m)
#define log_error(channel,...)
Definition: log.h:78
const Module * module(const Gate *g, const NodeBoxes &boxes)
quint32 u32