You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* ⬆️ chore(version): update version to 3.3.0 across all config files
* fix(metrics): use cnp.int32_t* for portable buffer pointer types
* chore(benchmarks): add optional WER libraries and harden benchmark script
* 📝 docs(changelog): document benchmark dependency additions and script hardening
* 🔧 docs(readme): fix FOSSA badge link URL encoding
* fix(cython): use cnp.int32_t typed buffers for Levenshtein DP matrices
* fix(changelog): standardize Levenshtein DP buffers to use cnp.int32_t for improved type safety
* fix(pyproject): add missing newline at end of benchmarks section
Copy file name to clipboardExpand all lines: CHANGELOG.md
+15Lines changed: 15 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,21 @@
4
4
This changelog file outlines a chronologically ordered list of the changes made on this project.
5
5
It is organized by version and release date followed by a list of Enhancements, New Features, Bug Fixes, and/or Breaking Changes.
6
6
7
+
## Version 3.3.0
8
+
9
+
**Released:** December 19, 2025
10
+
**Tag:** v3.3.0
11
+
12
+
### Enhancements
13
+
14
+
- Implemented ultra-fast WER-only path with space-optimized 2-row dynamic programming algorithm and batch buffer reuse. Added four new functions (`calculations_wer_only()`, `_calculations_wer_only_reuse_ptr()`, `_metrics_batch_wer_only()`, `metrics_wer_only()`) that eliminate backtrace overhead and use O(n) memory instead of O(m×n). This optimization uses pointer swapping instead of value copying and reuses DP buffers across entire batches, providing significant performance gains for `wer()` and `wers()` functions that only need the WER metric without error counts or word lists.
15
+
16
+
- Fixed portability issue in WER-only batch processing by replacing platform-dependent `int*` pointers with guaranteed 32-bit `cnp.int32_t*` pointers. This ensures correct behavior on all platforms where `sizeof(int)` may differ from 4 bytes, while also removing unnecessary type casts for cleaner code that follows NumPy/Cython best practices.
17
+
18
+
- Expanded benchmarking support by adding optional third-party WER libraries (`pywer`, `evaluate`, `universal-edit-distance`, `torchmetrics`) to `pyproject.toml` under the `benchmarks` extra. Updated `benchmark_synthetic_data_local.py` to safely import optional dependencies, ensure all benchmark functions are always defined, and enforce consistent numeric return types. This fixes static analysis warnings, prevents runtime errors when optional packages are missing, and enables more comprehensive and reliable cross-package performance comparisons.
19
+
20
+
- Standardized all Levenshtein dynamic programming buffers and memoryviews to use cnp.int32_t instead of platform-dependent int. This ensures strict dtype alignment with NumPy int32 arrays, removes undefined behavior on platforms where sizeof(int) != 4, and improves type safety without impacting performance.
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,7 +13,7 @@
13
13
|||
14
14
| --- | --- |
15
15
| Meta |[](https://www.python.org/downloads/) [](https://github.com/psf/black) [](https://werpy.readthedocs.io/en/latest/?badge=latest) [](https://www.analyticsinmotion.com)|
0 commit comments