Skip to content

Commit

Permalink
Merge branch 'main' into explain_afm_picture
Browse files Browse the repository at this point in the history
  • Loading branch information
Drewniok authored May 12, 2024
2 parents c7383b7 + d869a2f commit 682710d
Show file tree
Hide file tree
Showing 4 changed files with 229 additions and 0 deletions.
63 changes: 63 additions & 0 deletions bindings/pyfiction/include/pyfiction/pybind11_mkdoc_docstrings.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2614,13 +2614,27 @@ static const char *__doc_fiction_cp_and_tp_throughput =
R"doc(Throughput of the layout in clock cycles as :math:`\frac{1}{x}` where
only :math:`x` is stored.)doc";

static const char *__doc_fiction_create_and3_tt =
R"doc(Creates and returns a truth table that implements the conjunction in
three variables.

Returns:
Conjunction in three variables.)doc";

static const char *__doc_fiction_create_and_tt =
R"doc(Creates and returns a truth table that implements the conjunction in
two variables.

Returns:
Conjunction in two variables.)doc";

static const char *__doc_fiction_create_and_xor_tt =
R"doc(Creates and returns a truth table that implements the AND-XOR function
(a xor b and c) in three variables.

Returns:
AND-XOR in three variables.)doc";

static const char *__doc_fiction_create_array =
R"doc(Creates an array of size `N` and initializes its fields with value of
type `T` at compile time.
Expand Down Expand Up @@ -2650,6 +2664,13 @@ variables. The function returns a vector containing two truth tables.
Vector of truth tables, each representing an output of the
crossing wire function.)doc";

static const char *__doc_fiction_create_dot_tt =
R"doc(Creates and returns a truth table that implements the Dot function (a
xor (c or a and b)) in three variables.

Returns:
Dot function in three variables.)doc";

static const char *__doc_fiction_create_double_wire_tt =
R"doc(Creates and returns a vector of truth tables for a double wire multi-
output function.
Expand All @@ -2673,6 +2694,13 @@ one of the outputs of a multi-output function in two variables.
Vector of truth tables, each representing an output of the
identity function.)doc";

static const char *__doc_fiction_create_gamble_tt =
R"doc(Creates and returns a truth table that implements the Gamble function
(all or none of a,b,c) in three variables.

Returns:
Gamble in three variables.)doc";

static const char *__doc_fiction_create_ge_tt =
R"doc(Creates and returns a truth table that implements the greater-than-or-
equal function in two variables.
Expand Down Expand Up @@ -2706,6 +2734,13 @@ function in one variable.
Returns:
Identity function in one variable.)doc";

static const char *__doc_fiction_create_ite_tt =
R"doc(Creates and returns a truth table that implements the ITE (MUX)
function (if a then b else c) in three variables.

Returns:
ITE (MUX) in three variables.)doc";

static const char *__doc_fiction_create_le_tt =
R"doc(Creates and returns a truth table that implements the less-than-or-
equal function in two variables.
Expand Down Expand Up @@ -2748,6 +2783,20 @@ variable.
Returns:
Negation in one variable.)doc";

static const char *__doc_fiction_create_onehot_tt =
R"doc(Creates and returns a truth table that implements the Onehot function
(exactly one of a,b,c) in three variables.

Returns:
Onehot in three variables.)doc";

static const char *__doc_fiction_create_or_and_tt =
R"doc(Creates and returns a truth table that implements the OR-AND function
(a and (b or c)) in three variables.

Returns:
OR-AND in three variables.)doc";

static const char *__doc_fiction_create_or_tt =
R"doc(Creates and returns a truth table that implements the disjunction in
two variables.
Expand All @@ -2762,6 +2811,20 @@ exclusive disjunction in two variables.
Returns:
Negated exclusive disjunction in two variables.)doc";

static const char *__doc_fiction_create_xor3_tt =
R"doc(Creates and returns a truth table that implements the exclusive
disjunction in three variables.

Returns:
Exclusive disjunction in three variables.)doc";

static const char *__doc_fiction_create_xor_and_tt =
R"doc(Creates and returns a truth table that implements the XOR-AND function
(a and (b xor c)) in three variables.

Returns:
XOR-AND in three variables.)doc";

