docs: def emptyPrinter(self, expr):
          """Fallback printer"""
          indent_str = "    " * (self._print_level - 1)
          lines = []
          if isinstance(expr.__class__, Singleton):
              # We exploit that Singletons override __expr__ to directly return
              # their name
              return indent_str + repr(expr)
          if isinstance(expr, Expression):
              args = expr.args
              keys = expr.minimal_kwargs.keys()
              lines.append(indent_str + expr.__class__.__name__ + "(")
              for arg in args:
                  lines.append(self.doprint(arg) + ",")
              for key in keys:
                  arg = expr.kwargs[key]
                  lines.append(
                      ("    " * self._print_level) + key + '=' +
                      self.doprint(arg).lstrip() + ",")
              if len(args) > 0 or len(keys) > 0:
                  lines[-1] = lines[-1][:-1]  # drop trailing comma for last arg
              lines[-1] += ")"
          elif isinstance(expr, (tuple, list)):
              delims = ("(", ")") if isinstance(expr, tuple) else ("[", "]")
              if len(expr) == 1:
                  delims = (delims[0], "," + delims[1])
              lines.append(
                  indent_str + delims[0] +
                  ", ".join([render_head_repr(v) for v in expr]) +
                  delims[1])
          else:
              lines.append(indent_str + SympyReprPrinter().doprint(expr))
          return "\n".join(lines)