def __new__(cls, X, Y, category): """ sage: Hom(QQ, QQ, category = Rings()).__class__ # indirect doctest <class 'sage.rings.homset.RingHomset_generic_with_category'> sage: Hom(CyclotomicField(3), QQ, category = Rings()).__class__ # indirect doctest <class 'sage.rings.number_field.morphism.CyclotomicFieldHomset_with_category'> """ from sage.rings.homset import RingHomset return RingHomset(X, Y, category=category)
def _Hom_(self, Y, category): r""" Returns the homset from ``self`` to ``Y`` in the category ``category`` INPUT: - ``Y`` -- a ring - ``category`` -- a subcategory of :class:`Rings`() or None The sole purpose of this method is to construct the homset as a :class:`~sage.rings.homset.RingHomset`. If ``category`` is specified and is not a subcategory of :class:`Rings`, a ``TypeError`` is raised instead This method is not meant to be called directly. Please use :func:`sage.categories.homset.Hom` instead. EXAMPLES:: sage: H = QQ._Hom_(QQ, category = Rings()); H Set of Homomorphisms from Rational Field to Rational Field sage: H.__class__ <class 'sage.rings.homset.RingHomset_generic_with_category'> TESTS:: sage: Hom(QQ, QQ, category = Rings()).__class__ <class 'sage.rings.homset.RingHomset_generic_with_category'> sage: Hom(CyclotomicField(3), QQ, category = Rings()).__class__ <class 'sage.rings.number_field.morphism.CyclotomicFieldHomset_with_category'> sage: TestSuite(Hom(QQ, QQ, category = Rings())).run() # indirect doctest """ if category is not None and not category.is_subcategory(Rings()): raise TypeError("%s is not a subcategory of Rings()" % category) if Y not in Rings(): raise TypeError("%s is not a ring" % Y) from sage.rings.homset import RingHomset return RingHomset(self, Y, category=category)