v2.0.0 (2026-06-01)

First release under the NLR fork (NatLabRockies/pyvisco).

Added

  • pyproject.toml (PEP 621) replaces setup.py / setup.cfg / versioneer.py. Version is derived from Git tags via setuptools-scm (fallback 1.0.5).

  • tests/ test suite with 8 pytest cases covering load, shift, and prony modules.

  • GitHub Actions workflows:

    • ci.yml — pytest matrix (Python 3.11 / 3.12 / 3.13 × Ubuntu / Windows) plus a ruff check + ruff format --check lint job.

    • notebooks.ymlnbval-lax execution check on the three verification/verify_*.ipynb notebooks, on LinViscoFit.ipynb (voila GUI) and on tutorials/tutorial.ipynb, plus a smoke-test step that runs the three tutorials/*.py example scripts.

    • binder.yml — weekly + on-push rebuild of the Binder image via jupyterhub/repo2docker-action.

    • release-assets.yml — builds pyvisco-examples.zip from the contents of sample_data/ and uploads it to every published GitHub release.

  • tutorials/ folder with a non-interactive walkthrough notebook (tutorial.ipynb, the ipywidgets-free counterpart of LinViscoFit.ipynb) and three standalone scripts — freq_master.py, freq_raw.py, time_master.py — mirroring the three verification scenarios for headless / scripted use.

  • verification/README.md and tutorials/README.md describing the contents and CI of each folder.

  • This changelog.

Changed

  • Breaking: minimum Python is now 3.11 (was 3.7).

  • Breaking: pandas >= 2.1 is required; internal df.loc[i]['col'] = x patterns rewritten to df.loc[i, 'col'] = x to satisfy the pandas 3.x ChainedAssignmentError.

  • Breaking: ipywidgets >= 8.1 is required. The FileUpload widget handling was rewritten for the new tuple-of-dicts value API (the _counter trait was removed upstream). A new _file_upload_bytes helper transparently supports both the v8 and v7 payload formats.

  • Dependency floors raised across the stack: numpy >= 1.26, scipy >= 1.11, matplotlib >= 3.8, voila >= 0.5, jupyterlab >= 4.1, notebook >= 7.1, openpyxl >= 3.1, xlrd >= 2.0.

  • Optional [interactive], [app], and [excel] extras have been folded into the default install — pip install pyvisco now provides everything needed to run the dashboard.

  • Binder environment moved to Python 3.13. The legacy top-level Dockerfile, environment.yml, and requirements.txt were removed; Binder config now lives entirely under binder/.

  • ReadtheDocs build switched from the unmaintained m2r2 to myst-parser.

  • Documentation, package metadata, license, and Zenodo records updated to reflect the move from NREL to NLR (Natural Laboratory of the Rockies).

  • Maintainer contact: martin.springer@nlr.gov.

  • Repository-wide ruff check + ruff format pass (line length 100, target py311).

Fixed

  • Legacy .xls uploads no longer fail silently. xlrd is now a hard dependency and the @exceptions decorator on the upload observers has a catch-all branch that writes the traceback to both the output widget and sys.stderr (so the failure is visible in the Voila server log).

  • verify.load_prony_ANSYS now captures the declared nterms from the TB,PRONY,... record and raises a descriptive ValueError if the parsed alpha_i / tau_i counts disagree with each other or with the declared count (replaces a silently-discarded int() call that could crash on unrelated TB records).

  • out.to_csv docstring corrected: returns a CSV str when filepath is None, otherwise writes to disk and returns None (previously documented as pandas.DataFrame / bytes).

Removed

  • setup.py, setup.cfg, versioneer.py, MANIFEST.in, Procfile, runtime.txt, and the stale top-level build/ tree.

  • LinViscoFit-test.ipynb development sandbox.

  • examples/examples.zip is no longer committed to the repository; it is now produced from sample_data/ (renamed from examples/) at release time and attached to the GitHub release as pyvisco-examples.zip. The voila app’s download link points at https://github.com/NatLabRockies/pyvisco/releases/latest/download/pyvisco-examples.zip.

  • Auto-generated docs/_autosummary/*.rst stubs are no longer tracked (they are regenerated by Sphinx on every build).

Release tag on GitHub