From 480063e41cd0cfe3e8690b4fd3f5491e0ad190cf Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Sat, 21 Feb 2026 09:11:42 -0500 Subject: [PATCH] mjo/clan/clan.py: add a category for Clans --- mjo/clan/clan.py | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/mjo/clan/clan.py b/mjo/clan/clan.py index bec08fa..12fd15d 100644 --- a/mjo/clan/clan.py +++ b/mjo/clan/clan.py @@ -5,6 +5,7 @@ correspondence with homogeneous convex domains, and the unital clans correspond to the homogeneous convex cones. """ +from sage.categories.category_types import Category_over_base_ring from sage.categories.magmatic_algebras import MagmaticAlgebras from sage.combinat.free_module import CombinatorialFreeModule from sage.modules.with_basis.subquotient import SubmoduleWithBasis @@ -13,6 +14,26 @@ from sage.rings.rational_field import QQ from mjo.clan.clan_element import (ClanElement, NormalDecompositionElement) +class Clans(Category_over_base_ring): + r""" + The category of clans over the given base ring. + + EXAMPLES:: + + sage: Clans(QQ) + Category of clans over Rational Field + + """ + def super_categories(self): + R = self.base_ring() + return [MagmaticAlgebras(R).FiniteDimensional().WithBasis()] + class ParentMethods: + pass + class ElementMethods: + pass + class MorphismMethods: + pass + class Clan(CombinatorialFreeModule): r""" Base class for clans. @@ -36,8 +57,7 @@ class Clan(CombinatorialFreeModule): self._vector_space = vector_space basis = vector_space.basis() - category = MagmaticAlgebras(scalar_field).or_subcategory(category) - category = category.FiniteDimensional().WithBasis() + category = Clans(scalar_field).or_subcategory(category) # Compute the multiplication table. self._mt = { i: { j : clan_product(basis[i], basis[j]) @@ -119,8 +139,7 @@ class UnitalClan(Clan): prefix=None, bracket=False): - category = MagmaticAlgebras(scalar_field).or_subcategory(category) - category = category.FiniteDimensional().WithBasis().Unital() + category = Clans(scalar_field).or_subcategory(category).Unital() # Use the vector_space basis keys so we can convert # easily between them. -- 2.51.0