- Fix `bidict(None)` bug (should raise TypeError).
- Simplify hypothesis tests, especially by using stateful testing.
- Add overriding type hints for `inv` for each bidict type
(not just for `inverse`).
- Improve docs and fix readthedocs build as of move to python3.12 for
building docs.
Python 3.7 reached end of life on 2023-06-27 and is no longer supported
by all of bidict's development dependencies (e.g. hypothesis).
No longer advertise support for 3.7 in the project metadata, and remove
3.7 from the tox test matrix and in CI.
Also switch to using separate requirements files per Python version,
which allows pinning to dependencies' hashes.
Finally, don't bother adding dynamic optional-dependencies to
pyproject.toml, it's causing problems with lockfiles that use hashes.
* Use pytest-sphinx to have pytest run doctests in Sphinx docs rather
than using Sphinx to run these via run_tests.py.
* Sphinx is no longer a test dependency, which allows upgrading to
Sphinx 6.0 while still being able to run the tests with Python 3.7.
(Sphinx 6.0 dropped support for 3.7.)
* Use conftest.py rather than testsetup or doctest_global_setup, which
pytest-sphinx does not currently support.
* Don't use :skipif: in doctest:: directives since pytest-sphinx does
not currently support it (thisch/pytest-sphinx#9). Instead just
don't ever run the one doctest that was using this, since the
behavior it was testing is also covered by several tests in
test_properties.py that do still properly get run conditionally
(specifically, the "freed on zero refcount" tests are still run on
CPython but not PyPy).
* Don't use >>> for code we don't want to test, since pytest-sphinx
will otherwise still run it even if it's in a code-block directive
(and sprinkling `# doctest: SKIP` everywhere as an alternative is
noisy).
* Add pytest-clarity to dev dependencies and pass -vv to pytest by
default to enable pytest-clarity's nicer diffs in development.
The `assume(init_items != init_unequal)` was not sufficient
because it would allow cases like:
bi_cls=bidict, other_cls=bidict, init_items=[(1, 0), (0, 1)], init_unequal=[(0, 1), (1, 0)]
causing the resulting bidicts' item sets to still be equal,
so assertions like
assert items_match(some_bidict, other_unequal, relation=ne)
would fail.
Changing the assume to
assume(set(init_items) != set(init_unequal))
fixes the issue.
Surprisingly, hypothesis only just found a failing example for this
for the first time (in https://travis-ci.org/jab/bidict/jobs/363962257)
despite having numerous opportunities to find it before.
Using a new max_examples=5000 hypothesis profile, only on nightly CI,
should help surface any remaining issues that hypothesis hasn't found yet,
without slowing commit-triggered tests with too much example generation.
Also improve Travis config:
- ditch ALLOW_FAIL=1, for some reason it didn't work
- comment out python 3.7-dev job while Travis is stuck on an old 3.7 alpha
- don't use "- |" command block where we want to see output after each command
- prefix more network-dependent commands with travis_retry
Finally, improve docs building setup:
- Factor out sphinx from "dev" extras_require to its own "docs" extras_require.
- Add a .readthedocs.yml to customize the readthedocs build.
Use pip and the "docs" extras_require to get an up-to-date Sphinx version.
Fixes some broken :ref:`addendum:...` autosectionlabel links in learning-from-bidict.