Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

✨ Added temperature-aware operational domain simulation. #646

Open
wants to merge 73 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
9477cf8
:memo: Update pyfiction docstrings
actions-user Dec 12, 2024
35fed45
Merge branch 'cda-tum:main' into main
Drewniok Dec 26, 2024
bc905b7
Merge branch 'cda-tum:main' into main
Drewniok Jan 2, 2025
f188a69
Merge branch 'cda-tum:main' into main
Drewniok Jan 7, 2025
65ec0a5
Merge branch 'cda-tum:main' into main
Drewniok Jan 8, 2025
24c2421
Merge branch 'cda-tum:main' into main
Drewniok Jan 9, 2025
4113659
:memo: Update pyfiction docstrings
actions-user Jan 9, 2025
72e08f4
Merge branch 'cda-tum:main' into main
Drewniok Jan 11, 2025
dfb71fb
Merge branch 'cda-tum:main' into main
Drewniok Jan 12, 2025
d5c5ff5
Merge branch 'cda-tum:main' into main
Drewniok Jan 13, 2025
9d45592
Merge branch 'cda-tum:main' into main
Drewniok Jan 13, 2025
dfaf039
Merge branch 'cda-tum:main' into main
Drewniok Jan 14, 2025
af15694
Merge branch 'cda-tum:main' into main
Drewniok Jan 15, 2025
74dfaab
Merge branch 'cda-tum:main' into main
Drewniok Jan 19, 2025
5598bce
Merge branch 'cda-tum:main' into main
Drewniok Jan 23, 2025
7a1cde8
Merge branch 'cda-tum:main' into main
Drewniok Jan 24, 2025
ecb1fbb
Merge branch 'cda-tum:main' into main
Drewniok Jan 25, 2025
f6b0cb1
:sparkles: add an option to simulate the critical temperature on top …
Drewniok Jan 25, 2025
fe90a6f
:memo: Update pyfiction docstrings
actions-user Jan 25, 2025
beb9625
:white_check_mark: add unit test.
Drewniok Jan 25, 2025
2f8c088
Merge branch 'main' into add_fom_to_operational_domain
Drewniok Jan 25, 2025
7507fc2
:memo: Update pyfiction docstrings
actions-user Jan 25, 2025
592c66f
:umbrella: increase coverage by adding more tests.
Drewniok Jan 26, 2025
e2b8fee
:art: small fix.
Drewniok Jan 26, 2025
d2df7f0
:memo: Update pyfiction docstrings
actions-user Jan 26, 2025
9c7966a
Merge branch 'main' into add_fom_to_operational_domain
Drewniok Jan 26, 2025
3a488cd
:art: small update.
Drewniok Jan 27, 2025
de898eb
:memo: Update pyfiction docstrings
actions-user Jan 27, 2025
8c6bd0a
Merge branch 'cda-tum:main' into main
Drewniok Jan 28, 2025
eb9815e
:art: Restructuring and implementation of Marcel's feedback.
Drewniok Jan 30, 2025
fc8e96d
Merge branch 'cda-tum:main' into main
Drewniok Jan 30, 2025
f80ae12
Merge branch 'main' into add_fom_to_operational_domain
Drewniok Jan 30, 2025
d36f178
:art: implementation of Marcel's feedback.
Drewniok Jan 30, 2025
5672bfc
:memo: Update pyfiction docstrings
actions-user Jan 30, 2025
43c586d
:art: update CLI.
Drewniok Jan 30, 2025
60b55a1
:art: restructuring of the constant namespace.
Drewniok Jan 30, 2025
5f3fc36
:art: renaming.
Drewniok Jan 30, 2025
0e02c6b
:memo: Update pyfiction docstrings
actions-user Jan 30, 2025
a5f214a
:art: small fix.
Drewniok Jan 30, 2025
14160e5
:art: small fix.
Drewniok Jan 30, 2025
66d8662
:art: small fix.
Drewniok Jan 30, 2025
5f003a1
:art: small fix for ``-DFICTION_ALGLIB:BOOL=OFF``.
Drewniok Jan 30, 2025
93f7b15
:memo: small update.
Drewniok Jan 30, 2025
02693f8
:memo: Update pyfiction docstrings
actions-user Jan 30, 2025
06988cf
:memo: small update.
Drewniok Jan 30, 2025
1a5433f
Merge branch 'main' into add_fom_to_operational_domain
Drewniok Feb 2, 2025
d44cbfd
:art: implement Marcel's feedback.
Drewniok Feb 2, 2025
06d2bf0
Merge remote-tracking branch 'origin/add_fom_to_operational_domain' i…
Drewniok Feb 2, 2025
f7dc106
:art: small fix.
Drewniok Feb 2, 2025
b919ecb
:art: small fix.
Drewniok Feb 2, 2025
5d60209
:memo: Update pyfiction docstrings
actions-user Feb 2, 2025
dbf41e4
:memo: update docu.
Drewniok Feb 2, 2025
05b4458
:memo: update docu.
Drewniok Feb 2, 2025
683c66d
:memo: small fix.
Drewniok Feb 3, 2025
dcc9c1c
:art: small fix.
Drewniok Feb 3, 2025
0060839
:memo: small update.
Drewniok Feb 3, 2025
2aab191
:memo: Update pyfiction docstrings
actions-user Feb 3, 2025
1e4c1a3
:memo: small update.
Drewniok Feb 3, 2025
8b41506
:green_heart: try to fix windows CI.
Drewniok Feb 3, 2025
7c44884
Merge branch 'main' into add_fom_to_operational_domain
Drewniok Feb 4, 2025
e453686
:art: integrate Marcel's feedback.
Drewniok Feb 7, 2025
d1ef260
Merge branch 'main' into add_fom_to_operational_domain
Drewniok Feb 7, 2025
42578f1
:art: small fix.
Drewniok Feb 7, 2025
b85d7b7
:memo: Update pyfiction docstrings
actions-user Feb 7, 2025
e01c681
:art: clang-tidy fix.
Drewniok Feb 7, 2025
04a70c8
Merge remote-tracking branch 'origin/add_fom_to_operational_domain' i…
Drewniok Feb 7, 2025
6242649
:memo: try to fix issue.
Drewniok Feb 7, 2025
c2d5e22
:art: implement Marcel's feedback.
Drewniok Feb 9, 2025
3795f52
Merge branch 'main' into add_fom_to_operational_domain
Drewniok Feb 9, 2025
a771949
:memo: Update pyfiction docstrings
actions-user Feb 9, 2025
39fc729
:art: implement Marcel's feedback.
Drewniok Feb 9, 2025
17f0038
Merge branch 'main' into add_fom_to_operational_domain
Drewniok Feb 10, 2025
503dbdf
Merge branch 'main' into add_fom_to_operational_domain
Drewniok Feb 10, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions bindings/mnt/pyfiction/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,11 @@
create_xor_tt,
## properties
critical_path_length_and_throughput,
critical_temperature_domain,
critical_temperature_domain_contour_tracing,
critical_temperature_domain_flood_fill,
critical_temperature_domain_grid_search,
critical_temperature_domain_random_sampling,
critical_temperature_gate_based,
critical_temperature_non_gate_based,
critical_temperature_params,
Expand Down Expand Up @@ -304,13 +309,16 @@
wiring_reduction,
wiring_reduction_params,
wiring_reduction_stats,
write_critical_temperature_domain,
write_critical_temperature_domain_to_string,
write_dot_layout,
write_dot_network,
write_fgl_layout,
write_fqca_layout,
write_fqca_layout_params,
write_operational_domain,
write_operational_domain_params,
write_operational_domain_to_string,
write_qca_layout,
write_qca_layout_params,
write_qca_layout_svg,
Expand Down Expand Up @@ -408,6 +416,11 @@
"create_xor_tt",
## properties
"critical_path_length_and_throughput",
"critical_temperature_domain",
"critical_temperature_domain_contour_tracing",
"critical_temperature_domain_flood_fill",
"critical_temperature_domain_grid_search",
"critical_temperature_domain_random_sampling",
"critical_temperature_gate_based",
"critical_temperature_non_gate_based",
"critical_temperature_params",
Expand Down Expand Up @@ -611,13 +624,16 @@
"wiring_reduction",
"wiring_reduction_params",
"wiring_reduction_stats",
"write_critical_temperature_domain",
"write_critical_temperature_domain_to_string",
"write_dot_layout",
"write_dot_network",
"write_fgl_layout",
"write_fqca_layout",
"write_fqca_layout_params",
"write_operational_domain",
"write_operational_domain_params",
"write_operational_domain_to_string",
"write_qca_layout",
"write_qca_layout_params",
"write_qca_layout_svg",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
#include "pyfiction/documentation.hpp"
Drewniok marked this conversation as resolved.
Show resolved Hide resolved
#include "pyfiction/types.hpp"

#include <fiction/algorithms/simulation/sidb/is_operational.hpp>
#include <fiction/algorithms/simulation/sidb/operational_domain.hpp>

#include <pybind11/operators.h>
Expand Down Expand Up @@ -45,6 +44,28 @@ void operational_domain(pybind11::module& m)
py::arg("stats") = nullptr, DOC(fiction_operational_domain_contour_tracing));
}

template <typename Lyt>
void critical_temperature_domain(pybind11::module& m)
{
namespace py = pybind11;

m.def("critical_temperature_domain_grid_search", &fiction::operational_domain_grid_search<Lyt, py_tt>,
py::arg("lyt"), py::arg("spec"), py::arg("params") = fiction::operational_domain_params{},
py::arg("stats") = nullptr, DOC(fiction_operational_domain_grid_search));

m.def("critical_temperature_domain_random_sampling", &fiction::operational_domain_random_sampling<Lyt, py_tt>,
py::arg("lyt"), py::arg("spec"), py::arg("samples"), py::arg("params") = fiction::operational_domain_params{},
py::arg("stats") = nullptr, DOC(fiction_operational_domain_random_sampling));

m.def("critical_temperature_domain_flood_fill", &fiction::operational_domain_flood_fill<Lyt, py_tt>, py::arg("lyt"),
py::arg("spec"), py::arg("samples"), py::arg("params") = fiction::operational_domain_params{},
py::arg("stats") = nullptr, DOC(fiction_operational_domain_flood_fill));

m.def("critical_temperature_domain_contour_tracing", &fiction::operational_domain_contour_tracing<Lyt, py_tt>,
py::arg("lyt"), py::arg("spec"), py::arg("samples"), py::arg("params") = fiction::operational_domain_params{},
py::arg("stats") = nullptr, DOC(fiction_operational_domain_contour_tracing));
}

} // namespace detail

inline void operational_domain(pybind11::module& m)
Expand All @@ -54,7 +75,7 @@ inline void operational_domain(pybind11::module& m)
py::class_<fiction::parameter_point>(m, "parameter_point", DOC(fiction_parameter_point))
.def(py::init<>(), DOC(fiction_parameter_point_parameter_point))
.def(py::init<const std::vector<double>>(), py::arg("values"), DOC(fiction_parameter_point_parameter_point_2))
.def_readwrite("parameters", &fiction::parameter_point::parameters, DOC(fiction_parameter_point))
.def("get_parameters", &fiction::parameter_point::get_parameters, DOC(fiction_parameter_point_get_parameters))

.def(py::self == py::self, py::arg("other"), DOC(fiction_parameter_point_operator_eq))
.def(py::self != py::self, py::arg("other"), DOC(fiction_parameter_point_operator_ne))
Expand All @@ -71,28 +92,36 @@ inline void operational_domain(pybind11::module& m)

;

py::class_<fiction::operational_domain<fiction::parameter_point, fiction::operational_status>>(
m, "operational_domain", DOC(fiction_operational_domain))
// todu update docu
Drewniok marked this conversation as resolved.
Show resolved Hide resolved
py::class_<fiction::critical_temperature_domain>(m, "critical_temperature_domain",
DOC(fiction_critical_temperature_domain))
.def(py::init<>())
.def_readwrite("dimensions",
&fiction::operational_domain<fiction::parameter_point, fiction::operational_status>::dimensions,
DOC(fiction_operational_domain_dimensions))
.def_readwrite(
"influence_information",
&fiction::operational_domain<fiction::parameter_point, fiction::operational_status>::operational_values,
DOC(fiction_operational_domain_operational_values))

.def("get_value",
&fiction::operational_domain<fiction::parameter_point, fiction::operational_status>::get_value,
py::arg("point"), DOC(fiction_operational_domain_get_value))

.def("add_value",
&fiction::operational_domain<fiction::parameter_point, fiction::operational_status>::add_value,
py::arg("key"), py::arg("value"), DOC(fiction_operational_domain_add_value))

