Skip to content

fix: record cells mixing magic lines with Python code (#17) - #57

Merged
MRyutaro merged 1 commit into
mainfrom
fix/17-skip-record-magic
Jun 14, 2026
Merged

MRyutaro merged 1 commit into
mainfrom
fix/17-skip-record-magic

Conversation

@MRyutaro

Copy link
Copy Markdown
Owner

概要

issue #17 の修正。%time のようなマジック行と通常のPythonコードが混在したセルが、これまで丸ごと記録対象外(スキップ)になっていた問題を直す。

%time
a = [0] * (2 ** 25)

このセルは先頭が % で始まるため __skip_record が True を返し、変数 a が依存グラフに記録されず、チェックポイントにも残らなかった。

変更内容(案3: transform_cell 採用)

  • 一律の「先頭文字で判定して丸ごとスキップ」をやめ、IPython本体が内部で使う入力変換器 self.shell.transform_cell() でセルを正規のPythonコードへ変換する。マジック/シェルは get_ipython().run_line_magic(...) などへ展開され、ast.parse 可能になる。
  • 変換後のコードが マジック/シェル呼び出しのみで構成されているかをASTで判定(__is_pure_magic_cell)。純粋なマジックセル(%matplotlib inline、!ls 等)のみスキップし、混在セルは記録する。
  • record_event には変換後のコードを渡すため、find_input_vars の ast.parse が壊れなくなる。復元時は shell.run_cell がマジックをネイティブに扱うため整合する。
  • 文字列内の %(例: y = '100%')を誤ってマジック扱いしない堅牢性も得られる。
  • 使われなくなった __skip_record は削除。

テスト

tests/test_skip_record.py を新ロジックに合わせて更新し、混在セル・複数マジック・空セルのケースを追加。

  • uv run pytest → 59 passed
  • uv run flake8 / uv run mypy → クリーン
  • uv run black / uv run isort 適用済み

close #17

🤖 Generated with Claude Code

これまでは先頭が `!` `%` `%%` で始まるセルを一律スキップしていたため、
`%time` のようなマジック行と通常コードが混在したセルが丸ごと記録対象外と
なり、変数(例: `a = [0] * (2 ** 25)`)が依存グラフに残らなかった。

IPython本体と同じ入力変換器(shell.transform_cell)でセルを正規Pythonへ
変換し、変換後のコードが get_ipython() のマジック/シェル呼び出しのみで
構成されているかをASTで判定するように変更。純粋なマジックセルのみスキップし、
混在セルは変換後コードで record_event する。これにより文字列内の `%`
(例: `y = '100%'`)も誤判定しない。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@MRyutaro
MRyutaro merged commit 90bbba7 into main Jun 14, 2026
2 checks passed
@MRyutaro
MRyutaro deleted the fix/17-skip-record-magic branch June 14, 2026 17:50
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.

record_event処理のスキップ処理の修正

1 participant