Skip to content

refactor/fix: Phase 6 — デッドコード削除と残りの提案実装 (Q1①/D-4/D-11後半/D-12/D-13/D-14) - #42

Merged
MRyutaro merged 7 commits into
mainfrom
refactor/phase6-cleanup
Jun 14, 2026
Merged

MRyutaro merged 7 commits into
mainfrom
refactor/phase6-cleanup

Conversation

@MRyutaro

Copy link
Copy Markdown
Owner

概要

指示書 §Phase 6 の項目を実装。**Q1承認済みのデッドコード削除(挙動同一)**と、**提案だった残りの修正(一部は挙動変更)**を含む。

⚠️ Phase 5 (#41) にスタック。base は refactor/phase5-mypy。マージ順: #35→#37→#38→#40→#41→本PR。

① デッドコード削除(挙動同一・Q1承認済み)

  • core/io/pickle.py 全体、core/common/profile_graph_size.py 全体を削除
  • checkpoint_file.py の to_json_str/from_json + 未使用 import json/KEY_* 定数を削除(JSON化不能で実際動かなかった)
  • command.py の PostInstallCommand + setuptools ランタイムimportを削除
  • object_hash.py の到達不能 isclass(obj) 分岐を簡約

② 残り提案の実装

項目 内容 挙動変更
D-4 profile_variable_size がカスタムクラスの __dict__ を再帰計測(従来は浅い getsizeof のみ) ★サイズ推定が変化
D-11後半 read速度計測で実際に read()(従来は open→close のみ) ★migration_speed が変化
D-12 checkpoint の overlapping 判定に fingerprint 存在ガード追加(KeyError防止) なし
D-13 ElasticNotebook 生成失敗時のフェイルセーフ(None ガードで素のカーネルとして継続) 失敗時のみ
D-14 "Raw cell cell." docstring コピペ痕を修正 なし

テスト

  • 追加: test_profile_variable_size.py(D-4: 属性が計上される)、test_checkpoint_func.py(D-12: fingerprint欠落でもKeyError出ず成功)

検証結果

項目 値
pytest 55 passed
flake8 0
mypy 0(33 files)
isort / black 0 / clean
import スモーク ✅
uv build ✅(wheel=2パッケージ)

実機確認(再実行・全パス)

JPY_SESSION_NAME 固定のヘッドレス e2e で x/a/y 復元・%who 表示・ログ ERROR 0件、失敗セル 1/0 非記録を再確認。Phase 6 の変更で回帰なし。

挙動差分の宣言

  • 意図して変えた: D-4(サイズ推定)、D-11後半(migration_speed)、D-13(生成失敗時の継続動作)
  • 変えていない: ①の削除(参照ゼロ)、D-12(正常系不変・異常系のKeyErrorを防ぐのみ)、D-14(docstring)

注: D-4/D-11後半は最適化(migrate/recompute)のコスト入力を変えるため、issue #34 のベンチ整備後に実測で影響を確認するのが望ましい。

🤖 Generated with Claude Code

MRyutaro and others added 6 commits June 15, 2026 00:02
リポジトリ内で参照ゼロのコードを削除(挙動同一):
- core/io/pickle.py 全体(is_picklable 系)
- core/common/profile_graph_size.py 全体("For experiments only")
- checkpoint_file.py の to_json_str/from_json + 未使用の import json と KEY_* 定数
  (DependencyGraph はJSON化不能で実際には動作しなかった)
- command.py の PostInstallCommand と setuptools のランタイムimport
  (setup.py時代の遺物。CLIが毎回setuptoolsをimportする無駄を解消)
- object_hash.py の到達不能な isclass(obj) 分岐を簡約(先行のisclassで処理済み)

検証: flake8 0, mypy 0(33 files), pytest 51 passed, import/uv build OK。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
到達不能だった分岐を整理し、__dict__ を持つカスタムクラスインスタンスは
属性(値)のメモリも再帰計測するよう修正。従来は浅い sys.getsizeof のみで
カスタムオブジェクトのサイズを過小評価していた。サイズ推定はオプティマイザの
migrate/recompute 判断の入力になるため、チェックポイント構成が変わり得る。
test_profile_variable_size.py を追加。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
従来 read 計測は open→close するだけで1バイトも読んでおらず、read速度が
実質ゼロ計測だった。in_file.read() を計測区間に追加。migration_speed_bps が
変わるため、オプティマイザの判断が変化し得る。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
active VS が fingerprint_dict に無い場合の KeyError を防ぐため、サイズ計測側
(61行)と同様の in チェックを追加。test_checkpoint_func.py で fingerprint 欠落
時も KeyError を出さず checkpoint が成功することを確認。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
生成失敗時 self.elastic_notebook を None に保ち、do_execute/do_shutdown/
__del_from_user_ns_hidden で None ガード。従来は失敗後に全セルで AttributeError
を吐き続けたが、「追跡なしの素のカーネル」として動作継続する(エラーはログのみ、
既存の握り潰し方針を踏襲)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…e." (D-14)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Base automatically changed from refactor/phase5-mypy to main June 14, 2026 15:16
@MRyutaro
MRyutaro merged commit 10fa57d into main Jun 14, 2026
2 checks passed
@MRyutaro
MRyutaro deleted the refactor/phase6-cleanup branch June 14, 2026 15:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant