PyTorch Library to facilitate Spiking Neural Network research.
SPIKERR is a library for academics to iterate quickly on ideas. In order of importance:
- Simplicity
- Generality
- Speed
Developers are empowered to use their critical thinking skills on trade-offs. Trading a little simplicity may be worth a lot of speed.
SPIKERR should be considered an extension of PyTorch. If a library works well with PyTorch, it should work well with SPIKERR.
SPIKERR's core competency is Spiking Neural Networks, abbreviated as SNNs. Auxiliary functionality should be delegated to well maintained 3rd party libraries that follow similar design philosophies. For example, PyTorch for tensor operations, matplotlib for graphing, etc. SPIKERR may provide helpful utilities around these libraries specifically for the domain of SNNs.
SPIKERR follows PyTorch's powerful design patterns. SPIKERR has a functional core with auxiliary OOP wrappers. SPIKERR is functional oriented first, with classes as a higher "ease of use" tool.
SPIKERR is a layered library with simple "common use case" functions at the top, and more granular building blocks at the bottom.
- Orthogonality: Do Not Link What Is Independent. A change in one orthogonal function has no observable effect on any other function in the set.
- Propriety: Do Not Introduce What Is Immaterial. The opposite of propriety is extraneousness. Shifting gears is not proper to driving; the extraneous component of the user interface arises from the implementation of the car.
- Generality: Do Not Restrict What Is Inherent. Generality is the ability to use a function for many ends. It expresses the professional humility of the designer, his conviction that users will be inventitive beyond his imagination.
(Paraphrased from Fred Brook's Design of Design)
SPIKERR follows the Black code formatting style and all the standard PEP conventions. Overrides may be added with strong justification. SPIKERR tools and guides are built around PyCharm as the common IDE, but you are welcome to use whichever editor you'd like.
All PRs, ideas, and fixes are welcome. If you are making major changes, a design doc before you start to get feedback may expedite the process.
Your PR must pass the automated tests. The semver should be incremented as appropriate.
If you're looking for ideas, the issues page is a good place to start.
TODO