and in the case of "a machine is used before training" i would call that exception `MachineNotTrainedException` as invalid state could be a lot of things and the not trained case i believe should be explicitly spelled out for the user :)