Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MAINT: Add towncrier #38

Merged
merged 7 commits into from
Feb 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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/
189 changes: 189 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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 <https://github.com/twisted/my-project/tree/main/changelog.d/>.

<!-- towncrier release notes start -->

## [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))
3 changes: 1 addition & 2 deletions asv_runner/_aux.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
1 change: 1 addition & 0 deletions changelog.d/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
!.gitignore
1 change: 1 addition & 0 deletions changelog.d/38.misc.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
`asv_runner` now uses `towncrier` to manage the changelog, also adds the changeglog to the generated documentation.
26 changes: 26 additions & 0 deletions changelog.d/readme.md
Original file line number Diff line number Diff line change
@@ -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)"
```
14 changes: 10 additions & 4 deletions docs/source/conf.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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)
1 change: 1 addition & 0 deletions docs/source/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ measure and analyze the performance of your Python packages.

apidocs/index
bplugin-list
CHANGELOG
```

## Indices and tables
Expand Down
31 changes: 31 additions & 0 deletions towncrier.toml
Original file line number Diff line number Diff line change
@@ -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 = "<!-- towncrier release notes start -->\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
Loading