def __init__(self, A, names=None): """ Initialize ``self``. TESTS:: sage: F.<x,y,z> = FreeAlgebra(QQ) sage: J = JordanAlgebra(F) sage: TestSuite(J).run() sage: J.category() Category of commutative unital algebras with basis over Rational Field """ R = A.base_ring() C = MagmaticAlgebras(R) if A not in C.Associative(): raise ValueError("A is not an associative algebra") self._A = A cat = C.Commutative() if A in C.Unital(): cat = cat.Unital() if A in C.WithBasis(): cat = cat.WithBasis() if A in C.FiniteDimensional(): cat = cat.FiniteDimensional() Parent.__init__(self, base=R, names=names, category=cat)
def __init__(self, A, names=None): """ Initialize ``self``. TESTS:: sage: F.<x,y,z> = FreeAlgebra(QQ) sage: J = JordanAlgebra(F) sage: TestSuite(J).run() sage: J.category() Category of commutative unital algebras with basis over Rational Field """ R = A.base_ring() C = MagmaticAlgebras(R) if A not in C.Associative(): raise ValueError("A is not an associative algebra") self._A = A cat = C.Commutative() if A in C.Unital(): cat = cat.Unital() self._no_generic_basering_coercion = True # Remove the preceding line once trac #16492 is fixed # Removing this line will also break some of the input formats, # see trac #16054 if A in C.WithBasis(): cat = cat.WithBasis() if A in C.FiniteDimensional(): cat = cat.FiniteDimensional() Parent.__init__(self, base=R, names=names, category=cat)
def __classcall_private__(cls, k, table, names='e', assume_associative=False, category=None): """ Normalize input. TESTS:: sage: table = [Matrix([[1, 0], [0, 1]]), Matrix([[0, 1], [0, 0]])] sage: A1 = FiniteDimensionalAlgebra(GF(3), table) sage: A2 = FiniteDimensionalAlgebra(GF(3), table, names='e') sage: A3 = FiniteDimensionalAlgebra(GF(3), table, names=['e0', 'e1']) sage: A1 is A2 and A2 is A3 True The ``assume_associative`` keyword is built into the category:: sage: from sage.categories.magmatic_algebras import MagmaticAlgebras sage: cat = MagmaticAlgebras(GF(3)).FiniteDimensional().WithBasis() sage: A1 = FiniteDimensionalAlgebra(GF(3), table, category=cat.Associative()) sage: A2 = FiniteDimensionalAlgebra(GF(3), table, assume_associative=True) sage: A1 is A2 True Uniqueness depends on the category:: sage: cat = Algebras(GF(3)).FiniteDimensional().WithBasis() sage: A1 = FiniteDimensionalAlgebra(GF(3), table) sage: A2 = FiniteDimensionalAlgebra(GF(3), table, category=cat) sage: A1 == A2 False sage: A1 is A2 False Checking that equality is still as expected:: sage: A = FiniteDimensionalAlgebra(GF(3), table) sage: B = FiniteDimensionalAlgebra(GF(5), [Matrix([0])]) sage: A == A True sage: B == B True sage: A == B False sage: A != A False sage: B != B False sage: A != B True """ n = len(table) table = [b.base_extend(k) for b in table] for b in table: b.set_immutable() if not (is_Matrix(b) and b.dimensions() == (n, n)): raise ValueError("input is not a multiplication table") table = tuple(table) cat = MagmaticAlgebras(k).FiniteDimensional().WithBasis() cat = cat.or_subcategory(category) if assume_associative: cat = cat.Associative() names = normalize_names(n, names) return super(FiniteDimensionalAlgebra, cls).__classcall__(cls, k, table, names, category=cat)