Discovering and Dissecting Blades

I’m working on a GA programming project on the side. I’m trying to figure out how to tell if an arbitrary multivector is a blade and some way to break a blade up into a set of valid vectors which make it up. However, I’m having difficulty figuring it out beyond the easy stuff; blades must be of a single grade, and grades 0 and 1 are always blades. I’m curious if anyone knows how to do this for an arbitrary geometry.

Assume you are interested in the maximum number of blades. Like many things in GA, it depends on the grade, signature, and dimension. Grades n and n-1 also result in 1 blade. And if the dimension is 3 or less, every multivector of a particular grade is a blade; 4 dimensions and above is more interesting! For bivectors for many (but not all) signatures you can represent any bivector as a sum of n/2 blades; this is called bivector decomposition. Don’t know about grade 3 in high dimension spaces.

Part of my problem is that I’m working in a context where the system doesn’t know how many dimensions it’s dealing with.

I’m storing the information as a list of components with arbitrary bases vectors. It has the information it needs to operate from those bases dircetly instead of pulling it from a shared geometry with all the bases vectors/info.

The current method I’m using is a kind of node walk, where it checks that all the components in the multivector connect to each other with an overlapping basis. So a multivector like e_123+e_345+e_567 would be marked as a blade, while e_12+e_34 would not.

For the decomposition into vectors, I could just treat the components as the blades (because they always will be), but that’s not particularly interesting and not really what I’m looking for anyway. Rather given a more complex blade, how would one find it’s components without simple guess and check?