static const char *__doc_fiction_create_xor_tt =
R"doc(Creates and returns a truth table that implements the exclusive
disjunction in two variables.
Expand Down
13 changes: 13 additions & 0 deletions bindings/pyfiction/include/pyfiction/utils/truth_table_utils.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,20 @@ inline void truth_table_utils(pybind11::module& m)
m.def("create_nor_tt", &fiction::create_nor_tt, DOC(fiction_create_nor_tt));
m.def("create_xor_tt", &fiction::create_xor_tt, DOC(fiction_create_xor_tt));
m.def("create_xnor_tt", &fiction::create_xnor_tt, DOC(fiction_create_xnor_tt));
m.def("create_lt_tt", &fiction::create_lt_tt, DOC(fiction_create_lt_tt));
m.def("create_gt_tt", &fiction::create_gt_tt, DOC(fiction_create_gt_tt));
m.def("create_le_tt", &fiction::create_le_tt, DOC(fiction_create_le_tt));
m.def("create_ge_tt", &fiction::create_ge_tt, DOC(fiction_create_ge_tt));
m.def("create_and3_tt", &fiction::create_and3_tt, DOC(fiction_create_and3_tt));
m.def("create_xor_and_tt", &fiction::create_xor_and_tt, DOC(fiction_create_xor_and_tt));
m.def("create_or_and_tt", &fiction::create_or_and_tt, DOC(fiction_create_or_and_tt));
m.def("create_onehot_tt", &fiction::create_onehot_tt, DOC(fiction_create_onehot_tt));
m.def("create_maj_tt", &fiction::create_maj_tt, DOC(fiction_create_maj_tt));
m.def("create_gamble_tt", &fiction::create_gamble_tt, DOC(fiction_create_gamble_tt));
m.def("create_dot_tt", &fiction::create_dot_tt, DOC(fiction_create_dot_tt));
m.def("create_ite_tt", &fiction::create_ite_tt, DOC(fiction_create_ite_tt));
m.def("create_and_xor_tt", &fiction::create_and_xor_tt, DOC(fiction_create_and_xor_tt));
m.def("create_xor3_tt", &fiction::create_xor3_tt, DOC(fiction_create_xor3_tt));
m.def("create_double_wire_tt", &fiction::create_double_wire_tt, DOC(fiction_create_double_wire_tt));
m.def("create_crossing_wire_tt", &fiction::create_crossing_wire_tt, DOC(fiction_create_crossing_wire_tt));
m.def("create_fan_out_tt", &fiction::create_fan_out_tt, DOC(fiction_create_fan_out_tt));
Expand Down
26 changes: 26 additions & 0 deletions docs/utils/utils.rst
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,20 @@ Truth Table Utils
.. doxygenfunction:: fiction::create_nor_tt
.. doxygenfunction:: fiction::create_xor_tt
.. doxygenfunction:: fiction::create_xnor_tt
.. doxygenfunction:: fiction::create_lt_tt
.. doxygenfunction:: fiction::create_gt_tt
.. doxygenfunction:: fiction::create_le_tt
.. doxygenfunction:: fiction::create_ge_tt
.. doxygenfunction:: fiction::create_and3_tt
.. doxygenfunction:: fiction::create_xor_and_tt
.. doxygenfunction:: fiction::create_or_and_tt
.. doxygenfunction:: fiction::create_onehot_tt
.. doxygenfunction:: fiction::create_maj_tt
.. doxygenfunction:: fiction::create_gamble_tt
.. doxygenfunction:: fiction::create_dot_tt
.. doxygenfunction:: fiction::create_ite_tt
.. doxygenfunction:: fiction::create_and_xor_tt
.. doxygenfunction:: fiction::create_xor3_tt
.. doxygenfunction:: fiction::create_double_wire_tt
.. doxygenfunction:: fiction::create_crossing_wire_tt
.. doxygenfunction:: fiction::create_fan_out_tt
Expand All @@ -67,7 +80,20 @@ Truth Table Utils
.. autofunction:: mnt.pyfiction.create_nor_tt
.. autofunction:: mnt.pyfiction.create_xor_tt
.. autofunction:: mnt.pyfiction.create_xnor_tt
.. autofunction:: mnt.pyfiction.create_lt_tt
.. autofunction:: mnt.pyfiction.create_gt_tt
.. autofunction:: mnt.pyfiction.create_le_tt
.. autofunction:: mnt.pyfiction.create_ge_tt
.. autofunction:: mnt.pyfiction.create_and3_tt
.. autofunction:: mnt.pyfiction.create_xor_and_tt
.. autofunction:: mnt.pyfiction.create_or_and_tt
.. autofunction:: mnt.pyfiction.create_onehot_tt
.. autofunction:: mnt.pyfiction.create_maj_tt
.. autofunction:: mnt.pyfiction.create_gamble_tt
.. autofunction:: mnt.pyfiction.create_dot_tt
.. autofunction:: mnt.pyfiction.create_ite_tt
.. autofunction:: mnt.pyfiction.create_and_xor_tt
.. autofunction:: mnt.pyfiction.create_xor3_tt
.. autofunction:: mnt.pyfiction.create_double_wire_tt
.. autofunction:: mnt.pyfiction.create_crossing_wire_tt
.. autofunction:: mnt.pyfiction.create_fan_out_tt
Expand Down
127 changes: 127 additions & 0 deletions include/fiction/utils/truth_table_utils.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <kitty/dynamic_truth_table.hpp>

