======================
.. rubric:: Additions
* Add backwards compatibility for Python 3.8.
* Add ``pyproject.toml`` for building the project, replacing the
``setup.py`` based build.
* Add and increase argument validation in functions and methods.
* Add the ``--all-levels`` pytest flag for running all tests.
* Add new tests for ``nonparametric.EmpiricalDistribution`` and
``parametric.QuadraticDistribution``.
* Give all tuning curve methods a new parameter, ``minimize``, for
computing *minimizing* hyperparameter tuning curves.
* ``nonparametric.EmpiricalDistribution`` methods:
``quantile_tuning_curve``, ``average_tuning_curve``,
``naive_tuning_curve``, ``v_tuning_curve``, and
``u_tuning_curve``.
* ``parametric.QuadraticDistribution`` methods:
``quantile_tuning_curve``, and ``average_tuning_curve``.
* Add ``__repr__``, ``__str__``, and ``__eq__`` methods to
``nonparamatric.EmpiricalDistribution`` and
``parametric.QuadraticDistribution``.
* Add a ``generator`` parameter to set the random seed in functions
and methods using randomness
(``experiments.simulation.Simulation.run``,
``experiments.visualization.plot_random_search``,
``nonparametric.EmpiricalDistribution.confidence_bands``,
``nonparametric.EmpiricalDistribution.sample``, and
``parametric.QuadraticDistribution.sample``).
* Add the ``opda.random`` module to migrate off of numpy's legacy API
for random numbers while still enabling control of ``opda``'s
global random state via ``opda.random.set_seed``.
* Add the ``RandomTestCase`` class for making tests using randomness
reproducible.
* Configure ``ruff`` for linting the project.
.. rubric:: Changes
* Require ``pytest >= 6`` for running tests.
* Configure ``pytest`` to use the ``tests/`` test path.
* Use ``Private :: Do Not Upload`` classifier to prevent the package
from being uploaded to PyPI.
* Speed up coverage tests for
``nonparametric.EmpiricalDistribution.confidence_bands``.
* Rename optional dependencies from ``dev`` to ``tests``.
* Standardize the error messages for violating argument type
constraints.
* Expand existing tests to cover more cases for
``EmpiricalDistribution`` and ``QuadraticDistribution``.
* Rename ``exceptions.OptimizationException`` to
``exceptions.OptimizationError``.
* Use ``TypeError`` in place of ``ValueError`` for type errors.
* Across all functions and methods, standardize which parameters are
keyword-only. Reserve keyword-only status for rarely used arguments,
such as implementation details like optimization tolerances.
* Disallow ``None`` as an argument for the ``a`` and ``b`` parameters
of ``nonparametric.EmpiricalDistribution``.
.. rubric:: Fixes
* Fix flakiness in various tests.
* Ensure ``utils.beta_highest_density_interval`` always returns an
interval containing the mode, even for very small intervals.
* Fix bug in ``nonparametric.EmpiricalDistribution.confidence_bands``
that caused coverage to be too high, especially given small samples.
* Improve coverage tests for
``nonparametric.EmpiricalDistribution.confidence_bands`` so that
they're more sensitive and explicitly test small sample sizes.
* Prevent warnings during expected use of various methods of
``QuadraticDistribution``.
* Suppress expected warnings in tests.
* Fix ``parametric.QuadraticDistribution.quantile_tuning_curve`` which
would throw an exception when the instance had ``convex=True``.
* Fix tests for ``parametric.QuadraticDistribution`` so that they
actually check all intended cases.
.. rubric:: Removals
* Remove the ``setup.py`` based build and associated files
(``setup.py``, ``setup.cfg``, ``MANIFEST.in``, and
``requirements.txt``), replacing it with ``pyproject.toml``.
.. rubric:: Documentation
* Add sections and improve markup in ``README.rst``.
* Add links to and citations for `Show Your Work with Confidence
<https://arxiv.org/abs/2311.09480>`_.
* Add sections, update content, and improve markup in existing
docstrings.
* Document development tools for the project.
* Begin running doctests on all documentation.
* Document how to run doctests in ``README.rst``.
* Set the random seed in documentation examples to make them testable.
* Fix errors in examples discovered via doctests.
* Document ``pip`` version requirements for editable installs in
``README.rst``.
* Document type constraints (e.g., non-negative integers as opposed to
integers) in functions and methods' docstrings.
* Document the ``atol`` parameter of
``utils.beta_highest_density_interval`` and
``utils.highest_density_coverage``.