Skip to content

Commit 43f83b8

Browse files
committed
CHANGELOG: shorten 1.0.0 entry; fix heading levels
1 parent a37e2ff commit 43f83b8

File tree

1 file changed

+76
-86
lines changed

1 file changed

+76
-86
lines changed

CHANGELOG.md

Lines changed: 76 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,98 +1,88 @@
1-
## Changelog
2-
3-
### v1.0.0
4-
5-
First release under modern Python and modern packaging. Python 2.7 and 3.4
6-
are no longer supported.
7-
8-
#### New
9-
10-
- **Python 3.11 – 3.14 supported.** Pre-built wheels on PyPI for Linux,
11-
macOS, and Windows, across all four Python versions, with OpenMP
12-
parallelism enabled in every wheel.
13-
- **Finite-difference stencil reproduction.** A WLSQM fit on a classical
14-
central-difference stencil (3-point 1D, 5-point plus 2D, 7-point plus 3D)
15-
now reproduces the hand-coded stencil result to machine precision on any
16-
smooth input, not just polynomials. This is the natural generalization of
17-
WLSQM's polynomial-recovery property and is pinned by the test suite.
18-
19-
#### Fixed
20-
21-
- **Data race in `fit_1D_many_parallel`**, pre-existing from 2016. The 1D
22-
branch of the basic parallel many-case fitter passed a compile-time
23-
constant `TASKID = 0` to `impl.solve()` instead of the per-thread
24-
`taskid = openmp.omp_get_thread_num()`. Every OpenMP worker clobbered
25-
thread-0's work buffer, producing silently wrong fits whenever the
26-
parallel 1D many-case path ran with `ntasks > 1`. The 2D/3D branch, the
27-
iterative parallel variant, and the serial variant were always correct.
28-
A regression test (64 cases × 4 threads) now pins this.
29-
- **`rescale_dgeequ` no longer silently accepts singular matrices.** It now
30-
checks LAPACK's `info` return and raises `numpy.linalg.LinAlgError` when
31-
a row or column is exactly zero, instead of returning nonsense scaling
32-
factors that would poison the downstream solve.
33-
34-
#### Changed
35-
36-
- **Installation is now `pip install wlsqm`.** The old `python setup.py
37-
install` path is gone; `setup.py` has been removed. The build system is
38-
[meson-python](https://meson-python.readthedocs.io/), and dev environments
39-
are managed with [PDM](https://pdm-project.org/).
40-
- **Language change on "Taylor series."** The package's internal storage
41-
layout still uses the same slots a Taylor expansion would (function
42-
value, first derivatives, second derivatives divided by `2!`, …), but
43-
the comments and docstrings no longer call the model a "Taylor series."
44-
The coefficients come from a least-squares fit, not from analytic
45-
differentiation, and the error behavior is much better than Taylor
46-
truncation would predict. The internal C-API function names
47-
`taylor_1D/2D/3D` are kept for backwards compatibility of downstream
48-
`cimport`s — see [`wlsqm/fitter/polyeval.pyx`](wlsqm/fitter/polyeval.pyx).
49-
- **Comprehensive pytest suite.** 57 tests covering polynomial recovery
50-
across dimensions and orders, `ExpertSolver` prepare/solve round-trips,
51-
interpolation accuracy at interior points, parallel ≡ serial equivalence,
52-
finite-difference stencil reproduction, first-derivative robustness to
53-
Gaussian noise, edge cases, the LAPACK driver layer, and `.pxd`
54-
installability for downstream `cimport` users.
55-
56-
#### Internal
57-
58-
- Port from Cython 0.29 to Cython 3.x. `noexcept` audit on every `cdef
59-
... nogil` function, split between pure computational helpers
60-
(`noexcept`) and LAPACK wrappers / fit dispatchers (`except -1`). `fma`
61-
now imported from `libc.math` instead of a manual `cdef extern` hack
62-
that worked around a long-fixed bug in Cython 0.20.1.
63-
- All `DEF` compile-time constants replaced with module-level `cdef`
64-
constants or inlined as literals at call sites (Cython 3 deprecated
65-
`DEF`). Function-local protocol constants like `TASKID`, `NTASKS`, and
66-
`MODE_BASIC` / `MODE_ITERATIVE` live at module scope in `simple.pyx`
67-
where the value is a project-wide convention, and inside each function
68-
where the value is per-function.
69-
- `ScalingAlgo` is now a proper `enum.IntEnum`, replacing the old bare-
70-
class Python 2 workaround.
71-
- GitHub Actions CI: lint (ruff + cython-lint), test matrix (3 OSes × 4
72-
Python versions), cibuildwheel for Linux/macOS/Windows wheels,
73-
meson-python sdist, and trusted-publisher PyPI publishing on `v*` tag
74-
push.
75-
- Copyright updated to 2016–2026 and affiliation updated to JAMK
76-
University of Applied Sciences.
77-
78-
79-
## Pre-v1.0 history
80-
81-
### [v0.1.5]
1+
# Changelog
2+
3+
## v1.0.0 (15 April 2026)
4+
5+
First release under modern Python and modern packaging.
6+
7+
Python 2.7 and 3.4 are no longer supported.
8+
9+
### New
10+
11+
- **Python 3.11 – 3.14 supported.**
12+
- Pre-built wheels on PyPI for Linux, macOS, and Windows, with OpenMP
13+
parallelism enabled in every wheel.
14+
15+
### Fixed
16+
17+
- **Data race in `fit_1D_many_parallel`**, pre-existing from 2016.
18+
- Every OpenMP worker clobbered thread-0's work buffer, producing silently
19+
wrong fits whenever the parallel 1D many-case path ran with `ntasks > 1`. The
20+
2D/3D branch, the iterative parallel variant, and the serial variant were
21+
always correct.
22+
23+
- **`rescale_dgeequ` no longer silently accepts singular matrices.**
24+
- It now checks LAPACK's `info` return and raises `numpy.linalg.LinAlgError`
25+
when a row or column is exactly zero.
26+
27+
### Changed
28+
29+
- **Installation is now `pip install wlsqm`.**
30+
- The old `python setup.py install` path is gone; `setup.py` has been removed.
31+
- The build system is [meson-python](https://meson-python.readthedocs.io/),
32+
and dev environments are managed with [PDM](https://pdm-project.org/).
33+
34+
- **Language change on "Taylor series."**
35+
- The package's internal storage layout still uses the same slots a Taylor
36+
expansion would (e.g. in 2D, `f`, `∂f/∂x`, `∂f/∂y`, `(1/2!) ∂²f/∂x²`,
37+
`∂²f/∂x∂y`, `(1/2!) ∂²f/∂y²`, …), but the comments and docstrings no longer
38+
call the model a "Taylor series."
39+
- In the WLSQM method, the coefficients actually come from a least-squares
40+
fit, not from analytic differentiation. The error behavior is much better than
41+
Taylor truncation would predict.
42+
- The internal C-API function names `taylor_1D/2D/3D` are kept for backwards
43+
compatibility of downstream `cimport`s — see
44+
[`wlsqm/fitter/polyeval.pyx`](wlsqm/fitter/polyeval.pyx).
45+
46+
### Internal
47+
48+
- **Port from Cython 0.29 to Cython 3.x**.
49+
50+
- **Comprehensive pytest suite.** 57 tests, covering:
51+
- polynomial recovery across dimensions and orders,
52+
- `ExpertSolver` prepare/solve round-trips,
53+
- interpolation accuracy at interior points,
54+
- parallel ≡ serial implementation equivalence,
55+
- finite-difference stencil reproduction,
56+
- first-derivative robustness to Gaussian noise,
57+
- edge cases,
58+
- the LAPACK driver layer, and
59+
- `.pxd` installability for downstream `cimport` users.
60+
61+
- `ScalingAlgo` is now a proper `enum.IntEnum`, replacing the old bare-class
62+
Python 2 workaround.
63+
64+
- **GitHub Actions CI**: lint (ruff + cython-lint), test matrix
65+
(3 OSes × 4 Python versions), cibuildwheel for Linux/macOS/Windows
66+
wheels, meson-python sdist, and auto-publishing of releases on PyPI.
67+
68+
69+
# Pre-v1.0 history (2016-2017)
70+
71+
## [v0.1.5]
8272
- support both Python 3.4 and 2.7
8373

84-
### [v0.1.4]
74+
## [v0.1.4]
8575
- actually use the shorter short description (oops)
8676

87-
### [v0.1.3]
77+
## [v0.1.3]
8878
- setup.py is now Python 3 compatible (but wlsqm itself is not yet!)
8979
- fixed sdist: package also CHANGELOG.md
9080

91-
### [v0.1.2]
81+
## [v0.1.2]
9282
- set zip_safe to False to better work with Cython (important for libs that depend on this one)
9383

94-
### [v0.1.1]
84+
## [v0.1.1]
9585
- change distribution system from distutils to setuptools
9686

97-
### [v0.1.0]
87+
## [v0.1.0]
9888
- initial version

0 commit comments

Comments
 (0)