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.