Idea, C++ (eigen) based implementation of E3NN, with gradients computed by Enzyme.
Basic project structure and implementation order. This project aims to provide incremental progress while minimizing dependency-related interruptions.
Project structure:
e3nn/
├── include/
│ ├── o3/
│ ├── nn/
│ ├── io/
│ ├── math/
│ └── util/
├── src/
│ ├── o3/
│ ├── nn/
│ ├── io/
│ ├── math/
│ └── util/
├── tests/
│ ├── o3/
│ ├── nn/
│ ├── io/
│ ├── math/
│ └── util/
├── examples/
└── CMakeLists.txt
Implementation order:
-
Start with the
utilnamespace:- Implement basic utility functions and classes
- This will provide a foundation for other parts of the library
-
Move on to the
mathnamespace:- Implement linear algebra functions
- Add other mathematical utilities
-
Implement the
o3namespace:- Begin with basic classes like
IrrepandIrreps - Implement rotation-related functions
- Add spherical harmonics and Wigner D-matrices
- Implement tensor product operations
- Begin with basic classes like
-
Work on the
nnnamespace:- Start with basic neural network modules
- Implement more complex modules that depend on
o3functionality
-
Finally, implement the
ionamespace:- Add functions for handling Cartesian and spherical tensors
For each namespace and major component:
- Implement the core functionality
- Write unit tests
- Create simple examples to demonstrate usage
TODO:
- Forward functions
- Backward Enzyme gradients
If you want to contribute, you can start by porting any function from e3nn pytorch, and putting it in appropriate location