[action-translation] resync: ifp_advanced.md#115
Conversation
✅ Deploy Preview for astonishing-narwhal-a8fc64 ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
There was a problem hiding this comment.
Pull request overview
This PR forward-resyncs the Chinese translation of ifp_advanced.md to match the current upstream lecture version, including updated structure, JAX-based implementation, and revised simulation/inequality exercises.
Changes:
- Replaces the older Numba/jitclass-based lecture content with the newer JAX-based model, solver, and simulation workflow.
- Updates lecture structure/metadata (translated title + section heading map) and refreshes exercises/solutions around wealth inequality measures.
- Adds translation sync state metadata for traceability to the upstream commit.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 5 comments.
| File | Description |
|---|---|
| lectures/ifp_advanced.md | Full lecture resync: new front-matter translation metadata, JAX implementation, updated simulation + inequality sections and exercises. |
| .translate/state/ifp_advanced.md.yml | Records source SHA/date/model/mode for the resync. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| def solve_model( | ||
| ifp: IFP, | ||
| c_init: jnp.ndarray, # 内生网格上 σ 的初始猜测 | ||
| a_init: jnp.ndarray, # 初始内生网格 | ||
| tol: float = 1e-5, | ||
| max_iter: int = 1000 | ||
| ) -> jnp.ndarray: | ||
| " 使用 EGM 的时间迭代求解模型。 " |
| def condition(loop_state): | ||
| c_in, a_in, i, error = loop_state | ||
| return (error > tol) & (i < max_iter) | ||
|
|
||
| def body(loop_state): |
| i, error = 0, tol + 1 | ||
| initial_state = (c_init, a_init, i, error) | ||
| final_loop_state = jax.lax.while_loop(condition, body, initial_state) | ||
| c_out, a_out, i, error = final_loop_state | ||
|
|
| # 对所有冲击组合进行向量化 | ||
| η_grid, ζ_grid = jnp.meshgrid(η_draws, ζ_draws, indexing='ij') | ||
| terms = vmap(vmap(compute_term))(η_grid, ζ_grid) | ||
| return P[z, z_hat] * jnp.mean(terms) |
| # 前 p% 中的家庭数量 | ||
| n_top = int(jnp.ceil(len(x) * p)) | ||
| # 前 p% 持有的财富 |
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
✅ Translation Quality ReviewVerdict: PASS | Model: claude-sonnet-5 | Date: 2026-07-18 📝 Translation Quality
Summary: This is a high-quality whole-file resync translation that accurately preserves the technical content, mathematical formulations, and code structure of the source document. Terminology is consistent and follows established conventions. Minor concerns include the addition of 'intermediate:' prefixes in cross-document references and font-configuration code not present in the source, both of which appear to be intentional site-maintenance additions but warrant verification against the live documentation structure. Mathematical notation, LaTeX equations, and code blocks are preserved accurately and completely across the entire resynced document Technical terminology (e.g., 欧拉方程, 基尼系数, 马尔可夫链, 内生网格方法) is consistent with the glossary and used correctly throughout The translation maintains natural academic register in Chinese while accurately conveying complex economic and mathematical concepts Suggestions:
🔍 Diff Quality
Summary: The resync correctly replaced outdated content (old ifp lecture structure) with content matching the current source (ifp_advanced with JAX implementation), preserving section order, heading hierarchy, and adding a complete translation heading map. This review was generated automatically by action-translation review mode. |
The resynced file keeps Chinese plot labels but reverted the import cell to the source's exact form, losing the Source Han Serif setup - Chinese in figures would render as missing glyphs. Residual #107 class found in the merge review; applied wave-wide. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
These {doc} targets exist only in lecture-python.myst until Phase 2
translates them; qualifying with the intermediate: intersphinx prefix
gives working links now, and a future resync restores local refs once
the targets exist. Program decision recorded 2026-07-18 (Matt).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…#183) Resolves the four failures reported in #182. All four are target-side defects; the English source is healthy in every case. likelihood_bayes — the font block called `mpl.font_manager.fontManager` and `plt.rcParams` before `import matplotlib.pyplot as plt`. Newer matplotlib no longer imports `font_manager` as a side effect of `import matplotlib`, so this raised AttributeError (and would have raised NameError on `plt`). Moved the pyplot import above both uses. An audit of the font block across all 69 lectures found this the only file with either ordering hazard. kalman_2 — a `.text()` annotation drew the covariance matrix with `\begin{bmatrix}`, which matplotlib mathtext cannot render (it supports no LaTeX environments). Rewritten as `\left[ \substack{...} \right]`, which renders an equivalent bracketed 2x2 matrix under mathtext, using `\;` as the column separator rather than `&`. This keeps the drop-usetex standard from #22 intact with no loss of information. The lecture's other `\begin{bmatrix}` uses are inside `{math}` blocks, rendered by MathJax, and are unaffected. sir_model — the header directive had lost its argument: `{raw}` instead of `{raw} jupyter`. The other 50 lectures carrying this directive kept theirs. ak_aiyagari — the file carried a stray fence at line 38 followed by a duplicated copy of the original frontmatter, and a doubled closing fence at EOF. The stray opener ran to line 56, swallowing both the H1 title and the `_admonition/gpu.md` include, which is what produced the 13 "headings start at H2" warnings. Removed both strays; the file's fence structure now matches the English source exactly (122). The `translation.title` field was also corrupt ("V, σ, μ") and has been set to the lecture title. An edition-wide sweep found no other file with unbalanced fences. The last two are content corruption introduced in translation and warrant engine issues against action-translation; they are not covered by the existing #107/#115/#116/#117 set. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* FIX: execution and doc failures from the Anaconda 2026.07 cache build Resolves the four failures reported in #182. All four are target-side defects; the English source is healthy in every case. likelihood_bayes — the font block called `mpl.font_manager.fontManager` and `plt.rcParams` before `import matplotlib.pyplot as plt`. Newer matplotlib no longer imports `font_manager` as a side effect of `import matplotlib`, so this raised AttributeError (and would have raised NameError on `plt`). Moved the pyplot import above both uses. An audit of the font block across all 69 lectures found this the only file with either ordering hazard. kalman_2 — a `.text()` annotation drew the covariance matrix with `\begin{bmatrix}`, which matplotlib mathtext cannot render (it supports no LaTeX environments). Rewritten as `\left[ \substack{...} \right]`, which renders an equivalent bracketed 2x2 matrix under mathtext, using `\;` as the column separator rather than `&`. This keeps the drop-usetex standard from #22 intact with no loss of information. The lecture's other `\begin{bmatrix}` uses are inside `{math}` blocks, rendered by MathJax, and are unaffected. sir_model — the header directive had lost its argument: `{raw}` instead of `{raw} jupyter`. The other 50 lectures carrying this directive kept theirs. ak_aiyagari — the file carried a stray fence at line 38 followed by a duplicated copy of the original frontmatter, and a doubled closing fence at EOF. The stray opener ran to line 56, swallowing both the H1 title and the `_admonition/gpu.md` include, which is what produced the 13 "headings start at H2" warnings. Removed both strays; the file's fence structure now matches the English source exactly (122). The `translation.title` field was also corrupt ("V, σ, μ") and has been set to the lecture title. An edition-wide sweep found no other file with unbalanced fences. The last two are content corruption introduced in translation and warrant engine issues against action-translation; they are not covered by the existing #107/#115/#116/#117 set. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * CI: align build safety with the English source repo Resolves #184. Brings ci.yml's execution safety in line with lecture-python.myst, which is the standard the fleet builds to. - `-n -W --keep-going` on the sphinx-tojupyter build. Previously this step ran with no flags, so a notebook whose cells raised still exited zero and the job went green. That is how the two execution breaks in #182 (likelihood_bayes, kalman_2) reached main with passing CI. - Upload Execution Reports (Download Notebooks), so a failure in that step leaves a traceback artifact. Previously there was none, which is why #182 had to be diagnosed from the weekly Build Cache workflow's artifact rather than from CI directly. - Clear stale Sphinx environment (`rm -rf _build/.doctrees`) before the builds, matching the source repo. The equivalent was present here only as a commented-out note. The HTML artifact is renamed `execution-reports` -> `execution-reports-html`. This is required, not cosmetic: upload-artifact@v7 runs with `overwrite: false`, so adding a second upload under the same name would collide when both steps fail in one run. The new names match the source repo's convention (-notebooks / -latex / -html). The PDF/LaTeX build is left commented out — see the issue for why that one needs a human decision rather than mechanical alignment. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * CI: set -eo pipefail on the sphinx-tojupyter step Addresses Copilot review feedback on #185. `shell: bash -l {0}` is a custom shell spec, so GitHub does not inject `-eo pipefail` — it only does that for the bare `shell: bash` shorthand, which expands to `bash --noprofile --norc -eo pipefail {0}`. Without it, this step's exit code is that of the trailing `cp`, so a failing `jb build` was masked. `--keep-going` made that worse rather than better: it forces Sphinx to emit output despite the errors, so the .ipynb files exist, `cp` succeeds, and the step goes green. The flag added in this PR to surface failures was producing the artifacts that hid them. Scope is exactly one step — an audit of ci.yml shows every other step is either single-command (its exit code is the command's) or uses the default shell, which does carry `-e`. Note the English source repo lecture-python.myst has the byte-identical pattern, so this is inherited from the standard rather than introduced here, and it deviates from the strict parity this PR set out to establish. Reported upstream so the standard can catch up. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Forward Resync: ifp_advanced.md
Source: QuantEcon/lecture-python.myst — lectures/ifp_advanced.md
Source commit:
60235ebThis PR resyncs the translation to match the current source document.
Reason: The target is an entirely different, older version of this lecture (using Numba/jitclass instead of JAX, different title 'Income Fluctuation Problem II' vs 'V', different code implementation, different exercises with detailed solutions on asset series simulation and violin plots, plus a 'Checking the Assumption' section with spectral radius matrix L discussion) that does not exist in the source. Meanwhile substantial source content (JAX implementation, wealth inequality Gini/top-share exercises with return vs labor income volatility comparisons) is missing from the target. This is a major mismatch with target containing unique content not in source.
Changes
Whole-file resync applied. The entire document was resynced in a single pass.
Created by action-translation forward resync