### Navigation

- index
- modules |
- next |
- previous |
- Category Theory »

# Morphisms

Morphisms

AUTHORS:

- William Stein: initial version
- David Joyner (12-17-2005): added examples
- Robert Bradshaw (2007-06-25) Pyrexification

class `sage.categories.morphism.``CallMorphism`

  Bases: `sage.categories.morphism.Morphism`

  INPUT:

  There can be one or two arguments of this init method. If it is one argument, it must be a hom space. If it is two arguments, it must be two parent structures that will be domain and codomain of the map-to-be-created.

  TESTS:

      sage: from sage.categories.map import Map

  Using a hom space:

      sage: Map(Hom(QQ, ZZ, Rings()))
      Generic map:
        From: Rational Field
        To:   Integer Ring

  Using domain and codomain:

      sage: Map(QQ['x'], SymmetricGroup(6))
      Generic map:
        From: Univariate Polynomial Ring in x over Rational Field
        To:   Symmetric group of order 6! as a permutation group

class `sage.categories.morphism.``FormalCoercionMorphism`

  Bases: `sage.categories.morphism.Morphism`

class `sage.categories.morphism.``IdentityMorphism`

  Bases: `sage.categories.morphism.Morphism`

class `sage.categories.morphism.``Morphism`

  Bases: `sage.categories.map.Map`

  INPUT:

  There can be one or two arguments of this init method. If it is one argument, it must be a hom space. If it is two arguments, it must be two parent structures that will be domain and codomain of the map-to-be-created.

  TESTS:

      sage: from sage.categories.map import Map

  Using a hom space:

      sage: Map(Hom(QQ, ZZ, Rings()))
      Generic map:
        From: Rational Field
        To:   Integer Ring

  Using domain and codomain:

      sage: Map(QQ['x'], SymmetricGroup(6))
      Generic map:
        From: Univariate Polynomial Ring in x over Rational Field
        To:   Symmetric group of order 6! as a permutation group

  `category`()

    Return the category of the parent of this morphism.

    EXAMPLES:

        sage: R.<t> = ZZ[]
        sage: f = R.hom([t**2])
        sage: f.category()
        Category of endsets of unital magmas and right modules over (euclidean domains and infinite enumerated sets) and left modules over (euclidean domains and infinite enumerated sets)

        sage: K = CyclotomicField(12)
        sage: L = CyclotomicField(132)
        sage: phi = L._internal_coerce_map_from(K)
        sage: phi.category()
        Category of homsets of unital magmas and additive unital additive magmas

  `is_endomorphism`()

    Return `True` if this morphism is an endomorphism.

    EXAMPLES:

        sage: R.<t> = ZZ[]
        sage: f = R.hom([t])
        sage: f.is_endomorphism()
        True

        sage: K = CyclotomicField(12)
        sage: L = CyclotomicField(132)
        sage: phi = L._internal_coerce_map_from(K)
        sage: phi.is_endomorphism()
        False

  `is_identity`()

    Return `True` if this morphism is the identity morphism.

    Note

    Implemented only when the domain has a method gens()

    EXAMPLES:

        sage: R.<t> = ZZ[]
        sage: f = R.hom([t])
        sage: f.is_identity()
        True
        sage: g = R.hom([t+1])
        sage: g.is_identity()
        False

    A morphism between two different spaces cannot be the identity:

        sage: R2.<t2> = QQ[]
        sage: h = R.hom([t2])
        sage: h.is_identity()
        False

    AUTHOR:

    - Xavier Caruso (2012-06-29)
  `pushforward`(I)
  `register_as_coercion`()

    Register this morphism as a coercion to Sage’s coercion model (see `sage.structure.coerce`).

    EXAMPLES:

    By default, adding polynomials over different variables triggers an error:

        sage: X.<x> = ZZ[]
        sage: Y.<y> = ZZ[]
        sage: x^2 + y
        Traceback (most recent call last):
        ...
        TypeError: unsupported operand parent(s) for '+': 'Univariate Polynomial Ring in x over Integer Ring' and 'Univariate Polynomial Ring in y over Integer Ring'

    Let us declare a coercion from \(\ZZ[x]\) to \(\ZZ[z]\):

        sage: Z.<z> = ZZ[]
        sage: phi = Hom(X, Z)(z)
        sage: phi(x^2+1)
        z^2 + 1
        sage: phi.register_as_coercion()

    Now we can add elements from \(\ZZ[x]\) and \(\ZZ[z]\), because the elements of the former are allowed to be implicitly coerced into the later:

        sage: x^2 + z
        z^2 + z

    Caveat: the registration of the coercion must be done before any other coercion is registered or discovered:

        sage: phi = Hom(X, Y)(y)
        sage: phi.register_as_coercion()
        Traceback (most recent call last):
        ...
        AssertionError: coercion from Univariate Polynomial Ring in x over Integer Ring to Univariate Polynomial Ring in y over Integer Ring already registered or discovered

  `register_as_conversion`()

    Register this morphism as a conversion to Sage’s coercion model

    (see `sage.structure.coerce`).

    EXAMPLES:

    Let us declare a conversion from the symmetric group to \(\ZZ\) through the sign map:

        sage: S = SymmetricGroup(4)
        sage: phi = Hom(S, ZZ)(lambda x: ZZ(x.sign()))
        sage: x = S.an_element(); x
        (1,2,3,4)
        sage: phi(x)
        -1
        sage: phi.register_as_conversion()
        sage: ZZ(x)
        -1

class `sage.categories.morphism.``SetMorphism`

  Bases: `sage.categories.morphism.Morphism`

  INPUT:

  > - `parent` – a Homset
  > - `function` – a Python function that takes elements of the domain as input and returns elements of the domain.

  EXAMPLES:

      sage: from sage.categories.morphism import SetMorphism
      sage: f = SetMorphism(Hom(QQ, ZZ, Sets()), numerator)
      sage: f.parent()
      Set of Morphisms from Rational Field to Integer Ring in Category of sets
      sage: f.domain()
      Rational Field
      sage: f.codomain()
      Integer Ring
      sage: TestSuite(f).run()

`sage.categories.morphism.``is_Morphism`(x)

`sage.categories.morphism.``make_morphism`(_class, parent, _dict, _slots)

### Navigation

- index
- modules |
- next |
- previous |
- Category Theory »