Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,16 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

## [Unreleased]

### Added

- **conda-forge availability.** pyBmodes is now packaged on
conda-forge, so `conda install -c conda-forge pybmodes` works
alongside `pip install pybmodes`. The feedstock builds the noarch
package from each PyPI sdist, so the conda channel tracks PyPI
releases. The README and installation guide cover the conda path
and how to add the optional dependencies (`matplotlib`, `pyyaml`)
that the pip extras would otherwise pull in.

## [1.15.1] — 2026-05-30

A focused ergonomic patch addressing the only piece of feedback on
Expand Down
30 changes: 26 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
[![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)
[![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)
[![Docs](https://readthedocs.org/projects/pybmodes/badge/?version=latest)](https://pybmodes.readthedocs.io/en/latest/)
[![conda-forge](https://img.shields.io/conda/vn/conda-forge/pybmodes.svg)](https://anaconda.org/conda-forge/pybmodes)
[![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)
[![License: Apache 2.0](https://img.shields.io/badge/license-Apache%202.0-green.svg)](LICENSE)

Expand All @@ -16,7 +17,7 @@ Full documentation is published on [Read the Docs](https://pybmodes.readthedocs.

| Page | What's there |
| --- | --- |
| [Installation](https://pybmodes.readthedocs.io/en/latest/installation.html) | PyPI / source install, extras matrix, Windows + conda quickstart, troubleshooting |
| [Installation](https://pybmodes.readthedocs.io/en/latest/installation.html) | PyPI / conda-forge / source install, extras matrix, Windows + conda quickstart, troubleshooting |
| [Quickstart](https://pybmodes.readthedocs.io/en/latest/quickstart.html) | Nine worked recipes — synthetic tower, OpenFAST deck, monopile + SubDyn, floating coupled, Campbell sweep, WindIO one-click, MAC, batch, persistence |
| [Theory](https://pybmodes.readthedocs.io/en/latest/theory.html) | Eigenproblem maths, 15-DOF beam element, four boundary conditions, polynomial ansatz, solver dispatch, citable references |
| [Data sources](https://pybmodes.readthedocs.io/en/latest/data_sources.html) | Every input format — BModes `.bmi`, ElastoDyn / SubDyn / HydroDyn / MoorDyn `.dat`, WAMIT `.1` / `.hst`, WindIO `.yaml` — with snippet examples |
Expand All @@ -43,10 +44,18 @@ python -m http.server -d docs/_build/html

## Install

From PyPI:

```bash
pip install pybmodes
```

Or from conda-forge:

```bash
conda install -c conda-forge pybmodes
```

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`):

```bash
Expand Down Expand Up @@ -77,9 +86,22 @@ git pull
pip install -e ".[dev,plots]" # picks up new dependencies too
```

**Using a conda environment?** pyBmodes is installed with `pip` *inside* the
conda env (it's not on conda-forge), so activate the env first, then upgrade
with pip — don't use `conda update`:
**Using a conda environment?** pyBmodes is on conda-forge, so you can install
and upgrade it with conda directly:

```bash
conda install -c conda-forge pybmodes # install
conda update -c conda-forge pybmodes # upgrade
```

The conda-forge package carries the runtime core (`numpy` + `scipy`). For the
optional features, add the matching conda-forge packages alongside it
(`matplotlib` for `pybmodes.plots`, `pyyaml` for the WindIO path), since the
pip-style `[plots]` / `[windio]` extras are a pip concept.

If you'd rather pip-install into a conda env instead, activate the env first
and upgrade with `pip install --upgrade pybmodes` (not `conda update`) so conda
and pip don't both try to manage the package:

```bash
conda activate pybmodes # the env you installed it into
Expand Down
57 changes: 48 additions & 9 deletions docs/installation.rst
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,27 @@ To pin a specific release in a requirements file or a
pybmodes ~=1.9 # latest 1.9.x, blocks 2.x
pybmodes >=1.9,<2 # 1.9+ but never a major bump

From conda-forge
----------------

``pybmodes`` is also packaged on `conda-forge
<https://anaconda.org/conda-forge/pybmodes>`_:

.. code-block:: bash

conda install -c conda-forge pybmodes

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Do not publish conda install instructions before availability

This new installation path currently points users at a package that is not actually available yet: the staged-recipes PR was merged, but https://github.com/conda-forge/pybmodes-feedstock still returns 404 and searches for conda-forge/pybmodes only find the staged recipe / PyPI pages, not an installable Anaconda.org package. Until the feedstock is created and the noarch artifact is uploaded, users following this command will get a package-not-found error, so the docs should either wait for the package to exist or phrase this as pending.

Useful? React with 👍 / 👎.


This pulls the runtime core (``numpy``, ``scipy``) and the
``pybmodes`` CLI, exactly like the PyPI wheel. The pip-style
extras (``[plots]``, ``[windio]``, ...) are a pip concept and have
no conda equivalent, so for the optional features add the matching
conda-forge packages alongside it, ``matplotlib`` for
``pybmodes.plots`` and ``pyyaml`` for the WindIO path.

.. code-block:: bash

conda install -c conda-forge pybmodes matplotlib pyyaml

From source (editable)
----------------------

Expand Down Expand Up @@ -155,9 +176,26 @@ picked up too.
Inside a conda environment
^^^^^^^^^^^^^^^^^^^^^^^^^^^

pyBmodes is not on conda-forge, so it is installed with ``pip`` inside
the conda env. Upgrading is therefore a ``pip`` operation rather than a
``conda update``. Activate the env first, then upgrade with pip.
pyBmodes is on conda-forge, so inside a conda env you can install and
upgrade it with conda directly.

.. code-block:: bash

conda install -c conda-forge pybmodes # install
conda update -c conda-forge pybmodes # upgrade
python -c "import pybmodes; print(pybmodes.__version__)"

.. note::

The conda-forge package ships the runtime core only. For the
optional features add the matching conda-forge packages
(``matplotlib`` for ``pybmodes.plots``, ``pyyaml`` for the WindIO
path), since the pip-style extras have no conda equivalent.

If you installed pyBmodes with ``pip`` inside a conda env instead of
from conda-forge, keep upgrading it with ``pip``, not ``conda update``,
so the two package managers don't both try to manage it. Activate the
env first, then upgrade with pip.

.. code-block:: bash

Expand All @@ -167,12 +205,13 @@ the conda env. Upgrading is therefore a ``pip`` operation rather than a

.. note::

``conda update pybmodes`` will not work, because conda doesn't know
the package (pip installed it). If you're unsure which env has it,
``conda env list`` shows every env and ``pip show pybmodes`` confirms
the version installed in the currently active one. For a source
checkout living in a conda env, ``git pull`` then re-run the editable
``pip install -e ".[dev,plots]"`` with the env active.
A ``pip``-installed pyBmodes won't respond to ``conda update
pybmodes``, because conda doesn't track a pip-installed package. If
you're unsure which env has it, ``conda env list`` shows every env and
``pip show pybmodes`` confirms the version installed in the currently
active one. For a source checkout living in a conda env, ``git pull``
then re-run the editable ``pip install -e ".[dev,plots]"`` with the env
active.

Verifying the install
---------------------
Expand Down
Loading