TODO
Compilation & CI & CD
-
Download and compile external dependencies using FetchContent
CMake functions instead of separate Bash/Batch scripts -
Finish all compilation possibilities AND make specific CI tests for them to be run in a special branch compilation-test
-
Ubuntu + dependencies stored in "atypical" paths (e.g. paths set by variables) + statically linked dependencies -
Ubuntu + dependencies stored in "atypical" paths (e.g. paths set by variables) + dynamically linked dependencies -
Windows + locally stored dependencies + dynamically linked dependencies -
Windows + dependencies stored in system paths + statically linked dependencies -
Windows + dependencies stored in system paths + dynamically linked dependencies -
Windows + dependencies stored in "atypical" paths (e.g. paths set by variables) + statically linked dependencies -
Windows + dependencies stored in "atypical" paths (e.g. paths set by variables) + dynamically linked dependencies -
Intel compiler support both on Linux and Windows -
MinGW support on Windows -
Maybe Fedora support? -
Ubuntu + locally stored dependencies + statically linked dependencies -
Ubuntu + locally stored dependencies + dynamically linked dependencies -
Ubuntu + dependencies stored in system paths + dynamically linked dependencies -
Windows + locally stored dependencies + statically linked dependencies
-
-
Utilize Continuous Deployment -
Write an interactive compiler, so users won't have to launch different build scripts manually -
Extend unit-test to create a test hierarchy covering not only basic method checking but also the higher functionality (problem-solving) -
Document all the test in the Doxygen comments using @test
-
Start using mock objects and abstract interfaces -
Choose a proper mock framework - free, thread-safe, compatible with Boost
-
-
Implement code-coverage analysis for Ubuntu CI
-
-
Utilize ctest
for running unit-tests -
Rewrite compilation, so that examples are dependent only on lib4neuro (and native) libraries and headers
Non-distributed version
-
Rewrite code using smart pointers to prevent memory leaks -
Rewrite tutorial for the current version of compilation scripts -
Write a brief user tutorial (README / web?) -
Write complete Doxygen documentation (including documentation of unit-tests for every class/functionality) -
Implement gradient descent training method -
Implement method itself -
Implement stochastic version -
Implement the combined training method interface (to be able to use swarm and BP in turns etc.)
-
-
Implement Levenberg-Marquardt method -
[] Implement Principal Component Analysis (using Armadillo)
-
Write "user header" to hide internal classes and functions from users -
Encapsulate the "user interface" to a namespace, so its functions can't be confused with others with the same names -
Hide non-API functionality by PImpl - MUST BE CHECKED if the resulting overhead isn't too large!
-
-
Write user Fortran API -
Write interface for PES representations -
Profile the whole library to identify bottle-necks, inefficient vectorization, and threading and optimize it accordingly. -
Write interface (API / GUI?) for Glass Service -
Develop a method to detect insignificant edges (Wald test?)
Shared-memory-parallel version
-
Design shared-memory parallel model of the library for CPUs (OpenMP + vectorization) -
Implement parallel version -
Utilization of GPUs and FPGAs using OpenACC
Distributed version
-
Design distributed parallel model of the library (MPI) -
Implement distributed version -
Dash integration etc.