Metadata-Version: 2.4
Name: PyFishPack
Version: 0.1.0
Summary: Python wrapper for FISHPACK - Fast direct solvers for separable elliptic PDEs
Home-page: https://github.com/QianyeSu/PyFishPack
Author: PyFishPack Contributors
Author-email: your.email@example.com
License-Expression: MIT
Project-URL: Homepage, https://github.com/QianyeSu/PyFishPack
Project-URL: Repository, https://github.com/QianyeSu/PyFishPack
Project-URL: Bug Tracker, https://github.com/QianyeSu/PyFishPack/issues
Keywords: numerical-analysis,pde-solver,elliptic-equations,scientific-computing,fishpack,fortran
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Science/Research
Classifier: Topic :: Scientific/Engineering :: Mathematics
Classifier: Topic :: Scientific/Engineering :: Physics
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Fortran
Classifier: Operating System :: OS Independent
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy>=1.24.0
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Requires-Dist: black; extra == "dev"
Requires-Dist: isort; extra == "dev"
Requires-Dist: flake8; extra == "dev"
Provides-Extra: build
Requires-Dist: meson; extra == "build"
Requires-Dist: ninja; extra == "build"
Requires-Dist: build; extra == "build"
Requires-Dist: wheel; extra == "build"
Dynamic: author-email
Dynamic: home-page
Dynamic: license-file
Dynamic: requires-python

# PyFishPack

PyFishPack is a modernized Python-facing Fortran solver package derived from NCAR FISHPACK.

Project links:

- Homepage: https://github.com/QianyeSu/PyFishPack
- Repository: https://github.com/QianyeSu/PyFishPack
- Bug Tracker: https://github.com/QianyeSu/PyFishPack/issues

## Source layout

- Modern Fortran `.f90` sources live under `PyFishPack/src`.
- Original F77 `.f` sources are kept as archive material under `PyFishPack/src/archive/f77`.
- The backend uses modern Fortran `bind(C)` entry points plus a thin NumPy C API wrapper.

## Build

Use the `skyborn_dev` conda environment with Meson and Ninja.

```bash
conda activate skyborn_dev
meson setup build
ninja -C build
```

## Public APIs

PyFishPack exposes xinvert-style equation helpers from `PyFishPack.apps`, including:

`invert_Poisson`, `invert_geostrophic`, `invert_PV2D`, `invert_Eliassen`, `invert_Fofonoff`, `invert_GillMatsuno`, `invert_GillMatsuno_test`, `invert_BrethertonHaidvogel`, `invert_Stommel`, `invert_StommelMunk`, `invert_Stommel_test`, `invert_StommelArons`, `invert_omega`, `invert_3DOcean`, `invert_RefState`, `invert_RefStateSWM`, `invert_MultiGrid`.

The compiled `fishpack` backend also exposes direct solver and transform entry points for the modern Fortran kernels, including the `genbun`, `poistg`, `pois3d`, Helmholtz, SOR, and FFTPACK interfaces.

## Verification

The current backend verification covers the exposed equation APIs, source-layout checks, a local xinvert benchmark, and backend import checks. The modern backend reports `modern-fortran` through `fishpack.backend_info()`.
