Releases: amkrajewski/nimplex
v0.7.1
Minor Changes:
- The
nimble
branch installation, which is the one installed bynimble install nimplex
(similar to Python'spip install
), now adds a binary installation to its effects; thus, as long as you havenimble
package directory in your PATH, you should be able to runnimplex
's CLI by just typingnimplex
in your command line. You can alternatively call it directly, depending on your system (e.g.,~/.nimble/bin/nimplex
for default installation on Ubuntu). - Imports in the
utils
submodules on thenimble
branch were adjusted to work both with and without all ofnimplex
installed for the convenience of users compiling certain parts as Python.so
/.pyd
libraries. - The
nimble
version now includes slightly modified tests to account for its slightly different structure. - This version addresses recent issues with
Arraymancer
's CUDA dependency on certain machines by pinningnimcuda
to a slightly older version.
Full Changelog: v0.7.0...v0.7.1
v0.7.0
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 usingnimplex
's point grid and neighbor listsedges = [(i,n) for i in range(len(gridAtt)) for n in nList[i]]
-
Identify ordered subsystems in
nimplex
grids, likeA-B-C
andC-A-B
withinA-B-C-D-E
andD-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.
- 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.
- 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 fromnim
.
Full Changelog: v0.6.0...v0.7.0
v0.6.0
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).
The thermodynamic calculations usepycalphad
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): -
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 binarynim
andpython
libraries callable from tools likePyTorch
. 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
Full Changelog: v0.5.1...v0.6.0
v0.5.1
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: v0.5.0...v0.5.1
v0.5.0 (Public Release)
Major Changes:
- Added helper functions
pure_component_indexes
andpure_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!
- 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
intests
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: v0.4.4...v0.5.0
v0.4.4
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: v0.4.3...v0.4.4
v0.4.3
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: v0.4.2...v0.4.3
v0.4.2
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: v0.4.1...v0.4.2
v0.4.1
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: v0.4.0...v0.4.1
v0.4.0
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: v0.3.0...v0.4.0