hyb
2025-11-07 cadac0a99d87c53805a07f3b4ca7fd11e524fe4a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import numpy as np
 
import pandas._config.config as cf
 
from pandas import (
    DataFrame,
    MultiIndex,
)
 
 
class TestTableSchemaRepr:
    def test_publishes(self, ip):
        ipython = ip.instance(config=ip.config)
        df = DataFrame({"A": [1, 2]})
        objects = [df["A"], df]  # dataframe / series
        expected_keys = [
            {"text/plain", "application/vnd.dataresource+json"},
            {"text/plain", "text/html", "application/vnd.dataresource+json"},
        ]
 
        opt = cf.option_context("display.html.table_schema", True)
        last_obj = None
        for obj, expected in zip(objects, expected_keys):
            last_obj = obj
            with opt:
                formatted = ipython.display_formatter.format(obj)
            assert set(formatted[0].keys()) == expected
 
        with_latex = cf.option_context("styler.render.repr", "latex")
 
        with opt, with_latex:
            formatted = ipython.display_formatter.format(last_obj)
 
        expected = {
            "text/plain",
            "text/html",
            "text/latex",
            "application/vnd.dataresource+json",
        }
        assert set(formatted[0].keys()) == expected
 
    def test_publishes_not_implemented(self, ip):
        # column MultiIndex
        # GH#15996
        midx = MultiIndex.from_product([["A", "B"], ["a", "b", "c"]])
        df = DataFrame(
            np.random.default_rng(2).standard_normal((5, len(midx))), columns=midx
        )
 
        opt = cf.option_context("display.html.table_schema", True)
 
        with opt:
            formatted = ip.instance(config=ip.config).display_formatter.format(df)
 
        expected = {"text/plain", "text/html"}
        assert set(formatted[0].keys()) == expected
 
    def test_config_on(self):
        df = DataFrame({"A": [1, 2]})
        with cf.option_context("display.html.table_schema", True):
            result = df._repr_data_resource_()
 
        assert result is not None
 
    def test_config_default_off(self):
        df = DataFrame({"A": [1, 2]})
        with cf.option_context("display.html.table_schema", False):
            result = df._repr_data_resource_()
 
        assert result is None
 
    def test_enable_data_resource_formatter(self, ip):
        # GH#10491
        formatters = ip.instance(config=ip.config).display_formatter.formatters
        mimetype = "application/vnd.dataresource+json"
 
        with cf.option_context("display.html.table_schema", True):
            assert "application/vnd.dataresource+json" in formatters
            assert formatters[mimetype].enabled
 
        # still there, just disabled
        assert "application/vnd.dataresource+json" in formatters
        assert not formatters[mimetype].enabled
 
        # able to re-set
        with cf.option_context("display.html.table_schema", True):
            assert "application/vnd.dataresource+json" in formatters
            assert formatters[mimetype].enabled
            # smoke test that it works
            ip.instance(config=ip.config).display_formatter.format(cf)