Recent Releases of nimCSO

nimCSO - v0.6.6

Minor Changes:

  • Main figure in README now points to a permalink to display correctly outside GitHub (e.g., on the PyPI-like nimble.directory/pkg/nimcso)
  • This version addresses recent issues with Arraymancer's CUDA dependency on certain machines by pinning nimcuda to a slightly older version.

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.6.5...v0.6.6

Scientific Software - Peer-reviewed - Nim
Published by amkrajewski about 1 year ago

nimCSO - v0.6.5

Major Changes

  • Numerous improvements of the associated manuscript and tutorials as a part of the JOSS review process. These include some more general-audience analogies of underlying applications and should be more straightforward to grasp. E.g., > [nimcso's target application problems] also exists in everyday contexts, such as study of cooking ingredients, which interact in various recipes, giving rise to questions like "Given 100 spices at the supermarket, which 20, 30, or 40 should I stock in my pantry to maximize the number of unique dishes I can spice according to recipe?". Critically, this is not as simple as frequency-based selection because, e.g., removing less common nutmeg and cinnamon from your shopping list will prevent many recipes with the frequent vanilla, but won't affect those using black pepper.
  • Improved testing pipeline, including version matrix on Linux from 1.6.x to the current stable version of nim.

Minor Changes

  • Improved documentation, including installation instructions and contribution guidelines.
  • Updated benchmarking results against better-optimized Python implementations.
  • Pre-commit checks in .pre-commit-config.yamll for improved consistency.

New Contributors

  • @bdice made their first contribution in https://github.com/amkrajewski/nimCSO/pull/4
  • @RMeli made their first contribution in https://github.com/amkrajewski/nimCSO/pull/6

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.6.4...v0.6.5

Scientific Software - Peer-reviewed - Nim
Published by amkrajewski over 1 year ago

nimCSO - v0.6.4

Minor Changes:

  • Paper finalized for the JOSS submission.
  • Automated changelog generation for the documentation page based on the GitHub releases.
  • General documentation improvements.

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.6.3...v0.6.4

Scientific Software - Peer-reviewed - Nim
Published by amkrajewski almost 2 years ago

nimCSO - v0.6.3

Major Changes:

  • Added quickstart.ipynb notebook explaining basics of usage, result interpretation, and some quick discussion of real results.
  • Added new --singleSolution/-ss routine for easy manual evaluation a single solution based on the elements provided as arguments after the flag. It can be neatly stacked on itself like: cmd ./nimcso -ss Ta W Hf Si -ss V W Hf Si --singleSolution Ta V
  • Finalized the documentation and README

Minor Changes:

  • Improved printouts of several routines, including geneticSearch and mostCommon.
  • Added ability to skip usage of Arraymancer if needed, with a simple -d:noarraymancer flag.
  • Removed the --development/-d flags deprecated since v0.4.0.

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.6.2...v0.6.3

Scientific Software - Peer-reviewed - Nim
Published by amkrajewski almost 2 years ago

nimCSO - v0.6.2

Major Changes:

  • Complete overhaul of the core documentation structure and content, in preparation for releasing it soon. Also, propagated to README.
  • Added examples directory with a QuickStart guide.
  • Added Codespaces environment definition through Dockerfile and devcontainer.json, enabling one-click ready runtime with all dependencies installed. Open in GitHub Codespaces

Minor Changes:

  • Navigation improvements in the documentation.
  • Minor updates to the LICENSE, dotfiles, and other support files.

New Contributors

  • @zikuiliu made his first contribution (0b48b360181e3f2dd8a04908a1d4c340bef778ab) by revising the manuscript paper.md
  • @dovahkiin0022 made his first contribution (f018e2f31275cf4d5c0a5f16f0ce61beccde8204) by revising the manuscript paper.md, reviewing the code, and polishing details in the documentation
  • @lukeamyers made his first contribution (47f20d6f6a298b213f6bea191450a8dd6f6e5d53) by fixing a typo in the README

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.6.1...v0.6.2

Scientific Software - Peer-reviewed - Nim
Published by amkrajewski almost 2 years ago

nimCSO - v0.6.1

Major Changes

  • Manuscript draft completed!
  • Change alloyList to dataList and alloyN to dataN to be more general.

Minor Changes:

  • Improved terminal printouts.

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.6.0...v0.6.1

Scientific Software - Peer-reviewed - Nim
Published by amkrajewski almost 2 years ago

nimCSO - v0.6.0

Major Changes:

  • Finalized implementation of bruteForceInt workflow based on representing solutions as (compile-time optimized) fixed length array of integers (uint64). This sacrifices extensibility, limits the number of elements to 64, but is really high performance (400 times faster than native Python and 50 times faster than NumPy) brute force algorithm for finding the optimal solution for the problem of which N elements to remove from dataset to loose the least data.
  • All (1) supporting functions like preventedData, (2) CLI interface, (3) testing routine, and (4) benchmarking were implemented for the above.

Minor Changes:

  • Additional polishing of the API documentation all around. Now, everything has both pretty good what and why.
  • Improved testing workflow and integration through the tests/runAll script.
  • Improved triggers for GitHub Actions.

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.5.1...v0.6.0

Scientific Software - Peer-reviewed - Nim
Published by amkrajewski almost 2 years ago

nimCSO - v0.5.1

Major Changes:

  • Benchmarking directory was added comparing nimCSO, pythonNative, and pythonNumPy in terms of speed and memory usage. Documentation explaining usage and expected results has been added alongside it.

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.5.0...v0.5.1

Scientific Software - Peer-reviewed - Nim
Published by amkrajewski almost 2 years ago

nimCSO - v0.5.0

Major Changes

  • Completed the documentation of all procedures across both the core nimCSO library and our custom bitArrayAutoconfigured.
  • The geneticSearch routine now exposes several settings allowing for customizing it to problems through scripting. These are: initialSolutionsN: Natural = 100, searchWidth: Natural = 100, maxIterations: Natural = 1000, minIterations: Natural = 10, and mutationsN: Natural = 1.

  • Improved terminal printouts generated by all routines, for clean and easy visualization. Screenshot 2024-02-25 at 22 52 08

  • Added testing suites for algorithmSearch and leastPreventing. Improved past testing suites too.

Minor Changes:

  • Created and added helper figures for mutate and crosslink functions.
  • Added convenience script runAll for running all tests with a quick: cmd nim c -r -f -d:release --threads:off -d:configPath=tests/config.yaml tests/runAll
  • Numerous general performance and style improvements around the codebase.

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.4.1...v0.5.0

Scientific Software - Peer-reviewed - Nim
Published by amkrajewski almost 2 years ago

nimCSO - v0.4.1

Major Changes:

  • Import optimizations for 4 times faster (already super fast) compilation time.
  • Manuscript updates.
  • Testing workflow covering and reporting on 3 major targets: MacOS Tests (M1) Linux (Ubuntu) Tests Windows Tests

Minor Changes:

  • Comment and organization improvements
  • Testing, documentation, and pdf-generating workflows were generally improved and use updated versions of actions.

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.4.0...v0.4.1

Scientific Software - Peer-reviewed - Nim
Published by amkrajewski almost 2 years ago

nimCSO - v0.4.0

Major Changes:

  • Breaking changes to the software structure:
    • Modified directory structure to better match nimble expectations.
    • Renamed development procedure name to the algorithmSearch former naming scheme, but retaining the command line flags for now.
  • Added new top-level routines leastPreventing and mostCommon, which are pretty self-explanatory. They produce equivalent results in the opposite order.
  • Added tests for runtime testing and correctness of the brute-force approach against a reference.
  • Automated testing across Linux, Windows, MacOS on Intel, and ARM MacOS on M1.
  • Several new helper functions:
    • Added a function presentInData for finding the number of times elemental solution occurred in the database, based on either bit or bool arrays (pBAs: seq[BitArray] | seq[seq[bool]]).
    • Added a helper function saveResults for persisting search results to CSV from seq[ElSolution].
    • Added a helper function saveFilteredDataset to save dataset after it has been filtered based on the config file. Default is results.csv.
    • Implemented additional newElSolution for creating solutions from symbol string sequences.
  • Added output (of seq[ElSolution] type) to search strategies.

Minor Changes:

  • Added verbose option in several places to suppress printouts.

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.3.1...v0.4.0

Scientific Software - Peer-reviewed - Nim
Published by amkrajewski almost 2 years ago

nimCSO - v0.3.1

Major Changes:

  • Custom configuration file can now be passed at compile time by defining (-d) the configPath other than the default config.yaml. For instance, to run a genetic algorithm search over RHEAs

    nim c -r -d:configPath=config_rhea.yaml -d:release --passC:-flto --passL:-flto  nimcso/nimcso -gs
    

Minor Changes:

  • Added config_rhea.yaml problem configuration file based on Senkov 2018 RHEA review paper.
  • Documentation is now autogenerated with GitHub Actions

Full Changelog: https://github.com/amkrajewski/nimCSO/compare/v0.3.0...v0.3.1

Scientific Software - Peer-reviewed - Nim
Published by amkrajewski about 2 years ago

nimCSO - v0.3.0

Major Changes:

  • Finished implementing the Genetic Search Method available under --geneticSearch and -gs flags, and in the process, implemented associated mutate and crossover procedures. The implementation may seem unusual because the total number of removed (set) elements had to be constant.

Minor Changes:

  • Polished the Brute Force method
  • Some helper functions.

Full Changelog: https://github.com/amkrajewski/nimcso/compare/v0.2.1...v0.3.0

Scientific Software - Peer-reviewed - Nim
Published by amkrajewski about 2 years ago

nimCSO - v0.2.1

Major Changes:

  • Added input sanitization (in preparation for releasing nimcso into the wild), where alloys with elements not present in the configuration (read at compile time) are omitted from the analysis
  • Major reorganization of code routines for clarity
  • Added Brute Force Method as an option under --bruteForce and -bf flags.

Full Changelog: https://github.com/amkrajewski/nimcso/compare/v0.2.0...v0.2.1

Scientific Software - Peer-reviewed - Nim
Published by amkrajewski about 2 years ago

nimCSO - v0.2.0

Major Changes:

  • All (already heavily modified) bitty BitArray code has moved to inside this project and dependency has been removed.
  • Major speed increase thanks to compile time optimizations based on the config.yaml in both the nimcso and in (now called) bitArrayAutoconfigured. The array of considered elements is used to determine, e.g., the memory length of the BitArray type.

Minor Changes:

  • Style improvements.

Full Changelog: https://github.com/amkrajewski/nimcso/compare/v0.1.4...v0.2.0

Benchmarking results per 1 step:

Coverage:

  • nim c --run -d:release src/nimcso -cb Running coverage benchmark with BitArray representation CPU Time [bitty+randomizing] 18.7us

Running coverage benchmark with bool arrays representation (BitArray graph retained) CPU Time [bit&boolArrays+randomizing] 19.0us

  • nim c --run -d:danger --threads:off --passC:"-flto" src/nimcso -cb Running coverage benchmark with BitArray representation CPU Time [bitty+randomizing] 15.3us

Running coverage benchmark with bool arrays representation (BitArray graph retained) CPU Time [bit&boolArrays+randomizing] 18.7us

  • nim c --run -d:release src/nimcso -eb CPU Time [Expanding to elementN nodes 1000 times from empty] 1027.3us CPU Time [Expanding to 1-elementN nodes 1000 times from random] 286.5us CPU Time [Expanding 1000 steps (results dataset-dependent!)] 714.3us

Running coverage benchmark with bool arrays representation (BitArray graph retained) CPU Time [Expanding to elementN nodes 1000 times from empty] 959.2us CPU Time [Expanding to 1-elementN nodes 1000 times from random] 243.3us CPU Time [Expanding 1000 steps (results dataset-dependent!)] 629.4us

  • nim c --run -d:danger --threads:off --passC:"-flto" src/nimcso -eb Running coverage benchmark with BitArray representation: CPU Time [Expanding to elementN nodes 1000 times from empty] 969.5us CPU Time [Expanding to 1-elementN nodes 1000 times from random] 211.8us CPU Time [Expanding 1000 steps (results dataset-dependent!)] 626.7us

Running coverage benchmark with bool arrays representation (BitArray graph retained) CPU Time [Expanding to elementN nodes 1000 times from empty] 1120.7us CPU Time [Expanding to 1-elementN nodes 1000 times from random] 249.7us CPU Time [Expanding 1000 steps (results dataset-dependent!)] 659.1us

Scientific Software - Peer-reviewed - Nim
Published by amkrajewski about 2 years ago

nimCSO - v0.1.4

Major Changes:

  • Major overhaul towards generalizability:
    • Moved the list of considered elements to config.yaml and added metadata to it.
    • Renamed default dataset and made presence parsers more generic.
  • Add MIT license.

Minor Changes:

  • Started working on the associated manuscript in the paper directory.

Full Changelog: https://github.com/amkrajewski/nimcso/compare/v0.1.3...v0.1.4

Scientific Software - Peer-reviewed - Nim
Published by amkrajewski about 2 years ago

nimCSO - v0.1.3

Major Changes:

  • Implemented handling of the literature alloy dataset in the form of Boolean Arrays (seq[seq[bool]] to be precise) rather than BitArray arrays (seq[BitArray]), giving a significant improvement (see notes below) in speed under default compile settings at the cost of higher memory requirements for the calculation (possibly affecting some low-cache machines) but the same for solution graph storage. Dangerous compilation with optimizations gives similar results as before (see below).
  • Improved benchmarking and project structure

Benchmarking results per 1 step:

Coverage: - nim c --run -d:release --threads:on src/nimcso -cb Running coverage benchmark with BitArray representation 1111110000000000000000000000000000000 CPU Time [bitty+randomizing] 33.7us FeCrNiCoAlTi->1955

Running coverage benchmark with bool arrays representation (BitArray graph retained)
CPU Time [bit&boolArrays+randomizing] **21.6us**
FeCrNiCoAlTi->1955
  • nim c --run -d:danger --threads:off --passC:-flto src/nimcso -cb Running coverage benchmark with BitArray representation 1111110000000000000000000000000000000 CPU Time [bitty+randomizing] 19.3us FeCrNiCoAlTi->1955 Prevented count:1955

    Running coverage benchmark with bool arrays representation (BitArray graph retained) CPU Time [bit&boolArrays+randomizing] 19.0us FeCrNiCoAlTi->1955

Expansion: - nim c --run -d:release --threads:on src/nimcso -eb Running coverage benchmark with BitArray representation: @[Fe->1291, Cr->1289, Ni->1277, Co->1098, Al->1082, Ti->752, Nb->634, Cu->520, Mo->513, Ta->371, Zr->369, V->322, Hf->254, W->265, Mn->218, Si->110, Re->80, B->78, Ru->64, C->55, Sn->20, Mg->15, Zn->14, Li->10, O->8, Y->8, Pd->5, N->5, Ca->5, Ir->4, Sc->4, Ge->2, Be->2, Ag->1, Nd->1, S->1, Ga->1] CPU Time [Expanding to 37 nodes 1000 times from empty] 1418.3us CPU Time [Expanding to 1-37 nodes 1000 times from random] 542.0us CPU Time [Expanding 1000 steps (results dataset-dependent!)] 968.0us Last solution on heap: MgNBeAg->23

Running coverage benchmark with bool arrays representation (BitArray graph retained)
CPU Time [Expanding to 37 nodes 1000 times from empty] **1303.4us**
CPU Time [Expanding to 1-37 nodes 1000 times from random] **318.4us**
CPU Time [Expanding 1000 steps (results dataset-dependent!)] **787.2us**
Last solution on heap: MgNBeAg->23
  • nim c --run -d:danger --threads:off --passC:-flto src/nimcso -eb Running coverage benchmark with BitArray representation: @[Fe->1291, Cr->1289, Ni->1277, Co->1098, Al->1082, Ti->752, Nb->634, Cu->520, Mo->513, Ta->371, Zr->369, V->322, Hf->254, W->265, Mn->218, Si->110, Re->80, B->78, Ru->64, C->55, Sn->20, Mg->15, Zn->14, Li->10, O->8, Y->8, Pd->5, N->5, Ca->5, Ir->4, Sc->4, Ge->2, Be->2, Ag->1, Nd->1, S->1, Ga->1] CPU Time [Expanding to 37 nodes 1000 times from empty] 1030.9us CPU Time [Expanding to 1-37 nodes 1000 times from random] 257.0us CPU Time [Expanding 1000 steps (results dataset-dependent!)] 655.1us Last solution on heap: MgNBeAg->23

    Running coverage benchmark with bool arrays representation (BitArray graph retained) CPU Time [Expanding to 37 nodes 1000 times from empty] 1185.6us CPU Time [Expanding to 1-37 nodes 1000 times from random] 254.4us CPU Time [Expanding 1000 steps (results dataset-dependent!)] 692.4us Last solution on heap: MgNBeAg->23

Full Changelog: https://github.com/amkrajewski/nimcso/compare/v0.1.1...v0.1.2

Scientific Software - Peer-reviewed - Nim
Published by amkrajewski over 2 years ago

nimCSO - v0.1.1

Minor Changes:

  • The code has been made about 20% faster through several minor optimizations in intermediate representations.

Scientific Software - Peer-reviewed - Nim
Published by amkrajewski over 2 years ago

nimCSO - v0.1.0

First version that should be usable by other people! 😃

Though, you probably shouldn't, as it is neither clean nor documented or well-tested yet (but will be soon). It is hard-coded to the composition space of "Fe", "Cr", "Ni", "Co", "Al", "Ti", "Nb", "Cu", "Mo", "Ta", "Zr", "V", "Hf", "W", "Mn", "Si", "Re", "B", "Ru", "C", "Sn", "Mg", "Zn", "Li", "O", "Y", "Pd", "N", "Ca", "Ir", "Sc", "Ge", "Be", "Ag", "Nd", "S", "Ga" or all elements reported from experiments in the ULTERA database from over 500 HEA publications.

If you still want to run it, you simply fill elementLists.txt with one row of element symbols per alloy, like:

Al,Co,Cr,Fe,Ni
Hf,Nb,Ti,V,Zr
Al,Co,Cr,Mo,Ni,Ta,Ti,W
B,Co,Re
...

and then compile-run it with nim like:

nim c --run nimcso -d

or if you want it to be faster (but give less feedback if something goes wrong)

nim c --run -d:release --threads:off nimcso -d

Lastly, you can also benchmark different approaches that are available by considering their speed in checking how many alloys would be prevented if element was removed

nim c --run -d:release --threads:off nimcso -cb

and how fast the solution graph can be expanded

nim c --run -d:release --threads:off nimcso -eb

Good luck!

Scientific Software - Peer-reviewed - Nim
Published by amkrajewski over 2 years ago