Skip to content

sympy.simplify(mv) blows up with Recursion #53

@eric-wieser

Description

@eric-wieser
>>> ga, e1, e2, e3, ep, en = galgebra.ga.Ga.build('e_1 e_2 e_3 e_{+} e_{-}',g=[1,1,1, 1, -1])
>>> sympy.simplify(e1)
RecursionError: maximum recursion depth exceeded while calling a Python object
>>> list(e1)
RecursionError: maximum recursion depth exceeded while calling a Python object

This is because:

  • sympy.simplify and list calls iter(e1)
  • Mv.__iter__ is not defined, so it defaults to:
    def __iter__(self):
        i = 0
        while True:
            try:
                yield self[i]
            except IndexError:
                break
            i += 1
    ```
    
  • Mv.__getitem__ will return 0 forever, as it implies grade selection

Possible fixes:

  • Have Mv.__iter__ raise TypeError
  • Have Mv.__iter__ iterate only up to the highest grade present

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions