Skip to content

chore(deps): bump scirs2-text from 0.6.4 to 0.6.5 - #60

Merged
Tiphereth-A merged 1 commit into
masterfrom
dependabot/cargo/scirs2-text-0.6.5
Aug 9, 2026
Merged

chore(deps): bump scirs2-text from 0.6.4 to 0.6.5#60
Tiphereth-A merged 1 commit into
masterfrom
dependabot/cargo/scirs2-text-0.6.5

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Aug 9, 2026

Copy link
Copy Markdown
Contributor

Bumps scirs2-text from 0.6.4 to 0.6.5.

Release notes

Sourced from scirs2-text's releases.

SciRS2 0.6.5 Release

A defect-hunting cycle rather than a features cycle: a workspace-wide audit of every #[ignore]d test (132 found, ~31% bare/undocumented) that, followed to ground, surfaced and fixed real bugs across autograd, linalg, neural, stats, graph, io, integrate, series, spatial, ndimage and special — the single biggest of which is that scirs2-autograd's live backward pass silently identity-passed-through the majority of its operators instead of computing their real gradients. Several hundred files touched workspace-wide, net tens of thousands of lines removed (mostly scirs2-signal, whose module tree had drifted to 47% unreachable dead/duplicate code — see Changed). Every #[ignore] reason is now machine-checked by a new policy lint.

