PyCDFt 0.2.0__tar.gz → 0.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. pycdft-0.3.1/.github/workflows/release.yml +28 -0
  2. {pycdft-0.2.0 → pycdft-0.3.1}/CHANGELOG.md +19 -0
  3. {pycdft-0.2.0 → pycdft-0.3.1}/PKG-INFO +11 -4
  4. {pycdft-0.2.0 → pycdft-0.3.1}/PyCDFt.egg-info/PKG-INFO +11 -4
  5. {pycdft-0.2.0 → pycdft-0.3.1}/PyCDFt.egg-info/SOURCES.txt +1 -3
  6. {pycdft-0.2.0 → pycdft-0.3.1}/README.md +10 -3
  7. {pycdft-0.2.0 → pycdft-0.3.1}/docs/guide.html +5 -4
  8. {pycdft-0.2.0 → pycdft-0.3.1}/pycdft/__init__.py +1 -1
  9. pycdft-0.2.0/examples/figures/example_grid.png +0 -0
  10. pycdft-0.2.0/examples/figures/example_r_gaussian.png +0 -0
  11. pycdft-0.2.0/examples/figures/example_skewed.png +0 -0
  12. {pycdft-0.2.0 → pycdft-0.3.1}/.github/workflows/ci.yml +0 -0
  13. {pycdft-0.2.0 → pycdft-0.3.1}/CONTRIBUTING.md +0 -0
  14. {pycdft-0.2.0 → pycdft-0.3.1}/LICENSE +0 -0
  15. {pycdft-0.2.0 → pycdft-0.3.1}/MANIFEST.in +0 -0
  16. {pycdft-0.2.0 → pycdft-0.3.1}/Makefile +0 -0
  17. {pycdft-0.2.0 → pycdft-0.3.1}/PyCDFt.egg-info/dependency_links.txt +0 -0
  18. {pycdft-0.2.0 → pycdft-0.3.1}/PyCDFt.egg-info/requires.txt +0 -0
  19. {pycdft-0.2.0 → pycdft-0.3.1}/PyCDFt.egg-info/top_level.txt +0 -0
  20. {pycdft-0.2.0 → pycdft-0.3.1}/benchmarks/benchmark_gpu.py +0 -0
  21. {pycdft-0.2.0 → pycdft-0.3.1}/benchmarks/run_hybrid_benchmark.sh +0 -0
  22. {pycdft-0.2.0 → pycdft-0.3.1}/docs/design.md +0 -0
  23. {pycdft-0.2.0 → pycdft-0.3.1}/docs/gpu.md +0 -0
  24. {pycdft-0.2.0 → pycdft-0.3.1}/examples/example_grid.py +0 -0
  25. {pycdft-0.2.0 → pycdft-0.3.1}/examples/example_ibicus_compare.py +0 -0
  26. {pycdft-0.2.0 → pycdft-0.3.1}/examples/example_r_gaussian.py +0 -0
  27. {pycdft-0.2.0 → pycdft-0.3.1}/examples/example_skewed.py +0 -0
  28. {pycdft-0.2.0 → pycdft-0.3.1}/examples/gpu_example.py +0 -0
  29. {pycdft-0.2.0 → pycdft-0.3.1}/pycdft/api.py +0 -0
  30. {pycdft-0.2.0 → pycdft-0.3.1}/pycdft/core.py +0 -0
  31. {pycdft-0.2.0 → pycdft-0.3.1}/pycdft/gpu/__init__.py +0 -0
  32. {pycdft-0.2.0 → pycdft-0.3.1}/pycdft/gpu/_torch.py +0 -0
  33. {pycdft-0.2.0 → pycdft-0.3.1}/pycdft/gpu/api.py +0 -0
  34. {pycdft-0.2.0 → pycdft-0.3.1}/pycdft/gpu/devices.py +0 -0
  35. {pycdft-0.2.0 → pycdft-0.3.1}/pycdft/gpu/kernels.py +0 -0
  36. {pycdft-0.2.0 → pycdft-0.3.1}/pycdft/math.py +0 -0
  37. {pycdft-0.2.0 → pycdft-0.3.1}/pycdft/py.typed +0 -0
  38. {pycdft-0.2.0 → pycdft-0.3.1}/pyproject.toml +0 -0
  39. {pycdft-0.2.0 → pycdft-0.3.1}/setup.cfg +0 -0
  40. {pycdft-0.2.0 → pycdft-0.3.1}/tests/naive_cdft.py +0 -0
  41. {pycdft-0.2.0 → pycdft-0.3.1}/tests/r_cdft_reference.py +0 -0
  42. {pycdft-0.2.0 → pycdft-0.3.1}/tests/test_api.py +0 -0
  43. {pycdft-0.2.0 → pycdft-0.3.1}/tests/test_core.py +0 -0
  44. {pycdft-0.2.0 → pycdft-0.3.1}/tests/test_equivalence.py +0 -0
  45. {pycdft-0.2.0 → pycdft-0.3.1}/tests/test_gpu.py +0 -0
  46. {pycdft-0.2.0 → pycdft-0.3.1}/tests/test_ibicus.py +0 -0
  47. {pycdft-0.2.0 → pycdft-0.3.1}/tests/test_math.py +0 -0
  48. {pycdft-0.2.0 → pycdft-0.3.1}/tests/test_nan.py +0 -0
  49. {pycdft-0.2.0 → pycdft-0.3.1}/tests/test_r_cdft.py +0 -0
  50. {pycdft-0.2.0 → pycdft-0.3.1}/tests/test_tails.py +0 -0