.def("get_domain",
&fiction::operational_domain<fiction::parameter_point, fiction::operational_status>::get_domain,
DOC(fiction_operational_domain_get_domain))
.def(py::init<const std::vector<fiction::sweep_parameter>>(), py::arg("dims"))
.def("add_dimension", &fiction::critical_temperature_domain::add_dimension, py::arg("dim"),
DOC(fiction_critical_temperature_domain_add_dimension))
.def("get_dimension", &fiction::critical_temperature_domain::get_dimension, py::arg("index"),
DOC(fiction_critical_temperature_domain_get_dimension))
.def("get_number_of_dimensions", &fiction::critical_temperature_domain::get_number_of_dimensions,
DOC(fiction_critical_temperature_domain_get_number_of_dimensions))
.def("contains", &fiction::critical_temperature_domain::contains, py::arg("key"))
.def("add_value", &fiction::critical_temperature_domain::add_value, py::arg("key"), py::arg("value"))
.def("size", &fiction::critical_temperature_domain::size)

;

py::class_<fiction::operational_domain>(m, "operational_domain", DOC(fiction_operational_domain))
.def(py::init<>(), DOC(fiction_operational_domain_operational_domain))
.def(py::init<const std::vector<fiction::sweep_parameter>>(), py::arg("dims"),
DOC(fiction_operational_domain_operational_domain_2))
.def("add_dimension", &fiction::operational_domain::add_dimension, py::arg("dim"),
DOC(fiction_operational_domain_add_dimension))
.def("get_dimension", &fiction::operational_domain::get_dimension, py::arg("index"),
DOC(fiction_operational_domain_get_dimension))
.def("get_number_of_dimensions", &fiction::operational_domain::get_number_of_dimensions,
DOC(fiction_operational_domain_get_number_of_dimensions))
.def("contains", &fiction::operational_domain::contains, py::arg("key"))
.def("add_value", &fiction::operational_domain::add_value, py::arg("key"), py::arg("value"))
.def("size", &fiction::operational_domain::size)

;

Expand All @@ -118,9 +147,7 @@ inline void operational_domain(pybind11::module& m)
.def_readwrite("operational_params", &fiction::operational_domain_params::operational_params,
DOC(fiction_operational_domain_params_operational_params))
.def_readwrite("sweep_dimensions", &fiction::operational_domain_params::sweep_dimensions,
DOC(fiction_operational_domain_params_sweep_dimensions))

;
DOC(fiction_operational_domain_params_sweep_dimensions));

py::class_<fiction::operational_domain_stats>(m, "operational_domain_stats", DOC(fiction_operational_domain_stats))
.def(py::init<>())
Expand All @@ -146,6 +173,9 @@ inline void operational_domain(pybind11::module& m)

detail::operational_domain<py_sidb_100_lattice>(m);
detail::operational_domain<py_sidb_111_lattice>(m);

