Description
Following is the code (as of 2025 March 25) for the .is_blade method, which I suspect was motivated by page 533 of Geometric Algebra for Computer Science (Dorst, Fontijne, & Mann, 2007)
def is_blade(self) -> bool:
"""
True is self is blade, otherwise False
sets self.blade_flg and returns value
"""
if self.blade_flg is not None:
return self.blade_flg
else:
if self.is_versor():
if self.i_grade is not None:
self.blade_flg = True
else:
self.blade_flg = False
else:
self.blade_flg = False
return self.blade_flg
Consider the example b = e0 + e1
in the algebra G(1,1). The null vector b
is_ a 1-blade. Within the code, with b
taking the place of self
, b.is_versor()
will evaluate as False
, so b.blade_flg
will be set to False
, so b.is_blade()
will return False
even though b
is in fact a blade. An example of a 2-blade which is not a versor is B = (e0 + e1)^e2
in the algebra G(1,2).
Upshot: As currently written, the multivector method .is_blade()
will fail for certain multivectors.
As pointed out on page 532 of GACS , whether a multivector is a versor depends upon the scalar product ("metric") used to generate the geometric algebra. Whether a multivector is a blade is independent of the scalar product, however, as the outer product is not a metric concept.