Navigation: nimplex (core library) | docs/changelog | utils/plotting | utils/stitching
v0.7.0 (Oct 4st, 2024)
Major Changes:
- Finalized the `stitching` utility (docs here) which contains functions related to the automation of combining ("stitching") of the compositional graphs to form graph complexes so that much more complex graphs can be built from simpler ones while retaining homogeneous structure of the space. Furthermore, one can keep track of the provenance of the subgraphs and use this information to deploy computational (e.g., ML) models on the per-subgraph basis, which should be extremely useful for (a) combining the power of many specialized models and (b) creating stacked spaces for multi-step problems broken down into individual steps.
- Added a Jupyter notebook **`03.CompositioalSpaceComplexes.ipynb`** demonstrating the new graph complex construction ("stitching") capability. The included runnable examples demonstrate how to:
- Plot graphs using `igraph`, which can be done quite directly using nimplex's point grid and neighbor lists edges = [(i,n) for i in range(len(gridAtt)) for n in nList[i]]
- Identify ordered subsystems in nimplex grids, like A-B-C and C-A-B within A-B-C-D-E and D-C-G-F-A-H-B to establish connectivity between them. We will use this to combine 3 4-component systems (tetrahedra) by 2 3-component subsystems (triangles) to create a chain.
<p align="center"> <img width="421" alt="Screenshot 2024-10-04 at 13 10 54" src="https://github.com/user-attachments/assets/e944e4e5-cfbc-4013-8a6d-26f98f3c739b"> </p>
- Identify all subspaces of a given order in low dimensional and high dimensional spaces (e.g., all quantized compositions of any 3 things out of N) and combine ("stitch") them together to form a simplex graphs that intersect themselves in 3D because of high dimensionality, yet still have the same (graph) structure.
<p align="center"> <img width="373" alt="Screenshot 2024-10-04 at 13 13 10" src="https://github.com/user-attachments/assets/a230696a-ce11-4cc4-8ff8-3a2b3e6c139a"> </p>
- Construct a graph complex to explore all ternary combinations of ["Ti50Zr50", "Hf95Ti5", "NbTaWHf", "Mo80Nb10W10", "TiTa2", "Nb96Mo3W1", "Zr49 Hf1 Mo50"] (7 alloys) under equilibrium phase constraint (relatively expensive to compute) and then explore the space with an additional low-cost screenig constraint (RMSAD - alloy strenght surrogate) that could also be an ML surrogate.
- Added automated tests for the new stitching capability.
- Improvements in the (prototype!) plotting library in utils/ternaryPlot.nim. It will be finalized and officially supported in the next major future release.
- Many code improvements, including work towards more generality.
- Added new open-source font (MartianMono).
- Label placing improvements.
- Higher visibility path plotting with pathType = "highvis" option
- Improved path visibility alongside the edges
- Added color selection with OKlab for any N-component elemental space.
- Added some experimental Python bindings. More will follow for the most common use cases.
- Experimental phases-plotting example.
- The paper has been accepted at the npj Unconventional Computing journal!
Minor Changes:
- Documentation improvements.
- Added .pre-commit-config.yaml hooks with some basic checks.
- Updated installation instructions.
- Added an example on how to call python functions from nim.
Full Changelog: https://github.com/amkrajewski/nimplex/compare/v0.6.0...v0.7.0
v0.6.0 (May 6st, 2024)
Major Changes
Created an example end-use tutorial on Path Planning in Functionally Graded Materials based on thermodynamic calculations and machine learning while leveraging nimplex to effortlessly create design spaces formed by alloy powders while relating them to underlying elemental space and describing all possible changes to every composition through simplex graphs which can then encode property-related problems such as avoiding high gradient magnitude changes (see example below). <img width="600" alt="InfeasibilityGliding_LowGradientSquaredColored" src="https://github.com/amkrajewski/nimplex/assets/54290107/35dbce38-29d6-450b-ab84-0380d718af57"> The thermodynamic calculations use `pycalphad` and modified strength surrogate model by Tandoc2023 (10.1038/s41524-023-00993-x) is used as an example for property modeling. You can quickly play with it by opening the Codespace below. Everything is pre-installed and you just need to follow a Jupyter notebook (Tutorial 02):
![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)
- Added a high entropy alloy thermodynamic database by @ShuangLin212 for users to play with when combined with pycalphad in the aforementioned tutorial.
- Added a (beta of) high-quality high-performance plotting script under utils/ternaryPlot.nim which generates neat highly-automated ternary plots with compositional, property, desirability, and feasibility overlays. Multiple axis and labeling options can be used. In the future, this will be turned into a binary nim and python libraries callable from tools like PyTorch. You can see example renders at the end of this release note.
- Improved the CLI interface experience by colorizing the terminal outputs and streamlining instructions.
Minor Changes
- Updated Action definitions.
- Proofread of documentation and tutorial by @amkrajewski, @amr8004, @rdamaral, and @bocklund.
- Minor updates in the first tutorial.
New Contributors
- @bocklund made their first contribution in https://github.com/amkrajewski/nimplex/pull/3
- @amr8004 made their first contribution in https://github.com/amkrajewski/nimplex/pull/4
<img width="700" alt="InfeasibilityGliding_LowGradientSquaredColored" src="https://github.com/amkrajewski/nimplex/assets/54290107/9bac15fc-fcc4-445f-bc01-89ed6c3a6e5c"> <img width="700" alt="InfeasibilityGliding_LowGradientSquaredColored" src="https://github.com/amkrajewski/nimplex/assets/54290107/74eb1b90-6694-46a2-b045-e8f8de136b94">
Full Changelog: https://github.com/amkrajewski/nimplex/compare/v0.5.1...v0.6.0
v0.5.1 (Feb 8st, 2024)
Major Changes:
- Running simplex graph generation using CLI to check its shape (__S configurations), now counts all graph edges (possible transitions). E.g. ./nimplex -c GIS 7 12 now returns:
Running with configuration: @["GIS", "7", "12"] Nodes Shape: [18564, 7] Edges Count: 519792
Minor Changes:
- Edge counting (see above) added to the testing suite.
- Minor optimizations all around.
- Stylistic improvements in the CLI text printouts.
- Added new changelog-generating script for the documentation page.
- Quick Start style improvements by @rdamaral
- Documentation style improvements by @lukeamyers
New Contributors:
- Thanks to @rdamaral for making his first contribution in the form of proofreading and improving style of the `quickstart.ipynb` examples notebook!
Full Changelog: https://github.com/amkrajewski/nimplex/compare/v0.5.0...v0.5.1
v0.5.0 (Feb 5st, 2024)
Major Changes:
- Added helper functions pure_component_indexes and pure_component_indexes_internal to immediately get positions of all pure components in the grid / graph nodes. Also added matching Python bindings.
- Added a Quick Start guide Jupyter notebook showing how to use nimplex in Python as a native library or through CLI with any other language like Julia (through binary data exchange) or Ada (through plain text). Also, added the devcontainer.json specification. Now, you can immediately lunch an environment and play with nimplex in one click! ![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)
- Optimized nimpy imports and Python binding compilation based on the use case to make our fast compilation even faster and our small binary even smaller.
Minor Changes:
- Moved the documentation introduction to a separate file, to keep core library file relatively concise.
- Small typo fixes all around the software.
Added a convenience script runAll.nim in tests to run them all in a predetermined order. Simply:
nim c -r -f -d:release tests/runAll
- Added a nice new logo!
New Contributors:
- Thanks to @lukeamyers for catching a typo in one of the Python binding function names and making his first contribution to nimplex!
Full Changelog: https://github.com/amkrajewski/nimplex/compare/v0.4.4...v0.5.0
v0.4.4 (Jan 25st, 2024)
Major Changes:
- Automated compilation and upload of binaries into the release for a platform matrix (Linux X86_64, Windows X86_64, Mac X86_64 (intel), Mac ARM64 (M1/2/3).
Full Changelog: https://github.com/amkrajewski/nimplex/compare/v0.4.3...v0.4.4
v0.4.3 (Jan 25st, 2024)
Major Changes:
- Introduced utils directory for utility submodules not needed in the core library.
- Added utility procedure for moving from simplex to cartesian coordinates for plotting purposes.
- Officially added the MIT license to the repository.
Minor Changes:
- Documentation improvements.
Full Changelog: https://github.com/amkrajewski/nimplex/compare/v0.4.2...v0.4.3
v0.4.2 (Jan 24st, 2024)
Major Changes:
- Implemented several procedures (most critically `attainable2elemental`) related to the interaction between elemental compositional spaces and attainable compositional spaces. One can now, for instance, take several different steels and link all possible compositions they can create to the space of pure elements. 5 high-level Python-only functions were added.
Minor Changes:
- Added tests for attainable2elemental.
- Added runnable examples for attainable2elemental.
Full Changelog: https://github.com/amkrajewski/nimplex/compare/v0.4.1...v0.4.2
v0.4.1 (Jan 22st, 2024)
Major Changes:
- Documented all functionalities of the code in both generated documentation webpage and README.
- Automated the testing process. Iterated through several improvements to it.
- Reorganized parts of the code to skip or include them during (1) documentation generation and (2) library packaging (for Python); all to keep things clean.
Minor Changes:
- Improved the software description for nimble.
- Added auxiliary information to the documentation, such as an introduction to compositional spaces.
- Simplified outFunction parameters and operation.
Full Changelog: https://github.com/amkrajewski/nimplex/compare/v0.4.0...v0.4.1
v0.4.0 (Jan 12st, 2024)
Major Changes:
- Finished implementing procedures for the generation of simplex graphs, where all points of uniform grids are connected to their neighbors using just combinatorics in O(N) time, as described in the upcoming manuscript.
- Added graph generation to the task routing based on configured or interactive CLI.
- Added Python interface for graph generating algorithms.
- Added NumPy output for graph generating algorithms, where a grid of nodes is exported as usual NDArray and the neighborhood sequence of sequences is exported as a sparse NDArray with size N x d(d-1) and -1 denoting no neighbor spots.
- Added independent test scripts with several suits of several tests, for:
1. Simplex grid generation (full/internal, integer/fractional, print output / shape) 2. Simplex graph generation (integer/fractional, print output / shape) 3. Command Line Interface (CLI) interactions covering grids, graphs, and NumPy outputs runtime and correctness.
Minor Changes:
- Added 3-component-specific graph generation algorithm, which (1) accesses the neighbor list sequentially, allowing further optimizations, and (2) doesn't calculate binom, allowing for approximately 30% speed up relative to arbitrary-dimensional algorithm.
- Numerous small optimizations and style improvements.
Full Changelog: https://github.com/amkrajewski/nimplex/compare/v0.3.0...v0.4.0
v0.3.0 (Jan 9st, 2024)
Major Changes:
- Implemented Python interface for all existing functions allowing one to use nimplex as a native Python binary. Simply:
- Start by compiling it on your machine
nim c --app:lib --out:nimplex.so --d:release --threads:on --passC:-flto --passc:-ffast-math --passL:-flto nimplex
- Then, copy the nimplex.so to your Python's code working directory and import just like another Python package
import nimplex
- And you are ready! All function names follow *_py pattern relative to the nim ones, e.g.,
nimplex.simplex_grid_fractional_py(dimension, num_points)
- Start by compiling it on your machine
Full Changelog: https://github.com/amkrajewski/nimplex/compare/v0.2.1...v0.3.0
v0.2.1 (Nov 3st, 2023)
Minor Changes:
- Added benchmarking functions.
Full Changelog: https://github.com/amkrajewski/nimplex/compare/v0.2.0...v0.2.1
v0.2.0 (Nov 3st, 2023)
Major Changes:
- Reorganized task routing in both interactive and configured modes to be more clear and extensible to allow for clean implementation of upcoming features on top of the existing ones.
- Added NumPy output option for simplex grids and samplings.
- Improved input validation.
Minor Changes:
- Import optimizations to further shrink the (already very compact) binary.
- Help function polishing all around.
Full Changelog: https://github.com/amkrajewski/nimplex/compare/v0.1.0...v0.2.0
v0.1.0 (Nov 3st, 2023)
Major Changes:
- Added ability to run configured (-c) mode, where all arguments are passed as CLI arguments.
- A help function with instructions has been added to support enabling non-interactive mode and elaborate on interactive options.
- CLI handling restructure - CLI handling routines were moved outside of the "main" function to improve code clarity and maintainability.
Minor Changes:
- Small bug fixes in CLI.
Full Changelog: https://github.com/amkrajewski/nimplex/compare/v0.0.5...v0.1.0
v0.0.5 (Oct 20st, 2023)
Minor Changes:
- Correctly adjusted the Nimble file and a small bug fix.
Full Changelog: https://github.com/amkrajewski/nimplex/compare/v0.0.4...v0.0.5
v0.0.4 (Aug 14st, 2023)
Major Changes:
- Added random simplex sampling based on the exponential distribution, resulting in a homogenous sampling
- Added some assertions for configuration options when running from CLI
Full Changelog: https://github.com/amkrajewski/nimplex/compare/v0.0.3...v0.0.4
v0.0.3 (Aug 11st, 2023)
Major Changes:
- Modified the literature grid generating algorithm into a brand new one to create only "internal" points that belong to the given order of a simplex (e.g. tetrahedron), thus excluding lower order ones (e.g. for a tetrahedron -> points, lines, triangles). The effect is the same as removing all points containing zeros, but it is ((M+N-1) choose (N-1)) / ((M-1) choose (N-1)) times faster, or e.g. 763 times faster to find internal grid of 9-simplex with dimensions divided by 12 :)
- Added internal grid generator with fractional output
- Added a simple command line interface for some quick single-time results convenience and testing
Full Changelog: https://github.com/amkrajewski/nimplex/compare/v0.0.2...v0.0.3
v0.0.2 (Aug 10st, 2023)
Major Changes:
- Added a small secondary function that converts the grid from an integer form to the fractional form
- Improved variable names to make them more readable and avoid confusion between dimensions and divisions variables
Full Changelog: https://github.com/amkrajewski/nimplex/compare/v0.0.1...v0.0.2
v0.0.1 (Aug 10st, 2023)
First Release Notes:
- Came up with a neat name!
- Implemented a grid-generating algorithm for an N-dimensional simplex space in Nim based on the NEXCOM algorithm common in the literature (nothing new science-wise until this point but we will get there soon), and it works great. Blazing fast.
Full Changelog: https://github.com/amkrajewski/nimplex/commits/v0.0.1