I can't build EM and so was poking through the code.
- EM{noise, resample, etc} should be just be {noise, resample, etc} to
be consistent with other names in other modules and the core (all
access are already prefixed with via the paths and namespaces).
- in general it is less error prone to use an enum for modes rather
than a string (in noise, for example) as they get documented better
and can only exist in correct values
- calling the arguments to add_noise op1 and op2 is horrible. They
should have descriptive names.
- given we have a rotation class, "project" should use that rather
than its own convention for defining rotations
- in general we avoid passing return return values as arguments
("project"). At the very least, if you do that you need to make sure
that the non-return arguments are const refs, rather than refs and the
last arguments.