Skip to content

Commit 17bb57a

Browse files
author
semantic-release
committed
chore(release): 0.15.1
1 parent e930b0b commit 17bb57a

File tree

3 files changed

+89
-2
lines changed

3 files changed

+89
-2
lines changed

CHANGELOG.md

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,93 @@
11
# CHANGELOG
22

33

4+
## v0.15.1 (2026-03-04)
5+
6+
### Bug Fixes
7+
8+
- **core**: Resolve 52 bugs across 9 waves of correctness, safety, and polish fixes
9+
([`d4ca75d`](https://github.com/johnmarktaylor91/torchlens/commit/d4ca75d13defe15f558799be05cb4dcd9d217a45))
10+
11+
Wave 1 — Critical Correctness: - Rewrite safe_copy() to eliminate numpy round-trip, fix bfloat16
12+
overflow, handle sparse/meta/quantized dtypes (#103, #137, #128, #139) - Guard print_override
13+
numpy conversion (#140), meta/sparse tensor memory (#24) - Fix validation crash on None
14+
parent_values (#150), silent exception pass (#151) - Add buffer duplicate guard in fast path
15+
(#116) - Fix postprocess_fast shared reference and unguarded parent_layers (#8, #152) - Add empty
16+
graph guard (#153), zombie label cleanup (#75) - Handle defaultdict in _safe_copy_arg (#127)
17+
18+
Wave 2 — Exception Safety: - Make module_forward_decorator exception-safe (#122) - Guard
19+
_handle_module_entry for untracked tensors (#117) - Clean up output tensors on fast-pass exception
20+
(#110) - Wrap activation_postfunc in pause_logging (#96) - Guard validation with
21+
save_function_args=False (#131) - Fix CUDA perturbation device consistency (#36)
22+
23+
Wave 3 — Fast-Pass State Reset: - Reset timing and stale lookup caches in save_new_activations (#87,
24+
#97, #98) - Pass raw label (not final) to gradient hook in fast path (#86) - Raise descriptive
25+
error for unexpected missing parents (#111)
26+
27+
Wave 4 — Argument Handling: - Deep-copy nested tuples in creation_args (#44) - Slice before cloning
28+
in display helper (#73) - Use logged shape in display (#45)
29+
30+
Wave 5 — Interface Polish: - Key layer_num_passes by no-pass label (#53) - Use rsplit for
31+
colon-split safety (#54) - Add slice indexing support (#78) - Guard to_pandas before pass finished
32+
(#124) - List candidates for ambiguous substring (#125) - Add ModuleLog string indexing (#120) -
33+
Support int/short-name in ParamAccessor.__contains__ (#84)
34+
35+
Wave 6 — Decoration/Model Prep: - Only add mapper entries if setattr succeeded (#31) - Add hasattr
36+
guard for identity asymmetry (#39) - Guard buffer setattr (#40) - Store dunder argnames stripped
37+
(#82) - Use inspect.Parameter.kind for varargs (#123)
38+
39+
Wave 7 — Visualization: - Fix vis_nesting_depth=0 crash (#94) - Use rsplit for colon-split (#104) -
40+
Fix collapsed node variable (#100) - Guard None tensor_shape (#118) - Guard LayerLog nesting depth
41+
(#138) - Use exact equality instead of substring match (#129)
42+
43+
Wave 8 — Control Flow/Loop Detection: - Remove dead sibling_layers iteration (#2) - Prevent shared
44+
neighbor double-add (#148)
45+
46+
Wave 9 — Cleanup + GC: - Lazy import IPython (#72) - Filter callables from _trim_and_reorder (#134)
47+
- Complete cleanup() with internal containers (GC-5, GC-12) - Use weakref in backward hook closure
48+
(GC-8) - Clear ModulePassLog forward_args/kwargs after build (GC-11)
49+
50+
585 tests passing across 10 test files, 47 new regression tests.
51+
52+
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
53+
54+
- **core**: Resolve final remaining bugs #23, #83, #95, #99
55+
([`6302662`](https://github.com/johnmarktaylor91/torchlens/commit/630266251861ca505fcd0f33b33d3aa3b21f7c66))
56+
57+
- #95: fix mixed LayerLog/LayerPassLog format in vis module containment check - #83:
58+
LayerLog.parent_layer_arg_locs returns strings (not sets) for consistency - #99: warn on tensor
59+
shape mismatch in fast-path source tensor logging - #23: add case-insensitive exact match and
60+
substring lookup for layers/modules - #85: confirmed not-a-bug (any special arg correctly explains
61+
output invariance) - #39, #41, #42: confirmed already fixed or correct as-is - Add 6 regression
62+
tests for the above fixes
63+
64+
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
65+
66+
- **core**: Resolve remaining low-risk bugs #28, #107, #108, #147
67+
([`d8616a0`](https://github.com/johnmarktaylor91/torchlens/commit/d8616a0b1dfa133cd5aeb6bd92af6cdfb2bc566a))
68+
69+
- #147: descriptive ValueError in log_source_tensor_fast on graph change - #108: document fast-path
70+
module log preservation (no rebuild needed) - #107: handle both tuple and string formats in module
71+
hierarchy info - #28: remove torch.Tensor from dead type-check list in introspection - Add 4
72+
regression tests for the above fixes
73+
74+
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
75+
76+
### Testing
77+
78+
- **reorganize**: Redistribute bugfix tests into domain-specific test files
79+
([`e9c64cc`](https://github.com/johnmarktaylor91/torchlens/commit/e9c64cc58a6bbd8f5d1b9942d234af3e0eed94bd))
80+
81+
Move all 57 regression tests from test_bugfixes.py into their natural homes: - test_internals.py:
82+
safe_copy, tensor utils, exception safety, cleanup/GC - test_validation.py: validation
83+
correctness, posthoc perturb check - test_save_new_activations.py: fast-path state reset, graph
84+
consistency - test_layer_log.py: interface polish, case-insensitive lookup, arg locs -
85+
test_module_log.py: string indexing, tuple/string normalization - test_param_log.py: ParamAccessor
86+
contains, param ref cleanup - test_output_aesthetics.py: visualization smoke tests
87+
88+
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
89+
90+
491
## v0.15.0 (2026-03-04)
592

693
### Bug Fixes

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "torchlens"
7-
version = "0.15.0"
7+
version = "0.15.1"
88
description = "A package for extracting activations from PyTorch models"
99
readme = "README.md"
1010
license = "GPL-3.0-only"

torchlens/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Top level package: make the user-facing functions top-level, rest accessed as submodules."""
22

3-
__version__ = "0.15.0"
3+
__version__ = "0.15.1"
44

55
from .user_funcs import (
66
log_forward_pass,

0 commit comments

Comments
 (0)