Skip to content
2 changes: 1 addition & 1 deletion pypfopt/black_litterman.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ def __init__(
view_confidences=None,
tau=0.05,
risk_aversion=1,
**kwargs
**kwargs,
):
"""
:param cov_matrix: NxN covariance matrix of returns
Expand Down
4 changes: 2 additions & 2 deletions pypfopt/risk_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ def semicovariance(
benchmark=0.000079,
frequency=252,
log_returns=False,
**kwargs
**kwargs,
):
"""
Estimate the semicovariance matrix, i.e the covariance given that
Expand Down Expand Up @@ -290,7 +290,7 @@ def min_cov_determinant(
frequency=252,
random_state=None,
log_returns=False,
**kwargs
**kwargs,
): # pragma: no cover
warnings.warn("min_cov_determinant is deprecated and will be removed in v1.5")

Expand Down
128 changes: 62 additions & 66 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,92 +1,88 @@
[project]
name = "pyportfolioopt"
name = "pypfopt"
version = "1.5.6"
description = "Financial portfolio optimization in python"
readme = "README.md"
requires-python = ">=3.10"
license = { file = "LICENSE" }
maintainers = [
{ name = "Robert Andrew Martin", email = "[email protected]" },
]
authors = [
{ name = "Robert Andrew Martin", email = "[email protected]" },
{ name = "Robert Andrew Martin", email = "[email protected]" }
]
readme = "README.md"
keywords= ["finance", "portfolio", "optimization", "quant", "investing"]
classifiers=[
"Development Status :: 4 - Beta",
"Environment :: Console",
"Intended Audience :: Financial and Insurance Industry",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: MIT License",
"Natural Language :: English",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3 :: Only",
"Topic :: Office/Business :: Financial",
"Topic :: Office/Business :: Financial :: Investment",
keywords = ["finance", "portfolio", "optimization", "quant", "investing"]
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Console",
"Intended Audience :: Financial and Insurance Industry",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: MIT License",
"Natural Language :: English",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3 :: Only",
"Topic :: Office/Business :: Financial",
"Topic :: Office/Business :: Financial :: Investment",
]

# core dependencies of pyportfolioopt
# this set should be kept minimal!
# Core runtime dependencies
dependencies = [
"plotly>=6.3.0",
"matplotlib>=3.10.7",
"scipy>=1.3",
"pandas>=0.19",
"cvxpy>=1.1.19",
"numpy>=1.26.0",
"pandas>=0.19",
"scikit-learn>=0.24.1",
"scipy>=1.3.0",
"scikit-learn>=1.7.2"
]

[project.optional-dependencies]
# there are the following dependency sets:
# - all_extras - all soft dependencies
# - dev - the developer dependency set, for contributors
#
# soft dependencies are not required for the core functionality of pyportfolioopt

# all soft dependencies
#
# users can install via "pip install pyportfolioopt[all_extras]"
#
all_extras = [
"matplotlib>=3.2.0",
"plotly>=5.0.0,<6",
"scikit-learn>=0.24.1",
"ecos>=2.0.14,<2.1",
"plotly>=5.0.0,<6",
"cvxopt; python_version < '3.14'",
]

# dev - the developer dependency set, for contributors and CI
dev = [
"pytest>=7.1.2",
"flake8>=4.0.1",
"black>=22.3.0",
"pytest-cov>=3.0.0",
"yfinance>=0.1.70",
"isort",
]
#[project.optional-dependencies]
## Preserve the Poetry extra named "optionals"
#optionals = [
# "scikit-learn>=0.24.1",
# "matplotlib>=3.2.0"
#]

[project.urls]
Documentation = "https://pyportfolioopt.readthedocs.io/en/latest/"
Download = "https://pypi.org/project/pyportfolioopt/#files"
Homepage = "https://pyportfolioopt.readthedocs.io/en/latest/"
Repository = "https://github.com/pyportfolio/pyportfolioopt"
Documentation = "https://pyportfolioopt.readthedocs.io/en/latest/"
Issues = "https://github.com/pyportfolio/pyportfolioopt/issues"
"Personal website" = "https://reasonabledeviations.com"

# Build system configuration
# Hatchling is a modern, extensible Python build backend
[build-system]
build-backend = "setuptools.build_meta"
requires = [
"setuptools>=78.1.1",
]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.setuptools.packages.find]
exclude = ["example", "example.*", "tests", "tests.*"]
[tool.hatch.build.targets.wheel]
packages = ["pypfopt"]

# will all be controlled by ruff.toml
[tool.black]
line-length = 88

[tool.isort]
profile = "black"


[project.optional-dependencies]
# Development-only dependencies (not included when installing the package)
dev = [
"pytest>=7.1.2",
"flake8>=4.0.1",
#"jupyterlab>=3.4.2",
"black>=22.3.0",
"isort>=7.0.0",
#"ipykernel>=6.13.0",
#"jedi>=0.18.1",
"pytest-cov>=3.0.0",
#"yfinance>=0.1.70",
"ecos>=2.0.14",
"pre-commit==4.3.0",
]

[tool.deptry.per_rule_ignores]
DEP001 = ["sklearn"]
DEP002 = ["scikit-learn"]

Loading