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. IfNone
, then this is set to the category of modules/vector spaces overbase
.
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
. Ifbase
is a field, then the category is the category of vector spaces overbase
: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 aTypeError
is raised if there is no canonical coerce map from the base ring ofself
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
ifx
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
ifx
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