code: def replace_post_order(self, expression: Expression) -> Union[Expression, Sequence[Expression]]:
          
          return self._replace_post_order(expression)[0]
docs: Replace all occurrences of the patterns according to the replacement rules.
  
          Replaces innermost expressions first.
  
          Args:
              expression:
                  The expression to which the replacement rules are applied.
              max_count:
                  If given, at most *max_count* applications of the rules are performed. Otherwise, the rules
                  are applied until there is no more match. If the set of replacement rules is not confluent,
                  the replacement might not terminate without a *max_count* set.
  
          Returns:
              The resulting expression after the application of the replacement rules. This can also be a sequence of
              expressions, if the root expression is replaced with a sequence of expressions by a rule.