Skip to content

Releases: amkrajewski/nimplex

v0.7.1

17 Oct 10:20
Compare
Choose a tag to compare

Minor Changes:

  • The nimble branch installation, which is the one installed by nimble install nimplex (similar to Python's pip install), now adds a binary installation to its effects; thus, as long as you have nimble package directory in your PATH, you should be able to run nimplex's CLI by just typing nimplex 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 the nimble branch were adjusted to work both with and without all of nimplex 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 pinning nimcuda to a slightly older version.

Full Changelog: v0.7.0...v0.7.1

v0.7.0

04 Oct 17:18
Compare
Choose a tag to compare

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.

    Screenshot 2024-10-04 at 13 10 54

    • 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.

    Screenshot 2024-10-04 at 13 13 10

    • 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: v0.6.0...v0.7.0

v0.6.0

29 May 17:28
Compare
Choose a tag to compare

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).
    InfeasibilityGliding_LowGradientSquaredColored
    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

  • 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

InfeasibilityGliding_LowGradientSquaredColored InfeasibilityGliding_LowGradientSquaredColored

Full Changelog: v0.5.1...v0.6.0

v0.5.1

08 Feb 16:21
Compare
Choose a tag to compare

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)

07 Feb 15:54
Compare
Choose a tag to compare

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
  • 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: v0.4.4...v0.5.0

v0.4.4

25 Jan 21:29
Compare
Choose a tag to compare

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

25 Jan 22:09
Compare
Choose a tag to compare

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

25 Jan 22:04
Compare
Choose a tag to compare

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

25 Jan 21:57
Compare
Choose a tag to compare

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

12 Jan 14:18
Compare
Choose a tag to compare

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