Fixed

  • scirs2-autograd: the single most impactful fix in this release. The live backward-pass dispatcher (gradient.rs::compute_grad_for_input, a ~670-line if/else chain keyed on Op::name() strings) covered only 58 of 281 differentiable op implementations; everything it didn't recognize silently fell through to Some(gy) — an identity gradient — with no error, no warning, no debug_assert. Every elementary math function (sqrt, exp, ln, sin/cos/tan, asin/acos/atan, sinh/cosh/asinh/acosh/atanh, log2/log10/exp2/exp10, abs) and every activation (softplus, elu, swish, gelu, mish) had a correct Op::grad() implementation that was simply never called. Dispatch now consults Op::grad() for anything the override table doesn't have a higher-order-safe special case for, converting roughly 223 wrong-or-absent gradients to correct ones on day one. Also fixed independently: reduce_sum/transpose/gather were only correct under an all-ones cotangent (masking the bug from every existing test); reduce_mean lost the 1/N factor; sigmoid_cross_entropy was caught by a contains("Sigmoid") substring match and produced sign-flipped gradients; BatchMatMul was caught by ends_with("MatMul") and applied a 2-D transpose rule to 3-D batched tensors; concat/einsum/tensordot panicked during backprop instead of returning a gradient
  • scirs2-autograd: the public custom-gradient API (custom_op, scale_gradient, selective_stop_gradient, detach) was a complete no-op — every one of them returned the identity gradient regardless of the user-supplied backward closure, silently disabling gradient-reversal layers and detach-based graph pruning. Now routes through the same fixed dispatch above and is genuinely functional. Added tests/gradient_fd_harness.rs + gradient_fd_harness_matrix.rs, a finite-difference regression harness using a non-uniform cotangent (a uniform all-ones cotangent is what let transpose/gather/reduce_sum ship broken for this long)
  • scirs2-autograd: SymmetricEigenOp's forward pass now genuinely diagonalizes via a real cyclic-Jacobi eigenvalue algorithm (tensor_ops::matrix_calculus::symmetric_eigen), shared by one code path for every matrix size instead of separate n==1/n==2/general-case special cases with their own eigenvector sign/ordering conventions
  • scirs2-neural: Lstm, the Transformer encoder/decoder stack, and the BatchNorm/LayerNorm/normalization-variant layers (layers/recurrent/lstm.rs, layers/norm_variants.rs) gained real backward() implementations computing genuine parameter/input gradients, replacing paths that returned zero or input-shaped placeholder gradients
  • scirs2-linalg: added a real, convergence-checked general (non-symmetric) eigenvalue/Schur decomposition engine (eigen/general.rs: Householder→upper-Hessenberg reduction, then implicit double-shift Francis QR with deflation, per Golub & Van Loan) shared by decomposition::schur, lapack::eig, and eigen::advanced_precision_eig's non-symmetric path — each previously carried its own broken implementation: a fixed count of unshifted QR iterations with no convergence check (empirically verified to leave sub-diagonal entries around 1e-4 and eigenvalues off by 1-3% on a companion matrix with closely-spaced eigenvalues), or a placeholder only correct for already-diagonal input. lstsq/pinv (compat.rs) were already real (both delegate to the crate's genuine SVD-based solvers), completing the eig/schur/lstsq trio end-to-end
  • scirs2-stats: the one-sided Kolmogorov-Smirnov test's p-value formula was asymmetric/backwards, printing logically-inverted "Rejected"/"Not rejected" conclusions; polyfit's regression F-test hardcoded f_p_value = F::zero() instead of computing it from the F-statistic; fisher_exact (contingency/mod.rs) and the QMC low-discrepancy sequence generators (qmc/advanced.rs, qmc/enhanced_sequences.rs — Niederreiter/Sobol) were fixed after producing garbage output on the affected code paths; ErrorMonitor::get_statistics() self-deadlocked by re-locking its own non-reentrant Mutex from detect_active_patterns()
  • scirs2-graph: spectral clustering and Hungarian (assignment-problem) matching now compute their real linear-algebra/optimal-assignment answers instead of a random/stand-in result; advanced/mod.rs's AdvancedProcessor now accumulates genuine wall-clock timing and structural/RSS-sampled memory statistics instead of fabricated constants; generators::watts_strogatz_graph's rewiring step used has_node (always true) instead of has_edge, so it hung on ~99.8% of seeds at p > 0
  • scirs2-io: NetCDF3 read/write (netcdf/classic_backend.rs) now performs a real implementation instead of a no-op stand-in (the previous version is kept for reference under netcdf/backup/)
  • scirs2-integrate: the DOP853 and RK23 adaptive-step ODE methods (ode/methods/adaptive.rs, ode/methods/enhanced_lsoda.rs) now implement their real embedded error estimators and step-size control instead of placeholder stepping
  • scirs2-series: out_of_core streaming aggregation hung or grew unbounded memory on large inputs and double-counted chunk boundaries; both fixed
  • scirs2-spatial: octree/quadtree's k-nearest-neighbour BinaryHeap used an inverted Ord implementation, returning the farthest candidates instead of the nearest; pathplanning::astar's reconstruct_path always reported a path cost of 0.0 regardless of the actual path found
  • scirs2-ndimage: mmap_io's regular-array loader (sibling of the already-fixed loadimage_mmap) read raw bytes from offset 0, ignoring the variable-length header create_mmap/saveimage_mmap actually write, shifting every loaded element; now delegates to open_mmap/as_array(), which also removes the old f32/f64-only restriction
  • scirs2-special: gamma(x) silently returned inf for x in approximately [140.5, 171] (a half-integer double-factorial overflow compounded by an overly conservative Stirling-approximation threshold — both had to be fixed together); a test's hardcoded gamma(170.5) reference value was also simply wrong (off by roughly 13×), previously masked by the same overflow
  • tools/cargo-scirs2-policy: .config/nextest.toml's test(property_) override matched the wrong tests — test() filters match test names, and the real quickcheck/proptest suites (tests/property_based_tests.rs in scirs2-stats/scirs2-metrics) have names like descriptive_stats_properties::mean_bounds_property, with no property_ substring anywhere; the filter instead accidentally matched unrelated property_tests::* modules in other crates. Fixed to binary(property_based_tests), verified against cargo nextest run --workspace --list