#include <cstdint>
#include <vector>

namespace fiction
{
Expand Down Expand Up @@ -183,6 +184,62 @@ namespace fiction

return table;
}
/**
* Creates and returns a truth table that implements the conjunction in three variables.
*
* @return Conjunction in three variables.
*/
[[nodiscard]] inline kitty::dynamic_truth_table create_and3_tt() noexcept
{
constexpr const uint64_t lit = 0x80;

kitty::dynamic_truth_table table{3};
kitty::create_from_words(table, &lit, &lit + 1);

return table;
}
/**
* Creates and returns a truth table that implements the XOR-AND function (a and (b xor c)) in three variables.
*
* @return XOR-AND in three variables.
*/
[[nodiscard]] inline kitty::dynamic_truth_table create_xor_and_tt() noexcept
{
constexpr const uint64_t lit = 0x28;

kitty::dynamic_truth_table table{3};
kitty::create_from_words(table, &lit, &lit + 1);

return table;
}
/**
* Creates and returns a truth table that implements the OR-AND function (a and (b or c)) in three variables.
*
* @return OR-AND in three variables.
*/
[[nodiscard]] inline kitty::dynamic_truth_table create_or_and_tt() noexcept
{
constexpr const uint64_t lit = 0xa8;

kitty::dynamic_truth_table table{3};
kitty::create_from_words(table, &lit, &lit + 1);

return table;
}
/**
* Creates and returns a truth table that implements the Onehot function (exactly one of a,b,c) in three variables.
*
* @return Onehot in three variables.
*/
[[nodiscard]] inline kitty::dynamic_truth_table create_onehot_tt() noexcept
{
constexpr const uint64_t lit = 0x16;

kitty::dynamic_truth_table table{3};
kitty::create_from_words(table, &lit, &lit + 1);

return table;
}
/**
* Creates and returns a truth table that implements the majority function in three variables.
*
Expand All @@ -197,6 +254,76 @@ namespace fiction

return table;
}
/**
* Creates and returns a truth table that implements the Gamble function (all or none of a,b,c) in three variables.
*
* @return Gamble in three variables.
*/
[[nodiscard]] inline kitty::dynamic_truth_table create_gamble_tt() noexcept
{
constexpr const uint64_t lit = 0x81;

kitty::dynamic_truth_table table{3};
kitty::create_from_words(table, &lit, &lit + 1);

return table;
}
/**
* Creates and returns a truth table that implements the Dot function (a xor (c or a and b)) in three variables.
*
* @return Dot function in three variables.
*/
[[nodiscard]] inline kitty::dynamic_truth_table create_dot_tt() noexcept
{
constexpr const uint64_t lit = 0x52;

kitty::dynamic_truth_table table{3};
kitty::create_from_words(table, &lit, &lit + 1);

return table;
}
/**
* Creates and returns a truth table that implements the ITE (MUX) function (if a then b else c) in three variables.
*
* @return ITE (MUX) in three variables.
*/
[[nodiscard]] inline kitty::dynamic_truth_table create_ite_tt() noexcept
{
constexpr const uint64_t lit = 0xd8;

kitty::dynamic_truth_table table{3};
kitty::create_from_words(table, &lit, &lit + 1);

return table;
}
/**
* Creates and returns a truth table that implements the AND-XOR function (a xor b and c) in three variables.
*
* @return AND-XOR in three variables.
*/
[[nodiscard]] inline kitty::dynamic_truth_table create_and_xor_tt() noexcept
{
constexpr const uint64_t lit = 0x6a;

kitty::dynamic_truth_table table{3};
kitty::create_from_words(table, &lit, &lit + 1);

return table;
}
/**
* Creates and returns a truth table that implements the exclusive disjunction in three variables.
*
* @return Exclusive disjunction in three variables.
*/
[[nodiscard]] inline kitty::dynamic_truth_table create_xor3_tt() noexcept
{
constexpr const uint64_t lit = 0x96;

kitty::dynamic_truth_table table{3};
kitty::create_from_words(table, &lit, &lit + 1);

return table;
}
/**
* Creates and returns a vector of truth tables for a double wire multi-output function.
*
Expand Down

0 comments on commit 682710d

Please sign in to comment.