### Navigation

- index
- modules |
- next |
- previous |
- Modules »

# Abstract base class for modules

Abstract base class for modules

Two classes for modules are defined here: `Module_old` and `Module`. The former is a legacy class which should not be used for new code anymore as it does not conform to the coercion model. Eventually all occurences shall be ported to `Module`.

AUTHORS:

- William Stein: initial version
- Julian Rueth (2014-05-10): category parameter for Module, doc cleanup

EXAMPLES:

A minimal example of a module:

    sage: class MyElement(sage.structure.element.ModuleElement):
    ....:     def __init__(self, parent, x):
    ....:         self.x = x
    ....:         sage.structure.element.ModuleElement.__init__(self, parent=parent)
    ....:     def _rmul_(self, c):
    ....:         return self.parent()(c*self.x)
    ....:     def _add_(self, other):
    ....:         return self.parent()(self.x + other.x)
    ....:     def __cmp__(self, other):
    ....:         return cmp(self.x, other.x)
    ....:     def __hash__(self):
    ....:         return hash(self.x)
    ....:     def _repr_(self):
    ....:         return repr(self.x)

    sage: class MyModule(sage.modules.module.Module):
    ....:     Element = MyElement
    ....:     def _element_constructor_(self, x):
    ....:         if isinstance(x, MyElement): x = x.x
    ....:         return self.element_class(self, self.base_ring()(x))
    ....:     def __cmp__(self, other):
    ....:         if not isinstance(other, MyModule): return cmp(type(other),MyModule)
    ....:         return cmp(self.base_ring(),other.base_ring())

    sage: M = MyModule(QQ)
    sage: M(1)
    1

    sage: import __main__
    sage: __main__.MyModule = MyModule
    sage: __main__.MyElement = MyElement
    sage: TestSuite(M).run()

class `sage.modules.module.``Module`

  Bases: `sage.structure.parent.Parent`

  Generic module class.

  INPUT:

  - `base` – a ring. The base ring of the module.
  - `category` – a category (default: `None`), the category for this module. If `None`, then this is set to the category of modules/vector spaces over `base`.

  EXAMPLES:

      sage: from sage.modules.module import Module
      sage: M = Module(ZZ)
      sage: M.base_ring()
      Integer Ring
      sage: M.category()
      Category of modules over Integer Ring

  Normally the category is set to the category of modules over `base`. If `base` is a field, then the category is the category of vector spaces over `base`:

      sage: M_QQ = Module(QQ)
      sage: M_QQ.category()
      Category of vector spaces over Rational Field

  The `category` parameter can be used to set a more specific category:

         sage: N = Module(ZZ, category=FiniteDimensionalModulesWithBasis(ZZ))
         sage: N.category()
         Category of finite dimensional modules with basis over Integer Ring

      TESTS:

      We check that :trac:`8119` has been resolved::

         sage: M = ZZ^3
         sage: h = M.__hash__()
         sage: M.rename('toto')
         sage: h == M.__hash__()
         True

  `endomorphism_ring`()

    Return the endomorphism ring of this module in its category.

    EXAMPLES:

        sage: from sage.modules.module import Module
        sage: M = Module(ZZ)
        sage: M.endomorphism_ring()
        Set of Morphisms from <type 'sage.modules.module.Module'> to <type 'sage.modules.module.Module'> in Category of modules over Integer Ring

class `sage.modules.module.``Module_old`

  Bases: `sage.structure.parent_gens.ParentWithAdditiveAbelianGens`

  Generic module class.

  `category`()

    Return the category to which this module belongs.

  `endomorphism_ring`()

    Return the endomorphism ring of this module in its category.

`sage.modules.module.``is_Module`(x)

  Return `True` if `x` is a module, `False` otherwise.

  INPUT:

  - `x` – anything.

  EXAMPLES:

      sage: from sage.modules.module import is_Module
      sage: M = FreeModule(RationalField(),30)
      sage: is_Module(M)
      True
      sage: is_Module(10)
      False

`sage.modules.module.``is_VectorSpace`(x)

  Return `True` if `x` is a vector space, `False` otherwise.

  INPUT:

  - `x` – anything.

  EXAMPLES:

      sage: from sage.modules.module import is_Module, is_VectorSpace
      sage: M = FreeModule(RationalField(),30)
      sage: is_VectorSpace(M)
      True
      sage: M = FreeModule(IntegerRing(),30)
      sage: is_Module(M)
      True
      sage: is_VectorSpace(M)
      False

### Navigation

- index
- modules |
- next |
- previous |
- Modules »