Abstract base class for modules

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 _lmul_(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
base_extend(R)

Return the base extension of self to \(R\).

This is the same as self.change_ring(R) except that a TypeError is raised if there is no canonical coerce map from the base ring of self to \(R\).

INPUT:

  • R – ring

EXAMPLES:

sage: V = ZZ^7
sage: V.base_extend(QQ)
Vector space of dimension 7 over Rational Field

TESTS:

sage: N = ModularForms(6, 4)
sage: N.base_extend(CyclotomicField(7))
Modular Forms space of dimension 5 for Congruence Subgroup Gamma0(6) of weight 4 over Cyclotomic Field of order 7 and degree 6

sage: m = ModularForms(DirichletGroup(13).0^2,2); m
Modular Forms space of dimension 3, character [zeta6] and weight 2 over Cyclotomic Field of order 6 and degree 2
sage: m.base_extend(CyclotomicField(12))
Modular Forms space of dimension 3, character [zeta6] and weight 2 over Cyclotomic Field of order 12 and degree 4

sage: chi = DirichletGroup(109, CyclotomicField(3)).0
sage: S3 = CuspForms(chi, 2)
sage: S9 = S3.base_extend(CyclotomicField(9))
sage: S9
Cuspidal subspace of dimension 8 of Modular Forms space of dimension 10, character [zeta3 + 1] and weight 2 over Cyclotomic Field of order 9 and degree 6
sage: S9.has_coerce_map_from(S3) # not implemented
True
sage: S9.base_extend(CyclotomicField(3))
Traceback (most recent call last):
...
TypeError: Base extension of self (over 'Cyclotomic Field of order 9 and degree 6') to ring 'Cyclotomic Field of order 3 and degree 2' not defined.
change_ring(R)

Return the base change of self to \(R\).

EXAMPLES:

sage: sage.modular.modform.space.ModularFormsSpace(Gamma0(11), 2, DirichletGroup(1)[0], QQ).change_ring(GF(7))
Traceback (most recent call last):
...
NotImplementedError: the method change_ring() has not yet been implemented
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
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