Some classes have a finalization in ``fit``. I think currently it is mostly computing the objective once again. I didn't do that here, as it probably didn't move much since the last call to the duality gap computation. In the OneSlackSSVM on the other hand, the last inference migh be from the cach and won't tell you much about the actual objective. It would probably be worthwhile to put the innermost loop in a ``_fit`` function and wrap the ``try`` around that, just to make the code easier to read.
For decorators: I am not sure if having a single decorator instead of three lines of code is better, as the code is pretty clear and the decorator is not very obvious to someone not familiar with the codebase.