Skip to content

maintenance: raw-string the LaTeX-carrying docstrings - #145

Merged
Jammy2211 merged 1 commit into
mainfrom
claude/latex-raw-string-docstrings-9h4ine
Aug 20, 2026
Merged

maintenance: raw-string the LaTeX-carrying docstrings#145
Jammy2211 merged 1 commit into
mainfrom
claude/latex-raw-string-docstrings-9h4ine

Conversation

@Jammy2211

Copy link
Copy Markdown
Collaborator

Part of PyAutoLabs/autolens_workspace#491 — one of six independent, prose-only PRs (one per workspace repo). No API surface, so no cross-repo merge ordering.

Non-raw docstrings containing LaTeX are corrupted by Python's escape handling, in two classes — and only one of them is visible:

what it is diagnostic
warned \s, \l, \[ — escapes Python does not recognise SyntaxWarning per compile; slated to become SyntaxError
silent \t in \theta, \f in \frac, \r in \rm none at all — the value is simply corrupted

2 literals across 2 files get the r prefix — the smallest of the six. Both sweeps now return zero. Prose is untouched — only the delimiter gains an r.

Verification

  • Baseline regeneration is a no-op — the generator was run before editing and left the tree clean, so generator noise cannot fake the gate below.
  • Runtime values: 1 corruption repaired, 0 other changes. Every changed literal's value was compared HEAD vs worktree; the prefix may only ever remove corruption. This is the check that catches real mistakes — the regeneration gate structurally cannot, because the generator reads source text, not runtime values.
  • Regenerated with autohands: notebooks/, markdown/, llms-full.txt and workspace_index.json are all byte-identical — the diff-empty gate passes exactly.

scripts/cookbooks/configs.py needed a hand-approved prefix: its \sigma and \lambda are LaTeX label values in a YAML config example, with no math delimiters for the automatic matcher to key off. Read and confirmed before applying.

Left alone deliberately

scripts/cookbooks/samples.py:410 carries " \\[-2pt]" — an already-escaped LaTeX line break. In a non-raw literal that is one literal backslash, i.e. correct; adding r would double it and change the rendered LaTeX. It emits no warning and corrupts nothing.

More generally the prefix was applied only where every backslash sits in a LaTeX context, with an absolute veto on \\, escaped quotes and numeric escapes regardless of context.

Unblocked by PyAutoHands#251, which taught the notebook and env parsers to accept an r""" opener.

🤖 Generated with Claude Code

https://claude.ai/code/session_01MTjtx5mdituitiyQYFGn2E


Generated by Claude Code

Non-raw docstrings containing LaTeX are corrupted by Python's escape handling.
Two distinct failure classes, and only the first is visible:

  warned  `\s`, `\l`, `\[` ... escapes Python does NOT recognise. It leaves
          them literal but emits SyntaxWarning on every compile/import, and
          they are slated to become a SyntaxError.
  silent  `\t` in `\theta`, `\f` in `\frac`, `\r` in `\rm`, `\b` in `\beta`.
          Escapes Python DOES recognise: the value is corrupted with NO
          diagnostic at all. `\theta_E` was literally TAB + "heta_E".

2 literals across 2 files get the `r` prefix. Both sweeps now return zero.

Verified, not assumed:
- Runtime values: 1 corruptions repaired, 0 other changes. Every changed
  literal's value was compared HEAD vs worktree; the prefix may only ever
  REMOVE corruption, never alter a string otherwise.
- Regenerated with autohands: notebooks/, markdown/, llms-full.txt and workspace_index.json are ALL byte-identical -- the diff-empty gate passes exactly.

Left deliberately alone: scripts/cookbooks/samples.py:410 carries " \\[-2pt]",
an ALREADY-escaped LaTeX line break. Raw-ifying it would double the backslash
and change the rendered LaTeX. It emits no warning and corrupts nothing.

Prose is untouched -- only the delimiter gains an `r`. Deliberate escapes were
left alone (real newlines in print(), already-escaped LaTeX line breaks): the
prefix was applied only where every backslash sits in a LaTeX context.
@Jammy2211
Jammy2211 merged commit b8a0c86 into main Aug 20, 2026
6 checks passed
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.

2 participants