From 9ee2a485e49bbb87e9c7cff558252f312f2f7ba0 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Tue, 21 Jul 2020 15:55:06 -0700 Subject: [PATCH] Create CombinatorialFreeModule if basis keys given --- src/sage/modules/free_module.py | 39 ++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/src/sage/modules/free_module.py b/src/sage/modules/free_module.py index f77c41fc3b5..79761f3d7cc 100644 --- a/src/sage/modules/free_module.py +++ b/src/sage/modules/free_module.py @@ -389,9 +389,46 @@ def create_object(self, version, key): except NotImplementedError: return FreeModule_ambient(base_ring, rank, sparse=sparse) +FreeModuleFactory_with_standard_basis = FreeModuleFactory("FreeModule") -FreeModule = FreeModuleFactory("FreeModule") +def FreeModule(base_ring, rank_or_basis_keys=None, sparse=False, inner_product_matrix=None, *, + with_basis='standard', rank=None, basis_keys=None, **args): + """ + + EXAMPLES:: + sage: FreeModule(QQ, ['a', 'b', 'c']) + Free module generated by {'a', 'b', 'c'} over Rational Field + sage: _.category() + Category of finite dimensional vector spaces with basis over Rational Field + + sage: FreeModule(QQ, 3, with_basis=None) + 3-dimensional vector space over the Rational Field + sage: _.category() + Category of finite dimensional vector spaces over Rational Field + + """ + if rank_or_basis_keys is not None: + if rank_or_basis_keys in sage.rings.integer_ring.IntegerRing(): + rank = rank_or_basis_keys + else: + basis_keys = rank_or_basis_keys + if not with_basis: + if inner_product_matrix is not None: + raise NotImplementedError + from sage.tensor.modules.finite_rank_free_module import FiniteRankFreeModule + return FiniteRankFreeModule(base_ring, rank, **args) + elif with_basis == 'standard': + if rank is not None: + return FreeModuleFactory_with_standard_basis(base_ring, rank, sparse, + inner_product_matrix, **args) + else: + if inner_product_matrix is not None: + raise NotImplementedError + from sage.combinat.free_module import CombinatorialFreeModule + return CombinatorialFreeModule(base_ring, basis_keys, **args) + else: + raise NotImplementedError def VectorSpace(K, dimension, sparse=False, inner_product_matrix=None): """