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

Merged
merged 79 commits into from
Feb 13, 2025
Merged
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
79 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
6f0f9a4
:snake: expose operational analysis strategy.
Drewniok Feb 12, 2025
a26d7f5
:art: small fix and add docu.
Drewniok Feb 12, 2025
17a1e69
:snake: add missing functionality.
Drewniok Feb 12, 2025
9853247
:art: Small consistency adjustments, code simplifications, and additi…
marcelwa Feb 12, 2025
fc8f14e
:memo: Update pyfiction docstrings
actions-user Feb 12, 2025
4fc00df
:white_check_mark: add additional test.
Drewniok Feb 12, 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
2 changes: 2 additions & 0 deletions bindings/mnt/pyfiction/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,7 @@
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 @@ -605,6 +606,7 @@
"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 @@ -50,7 +50,6 @@ void operational_domain(pybind11::module& m)
inline void operational_domain(pybind11::module& m)
{
namespace py = pybind11;
namespace py = pybind11;

py::class_<fiction::parameter_point>(m, "parameter_point", DOC(fiction_parameter_point))
.def(py::init<>(), DOC(fiction_parameter_point_parameter_point))
Expand All @@ -72,28 +71,41 @@ inline void operational_domain(pybind11::module& m)

;

py::class_<fiction::operational_domain<fiction::parameter_point, fiction::operational_status>>(
py::class_<fiction::operational_domain<fiction::parameter_point, fiction::operational_status, double>>(
m, "operational_domain", DOC(fiction_operational_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",
"operational_values",
&fiction::operational_domain<fiction::parameter_point, fiction::operational_status>::operational_values,
DOC(fiction_operational_domain_operational_values))

.def_readwrite(
"metric_values",
&fiction::operational_domain<fiction::parameter_point, fiction::operational_status, double>::metric_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("get_metric_value",
&fiction::operational_domain<fiction::parameter_point, fiction::operational_status>::get_metric_value,
py::arg("point"), DOC(fiction_operational_domain_get_metric_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("add_metric_value",
&fiction::operational_domain<fiction::parameter_point, fiction::operational_status>::add_metric_value,
py::arg("key"), py::arg("value"))

.def(
"get_operational_domain",
&fiction::operational_domain<fiction::parameter_point, fiction::operational_status>::get_operational_domain,
DOC(fiction_operational_domain_get_operational_domain))

;

Expand All @@ -113,15 +125,22 @@ inline void operational_domain(pybind11::module& m)

;

py::enum_<fiction::operational_domain_params::metric_simulation>(
m, "metric_simulation", DOC(fiction_operational_domain_params_metric_simulation))
.value("TEMPERATURE_SIMULATION",
fiction::operational_domain_params::metric_simulation::CRITICAL_TEMPERATURE_SIM,
DOC(fiction_operational_domain_params_metric_simulation_CRITICAL_TEMPERATURE_SIM))
.value("DISABLED", fiction::operational_domain_params::metric_simulation::DISABLED,
DOC(fiction_operational_domain_params_metric_simulation_DISABLED));

py::class_<fiction::operational_domain_params>(m, "operational_domain_params",
DOC(fiction_operational_domain_params))
.def(py::init<>())
.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))

;
.def_readwrite("metric_sim", &fiction::operational_domain_params::metric_sim);

py::class_<fiction::operational_domain_stats>(m, "operational_domain_stats", DOC(fiction_operational_domain_stats))
.def(py::init<>())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,15 @@
#include "pyfiction/documentation.hpp"
#include "pyfiction/types.hpp"

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

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

#include <string>
#include <string_view>

namespace pyfiction
{
Expand All @@ -36,16 +42,28 @@ 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));

// Function pointer for writing to a file
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;

// Define function using function pointer
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));
py::arg("params"), DOC(fiction_write_operational_domain));

m.def(
"write_operational_domain_to_string",
[](const fiction::operational_domain<fiction::parameter_point, fiction::operational_status>& opdom,
const fiction::write_operational_domain_params& params = {}) -> std::string
{
std::ostringstream oss; // Create an in-memory output stream
fiction::write_operational_domain(opdom, oss, params); // Write to the stream
return oss.str(); // Return the string content
},
py::arg("opdom"), py::arg("params") = fiction::write_operational_domain_params{},
"Writes the operational domain to a CSV string.");
}

} // 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 @@ -15287,9 +15287,24 @@ Template parameter ``Key``:
The type representing the key. Defaults to `parameter_point`.

Template parameter ``Value``:
The type representing the value. Defaults to `operational_status`.)doc";
The type representing the value. Defaults to `operational_status`.

static const char *__doc_fiction_operational_domain_add_value = R"doc()doc";
Template parameter ``MetricType``:
The type representing the metric value. Defaults to `double`.)doc";

