Skip to content

Commit

Permalink
Merge branch 'main' into quickcell
Browse files Browse the repository at this point in the history
# Conflicts:
#	docs/algorithms/sidb_simulation.rst
#	include/fiction/algorithms/simulation/sidb/is_ground_state.hpp
#	include/fiction/technology/charge_distribution_surface.hpp
#	test/algorithms/simulation/sidb/time_to_solution.cpp
  • Loading branch information
Drewniok committed Aug 30, 2024
2 parents 46b9847 + c37da62 commit 0cf06cd
Show file tree
Hide file tree
Showing 60 changed files with 1,458 additions and 477 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/clang-tidy-review.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: 🚨 • Clang-Tidy Review
name: Clang-Tidy Review

on:
pull_request:
Expand All @@ -16,7 +16,7 @@ concurrency:
jobs:
clangtidy:
runs-on: ubuntu-latest
name: Clang-Tidy
name: 🚨 Clang-Tidy

steps:
- name: Clone Repository
Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ set(CMAKE_CXX_EXTENSIONS OFF)
# Set the project name and version
project(
fiction
VERSION 0.6.2
VERSION 0.6.4
DESCRIPTION
"An open-source design automation framework for Field-coupled Nanotechnologies"
HOMEPAGE_URL "https://github.com/cda-tum/fiction"
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ Among these algorithms are
- OGD-based [scalable placement and routing](https://dl.acm.org/citation.cfm?id=3287705)
- SAT-based [one-pass synthesis](https://ieeexplore.ieee.org/document/9371573)
- SAT-based [multi-path routing](https://dl.acm.org/doi/10.1145/3565478.3572539)
- Graph-oriented [layout design](https://www.cda.cit.tum.de/files/eda/2024_ieee_nano_a_star_is_born.pdf)

plus several path-finding algorithms that work on generic layouts:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,10 +71,10 @@ inline void technology_mapping(pybind11::module& m)

py::class_<fiction::technology_mapping_stats>(m, "technology_mapping_stats", DOC(fiction_technology_mapping_stats))
.def(py::init<>())

.def("__repr__", [](const fiction::technology_mapping_stats& stats) { return stats.report(); })
.def("report", &fiction::technology_mapping_stats::report, DOC(fiction_technology_mapping_stats_report))

;
.def_readonly("mapper_stats", &fiction::technology_mapping_stats::mapper_stats,
DOC(fiction_technology_mapping_stats_mapper_stats));

m.def("and_or_not", &fiction::and_or_not, DOC(fiction_and_or_not));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,12 @@ void distance(pybind11::module& m)
DOC(fiction_manhattan_distance));
m.def("euclidean_distance", &fiction::euclidean_distance<Lyt>, "layout"_a, "source"_a, "target"_a,
DOC(fiction_euclidean_distance));
m.def("squared_euclidean_distance", &fiction::squared_euclidean_distance<Lyt>, "layout"_a, "source"_a, "target"_a,
DOC(fiction_squared_euclidean_distance));
m.def("twoddwave_distance", &fiction::twoddwave_distance<Lyt>, "layout"_a, "source"_a, "target"_a,
DOC(fiction_twoddwave_distance));
m.def("chebyshev_distance", &fiction::chebyshev_distance<Lyt>, "layout"_a, "source"_a, "target"_a,
DOC(fiction_chebyshev_distance));
}

} // namespace detail
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,21 @@ inline void exact(pybind11::module& m)
stats.report(stream);
return stream.str();
})
.def("report", &fiction::exact_physical_design_stats::report, DOC(fiction_exact_physical_design_stats_report))
.def_readonly("time_total", &fiction::exact_physical_design_stats::time_total,
DOC(fiction_exact_physical_design_stats_duration))
.def_readonly("x_size", &fiction::exact_physical_design_stats::x_size,
DOC(fiction_exact_physical_design_stats_x_size))
.def_readonly("y_size", &fiction::exact_physical_design_stats::y_size,
DOC(fiction_exact_physical_design_stats_y_size))
.def_readonly("num_gates", &fiction::exact_physical_design_stats::num_gates,
DOC(fiction_exact_physical_design_stats_num_gates))
.def_readonly("num_wires", &fiction::exact_physical_design_stats::num_wires,
DOC(fiction_exact_physical_design_stats_num_wires))
.def_readonly("num_crossings", &fiction::exact_physical_design_stats::num_crossings,
DOC(fiction_exact_physical_design_stats_num_crossings))
.def_readonly("num_aspect_ratios", &fiction::exact_physical_design_stats::num_aspect_ratios,
DOC(fiction_exact_physical_design_stats_num_aspect_ratios))

;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ inline void graph_oriented_layout_design(pybind11::module& m)
DOC(fiction_graph_oriented_layout_design_stats_num_gates))
.def_readonly("num_wires", &fiction::graph_oriented_layout_design_stats::num_wires,
DOC(fiction_graph_oriented_layout_design_stats_num_wires))

;
.def_readonly("num_crossings", &fiction::graph_oriented_layout_design_stats::num_crossings,
DOC(fiction_graph_oriented_layout_design_stats_num_crossings));

m.def("graph_oriented_layout_design",
&fiction::graph_oriented_layout_design<py_cartesian_gate_layout, py_logic_network>, "network"_a,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,20 @@ inline void orthogonal(pybind11::module& m)
stats.report(stream);
return stream.str();
})
.def("report", &fiction::orthogonal_physical_design_stats::report,
DOC(fiction_orthogonal_physical_design_stats_report))
.def_readonly("time_total", &fiction::orthogonal_physical_design_stats::time_total,
DOC(fiction_orthogonal_physical_design_stats_duration))
.def_readonly("x_size", &fiction::orthogonal_physical_design_stats::x_size,
DOC(fiction_orthogonal_physical_design_stats_x_size))
.def_readonly("y_size", &fiction::orthogonal_physical_design_stats::y_size,
DOC(fiction_orthogonal_physical_design_stats_y_size))
.def_readonly("num_gates", &fiction::orthogonal_physical_design_stats::num_gates,
DOC(fiction_orthogonal_physical_design_stats_num_gates))
.def_readonly("num_wires", &fiction::orthogonal_physical_design_stats::num_wires,
DOC(fiction_orthogonal_physical_design_stats_num_wires))
.def_readonly("num_crossings", &fiction::orthogonal_physical_design_stats::num_crossings,
DOC(fiction_orthogonal_physical_design_stats_num_crossings))

;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ inline void post_layout_optimization(pybind11::module& m)
stats.report(stream);
return stream.str();
})
.def("report", &fiction::post_layout_optimization_stats::report,
DOC(fiction_post_layout_optimization_stats_report))
.def_readonly("time_total", &fiction::post_layout_optimization_stats::time_total,
DOC(fiction_post_layout_optimization_stats_duration))
.def_readonly("x_size_before", &fiction::post_layout_optimization_stats::x_size_before,
Expand All @@ -57,6 +59,14 @@ inline void post_layout_optimization(pybind11::module& m)
DOC(fiction_post_layout_optimization_stats_y_size_after))
.def_readonly("area_improvement", &fiction::post_layout_optimization_stats::area_improvement,
DOC(fiction_post_layout_optimization_stats_area_improvement))
.def_readonly("num_wires_before", &fiction::post_layout_optimization_stats::num_wires_before,
DOC(fiction_post_layout_optimization_stats_num_wires_before))
.def_readonly("num_wires_after", &fiction::post_layout_optimization_stats::num_wires_after,
DOC(fiction_post_layout_optimization_stats_num_wires_after))
.def_readonly("num_crossings_before", &fiction::post_layout_optimization_stats::num_crossings_before,
DOC(fiction_post_layout_optimization_stats_num_crossings_before))
.def_readonly("num_crossings_after", &fiction::post_layout_optimization_stats::num_crossings_after,
DOC(fiction_post_layout_optimization_stats_num_crossings_after))

;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ inline void wiring_reduction(pybind11::module& m)
stats.report(stream);
return stream.str();
})

.def("report", &fiction::wiring_reduction_stats::report, DOC(fiction_wiring_reduction_stats_report))
.def_readonly("time_total", &fiction::wiring_reduction_stats::time_total,
DOC(fiction_wiring_reduction_stats_duration))
.def_readonly("x_size_before", &fiction::wiring_reduction_stats::x_size_before,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,16 +57,25 @@ inline void critical_temperature(pybind11::module& m)
py::class_<fiction::critical_temperature_stats>(m, "critical_temperature_stats",
DOC(fiction_critical_temperature_stats))
.def(py::init<>())
.def_readwrite("algorithm_name", &fiction::critical_temperature_stats::algorithm_name,
DOC(fiction_critical_temperature_stats_algorithm_name))
.def_readwrite("critical_temperature", &fiction::critical_temperature_stats::critical_temperature,
DOC(fiction_critical_temperature_stats_critical_temperature))
.def_readwrite("num_valid_lyt", &fiction::critical_temperature_stats::num_valid_lyt,
DOC(fiction_critical_temperature_stats_num_valid_lyt))
.def_readwrite("energy_between_ground_state_and_first_erroneous",
&fiction::critical_temperature_stats::energy_between_ground_state_and_first_erroneous,
DOC(fiction_critical_temperature_stats_energy_between_ground_state_and_first_erroneous))
.def("report", &fiction::critical_temperature_stats::report, DOC(fiction_critical_temperature_stats_report));
.def("__repr__",
[](const fiction::critical_temperature_stats& stats)
{
std::stringstream stream{};
stats.report(stream);
return stream.str();
})
.def("report", &fiction::critical_temperature_stats::report, DOC(fiction_critical_temperature_stats_report))
.def_readonly("algorithm_name", &fiction::critical_temperature_stats::algorithm_name,
DOC(fiction_critical_temperature_stats_algorithm_name))
.def_readonly("critical_temperature", &fiction::critical_temperature_stats::critical_temperature,
DOC(fiction_critical_temperature_stats_critical_temperature))
.def_readonly("num_valid_lyt", &fiction::critical_temperature_stats::num_valid_lyt,
DOC(fiction_critical_temperature_stats_num_valid_lyt))
.def_readonly("energy_between_ground_state_and_first_erroneous",
&fiction::critical_temperature_stats::energy_between_ground_state_and_first_erroneous,
DOC(fiction_critical_temperature_stats_energy_between_ground_state_and_first_erroneous))

;

/**
* Critical temperature parameters.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,11 @@ inline void sidb_simulation_engine(pybind11::module& m)

;

py::enum_<fiction::exhaustive_sidb_simulation_engine>(m, "exhaustive_sidb_simulation_engine",
DOC(fiction_exhaustive_sidb_simulation_engine))
.value("EXGS", fiction::exhaustive_sidb_simulation_engine::EXGS,
DOC(fiction_exhaustive_sidb_simulation_engine_EXGS))
.value("QUICKEXACT", fiction::exhaustive_sidb_simulation_engine::QUICKEXACT,
DOC(fiction_exhaustive_sidb_simulation_engine_QUICKEXACT))
py::enum_<fiction::exact_sidb_simulation_engine>(m, "exact_sidb_simulation_engine",
DOC(fiction_exact_sidb_simulation_engine))
.value("EXGS", fiction::exact_sidb_simulation_engine::EXGS, DOC(fiction_exact_sidb_simulation_engine_EXGS))
.value("QUICKEXACT", fiction::exact_sidb_simulation_engine::QUICKEXACT,
DOC(fiction_exact_sidb_simulation_engine_QUICKEXACT))

;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,15 @@ namespace detail
{

template <typename Lyt>
void time_to_solution(pybind11::module& m, const std::string& lattice = "")
void time_to_solution(pybind11::module& m)
{
using namespace pybind11::literals;

m.def("time_to_solution", &fiction::time_to_solution<Lyt>, "lyt"_a, "quickim_params"_a,
"tts_params"_a = fiction::time_to_solution_params{}, "ps"_a = nullptr, DOC(fiction_time_to_solution));
m.def("time_to_solution_for_given_simulation_results", &fiction::time_to_solution_for_given_simulation_results<Lyt>,
"results_exact"_a, "results_heuristic"_a, "confidence_level"_a = 0.997, "ps"_a = nullptr,
DOC(fiction_time_to_solution_for_given_simulation_results));
}

} // namespace detail
Expand All @@ -49,16 +52,25 @@ inline void time_to_solution(pybind11::module& m)
*/
py::class_<fiction::time_to_solution_stats>(m, "time_to_solution_stats", DOC(fiction_time_to_solution_stats))
.def(py::init<>())
.def_readwrite("time_to_solution", &fiction::time_to_solution_stats::time_to_solution,
DOC(fiction_time_to_solution_stats_time_to_solution))
.def_readwrite("acc", &fiction::time_to_solution_stats::acc, DOC(fiction_time_to_solution_stats_acc))
.def_readwrite("mean_single_runtime", &fiction::time_to_solution_stats::mean_single_runtime,
DOC(fiction_time_to_solution_stats_mean_single_runtime))
.def_readwrite("single_runtime_exhaustive", &fiction::time_to_solution_stats::single_runtime_exhaustive,
DOC(fiction_time_to_solution_stats_single_runtime_exhaustive))
.def_readwrite("algorithm", &fiction::time_to_solution_stats::algorithm,
DOC(fiction_time_to_solution_stats_algorithm))
.def("report", &fiction::time_to_solution_stats::report, DOC(fiction_time_to_solution_stats_report));
.def("__repr__",
[](const fiction::time_to_solution_stats& stats)
{
std::stringstream stream{};
stats.report(stream);
return stream.str();
})
.def("report", &fiction::time_to_solution_stats::report, DOC(fiction_time_to_solution_stats_report))
.def_readonly("time_to_solution", &fiction::time_to_solution_stats::time_to_solution,
DOC(fiction_time_to_solution_stats_time_to_solution))
.def_readonly("acc", &fiction::time_to_solution_stats::acc, DOC(fiction_time_to_solution_stats_acc))
.def_readonly("mean_single_runtime", &fiction::time_to_solution_stats::mean_single_runtime,
DOC(fiction_time_to_solution_stats_mean_single_runtime))
.def_readonly("single_runtime_exact", &fiction::time_to_solution_stats::single_runtime_exact,
DOC(fiction_time_to_solution_stats_single_runtime_exact))
.def_readonly("algorithm", &fiction::time_to_solution_stats::algorithm,
DOC(fiction_time_to_solution_stats_algorithm))

;

// NOTE be careful with the order of the following calls! Python will resolve the first matching overload!

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,21 @@ inline void equivalence_checking(pybind11::module& m)
py::class_<fiction::equivalence_checking_stats>(m, "equivalence_checking_stats",
DOC(fiction_equivalence_checking_stats))
.def(py::init<>())
.def_readwrite("counter_example", &fiction::equivalence_checking_stats::counter_example,
DOC(fiction_equivalence_checking_stats_counter_example))
.def_readonly("eq", &fiction::equivalence_checking_stats::eq, DOC(fiction_equivalence_checking_stats_eq))
.def_readonly("tp_spec", &fiction::equivalence_checking_stats::tp_spec,
DOC(fiction_equivalence_checking_stats_tp_spec))
.def_readonly("tp_impl", &fiction::equivalence_checking_stats::tp_impl,
DOC(fiction_equivalence_checking_stats_tp_impl))
.def_readonly("tp_diff", &fiction::equivalence_checking_stats::tp_diff,
DOC(fiction_equivalence_checking_stats_tp_diff))
.def_readonly("counter_example", &fiction::equivalence_checking_stats::counter_example,
DOC(fiction_equivalence_checking_stats_counter_example))
.def_readonly("runtime", &fiction::equivalence_checking_stats::runtime,
DOC(fiction_equivalence_checking_stats_duration))
.def_readonly("spec_drv_stats", &fiction::equivalence_checking_stats::spec_drv_stats,
DOC(fiction_equivalence_checking_stats_spec_drv_stats))
.def_readonly("impl_drv_stats", &fiction::equivalence_checking_stats::impl_drv_stats,
DOC(fiction_equivalence_checking_stats_impl_drv_stats))

;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ inline void write_svg_layout(pybind11::module& m)
;

void (*write_svg_layout_function_pointer)(const py_qca_layout&, const std::string_view&,
fiction::write_qca_layout_svg_params) =
const fiction::write_qca_layout_svg_params&) =
&fiction::write_qca_layout_svg<py_qca_layout>;

m.def("write_qca_layout_svg", write_svg_layout_function_pointer, "layout"_a, "filename"_a,
Expand Down
Loading

0 comments on commit 0cf06cd

Please sign in to comment.