From eddef26a20d6e7acbcce1317913e917d7ef5ae5e Mon Sep 17 00:00:00 2001 From: Adam Narozniak Date: Fri, 18 Oct 2024 14:18:53 +0200 Subject: [PATCH 1/3] Drop support for python 3.8 --- datasets/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datasets/pyproject.toml b/datasets/pyproject.toml index 73523af2039..49204693bed 100644 --- a/datasets/pyproject.toml +++ b/datasets/pyproject.toml @@ -51,7 +51,7 @@ exclude = [ ] [tool.poetry.dependencies] -python = "^3.8" +python = "^3.9" numpy = "^1.21.0" datasets = ">=2.14.6 <2.20.0" pillow = { version = ">=6.2.1", optional = true } From bea598dce4c57462a69efab85f8106583796fa96 Mon Sep 17 00:00:00 2001 From: Adam Narozniak Date: Fri, 18 Oct 2024 15:44:53 +0200 Subject: [PATCH 2/3] Apply errors from linters --- datasets/flwr_datasets/visualization/bar_plot.py | 14 +++++++++----- .../visualization/comparison_label_distribution.py | 7 ++++++- .../visualization/label_distribution.py | 6 ++++-- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/datasets/flwr_datasets/visualization/bar_plot.py b/datasets/flwr_datasets/visualization/bar_plot.py index 2b09fb189c7..0f6936976fc 100644 --- a/datasets/flwr_datasets/visualization/bar_plot.py +++ b/datasets/flwr_datasets/visualization/bar_plot.py @@ -22,6 +22,7 @@ from matplotlib import colors as mcolors from matplotlib import pyplot as plt from matplotlib.axes import Axes +from matplotlib.figure import Figure # pylint: disable=too-many-arguments,too-many-locals,too-many-branches @@ -82,10 +83,11 @@ def _plot_bar( if "stacked" not in plot_kwargs: plot_kwargs["stacked"] = True - axis = dataframe.plot( + axis_df: Axes = dataframe.plot( ax=axis, **plot_kwargs, ) + assert axis_df is not None, "axis is None after plotting using DataFrame.plot()" if legend: if legend_kwargs is None: @@ -104,20 +106,22 @@ def _plot_bar( shift = min(0.05 + max_len_label_str / 100, 0.15) legend_kwargs["bbox_to_anchor"] = (1.0 + shift, 0.5) - handles, legend_labels = axis.get_legend_handles_labels() - _ = axis.figure.legend( + handles, legend_labels = axis_df.get_legend_handles_labels() + figure = axis_df.figure + assert isinstance(figure, Figure), "figure extraction from axes is not a Figure" + _ = figure.legend( handles=handles[::-1], labels=legend_labels[::-1], **legend_kwargs ) # Heuristic to make the partition id on xticks non-overlapping if partition_id_axis == "x": - xticklabels = axis.get_xticklabels() + xticklabels = axis_df.get_xticklabels() if len(xticklabels) > 20: # Make every other xtick label not visible for i, label in enumerate(xticklabels): if i % 2 == 1: label.set_visible(False) - return axis + return axis_df def _initialize_figsize( diff --git a/datasets/flwr_datasets/visualization/comparison_label_distribution.py b/datasets/flwr_datasets/visualization/comparison_label_distribution.py index 17b9a9aec25..c741ddee219 100644 --- a/datasets/flwr_datasets/visualization/comparison_label_distribution.py +++ b/datasets/flwr_datasets/visualization/comparison_label_distribution.py @@ -30,6 +30,7 @@ # pylint: disable=too-many-arguments,too-many-locals +# mypy: disable-error-code="call-overload" def plot_comparison_label_distribution( partitioner_list: list[Partitioner], label_name: Union[str, list[str]], @@ -153,7 +154,11 @@ def plot_comparison_label_distribution( figsize = _initialize_comparison_figsize(figsize, num_partitioners) axes_sharing = _initialize_axis_sharing(size_unit, plot_type, partition_id_axis) fig, axes = plt.subplots( - 1, num_partitioners, layout="constrained", figsize=figsize, **axes_sharing + nrows=1, + ncols=num_partitioners, + figsize=figsize, + layout="constrained", + **axes_sharing, ) if titles is None: diff --git a/datasets/flwr_datasets/visualization/label_distribution.py b/datasets/flwr_datasets/visualization/label_distribution.py index b1183c225b8..550a4ecae72 100644 --- a/datasets/flwr_datasets/visualization/label_distribution.py +++ b/datasets/flwr_datasets/visualization/label_distribution.py @@ -245,5 +245,7 @@ def plot_label_distributions( plot_kwargs, legend_kwargs, ) - assert axis is not None - return axis.figure, axis, dataframe + assert axis is not None, "axis is None after plotting" + figure = axis.figure + assert isinstance(figure, Figure), "figure extraction from axes is not a Figure" + return figure, axis, dataframe From ffdf723f053db6ac858a2e4c71ba6304171d7625 Mon Sep 17 00:00:00 2001 From: Adam Narozniak Date: Fri, 18 Oct 2024 15:56:36 +0200 Subject: [PATCH 3/3] Update python in the datasets e2e tests --- datasets/e2e/pytorch/pyproject.toml | 2 +- datasets/e2e/scikit-learn/pyproject.toml | 2 +- datasets/e2e/tensorflow/pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/datasets/e2e/pytorch/pyproject.toml b/datasets/e2e/pytorch/pyproject.toml index 009ad2d7423..3f1f12d5f4b 100644 --- a/datasets/e2e/pytorch/pyproject.toml +++ b/datasets/e2e/pytorch/pyproject.toml @@ -9,7 +9,7 @@ description = "Flower Datasets with PyTorch" authors = ["The Flower Authors "] [tool.poetry.dependencies] -python = "^3.8" +python = "^3.9" flwr-datasets = { path = "./../../", extras = ["vision"] } torch = "^1.12.0" torchvision = "^0.14.1" diff --git a/datasets/e2e/scikit-learn/pyproject.toml b/datasets/e2e/scikit-learn/pyproject.toml index 48356e4a945..ca7fb45d82b 100644 --- a/datasets/e2e/scikit-learn/pyproject.toml +++ b/datasets/e2e/scikit-learn/pyproject.toml @@ -9,7 +9,7 @@ description = "Flower Datasets with scikit-learn" authors = ["The Flower Authors "] [tool.poetry.dependencies] -python = "^3.8" +python = "^3.9" flwr-datasets = { path = "./../../", extras = ["vision"] } scikit-learn = "^1.2.0" parameterized = "==0.9.0" diff --git a/datasets/e2e/tensorflow/pyproject.toml b/datasets/e2e/tensorflow/pyproject.toml index dbb6720219b..fbfc8eb8945 100644 --- a/datasets/e2e/tensorflow/pyproject.toml +++ b/datasets/e2e/tensorflow/pyproject.toml @@ -9,7 +9,7 @@ description = "Flower Datasets with TensorFlow" authors = ["The Flower Authors "] [tool.poetry.dependencies] -python = ">=3.8,<3.11" +python = ">=3.9,<3.11" flwr-datasets = { path = "./../../", extras = ["vision"] } tensorflow-cpu = "^2.9.1, !=2.11.1" tensorflow-io-gcs-filesystem = "<0.35.0"