The areas where work is needed, and what has to be done, are outlined below. We plan to improve these areas with generous help from the community.
What?
Issues and PRs have been collecting, and we have not had the chance to keep up with them.
How?
Go through and answer all open issues. Fix them if it's not much work. Close them where appropriate. Also go through the PRs, audit and merge them.
Difficulty? 1/5
What?
There are many modules that are 2-3 years old, introduced for some specific purpose. Sometimes it turned out that the concept didn't even work and the module is useless. In some cases, they overlap in functionality with other modules. Some of them also don't have docstrings or explanations what it does.
How?
Ensure that
Go through all the modules listed in FrEIA/modules/__init__.py
.
Check points 1-3 above, and perhaps 4 (overlap with unittests).
Then deprecate modules that are old or unnecessary, or can be combined with similar ones,
and add docstrings.
Delete the ones that were already deprecated with v0.2 (see FrEIA/modules/coupling_layers.py
, lines 430-434)
Difficulty? 3/5
What?
The test coverage is very low. There is no unified way to test e.g. invertibility, or Jacobian (has to be written once, and can work for all modules).
How?
Set up the proper structure to test all modules in a universal way,
in addition to module specific tests that may be necessary.
Ensure there is test coverage for everything, including
FrEIA.framework.ReversibleGraphNet
and FrEIA.framework.ReversibleSequential
.
Difficulty? 3/5
What?
The auto-generated docs for the API and modules are old,
and not regularly refreshed. It's also very hard to navigate,
and all the inherited torch.nn.Module
methods are also included.
The tutorial is just a long README, but would be better in separate files on different topics.
How?
AllInOneBlock
),
and especially ReversibleSequential
which is fine for 80% of cases and much simpler to understand.Difficulty? 2/5
What?
setup.py
and installation instructions still workReversibleGraphNet
and Node
, it's a recursive nightmareReversibleGraphNet._buffers
(i.e. edges on the computation graph)
not freeing once they are no longer needed, and also being included in state_dict()
Difficulty? 1/5