From 71661d5b17865be426b646136a0d5766290c8d3d Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Tue, 7 May 2024 16:53:26 -0600 Subject: [PATCH] Fix benchmark CI (#9013) * [skip-ci] Fix benchmark CI * [skip-ci] reduce warnings * Fix indexing benchmark --- .github/workflows/benchmarks.yml | 6 +++--- asv_bench/asv.conf.json | 12 ++++++++---- asv_bench/benchmarks/groupby.py | 17 +++++++++-------- asv_bench/benchmarks/indexing.py | 1 + 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml index 7969847c61f..886bcfbd548 100644 --- a/.github/workflows/benchmarks.yml +++ b/.github/workflows/benchmarks.yml @@ -28,8 +28,11 @@ jobs: environment-name: xarray-tests cache-environment: true cache-environment-key: "${{runner.os}}-${{runner.arch}}-py${{env.PYTHON_VERSION}}-${{env.TODAY}}-${{hashFiles(env.CONDA_ENV_FILE)}}-benchmark" + # add "build" because of https://github.com/airspeed-velocity/asv/issues/1385 create-args: >- asv + build + mamba - name: Run benchmarks @@ -47,9 +50,6 @@ jobs: asv machine --yes echo "Baseline: ${{ github.event.pull_request.base.sha }} (${{ github.event.pull_request.base.label }})" echo "Contender: ${GITHUB_SHA} (${{ github.event.pull_request.head.label }})" - # Use mamba for env creation - # export CONDA_EXE=$(which mamba) - export CONDA_EXE=$(which conda) # Run benchmarks for current commit against base ASV_OPTIONS="--split --show-stderr --factor $ASV_FACTOR" asv continuous $ASV_OPTIONS ${{ github.event.pull_request.base.sha }} ${GITHUB_SHA} \ diff --git a/asv_bench/asv.conf.json b/asv_bench/asv.conf.json index a709d0a51a7..9dc86df712d 100644 --- a/asv_bench/asv.conf.json +++ b/asv_bench/asv.conf.json @@ -29,7 +29,7 @@ // If missing or the empty string, the tool will be automatically // determined by looking for tools on the PATH environment // variable. - "environment_type": "conda", + "environment_type": "mamba", "conda_channels": ["conda-forge"], // timeout in seconds for installing any dependencies in environment @@ -41,7 +41,7 @@ // The Pythons you'd like to test against. If not provided, defaults // to the current version of Python used to run `asv`. - "pythons": ["3.10"], + "pythons": ["3.11"], // The matrix of dependencies to test. Each key is the name of a // package (in PyPI) and the values are version numbers. An empty @@ -72,8 +72,12 @@ "sparse": [""], "cftime": [""] }, - - + // fix for bad builds + // https://github.com/airspeed-velocity/asv/issues/1389#issuecomment-2076131185 + "build_command": [ + "python -m build", + "python -mpip wheel --no-deps --no-build-isolation --no-index -w {build_cache_dir} {build_dir}" + ], // Combinations of libraries/python versions can be excluded/included // from the set to test. Each entry is a dictionary containing additional // key-value pairs to include/exclude. diff --git a/asv_bench/benchmarks/groupby.py b/asv_bench/benchmarks/groupby.py index 1b3e55fa659..065c1b3b17f 100644 --- a/asv_bench/benchmarks/groupby.py +++ b/asv_bench/benchmarks/groupby.py @@ -68,6 +68,7 @@ def setup(self, *args, **kwargs): self.ds2d_mean = self.ds2d.groupby("b").mean().compute() +# TODO: These don't work now because we are calling `.compute` explicitly. class GroupByPandasDataFrame(GroupBy): """Run groupby tests using pandas DataFrame.""" @@ -111,11 +112,11 @@ def setup(self, *args, **kwargs): { "b": ("time", np.arange(365.0 * 24)), }, - coords={"time": pd.date_range("2001-01-01", freq="H", periods=365 * 24)}, + coords={"time": pd.date_range("2001-01-01", freq="h", periods=365 * 24)}, ) self.ds2d = self.ds1d.expand_dims(z=10) - self.ds1d_mean = self.ds1d.resample(time="48H").mean() - self.ds2d_mean = self.ds2d.resample(time="48H").mean() + self.ds1d_mean = self.ds1d.resample(time="48h").mean() + self.ds2d_mean = self.ds2d.resample(time="48h").mean() @parameterized(["ndim"], [(1, 2)]) def time_init(self, ndim): @@ -127,7 +128,7 @@ def time_init(self, ndim): def time_agg_small_num_groups(self, method, ndim, use_flox): ds = getattr(self, f"ds{ndim}d") with xr.set_options(use_flox=use_flox): - getattr(ds.resample(time="3M"), method)().compute() + getattr(ds.resample(time="3ME"), method)().compute() @parameterized( ["method", "ndim", "use_flox"], [("sum", "mean"), (1, 2), (True, False)] @@ -135,7 +136,7 @@ def time_agg_small_num_groups(self, method, ndim, use_flox): def time_agg_large_num_groups(self, method, ndim, use_flox): ds = getattr(self, f"ds{ndim}d") with xr.set_options(use_flox=use_flox): - getattr(ds.resample(time="48H"), method)().compute() + getattr(ds.resample(time="48h"), method)().compute() class ResampleDask(Resample): @@ -154,13 +155,13 @@ def setup(self, *args, **kwargs): }, coords={ "time": xr.date_range( - "2001-01-01", freq="H", periods=365 * 24, calendar="noleap" + "2001-01-01", freq="h", periods=365 * 24, calendar="noleap" ) }, ) self.ds2d = self.ds1d.expand_dims(z=10) - self.ds1d_mean = self.ds1d.resample(time="48H").mean() - self.ds2d_mean = self.ds2d.resample(time="48H").mean() + self.ds1d_mean = self.ds1d.resample(time="48h").mean() + self.ds2d_mean = self.ds2d.resample(time="48h").mean() @parameterized(["use_cftime", "use_flox"], [[True, False], [True, False]]) diff --git a/asv_bench/benchmarks/indexing.py b/asv_bench/benchmarks/indexing.py index 892a6cb3758..529d023daa8 100644 --- a/asv_bench/benchmarks/indexing.py +++ b/asv_bench/benchmarks/indexing.py @@ -19,6 +19,7 @@ } basic_assignment_values = { + "1scalar": 0, "1slice": xr.DataArray(randn((3, ny), frac_nan=0.1), dims=["x", "y"]), "1slice-1scalar": xr.DataArray(randn(int(ny / 3) + 1, frac_nan=0.1), dims=["y"]), "2slicess-1scalar": xr.DataArray(