Added

  • tools/cargo-scirs2-policy: new ignore_audit check (IGNORE_AUDIT_001..004) enforcing the #[ignore] reason taxonomy below and outlawing two "fake-passing" test patterns found repeatedly during the audit: a bare tautological assert!(true), and a #[test] fn whose Err(_)/Err(e) match arm body is only a println!/eprintln! mentioning "skipping" (asserts nothing, so it can never fail regardless of what the code under test actually does)
  • scirs2-signal: wired 83 previously-orphaned-but-real files back into the crate (wire_files.txt lists them) — most notably a full Kalman filter family (standard/extended/unscented/ensemble/information/particle), a BSS/ICA toolkit, compressed-sensing sparse recovery (OMP/basis-pursuit/LASSO/CoSaMP), time-series feature extraction, and a SciPy-ShortTimeFFT-class STFT port — none of which had any wired equivalent anywhere in the crate

Changed

  • Workspace-wide: completed a full ignore-legitimacy audit (every #[ignore]d test workspace-wide actually run and root-caused, not just read). The #[ignore] count dropped from 132 pre-audit (~31% bare/no reason) to 59, every one of which now carries a reason tagged requires-gpu:, requires-env:, slow:, bench:, or not-implemented: — enforced going forward by the new ignore_audit lint above
  • scirs2-signal: deleted ~167 unreachable legacy/duplicate files (541 total .rs files in src/, 255 unreachable — 47%, not the ~82 previously estimated) — six mutually-redundant Lomb-Scargle validation suites, five competing WPT validation suites, four independent copies of the same sparse-recovery algorithm family, three redundant synchrosqueezed-transform implementations, and several half-finished splitrs-style refactors that were never wired into lib.rs. See Added above for the real functionality salvaged out of this set before deletion
  • README.md: replaced a stale "404 tests marked as ignored" claim with the true post-audit count (59) and a one-sentence description of the reason taxonomy
  • Dependency: oxicode updated 0.2.40.2.5; oxiz updated 0.3.00.3.1; oxiarc-archive/oxiarc-lz4/oxiarc-bzip2/oxiarc-zstd/oxiarc-deflate/oxiarc-snappy/oxiarc-brotli updated 0.3.60.4.0

Full Changelog: cool-japan/scirs@v0.6.4...v0.6.5

Changelog

Sourced from scirs2-text's changelog.

[0.6.5] - 2026-07-31

A defect-hunting cycle rather than a features cycle: a workspace-wide audit of every #[ignore]d test (132 found, ~31% bare/undocumented) that, followed to ground, surfaced and fixed real bugs across autograd, linalg, neural, stats, graph, io, integrate, series, spatial, ndimage and special — the single biggest of which is that scirs2-autograd's live backward pass silently identity-passed-through the majority of its operators instead of computing their real gradients. Several hundred files touched workspace-wide, net tens of thousands of lines removed (mostly scirs2-signal, whose module tree had drifted to 47% unreachable dead/duplicate code — see Changed). Every #[ignore] reason is now machine-checked by a new policy lint.

Fixed

  • scirs2-autograd: the single most impactful fix in this release. The live backward-pass dispatcher (gradient.rs::compute_grad_for_input, a ~670-line if/else chain keyed on Op::name() strings) covered only 58 of 281 differentiable op implementations; everything it didn't recognize silently fell through to Some(gy) — an identity gradient — with no error, no warning, no debug_assert. Every elementary math function (sqrt, exp, ln, sin/cos/tan, asin/acos/atan, sinh/cosh/asinh/acosh/atanh, log2/log10/exp2/exp10, abs) and every activation (softplus, elu, swish, gelu, mish) had a correct Op::grad() implementation that was simply never called. Dispatch now consults Op::grad() for anything the override table doesn't have a higher-order-safe special case for, converting roughly 223 wrong-or-absent gradients to correct ones on day one. Also fixed independently: reduce_sum/transpose/gather were only correct under an all-ones cotangent (masking the bug from every existing test); reduce_mean lost the 1/N factor; sigmoid_cross_entropy was caught by a contains("Sigmoid") substring match and produced sign-flipped gradients; BatchMatMul was caught by ends_with("MatMul") and applied a 2-D transpose rule to 3-D batched tensors; concat/einsum/tensordot panicked during backprop instead of returning a gradient
  • scirs2-autograd: the public custom-gradient API (custom_op, scale_gradient, selective_stop_gradient, detach) was a complete no-op — every one of them returned the identity gradient regardless of the user-supplied backward closure, silently disabling gradient-reversal layers and detach-based graph pruning. Now routes through the same fixed dispatch above and is genuinely functional. Added tests/gradient_fd_harness.rs + gradient_fd_harness_matrix.rs, a finite-difference regression harness using a non-uniform cotangent (a uniform all-ones cotangent is what let transpose/gather/reduce_sum ship broken for this long)
  • scirs2-autograd: SymmetricEigenOp's forward pass now genuinely diagonalizes via a real cyclic-Jacobi eigenvalue algorithm (tensor_ops::matrix_calculus::symmetric_eigen), shared by one code path for every matrix size instead of separate n==1/n==2/general-case special cases with their own eigenvector sign/ordering conventions
  • scirs2-neural: Lstm, the Transformer encoder/decoder stack, and the BatchNorm/LayerNorm/normalization-variant layers (layers/recurrent/lstm.rs, layers/norm_variants.rs) gained real backward() implementations computing genuine parameter/input gradients, replacing paths that returned zero or input-shaped placeholder gradients
  • scirs2-linalg: added a real, convergence-checked general (non-symmetric) eigenvalue/Schur decomposition engine (eigen/general.rs: Householder→upper-Hessenberg reduction, then implicit double-shift Francis QR with deflation, per Golub & Van Loan) shared by decomposition::schur, lapack::eig, and eigen::advanced_precision_eig's non-symmetric path — each previously carried its own broken implementation: a fixed count of unshifted QR iterations with no convergence check (empirically verified to leave sub-diagonal entries around 1e-4 and eigenvalues off by 1-3% on a companion matrix with closely-spaced eigenvalues), or a placeholder only correct for already-diagonal input. lstsq/pinv (compat.rs) were already real (both delegate to the crate's genuine SVD-based solvers), completing the eig/schur/lstsq trio end-to-end
  • scirs2-stats: the one-sided Kolmogorov-Smirnov test's p-value formula was asymmetric/backwards, printing logically-inverted "Rejected"/"Not rejected" conclusions; polyfit's regression F-test hardcoded f_p_value = F::zero() instead of computing it from the F-statistic; fisher_exact (contingency/mod.rs) and the QMC low-discrepancy sequence generators (qmc/advanced.rs, qmc/enhanced_sequences.rs — Niederreiter/Sobol) were fixed after producing garbage output on the affected code paths; ErrorMonitor::get_statistics() self-deadlocked by re-locking its own non-reentrant Mutex from detect_active_patterns()
  • scirs2-graph: spectral clustering and Hungarian (assignment-problem) matching now compute their real linear-algebra/optimal-assignment answers instead of a random/stand-in result; advanced/mod.rs's AdvancedProcessor now accumulates genuine wall-clock timing and structural/RSS-sampled memory statistics instead of fabricated constants; generators::watts_strogatz_graph's rewiring step used has_node (always true) instead of has_edge, so it hung on ~99.8% of seeds at p > 0
  • scirs2-io: NetCDF3 read/write (netcdf/classic_backend.rs) now performs a real implementation instead of a no-op stand-in (the previous version is kept for reference under netcdf/backup/)
  • scirs2-integrate: the DOP853 and RK23 adaptive-step ODE methods (ode/methods/adaptive.rs, ode/methods/enhanced_lsoda.rs) now implement their real embedded error estimators and step-size control instead of placeholder stepping
  • scirs2-series: out_of_core streaming aggregation hung or grew unbounded memory on large inputs and double-counted chunk boundaries; both fixed
  • scirs2-spatial: octree/quadtree's k-nearest-neighbour BinaryHeap used an inverted Ord implementation, returning the farthest candidates instead of the nearest; pathplanning::astar's reconstruct_path always reported a path cost of 0.0 regardless of the actual path found
  • scirs2-ndimage: mmap_io's regular-array loader (sibling of the already-fixed loadimage_mmap) read raw bytes from offset 0, ignoring the variable-length header create_mmap/saveimage_mmap actually write, shifting every loaded element; now delegates to open_mmap/as_array(), which also removes the old f32/f64-only restriction
  • scirs2-special: gamma(x) silently returned inf for x in approximately [140.5, 171] (a half-integer double-factorial overflow compounded by an overly conservative Stirling-approximation threshold — both had to be fixed together); a test's hardcoded gamma(170.5) reference value was also simply wrong (off by roughly 13×), previously masked by the same overflow
  • tools/cargo-scirs2-policy: .config/nextest.toml's test(property_) override matched the wrong tests — test() filters match test names, and the real quickcheck/proptest suites (tests/property_based_tests.rs in scirs2-stats/scirs2-metrics) have names like descriptive_stats_properties::mean_bounds_property, with no property_ substring anywhere; the filter instead accidentally matched unrelated property_tests::* modules in other crates. Fixed to binary(property_based_tests), verified against cargo nextest run --workspace --list

