def test_dict_unflatten(self): """Test passing a spec as keywords.""" st._arrow_vega_lite_chart(df1, x="foo", boink_boop=100, baz={"boz": "booz"}) proto = self.get_delta_from_queue().new_element.arrow_vega_lite_chart pd.testing.assert_frame_equal(bytes_to_data_frame(proto.data.data), df1, check_dtype=False) self.assertDictEqual( json.loads(proto.spec), merge_dicts( autosize_spec, { "baz": { "boz": "booz" }, "boink": { "boop": 100 }, "encoding": { "x": "foo" }, }, ), )
def test_st_arrow_table(self): """Test st._arrow_table.""" from streamlit.type_util import bytes_to_data_frame df = pd.DataFrame([[1, 2], [3, 4]], columns=["col1", "col2"]) st._arrow_table(df) proto = self.get_delta_from_queue().new_element.arrow_table pd.testing.assert_frame_equal(bytes_to_data_frame(proto.data), df)
def test_st_arrow_dataframe(self): """Test st._arrow_dataframe.""" from streamlit.type_util import bytes_to_data_frame df = pd.DataFrame({"one": [1, 2], "two": [11, 22]}) st._arrow_dataframe(df) proto = self.get_delta_from_queue().new_element.arrow_data_frame pd.testing.assert_frame_equal(bytes_to_data_frame(proto.data), df)
def test_data_in_spec(self): """Test passing data=df inside the spec.""" st._arrow_vega_lite_chart({"mark": "rect", "data": df1}) proto = self.get_delta_from_queue().new_element.arrow_vega_lite_chart pd.testing.assert_frame_equal(bytes_to_data_frame(proto.data.data), df1, check_dtype=False) self.assertDictEqual(json.loads(proto.spec), merge_dicts(autosize_spec, {"mark": "rect"}))
def test_deltas_that_melt_dataframes(self): deltas = self._get_deltas_that_melt_dataframes() for delta in deltas: element = delta(DATAFRAME) element._arrow_add_rows(NEW_ROWS) proto = bytes_to_data_frame( self.get_delta_from_queue().arrow_add_rows.data.data) pd.testing.assert_frame_equal(proto, MELTED_DATAFRAME)
def test_display_values(self): df = pd.DataFrame([[1, 2, 3], [4, 5, 6]], ) styler = df.style.format("{:.2%}") st._arrow_table(styler) expected = pd.DataFrame([["100.00%", "200.00%", "300.00%"], ["400.00%", "500.00%", "600.00%"]], ) proto = self.get_delta_from_queue().new_element.arrow_table pd.testing.assert_frame_equal( bytes_to_data_frame(proto.styler.display_values), expected)
def test_no_args_add_rows(self): """Test that you can call _arrow_add_rows on a arrow_vega_lite_chart (without data).""" chart = st._arrow_vega_lite_chart({"mark": "rect"}) proto = self.get_delta_from_queue().new_element.arrow_vega_lite_chart self.assertEqual(proto.HasField("data"), False) chart._arrow_add_rows(df1) proto = self.get_delta_from_queue().arrow_add_rows pd.testing.assert_frame_equal( bytes_to_data_frame(proto.data.data), df1, check_dtype=False )
def test_arrow_area_chart(self): """Test st._arrow_area_chart.""" df = pd.DataFrame([[20, 30, 50]], columns=["a", "b", "c"]) EXPECTED_DATAFRAME = pd.DataFrame( [[0, "a", 20], [0, "b", 30], [0, "c", 50]], index=[0, 1, 2], columns=["index", "variable", "value"], ) st._arrow_area_chart(df) proto = self.get_delta_from_queue().new_element.arrow_vega_lite_chart chart_spec = json.loads(proto.spec) self.assertEqual(chart_spec["mark"], "area") pd.testing.assert_frame_equal( bytes_to_data_frame(proto.datasets[0].data.data), EXPECTED_DATAFRAME, )
def test_arrow_line_chart_with_generic_index(self): """Test st._arrow_line_chart with a generic index.""" df = pd.DataFrame([[20, 30, 50]], columns=["a", "b", "c"]) df.set_index("a", inplace=True) EXPECTED_DATAFRAME = pd.DataFrame( [[20, "b", 30], [20, "c", 50]], index=[0, 1], columns=["a", "variable", "value"], ) st._arrow_line_chart(df) proto = self.get_delta_from_queue().new_element.arrow_vega_lite_chart chart_spec = json.loads(proto.spec) self.assertEqual(chart_spec["mark"], "line") pd.testing.assert_frame_equal( bytes_to_data_frame(proto.datasets[0].data.data), EXPECTED_DATAFRAME, )
def test_st_arrow_line_chart(self): """Test st._arrow_line_chart.""" from streamlit.type_util import bytes_to_data_frame df = pd.DataFrame([[10, 20, 30]], columns=["a", "b", "c"]) EXPECTED_DATAFRAME = pd.DataFrame( [[0, "a", 10], [0, "b", 20], [0, "c", 30]], index=[0, 1, 2], columns=["index", "variable", "value"], ) st._arrow_line_chart(df, width=640, height=480) proto = self.get_delta_from_queue().new_element.arrow_vega_lite_chart chart_spec = json.loads(proto.spec) self.assertEqual(chart_spec["mark"], "line") self.assertEqual(chart_spec["width"], 640) self.assertEqual(chart_spec["height"], 480) pd.testing.assert_frame_equal( bytes_to_data_frame(proto.datasets[0].data.data), EXPECTED_DATAFRAME, )
def test_altair_chart(self): """Test that it can be called with args.""" df = pd.DataFrame([["A", "B", "C", "D"], [28, 55, 43, 91]], index=["a", "b"]).T chart = alt.Chart(df).mark_bar().encode(x="a", y="b") EXPECTED_DATAFRAME = pd.DataFrame({ "a": ["A", "B", "C", "D"], "b": [28, 55, 43, 91], }) st._arrow_altair_chart(chart) proto = self.get_delta_from_queue().new_element.arrow_vega_lite_chart self.assertEqual(proto.HasField("data"), False) self.assertEqual(len(proto.datasets), 1) pd.testing.assert_frame_equal( bytes_to_data_frame(proto.datasets[0].data.data), EXPECTED_DATAFRAME) spec_dict = json.loads(proto.spec) self.assertEqual( spec_dict["encoding"], { "y": { "field": "b", "type": "quantitative" }, "x": { "field": "a", "type": "nominal" }, }, ) self.assertEqual(spec_dict["data"], {"name": proto.datasets[0].name}) self.assertEqual(spec_dict["mark"], "bar") self.assertTrue("config" in spec_dict) self.assertTrue("encoding" in spec_dict)
def test_dataframe_data(self): df = mock_data_frame() st._arrow_table(df) proto = self.get_delta_from_queue().new_element.arrow_table pd.testing.assert_frame_equal(bytes_to_data_frame(proto.data), df)