Recent Releases of nimCSO
nimCSO - v0.6.6
Minor Changes:
- Main figure in
READMEnow 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 pinningnimcudato 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.xto the currentstableversion ofnim.
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.yamllfor 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
changeloggeneration 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.ipynbnotebook explaining basics of usage, result interpretation, and some quick discussion of real results. - Added new
--singleSolution/-ssroutine 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
geneticSearchandmostCommon. - Added ability to skip usage of
Arraymancerif needed, with a simple-d:noarraymancerflag. - Removed the
--development/-dflags deprecated sincev0.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
examplesdirectory with a QuickStart guide. - Added Codespaces environment definition through
Dockerfileanddevcontainer.json, enabling one-click ready runtime with all dependencies installed.
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
alloyListtodataListandalloyNtodataNto 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
bruteForceIntworkflow 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/runAllscript. - 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, andpythonNumPyin 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
nimCSOlibrary and our custombitArrayAutoconfigured. The
geneticSearchroutine 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, andmutationsN: Natural = 1.Improved terminal printouts generated by all routines, for clean and easy visualization.
Added testing suites for
algorithmSearchandleastPreventing. Improved past testing suites too.
Minor Changes:
- Created and added helper figures for
mutateandcrosslinkfunctions. - Added convenience script
runAllfor 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:
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
developmentprocedure name to thealgorithmSearchformer naming scheme, but retaining the command line flags for now.
- Added new top-level routines
leastPreventingandmostCommon, 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
presentInDatafor 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
saveResultsfor persisting search results to CSV fromseq[ElSolution]. - Added a helper function
saveFilteredDatasetto save dataset after it has been filtered based on the config file. Default isresults.csv. - Implemented additional
newElSolutionfor creating solutions from symbol string sequences.
- Added a function
- Added output (of
seq[ElSolution]type) to search strategies.
Minor Changes:
- Added
verboseoption 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) theconfigPathother than the defaultconfig.yaml. For instance, to run a genetic algorithm search over RHEAsnim c -r -d:configPath=config_rhea.yaml -d:release --passC:-flto --passL:-flto nimcso/nimcso -gs
Minor Changes:
- Added
config_rhea.yamlproblem 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
--geneticSearchand-gsflags, and in the process, implemented associatedmutateandcrossoverprocedures. 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
--bruteForceand-bfflags.
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.yamlin both thenimcsoand in (now called)bitArrayAutoconfigured. The array of considered elements is used to determine, e.g., the memory length of theBitArraytype.
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 -cbRunning 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 -cbRunning 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 -ebCPU 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 -ebRunning 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.yamland added metadata to it. - Renamed default dataset and made presence parsers more generic.
- Moved the list of considered elements to
- Add MIT license.
Minor Changes:
- Started working on the associated manuscript in the
paperdirectory.
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 -cbRunning coverage benchmark with BitArray representation 1111110000000000000000000000000000000 CPU Time [bitty+randomizing] 19.3us FeCrNiCoAlTi->1955 Prevented count:1955Running 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 -ebRunning 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->23Running 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.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