v2.1.1 (2026-06-04)
===================
Documentation, packaging, and test-suite release adding the JOSS
submission materials, contributor guidelines, and an expanded unit-test
suite. Includes three bug fixes surfaced by the expanded test coverage;
no other library or API changes.
Added
-----
- ``paper/paper.md`` and ``paper/paper.bib``: JOSS submission manuscript
and bibliography. The paper covers the Summary, Statement of need,
State of the field, Software design, Research impact statement,
AI usage disclosure, Acknowledgements, and References sections required
by JOSS, and includes a DOE / DuraMAT 2 funding acknowledgement.
- ``.github/workflows/draft-pdf.yml``: builds a PDF preview of the JOSS
paper on every push and pull request that touches ``paper/**``, using
the Open Journals ``inara`` container.
- ``CONTRIBUTING.md``: contributor guidelines covering issue reporting,
support channel, development install (``pip install -e ".[dev]"``),
running the test suite and notebook smoke tests, changelog updates,
and the ANSYS APDL verification expectations when touching the fitting
routines. Linked from the README.
- ``CODE_OF_CONDUCT.md``: Contributor Covenant 3.0 with the project
maintainer (martin.springer@nlr.gov) as the reporting contact.
Referenced from ``CONTRIBUTING.md``.
- ``docs/theory.rst``: new "Theory" page in the documentation that
includes the root ``theory.md`` (linear viscoelasticity background,
Prony series, time-temperature superposition). Enabled the
``dollarmath`` MyST extension in ``docs/conf.py`` so the ``$...$`` and
``$$...$$`` equations render via MathJax.
- Expanded the pytest suite from 8 to 85 tests, covering the public
``load``, ``master``, ``shift``, ``prony``, ``opt``, ``out``, and
``verify`` modules and their plot helpers across both time and
frequency domains. Added two ANSYS APDL ``.MPL`` material cards
(WLF and user polynomial shift functions) under ``tests/data/``.
Changed
-------
- ``README.md``: corrected the License section from "CLA 1.0" to
"BSD 3-Clause" to match ``LICENSE`` and ``pyproject.toml``.
- ``README.md``: added a Contributing section linking to
``CONTRIBUTING.md``.
- ``README.md``: noted that the Voila app can also be run locally with
``voila LinViscoFit.ipynb`` after ``pip install pyvisco``.
- ``docs/api.rst``: removed ``inter`` from the API autosummary. The
module is the Voila/ipywidgets GUI orchestration layer and is treated
as internal; it remains importable as ``from pyvisco import inter``
for the ``LinViscoFit.ipynb`` notebook.
- ``README.md``: rewrote the relative repo links (``sample_data/``,
``tutorials/``, ``verification/``, ``CONTRIBUTING.md``, ``LICENSE``)
as absolute GitHub URLs so they resolve both on GitHub and from the
Sphinx-rendered README on Read the Docs. The docs now build cleanly
with ``-W``.
- Switched the Sphinx HTML theme from ``alabaster`` to
`Furo `_ for a modern look with a light /
dark toggle and a wider sidebar. The ``sphinx-rtd-theme`` docs extra
in ``pyproject.toml`` was replaced with ``furo``; the custom
``_templates/layout.html`` (used only to inject the function/method
CSS under Alabaster) was removed in favour of ``html_css_files`` in
``docs/conf.py``.
- Docstring polish across ``pyvisco/load.py``, ``master.py``,
``prony.py``, ``opt.py``, ``shift.py`` and ``verify.py``: converted
quoted identifier references in prose (``'E'``, ``'G'``, ``'E_relax'``,
``'G_relax'``, ``'freq'``, ``'time'``, ``'Set'``, ``'log_aT'``,
``'T'``, ``'tau_i'``, ``'alpha_i'``, ``'exact'``, ``'round'``,
``'min'``, ``'x'``, ``'prony'``) to reST double-backtick inline code so
they render in monospace in the API documentation. The numpydoc
``{'E', 'G'}`` literal-choice annotations were left unchanged.
Fixed
-----
- ``master.plot_shift_update``: hard-coded the frequency-domain storage
modulus column, raising ``KeyError`` on time-domain master curves.
Now selects ``(t, M_relax)`` or ``(f, M_stor)`` / ``(f, M_loss)``
based on the master-curve domain.
- ``prony.GMaxw_temp``: the ``D4`` / ``D3`` / ``D2`` / ``D1``
polynomial-shift branches used stale column labels and raised
``KeyError``. Now indexes ``df_coeff`` with the ``'D4'`` / ``'D3'`` /
``'D2'`` / ``'D1'`` row labels produced by ``shift.fit_poly``.
- ``verify.load_prony_ANSYS``: the ``TBDATA`` parser also consumed
records from a trailing ``TB,SHIFT,…`` block, leaking shift
coefficients into the Prony arrays and raising ``ValueError`` on
tokens such as ``273-5``. Now scoped to the active ``TB,PRONY``
block.
Removed
-------
- ``cla-1.0.md``: legacy Contributor License Agreement removed to avoid
ambiguity with the new ``CONTRIBUTING.md`` workflow.
`Release tag on GitHub `_