This is finally ready for review. The scope of this ticket ballooned a bit. The original goal was just to refactor SdssShape and GaussianFlux to remove the SdssShapeImpl intermediary. Along the way, I realized the tests for those two algorithms weren't strict enough to make me feel safe modifying them, so I put some effort into improving the tests. That led to me rewriting the test utility code, which led to me rewriting the tests for all the other algorithms. And that uncovered some bugs in those other algorithms, which I also fixed.
In the end, I did end up cleaning up the two original algorithms a bit, and I removed SdssShapeImpl, but I didn't go as far as I might have in cleaning up the internal implementations because I felt maintaining continuity with the old code was important for the guts of the algorithms.
The git log should be able to tell you the details of the rest. As we discussed earlier, I did also remove the additional unused test utility you added earlier (in the last commit on that branch). I'm happy to revert that change if you think that code will be useful going forward.
There are changes on tickets/
DM-1161 branches of meas_base, meas_algorithms, meas_modelfit, and the demo package, but the vast majority of the the changes are in meas_base. Rather than paste the git diffs here, I'll just create the PRs for the review myself.