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)