]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
mjo/clan/clan.py: add a category for Clans
authorMichael Orlitzky <michael@orlitzky.com>
Sat, 21 Feb 2026 14:11:42 +0000 (09:11 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Sat, 21 Feb 2026 14:11:42 +0000 (09:11 -0500)
mjo/clan/clan.py

index bec08fa9cf2bd83ea12804d7b6a00823790f8486..12fd15d4abe1e97057c14caa16694e09dfc7bc99 100644 (file)
@@ -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.