Currently all algorithms extend from EaModule, often various similarities exist in implementations and code is repeated.
Helper functions, subclasses of EaModule or maybe even mixins might be worth investigating.
eg.
class Problem(EaModuleRay):
...
# OR
class Problem(EaModule, EaRayMixin):
...
I haven't really pondered too much about these but they may be worthwhile?