Skip to content

Commit 6380d71

Browse files
authored
Merge pull request #146 from SMI-Lab-Inha/chore/release-1.19.1
chore: release 1.19.1
2 parents 7131c2d + 0a57d59 commit 6380d71

19 files changed

Lines changed: 221 additions & 206 deletions

File tree

‎.github/ISSUE_TEMPLATE/code_review.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ body:
4242
attributes:
4343
label: Review scope
4444
description: Branch, tag, or commit SHA the review was done against.
45-
placeholder: "e.g. master @ b41a05c, dev @ 8af258e"
45+
placeholder: "e.g. main @ b41a05c, dev @ 8af258e"
4646
validations:
4747
required: true
4848

‎.github/workflows/ci.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: CI
22

33
on:
44
push:
5-
branches: [master, main]
5+
branches: [main, dev]
66
pull_request:
77

88
jobs:

‎.github/workflows/release.yml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ on:
2727
workflow_dispatch:
2828
inputs:
2929
ref:
30-
description: "Branch / tag / SHA to test (default: master)"
30+
description: "Branch / tag / SHA to test (default: main)"
3131
required: false
32-
default: "master"
32+
default: "main"
3333

3434
permissions:
3535
contents: read

‎CHANGELOG.md‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,21 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
88

99
## [Unreleased]
1010

11+
(nothing yet)
12+
13+
## [1.19.1] — 2026-10-21
14+
15+
### Changed
16+
17+
- **The default branch is now `main`**, renamed from `master`, with
18+
development happening on `dev`. Existing `master` links on GitHub
19+
redirect, but a local clone that tracks `master` should run
20+
`git branch -m master main && git fetch && git branch -u origin/main main`.
21+
- **The documentation badge displays again** on GitHub and PyPI. It
22+
pointed at Read the Docs' legacy badge endpoint, which rate-limits the
23+
image proxies both sites fetch README images through (HTTP 429), so it
24+
rendered as a broken image. It is now served through shields.io.
25+
1126
### Fixed
1227

1328
- **The sparse solver path dropped negative modes.** Above 500 DOF a

‎CITATION.cff‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ authors:
2222
email: jaehoon.seo@inha.ac.kr
2323
affiliation: "Marine Structural Mechanics and Integrity Lab (SMI Lab), Inha University"
2424
orcid: "https://orcid.org/0000-0003-1047-2119"
25-
version: 1.19.0
26-
date-released: "2026-09-30"
25+
version: 1.19.1
26+
date-released: "2026-10-21"
2727
license: Apache-2.0
2828
repository-code: "https://github.com/SMI-Lab-Inha/pyBModes"
2929
url: "https://github.com/SMI-Lab-Inha/pyBModes"

‎CONTRIBUTING.md‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ pip install -e ".[dev,plots]"
1212
pytest
1313
```
1414

15-
The default `pytest` run uses only self-contained tests (synthetic decks + closed-form references). The `integration` marker gates tests that need upstream OpenFAST / BModes data; place those clones under `external/` (gitignored). See [installation](https://github.com/SMI-Lab-Inha/pyBModes/blob/master/docs/installation.rst) for the full Windows + conda quickstart.
15+
The default `pytest` run uses only self-contained tests (synthetic decks + closed-form references). The `integration` marker gates tests that need upstream OpenFAST / BModes data; place those clones under `external/` (gitignored). See [installation](https://github.com/SMI-Lab-Inha/pyBModes/blob/main/docs/installation.rst) for the full Windows + conda quickstart.
1616

1717
## Ground rules
1818

@@ -51,7 +51,7 @@ pip install pre-commit
5151
pre-commit install
5252
```
5353

54-
This runs ruff (auto-fix), the standard hygiene hooks (trailing-whitespace, end-of-file-fixer, YAML / TOML validation, large-file guard, merge-conflict marker check), `codespell`, and `insert-license` — which inserts the Apache 2.0 boilerplate header into any new `.py` file under `src/pybmodes/`, `scripts/`, `cases/`, or `noxfile.py` that doesn't already have it (template at [`.license_header.txt`](https://github.com/SMI-Lab-Inha/pyBModes/blob/master/.license_header.txt)). To run manually:
54+
This runs ruff (auto-fix), the standard hygiene hooks (trailing-whitespace, end-of-file-fixer, YAML / TOML validation, large-file guard, merge-conflict marker check), `codespell`, and `insert-license` — which inserts the Apache 2.0 boilerplate header into any new `.py` file under `src/pybmodes/`, `scripts/`, `cases/`, or `noxfile.py` that doesn't already have it (template at [`.license_header.txt`](https://github.com/SMI-Lab-Inha/pyBModes/blob/main/.license_header.txt)). To run manually:
5555

