Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
Unreleased¶
Added¶
Algorithms:
fcn::areacomputes the bounding-box area of asidb::layout, including defectsphysical_design::cell_grid_extentreturns the extent of the cell grid that a gate library spans on a gate-level layoutSiDB design and simulation applications support shared millisecond timeouts, including defect-aware circuit retries.
utils::progress_callbackandutils::progress_reporterlet long-running algorithms report progress through theon_progressparameter. Finite physical-validity sweeps report their total.Parallel algorithms accept
on_worker_progressfor stable worker activity and completed counts. Gate mapping, network passes, design-rule checks, and layout writers report counted phases.
CLI:
pip install mnt.pyfictioninstalls the Pythonfictionshell, with interactive help, completion, script files, piped input, and JSON statistics. The shell also runs aspython -m mnt.fiction.cli.Each file format has a dedicated
write_<format>command; readers support AAG, PLA, and all FGL topologies.aig,abc, andgenerateprovide AIG optimization, external ABC scripts, and network generators.showsupports optional Graphviz SVG rendering, explicit viewers, and temporary-file cleanup.Long-running CLI commands show responsive progress. Counted phases use real bars; searches show candidate extents on one aggregate row. Quiet mode and redirected output suppress displays.
Code quality:
Added QCA SVG regression tests for colors, detail modes, tile labels, and file output.
Continuous integration:
Added Python source coverage, including package-root modules, and separate C++ checks.
Data structures:
sidb::latticedescribes H-Si geometry,sidb::lattice_siteidentifies a site, andsidb::layoutstores tagged dots and defects without templatessidb::charge_distributionassigns one charge state per SiDB and carries its energy;sidb::simulation::resultstores one layout plus its physically valid configurationssidb::simulation::potential_landscapestores static electrostatics for reuse across charge configurations and simulation worker threadsclocking::get_scheme(name, arrangement)looks up a clocking scheme without a layout type and accepts a3or4suffix on every scheme that supports that phase count.
Dependencies:
mnt.pyfictiondepends onprompt_toolkit,rich, andaigversefor the shell.
Documentation:
Added an FCN bibliography, BibTeX download, and OpenGraph metadata.
Added
nox -s docsfor local previews, link checks, and Read the Docs builds.Added synchronized C++/Python tabs and code copy buttons.
Added
llms.txt,llms-full.txt, and Markdown exports of documentation pages.
I/O:
read_sqd_layout,write_sqd_layout,write_sidb_layout_svg,read_surface_defects, andprint_sidb_layoutaccept and producesidb::layout; the SQD reader takes the lattice from the file instead of a template parameter
Python bindings:
The callback members of parameter classes accept
None, which clears the callback.Shared SiDB deadlines raise
TimeoutError; gate design releases the GIL.Added directory-based test markers, including
pytest -m simulation.Marked the SiDB circuit-design integration test as
slow;pytest -m 'not slow'skips it.Exposed
write_location_and_ground_state, whose binding existed but was never registeredlattice,lattice_site,sidb_layout(the lattice-based layout),read_sqd_layout,read_surface_defects, and thesidb_layoutoverloads ofwrite_sqd_layoutandwrite_sidb_layout_svgExposed
charge_distribution,potential_landscape, charge transition thresholds, andsidb_simulation_result; simulation engines and consumers accept the new typesExposed lattice-based BDL types, wire detection, and input-pattern generation
Exposed lattice-based logic checks, parameter domains, critical-temperature analysis, time-to-solution estimates, and population-stability analysis
SiDB gate and random-layout generators accept and return
sidb_layoutSiDB defect analyses accept
sidb_layout; the displacement analysis returnsdisplacement_robustness_domain, and defect-domain writers returnNonedisplacement_robustness_domainreplaces its_100and_111variantsapply_bestagon_libraryreturnssidb_layoutAdded
on_the_fly_sidb_circuit_designto design SiDB circuits from placed and routed hexagonal gate-level layouts, with configurable gate-design parametersaig_network,xag_network, andmig_networkwith their readers,write_verilog,write_blif,write_aiger,convert_network,count_gate_types, andprint_sidb_layoutdynamic_truth_tablegainscreate_from_binary_string,create_from_hex_string,create_from_expression,create_random,to_binary, andto_hex; networks gaindepth, gate-level layoutsclone, clocked layoutsget_clocking_scheme_name, andexact_paramsupper_bound_areatechnology_mapping,simulate,count_gate_types, andwrite_dot_networkaccept every network type;technology_mapping_paramsexposeslt2,gt2,le2, andge2areaaccepts amol_qca_layout,orthogonal_paramsexposesnumber_of_clock_phaseswith thenum_clksenum,write_qcc_layout_paramsexposesuse_filename_as_component_name, andgate_level_drvsfills agate_level_drv_statswhosereportis the full check as JSONconvert_networktakes atargetof the newnetwork_targetenum, so it produces AIGs, XAGs, and MIGs as well as technology networksprint_sidb_layoutexposeslat_colorandcrop_layout, andwrite_dot_networkandwrite_dot_layoutexposeindexesandclock_colorsThe parameters of the algorithms that report progress accept a Python callable as
on_progress, andexhaustive_ground_state_simulationtakes it as an argument. These algorithms release the GIL while they run.mnt.pyfictionships.pyistubs and apy.typedmarker, so type checkers and IDEs see the signatures of the bindings. The package declares theTyping :: Typedclassifier.Coordinate stubs accept two- and three-element tuples. Domain iterators and simulation parameter dictionaries preserve their element types.
bdl_wire.port_directionexposes wire directions and I/O flags.
Tooling:
Added EditorConfig settings that match the repository’s formatters.
Prek formats
pyproject.tomlwithpyproject-fmt.Added
nox -s cpp_lintfor local Clang-Tidy checks. Nox usescmakeas the sole CMake executable.Added
nox -s stubs, which regenerates themnt.pyfictionstubs; CI fails when they are out of date.
Changed¶
Algorithms:
Geometric distances accept coordinate pairs directly and use fixed
uint64_tordoubleresults. Squared Euclidean distance isnoexceptand requires a result within theuint64_trange. Euclidean distance is a runtimenoexceptfunction.Routing paths, objectives, costs, gate-design exceptions, and coordinate-only placement state omit layout template parameters. Distance callbacks accept coordinate pairs; A* distance callbacks borrow their layout at construction.
Layout extraction and critical-path analysis reduce per-object allocations with flat traversal maps.
Gate-layout iteration skips removed objects through a compact live-object bitmap.
GOLD reuses built-in objective costs while ranking candidates and accepting solutions.
Breaking: A*, path enumeration, and Yen’s algorithm route around the gates and wires of every gate-level layout and take temporary constraints as a separate
obstructionsargument, leaving the caller’s data unchanged.&a_star_distance<Lyt>no longer converts to adistance_functor; usea_star_distance_functor.QCA ONE via optimization now visits occupied crossing cells instead of scanning the full frame.
Avoid redundant progress-callback copies in algorithms and layout writers.
Critical-path analysis collapses wire chains to reduce traversal overhead on large layouts.
Avoid helper threads for single-worker sampling and contour exploration.
Reduce coordinate-vector allocations during operational-domain traversal.
Reuse completed three-dimensional contour surfaces across initial samples.
Contour tracing explores boundary surfaces in three or more dimensions in parallel. It uses
operational_domain_params::number_of_threads; large contour interiors also use parallel inference.convert_networkmaps a technology network’s inverters tocreate_noton a target withoutcreate_node, so AIG, XAG, and MIG conversions keep the inverters they used to loseBreaking: QuickExact, QuickSim, ExGS, ClusterComplete, and Ground State Space simulate
sidb::layoutand return the non-templatesidb::simulation::resultQuickSim returns
std::nulloptfor layouts with charged surface defectsOn the same machine, ClusterComplete runs 2–4× faster (29-SiDB crossing: 11.4 → 5.1 ms; 56-SiDB NAND: 19.7 → 3.3 s). QuickSim improves by one third, ExGS by one quarter with 10,000× less heap traffic, and QuickExact holds speed with 28× less heap traffic
Potential landscape construction computes each symmetric SiDB interaction once
Breaking: SiDB generators, logic, and analysis algorithms use
sidb::layout,kitty::dynamic_truth_table, and non-template simulation typesBreaking: SiDB defect analyses, generators, and gate libraries use
sidb::layoutTheir parameters use
lattice_sitefor canvases, scan areas, and fixed SiDBsDefect-influence and displacement-robustness domains are non-template types
Random gate design samples at most
maximal_random_design_attemptscandidates without enumerating canvas layouts; candidate counts saturate at the largest representable valueGate-design and defect-influence APIs reject empty specifications
on_the_fly_gate_librarymeasures the distance between a defect and the gate’s SiDBs on the surface’s latticesurface_analysisandsurface_black_listlive inphysical_design/surface_analysis.hppand namespacefiction::physical_design.surface_analysistakes the surface as asidb::layout, andexacthas no SiDB header dependencygraph_oriented_layout_design,post_layout_optimization, andwiring_reductionare no longernoexcept, so an exception of a progress callback propagates to the callerBreaking:
fcn::area_paramstakes the layout type whose cell dimensions it defaults to, e.g.,area_params<qca::layout>Breaking:
exactandorthogonaltakelayout_arrangementin their parameters for shifted Cartesian and hexagonal layouts and throwstd::invalid_argumentwithout it.graph_oriented_layout_designrequires a Cartesian layout.
Build system:
Direct CMake builds of the Python bindings now require nanobind 3.1 or newer.
The Docker image uses
uvto install themnt.pyfictionwheel and starts the Pythonfictionshell.Git ignores the
.pydextension modules that Windows builds of the Python bindings produce.The installed package now ships mockturtle with its SAT libraries and declares the
parallel_hashmapinclude directory. It no longer definesfiction::mockturtle; linkfiction::libfictioninstead.
CLI:
Commands now live in separate modules grouped by help category, with local options and metadata.
Breaking: SiDB commands use
sidb::layoutand simulation results. SQD files supply the lattice;--lattice_orientationis removed. Descriptions count SiDBs asdots.SiDB simulation commands accept simulated entries and append results; earlier entries remain selectable.
print,show, and statistics use stored ground states; SQD output exports geometry and defects.Breaking: store positions count from 1.
ps --alldescribes every entry;store --popremoves the active entry from explicitly selected stores.Breaking: format-specific readers complement
read. Directory imports,--sort,source, and theexitalias are removed;-fruns scripts andquitends them.Help includes command inputs, defaults, restrictions, and examples. Store tables and status text fit terminal widths;
psgroups related statistics.Errors use standard error.
--quietretains requested results, and-icontinues scripted runs interactively.gold --progressremains accepted for compatibility; Rich controls search progress.Long options use hyphens. See the CLI migration table for renamed options, topology choices, clock phases, gate selectors, and gate-library aliases.
clustercomplete --basedefaults to 3.
Continuous integration:
Read the Docs now builds on Ubuntu 26.04.
Replaced Ubuntu 22.04 and GCC 11 CI coverage with Ubuntu 26.04, GCC 15, and Clang 22. Ubuntu 24.04 retains older compiler coverage.
Windows wheel builds no longer install the zero-hit job-local
sccache; split mode compiles the extension only once per job.Reusable workflows now use GitHub’s self-repository reference syntax.
Clang-Tidy skips Python-only changes in the bindings tree.
PyPI releases now use trusted publishing instead of an API token.
Renovate now waits three days for dated dependency releases before updating.
Astral’s
tynow checks Python types in place ofmypy.
Data structures:
bounding_box_2dis renamed tobounding_boxin C++ and Python.Coordinate aliases and geometry traits are removed; use
layout_basetypes and concrete layout arguments.Gate-level layouts now keep large-arity input storage outside the common object record.
Breaking: Clocking scheme
name()returns a borrowedstd::string_view. Copy withstd::string{scheme.name()}when the name must outlive its scheme.Gate-level layouts now use
create_gate,object_function,move_object, andforeach_object. Layout assignment printers use object terminology; update callers to these names.Breaking: Gate-level layouts now store placed objects with generation-checked IDs and typed ports. Replace tile-valued signals with object lookup and explicit input connections; copies are independent.
Breaking: Layouts expose their frame through
get_extent()in C++ and Python; Python constructors,resize, andareause theextentkeyword. Extent values useexrather thanar.Breaking: Layout frames now use width, height, and layer counts. Replace maximum coordinates with extent counts; missing neighbors and empty bounds return optional values.
Breaking: Gate-level layouts own clocking, synchronization, and obstructions. Instantiate them directly on coordinate layouts; remove
clocked_layout,synchronization_element_layout,obstruction_layout, andtile_based_layoutwrappers.Breaking: QCA, molQCA, and iNML have dedicated layout types,
qca::layout,mol_qca::layout, andinml::layout, which replacecell_level_layout. Each carries only what its technology needs, and copies are independent. molQCA and iNML layouts are planar, only QCA cells have modes and synchronization elements, and molQCA cells name their own clock phase, so molQCA layouts have no clock zones.Breaking: QCA and iNML layouts address clock zones by tile: all cells of a tile, on every layer, share its clock number.
get_clock_zonereturns the clock zone of a cell.Hexagonal clocking factories now reuse immutable cutouts, and tile-clock comparisons avoid copying schemes.
clocking::state::get_clocking_schemeand gate-level layout getters now return a const reference.Gate-level
assign_clock_numbernow clocks every layer of a tile and ignores thezcoordinate;get_clock_numberreturns the same clock number on all layers.Breaking:
clocking::schemeis now a non-template value type over signed(x, y)tile positions that can be copied, assigned, and compared. Factories drop their layout argument, e.g.,clocking::twoddwave(), andtwoddwave_hextakes alayouts::arrangement.Breaking:
clocking::schemeexposesname(),num_clocks(),max_in_degree(), andmax_out_degree()as accessors and no longer compares equal to a name string;clocking::is_lineardrops its layout argument.Breaking: molQCA lives in
technology/mol_qca/andnamespace fiction::mol_qca, together withsim7_mol_libraryandwrite_mol_qca_layout_svg. iNML names its element typeinml::magnet_type.Population-stability results expose the critical dot as
critical_dotin C++ and Python.SiDB layouts use dot operations and
dot_tagfor dot roles.assign_sidbdefaults to theNORMALtag. Lattice-site constructors takeint32_tcoordinates and anint8_tbasis index.Simulation results store charge states and energy beside one shared layout and potential landscape instead of copying a
charge_distribution_surfacefor every configurationBreaking:
hexagonal_layoutandshifted_cartesian_layouttake theirlayouts::arrangementas a constructor argument instead of a template parameter, andget_arrangement()returns it.Breaking: Coordinates are signed.
layouts::layout_base::coordinatewith threeint32_taxes replacescoords::offsetandcoords::cube, andcartesian_layout,hexagonal_layout, andshifted_cartesian_layoutderive fromlayout_baseand are no longer templates.coordinates.hppandlayouts::coordsare gone. Everyint32_tcoordinate is valid, includingINT32_MIN; absence uses optional values. Layout extents accept axis counts from 0 through 2^31, and gate-level layouts support multiple layers.Breaking:
graph_oriented_layout_design_params::tiles_to_skip_between_pisis anint32_t, andgraph_oriented_layout_designthrowsstd::invalid_argumentfor values outside of [0, 2^20].
Dependencies:
Native CI and Docker now use Z3 5.1.0. Wheel builds retain Z3 4.14.1 for their deployment floors.
fmtis fetched as the 12.1.0 release, the version alice carried; mockturtle’s bundled 11.0.2 does not compile with clang 20.
Documentation:
Python layout docstrings use
extentfor the extent argument.Corrected the coordinate page’s
last_coordinate()accessor reference.Clarified the difference between coverage collection jobs and Codecov coverage targets.
Standardized paper links in the docs and README to DOI URLs and corrected the
ortho,equiv, and Yen references.Corrected README links to the C++ library, CLI installation, and synchronization elements, and updated its QCA layout include.
Migrated the documentation to MyST Markdown and the Furo theme with light and dark modes.
Documentation now displays the installed package version.
QCA, molQCA, and iNML each document their layout on a page of its own, like SiDB, and the Python tabs list every bound symbol of their sections.
Experiments:
Physical-design experiments use shared routing values and the
bounding_boxAPI.Experiments now report exceptions with a failure exit status. Layout-area products use 64-bit arithmetic.
SiDB generator and circuit experiments use concrete parameter types with unchanged numerical values.
Gate-layout experiments use extent counts and extract logic networks for mockturtle algorithms. The reported dimensions and areas retain their definitions.
The Bestagon and hexagonalization experiments compute their unchanged area from the cell-grid extent.
Gate-layout experiments use direct capability headers and simpler status reporting.
The Bestagon, defect-aware, and on-the-fly experiments pass the even-row arrangement at runtime with unchanged results.
Gate libraries:
Breaking:
apply_gate_library<GateLibrary>andapply_parameterized_gate_library<GateLibrary>return the layout type of the library and take no cell-layout template argument. SiDB libraries produce ansidb::layoutdirectly.fcn::gate_librarytakes the produced layout type instead of a technology tag.apply_gate_library_to_defective_surfaceandapply_parameterized_gate_library_to_defective_surfacetake the defective surface as asidb::layoutand return one that carries its defects. SiDB gate placement, surface analysis, and circuit design no longer take a cell-layout template argument.The Bestagon library throws
std::invalid_argumentfor layouts that shift columns instead of failing to compile.The ToPoliNano library and CLI reject row-shifted Cartesian layouts.
I/O:
write_sidb_layout_svgandprint_sidb_layoutcolor ansidb::layoutfrom an optionalcharge_distributionBreaking: FGL writers now emit version 2 with size counts, declared interface order, and numbered input connections. Readers also accept legacy maximum-coordinate sizes; writers reject incomplete or physically invalid layouts before writing.
Breaking: Restructured
include/fiction/so that the directory a header lives in tells you what the header is about, and introduced nested namespaces mirroring that tree (#1096, #1097):algorithms/is dissolved. The design-flow stages sit directly underfiction/assynthesis/,physical_design/, andverification/The flat
io/directory is dissolved. Readers and writers live with the module whose data they serialize:layouts/io/,networks/io/,synthesis/io/,technology/<tech>/io/, andtechnology/sidb/simulation/io/for the writers of simulation results. The SVG writer is split by the technology it draws intoqca/io/write_qca_layout_svg.hpp,mol_qca/io/write_mol_qca_layout_svg.hpp, andsidb/io/write_sidb_layout_svg.hpp; the QLL writer, which serves iNML, QCA, and molQCA alike, sits infcn/io/technology/is split by technology intofcn/,qca/,mol_qca/,inml/, andsidb/. The SiDB subtree gainssurfaces/,model/,simulation/(withengines/,analysis/,defects/,logic/, andio/),generators/, andio/. Thecell_technologies.hppumbrella is gone; each technology’s layout is in its ownlayout.hpputils/exists once, at the top, and holds what is domain-agnostic:math/,stl/,graph/(graph_coloring,mincross),optimization/(simulated_annealing), andio/(csv_writer). A module’s own helpers sit directly in the module, solayout_utils.hppis inlayouts/androuting_utils.hppinphysical_design/. Theutils/debug/printers joinlayouts/io/print_layout.hppandnetworks/io/dot_drawers.hppNamespaces mirror the directories, so
fiction::quickexactbecomesfiction::sidb::simulation::engines::quickexact.technology/itself adds no namespace level;clocking_scheme.hppaddslayouts::clockingfor the family it definesIdentifiers shed prefixes the namespace now carries, so
sidb_simulation_parametersbecomesfiction::sidb::model::simulation_parameters,design_sidb_gatesbecomesfiction::sidb::generators::design_gates, andgate_library::fcn_gatebecomesgate. Published names are kept, soqca_one_librarystaysfiction::qca::qca_one_libraryThe offset coordinate type
fiction::offset::ucoord_tbecomesfiction::layouts::layout_base::coordinateThe cluster hierarchy that
clustercompleteandground_state_spacebuild is implementation detail,fiction::sidb::simulation::engines::detail, and leaves the documented API;ground_state_space_results::top_clusterstays as the handle into it
fiction is header-only, so an include path is public API. This is a clean break: no forwarding headers are left behind and no deprecated
usingdeclarationsBreaking:
quickexact_params,quicksim_params,clustercomplete_params,is_operational_params,critical_temperature_params,physical_population_stability_params,generate_random_sidb_layout_params,ground_state_space_params,sidb_simulation_result, andcharge_distribution_surfacerenamed theirsimulation_parametersmember tosim_params, which is what several of them already called it.is_sidb_gate_design_impossible_paramsspelled itsimulation_paramsand is unified tosim_paramstoo. The Python attribute keeps the namesimulation_parametersBreaking: Three member functions lose the prefix their class’s namespace now carries:
charge_distribution_surface::set_sidb_simulation_enginebecomesset_simulation_engine, anddefect_surface::assign_sidb_defectandget_sidb_defectbecomeassign_defectandget_defectBreaking: The clocking schemes share one
fiction::layouts::clockingnamespace and drop theclockingtheir identifiers repeated, sofiction::bancs_clockingbecomesfiction::layouts::clocking::bancs, and likewise foropen,columnar,row,twoddwave,twoddwave_hex,use,res,esr,cfe,ripple, andsrs. The type they return, the enum they take, and the helpers around them move with them:clocking_schemebecomesclocking::scheme,clock_name::TWODDWAVEbecomesclocking::TWODDWAVE_NAME,get_clocking_schemebecomesclocking::get_scheme, andis_linear_schemebecomesclocking::is_linear.clocking_scheme.hppkeeps its path, the scheme name strings are unchanged, and theclocked_layoutmembers that mention clocking keep their names.fiction::ptr, which wrapped a scheme in astd::shared_ptrand had no caller, is removedBreaking: The truth table helpers move from
utilstosynthesis, where the gate libraries and technology mapping that specify functions with them live:fiction::create_and_ttbecomesfiction::synthesis::create_and_tt, andfiction::tt_readerbecomesfiction::synthesis::io::tt_reader. The header sheds its_utilssuffix to match its siblings, sofiction/utils/truth_table_utils.hppis nowfiction/synthesis/truth_tables.hpp. Neither header depends on a network; both include onlykittyand the standard libraryBreaking: The coordinate helpers adopt one naming rule: a bare noun is a type, everything else is an operation on one.
coord_iteratorbecomeslayout_base::coordinate_iterator, andareabecomesarea_ofBreaking:
fiction::constantsis gone.ERROR_MARGIN, the floating-point comparison tolerance, isfiction::utils::math::ERROR_MARGIN;ELEMENTARY_CHARGE,K_E,BOLTZMANN_CONSTANTandEV_TO_JOULEarefiction::sidb::modelconstants intechnology/sidb/model/physical_constants.hpp.PI, which duplicatedstd::numbers::piat lower precision, andphysical::EPSILON, which the electrostatics never used because the Coulomb constantK_Efolds in the1 / (4 * pi * epsilon_0)the two spelled out, are removedBreaking: Test files are renamed to
test_<header>.cppand thetest/tree mirrorsinclude/fiction/. CTest case names gain thetest_prefix accordinglyread_fgl_layoutcreates shifted Cartesian and hexagonal layouts with the arrangement stored in the file; reading into a layout with another arrangement throwsfgl_parsing_error.Breaking:
additional_graph_attributesandadditional_node_attributesof the gate-level layout DOT drawers take the layout as an argument. The shifted Cartesian and hexagonal drawers share one base class.
The
pyfictionbinding sources underbindings/mirror the C++ namespaces: each binding sits in the directory of its namespace under the name of the header it wraps, and every directory that holds binding sources has exactly one registry. The Python package lives underpython/, and its tests undertest/python/Code quality:
C++ Python binding helpers now use a
register_prefix.Python bindings use the
nbnamespace alias for nanobind.The C++ test suite and the experiments now open the namespaces they use, one
using namespacedirective per namespace, rather than qualifying every symbol belowfiction. That removes about 14,000 qualifier tokens.fiction::layouts::clockingis deliberately left closed, so those references readclocking::scheme, anddetailnamespaces stay qualified by their moduleThe
license-toolshook now covers.hppand.cppas well as Python, and skips the generatedpybind11_mkdoc_docstrings.hppEvery C++ file now opens with the MIT copyright block and a Doxygen block carrying
@file, a one-line@brief, and one@authorline per contributor. The// Created by ...comments 428 files carried are gone; editing a file now means adding yourself to its listBreaking for forks: the
#ifndef FICTION_..._HPPinclude guards are replaced by#pragma once, so a patch that touches the top or the bottom of a header will not apply as-is.portability-avoid-pragma-onceis switched off in.clang-tidyaccordinglyThe Debug build no longer emits compiler warnings. Cleared
-Wshadowinenergy_stateand the two SiDB writer implementations,-Wswitchinwrite_sqd_layout, and-Wparenthesesand-Wconversionin two tests
Documentation:
The
docs/tree mirrorsinclude/fiction/: every page sits in the directory of the headers it documents, and every directory with more than one page has a page named after it that carries the toctree
Python bindings:
Breaking: Use
read_network,read_fgl_layout,random_network,exact, andorthogonalwith keywordnetwork_typeorlayout_type. Specialized function names were removed.Breaking: Layout value classes now use
extent,layout_object_id, andlayout_input_portnames.Breaking: Python keyword calls to
random_coordinatenow usecorner1andcorner2for the region bounds.Breaking:
mnt.pyfictionhas one submodule per C++ namespace, such asmnt.pyfiction.layoutsandmnt.pyfiction.sidb.simulation.engines; import each name from its submodule. The package root loads the submodules on first access and re-exports no bound names.Breaking: Use clocking and obstruction methods directly on gate-level layouts.
obstructionsholds additional path-search constraints.qca_layoutandinml_layoutexposeget_clock_zoneand tile-size accessors, and theirget_clock_numberlooks up the tile that contains the cell.Breaking: Cell types are flat enums:
qca_cell_type,qca_cell_mode,mol_qca_cell_type, andinml_magnet_type.mol_qca_layouttakes no clocking scheme, andwrite_mol_qca_layout_svgtakeswrite_mol_qca_layout_svg_params. Cell layouts supportcopy.copyand==.Breaking: The Python class
sidb_layoutnames the lattice-basedsidb::layoutBreaking:
critical_temperature_stats.is_ground_state_transparentis renamedenergy_between_ground_state_and_first_erroneous, the member it always exposedBreaking:
shifted_cartesian_layout,hexagonal_layout, and their gate layouts take alayouts.arrangementas first argument. One class per family replaces the per-arrangement classes, andexactandorthogonalparameters exposelayout_arrangement.Breaking:
offset_coordinatebecomescoordinate, andoffset_areabecomesarea, inmnt.pyfiction.layouts.cube_coordinate,cube_area,cube_volume, and theint_reprconstructor are gone.Breaking:
coordinate()denotes the origin, and coordinates accept the full signed 32-bit range. Layout extents useextent(width, height, layers)counts. Missing neighbors and empty bounds returnNone;is_valid()and coordinate sentinels are gone.
Removed¶
Build system:
Breaking:
FICTION_CLI,FICTION_ABC,ABC_ROOT, thedeploypreset, and thealicedependency are gone with the C++ command-line interface.Breaking:
FICTION_PROGRESS_BARSand mockturtle’s progress bars onstd::cout; theon_progresscallbacks replace them.
CLI:
Breaking: The C++ command-line interface and
shortcuts.fs. Use the Pythonfictionshell.akers, together withmiginvoptandmiginvprop. The truth table store now feeds the gate-based SiDB simulations,temp -gandopdom, alone.The alice built-ins
alias,set,!<shell command>,-e/--echo,-n/--counter, andhelp --docs.
Algorithms:
Breaking:
reserve_input_nodesis gone. Place each primary input withplaceorcreate_piwhen its coordinate is known.
Code quality:
Breaking: Removed
utils/stl/execution_utils.hppand itsFICTION_EXECUTION_POLICY_*macros.
Data structures:
Breaking: Removed layout
volume()andvolume_of. Usearea() * layers()to count coordinates.Breaking: Layouts now reject more than two layers. Use one ground layer and an optional crossing layer; empty layouts remain supported.
Breaking: The traits
is_clocked_layout_v,has_synchronization_elements_v,is_tile_based_layout_v, and the capability traits that every gate-level layout satisfies: the clocked-zone traitshas_is_incoming_clocked_v,has_is_outgoing_clocked_v,has_foreach_incoming_clocked_zone_v, andhas_foreach_outgoing_clocked_zone_v;has_is_obstructed_coordinate_vandhas_is_obstructed_connection_v;has_foreach_tile_v,has_foreach_adjacent_tile_v,has_foreach_adjacent_opposite_tiles_v,has_is_gate_tile_v,has_is_wire_tile_v,has_is_empty_tile_v,has_is_empty_cell_v,has_foreach_cell_v, andhas_is_empty_v. Use concrete gate-level layout arguments oris_cell_grid_v. The unusedis_offset_coord_vandhas_offset_coord_vare gone as well.Breaking: The alias
wiring_reduction_layout_type;create_wiring_reduction_layoutreturns awiring_reduction_layout.Breaking:
cell_level_layout; the technology tagsqca_technology,mol_qca_technology,inml_technology, andsidb_technologywith their predicates andcell_markenums; the traitstechnology,has_*_technology_v,is_cell_level_layout_v, andhas_post_layout_optimization_v; the aliasesqca_cell_clk_lyt,mol_qca_cell_clk_lyt,inml_cell_clk_lyt,sidb_cell_clk_lyt,sidb_cell_clk_lyt_cube, andcell_layout_t;tech_impl_name,tech_cell_name, andto_sidb_layout. Use the technology layouts andis_cell_grid_v.Breaking: The header
sidb/technology.hpp.sidb::dot_tagis defined insidb/layout.hpp, like the cell types of the other technologies.
Dependencies:
Removed the optional TBB dependency.
Documentation:
Removed the bundled overview paper and poster PDFs and their documentation links.
I/O:
Breaking: Removed FQCA and QCA-STACK readers, writers, CLI commands, Python exports, and stacked QCA layout aliases.
Python bindings:
Breaking: Removed the
volumefunction and layout methods. Usearea() * layers()to count coordinates.Breaking: Removed
stacked_cartesian_layout. Usecartesian_layoutwith at most two layers.The
reportmethods of the statistics classes that took a C++ output stream, which no Python call could satisfy;repr()returns the same text.Breaking: The classes
clocked_cartesian_layout,clocked_shifted_cartesian_layout,clocked_hexagonal_layout, their row and column variants,clocked_stacked_cartesian_layout, andcartesian_obstruction_layout,shifted_cartesian_obstruction_layout, andhexagonal_obstruction_layout. Use the*_gate_layoutclasses.qca_layout,mol_qca_layout, andinml_layoutno longer provideis_incoming_clockedandis_outgoing_clocked.Breaking: The classes
qca_technology,mol_qca_technology, andinml_technology. Cell layouts no longer provideclone, obstruction methods, clocked-neighborhood queries,get_cells_by_type, andnum_cells_of_given_type;mol_qca_layouthas no clocking and no cell modes.
Breaking: The template SiDB stack. Gone are
sidb::surfaces::lattice,defect_surface,charge_distribution_surface, and the lattice orientation tags;model/nm_position.hppandmodel/nm_distance.hpp(uselattice::nm_positionandlattice::nm_distance); the SiQAD coordinatelayouts::coords::siqadwithfrom_siqad/to_siqad(an SQD file’s(n, m, l)triple is alattice_site); the type aliasessidb_cell_clk_lyt_siqad,sidb_100_*,sidb_111_*,cds_*, andsidb_defect_*; the traitsis_siqad_coord_v,has_siqad_coord_v,is_charge_distribution_surface_v,is_sidb_lattice*_v,is_sidb_defect_surface_v,has_*_sidb_defect_v, andhas_*_charge_state_v;convert_layout_to_siqad_coordinates,convert_layout_to_fiction_coordinates, andall_coordinates_in_spanned_area(usesidb::sites_in_area); the SiDB branches ofbounding_boxandprint_layout; everytemplate <typename Lyt>overload of the SiDB simulation, analysis, generator, and I/O functions together withlegacy_result,legacy_bdl_wire, andlegacy_bdl_input_iteratorBreaking:
layouts::are_cell_layouts_identical,layouts::cell_layout_digest, andutils::stl::hash_combine_unordered, which existed only to deduplicate randomly generated SiDB cell-level layouts.generate_multiple_random_layoutsdeduplicatessidb::layoutvalues directlyBreaking:
layouts::coords::to_cube, the offset-to-cube coordinate conversion, which lost its last caller with the SiQAD coordinate typeBreaking:
sidb::to_cell_level_layout,sidb::to_cell, andsidb::to_cube. Physical design converts in one direction only; useto_lattice_siteBreaking: The tuple interface of
sidb::simulation::logic::parameter_point(get<I>,std::tuple_size,std::tuple_element). It was fixed at two dimensions and would have bound only two of three coordinates in a 3D sweep; useget_parameters()The unused pointer aliases
sidb_cell_clk_lyt_ptrandsidb_cell_clk_lyt_cube_ptrBreaking: The SQD writer takes an
sidb::layoutand no longer accepts QCA layouts, which it wrote as four dangling bonds per cell. The CLI’ssqdcommand also takes ansidb::layoutBreaking: In Python,
sidb_technologyand itscell_typealias forsidb_dot_tag; no Python API takes an SiDB cell type any more. Usesidb_dot_tagBreaking: In Python,
sidb_cell_level_layout,sidb_100_lattice,sidb_111_lattice,charge_distribution_surfaceand its_100/_111twins with thecharge_index_mode,dependent_cell_mode,energy_calculation,charge_distribution_history, andcharge_distribution_modeenums,sidb_simulation_result_100/_111,read_sqd_layout_100/_111,sidb_lattice_mode,sidb_nm_position,sidb_nm_distance_100/_111,siqad_coordinate,siqad_area,siqad_volume,to_siqad_coord,to_offset_coord,to_cube_coord, andconvert_layout_to_siqad_coordinates. Usesidb_layout,lattice,lattice_site,charge_distribution,sidb_simulation_result, andread_sqd_layout;areaaccepts ansidb_layout
Fixed¶
Algorithms:
random_coordinateuses a separate random generator for each thread.Dense distance maps now index every layer and reject coordinates outside the layout frame.
Physical-design border calculations and hexagonalization now preserve the maximum signed coordinate.
Squared Euclidean distance remains evaluable at compile time under C++20.
Squared Euclidean distance now preserves exact integer results and rejects distance-type overflow.
Coordinate normalization now shifts out-of-frame cells to the origin and preserves trailing frame padding.
Transactional writes now remove read-only temporary files after failed replacement.
Fanout substitution now separates repeated gate inputs into distinct routing branches. The algorithm rejects degrees below two and a zero threshold.
Fanout substitution now handles the full
uint32_trange for degree and threshold.Fanout substitution now preserves logic when the destination elides buffer nodes.
DOT drawing progress now reports frame areas beyond the unsigned 32-bit range.
Gate-type counting now compiles for native gate layouts with MSVC.
On-the-fly SiDB circuit design now rejects unsupported gate types before starting gate design.
Random-coordinate sampling now uses independent inclusive bounds for each axis.
Routing conflict graphs now detect overlaps after every path mutation and propagate allocation failures.
Color routing now supports disjoint paths from one source to distinct inputs of the same gate.
Exact placement and GOLD now widen area calculations before multiplication.
Layout optimization now accepts interior terminals and clears crossing obstructions when lowering wires.
Name restoration now preserves unused inputs and gates that drive outputs.
Yen’s algorithm now returns no paths for a zero limit and preserves valid alternatives at each spur node.
Path enumeration now reaches occupied crossing-layer targets under the same constraints as A*.
Critical-path analysis now handles long routed paths without overflowing the native stack.
network_balancingaccepts networks without primary outputs.goldcounts expansions only when a search-space graph expands.Progress reporters now flush each pass’s final count before a reset.
Operational-domain sampling now reports worker activity when it runs on the calling thread.
Contour tracing distributes simulation locks across regular parameter grids.
SiDB circuit-design exceptions now copy bounded message views without reading past them.
Defect-aware circuit design propagates invalid gate-design parameters.
Operational-domain analysis now propagates allocation failures, including failures in flood-fill workers.
Defect-influence analysis now propagates worker exceptions to the caller.
Canvas filtering now rejects SiDBs missing from the simulation state’s layout.
Ground State Space reports multiset limits using the potential landscape’s charge base.
Multi-threaded
exactsynchronizes worker contexts and measures one shared timeout budget.SiDB simulation engine lookup now handles non-ASCII input without undefined behavior.
GOLD now applies each invocation’s seed and PI-spacing limit independently
Operational checks and gate pruning now reject mismatched input counts; band-bending resilience rejects unusable inputs.
Gate design now propagates worker exceptions to the caller and sets simulation parameters before launching workers.
SiDB simulation, logic matching, and energy labeling now propagate errors from checked charge and potential operations.
Time-to-solution now counts failed QuickSim attempts and their elapsed runtime, and handles empty samples.
ClusterComplete now assigns distinct queue indices to workers without initial work.
Simulation comparison and output now validate distribution sites. Ground State Space uses the landscape’s physical parameters.
Parallel SiDB consumers now propagate worker errors and reject QuickSim with charged defects.
Concurrent operational-domain and defect-influence searches now use independent random number generators.
Binomial coefficients avoid intermediate overflow and saturate at the
uint64_tlimitDisplacement analysis retains layout names and stationary defects
Defect influence compares complete ground-state charge vectors
SiDB parameter sweeps now reject non-finite ranges, invalid steps, and unrepresentable point counts. Operational-domain ratios also reject malformed seeds and fewer than two sweep dimensions.
Population-stability analysis now distinguishes complete charge distributions beyond the charge-index range.
Gate design enumerates, counts, and randomly samples only empty, defect-free canvas sites.
Combination enumeration throws
std::length_errorwhen its result cannot fit in a vector.convert_networkkeeps the inverters of a technology network when the target network type has nocreate_node; before, an AIG, XAG, or MIG converted from one lost them
Build system:
Rebuild Python bindings when uncommitted C++ binding sources change.
Keep tinyxml2 static across build reconfiguration so Python imports find all libraries.
ClangCL test builds skip precompiled headers to avoid corrupted exception copies.
QuickSim and ClusterComplete compile with Apple libc++ without experimental library features.
CMake accepts Z3 installations inside the source checkout, including Python virtual environments.
pyfictionbuilt against such a Z3 findslibz3at import time, so Read the Docs renders the Python API again.On-the-fly SiDB circuit design from gate-level layouts compiles without Z3.
CMake now verifies the
fmt12.2.0 archive with its matching SHA-256 checksum.Installed CMake packages include the
fmtheaders and their header-only compile definition.CMake installation includes ALGLIB’s generated version metadata.
CLI:
Parallel commands now use one aggregate progress row;
exactretains candidate dimensions at count checkpoints.Store listings and command summaries skip layout timing analysis;
ps -gcomputes it on request.Store and statistics displays use readable topology names.
TEC readers preserve output drivers instead of inserting output buffers.
Large
orthoresults now finish their statistics calculation while the progress display refreshes.Progress displays now serialize concurrent reports, clear totals for restarted tasks, and respect nested quiet commands.
opdomlogs its default algorithm as grid search; JSON logs encode non-finite statistics asnull.showandwritereject unsupported drawing options before writing output. Invalid mapping and numeric inputs preserve stored elements.Hex truth tables retain every bit. Area statistics use each technology’s cell dimensions and the SiDB lattice’s physical extent.
Unreadable scripts report the cause and exit with status 2. Interrupted commands retain a log entry and leave the shell usable. Status text accounts for Unicode display widths.
Code quality:
find_first_two_ofnow returns the end iterator when either range has fewer than two elements.
Continuous integration:
Canceled CI runs now stop optional summary jobs.
Docstring generation now loads the libclang development symlink on Ubuntu 26.04.
Ubuntu 26.04 jobs now use matching compiler-cache keys and coverage labels.
Coverage collection, extraction, and listing now tolerate GCC 13 function-range and hit-count inconsistencies reported by lcov 2.4.
Allocation-failure layout tests now link independently of the optional jemalloc allocator.
Change detection now allows five minutes for runner setup and file comparisons.
Data structures:
Gate-level layout moves now propagate geometry failures and preserve owned state. Custom geometry controls its assignment failure guarantee.
Clocking-state moves now avoid synchronization-map allocations on Windows.
Gate-layout name-presence queries now report empty names consistently after failed assignment.
Gate-layout name-presence queries now avoid copying names and allocating memory.
Cartesian, hexagonal, and gate-layout clocked neighbor visitors now invoke temporary and move-only callbacks as lvalues.
Gate-layout crossings now exclude primary input and output terminals.
Default OPEN clocking and gate-layout moves now allocate no storage.
Gate layouts maintain crossing counts during edits for constant-time queries.
Gate-layout wire predicates, counts, and iteration now exclude terminals. Identity-function queries retain them.
Python gate-layout constructors now raise
ValueErrorfor unknown clocking schemes.Coordinate construction and gate-to-cell conversion now reject narrowing overflow.
Cell clock zones now use floor division for negative coordinates.
Cell layouts reject zero clock-zone dimensions in constructors and setters.
Gate layouts constructed from coordinate layouts initialize their logic functions.
Clocked degree counts each eligible neighbor once, including neighbors enabled by synchronization.
SiDB result equivalence now compares complete charge distributions beyond the 64-bit charge-index range.
Gate- and cell-level layout clones preserve clock overrides without sharing later clock-number edits.
clocking::get_schemenow keeps the phase count of2DDWAVEHEX3on non-hexagonal layouts.SiDB simulation APIs now reject invalid indices, mismatched distribution sites, and invalid potential-vector sizes. Potential landscapes validate basis indices even for isolated SiDBs and defects.
SiDB cell conversion now rejects coordinates outside the target coordinate range.
The BDL input iterator now rejects layouts with more than 63 input pairs instead of overflowing its pattern counter.
Lattice sites now reject invalid basis indices in construction, geometry queries, and cube conversion.
SiDB row conversion and area iteration now handle coordinate limits without signed overflow; defect influence clips to representable sites, and cube conversion rejects rows outside its range
Lattice-site arithmetic now rejects coordinate overflow; dot insertion preserves the layout on allocation failure, and moving a defect from an empty site leaves the target unchanged
Moving a defect now preserves its target when the site arguments refer to stored defects.
Corrected the SiDB pointer aliases in
types.hppand checked their target types.SiDB-to-cell-level conversion preserves bounds from converted cells.
Documentation:
Physical-design statistics now document that wire counts exclude primary inputs and outputs.
Gate-level layout editing examples now pass the object ID returned by
create_buf.API documentation now resolves current declarations without duplicate enum entries.
The documentation session builds Python bindings with the installed Z3 dependency.
API links now reveal their language tab. Fixed dark code contrast, source links, and CLI navigation.
Nanobind API documentation now keeps its custom class renderer with Sphinx’s deferred registration. Removed duplicate bounding-box entries and corrected the critical-temperature overload reference.
Restored Python API entries and method signatures, and formatted generated docstrings.
SiDB reader documentation now lists every overload without ambiguous signatures.
Experiments:
Layout experiments now reject failed GENLIB and Verilog reads in Release builds.
Clock-number assignment and color-routing experiments copy clocking names into string columns.
Layout experiments preserve their wire-count columns with physical wire counts that exclude terminals.
SiDB circuit experiments now reject missing placement and equivalence results before reporting.
SiDB sweep initializers now name their fields, and pruning helpers propagate allocation failures. Experiment parameters, output columns, and calculations remain unchanged.
The Bestagon experiment converts placed SiDB cells to
sidb::layoutbefore SQD export and reports input parsing or equivalence-checking failures.The Bestagon critical-temperature domain experiment removes a redundant calculation while preserving its kink-rejection policy and reported temperatures.
The library walkthrough writes QCA layouts only in QCADesigner and SVG formats.
Gate libraries:
On-the-fly SiDB gate mapping now rejects column arrangements instead of dropping north/south wires.
QCA ONE and ToPoliNano now reject terminal fanouts instead of losing their I/O markers. Connect terminals to separate fanout wires for mapping.
Gate-library application assigns the synchronization delay of each tile to its clock zone.
ToPoliNano wire optimization now handles two-cell segments and checks every interior cell for obstructions.
I/O:
BLIF network readers now accept empty and whitespace-only lines without aborting.
QCC and QLL writers now propagate allocation failures while sorting terminal cells.
Gate-layout DOT output now preserves signed coordinate IDs and quoted terminal names.
FGL round trips now preserve whitespace-only layout and port names.
FGL version 2 now preserves manual obstructions and XML whitespace in names. Readers reject unfinished or physically invalid layouts; writers reject illegal XML control characters before changing output.
FGL gate IDs now reject malformed, negative, and out-of-range integers with a parsing error.
QCA SVG output now includes synchronized cells in tiled layouts and wraps latch clock labels within the clock cycle.
QCA SVG output now preserves synchronized cell positions, draws mixed tiles once, and includes partial boundary tiles.
FGL round trips now preserve three-phase clocking across all supported topologies.
read_fgl_layoutnow restores irregular clock numbers on crossing layers.read_fgl_layoutnow reads BANCS layouts whose clocking scheme is namedBANCS3.Network conversion preserves arbitrary gate functions and unused inputs; file bridges retain interface names and output order.
Transactional writers now report filesystem setup and replacement errors as stream failures. They preserve output permissions and symbolic links to existing files, and reject dangling links and non-regular output files.
Network DOT export uses transactional replacement, including intermediate drawings produced by
show.Layout readers reject coordinate overflow; writers replace files only after successful serialization.
QCA SVG output now uses valid text colors in simple tile mode.
SQD readers now reject fractional coordinates and trailing text in numeric attributes.
SQD input now preserves explicit custom lattice geometry, including lattice names and both basis sites
SQD cell-level output now propagates exceptions from cell and defect formatting
write_sidb_layout_svgnow propagates allocation errors when setting colors and formatting lattice pointsSVG and text output now reject padding outside the lattice-site coordinate range
SQD readers now reject empty defect labels, invalid numeric values, and invalid Coulomb parameters. SQD output escapes lattice names, and defect-matrix readers report oversized indices with the documented exception
Python bindings:
Cell-grid clocking names now remain valid when converted to Python strings.
Layout object IDs, input ports, and extents now compare unequal to unrelated Python values. Mutable extents are unhashable.
layout_input_portnow hashes by object identity and input index for set and dictionary keys.Gate-layout editing methods expose their API contracts in Python docstrings.
Python port collections now reuse input counts and reserve sink storage.
Progress parameters now release unreachable callback cycles owned by parameter values. Borrowed nested parameters preserve callbacks in live owners.
copy.copyandcopy.deepcopynow preserve gate objects and independently copy layout metadata. Layout simulation extracts ordered logic and rejects incomplete output cones.Linux extensions hide C++ implementation symbols while preserving nanobind’s shared exception ABI.
physically_valid_parametersandoperational_domain_rationow release the GIL so worker progress callbacks can execute without deadlocking.Added ordered
simulate_outputs, exposed mapper statistics, and validated truth-table sizes and expressions before native operations. Gate-library errors identify unsupported gates and their coordinates.Exposed
missing_required_gates_exceptionso callers can catch technology-mapping failures.design_sidb_gates_stats.__repr__now converts the statistics string to Python.Exposed the defect-matrix reader exceptions.
parameter_point.__getitem__raisesIndexErrorfor an out-of-range index instead of reading past the parameter vectorThe Python bindings compile when Z3 support is disabled
write_sqd_layoutowns its Python filename during export on Windowsis_clocking_scheme,set_name, andget_nameaccept Python strings, and thetime_totalandruntimemembers of the statistics classes are readable; the casters were missingwrite_dot_layoutdraws shifted-Cartesian layouts instead of writing nothingThe readers raise
RuntimeErrorwith the parser’s diagnostics instead of printing themenergy_stateandsidb_lattice_modeare importablesidb_defectaccepts a call withoutelectric_charge, whose default was a float for an integer parametercreate_from_binary_stringandcreate_from_hex_stringraiseValueErrorfor a character outside their alphabet;kittyread such a character as a bit pattern and built a wrong truth tablewrite_verilog,write_blif, andwrite_aigerraiseRuntimeErrorwhen the file cannot be opened or written; they returned as if they had written it
Tooling:
Git checkouts and formatting hooks enforce LF without rewriting license-only files to CRLF on Windows.
v0.8.0 - 2026-09-02¶
Fiction when we’re not together; Mistaken for a vision, something of my own creation
—The xx
Added¶
Algorithms:
Added
missing_required_gates_exception, whichtechnology_mappingthrows when the gate library lacks a gate the base network type requiresAdded an
is_operationaloverload that takes one layout per input pattern, andgenerate_bdl_input_pattern_layoutsto generate themAdded a
critical_temperature_gate_basedoverload that takes the pre-generated input pattern layouts and BDL detection results instead of deriving them from the layoutAdded
number_of_threadstooperational_domain_params,defect_influence_params, anddisplacement_robustness_domain_params. It defaults to the hardware concurrency, so behavior is unchanged; pinning it makes runtimes reproducibleoperational_domain_contour_tracingnow collects a boundary surface for three or more sweep dimensions, andoperational_domain_flood_fillno longer caps at threeAdded
cell_layout_digest, which hashes a cell-level layout in agreement withare_cell_layouts_identicalso that callers can group candidates before comparing them exactly
Build system:
Added
-DFICTION_ENABLE_TIME_TRACE=ONto emit Clang-ftime-tracecompilation profiles
CLI:
Added
opdom --sketch/-s, which determines the operational status by filtering instead of by physical simulation. It implies kink rejection, since the filtering steps are only defined there
Continuous integration:
The 🐍 Packaging jobs now run
check-sdist --inject-junk, which fails if the source distribution drops a tracked source or ships an untracked oneAdded a 🐍 Lint job that runs the
mypyhook, which pre-commit.ci no longer runsAdded a 🐍 Test job that runs
nox -s testsandnox -s minimumson Linux, macOS, and Windows against a source build
Data structures:
Added a
std::hashspecialization forfiction::sidb_defectAdded
hash_combine_unordered, which folds hash values commutatively and therefore suits containers whose iteration order is not canonical
Experiments:
Added
operational_domain_3d_bestagon_grid_vs_sketch, which compares grid search against the operational domain sketch over a three-dimensional parameter space
Gate libraries:
Added
sim7_mol_libraryandmol_qca_technology, which apply the SIM(7)-MolPDK molecular QCA standard-cell library to gate-level layouts, with QLL/SVG export and Python bindings
Python bindings:
Exposed
generate_bdl_input_pattern_layoutsand the newis_operationalandcritical_temperature_gate_basedoverloadsExposed
number_of_threadsonoperational_domain_paramsanddisplacement_robustness_domain_paramsExposed
mol_qca_technology,mol_qca_layout,write_mol_qca_layout_svg, andapply_sim7_mol_libraryExposed
state_type, which makescalculate_energy_and_state_type_with_kinks_accepted/_rejectedandoccupation_probability_gate_basedcallable from Python
Tooling:
Added the
license-toolsprek hook, which puts an MIT copyright header on every Python file and rewrites any that departs from the canonical textAdded the
minimumsnox session, which runs the Python test suite on Python 3.10 against the lowest declared direct dependencies instead of the newest compatible ones
Changed¶
Algorithms:
technology_mappingand themapcommand now default tomockturtle::emapinstead ofmockturtle::mapBreaking:
technology_mapping_params::mapper_paramsandtechnology_mapping_stats::mapper_statsare nowmockturtle::emap_paramsandmockturtle::emap_statsBreaking: the
mapcommand now warns when remapping an already-mapped network and reports mapping errors instead of storing a failed mappingoperational_domainandcritical_temperature_domainnow generate the input pattern layouts once instead of once per sample point, which makes SiQAD grid search about 10% fasterParallelized
operational_domain_flood_fillover a pool of worker threads. The result is independent of exploration order and therefore unchangedcritical_temperature_domainnow reuses the operational domain’s input pattern layouts and BDL detection results instead of re-deriving them for every parameter pointis_operationalnow builds the canvas charge distribution surface once per call instead of once per canvas enumerationbdl_input_iteratornow determines the BDL dot distances that decide the input assignment once in its constructor instead of on every increment; they cannot change over its lifetimeis_operational_implno longer detects the output BDL pairs twice underTOLERATE_KINKSquicksimandmulti_simulated_annealingno longer pass a parallel execution policy tostd::findandstd::min_element, whose ranges are too small to pay for the dispatchgenerate_multiple_random_sidb_layoutsnow rejects duplicate candidates by digest lookup instead of pairwise comparison. Collecting 4000 layouts of 10 SiDBs takes about 7 ms instead of 160 ms
Build system:
Bumped the required C++ standard from C++17 to C++20
Fetch dependencies as release archives instead of git clones, which cuts
tests-slim’s_depsfrom 504 MB to 262 MB.mockturtlestays a clone because it uses a submoduleThe
ci-debug,dev, andtests-slimpresets now enableFICTION_LIGHTWEIGHT_DEBUG_BUILDS, which cuts Debug compile time and memory substantiallyFICTION_ENABLE_PCHnow covers the test suite as well as the CLI, and is on in thedevandtests-slimpresetsThe CI presets no longer build the experiments; the 🧪 Experiments job compiles them instead
vcs-versioningreplacessetuptools-scmfor deriving the version from git, which dropssetuptoolsfrom the build. Building from source now requiresscikit-build-core1.0The CMake policy range now ends at 4.4
Code quality:
Breaking:
qca_technology,inml_technology, andsidb_technologynow declarecell_typeas a scopedenum class. Qualify the enumerators, e.g.,sidb_technology::cell_type::INPUTinstead ofsidb_technology::INPUT, andstatic_castwherever a cell type was implicitly converted.pyfictionis unaffectedPruned the include graph of the most widely included headers, keeping
nlohmann/json.hpp,fmt, and the vendoredcombinations.hoff the path thattraits.hpppulls inBreaking: moved
determine_all_combinations_of_distributing_k_entities_on_n_positionsfromfiction/utils/math_utils.hppto the newfiction/utils/combination_utils.hpp. Include the latter to keep using itorthogonalandgraph_oriented_layout_designno longer template their implementation on the specification network type. Their public entry points are unchangedModernized the entire code base for C++20, adopting
std::rangesalgorithms, concepts, defaulted comparison operators, and designated initializers throughoutReplaced unchecked
operator[]with bounds-checkedat()in the operational domain moduleThe type checks on the path-finding, operational domain, and
hexagonal_layoutentry points are nowrequiresclauses, so an unsatisfied one is reported at the call sitehexagonal_layoutnow rejects an invalidHexagonalCoordinateSystemwhere the type is named rather than where it is constructedexactno longer polls its worker futures every 10 ms while solving asynchronouslyexactnow surfaces a failure in one of its asynchronous workers instead of reporting it as “no layout found”Cleared the pre-existing Clang-Tidy findings in
exact.hppMigrated the
pyfictiontest suite fromunittestto pytest and enabled ruff’sPT,PTH, andE501rule sets. The suite now fails on warningsEvery Python file now carries
from __future__ import annotations, which ruff’sfuture-annotationssetting assumesRetired ruff’s TODO ignore list. Every entry that remains states a decision in a comment, including
CPY001, which stays off because thelicense-toolshook enforces the headers insteadmypynow checks every Python file the repository owns, where it previously checked only the bindings andnoxfile.py
Continuous integration:
The docstring generator now parses with a pinned libclang,
-std=c++20, and a configured build’s include paths and defines, which drops parse errors from about 180 to zeroThe twelve workflows are consolidated into
ci.ymlandcd.ymlover a set of callable workflows. Change detection decides what runs, and a single🚦 Checkjob aggregates the outcomeAction required: the workflows that produced the former status contexts are gone, so an administrator must repoint branch protection at
🚦 Checktogether with🔍 Change / 🕵️ Check,pre-commit.ci - pr, anddocs/readthedocs.org:fiction. Never require an individual matrix leg;🚦 Checkcovers them and survives a matrix changeThe
ci-*presets now reuse the precompiled header that thedevpreset already used, which the 120 single-source test executables each paid for separately beforeThe build jobs no longer cap themselves at two hours. Three of them had started failing on that cap rather than on a regression; the short jobs keep a ceiling
Publishing moved out of CI: only
cd.yml, which runs on a published release, holds the credentials for PyPI, Docker Hub, and ghcr.ioThe wheel jobs now run whenever anything the extension is compiled from changes, not only when the packaging metadata does
Updated the Ubuntu compiler matrix for C++20: dropped
g++-10,clang++-14, andclang++-15, and addedclang++-19andclang++-20Halved the OS matrices;
docs/getting_started.rstrecords the combinations we verifyThe wheel builds now run the
pyfictiontest suite against the repaired wheel instead of only smoke-testing the importpreknow validates.codecov.ymlagainst its schemaThe
prekhooks now carry explicit priorities, which run the read-only checks concurrently and cut a warmprek run -aby about 18%The docstring generator is now a
🐍 Docstringscheck that uploads the regenerated header as an artifact and fails when the committed one differs, instead of committing it itselfThe docstring generator parses the headers in sorted order, so the numbering of repeated symbol names no longer depends on the filesystem’s order
Publishing to PyPI runs in a
pypideployment environment, which is where a required reviewer or a wait timer on releases would goThe 🐧 Test jobs build with Z3 on
ubuntu-24.04-armas well.cda-tum/setup-z3does serve anarm64archive, so the-DFICTION_Z3=OFFoverride those jobs carried is gone
Dependencies:
Breaking: raised the declared
z3-solverfloor from 4.8.0 to 4.10.2, the first release with a wheel for every supported platform. Below it, macOS and Linux aarch64 fall back to a source build that modern toolchains rejectBumped the Z3 version pinned in CI and in the Docker image from 4.13.4 to 4.14.1. Newer releases require glibc 2.38, which the
ubuntu-22.04job does not provideThe Linux wheels pin
z3-solverinstead of flooring it, and theaarch64image moves tomanylinux_2_34. The publishedaarch64wheel therefore requires glibc 2.34
Documentation:
The README’s six per-workflow status badges are replaced by one
CIand oneCDbadge, matching the two workflows that remaindocs/contributing.rstdescribes the checks a pull request now reports and what🚦 Checkmeans
Experiments:
Modernized
generate_defective_surface.py. Apart from the out-of-bounds fix below, the surface it generates is unchangedgenerate_defective_surface.pyis executable and declares its dependencies in a PEP 723 block, so running it needs nothing installed firstgenerate_defective_surface.pynow writes the surface it generates, which it previously discarded, and takes the parameters it used to hard-code as command-line arguments
Python bindings:
Breaking: generated docstring symbols are now named
mkd_doc_*instead of the reserved__doc_*.DOC(...)is unchanged; a hand-written docstring that defines such a symbol must be renamedmnt.pyfictionnow advertises developers and information technology as intended audiences and physics as a topic on PyPIAdopted nanobind’s split mode, so one
abi3wheel per platform now covers Python 3.10 and up instead of four.mnt.pyfictiongains ananobind-backendruntime dependencyThe
pyfictionextension no longer re-exports the internals of thetinyxml2,graph-coloring, and ALGLIB archives it embeds, and collects unreferenced sections again. It ships 9.1 MB instead of 12.0 MB
Removed¶
Algorithms:
Removed Mugen support: the vendored Glucose SAT solver (
vendors/mugen/), theonepassCLI command, andone_pass_synthesis(). Useexact_physical_design()insteadRemoved
jump_point_search(). Usea_star()insteadRemoved
qca_energy_dissipation()and theenergyCLI command
Build system:
Removed
FICTION_ENABLE_UNITY_BUILD, which set a non-propagating property on anINTERFACEtarget and therefore never did anything
CLI:
Removed the
--logic_sharingflag frommap, whichmockturtle::emapdoes not support
Continuous integration:
Removed the 🐍 CI workflow; the wheel builds now cover the same ground.
nox -s testsremains the local entry point
Data structures:
Removed
range_t(fiction/utils/range.hpp);coordinates()andground_coordinates()now return astd::ranges::subrange, with no change in usage
Python bindings:
Removed the free-threaded (
cp314t) wheel; free-threaded interpreters stay unsupported until Python 3.15 gives them theabi3tstable ABI (PEP 803)Removed the
DISABLE_GILscikit-build-core override for free-threaded Windows builds. No CMake code ever read the define, and split mode rejects free-threaded interpreters outright
Fixed¶
Algorithms:
Requesting the operational domain sketch (
FILTER_ONLY) withoutREJECT_KINKSor on a layout withoutLOGICcells now throws instead of silently simulating the whole parameter spaceFixed a division by zero in the parallel operational domain, defect influence, and displacement robustness helpers, which divided by a worker count of zero when there is no work at all.
operational_domain_random_samplingwithsamples = 0reached itFixed
is_operationalreporting every layout operational without checking it whenFILTER_ONLYwas combined withTOLERATE_KINKS. All entry points now decide canvas filtering in one placeFixed the enclosure inference of
operational_domain_contour_tracing, which an inverted guard had left permanently inactive, so its flood fill could suppress the tracing of other operational islandsFixed an off-by-one in
operational_domain_contour_tracing’s boundary search that skipped the first sweep dimension’s lowest step index, marking every reachable point operational without simulationFixed a data race on
quicksim’s timeout flag, which every worker thread wrote as a plainbool. It is nowstd::atomic_bool
Build system:
.gitignorenow covers the build, virtual environment, and editor droppings that a localuv build --sdistwould otherwise ship into the source distributionFixed the source distribution shipping none of the C++ sources it needs to build, which made
pip install mnt.pyfictionfail wherever no matching wheel exists
CLI:
Updated the
qllcommand’s description to mention molQCA layouts and SCERPA simulations
Code quality:
Fixed the execution-policy guard in
execution_utils.hpp, which read the feature-test macros before including<version>and disabled parallel STL algorithms on every Clang buildFixed several
fmtcompile-time format-string misuses surfaced by the C++20 bumpFixed
std::string_view::data()calls that assumed null termination, whichstd::string_viewdoes not guaranteeFixed plain
charvalues being passed to::toupper,::tolower,::isdigit, and::isxdigit, which is undefined behavior on platforms with a signedcharFixed a signed-integer overflow in
to_siqad_coordfor the minimum representableyvalue
Continuous integration:
Renamed
.readthedocs.ymlto.readthedocs.yaml, the name the preview guard and thecheck-readthedocshook expect, so editing the file rebuilds the documentation previewPublishing the Docker image no longer clears its Docker Hub short description, which it derived from a field that never held one
Fixed the Renovate
github-tagscustom managers to referenceowner/repositorypackage names instead of full GitHub URLs, which the datasource requires to resolve tagsFixed patch-level CMake
GIT_TAGbumps being eligible for Renovate’s automergePinned the vendored
alicedependency’sGIT_TAGto a fixed commit carrying a C++20 fix, instead of floating onmasterFixed ccache being skipped on every
ubuntu-24.04-armjob, leaving the slowest runners coldFixed the CodeQL ccache key interpolating an undefined
matrix.osThe CodeQL jobs now declare their build mode:
manualfor C++, whose database comes from the CMake build, andnonefor Python, which has no buildFixed the packaging path filter still pointing at the removed
bindings/pyfiction/**
Documentation:
Fixed the
doc_overview_tabledirective renderingNonein the description column for a function without a Doxygen brief description
Experiments:
Breaking: fixed the always-false out-of-bounds guard in
generate_defective_surface.pythat let a defect be placed clipped at the surface edge. The generated surface changesgenerate_defective_surface.pynow rejects a coverage outside[0.0, 1.0]and a non-positive surface dimension, where it used to write an empty surface and report success
I/O:
Fixed
write_qca_layout_svg’s simple-mode output emitting malformedfill:##000000for constant-0/1 QCA cells instead offill:#000000
Python bindings:
Fixed the
sidb_defectoperator!=binding, which referenced a docstring symbol that is no longer emitted now that the operator is compiler-synthesizedFixed nine
DOC(...)references that named symbols the broken parse had invented; the*_statsruntime members are now documented under their real namesFixed
bdl_input_iterator.pynever being collected, as its name did not match pytest’spython_filespattern, so its five tests had never run
v0.7.0 - 2026-07-31¶
Cliché or not, “stranger than fiction” expresses exactly how I feel about the truth.
—Richard Dawkins
Added¶
Documentation:
Added
AGENTS.mdto guide AI agents in the repository
Build system:
Added
CMakePresets.jsonwith presets for common local development workflows (dev,dev-asan,dev-full,release,deploy,coverage) as well as CI-mirroring presets (ci-debug,ci-release,ci-codeql,ci-tidy) that let CI failures be reproduced locally with a singlecmake --preset <name>invocationAdded support for CMake version 4+
Tooling:
Added the following
pre-commithooks:check-vcs-permalinkscheck-symlinkscheck-jsoncmake-format-precommituv-pre-commit
Enabled auto-merging stable non-major dependency releases via Renovate
Continuous integration:
Added a 🌈 Zizmor workflow that statically analyzes the GitHub Actions workflows for security issues on every push, pull request, and merge group, and uploads findings to the code scanning API; fork pull requests print findings to the log instead, since their read-only token can’t upload to it
Changed¶
Build system:
Restructured the CLI command implementation to improve code organization, modularity, and compilation speed
Refactored the entire CMake build system to use
FetchContentfor dependency management instead of git submodulesMoved vendored libraries from
libs/tovendors/Improved build configuration and option handling for better modularity
Addressed several CMake and compiler warnings (including CMP0148 and Pybind11 compatibility) as well as CMake code smells
Streamlined package installation and discovery process
Continuous integration:
The 🐧/🍎/🪟 CI, ☂️ Coverage, and 📝 CodeQL workflows, the Clang-Tidy Review workflow, and the Docker build now configure via the new CMake presets instead of hand-rolled
-Dflag listsThe 🔖 Release Drafter workflow now runs on the smaller
ubuntu-slimrunner instead ofubuntu-latest, since it only calls the GitHub API and needs no compiler toolchainHardened every workflow against the findings from the new 🌈 Zizmor workflow: scoped
permissionsblocks to the minimum each job needs (instead of relying on the broad default), setpersist-credentials: falseon checkouts that don’t push, routed matrix/workspace values throughenvvars instead of interpolating them directly into shell commands, and disabled the PyPI packaging workflow’s build cache to close a cache-poisoning path into published artifacts
Python bindings:
Restructured the
pyfictionbindings to use multiple translation units (one.cppfile per binding) for better modularity and faster incremental compilation
Tooling:
Replaced
pre-commitwithprek, a faster Rust reimplementation that stays compatible withpre-commit.ci
Dependencies:
Updated all dependencies to their latest versions
Fixed¶
Code quality:
Addressed several
clang-tidywarnings throughout the code baseAddressed several CodeQL findings: a potential unsigned-subtraction underflow in a test assertion, an unnecessarily nested
switchover a single-valued enum, impreciseassertTrue(a == b)-style Python test assertions, a duplicateimport/from ... importof the same module, an unused local variable, and dead code
Continuous integration:
Fixed Renovate attempting to bump the
sphinxpin used for Python <3.11, which is unsupported by Sphinx 8.2+Excluded vendored third-party dependencies (fetched via CMake
FetchContent) and the purely stylisticcpp/poorly-documented-functionquery from CodeQL analysis, removing hundreds of alerts this project cannot act on
Documentation:
Fixed several stale
**Header:**references pointing at renamed header filesFixed an inconsistent
fiction::namespace omission in adoxygenfunctiondirectiveFixed a duplicated
doxygenstructdirective fordisplacement_robustness_domainFixed broken
:ref:links in the publications listAdded missing Python binding exports (
charge_distribution_history,sidb_charge_states_for_base_number) that were referenced by the documentation but not importable
Python bindings:
Added missing docstrings for numerous
pyfictionconstructors (e.g.,cartesian_gate_layout) that were previously undocumented despite an equivalent, documented constructor overload existingAdded missing docstrings for several dunder/operator methods (e.g.,
bdl_input_iterator_params,__repr__,__hash__,__getitem__) across the layout, network, and SiDB simulation bindings
v0.6.12 - 2025-10-29¶
Added¶
Algorithms:
Random fanout substitution strategy
Maximum-effort mode in
goldutilizing random fanout substitution strategies and random topological orderings to design high-quality layoutsFlag in
goldto enforce NOT gates to be routed non-bending onlyParameter in
goldto skip tiles when placing PIs, leading to higher success probabilities in discovering layoutsFlag in
goldto randomize the number of skipped tiles when placing PIsImproved performance of
hexagonalizationImproved performance of SiDB simulation algorithms through changes in the underlying data structures
Reimplementation of Graphviz’s “Mincross” algorithm
Breadth-first topological view
PRUNING_BASEDoption for SiDB gate design to speed up the design process by pruning non-operational layouts
Experiments:
Figures-of-Merit (FoM) SiDB layout analysis experiment script
QuickCell experiment script
Minimal SiDB gate design experiment script
Continuous integration:
Python 3.14 support
Documentation:
References to newly published papers
Changed¶
CLI:
areanow outputs the layout width and height in addition to the area
Continuous integration:
Switched to the
Ninjagenerator for Windows CI builds
Documentation:
Modernized README and Getting Started section of the documentation
Dependencies:
Updated all dependencies to their latest versions
Fixed¶
Data structures:
Fixed I/O cell handling in
cell_level_layout’sassign_cell_typemember functionFixed system energy calculation in
charge_distribution_surfacein corner casesAdded missing
clonemember functions to pyfiction’s SiDB lattices
Algorithms:
Fixed a corner case in
hexagonalizationwhen extending POs to the bottom borderFixed a bug in
post_layout_optimizationandwiring_reductionthat lead to POs not being placed at the borders and possibly dyingFixed
band_bending_resiliencecalculation of SiDB layouts for unspecified transition types
Experiments:
Experiment scripts requiring
ALGLIBnow prompt an error message instead of failing to compile when the library is not found
Continuous integration:
clang-tidyCI workflow no longer fails when run from forks
Code quality:
Addressed several
clang-tidywarnings throughout the code base
Removed¶
Continuous integration:
macOS 13 has been removed, along with support for the x86_64 (Intel) architecture
Dropped Windows 2019 and v142 support
Dropped Python 3.9 support due to its end-of-life status
v0.6.11 - 2025-04-23¶
Added¶
Algorithms:
Parameters to move inputs to top border or outputs to the bottom border after
hexagonalization
Experiments:
Added experiment for a comprehensive analysis of the critical temperature domain
Added total simulation runtime to physical simulation experiment
Python bindings:
Pythonic dictionary-like interface for
operational_domainandcritical_temperature_domain
Changed¶
Documentation:
Modernized the documentation builds by migrating the RTD build from
piptouv
Algorithms:
Refactored
QuickSimto remove magic number for upper limit calculationRefactored random layout design functions
Fixed¶
Fixed a bug in the z-dimension when determining the aspect ratio for cell-level layouts
Fixed an issue in the TTS calculation caused by the automatic base detection being activated
Fixed links in the README due to the migration of the
mqt-corerepository to a new namespaceExclude
ClusterCompletefrom simulation engine selection when ALGBLIB is disabledFixed inconsistencies and various bugs in SiDB simulation/analysis
Fixed LT, LE, GT, and LE gate handling in the gate-level-layout and the corresponding read and write functions
Fixed a bug in the crossing count calculation of gate-level layouts
Increased floating point precision to avoid undetected degeneracy in the physical simulation of SiDB layouts
v0.6.10 - 2025-02-21¶
Added¶
Algorithms:
Added parameters to extend the PIs to the first layout row or POs to the last layout row after
hexagonalization
Fixed¶
Fixed the Python bindings for the critical temperature domain simulation
v0.6.9 - 2025-02-12¶
Added¶
Algorithms:
Added
ClusterComplete, a novel exact physical simulator for SiDB layouts with substantially improved runtimes, allowing the simulation of multi-gate SiDB layoutsAdded temperature-aware operational domain simulation and restructured the function to simplify the integration of additional figures of merit in the future
Changed¶
Build and documentation:
Added optional usage of jemalloc to speed up certain parallelized applications
Fixed¶
Algorithms:
Fixed a bug in
apply_gate_librarythat resulted in incorrect cell-level layout sizing
Build and documentation:
Added a CMake file for detecting pre-installed jemalloc
Experiments:
Fixed a non-critical bug that occurred when ALGLIB was disabled
v0.6.8 - 2025-01-25¶
Added¶
Data structures:
virtual_pi_networkthat allows for the duplication of input signalsmutable_rank_viewthat allows for the reordering of nodesstatic_depth_viewthat disables depth recomputation
Algorithms:
Logic synthesis:
Equivalence checking for networks with virtual PIs
Clocking schemes:
SRS
Continuous integration:
Added Linux on ARM runners
Fixed¶
Continuous deployment:
Fixed a critical issue with wheel building and deployment to PyPI that caused some operating systems to not be served
Experiments:
Fixed outdated paths in the
QuickCellexperiment script
v0.6.7 - 2025-01-20¶
Added¶
Algorithms:
Simulation:
Implemented new algorithms utilizing grid search, random sampling, and contour tracing to determine defect clearance distances of SiDB layouts
Restructured defect influence simulation for enhanced usability
Integrated
QuickCell'spruning strategies to efficiently identify non-operational layouts
Experiments:
Added rectangular SiDB gate skeletons (16.896 nm x 16.896 nm) and a script for designing a corresponding library
Enhanced results tables in the
QuickCellexperiment script with information about how many layouts remain and are pruned at each pruning step
Continuous integration:
CLI:
Added an optional callback to ABC in fiction’s CLI
Changed¶
Continuous integration:
Updated the workflow to reduce runtime when building the wheels by excluding redundant combinations of OSs and Python versions
Fixed¶
Fixed a bug in the
showcommand of the CLI
Removed¶
Continuous integration:
Dropped Python 3.8 support due to its end-of-life status
Dropped Dependabot
v0.6.6 - 2024-11-26¶
Added¶
Algorithms:
Simulation:
Added option to determine if kinks induce layout to become non-operational
Kink control option for critical temperature simulation of SiDB layouts
Python bindings:
Support for Python 3.13 (including GIL-free multi-threading)
I/O:
SVG drawer for SiDB layouts
Experiments:
Ship the SiQAD and Bestagon gate libraries as SQD files
Documentation:
Added wiring reduction paper to publication list
Added Willem Lambooy to the authors list
Continuous integration:
Several improvements to the Docker workflow including publishing images to DockerHub
Changed¶
Continuous integration:
Exclude long-running tests from the Debug CI workflows
Fixed¶
Fixed a bug in SiDB gate design when using skeletons with I/O wires facing east
Adapted
post-layout optimizationandwiring reductionto handle layouts with PIs not placed at the bordersFix neutral defect handling in CDS and correct gate design termination condition
Enforce runtime evaluation of dynamic formatting strings to fix consteval contexts
Microsoft logo in CI badge by replacing the logo slug with a base64 encoding of the SVG image
Remove explicit XCode version setup for macOS 13 CIs
Adjusted PyPI deployment target for macOS
Several bugs resulting from the new cell_type::LOGIC in the SiDB technology
Several compiler and linter warnings
Documentation for BDL wire detection
v0.6.5 - 2024-10-22¶
Added¶
Experiments:
Script to simulate the critical temperature of SiQAD and Bestagon gates
Algorithms:
Physical Design:
QuickCell algorithm for automatic standard cell design in silicon dangling bond logic
Added an option to GOLD to specify discretionary cost objectives
Added a flag to GOLD to enable multi-threading
Added a timeout option to post-layout optimization
Simulation:
Added support for different ways of implementing input information in SiDB technology to the BDL input iterator
Extended BDL input iterator to support different SiDB input representations
Documentation:
Added a
CITATION.cfffileAdded documentation on our latest papers from IEEE-NANO
Fixed¶
Addressed some
clang-tidywarnings
v0.6.4 - 2024-08-30¶
Added¶
Algorithms:
Path-finding:
Squared Euclidean distance function
Chebyshev distance function
Data structures:
gate_level_layoutnow tracks its number of crossings
CLI:
ps -gandstore -gnow display the currentgate_level_layout’s number of crossings
Fixed¶
Fixed disappearing clocking schemes when applying a gate library to a gate-level layout
Fixed a few oversights in the RTD documentation of SiDB simulation functionality
Fixed several typos and docstrings in the codebase
Addressed some
clang-tidywarnings
v0.6.3 - 2024-08-22¶
Added¶
Algorithms:
Physical Design:
Graph-Oriented Layout Design (GOLD) for 2DDWave-clocked Cartesian gate-level layouts to trade-off runtime vs. result quality (based on this paper)
Flag for planar post-layout optimization
Flag for optimizing POs only in post-layout optimization
Simulation:
Defect-aware on-the-fly SiDB circuit design on defective H-Si surfaces (based on this paper)
Displacement robustness domain simulation for SiDB layouts
Finding valid physical parameters for a given SiDB layout charge distribution
Multi-dimensional operational domain computation for SiDB layouts
Changed¶
Switched from execution policy-based multithreading to manual thread management in operational domain computation for platform-independence and better performance in the Python bindings
Extended time-to-solution (TTS) calculation functions
Add a warning when leak sanitizers are used with AppleClang since they are not supported
Switched to new compiler and OS versions in the GitHub Actions workflows
Updated all libraries to the latest versions
Fixed¶
Utilizing tolerance to mitigate floating-point inaccuracies in operational domain computation
Some bugs in post-layout optimization
Corner case in
orthoregarding multi-output nodesEnable relocation of all 2-input gates during post-layout optimization
v0.6.2 - 2024-05-22¶
Added¶
Experiments:
Script for runtime evaluation of ExGS, QuickExact, and QuickSim on the Bestagon gate set
Fixed¶
Python bindings:
detect_bdl_pairsno longer require the_100or_111suffixMinor inconsistencies
v0.6.1 - 2024-05-16¶
Added¶
Utils:
Truth table helpers for the creation of 3-input functions (NPN class representatives)
Documentation:
Information on hexagonalization and post-layout optimization in README and ReadTheDocs
Changed¶
Continuous integration:
Limit the number of CI runs for PyPI deployment
Fixed¶
Continuous deployment:
Fixed the PyPI deployment workflow to publish all wheels properly
v0.6.0 - 2024-05-05¶
When it comes to the past, everyone writes fiction. — Stephen King
Added¶
Python bindings:
Technology:
- H-Si lattice orientation support
H-Si(100)-2x1
H-Si(111)-1x1
Algorithms:
Post-layout optimization and wiring reduction for 2DDWave-clocked Cartesian gate-level layouts (based on this paper)
SAT-based clock number assignment
Added an upper bound option for the total layout area to
exactAutomatic and exhaustive SiDB gate designer (based on this paper)
Operational domain computation for SiDB layouts (based on this paper)
Novel SiDB simulator
quickexactfor exhaustive but fast SiDB layout simulation including atomic defects (based on this paper)Random SiDB layout generator
2DDWave distance function
Hexagonalization algorithm for transforming Cartesian 2DDWave-clocked layouts into ROW-clocked hexagonal layouts (based on this paper)
Temperature-aware SiDB simulation (based on this paper)
Atomic defect-aware physical design for SiDB layouts. Many thanks to Jeremiah Croshaw and Samuel Sze Hang Ng for the collaboration on the paper!
Data types:
Distance maps for faster path-finding via caching or pre-computation
Enable
coord_iteratorforsiqad::coord_t
I/O:
Unified
print_layoutfunction for all layout typesSupport
charge_distribution_surfaceinprint_layoutSupport atomic defects in
print_layoutSupport atomic defects in reading and writing SQD files
Proprietary file format writer for SiDB layouts together with simulation results
SiDB simulation file writer for SiQAD
Clocking schemes:
Ripple
CLI:
Commands
miginvoptandmiginvpropfor MIG network optimization and inverter propagation frommockturtle
Utils:
Function to round a number to
ndecimal places
Libraries:
Updated all libraries to the latest versions
Continuous integration:
Added a workflow to build and test the Python bindings
Added a workflow to publish the Python bindings to PyPI
Added a workflow to extract the docstrings from C++ to make them available in Python
Added a CodeCov configuration file
Setup pre-commit checks for code formatting and linting
Build and documentation:
Added documentation on the Python bindings
Overhauled the README
Flags to partially compile select features of the CLI
Added latest paper references to the documentation
Added the new Munich Nanotech Toolkit logo
Added missing thanks to Giuliana Beretta
Added contribution and support info
Benchmarks:
Combinational networks from the IWLS93 suite
Code benchmarking via Catch2
Changed¶
Usability:
Added return types to the
area,critical_path_length_and_throughput, andequivalence_checkingfunctions instead of relying on the passed statistics objectsRefactored the technology mapping interface
Enabled
offset::ucoord_tandcube::coord_tas coordinate types for SiDB simulationsEnhanced path-finding versatility by enabling them on all layout abstractions
random_coordinatefunction for all layout typesAdded the EPFL and ISCAS85 benchmarks to the benchmark selector in the experiments
Changed the unit of the
lambda_tfphysical parameter from meter to nanometer
Continuous integration:
Increased parallelism for building and testing in the Ubuntu and Windows workflows
Use
moldinstead ofldfor faster link timesSwitched to the newest OS versions in the GitHub Actions workflows
Build and documentation:
Overhauled and modernized the CMake build system
Updated the Doxygen documentation system
Linting:
Make ClangFormat aware of different line ending types and enforce
LF
Miscellaneous:
Updated the linguist attributes
fictionmoved to thecda-tumGitHub organization
Fixed¶
Minor oversights in using
static constexprandnoexceptFixed conversion of cube coordinate with negative y-value to SiQAD coordinate
Fixed an inconsistency in SiDB layout printing
Fixed hop energy calculation from neutral to positive SiDB
read_sqd_layoutnow updates the aspect ratio properly for SiQAD-coordinate based layoutsAtomic defects can now be updated and new ones can be assigned to specific coordinates
Case style of experiments folders corrected in
fiction_experiments.hppFixed CodeQL warnings
Fixed a bug that caused pre-mature termination of
sidb_surface_analysisFixed design-rule violation testing and equivalence checking on empty gate-level layouts
Fixed compiler warnings
Fixed a documentation bug in the physical constants section
Fixed the bug that some physical parameters were not correctly passed to the simulators
Fixed
equivalence_checkingonobstruction_layoutobjectsFixed fragments from the move to
cda-tumand adjusted the tracking of publicationsMissing physical validity check in
quicksimfor special casesBug fixes and improvements related to the coordinate system
Fixed wrong SiDB locations in a Bestagon tile’s input wire
Fixed an issue with
charge_distribution_surfacenot being recognized as acell_level_layoutFixed port routing determination for unconnected gates in the Bestagon library
v0.5.0 - 2023-03-30¶
Fiction is a way to challenge the status quo and to push the boundaries of conventional thinking. — unknown
Added¶
Technology:
Support for the SiDB Bestagon gate library, a standard-tile library for the SiDB technology based on hexagonal grids. Many thanks to Samuel Sze Hang Ng for the collaboration on the paper!
Support for charge states of SiDBs
Algorithms:
- Electrostatic ground state simulation for SiDB cell-level layouts
Exhaustive simulation
Heuristic simulation
Energy calculations
- Four established path-finding algorithms on arbitrary layouts with arbitrary clocking schemes
Recursive enumeration of all possible paths
A* for the shortest path
Jump Point Search (JPS) for the shortest path (proof-of-concept)
kshortest paths via Yen’s algorithm
- Distance functions and functors for layouts
Manhattan distance
Euclidean distance
A* distance
- Cost functions and functors for layouts
Unit cost
Random cost
Graph coloring with a selection of SAT solvers or heuristic algorithms
Efficient multi-path signal routing on gate-level layouts (based on this paper)
Specify a black list of tiles and gates to avoid in exact physical design
Generic function optimizer based on simulated annealing
Data types:
Obstruction layout to represent obstacles in a layout
Edge intersection graphs from enumerated routing paths
Charge distribution surface for SiDB layouts
Coordinate type
siqad::coord_trepresenting signed SiDB coordinates as represented in SiQAD
I/O:
Molecular FCN support in the QLL writer for MagCAD and SCERPA (many thanks to Giuliana Beretta!)
SQD reader for the SiDB technology
Clocking Schemes:
CFE
Traits:
has_*_technologytraits to check for specific cell technologies of layouts and libraries
Utils:
Routing utils
STL extensions
Truth table utils
Libraries:
Continuous integration:
clang-tidy workflow for static code analysis
ClangFormat workflow for automatic code formatting
Release Drafter workflow to keep an up-to-date changelog for the next release
Docker image workflow to build Docker images for the latest release
Build and documentation:
Automatic linking with TBB for parallel algorithms
Dependabot to automatically keep the dependencies up-to-date
CodeQL to automatically scan the code for security vulnerabilities
GitHub templates for issues and pull requests
Changed¶
CLI:
Split
exact’s andonepass’ parameterupper_boundintoupper_xandupper_y
Clocking schemes:
Renamed ESP to ESR
Libraries:
Updated all libraries to the latest versions
Moved to the upstream version of Catch2 v3
Continuous integration:
Updated CI runners to the latest versions
Setup Z3 via a designated action. Many thanks to Lukas Burgholzer for his support!
Enabled Ccache for faster compilation in CIs
Activated experiments in CI builds to ensure that they are building correctly
Run CI only when relevant files have changed
Switched to single-threaded builds in CI to avoid out-of-memory issues
Build and documentation:
Refactored the CMake buildsystem
Improved the README and the documentation
Fixed¶
Compilation issues when a certain header was included multiple times
Exclusion of experiment compilation if Z3 is not found
Wrong DOT drawer in
write_dot_layoutMSVC compilation issues
Performance issues with
foreach_*functions on layout typesPerformance issues with
std::stringwherestd::string_viewwas sufficientRegex in the FQCA reader
Issue with
clear_tilethat would lose track of PI and PO countDuplicate crossing cells in the iNML ToPoliNano library
Several I/O issues in the CLI
Excess template parameter in the
restore_namesutility functionErrors with the CMake build system if IPO was enabled through multiple sources
Linker errors and CMake name collisions
Warnings detected by CodeQL
Removed¶
LGTM badge as the service is no longer available
v0.4.0 - 2022-01-27¶
Fiction is about stuff that’s screwed up. — Nancy Kress
Added¶
Technology:
Data types:
New coordinate type
cube::coord_trepresenting signed cube coordinatesNew layout type
hexagonal_layoutrepresenting a grid of hexagonal tilesNew layout type
shifted_cartesian_layoutreplacing theoffsetparameter of legacyfcn_layoutNew layout type
synchronization_element_layoutreplacing theclock_latchmember of legacyfcn_layoutNew layout types
cartesian_layout,tile_based_layout,gate_level_layout, andcell_level_layoutreplacing various aspects of legacyfcn_layout,fcn_gate_layout, andfcn_cell_layouttypesAll layout types can be layered to expand their functionality, e.g., a clocked Cartesian layout type with offset coordinates results from
clocked_layout<cartesian_layout<offset::ucoord_t>>Support for arbitrary
mockturtlelogic networks as layout specificationsNew logic network type
technology_networkreplacing legacylogic_networktypeNew view types that can be layered on top of networks
reverse_topo_viewandout_of_place_edge_color_viewrefactoring aspects from theorthoalgorithm out into their own data structures
Traits:
Added a trait system that can identify the appropriateness of a data type for the usage as parameter to an algorithm at compile time
Many traits are provided out-of-the-box like checks for the existence of certain functions or members, e.g.,
is_clocked_layoutorhas_foreach_tileSome pre-defined types used within the CLI can be found in the
types.hppfile
Algorithms:
convert_networkas an extension ofmockturtle::cleanup_danglingto convert between extended logic network typesapply_gate_libraryto provide an interface that generates any cell-level layout type from any gate-level layout type via the application of any gate library type
Clocking schemes:
Columnar
Row-based
ESP
Visualization:
Custom
write_dot_layoutfunction that creates Graphviz DOT files from gate-level layouts together with custom DOT drawers for various layout typesCustom
technology_dot_draweras an extension tomockturtle::gate_dot_drawerthat supports more gate types
CLI:
Command
mapfor technology mapping of logic networks using a given set of gate functions. Many thanks to Alessandro Tempia Calvino for his support!Command
sqdto write SiDB layouts to SiQAD filesCommand
qllto write iNML layouts to ToPoliNano & MagCAD files (complements the existingqcccommand)Command
fqcato write QCA layouts to QCA-STACK filesCommand
blifto write logic networks to BLIF filesAdded option
--hextoexactandorthoinstructing the algorithms to create a hexagonal layout instead of a Cartesian one. The option expects a hexagonal orientation that has to be one of the followingodd_row,even_row,odd_column, oreven_column
Utility:
Added utility functions for networks, layouts, placement, names, arrays, ranges, and hashing to the
utilsfolder
Build and documentation:
Option to disable the CLI to be built
Option to enable tests to be built
Option to enable experiments to be built
Code coverage CI via Codecov
Online documentation via Readthedocs
Code quality analysis via LGTM. Many thanks to Stefan Hillmich for his support!
Changed¶
Architecture:
- Reworked fiction into a platform that offers
a header-only template library for use in external projects, 2. a CLI built upon said library that provides the established functionality (plus the new additions), 3. a framework for experiments that allows to quickly prototype ideas and compile them as stand-alone binaries built with fiction
Reworked the CMake build system to be simpler to use, yet more capable
Templatized all algorithms and data structures and switched to a trait-based API system. This allows for far more flexible system and the support of any type that implements certain functionality via duck typing
CLI:
Command
readcan now also parse BLIF and FQCA filesCommand
readcan now create various types of logic networks from parsing input files. A flag determines which one to create, e.g.,--aig,--mig, or--xagCommand
gatessupports more gate types now including the 3-input gates presented in Marakkalage et al.exact --clock_latches/-lhas been renamed toexact --sync_elems/-eA technology flag
--topolinanohas been added toexactinstructing it to respect ToPoliNano’s requirements for iNML layoutsThe
ToPoliNanoclocking scheme has been renamed toColumnar
Continuous Integration:
Moved from Travis CI to GitHub Actions with CI builds and testing under ubuntu, macOS, and Windows
Build & Documentation:
Z3 is now an optional dependency that can be found automatically by fiction when
-DFICTION_Z3=ONis passed tocmake. If it is not found, some algorithms are simply excluded from compilationTrimmed README in favor of Readthedocs
Fixed¶
Compilation issues under Windows
SEGFAULT when using
orthounder rare circumstances
Removed¶
Third-party dependencies:
Boost
Z3 (now optional)
cppitertools
Data types:
fcn_gate_layout(replaced with theis_gate_level_layouttrait)fcn_cell_layout(replaced with theis_cell_level_layouttrait)logic_network(replaced with themockturtle::is_network_typetrait)
CLI:
ortho -bflag because routing border I/Os is the default behavior now
v0.3.2 - 2021-01-06¶
Sometimes fiction is more easily understood than true events. — Young-ha Kim
Added¶
Command
onepassfor a combined SAT-based logic synthesis and physical design using Mugen. Thanks to Winston Haaswijk for cooperating with us on this project!SVG output for irregular (cell-based) clocked
fcn_cell_layouts (thanks to Sophia Kuhn!)csv_writerfor conveniently formatting experiments’ resultstt_readerfor reading truth tables from a file format used by Alan Mishchenko
Changed¶
exact --asynchronous/-ahas been renamed toexact --async/-aandexact --asynchronous_max/-Ahas been renamed toexact --async_maxoutsourced Verilog and AIGER file handling into a distinct
network_readerclass so that it can be used in custom experiments
Fixed¶
Dockerbuild that broke down due to updates tomockturtleandbill
v0.3.1 - 2020-06-04¶
There is no doubt fiction makes a better job of the truth. — Doris Lessing
Added¶
Command
equivfor logical and delay equivalence checking offcn_gate_layouts against a specificationCommand
energyto print and log energy dissipation of currentfcn_gate_layoutbased on a physical model for the QCA-ONE libraryCommand
areato print and log area usage in nm²Parameter
-aand flag-Ato enable asynchronous parallelism forexactFlag
--minimize_wires/-wforexactto compute the minimum amount of wire segments neededFlag
-sforshow -nfor less detailed visualization oflogic_networkobjectsDockerfileand instructions for how to create an image using Docker (thanks to Mario Kneidinger!)CMake option to toggle animated progress bars on command line
Changed¶
exacthas been completely reworked to utilize true incremental SMT solving without push/pop mechanics (thanks to Alan Mishchenko for the inspiration!)exact --artificial_latches/-ahas been renamed toexact --clock_latches/-lexact -mhas been renamed toexact -cStandard resolves for clocking scheme names to their commonly used variants, e.g.,
2DDWavebecomes2DDWave4Energy dissipation will no longer be logged using command
ps -g; use new commandenergyinsteadCommand
cellcan be found in command classTechnologynowIncreased font size of clock numbers in SVG files by 2pt for better readability
Changed constructor parameter types for core data structures (network and layouts)
Changed
std::size_tto fixed-size data types in lots of placesUse library caching for Travis builds to speed up build time
Moved to the latest releases of all libraries
Fixed¶
Python detection in CMake under different versions
Runtime logging in
exactPerformance issues in
orthoSEGFAULTS caused by
orthoon large networks when compiling with gccortho -blosing bent wire connectionsfcn_layout::random_face’s index to coordinate mapping again, but for real now (thanks to Till Schlechtweg!)logic_networks are deep-copied for each physical design call now to secure them from external changesGates and wires without directions assigned are mapped to standard rotations using QCA-ONE library now
Rotation issues with border gate-pin I/Os using QCA-ONE library
3-output fan-outs are correctly printed as fan-outs when using
print -gnowTesting
ofstream’s foris_openin writers now (thanks to DeepCode!)Several compiler issues under MacOS and Windows (thanks to Umberto Garlando and Fabrizio Riente for pointing them out!)
Z3 build script error under Unix with CMake version <= 3.12.0
Z3 linking on MacOS (thanks to Daniel Staack!)
bibTeX citation information correctly handles last names and arXiv prefixes now
Removed¶
exact --limit_crossings/-candexact --limit_wires/-was they have been replaced by respective optimization flagsLegends in
print -g/-c
v0.3.0 - 2019-11-22¶
Sometimes, fiction was so powerful that it even had reverberations in the real world. — Delphine de Vigan
Added¶
Support for iNML technology using ToPoliNano’s gate library and clocking scheme. Thanks to Umberto Garlando for cooperating with us on this project!
Support for vertically shifted
fcn_layouts to emulate column-based clocking schemesEnhanced
logic_networkby incorporating mockturtle for logic representationTruth table store (mnemonic
-t) and commandtt. Thanks to Mathias Soeken for granting permission to use code from CirKit!Command
simulateto computetruth_tables forlogic_networkandfcn_gate_layoutobjects. Thanks to Mathias Soeken for granting permission to use code from CirKit!Command
akersto perform Akers’ Majority synthesis to generate alogic_networkfrom atruth_tableCommand
randomto generate randomlogic_networkobjectsCommand
checkto verify structural integrity of designedfcn_gate_layoutobjectsCommand
gatesto list gate counts for each vertex type in the currentlogic_networkCommand
fanoutsto substitute high-degree inputs into fan-out vertices inlogic_networks using a given strategyCommand
balanceto subdividelogic_networkedges to equalize path lengths by inserting auxiliary wire verticesCommand
qccto writeiNMLcell_layouts to component files readable by ToPoliNano and MagCADCapability to enforce straight inverter gates in
exactwith flag-nCapability to minimize the number of used crossing tiles in
exactwith flag-mCapability to parse AIGER (
*.aig) files usingreadParameter
-bfororthoProgress bars for
exactandorthoshow -nto displaylogic_networkobjectsSeveral convenience functions in the core data structures for easier access
Changed¶
Moved to C++17
Moved to version 1.0 of cppitertools
Included latest updates for alice
Switched
logic_network’s CLI mnemonic to-nas it is no longer reserved byaliceRenamed
pi/po_counttonum_pis/posreaddoes no longer substitute fan-outs automatically,exactandorthodo it instead if the user did not callfanoutsexact --path_discrepancy/-phas been renamed toexact --desynchronize/-dto express its use case betterexact --timeout/-texpects its parameter in seconds instead of milliseconds nowexact --fixed_size/-fexpects its own parameter instead of using--upper_bound’s oneRenamed
version.htoversion_info.hRenamed Placement & Routing to Physical Design where appropriate to match the documentation
Fixed¶
Segfault when using
ortho -iwith certain compilers in release modeMissing input ports for 3-output fan-out gates in QCA-ONE library
Wire vertices not handled properly by QCA-ONE library
Wrong clocking look-up for
BANCSclocking infcn_cell_layoutTile directions when assigning and dissociating multiple edges
fcn_layout::random_face’s index to coordinate mapping (thanks to Till Schlechtweg!)Format issues with benchmark files
Constant outputs of some benchmark files
Additionally, there are several performance improvements in core data structures and algorithms
Removed¶
Submodule
lorinaas it is included inmockturtleverilog_parser.hasmockturtlecomes with its own oneprint -nas it is replaced byshow -noperation::BUF; useoperation::Winsteadoperation::CONST0,operation::CONST1, andoperation::XORoperator[x][y][z]forfcn_layouts as it was slow and therefore not used; useface/tile/cell{x,y,z}instead
v0.2.1 - 2019-05-02¶
Fiction is art and art is the triumph over chaos. — John Cheever
Added¶
Support for BANCS clocking and integration in
exactName strings for
fcn_clocking_schemeobjects and corresponding name-based look-upVersion and build information accessible within the code by including
util/version.hParameter
-ifor commandorthoshortcuts.fswith predefined flowsbenchmarks/MAJ/folder with some TOY benchmarks using MAJ gates
Changed¶
Calls to
exact -snow need to name the desired clocking, e.g.exact -s use(case insensitive)incoming/outgoing_information_flow_tileshave been renamed toincoming/outgoing_data_flowand handle multi wires nowRenamed diagonal clocking schemes to 2DDWAVE and gave proper credit
More verbose error messages
Fixed¶
TP calculation for layouts without designated I/O pins (thanks to Mario Kneidinger!)
I/O port orientation of PI/PO gates using QCA-ONE library
Usage of non-PI/PO MAJ gates in QCA-ONE library
Visualization of clock latches in
show -c(thanks to Sophia Kuhn!)Multi direction assignment to wires and gates in
exactleading to physically impossible layoutsshrink_to_fitinfcn_gate_layoutincorporates the BGL bug now. Minimum size in each dimension is 2. For more information, see https://svn.boost.org/trac10/ticket/11735Parameters for
exactno longer get stuck once set
Removed¶
Parameter
-nforexact
v0.2.0 - 2019-03-21¶
Fiction reveals the truth that reality obscures. — Jessamyn West
Added¶
Export
fcn_cell_layoutobjects as SVG usingshow -c. See README for more informationps -gdisplays and logs critical path and throughput offcn_gate_layoutobjectsSupport for RES clocking and integration in
exactNew TOY benchmarks in respective folder
New command
clearto remove all elements from stores (as a shorthand forstore --clear ...)Information about how to build fiction for WSL
Functions to distinguish different
logic_networktypes like AIGs/MIGs/…Parameter
-nfor commandortho
Changed¶
Revised folder structure due to the increasing amount of source files
read_verilogis now calledreadand can process directoriesgate_to_cellis now calledcellwrite_qcais now calledqcaand handles file names automatically if necessary-uis not a required parameter forexactanymoreRicher output for
print -wIncluded latest bugfixes for alice
Included latest update for lorina
Fixed¶
Starting layout size for calls to
exact -iwas too low and has been correctedSeveral code and comment inconsistencies
Removed¶
ITC99 benchmark files
v0.1.1 - 2018-12-29¶
Literature is a luxury; fiction is a necessity. — G. K. Chesterton
Added¶
Technology-specific energy model for
fcn_gate_layout; supports QCA thus farSupport for
print -cto write a textual representation offcn_cell_layoutobjectsInformation on nested fiction scripts and documentation generation in README
linguist flags in
.gitattributesto prevent benchmark files from being viewed as source code
Changed¶
Fixed¶
Copy and move constructors of
logic_networkwork properly nowCalculation of
bounding_boxsize onfcn_gate_layoutnow handles empty layouts correctlySeveral minor and rare bugs, code inconsistencies, and performance issues
Removed¶
Nothing
v0.1.0 - 2018-10-29¶
Let there be a fiction.
This is the initial release. Please find a feature overview in the README.