This method should of course always return ``True``, unless
this algebra was constructed with ``check_axioms=False`` and
- passed an invalid multiplication table.
+ passed an invalid Jordan or inner-product.
"""
# Used to check whether or not something is zero in an inexact
jordan_product,
inner_product,
field=AA,
- orthonormalize=True,
check_field=True,
- check_axioms=True,
**kwargs):
if check_field:
field=QQ,
orthonormalize=False,
check_field=False,
- check_axioms=False,
- **kwargs)
+ check_axioms=False)
super().__init__(basis,
jordan_product,
inner_product,
field=field,
check_field=check_field,
- check_axioms=check_axioms,
**kwargs)
@cached_method
....: for j in range(n-1) ]
sage: actual == expected
True
+
"""
def __init__(self, B, **kwargs):
- if not B.is_positive_definite():
- raise ValueError("bilinear form is not positive-definite")
+ # The matrix "B" is supplied by the user in most cases,
+ # so it makes sense to check whether or not its positive-
+ # definite unless we are specifically asked not to...
+ if ("check_axioms" not in kwargs) or kwargs["check_axioms"]:
+ if not B.is_positive_definite():
+ raise ValueError("bilinear form is not positive-definite")
+
+ # However, all of the other data for this EJA is computed
+ # by us in manner that guarantees the axioms are
+ # satisfied. So, again, unless we are specifically asked to
+ # verify things, we'll skip the rest of the checks.
+ if "check_axioms" not in kwargs: kwargs["check_axioms"] = False
def inner_product(x,y):
- return (B*x).inner_product(y)
+ return (y.T*B*x)[0,0]
def jordan_product(x,y):
P = x.parent()
- x0 = x[0]
- xbar = x[1:]
- y0 = y[0]
- ybar = y[1:]
- z0 = inner_product(x,y)
+ x0 = x[0,0]
+ xbar = x[1:,0]
+ y0 = y[0,0]
+ ybar = y[1:,0]
+ z0 = inner_product(y,x)
zbar = y0*xbar + x0*ybar
- return P((z0,) + tuple(zbar))
-
- # We know this is a valid EJA, but will double-check
- # if the user passes check_axioms=True.
- if "check_axioms" not in kwargs: kwargs["check_axioms"] = False
+ return P([z0] + zbar.list())
n = B.nrows()
- standard_basis = FreeModule(ZZ, n).basis()
- super(BilinearFormEJA, self).__init__(standard_basis,
+ column_basis = tuple( b.column() for b in FreeModule(ZZ, n).basis() )
+ super(BilinearFormEJA, self).__init__(column_basis,
jordan_product,
inner_product,
**kwargs)