[project]
name = "rscm"
version = "0.2.3"
description = "Simple Climate Model framework implemented in Rust"
readme = "README.md"
requires-python = ">=3.11"
license = {text = "Apache-2.0"}
authors = [
{name = "Jared Lewis", email = "jared.lewis@climate-energy-college.org"}
]
keywords = ["climate", "climate-model", "scm", "physics", "rust"]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Rust",
"Topic :: Scientific/Engineering :: Atmospheric Science",
]
dependencies = [
"numpy",
"scmdata>=0.17.0",
]
[project.urls]
Homepage = "https://github.com/lewisjared/rscm"
Repository = "https://github.com/lewisjared/rscm"
Documentation = "https://lewisjared.github.io/rscm/"
[build-system]
requires = [
'maturin>=1.7,<2'
]
build-backend = 'maturin'
[tool.maturin]
python-source = "python"
module-name = "rscm._lib"
bindings = 'pyo3'
features = ["pyo3/extension-module"]
[dependency-groups]
dev = [
"ruff>=0.6.2",
"pytest>=8.3.2",
"pip>=24.2",
"notebook>=7.2.2",
"pydot>=3.0.1",
"towncrier>=24.8.0",
"bump-my-version>=0.26.1",
"mkdocs>=1.6.0",
"mkdocstrings[python]>=0.25.0",
"mkdocs-material>=9.5.0",
"mkdocs-gen-files>=0.5.0",
"mkdocs-section-index>=0.3.9",
"mkdocs-literate-nav>=0.6.1",
"mkdocs-autorefs>=1.0.1",
"mkdocs-jupyter>=0.24.0",
"myst-nb>=1.1.1",
"jupyterlab>=4.2.0",
"jupytext>=1.16.4",
"matplotlib>=3.9.2",
"seaborn>=0.13.2",
"mike>=2.1.3",
"mkdocs-minify-plugin>=0.8.0",
]
[tool.ruff]
src = ["python"]
target-version = "py311"
line-length = 88
[tool.ruff.lint]
select = [
"E",
"W",
"F",
"I",
"D",
"PL",
"TRY",
"NPY",
"RUF",
"UP",
"S",
"PD",
]
unfixable = [
"PD002",
]
ignore = [
"D200",
"D400",
"D105",
"UP007",
"PD011",
]
[tool.ruff.format]
docstring-code-format = true
[tool.ruff.lint.per-file-ignores]
"test*.py" = [
"D",
"S101",
"PLR2004"
]
"docs/notebooks/*" = [
"D100",
"E402",
"S101",
"PLR2004",
]
"scripts/*" = [
"S101",
]
"tests/integration/test_compilation.py" = [
"S603",
]
"tests/test-data/*" = [
"I001",
]
[tool.ruff.lint.isort]
known-first-party = ["src"]
[tool.ruff.lint.pydocstyle]
convention = "numpy"
[tool.towncrier]
package = "rscm"
package_dir = "src"
filename = "docs/changelog.md"
directory = "changelog/"
title_format = "## rscm {version} ({project_date})"
underlines = [
"",
"",
"",
]
issue_format = "[#{issue}](https://github.com/lewisjared/rscm/pulls/{issue})"
type = [
{ directory = "breaking", name = "⚠️ Breaking Changes ⚠️", showcontent = true },
{ directory = "deprecation", name = "Deprecations", showcontent = true },
{ directory = "feature", name = "Features", showcontent = true },
{ directory = "improvement", name = "Improvements", showcontent = true },
{ directory = "fix", name = "Bug Fixes", showcontent = true },
{ directory = "docs", name = "Improved Documentation", showcontent = true },
{ directory = "trivial", name = "Trivial/Internal Changes", showcontent = false },
]
[tool.bumpversion]
current_version = "0.2.3"
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
serialize = ["{major}.{minor}.{patch}"]
search = 'version = "{current_version}"'
replace = 'version = "{new_version}"'
regex = false
ignore_missing_version = true
tag = true
sign_tags = false
tag_name = "v{new_version}"
tag_message = "chore: release {current_version} → {new_version}"
allow_dirty = false
commit = true
message = "chore: release {current_version} → {new_version}"
commit_args = ""
pre_commit_hooks = [
"cargo update --workspace",
"uv lock",
"git add Cargo.lock uv.lock",
"uv run towncrier build --yes",
]
[[tool.bumpversion.files]]
filename = "pyproject.toml"
[[tool.bumpversion.files]]
filename = "Cargo.toml"
[[tool.bumpversion.files]]
filename = "Cargo.toml"
regex = true
search = '\{{ version = "{current_version}", path ='
replace = '{{ version = "{new_version}", path ='