@@ -0,0 +1,28 @@
1
+ name: release
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ publish:
12
+ runs-on: ubuntu-latest
13
+ environment: pypi
14
+ permissions:
15
+ id-token: write # OIDC token for trusted publishing
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ - uses: actions/setup-python@v5
19
+ with:
20
+ python-version: "3.11"
21
+ - name: Build
22
+ run: |
23
+ pip install -q build
24
+ python -m build
25
+ - name: Publish to PyPI
26
+ uses: pypa/gh-action-pypi-publish@release/v1
27
+ with:
28
+ verify-metadata: true
@@ -4,6 +4,25 @@ All notable changes to this project are documented here. The format follows
4
4
  [Keep a Changelog](https://keepachangelog.com/) and versioning follows
5
5
  [Semantic Versioning](https://semver.org/).
6
6
 
7
+ ## [0.3.1] - 2026-10-13
8
+
9
+ ### Added
10
+
11
+ - README: CI, PyPI version, Python versions and license badges.
12
+
13
+ ## [0.3.0] - 2026-10-13
14
+
15
+ ### Added
16
+
17
+ - PyPI publishing via GitHub Actions trusted publishing (OIDC):
18
+ `.github/workflows/release.yml` builds the sdist and wheel and uploads on
19
+ tag push (`v*`), with no API tokens or stored secrets.
20
+
21
+ ### Documentation
22
+
23
+ - README: PyPI install instructions (`pip install pycdft`, with the
24
+ `[gpu]` extra for the optional torch backend).
25
+
7
26
  ## [0.2.0] - 2026-10-12
8
27
 
9
28
  ### Documentation
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyCDFt
3
- Version: 0.2.0
3
+ Version: 0.3.1
4
4
  Summary: CDF-t statistical downscaling / bias correction, vectorized over grid cells (pure numpy)
5
5
  Author: PyCDFt contributors
6
6
  License-Expression: Apache-2.0
@@ -40,6 +40,11 @@ Dynamic: license-file
40
40
 
41
41
  # PyCDFt
42
42
 
43
+ [![CI](https://github.com/relmonta/pycdft/actions/workflows/ci.yml/badge.svg)](https://github.com/relmonta/pycdft/actions/workflows/ci.yml)
44
+ [![PyPI version](https://img.shields.io/pypi/v/PyCDFt.svg)](https://pypi.org/project/PyCDFt/)
45
+ [![Python versions](https://img.shields.io/pypi/pyversions/PyCDFt.svg)](https://pypi.org/project/PyCDFt/)
46
+ [![License](https://img.shields.io/pypi/l/PyCDFt.svg)](https://github.com/relmonta/pycdft/blob/main/LICENSE)
47
+
43
48
  **CDF-t statistical downscaling / bias correction, vectorized over grid cells
44
49
  (pure numpy).**
45
50
 
@@ -69,9 +74,11 @@ ds = model.fit_transform(obs, cm_hist, cm_future) # (1000,) downscaled series
69
74
  ## Installation
70
75
 
71
76
  ```bash
72
- pip install . # from this repository (numpy only)
73
- # or editable for development
74
- pip install -e .[test]
77
+ pip install pycdft # from PyPI (numpy only)
78
+ pip install "pycdft[gpu]" # + optional torch GPU backend
79
+ # or from this repository:
80
+ pip install . # core only
81
+ pip install -e ".[test]" # editable, with the test tools
75
82
  ```
76
83
 
77
84
  Requires Python ≥ 3.9 and `numpy>=1.20`. The core has **no other
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyCDFt
3
- Version: 0.2.0
3
+ Version: 0.3.1
4
4
  Summary: CDF-t statistical downscaling / bias correction, vectorized over grid cells (pure numpy)
5
5
  Author: PyCDFt contributors
6
6
  License-Expression: Apache-2.0
@@ -40,6 +40,11 @@ Dynamic: license-file
40
40
 
41
41
  # PyCDFt
42
42
 
43
+ [![CI](https://github.com/relmonta/pycdft/actions/workflows/ci.yml/badge.svg)](https://github.com/relmonta/pycdft/actions/workflows/ci.yml)
44
+ [![PyPI version](https://img.shields.io/pypi/v/PyCDFt.svg)](https://pypi.org/project/PyCDFt/)
45
+ [![Python versions](https://img.shields.io/pypi/pyversions/PyCDFt.svg)](https://pypi.org/project/PyCDFt/)
46
+ [![License](https://img.shields.io/pypi/l/PyCDFt.svg)](https://github.com/relmonta/pycdft/blob/main/LICENSE)
47
+
43
48
  **CDF-t statistical downscaling / bias correction, vectorized over grid cells
44
49
  (pure numpy).**
45
50
 
@@ -69,9 +74,11 @@ ds = model.fit_transform(obs, cm_hist, cm_future) # (1000,) downscaled series
69
74
  ## Installation
70
75
 
71
76
  ```bash
72
- pip install . # from this repository (numpy only)
73
- # or editable for development
74
- pip install -e .[test]
77
+ pip install pycdft # from PyPI (numpy only)
78
+ pip install "pycdft[gpu]" # + optional torch GPU backend
79
+ # or from this repository:
80
+ pip install . # core only
81
+ pip install -e ".[test]" # editable, with the test tools
75
82
  ```
76
83
 
77
84
  Requires Python ≥ 3.9 and `numpy>=1.20`. The core has **no other
@@ -6,6 +6,7 @@ Makefile
6
6
  README.md
7
7
  pyproject.toml
8
8
  .github/workflows/ci.yml
9
+ .github/workflows/release.yml
9
10
  PyCDFt.egg-info/PKG-INFO
10
11
  PyCDFt.egg-info/SOURCES.txt
11
12
  PyCDFt.egg-info/dependency_links.txt
@@ -21,9 +22,6 @@ examples/example_ibicus_compare.py
21
22
  examples/example_r_gaussian.py
22
23
  examples/example_skewed.py
23
24
  examples/gpu_example.py
24
- examples/figures/example_grid.png
25
- examples/figures/example_r_gaussian.png
26
- examples/figures/example_skewed.png
27
25
  pycdft/__init__.py
28
26
  pycdft/api.py
29
27
  pycdft/core.py
@@ -1,5 +1,10 @@
1
1
  # PyCDFt
2
2
 
3
+ [![CI](https://github.com/relmonta/pycdft/actions/workflows/ci.yml/badge.svg)](https://github.com/relmonta/pycdft/actions/workflows/ci.yml)
4
+ [![PyPI version](https://img.shields.io/pypi/v/PyCDFt.svg)](https://pypi.org/project/PyCDFt/)
5
+ [![Python versions](https://img.shields.io/pypi/pyversions/PyCDFt.svg)](https://pypi.org/project/PyCDFt/)
6
+ [![License](https://img.shields.io/pypi/l/PyCDFt.svg)](https://github.com/relmonta/pycdft/blob/main/LICENSE)
7
+
3
8
  **CDF-t statistical downscaling / bias correction, vectorized over grid cells
4
9
  (pure numpy).**
5
10
 
@@ -29,9 +34,11 @@ ds = model.fit_transform(obs, cm_hist, cm_future) # (1000,) downscaled series
29
34
  ## Installation
30
35
 
31
36
  ```bash
32
- pip install . # from this repository (numpy only)
33
- # or editable for development
34
- pip install -e .[test]
37
+ pip install pycdft # from PyPI (numpy only)
38
+ pip install "pycdft[gpu]" # + optional torch GPU backend
39
+ # or from this repository:
40
+ pip install . # core only
41
+ pip install -e ".[test]" # editable, with the test tools
35
42
  ```
36
43
 
37
44
  Requires Python ≥ 3.9 and `numpy>=1.20`. The core has **no other
@@ -175,10 +175,11 @@
175
175
  <!-- 3 ============================================================ -->
176
176
  <section id="install">
177
177
  <h2>3. Installation</h2>
178
- <p>You need Python 3.9 or newer. Install from the repository:</p>
179
- <pre><code>pip install . # core only (numpy)
180
- pip install -e ".[test]" # development install with the test tools</code></pre>
181
- <p>(The quotes keep shells such as zsh from interpreting the brackets.) The core has <strong>no dependencies beyond numpy</strong>. Optional extras:</p>
178
+ <p>You need Python 3.9 or newer. The core is <strong>numpy only</strong>:</p>
179
+ <pre><code>pip install pycdft # from PyPI
180
+ pip install "pycdft[gpu]" # + optional torch GPU backend
181
+ pip install -e ".[test]" # development install (from the repository)</code></pre>
182
+ <p>(The quotes keep shells such as zsh from interpreting the brackets.) Optional extras:</p>
182
183
  <table>
183
184
  <tr><th>Extra</th><th>What it adds</th></tr>
184
185
  <tr><td><code>[gpu]</code></td><td>torch, for the GPU backend (<code>pycdft.gpu</code>). For a specific build (ROCm, CPU-only) install that torch first — see §8.</td></tr>
@@ -27,7 +27,7 @@ except Exception: # pragma: no cover - torch-less install
27
27
  gpu = None # type: ignore[assignment]
28
28
  GPU_AVAILABLE = False
29
29
 
30
- __version__ = "0.2.0"
30
+ __version__ = "0.3.1"
31
31
 
32
32
  __all__ = [
33
33
  "CDFt",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes