Data science

I tried to address all comments/feedback from Joe and Sophia from last review.
Also tried to separate tests into happy/sad/error - not much material there.

where does the 1e-10 value come from? there should be a comment to explain, or it should be a well-named constant