Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
""" Homology Groups
This module defines a :meth:`HomologyGroup` class which is an abelian group that prints itself in a way that is suitable for homology groups. """
######################################################################## # Copyright (C) 2013 John H. Palmieri <palmieri@math.washington.edu> # Volker Braun <vbraun.name@gmail.com> # # Distributed under the terms of the GNU General Public License (GPL) # as published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # http://www.gnu.org/licenses/ ######################################################################## from six.moves import range
from sage.modules.free_module import VectorSpace from sage.groups.additive_abelian.additive_abelian_group import AdditiveAbelianGroup_fixed_gens from sage.rings.integer_ring import ZZ
class HomologyGroup_class(AdditiveAbelianGroup_fixed_gens): """ Discrete Abelian group on `n` generators. This class inherits from :class:`~sage.groups.additive_abelian.additive_abelian_group.AdditiveAbelianGroup_fixed_gens`; see :mod:`sage.groups.additive_abelian.additive_abelian_group` for more documentation. The main difference between the classes is in the print representation.
EXAMPLES::
sage: from sage.homology.homology_group import HomologyGroup sage: G = AbelianGroup(5, [5,5,7,8,9]); G Multiplicative Abelian group isomorphic to C5 x C5 x C7 x C8 x C9 sage: H = HomologyGroup(5, ZZ, [5,5,7,8,9]); H C5 x C5 x C7 x C8 x C9 sage: G == loads(dumps(G)) True sage: AbelianGroup(4) Multiplicative Abelian group isomorphic to Z x Z x Z x Z sage: HomologyGroup(4, ZZ) Z x Z x Z x Z sage: HomologyGroup(100, ZZ) Z^100 """ def __init__(self, n, invfac): """ See :func:`HomologyGroup` for full documentation.
EXAMPLES::
sage: from sage.homology.homology_group import HomologyGroup sage: H = HomologyGroup(5, ZZ, [5,5,7,8,9]); H C5 x C5 x C7 x C8 x C9 """
def _repr_(self): """ Print representation of ``self``.
EXAMPLES::
sage: from sage.homology.homology_group import HomologyGroup sage: H = HomologyGroup(7, ZZ, [4,4,4,4,4,7,7]) sage: H._repr_() 'C4^5 x C7 x C7' sage: HomologyGroup(6, ZZ) Z^6 """ else: else:
def _latex_(self): """ LaTeX representation of ``self``.
EXAMPLES::
sage: from sage.homology.homology_group import HomologyGroup sage: H = HomologyGroup(7, ZZ, [4,4,4,4,4,7,7]) sage: H._latex_() 'C_{4}^{5} \\times C_{7} \\times C_{7}' sage: latex(HomologyGroup(6, ZZ)) \ZZ^{6} """ return "0" else: else:
def HomologyGroup(n, base_ring, invfac=None): """ Abelian group on `n` generators which represents a homology group in a fixed degree.
INPUT:
- ``n`` -- integer; the number of generators
- ``base_ring`` -- ring; the base ring over which the homology is computed
- ``inv_fac`` -- list of integers; the invariant factors -- ignored if the base ring is a field
OUTPUT:
A class that can represent the homology group in a fixed homological degree.
EXAMPLES::
sage: from sage.homology.homology_group import HomologyGroup sage: G = AbelianGroup(5, [5,5,7,8,9]); G Multiplicative Abelian group isomorphic to C5 x C5 x C7 x C8 x C9 sage: H = HomologyGroup(5, ZZ, [5,5,7,8,9]); H C5 x C5 x C7 x C8 x C9 sage: AbelianGroup(4) Multiplicative Abelian group isomorphic to Z x Z x Z x Z sage: HomologyGroup(4, ZZ) Z x Z x Z x Z sage: HomologyGroup(100, ZZ) Z^100 """
# copied from AbelianGroup: invfac = n n = len(n) else: raise ValueError("invfac (={}) must have length n (={})".format(invfac, n))
|