code: def _flatterm_iter(cls, expression: Expression) -> Iterator[TermAtom]:
          
          if isinstance(expression, Operation):
              yield type(expression)
              for operand in op_iter(expression):
                  yield from cls._flatterm_iter(operand)
              yield OPERATION_END
          elif isinstance(expression, SymbolWildcard):
              yield expression.symbol_type
          elif isinstance(expression, (Symbol, Wildcard)):
              yield expression
          else:
              assert False, "Unreachable unless a new unsupported expression type is added."
docs: Generator that yields the atoms of the expressions in prefix notation with operation end markers.