detail::critical_temperature_domain<py_sidb_100_lattice>(m);
detail::critical_temperature_domain<py_sidb_111_lattice>(m);
}

} // namespace pyfiction
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,21 +37,20 @@ inline void physically_valid_parameters(pybind11::module& m)
{
namespace py = pybind11;

py::class_<fiction::operational_domain<fiction::parameter_point, uint64_t>>(m, "physically_valid_parameters_domain")
py::class_<fiction::sidb_simulation_domain<fiction::parameter_point, uint64_t>>(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing docstrings for the class and member functions

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The problem is that the docstring is not generated. Do you have an idea why?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately not. I have observed this behavior a few times myself as well. It's really mysterious to me 🤔

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

okay, can we merge it anyway?

m, "physically_valid_parameters_domain")
.def(py::init<>())
.def_readwrite("dimensions", &fiction::operational_domain<fiction::parameter_point, uint64_t>::dimensions)

.def(
"get_excited_state_number_for_parameter",
[](const fiction::operational_domain<fiction::parameter_point, uint64_t>& domain,
const fiction::parameter_point& pp)
[](const fiction::sidb_simulation_domain<fiction::parameter_point, uint64_t>& domain,
const fiction::parameter_point& pp)
{
const auto result = domain.get_value(pp);
const auto result = domain.contains(pp);

// Check if the result has a value
if (result.has_value())
{
return result.value();
return std::get<0>(result.value());
}
// If no value is present, raise a Python ValueError
throw py::value_error(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,73 @@
#include "pyfiction/documentation.hpp"
Drewniok marked this conversation as resolved.
Show resolved Hide resolved
#include "pyfiction/types.hpp"

#include <fiction/algorithms/simulation/sidb/is_operational.hpp>
#include <fiction/algorithms/simulation/sidb/operational_domain.hpp>
Drewniok marked this conversation as resolved.
Show resolved Hide resolved
#include <fiction/io/write_operational_domain.hpp>
Drewniok marked this conversation as resolved.
Show resolved Hide resolved

#include <pybind11/pybind11.h>
#include <pybind11/stl.h>

#include <string>
#include <string_view>
Drewniok marked this conversation as resolved.
Show resolved Hide resolved

Drewniok marked this conversation as resolved.
Show resolved Hide resolved
namespace pyfiction
{

namespace detail
{
inline void write_operational_domain(pybind11::module& m)
{
namespace py = pybind11;

// Function pointer for writing to a file
void (*write_operational_domain_pointer)(const fiction::operational_domain&, const std::string_view&,
const fiction::write_operational_domain_params&) =
&fiction::write_operational_domain;

// Define function using function pointer
m.def("write_operational_domain", write_operational_domain_pointer, py::arg("opdom"), py::arg("filename"),
py::arg("params"), DOC(fiction_write_operational_domain));

m.def(
"write_operational_domain_to_string",
[](const fiction::operational_domain& opdom,
const fiction::write_operational_domain_params& params = {}) -> std::string
{
std::ostringstream oss;
fiction::write_operational_domain(opdom, oss, params);
return oss.str();
},
py::arg("opdom"), py::arg("params") = fiction::write_operational_domain_params{});
}

inline void write_critical_temperature_domain(pybind11::module& m)
{
namespace py = pybind11;

// Function pointer for writing to a file
void (*write_critical_temperature_domain_pointer)(
const fiction::critical_temperature_domain&, const std::string_view&,
const fiction::write_operational_domain_params&) = &fiction::write_operational_domain;

// Define function using function pointer
m.def("write_critical_temperature_domain", write_critical_temperature_domain_pointer, py::arg("opdom"),
py::arg("filename"), py::arg("params"), DOC(fiction_critical_temperature_domain));

m.def(
"write_critical_temperature_domain_to_string",
[](const fiction::critical_temperature_domain& opdom,
const fiction::write_operational_domain_params& params = {}) -> std::string
{
std::ostringstream oss;
fiction::write_operational_domain(opdom, oss, params);
return oss.str();
},
py::arg("opdom"), py::arg("params") = fiction::write_operational_domain_params{});
}

} // namespace detail

inline void write_operational_domain(pybind11::module& m)
{
namespace py = pybind11;
Expand All @@ -36,16 +96,10 @@ inline void write_operational_domain(pybind11::module& m)
.def_readwrite("non_operational_tag", &fiction::write_operational_domain_params::non_operational_tag,
DOC(fiction_write_operational_domain_params_non_operational_tag))
.def_readwrite("writing_mode", &fiction::write_operational_domain_params::writing_mode,
DOC(fiction_write_operational_domain_params_writing_mode))

;
DOC(fiction_write_operational_domain_params_writing_mode));

void (*write_operational_domain_pointer)(
const fiction::operational_domain<fiction::parameter_point, fiction::operational_status>&,
const std::string_view&, const fiction::write_operational_domain_params&) = &fiction::write_operational_domain;

m.def("write_operational_domain", write_operational_domain_pointer, py::arg("opdom"), py::arg("filename"),
py::arg("params") = fiction::write_operational_domain_params{}, DOC(fiction_write_operational_domain));
detail::write_operational_domain(m);
detail::write_critical_temperature_domain(m);
}

} // namespace pyfiction
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ inline void write_qca_layout_svg_impl(pybind11::module& m)
void write_svg_layout(pybind11::module& m)
{
namespace py = pybind11;
namespace py = pybind11;

py::enum_<fiction::write_sidb_layout_svg_params::color_mode>(m, "color_mode",
DOC(fiction_write_sidb_layout_svg_params_color_mode))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ template <typename Technology>
void fcn_technology_cell_level_layout(pybind11::module& m)
{
namespace py = pybind11;
namespace py = pybind11;

// fetch technology name
auto tech_name = std::string{fiction::tech_impl_name<Technology>};
Expand Down
Loading
Loading