Move ShapeLearner into its own file to make independent of feedback method