Skip to content

Releases: amkrajewski/nimplex

v0.8.0

21 Apr 13:06

Choose a tag to compare

Major Changes:

  • Implemented a new functionality of generating limited compositional graphs where one can independently select min/max values of each component, expressed as either integer limits expressed as quanta of nDiv divisions per component/dimension (e.g., [[0,12],[2,8],[0,6]]) or fractional limits (e.g., [[0,1],[0.167,0.667],[0,0.5]]), both of which are inclusive, with the latter collapsed to the nearest intexger point (which for a given float depends on nDiv). A simple example if depicted in the figure below.

    limitedgraph

The implementation is quite efficient, taking the same order of magnitude of time and space as the unconstrained graph generation, despite several additional things that need to be computed. It can be used to generate limited graphs of arbitrary dimensionality, expressing design problems like "any high entropy alloy (HEA) with at least 5% and at most 45% of each of 7 metallic components, less than 5% of boron, and between 4% and 12% of carbon". A simple example of such cutout from a larger compositional space is depicted below.

limitedgraph2

This functionality can, as usual, be accessed through (1) the nim interface by calling simplex_graph_limited(dim: int, ndiv: int, limit: seq[seq[int]]) or simplex_graph_limited_fractional(dim: int, ndiv: int, limit: seq[seq[float]]), (2) respective Python bindings simplex_graph_limited_py or simplex_graph_limited_fractional_py, or (3) from the command line interface (CLI), outputting shape, data, or NumPy stored data; e.g. by requesting Limited graph with Fractional node positions in NumPy format with specific limits:

./nimplex -c LFN 4 12 "[[0,1],[0,0.666],[0.153,0.5],[0.075,1]]"

demo

  • Comprehensive set of tests has been added for the limited graph functionality and several other tests were improved.

Minor Changes:

  • Improved devcontainer.json and Dockerfiles, used for running tutorials, to be faster and more reliable.
  • Documentation improvements including updated README, documentation webpage, CITATION.cff.
  • Updated the testing suite runners to reflect current popular systems.

Full Changelog: v0.7.1...v0.8.0

v0.7.1

17 Oct 10:20

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

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

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

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

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

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

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

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

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