experimental/cpu/: frozenlist-1.4.1 metadata and description
A list-like structure which implements collections.abc.MutableSequence
classifiers |
|
description_content_type | text/x-rst |
license | Apache 2 |
maintainer | aiohttp team <team@aiohttp.org> |
maintainer_email | team@aiohttp.org |
project_urls |
|
requires_python | >=3.8 |
File | Tox results | History |
---|---|---|
frozenlist-1.4.1-cp311-cp311-linux_aarch64.whl
|
|
|
frozenlist-1.4.1-cp311-cp311-linux_x86_64.whl
|
|
frozenlist
Introduction
frozenlist.FrozenList is a list-like structure which implements collections.abc.MutableSequence. The list is mutable until FrozenList.freeze is called, after which list modifications raise RuntimeError:
>>> from frozenlist import FrozenList >>> fl = FrozenList([17, 42]) >>> fl.append('spam') >>> fl.append('Vikings') >>> fl <FrozenList(frozen=False, [17, 42, 'spam', 'Vikings'])> >>> fl.freeze() >>> fl <FrozenList(frozen=True, [17, 42, 'spam', 'Vikings'])> >>> fl.frozen True >>> fl.append("Monty") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "frozenlist/_frozenlist.pyx", line 97, in frozenlist._frozenlist.FrozenList.append self._check_frozen() File "frozenlist/_frozenlist.pyx", line 19, in frozenlist._frozenlist.FrozenList._check_frozen raise RuntimeError("Cannot modify frozen list.") RuntimeError: Cannot modify frozen list.
FrozenList is also hashable, but only when frozen. Otherwise it also throws a RuntimeError:
>>> fl = FrozenList([17, 42, 'spam']) >>> hash(fl) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "frozenlist/_frozenlist.pyx", line 111, in frozenlist._frozenlist.FrozenList.__hash__ raise RuntimeError("Cannot hash unfrozen list.") RuntimeError: Cannot hash unfrozen list. >>> fl.freeze() >>> hash(fl) 3713081631934410656 >>> dictionary = {fl: 'Vikings'} # frozen fl can be a dict key >>> dictionary {<FrozenList(frozen=True, [1, 2])>: 'Vikings'}
Installation
$ pip install frozenlist
The library requires Python 3.8 or newer.
Documentation
Communication channels
We have a Matrix Space #aio-libs-space:matrix.org which is also accessible via Gitter.
Requirements
Python >= 3.8
License
frozenlist is offered under the Apache 2 license.
Source code
The project is hosted on GitHub
Please file an issue in the bug tracker if you have found a bug or have some suggestions to improve the library.
Changelog
1.4.1 (2023-12-15)
Packaging updates and notes for downstreams
Declared Python 3.12 and PyPy 3.8-3.10 supported officially in the distribution package metadata.
Related issues and pull requests on GitHub: #553.
Replaced the packaging is replaced from an old-fashioned setup.py to an in-tree PEP 517 build backend – by @webknjaz.
Whenever the end-users or downstream packagers need to build frozenlist from source (a Git checkout or an sdist), they may pass a config_settings flag pure-python. If this flag is not set, a C-extension will be built and included into the distribution.
Here is how this can be done with pip:
$ python3 -m pip install . --config-settings=pure-python=
This will also work with -e | --editable.
The same can be achieved via pypa/build:
$ python3 -m build --config-setting=pure-python=
Adding -w | --wheel can force pypa/build produce a wheel from source directly, as opposed to building an sdist and then building from it.
Related issues and pull requests on GitHub: #560.
Contributor-facing changes
It is now possible to request line tracing in Cython builds using the with-cython-tracing PEP 517 config setting – @webknjaz.
This can be used in CI and development environment to measure coverage on Cython modules, but is not normally useful to the end-users or downstream packagers.
Here’s a usage example:
$ python3 -Im pip install . --config-settings=with-cython-tracing=true
For editable installs, this setting is on by default. Otherwise, it’s off unless requested explicitly.
The following produces C-files required for the Cython coverage plugin to map the measurements back to the PYX-files:
$ python -Im pip install -e .
Alternatively, the FROZENLIST_CYTHON_TRACING=1 environment variable can be set to do the same as the PEP 517 config setting.
Related issues and pull requests on GitHub: #560.
Coverage collection has been implemented for the Cython modules – by @webknjaz.
It will also be reported to Codecov from any non-release CI jobs.
Related issues and pull requests on GitHub: #561.
A step-by-step Release Guide guide has been added, describing how to release frozenlist – by @webknjaz.
This is primarily targeting the maintainers.
Related issues and pull requests on GitHub: #563.
Detailed Contributing Guidelines on authoring the changelog fragments have been published in the documentation – by @webknjaz.
Related issues and pull requests on GitHub: #564.
1.4.0 (2023-07-12)
The published source distribution package became buildable under Python 3.12.
Bugfixes
Removed an unused typing.Tuple import #411
Deprecations and Removals
Dropped Python 3.7 support. #413
Misc
1.3.3 (2022-11-08)
Fixed CI runs when creating a new release, where new towncrier versions fail when the current version section is already present.
1.3.2 (2022-11-08)
Misc
Updated the CI runs to better check for test results and to avoid deprecated syntax. #327
1.3.1 (2022-08-02)
The published source distribution package became buildable under Python 3.11.
1.3.0 (2022-01-18)
Bugfixes
Do not install C sources with binary distributions. #250
Deprecations and Removals
Dropped Python 3.6 support #274
1.2.0 (2021-10-16)
Features
FrozenList now supports being used as a generic type as per PEP 585, e.g. frozen_int_list: FrozenList[int] (requires Python 3.9 or newer). #172
Added support for Python 3.10. #227
Started shipping platform-specific wheels with the musl tag targeting typical Alpine Linux runtimes. #227
Started shipping platform-specific arm64 wheels for Apple Silicon. #227
1.1.1 (2020-11-14)
Bugfixes
Provide x86 Windows wheels. #169
1.1.0 (2020-10-13)
Features
Add support for hashing of a frozen list. #136
Support Python 3.8 and 3.9.
Provide wheels for aarch64, i686, ppc64le, s390x architectures on Linux as well as x86_64.
1.0.0 (2019-11-09)
Deprecations and Removals
Dropped support for Python 3.5; only 3.6, 3.7 and 3.8 are supported going forward. #24