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:
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()
Bases: sage.structure.parent.Parent
Generic module class.
INPUT:
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
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
Bases: sage.structure.parent_gens.ParentWithAdditiveAbelianGens
Generic module class.
Return the category to which this module belongs.
Return the endomorphism ring of this module in its category.
Return True if x is a module, False otherwise.
INPUT:
EXAMPLES:
sage: from sage.modules.module import is_Module
sage: M = FreeModule(RationalField(),30)
sage: is_Module(M)
True
sage: is_Module(10)
False
Return True if x is a vector space, False otherwise.
INPUT:
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