docs: def bound_symbols(self):
          """Set of bound SymPy symbols in the expression"""
          if self._bound_symbols is None:
              res = set.union(
                  set([]), # dummy arg (union fails without arguments)
                  *[_bound_symbols(val) for val in self.kwargs.values()])
              res.update(
                  set([]), # dummy arg (update fails without arguments)
                  *[_bound_symbols(arg) for arg in self.args])
              self._bound_symbols = res
          return self._bound_symbols