PurchasingModel<T> can either return a MarkovModel<Product> or DiscretePDF<Product>. These don't conform to a common base class or interface at the moment, and I only added the type because I need to be able to call toString() on the resulting model. I could change the interface to just return an Object, which would remove the warnings. But I'm going to leave it unconstrained for now and commit. I'll try to come up with a better approach in a future patch.