static const char *__doc_fiction_operational_domain_add_metric_value =
R"doc(Adds a value to the metric values.

Parameter ``key``:
The key to add the value to.

Parameter ``value``:
The value to add.)doc";

static const char *__doc_fiction_operational_domain_add_value =
R"doc(Adds a value to the operational domain.

@key The key to add the value to. @value The value to add.)doc";

static const char *__doc_fiction_operational_domain_contour_tracing =
R"doc(Computes the operational domain of the given SiDB cell-level layout.
Expand Down Expand Up @@ -15418,7 +15433,30 @@ Parameter ``stats``:
Returns:
The (partial) operational domain of the layout.)doc";

static const char *__doc_fiction_operational_domain_get_domain = R"doc()doc";
static const char *__doc_fiction_operational_domain_get_metric_value =
R"doc(This function retrieves the value associated with the provided key
from the metric values. If the key is found, its corresponding value
is returned. Otherwise, `std::nullopt` is returned.

Parameter ``key``:
The key to look up in the metric values.

Returns:
The value associated with the provided key. If the key is not
found, `std::nullopt` is returned.)doc";

static const char *__doc_fiction_operational_domain_get_metric_values =
R"doc(Returns the metric values. If no metric values are present,
`std::nullopt` is returned.

Returns:
The metric values.)doc";

static const char *__doc_fiction_operational_domain_get_operational_domain =
R"doc(Returns the operational domain.

Returns:
The operational domain.)doc";

static const char *__doc_fiction_operational_domain_get_value =
R"doc(This function retrieves the value associated with the provided key
Expand All @@ -15430,7 +15468,8 @@ Parameter ``key``:
The key to look up.

Returns:
The value associated with the parameter point.)doc";
The value associated with the provided key. If the key is not
found, `std::nullopt` is returned.)doc";

static const char *__doc_fiction_operational_domain_grid_search =
R"doc(Computes the operational domain of the given SiDB cell-level layout.
Expand Down Expand Up @@ -15477,6 +15516,11 @@ Parameter ``stats``:
Returns:
The operational domain of the layout.)doc";

static const char *__doc_fiction_operational_domain_metric_values =
R"doc(This can store different information depending on the use case. If the
critical temperature is simulated on top of the operational domain, it
is stored here.)doc";

static const char *__doc_fiction_operational_domain_operational_values =
R"doc(This can store different information depending on the use case. If the
operational domain is simulated for different physical parameters, the
Expand All @@ -15486,6 +15530,19 @@ static const char *__doc_fiction_operational_domain_params =
R"doc(Parameters for the operational domain computation. The parameters are
used across the different operational domain computation algorithms.)doc";

static const char *__doc_fiction_operational_domain_params_metric_sim = R"doc(The metric to simulate within the operational domain.)doc";

static const char *__doc_fiction_operational_domain_params_metric_simulation =
R"doc(This enumeration defines whether specific metrics, such as critical
temperature, are simulated within the operational domain or if
simulations are disabled.)doc";

static const char *__doc_fiction_operational_domain_params_metric_simulation_CRITICAL_TEMPERATURE_SIM = R"doc(Simulates the critical temperature within the operational domain.)doc";

static const char *__doc_fiction_operational_domain_params_metric_simulation_DISABLED =
R"doc(Disables metric simulation, meaning no metrics are simulated within
the operational domain.)doc";

static const char *__doc_fiction_operational_domain_params_operational_params =
R"doc(The parameters used to determine if a layout is operational or non-
operational.)doc";
Expand Down Expand Up @@ -19950,11 +20007,15 @@ The operational status is a binary value represented by specified tags
in `params` indicating whether the simulation parameters are within
the operational domain or not.

Template parameter ``OpDomain``:
The type of the operational domain.

Parameter ``opdom``:
The operational domain to be written. It contains a mapping from
sets of simulation parameters (represented as a pair of sweep
parameters for the X and Y dimensions) to their operational
status.
status, and it can include metric values (e.g., the critical
temperature on top of that).

Parameter ``os``:
The output stream where the CSV representation of the operational
Expand All @@ -19981,11 +20042,15 @@ The operational status is a binary value represented by specified tags
in `params` indicating whether the simulation parameters are within
the operational domain or not.

Template parameter ``OpDomain``:
The type of the operational domain.

Parameter ``opdom``:
The operational domain to be written. It contains a mapping from
sets of simulation parameters (represented as a pair of sweep
parameters for the X and Y dimensions) to their operational
status.
status, and it can include metric values (e.g., the critical
temperature on top of that).

Parameter ``filename``:
The filename where the CSV representation of the operational
Expand Down
Loading
Loading