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 `_