Currently RibaMod uses a very simple sequential scheme, and RibaMetaMod uses a different scheme as well as incorporating MetaSWAP of course. The latter one can be run without MetaSWAP via booleans.
I think it's worth considering keeping RibaMod and RibaMetaMod as separate classes although with the same scheme, encapsulating the coupling logic in separate (mixin) classes, and assembling the classes via inheritance. This would match the preprocessing, internal:
class RibaMetaCoupling(DriverCoupling):
...
class MetaModCoupling(DriverCoupling):
...
class RibaModCoupling(DriverCoupling):
...
And user facing:
class RibaMod(RibaModCoupling):
...
class RibaMetaMod(RibaMetaCoupling, RibaModCoupling, MetaModCoupling):
...
This may not be practical, and brings the downsides of multiple inheritance. But generally, using types to skip conditionals is nice.
Currently RibaMod uses a very simple sequential scheme, and RibaMetaMod uses a different scheme as well as incorporating MetaSWAP of course. The latter one can be run without MetaSWAP via booleans.
I think it's worth considering keeping RibaMod and RibaMetaMod as separate classes although with the same scheme, encapsulating the coupling logic in separate (mixin) classes, and assembling the classes via inheritance. This would match the preprocessing, internal:
And user facing:
This may not be practical, and brings the downsides of multiple inheritance. But generally, using types to skip conditionals is nice.