lib-pyportfoliooptlisted
Install: claude install-skill howard-lynn-ye/fin-skills
# PyPortfolioOpt
Textbook mean-variance, Black-Litterman and efficient frontiers with the best prose docs in the category — the right
teaching and prototyping choice, and the wrong one the moment you need denoising, HERC or NCO.
| | |
|---|---|
| pip / import | `PyPortfolioOpt` (resolves as `pyportfolioopt`) / **`pypfopt`** |
| Version | **1.6.0** (2026-02-26) |
| Licence | MIT. `requires_python` is **unset on PyPI** — the package declares no floor at all |
| Status | ⚠️ **revived, cautiously healthy** — repo now `github.com/PyPortfolio/PyPortfolioOpt`, 6,007★ / **113 open issues**, pushed 2026-07-07 |
The old `robertmartin8/PyPortfolioOpt` URL **redirects** to a `PyPortfolio` GitHub org. The project went nearly
dormant — 1.5.5 (2023-05), 1.5.6 (2024-12), no feature release for ~3 years — then shipped 1.6.0 under new
stewardship. Robert Martin remains the PyPI author of record; the project's own `docs/Roadmap.rst` names
**Tuan Tran as primary maintainer** (issue #587). 113 open issues is a real backlog — treat responsiveness as
moderate, not high.
## The trap that costs you money
🚨 **`HRPOpt(returns=...)` takes a RETURNS matrix.** Pass prices and it runs — no exception, no warning — producing a
garbage correlation tree and plausible-looking weights you cannot tell from correct ones. This is the single most
reported PyPortfolioOpt error. Assert your input contains negative values before you hand it over.
The type check is real but **shallow**: `HRPOpt(returns=<numpy arr