This PR implements equivariant partial differential operators (PDOs). A few finishing touches are still missing, so please don't merge yet; I just thought it would be useful to already have a place to collect TODOs, comments, etc.
Backward compatibility:
All interfaces that will typically be used by end-users are fully backward compatible. Code that relies on the internals of the basis expansion modules might be affected, though I think even that is unlikely.
Work that is definitely needed before merging:
[x] Add documentation for the new classes (docstrings already exist)
[x] Implement non-default reflection axes for D_N (or properly raise NotImplementedErrors if that is not possible for some reason)
[x] RBF-FD sometimes produces NaNs in unexpected cases, this should be fixed or documented
[x] Add unit tests for RBF-FD and Gaussian discretization
Other potential changes (to be discussed):
[ ] Refactor R2Conv and R2Diffop by moving common code into a new parent class: these two classes are almost identical and we could avoid a lot of code duplication that way
[ ] We could make Gaussian discretization the default (rather than finite differences). It performs better in my experience, but on the other hand, it requires an additional hyperparameter which might make the default user experience more complex
[ ] The equivariant PDO implementation requires two new packages: sympy and https://github.com/treverhines/RBF. The former is only needed for finite difference discretization (the current default) and the latter only for the other two discretizations. Currently, the RBF package is an optional dependency and sympy a required one. We could consider making sympy optional as well (for users who only need kernels). On the other hand, the R2Diffop class would then not work without optional installs.
This PR implements equivariant partial differential operators (PDOs). A few finishing touches are still missing, so please don't merge yet; I just thought it would be useful to already have a place to collect TODOs, comments, etc.
Backward compatibility: All interfaces that will typically be used by end-users are fully backward compatible. Code that relies on the internals of the basis expansion modules might be affected, though I think even that is unlikely.
Work that is definitely needed before merging:
NotImplementedError
s if that is not possible for some reason)Other potential changes (to be discussed):
R2Conv
andR2Diffop
by moving common code into a new parent class: these two classes are almost identical and we could avoid a lot of code duplication that waysympy
and https://github.com/treverhines/RBF. The former is only needed for finite difference discretization (the current default) and the latter only for the other two discretizations. Currently, the RBF package is an optional dependency andsympy
a required one. We could consider makingsympy
optional as well (for users who only need kernels). On the other hand, theR2Diffop
class would then not work without optional installs.