From 7d9123a712c29d1c9332868ce6d7a923735bae28 Mon Sep 17 00:00:00 2001 From: alemikhov Date: Wed, 5 Jun 2024 10:02:15 +0000 Subject: [PATCH 1/4] [issue-307] add 2 extra (on left and right) dots out of zommed box --- .../aggregation/plotly_aggregator_parser.py | 2 ++ tests/test_figure_resampler.py | 10 +++++----- tests/test_figurewidget_resampler.py | 14 +++++++------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/plotly_resampler/aggregation/plotly_aggregator_parser.py b/plotly_resampler/aggregation/plotly_aggregator_parser.py index c359aa29..3c047e80 100644 --- a/plotly_resampler/aggregation/plotly_aggregator_parser.py +++ b/plotly_resampler/aggregation/plotly_aggregator_parser.py @@ -85,6 +85,8 @@ def get_start_end_indices(hf_trace_data, axis_type, start, end) -> Tuple[int, in # Search the index-positions start_idx = bisect.bisect_left(hf_trace_data["x"], start) end_idx = bisect.bisect_right(hf_trace_data["x"], end) + start_idx = max(0, start_idx - 1) + end_idx = min(end_idx + 1, len(hf_trace_data["x"])) return start_idx, end_idx @staticmethod diff --git a/tests/test_figure_resampler.py b/tests/test_figure_resampler.py index 640914ec..914ac8eb 100644 --- a/tests/test_figure_resampler.py +++ b/tests/test_figure_resampler.py @@ -296,7 +296,7 @@ def test_log_axis(): assert len(out) == 2 assert (x1 - x0) < 10 assert len(out[1]["x"]) == 1000 - assert out[-1]["x"][0] >= 100 + assert out[-1]["x"][0] >= 99 assert out[-1]["x"][-1] <= 50_000 @@ -997,8 +997,8 @@ def test_time_tz_slicing(): start_idx, end_idx = PlotlyAggregatorParser.get_start_end_indices( hf_data_dict, hf_data_dict["axis_type"], t_start, t_stop ) - assert (s.index[start_idx] - t_start) <= pd.Timedelta(seconds=1) - assert (s.index[min(end_idx, n - 1)] - t_stop) <= pd.Timedelta(seconds=1) + assert (s.index[start_idx] - t_start) <= pd.Timedelta(seconds=2) + assert (s.index[min(end_idx, n - 1)] - t_stop) <= pd.Timedelta(seconds=2) def test_time_tz_slicing_different_timestamp(): @@ -1064,10 +1064,10 @@ def test_different_tz_no_tz_series_slicing(): ) assert ( s.tz_localize(None).index[start_idx].tz_localize(t_start.tz) - t_start - ) <= pd.Timedelta(seconds=1) + ) <= pd.Timedelta(seconds=2) assert ( s.tz_localize(None).index[end_idx].tz_localize(t_stop.tz) - t_stop - ) <= pd.Timedelta(seconds=1) + ) <= pd.Timedelta(seconds=2) def test_multiple_tz_no_tz_series_slicing(): diff --git a/tests/test_figurewidget_resampler.py b/tests/test_figurewidget_resampler.py index 03f73bd4..06fb61d2 100644 --- a/tests/test_figurewidget_resampler.py +++ b/tests/test_figurewidget_resampler.py @@ -794,7 +794,7 @@ def test_hf_data_property_reload_data(): assert np.all(fwr.hf_data[0]["y"] == new_y) fwr.reload_data() - assert (fwr.data[0]["x"][0] >= 10_000) & (fwr.data[0]["x"][-1] <= 20_000) + assert (fwr.data[0]["x"][0] >= 9_999) & (fwr.data[0]["x"][-1] <= 20_001) assert np.all(fwr.data[0]["y"] == new_y[fwr.data[0]["x"]]) assert (fwr.layout["yaxis"].range[0] == -20) & (fwr.layout["yaxis"].range[-1] == 3) @@ -869,8 +869,8 @@ def test_hf_data_property_subplots_reload_data(): assert np.all(fwr.hf_data[0]["y"] == new_y) fwr.reload_data() - assert (fwr.data[0]["x"][0] >= 10_000) & (fwr.data[0]["x"][-1] <= 20_000) - assert (fwr.data[1]["x"][0] >= 40_000) & (fwr.data[1]["x"][-1] <= 60_000) + assert (fwr.data[0]["x"][0] >= 9_999) & (fwr.data[0]["x"][-1] <= 20_001) + assert (fwr.data[1]["x"][0] >= 39_999) & (fwr.data[1]["x"][-1] <= 60_001) assert np.all(fwr.data[0]["y"] == new_y[fwr.data[0]["x"]]) assert np.all(fwr.data[1]["y"] == new_y[fwr.data[1]["x"]]) assert (fwr.layout["yaxis"].range[0] == -20) & (fwr.layout["yaxis"].range[-1] == 3) @@ -900,8 +900,8 @@ def test_hf_data_subplots_non_shared_xaxes(): assert 0 <= x_0[0] <= (n / 1000) assert (n - 1000) <= x_0[-1] <= n - 1 x_1 = fwr.data[1]["x"] - assert 40_000 <= x_1[0] <= 40_000 + (20_000 / 1000) - assert (60_000 - 20_000 / 1_000) <= x_1[-1] <= 60_000 + assert 39_999 <= x_1[0] <= 40_001 + (20_000 / 1000) + assert (60_000 - 20_000 / 1_000) <= x_1[-1] <= 60_001 def test_hf_data_subplots_non_shared_xaxes_row_col_none(): @@ -925,8 +925,8 @@ def test_hf_data_subplots_non_shared_xaxes_row_col_none(): assert 0 <= x_0[0] <= (n / 1000) assert (n - 1000) <= x_0[-1] <= n - 1 x_1 = fwr.data[1]["x"] - assert 40_000 <= x_1[0] <= 40_000 + (20_000 / 1000) - assert (60_000 - 20_000 / 1_000) <= x_1[-1] <= 60_000 + assert 39_999 <= x_1[0] <= 40_001 + (20_000 / 1000) + assert (60_000 - 20_000 / 1_000) <= x_1[-1] <= 60_001 def test_updates_two_traces(): From b5423f7d8f64fe4571ef85fb5f3f4b62d3da16ef Mon Sep 17 00:00:00 2001 From: alemikhov Date: Sun, 23 Jun 2024 13:25:12 +0000 Subject: [PATCH 2/4] add change log and alter boundaries --- CHANGELOG.md | 3 +++ plotly_resampler/aggregation/plotly_aggregator_parser.py | 6 ++++-- pyproject.toml | 2 +- tests/test_figure_resampler.py | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d02f0609..034a2414 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Latest +# v0.10.1 +## What's Changed +After resampling the figure, the line goes beyond figure frontier indicating presence of data. # v0.10.0 ## New Features diff --git a/plotly_resampler/aggregation/plotly_aggregator_parser.py b/plotly_resampler/aggregation/plotly_aggregator_parser.py index 3c047e80..a3f594f3 100644 --- a/plotly_resampler/aggregation/plotly_aggregator_parser.py +++ b/plotly_resampler/aggregation/plotly_aggregator_parser.py @@ -70,6 +70,8 @@ def get_start_end_indices(hf_trace_data, axis_type, start, end) -> Tuple[int, in x_step = hf_trace_data["x"].step start_idx = int(max((start - x_start) // x_step, 0)) end_idx = int((end - x_start) // x_step) + start_idx = max(0, start_idx - 1) + end_idx = min(end_idx + 1, len(hf_trace_data["x"])) return start_idx, end_idx # TODO: this can be performed as-well for a fixed frequency range-index w/ freq @@ -85,8 +87,8 @@ def get_start_end_indices(hf_trace_data, axis_type, start, end) -> Tuple[int, in # Search the index-positions start_idx = bisect.bisect_left(hf_trace_data["x"], start) end_idx = bisect.bisect_right(hf_trace_data["x"], end) - start_idx = max(0, start_idx - 1) - end_idx = min(end_idx + 1, len(hf_trace_data["x"])) + # start_idx = max(0, start_idx - 1) + # end_idx = min(end_idx + 1, len(hf_trace_data["x"])) return start_idx, end_idx @staticmethod diff --git a/pyproject.toml b/pyproject.toml index 115523ad..0b251bf0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "plotly-resampler" # Do not forget to update the __init__.py __version__ variable -version = "0.10.0" +version = "0.10.1" description = "Visualizing large time series with plotly" authors = ["Jonas Van Der Donckt", "Jeroen Van Der Donckt", "Emiel Deprost"] readme = "README.md" diff --git a/tests/test_figure_resampler.py b/tests/test_figure_resampler.py index 914ac8eb..dab9795f 100644 --- a/tests/test_figure_resampler.py +++ b/tests/test_figure_resampler.py @@ -297,7 +297,7 @@ def test_log_axis(): assert (x1 - x0) < 10 assert len(out[1]["x"]) == 1000 assert out[-1]["x"][0] >= 99 - assert out[-1]["x"][-1] <= 50_000 + assert out[-1]["x"][-1] <= 50_001 def test_add_traces_from_other_figure(): From 2c1c94af5fc32c8d7cb96ef54c94bfb305e3bb1c Mon Sep 17 00:00:00 2001 From: Aleksandr Lemikhov Date: Sun, 23 Jun 2024 15:47:39 +0200 Subject: [PATCH 3/4] add extra point --- plotly_resampler/aggregation/plotly_aggregator_parser.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plotly_resampler/aggregation/plotly_aggregator_parser.py b/plotly_resampler/aggregation/plotly_aggregator_parser.py index a3f594f3..d9049363 100644 --- a/plotly_resampler/aggregation/plotly_aggregator_parser.py +++ b/plotly_resampler/aggregation/plotly_aggregator_parser.py @@ -87,8 +87,8 @@ def get_start_end_indices(hf_trace_data, axis_type, start, end) -> Tuple[int, in # Search the index-positions start_idx = bisect.bisect_left(hf_trace_data["x"], start) end_idx = bisect.bisect_right(hf_trace_data["x"], end) - # start_idx = max(0, start_idx - 1) - # end_idx = min(end_idx + 1, len(hf_trace_data["x"])) + start_idx = max(0, start_idx - 1) + end_idx = min(end_idx + 1, len(hf_trace_data["x"])) return start_idx, end_idx @staticmethod From c6fc13c6c5aa493e777d47222e65da73c95fcf64 Mon Sep 17 00:00:00 2001 From: Aleksandr Lemikhov Date: Mon, 24 Jun 2024 09:03:33 +0200 Subject: [PATCH 4/4] add PR link to CONTRIBUTING.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 034a2414..b95523e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ # v0.10.1 ## What's Changed -After resampling the figure, the line goes beyond figure frontier indicating presence of data. +After resampling the figure, the line goes beyond figure frontier indicating presence of data. https://github.com/predict-idlab/plotly-resampler/pull/308 # v0.10.0 ## New Features