5656
```bash
5757
pre-commit run --all-files
@@ -114,8 +114,8 @@ For maintainers, the full pre-tag sequence is in [`https://pybmodes.readthedocs.
114114

115115
## Reporting issues
116116

117-
Open a [GitHub issue](https://github.com/SMI-Lab-Inha/pyBModes/issues). For security-sensitive reports, see [`SECURITY.md`](https://github.com/SMI-Lab-Inha/pyBModes/blob/master/SECURITY.md).
117+
Open a [GitHub issue](https://github.com/SMI-Lab-Inha/pyBModes/issues). For security-sensitive reports, see [`SECURITY.md`](https://github.com/SMI-Lab-Inha/pyBModes/blob/main/SECURITY.md).
118118

119119
## Code of conduct
120120

121-
This project follows the [Contributor Covenant](https://github.com/SMI-Lab-Inha/pyBModes/blob/master/CODE_OF_CONDUCT.md).
121+
This project follows the [Contributor Covenant](https://github.com/SMI-Lab-Inha/pyBModes/blob/main/CODE_OF_CONDUCT.md).

‎README.md‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@
22

33
[![CI](https://github.com/SMI-Lab-Inha/pyBModes/actions/workflows/ci.yml/badge.svg)](https://github.com/SMI-Lab-Inha/pyBModes/actions/workflows/ci.yml)
44
[![Validation](https://github.com/SMI-Lab-Inha/pyBModes/actions/workflows/validation.yml/badge.svg)](https://github.com/SMI-Lab-Inha/pyBModes/actions/workflows/validation.yml)
5-
[![Docs](https://readthedocs.org/projects/pybmodes/badge/?version=latest)](https://pybmodes.readthedocs.io/en/latest/)
5+
[![Docs](https://img.shields.io/readthedocs/pybmodes/latest?label=docs)](https://pybmodes.readthedocs.io/en/latest/)
66
[![conda-forge](https://img.shields.io/conda/vn/conda-forge/pybmodes.svg)](https://anaconda.org/conda-forge/pybmodes)
77
[![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)
88
[![License: Apache 2.0](https://img.shields.io/badge/license-Apache%202.0-green.svg)](LICENSE)
99

1010
`pybmodes` is a pure-Python finite-element library for wind-turbine blade and tower modal analysis. It reads OpenFAST (ElastoDyn / SubDyn / HydroDyn / MoorDyn), BModes `.bmi`, and WISDEM / WindIO ontology YAML inputs; solves the coupled flap–lag–torsion–axial vibration modes with a 15-DOF Bernoulli-Euler beam element; and emits ElastoDyn-compatible mode-shape polynomials, MAC-tracked Campbell diagrams, and bundled Markdown / HTML / CSV reports.
1111

12-
Validated against the BModes Fortran reference solver on six benchmark cases (NREL 5MW land + OC3 monopile + OC3 Hywind floating spar, IEA-3.4-130-RWT, BModes CertTest 03 / 04) to **better than 0.01 %** on every comparison. As of 1.8.0 the dedicated [Validation workflow](https://github.com/SMI-Lab-Inha/pyBModes/actions/workflows/validation.yml) (weekly cron + `workflow_dispatch`) enforces the strict tolerance in CI for the cases whose external data is clonable from a public GitHub repository **at a manifest-pinned SHA**. Cloning is manifest-driven (`verify_external_data.py --clone`), so CI fetches and `--strict`-checks every **required** entry: the NREL 5MW family in [`OpenFAST/r-test`](https://github.com/OpenFAST/r-test), all four IEA Task-37 reference turbines ([`IEA-3.4-130-RWT`](https://github.com/IEAWindTask37/IEA-3.4-130-RWT), [`IEA-10.0-198-RWT`](https://github.com/IEAWindTask37/IEA-10.0-198-RWT), [`IEA-15-240-RWT`](https://github.com/IEAWindTask37/IEA-15-240-RWT), [`IEA-22-280-RWT`](https://github.com/IEAWindTask37/IEA-22-280-RWT)), and the [`WISDEM`](https://github.com/WISDEM/WISDEM) WindIO examples — a missing or off-pin required clone hard-fails the run. Only the `optional = true` entries (MoorPy / RAFT cross-reference clones) are left out of CI as maintainer-local checks. Publishing to PyPI is itself gated on a green run of this workflow for the tagged commit. The two BModes CertTest cases (Test03, Test04) depend on `external/BModes`, a NREL download not on GitHub; those tests skip cleanly when the data is absent and stay maintainer-local enforcement. The per-PR `ci.yml` continues to run the self-contained suite (synthetic + closed-form-referenced) and tolerates "no tests collected" on the integration step when the runner has no upstream data. See [`VALIDATION.md`](VALIDATION.md) for the full per-case matrix and [`external/MANIFEST.toml`](https://github.com/SMI-Lab-Inha/pyBModes/blob/master/external/MANIFEST.toml) for the manifest-pinned commit SHAs plus line-ending-normalized SHA-256 hashes for the text validation decks.
12+
Validated against the BModes Fortran reference solver on six benchmark cases (NREL 5MW land + OC3 monopile + OC3 Hywind floating spar, IEA-3.4-130-RWT, BModes CertTest 03 / 04) to **better than 0.01 %** on every comparison. As of 1.8.0 the dedicated [Validation workflow](https://github.com/SMI-Lab-Inha/pyBModes/actions/workflows/validation.yml) (weekly cron + `workflow_dispatch`) enforces the strict tolerance in CI for the cases whose external data is clonable from a public GitHub repository **at a manifest-pinned SHA**. Cloning is manifest-driven (`verify_external_data.py --clone`), so CI fetches and `--strict`-checks every **required** entry: the NREL 5MW family in [`OpenFAST/r-test`](https://github.com/OpenFAST/r-test), all four IEA Task-37 reference turbines ([`IEA-3.4-130-RWT`](https://github.com/IEAWindTask37/IEA-3.4-130-RWT), [`IEA-10.0-198-RWT`](https://github.com/IEAWindTask37/IEA-10.0-198-RWT), [`IEA-15-240-RWT`](https://github.com/IEAWindTask37/IEA-15-240-RWT), [`IEA-22-280-RWT`](https://github.com/IEAWindTask37/IEA-22-280-RWT)), and the [`WISDEM`](https://github.com/WISDEM/WISDEM) WindIO examples — a missing or off-pin required clone hard-fails the run. Only the `optional = true` entries (MoorPy / RAFT cross-reference clones) are left out of CI as maintainer-local checks. Publishing to PyPI is itself gated on a green run of this workflow for the tagged commit. The two BModes CertTest cases (Test03, Test04) depend on `external/BModes`, a NREL download not on GitHub; those tests skip cleanly when the data is absent and stay maintainer-local enforcement. The per-PR `ci.yml` continues to run the self-contained suite (synthetic + closed-form-referenced) and tolerates "no tests collected" on the integration step when the runner has no upstream data. See [`VALIDATION.md`](VALIDATION.md) for the full per-case matrix and [`external/MANIFEST.toml`](https://github.com/SMI-Lab-Inha/pyBModes/blob/main/external/MANIFEST.toml) for the manifest-pinned commit SHAs plus line-ending-normalized SHA-256 hashes for the text validation decks.
1313

1414
## Documentation
1515

16-
Full documentation is published on [Read the Docs](https://pybmodes.readthedocs.io/en/latest/) (the status badge above shows whether that build is live); the table below links straight to the rendered pages. The source lives under [`docs/`](https://github.com/SMI-Lab-Inha/pyBModes/tree/master/docs) if you'd rather read it on GitHub, and you can build it offline (below).
16+
Full documentation is published on [Read the Docs](https://pybmodes.readthedocs.io/en/latest/) (the status badge above shows whether that build is live); the table below links straight to the rendered pages. The source lives under [`docs/`](https://github.com/SMI-Lab-Inha/pyBModes/tree/main/docs) if you'd rather read it on GitHub, and you can build it offline (below).
1717

1818
| Page | What's there |
1919
| --- | --- |
@@ -56,7 +56,7 @@ Or from conda-forge:
5656
conda install -c conda-forge pybmodes
5757
```
5858

59-
That installs the runtime core (`numpy` + `scipy`). Add an extra for optional features — `[plots]`, `[windio]`, `[notebook]`, `[docs]` (matrix below). For a source / editable checkout (contributors, or tracking `master`):
59+
That installs the runtime core (`numpy` + `scipy`). Add an extra for optional features — `[plots]`, `[windio]`, `[notebook]`, `[docs]` (matrix below). For a source / editable checkout (contributors, or tracking `main`):
6060

6161
```bash
6262
git clone https://github.com/SMI-Lab-Inha/pyBModes.git

0 commit comments

Comments
 (0)