Added

  • tools/cargo-scirs2-policy: new ignore_audit check (IGNORE_AUDIT_001..004) enforcing the #[ignore] reason taxonomy below and outlawing two "fake-passing" test patterns found repeatedly during the audit: a bare tautological assert!(true), and a #[test] fn whose Err(_)/Err(e) match arm body is only a println!/eprintln! mentioning "skipping" (asserts nothing, so it can never fail regardless of what the code under test actually does)
  • scirs2-signal: wired 83 previously-orphaned-but-real files back into the crate (wire_files.txt lists them) — most notably a full Kalman filter family (standard/extended/unscented/ensemble/information/particle), a BSS/ICA toolkit, compressed-sensing sparse recovery (OMP/basis-pursuit/LASSO/CoSaMP), time-series feature extraction, and a SciPy-ShortTimeFFT-class STFT port — none of which had any wired equivalent anywhere in the crate

Changed

  • Workspace-wide: completed a full ignore-legitimacy audit (every #[ignore]d test workspace-wide actually run and root-caused, not just read). The #[ignore] count dropped from 132 pre-audit (~31% bare/no reason) to 59, every one of which now carries a reason tagged requires-gpu:, requires-env:, slow:, bench:, or not-implemented: — enforced going forward by the new ignore_audit lint above
  • scirs2-signal: deleted ~167 unreachable legacy/duplicate files (541 total .rs files in src/, 255 unreachable — 47%, not the ~82 previously estimated) — six mutually-redundant Lomb-Scargle validation suites, five competing WPT validation suites, four independent copies of the same sparse-recovery algorithm family, three redundant synchrosqueezed-transform implementations, and several half-finished splitrs-style refactors that were never wired into lib.rs. See Added above for the real functionality salvaged out of this set before deletion
  • README.md: replaced a stale "404 tests marked as ignored" claim with the true post-audit count (59) and a one-sentence description of the reason taxonomy
  • Dependency: oxicode updated 0.2.40.2.5; oxiz updated 0.3.00.3.1; oxiarc-archive/oxiarc-lz4/oxiarc-bzip2/oxiarc-zstd/oxiarc-deflate/oxiarc-snappy/oxiarc-brotli updated 0.3.60.4.0

Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [scirs2-text](https://github.com/cool-japan/scirs) from 0.6.4 to 0.6.5.
- [Release notes](https://github.com/cool-japan/scirs/releases)
- [Changelog](https://github.com/cool-japan/scirs/blob/master/CHANGELOG.md)
- [Commits](cool-japan/scirs@v0.6.4...v0.6.5)

---
updated-dependencies:
- dependency-name: scirs2-text
  dependency-version: 0.6.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file rust Pull requests that update rust code labels Aug 9, 2026
@Tiphereth-A
Tiphereth-A merged commit 77d4a2c into master Aug 9, 2026
18 checks passed
@Tiphereth-A
Tiphereth-A deleted the dependabot/cargo/scirs2-text-0.6.5 branch August 9, 2026 11:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file rust Pull requests that update rust code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant