Releases: Luis-Varona/MatrixBandwidth.jl
v0.3.0
v0.3.0 implements several major performance improvements to the Caprara–Salazar–González, Del Corso–Manzini, and Gibbs–Poole–Stockmeyer algorithms. (The original implementations had a few minor discrepancies with the original paper affecting performance, but not correctness.) Furthermore, it changes the default recognition decider from DelCorsoManzini to CapraraSalazarGonzalez (which is now faster)—arguably a breaking change, contributing to the decision to bump to a new minor version.
Changed
- Switched back from
@replblocks tojldoctestblocks in the docstrings, since Documenter.jl stopped executing@replblocks in the generated documentation (#217). - Switched from recomputing Del Corso–Manzini placement deadlines from scratch each step to maintaining them incrementally as nodes are placed, incorporating the last missing optimization from the paper (#216).
- Changed the default recognition decider from Del Corso–Manzini to Caprara–Salazar-González, which is now considerably faster after the performance fixes (#214).
- Updated the
_blb_connectedhelper (used inbandwidth_lower_bound) to avoid unnecessary allocations, now requiring onlyO(n)auxiliary space instead ofO(n^2)(#213).
Fixed
- Fixed minor discrepancy (not affecting correctness, only performance) between the Saxe–Gurari–Sudborough implementation and the original paper; now, candidates are pruned early when a node in the active region is already at its maximum number of allowed dangling edges (and so the next node must be adjacent to it) (#215).
- Significantly refactored the Caprara–Salazar-González logic to fix several bugs severely affecting performance (although not correctness); this also allowed us to remove JuMP.jl and HiGHS.jl as dependencies (#214).
- Fixed off-by-one bug in the expiration-time pruning of the Del Corso–Manzini algorithm(s) (did not affect correctness, only performance) (#211).
- Fixed several discrepancies between the Gibbs–Poole–Stockmeyer minimization algorithm as described in the original paper and its implementation (the
READMEand tutorial examples was also updated accordingly) (#209).
Removed
- Removed nightly CI runs (on
pre) from the GitHub Actions CI workflow, since they often fail due to incompatibilities with dependencies in the testing matrix (#212).
v0.2.3
Changed
- Made a few micro-optimizations to the Saxe–Gurari–Sudborough recognition decider (e.g., avoiding unnecessary duplicate checks/moving computations to later in the control flow when appropriate) (#204, #205).
- Replaced
processedandvisitedsets in the Saxe–Gurari–Sudborough recognition decider with boolean arrays to improve performance (#203). - Updated
CONTRIBUTING.mdwith a paragraph about adding to the changelog, as well as a minor typo fix (#202). - Raised the threshold for number of JET reports in static analysis testing from 20 to 30 (#201).
- Updated the metadata in the documentation (including changing
CITATION.bibtoCITATION.cff) to reflect JOSS publication (#198).
v0.2.2
Added
- Added a
CONTRIBUTING.mdfile with contributing guidelines (#183). - Added clear links to the documentation on
minimize_bandwidth,has_bandwidth_k_ordering, and their respective output structs inREADME.mdanddocs/src/index.md(#180). - Updated the GitHub Actions CI workflow to include Julia 1.12 in the testing matrix (#179).
- Added a unit test in
test/readme_example.jlto ensure that the example code blocks inREADME.mdanddocs/src/index.md(which corresponds to the homepage of the Documenter.jl-generated documentation) align with the actual output of the package on 64-bit architectures (#178, #188). - Added a Journal of Open Source Software (JOSS) badge to
README.mdanddocs/src/index.mdindicating that the package is currently under review by JOSS (#174).
Changed
v0.2.1
v0.2.0
Added
- Declared additional unfinished metaheuristic minimization algorithms (
PSOHC,AntColony, andTabuSearch) inMatrixBandwidth.Minimization.Metaheuristic(#155). - Added doctest examples for the
minimize_bandwidthandhas_bandwidth_k_orderingfunctions (#154). - Implemented the Caprara–Salazar-González algorithm (both the minimization solver and the recognition decider), concurrently adding JuMP.jl and HiGHS.jl as notable dependencies for integer linear programming (#137, #149, #152, #156).
Changed
- Switched the default recognition decider from Caprara–Salazar-González to Del Corso–Manzini (#149).
- Added instructions to the documentation for extending the interface with new algorithms via
_minimize_bandwidth_impland_has_bandwidth_k_ordering_impl(#145). - Renamed
_bool_minimal_band_orderingand_bool_bandwidth_k_ordering(the functions wherein new algorithm logic is defined) to_minimize_bandwidth_impland_has_bandwidth_k_ordering_impl, respectively (#145). - Split up the
@indexand@autodocsblocks in the Documenter-generated website by submodule (#144). - Modified
minimize_bandwidthto skip the algorithm call and simply use the original ordering in all cases whenbandwidth(A) == bandwidth_lower_bound(A), not just whenbandwidth(A) == 0(#143). - Removed the export of
random_banded_matrixfromMatrixBandwidth(#140). - Exported
AbstractAlgorithmandAbstractResultfromMatrixBandwidth, and exported their various subtypes from the appropriate submodules (#140). - Reformatted the export blocks in each submodule to be more in cohesive, similarly to how Graphs.jl does it (#140).
- Removed the leading underscore from many (but not all) top-level utility functions (also renaming
_offdiag_nonzero_supporttooffdiag_nz_support), adding docstrings to all of these (#140). - Refactored the import structure in submodules to do, e.g.,
using MatrixBandwidthin favor of a bunch ofimport ..A, ..B, ..Cstatements, similarly to how Graphs.jl does it (#140).
Removed
- Removed the empty test suites for the core functions of
MatrixBandwidth.MinimizationandMatrixBandwidth.Recognition, asminimize_bandwidthandhas_bandwidth_k_orderingare already tested via the algorithm-specific test suites (#154).
v0.1.4
Added
- Updated the module docstring and
README.mdto include a paragraph on the motivation and goals of this package (#131). - Implemented the Saxe–Gurari–Sudborough algorithm (both the minimization solver and the recognition decider) (#123, #126).
- Added
bi_criteria_node_finder(an improvement uponpseudo_peripheral_node_finder) as a new node finder for the heuristic solvers (#112). - Finished unit tests for all root-level utility functions (#108, #109).
- Added References sections to docstrings for immediate readability in the REPL and in the source code without needing to open the Documenter-generated website (#105).
Changed
- Replaced all deprecated
DataStructures.enqueue!andDataStructures.dequeue!calls withBase.push!andBase.popfirst!, respectively (#129). - Fleshed out and fixed a few typos in the documentation for the Del Corso–Manzini algorithms (#126).
- Renamed the
_requires_symmetryinternal function (used for input validation) to_requires_structural_symmetry(#123). - Fleshed out documentation (particularly inline comments) for the Gibbs–Poole–Stockmeyer source code (#116).
- Improved unit tests for the heuristic solvers with more edge cases and scenarios (including the use of custom node finders) (#112).
- Changed the
DEFAULT_NODE_FINDERconstant for the heuristic solvers frompseudo_peripheral_node_findertobi_criteria_node_finder(#112). - Moved the
_connected_componentsfunction fromMatrixBandwidth.Minimization.Heuristicto the rootMatrixBandwidthmodule (specificallysrc/utils.jl) for universal access (#109).
Fixed
- Tightened the
bandwidth_lower_boundfunction for disconnected graphs by taking the maximum of the bounds computed for each connected component (#124). - Fixed some test names in the Del Corso–Manzini recognition algorithm test suite ("Bandwidth < k" was meant to be "Bandwidth > k", and "Bandwidth ≥ k" was meant to be "Bandwidth ≤ k") (#123).
v0.1.3
v0.1.2
Added
- Started using PrecompileTools.jl to compile all solvers/deciders during package startup, reducing delay on first usage (formerly reached up to ~3 seconds for some algorithms) (#93).
- Created the
MatrixBandwidth.ALGORITHMSconstant to index all available algorithms by submodule (#93). - Added "Supertype Hierarchy" sections to the docstrings of all subtypes (both concrete and abstract) (#90).
- Added a section in the
MatrixBandwidthmodule docstring covering practical applications of matrix bandwidth reduction in engineering and scientific computing (#86).
Changed
- Changed some user-facing parameters typed as
Intto the more genericInteger(#90).
v0.1.1
Added
- Added the
profilefunction to compute the original profile of a matrix prior to any reordering (#78). - Added the
homepagefield toProject.tomlto reference the GitHub Pages documentation (#76). - Created
CHANGELOG.mdto document changes to this project (#72). - Clarified certain
if-elsechecks in thebandwidthmethod and in a helper function for the Del Corso–ManziniRecognitiondeciders by explaining via inline comments that we cannot reduce over an empty collection (#71).
Changed
- Added PR numbers to changelog entries for better traceability (#73).
- Eliminated unnecessary reallocation of a boolean matrix in the
bandwidthmethod by directly usingfindall(!iszero, A)instead of calling_offdiag_nonzero_support(A)(#71). - Switched from a generator comprehension in the
bandwidthmethod toIterators.map(more idiomatic) (#71).
Fixed
- Changed some blocks enclosed in double backticks to be enclosed in single backticks instead (meant to be rendered as code blocks, not mathematical expressions) (#78).
- Fixed the rendering of the
dcm_ps_optimal_depthdocstring (#78). - Updated the compatibility requirements in
test/Project.tomlto allow only a finite number of breaking releases of Aqua.jl and JET.jl (#74).
v0.1.0
This is the first stable release of MatrixBandwidth.jl, offering unified interfaces for both bandwidth minimization and bandwidth recognition via the minimize_bandwidth and has_bandwidth_k_ordering functions, respectively. Although a few algorithms remain under development, the API is already stable with the bulk of the library already functional and tested. TODO items are clear in the source code as well as documented in the README and the official Documenter-generated website.