Skip to content

v2.32.3

Choose a tag to compare

@torchlens-release torchlens-release released this 25 Jul 22:37
· 15989 commits to main since this release

v2.32.3 (2026-07-25)

This release is published under the Apache-2.0 License.

Bug Fixes

  • capture: Avoid torch 2.1 storage weakref segfault (7420a39)

Torch 2.1 returns ephemeral UntypedStorage wrappers whose deallocator can leave WeakKeyDictionary refs dangling. The runnable completeness witness then crashed CPython while releasing its storage-origin map at capture teardown.\n\nFeature-detect retained storage wrappers and keep an identity-safe strong origin registry for the active forward on affected runtimes; preserve weak keys on modern torch.

  • ci: Install full [test] extra in smoke + pin mypy/ruff (unblock matrix, stop tooling drift) (1b9f677)

After 2.32.2, all smoke matrix legs still failed at COLLECTION -- the smoke job installed only .[dev,tabular], but merged rf/viz test files import heavy deps unguarded (torchvision in test_rf_remediation_rules.py, etc.), and pytest imports every test module during collection. And Quality/mypy failed because CI installed an unpinned mypy that flags Tensor.names (torch-stub drift), which local mypy 2.1.0 passes.

  • .github/workflows/tests.yml: smoke installs .[dev,tabular,test] so torchvision/ timm/transformers/pydot are present -> collection succeeds -> the matrix actually runs (finally verifying the torch-2.1 / py3.10 package fixes shipped in 2.32.1, previously masked by collection errors). Heavier/slower smoke, deliberately. - pyproject.toml: pin ruff==0.15.4 + mypy==2.1.0 in the dev extra (one source of truth; stops the CI tooling-version drift that produced the 24k-ruff-error and Tensor.names-mypy failures); add pydot to the test extra.

Local: mypy 2.1.0 clean (366 files), pyproject parses. semantic-release -> 2.32.3.

  • compat: Derive generator table from live torch (b0b24d8)

  • compat: Guard removed named tensor APIs (db7471c)

  • io: Keep conditional trace tensors out of metadata (cdd5baf)

  • receptive_field: Map BatchNorm channel parents (31dd15b)

Training BatchNorm applies one full-dependence rule to activation and channel-vector parents. Projective transposition needs the vector parents' sole axis mapped to the output channel axis; without it, the full-rule passthrough became UNKNOWN and tripped the well-formed-state assertion. Record parent-specific full axes and axis maps so the solve remains exact instead of suppressing the validation tripwire.

  • runnable: Normalize torch 2.13 private callable aliases (bfe11d8)

  • runnable: Support NumPy 2 and Python 3.10 RNG witnesses (a4f1485)

Chores

  • dev: Pin pip-audit 2.10.1 (66f99db)

Continuous Integration

  • quality: Pin Torch 2.13 type-check environment (68fc838)

  • release: Gate publishing on reusable suites (e15daf1)

  • tests: Pin CPU matrix and add latest canary (17ef3af)

  • tests: Pin NumPy below 2 on floor legs (1cf44da)

  • tests: Run canonical py3.11 leg on smoke like the rest of the matrix (b538324)

The full-suite 'not slow' gate on the canonical leg surfaced a pre-existing backlog of latent not-slow failures on main (CI has always run smoke only), including an infinite-loop hang in the viz collapse-optimizer. Characterizing and fixing that suite is a separate initiative; the reproducible matrix repair ships on the smoke baseline the project has always used. The canonical render env (torch 2.8 / py3.11) still runs the byte-exact render oracle.

Testing

  • compat: Feature-detect torch 2.1 API surface (12bb14d)

  • compat: Gate version-sensitive fixtures (e5df4ec)

  • runnable: Accept torch seed overflow error variants (9a25361)

  • runnable: Assert zero-element linear warnings (f22999b)

  • runnable: Support str enums on Python 3.10 (cfe4a44)

  • security: Handle absent operator.call on Python 3.10 (f74f5c2)

  • viz: Normalize Python 3.10 profiling qualnames (40f2c10)

  • viz: Refresh render-identity oracle golden for pydot-guard line shift (d5d8704)

Refresh the benign source-line shift (:45->:46) introduced by the 89d9e5c pydot importorskip guard; there is no semantic rendering change, and the test was skipped without pydot so the drift stayed latent until the matrix installed pydot.

  • viz: Scope byte oracle to canonical CI (44c8147)

Detailed Changes: v2.32.2...v2.32.3