diff --git a/.gitignore b/.gitignore index c13b759..c5a3679 100644 --- a/.gitignore +++ b/.gitignore @@ -162,3 +162,5 @@ cython_debug/ # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ .pdm-python +/docs/source/CHANGELOG.md +/docs/html/ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..7d297f0 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,189 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +This project uses [*towncrier*](https://towncrier.readthedocs.io/) and the changes for the upcoming release can be found in . + + + +## [0.1.0](https://github.com/airspeed-velocity/asv_runner/tree/0.1.0) - 11-09-2023 + + +### Bug Fixes + +- Default `max_time` is set to `60.0` seconds to fix `--quick`. + ([#29](https://github.com/airspeed-velocity/asv_runner/issues/29)) +- `asv` will not try to access a missing `colorama` attribute. + ([#32](https://github.com/airspeed-velocity/asv_runner/issues/32)) + +### Other Changes and Additions + +- `pip-tools` and `pip-compile` are used to pin transitive dependencies for + read the docs. + ([#31](https://github.com/airspeed-velocity/asv_runner/issues/31)) + + +## [0.0.9](https://github.com/airspeed-velocity/asv_runner/tree/0.0.9) - 20-08-2023 + + +### New Features + +- Adds a `skip_benchmark` decorator. + +```python +from asv_runner.benchmarks.helpers import skip_benchmark + +@skip_benchmark +class TimeSuite: + """ + An example benchmark that times the performance of various kinds + of iterating over dictionaries in Python. + """ + def setup(self): + self.d = {} + for x in range(500): + self.d[x] = None + + def time_keys(self): + for key in self.d.keys(): + pass + + def time_values(self): + for value in self.d.values(): + pass + + def time_range(self): + d = self.d + for key in range(500): + d[key] +``` + +Usage requires `asv 0.6.0`. +([#13](https://github.com/airspeed-velocity/asv_runner/issues/13)) +- Finely grained `skip_benchmark_if` and `skip_params_if` have been added. + +```python +from asv_runner.benchmarks.mark import skip_benchmark_if, skip_params_if +import datetime + +class TimeSuite: + """ + An example benchmark that times the performance of various kinds + of iterating over dictionaries in Python. + """ + params = [100, 200, 300, 400, 500] + param_names = ["size"] + + def setup(self, size): + self.d = {} + for x in range(size): + self.d[x] = None + + @skip_benchmark_if(datetime.datetime.now().hour >= 12) + def time_keys(self, size): + for key in self.d.keys(): + pass + + @skip_benchmark_if(datetime.datetime.now().hour >= 12) + def time_values(self, size): + for value in self.d.values(): + pass + + @skip_benchmark_if(datetime.datetime.now().hour >= 12) + def time_range(self, size): + d = self.d + for key in range(size): + d[key] + + # Skip benchmarking when size is either 100 or 200 and the current hour is +12 or later. + @skip_params_if([(100,), (200,)], + datetime.datetime.now().hour >= 12) + def time_dict_update(self, size): + d = self.d + for i in range(size): + d[i] = i +``` + +Usage requires `asv 0.6.0`. +([#17](https://github.com/airspeed-velocity/asv_runner/issues/17)) +- Benchmarks can now be parameterized using decorators. + +```python +import numpy as np +from asv_runner.benchmarks.mark import parameterize + +@parameterize({"n":[10, 100]}) +def time_sort(n): + np.sort(np.random.rand(n)) + +@parameterize({'n': [10, 100], 'func_name': ['range', 'arange']}) +def time_ranges_multi(n, func_name): + f = {'range': range, 'arange': np.arange}[func_name] + for i in f(n): + pass + +@parameterize({"size": [10, 100, 200]}) +class TimeSuiteDecoratorSingle: + def setup(self, size): + self.d = {} + for x in range(size): + self.d[x] = None + + def time_keys(self, size): + for key in self.d.keys(): + pass + + def time_values(self, size): + for value in self.d.values(): + pass + +@parameterize({'n': [10, 100], 'func_name': ['range', 'arange']}) +class TimeSuiteMultiDecorator: + def time_ranges(self, n, func_name): + f = {'range': range, 'arange': np.arange}[func_name] + for i in f(n): + pass +``` + +Usage requires `asv 0.6.0`. +([#18](https://github.com/airspeed-velocity/asv_runner/issues/18)) +- Benchmarks can now be skipped during execution. + +```python +from asv_runner.benchmarks.mark import skip_for_params, parameterize, +SkipNotImplemented + +# Fast because no setup is called +class SimpleFast: + params = ([False, True]) + param_names = ["ok"] + + @skip_for_params([(False, )]) + def time_failure(self, ok): + if ok: + x = 34.2**4.2 + +@parameterize({"ok": [False, True]}) +class SimpleSlow: + def time_failure(self, ok): + if ok: + x = 34.2**4.2 + else: + raise SkipNotImplemented(f"{ok} is skipped") +``` + +Usage requires `asv 0.6.0`. +([#20](https://github.com/airspeed-velocity/asv_runner/issues/20)) + +### Bug Fixes + +- It is possible to set a default timeout from `asv`. + ([#19](https://github.com/airspeed-velocity/asv_runner/issues/19)) + +### Other Changes and Additions + +- Documentation, both long-form and API level has been added. + ([#6](https://github.com/airspeed-velocity/asv_runner/issues/6)) diff --git a/asv_runner/_aux.py b/asv_runner/_aux.py index ff2d6fb..e0e7514 100644 --- a/asv_runner/_aux.py +++ b/asv_runner/_aux.py @@ -178,8 +178,7 @@ def recvall(sock, size): data += s if not s: raise RuntimeError( - "did not receive data from socket " - "(size {}, got only {!r})".format(size, data) + "did not receive data from socket " f"(size {size}, got only {data!r})" ) return data diff --git a/changelog.d/.gitignore b/changelog.d/.gitignore new file mode 100644 index 0000000..f935021 --- /dev/null +++ b/changelog.d/.gitignore @@ -0,0 +1 @@ +!.gitignore diff --git a/changelog.d/38.misc.md b/changelog.d/38.misc.md new file mode 100644 index 0000000..1041909 --- /dev/null +++ b/changelog.d/38.misc.md @@ -0,0 +1 @@ +`asv_runner` now uses `towncrier` to manage the changelog, also adds the changeglog to the generated documentation. diff --git a/changelog.d/readme.md b/changelog.d/readme.md new file mode 100644 index 0000000..28d8e71 --- /dev/null +++ b/changelog.d/readme.md @@ -0,0 +1,26 @@ +# Usage + +`towncrier` is used for keeping track of the changelog. The relevant configuration aspects are: +- Each file can be formatted using markdown +- The contents are rendered in bullets +- Each file should be labeled with the corresponding **pull request**, e.g. `NUM.TYPE.md` + + Where there is no clear corresponding pull request, `+` can be used instead of `NUM` + +For mapping the types to headings, the following table can be used: + + +| **TYPE** | **Heading** | +| feat | New Features | +| api | API Changes | +| bugfix | Bug Fixes | +| misc | Other Changes and Additions | + +## Release + + +```bash +# View the changes +towncrier build --draft --version 0.1.0 --date "$(date -u +%Y-%m-%d)" +# Modify CHANGES.md +towncrier build --version 0.1.0 --date "$(date -u +%Y-%m-%d)" +``` diff --git a/docs/source/conf.py b/docs/source/conf.py index a841bc8..c465a4c 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,7 +1,5 @@ -# Configuration file for the Sphinx documentation builder. -# -# For the full list of built-in configuration values, see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html +import os +import shutil # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information @@ -56,3 +54,11 @@ "source_branch": "main", "source_directory": "docs/", } + + +# ------------- Copying things +docs_source_dir = os.path.abspath(os.path.dirname(__file__)) +project_root_dir = os.path.abspath(os.path.join(docs_source_dir, "..", "..")) +changelog_src = os.path.join(project_root_dir, "CHANGELOG.md") +changelog_dest = os.path.join(docs_source_dir, "CHANGELOG.md") +shutil.copyfile(changelog_src, changelog_dest) diff --git a/docs/source/index.md b/docs/source/index.md index abcf22c..bd12b08 100644 --- a/docs/source/index.md +++ b/docs/source/index.md @@ -24,6 +24,7 @@ measure and analyze the performance of your Python packages. apidocs/index bplugin-list +CHANGELOG ``` ## Indices and tables diff --git a/towncrier.toml b/towncrier.toml new file mode 100644 index 0000000..4e35868 --- /dev/null +++ b/towncrier.toml @@ -0,0 +1,31 @@ +[tool.towncrier] +package = "asv_runner" +package_dir = "asv_runner" +all_bullets = false +wrap = true +directory = "changelog.d" +filename = "CHANGELOG.md" +start_string = "\n" +underlines = ["", "", ""] +title_format = "## [{version}](https://github.com/airspeed-velocity/asv_runner/tree/{version}) - {project_date}" +issue_format = "[#{issue}](https://github.com/airspeed-velocity/asv_runner/issues/{issue})" + +[[tool.towncrier.type]] +directory = "feat" +name = "New Features" +showcontent = true + +[[tool.towncrier.type]] +directory = "api" +name = "API Changes" +showcontent = true + +[[tool.towncrier.type]] +directory = "bugfix" +name = "Bug Fixes" +showcontent = true + +[[tool.towncrier.type]] +directory = "misc" +name = "Other Changes and Additions" +showcontent = true