from __future__ import annotations

from dataclasses import dataclass
import IPython

print(IPython.__version__)

Supported IPython display formatters:

ip = get_ipython()
for mime in ip.display_formatter.formatters:
    print(mime)

Let’s write a simple class that will output different mime:

@dataclass
class Mime:
    math: str

    def _repr_mimebundle_(
        self,
        include: Container[str] | None = None,
        exclude: Container[str] | None = None,
        **kwargs,
    ) -> dict[str, str]:
        string = self.math
        data = {
            "text/plain": string,
            "text/html": (latex := f"\\[{string}\\]"),
            "text/markdown": f"$${string}$$",
            # "image/svg+xml":,
            # "image/png":,
            # "application/pdf":,
            # "image/jpeg":,
            "text/latex": latex,
            # "application/json":,
            # "application/javascript":,
        }
        if include:
            data = {k: v for k, v in data.items() if k in include}
        if exclude:
            data = {k: v for k, v in data.items() if k not in exclude}
        return data
mime = Mime("E = mc^2")
mime

Note that #7561 made ipynb reader aware of this, and #7563 made ipynb writer aware of this.