Summary#
Style audit of the lecture-python-intro series.
Audit date: 2026-08-23
Corpus snapshot:
a12d17c0efLectures audited: 56
Average overall score: 8.1 / 10
Average per-category scores: writing 5.2, math 8.6, code 7.3, figures 6.5, references 9.3, links 9.7, admon 10.0
JAX: out of scope — the
qe-jax-*rules targetlecture-jax.Judgment-review coverage: all lectures reviewed.
Writing, at 5.2, is the weakest category here, and it is very nearly the whole HIGH
list. Eighteen of the 19 HIGH lectures are HIGH only because Writing sits at or below the
≤ 4 floor; the nineteenth, markov_chains_I, is floored by Math (3.0) instead. Three of
the 18 — geom_series, french_rev and eigen_I — are also floored by Figures, and no
lecture in the series is floored by Code, References, Links or Admonitions at all.
Underneath Writing are four rules, and no single one of them accounts for a lecture.
qe-writing-008 (39 / 56, 709 occurrences of repeated spaces) is the largest raw count and
the only one that sweeps cleanly, but every one of the 18 floored lectures also breaks at
least one rule that has to be read: qe-writing-001 (30 / 56) in 16 of them,
qe-writing-006 (13 / 56) in 11, qe-writing-004 (18 / 56) in 9. Across the 18 that is 85
hand-edited sites, against 338 whitespace occurrences a script handles. The 2026-05 row put
Writing at 7.5 here and left Figures as the weakest category. The reordering since is the
judgment layer — that row folds in no review overlay, this one folds one into all 56
lectures — not the lectures: like for like, on the evidence layer alone
(history_mechanical.csv), Writing here is 7.5 → 7.7 and Figures 6.5 → 6.5, so on a
comparable basis Figures is still the weakest category.
By every other measure this is the strongest series in the corpus: the highest overall (8.1
against 7.7), the smallest share of HIGH lectures (19 of 56, against 197 of 348), nothing
below 7.2 — only lecture-python-programming also has no lecture under 7.0 — and neither a
build-risk violation nor any of the corpus’s four structural findings. Math especially is
not the problem: 8.6, second only to lecture-python-programming, against 7.0 corpus-wide,
with qe-math-002 (4 / 56, 13 occurrences) where lecture-python-advanced.myst has it in
20 of its 68. Figures (6.5) sits exactly on the corpus mean and Code (7.3) just under it.
Priority distribution#
Priority |
Count |
% |
|---|---|---|
HIGH |
19 |
33.9% |
MEDIUM |
0 |
0.0% |
LOW |
28 |
50.0% |
NONE |
9 |
16.1% |
Top systemic issues across the series#
Ranked by how many of the series’ lectures each rule reaches.
qe-fig-005— Descriptive figure names for cross-referencing — 46 / 56 lectures, 174 occurrences.qe-writing-008— Remove excessive whitespace between words — 39 / 56 lectures, 709 occurrences.qe-fig-008— Use lw=2 for line charts — 35 / 56 lectures, 217 occurrences.qe-fig-001— Do not set figure size unless necessary — 30 / 56 lectures, 91 occurrences.qe-writing-001— Use one sentence per paragraph — 30 / 56 lectures, 54 occurrences.qe-writing-004— Avoid unnecessary capitalization in narrative text — 18 / 56 lectures, 40 occurrences.qe-fig-004— Caption formatting conventions — 17 / 56 lectures, 72 occurrences.qe-fig-003— No matplotlib embedded titles — 15 / 56 lectures, 36 occurrences.qe-ref-001— Use correct citation style — 15 / 56 lectures, 48 occurrences.qe-writing-006— Capitalize lecture titles properly — 13 / 56 lectures, 31 occurrences.
Clean across the series#
Checked rules with no violation anywhere in the series — the conventions this series already holds to.
qe-admon-003— Use tick count management for nested directivesqe-code-005— Use quantecon timeit for benchmarkingqe-fig-010— Plotly figures require latex directiveqe-math-006— Use aligned environment correctly for PDF compatibilityqe-math-007— Use automatic equation numbering, not manual tagsqe-math-008— Explain special notation (vectors/matrices)qe-math-013(proposed) — Reference equations via{eq}`label`
Series-level recommendations#
qe-writing-008— collapse repeated spaces (39 / 56, 709 occurrences). Free and scriptable, so do it first; 338 of the occurrences are inside the 18 Writing-floored lectures, 89 of them infrench_revalone. On its own it clears no HIGH lecture — each of the 18 also breaks a rule that needs reading.qe-writing-006— sentence-case the headings (13 / 56, 31 headings). The best ratio of floored lectures reached to work done in the series: it reaches 11 of the 18, and 29 of the 31 headings are in those 11. Scriptable, but the check is heuristic and leans on a curated proper-noun list, so read the diff before committing it.qe-writing-004— drop the mid-sentence capitals (18 / 56, 40 sites). Reaches 9 of the 18, concentrated intime_series_with_matrices(7 sites) andeigen_I(5). Same heuristic caveat, and small enough to check by hand.qe-writing-001— one sentence per paragraph (30 / 56, 54 blocks). The largest single blocker — 16 of the 18 — but a reading pass rather than a sweep, because splitting a paragraph changes its rhythm. 31 of the 54 blocks sit in the floored lectures.Take the floored lectures cheapest first. On top of the sweeps,
observed_distributionsandlaffer_adaptiveneed one hand-edited site each,msy_fisherytwo (and no whitespace work at all), thencagan_ree,networks,solow,tax_smooth,unpleasantandgreek_squareat three each. The tail istime_series_with_matrices(9 sites),complex_and_trig(8) andfrench_rev(8).qe-fig-005— name the figures (46 / 56, 174 figures). The widest-reaching rule in the series, a pure sweep, and it unlocks{numref}cross-referencing — but it lifts the series average, not the HIGH list. The three Figures floors aregeom_series,french_revandeigen_I;qe-fig-005is only 14 of their 135 figure findings, and all three are floored by Writing regardless.qe-fig-008(35 / 56, 217 calls) andqe-fig-001(30 / 56, 91 overrides) are the same kind of item: broad, cheap, no effect on priority.markov_chains_I— the one Math floor (3.0). 22 of its 23 math findings areqe-math-004(4 / 56, 15 occurrences) andqe-math-010(proposed) (8 / 56, 100 occurrences), and the latter is still a proposed rule rather than a registry one. So this lecture’s priority turns partly onaction-style-guide#18;qe-math-004is worth doing either way.Do the work upstream, in
QuantEcon/lecture-python-intro. This repository only measures. One file needs care about where the edit lands:short_pathis byte-identical with thelecture-dpcopy at this snapshot, so fixing it once clears both series. It is the only substantive shared file here —statusandzreferencesalso match another series byte for byte but are boilerplate, whilelake_model,lln_cltandmleshare a filename withlecture-python.mystand have diverged, so each of those copies needs its own edit.
Lectures ranked by priority (lowest score first)#
Scores are 0–10 per category; Overall is the mean of the in-scope categories, and Priority follows spec §4. A dash means the category is not applicable to that lecture. Click a lecture for its full report.
# |
Lecture |
Writing |
Math |
Code |
Figures |
References |
Links |
Admon |
Overall |
Priority |
|---|---|---|---|---|---|---|---|---|---|---|
1 |
3 |
8.5 |
7.5 |
4 |
— |
10 |
10 |
7.2 |
HIGH |
|
2 |
5.5 |
6.5 |
7.5 |
6 |
— |
7.5 |
10 |
7.2 |
LOW |
|
3 |
4 |
6 |
7 |
5 |
8.5 |
10 |
10 |
7.2 |
HIGH |
|
4 |
3 |
10 |
7.5 |
3 |
7.5 |
10 |
10 |
7.3 |
HIGH |
|
5 |
3.5 |
10 |
7.5 |
3.5 |
— |
10 |
10 |
7.4 |
HIGH |
|
6 |
6 |
5.5 |
6 |
5 |
10 |
9 |
10 |
7.4 |
LOW |
|
7 |
3 |
10 |
6 |
4.5 |
8.5 |
10 |
10 |
7.4 |
HIGH |
|
8 |
6 |
3 |
7 |
7.5 |
9 |
9 |
10 |
7.4 |
HIGH |
|
9 |
3 |
6 |
7.5 |
7 |
10 |
8 |
10 |
7.4 |
HIGH |
|
10 |
6 |
— |
7 |
7 |
— |
10 |
— |
7.5 |
LOW |
|
11 |
6.5 |
5.5 |
6 |
5 |
10 |
10 |
10 |
7.6 |
LOW |
|
12 |
4.5 |
6 |
8.5 |
7.5 |
7 |
10 |
10 |
7.6 |
LOW |
|
13 |
4 |
7.5 |
7 |
6.5 |
9 |
10 |
10 |
7.7 |
HIGH |
|
14 |
5.5 |
5 |
7.5 |
8 |
— |
10 |
10 |
7.7 |
LOW |
|
15 |
4 |
9 |
6.5 |
5 |
10 |
10 |
10 |
7.8 |
HIGH |
|
16 |
4.5 |
10 |
7.5 |
6.5 |
— |
8 |
10 |
7.8 |
LOW |
|
17 |
8 |
4.5 |
7.5 |
8 |
— |
9 |
10 |
7.8 |
LOW |
|
18 |
5 |
— |
7.5 |
6 |
8.5 |
10 |
10 |
7.8 |
LOW |
|
19 |
4.5 |
8.5 |
7.5 |
6.5 |
— |
10 |
9.5 |
7.8 |
LOW |
|
20 |
4 |
8 |
7 |
8 |
— |
10 |
10 |
7.8 |
HIGH |
|
21 |
3 |
9.5 |
6 |
6 |
10 |
10 |
10 |
7.8 |
HIGH |
|
22 |
6 |
7.5 |
6 |
7 |
9 |
10 |
10 |
7.9 |
LOW |
|
23 |
3 |
9.5 |
7 |
5.5 |
10 |
10 |
10 |
7.9 |
HIGH |
|
24 |
5 |
8 |
7.5 |
5.5 |
9 |
10 |
10 |
7.9 |
LOW |
|
25 |
4 |
10 |
7 |
6 |
8.5 |
10 |
10 |
7.9 |
HIGH |
|
26 |
4.5 |
10 |
7.5 |
5.5 |
— |
10 |
10 |
7.9 |
LOW |
|
27 |
3 |
9.5 |
6.5 |
6.5 |
10 |
10 |
10 |
7.9 |
HIGH |
|
28 |
4.5 |
9.5 |
7 |
6.5 |
10 |
8 |
10 |
7.9 |
LOW |
|
29 |
5 |
7 |
7 |
8.5 |
— |
10 |
10 |
7.9 |
LOW |
|
30 |
3.5 |
8 |
7.5 |
6 |
10 |
10 |
10 |
7.9 |
HIGH |
|
31 |
3.5 |
6.5 |
7.5 |
8.5 |
10 |
10 |
10 |
8.0 |
HIGH |
|
32 |
3.5 |
10 |
6 |
6.5 |
10 |
10 |
10 |
8.0 |
HIGH |
|
33 |
4.5 |
9.5 |
6.5 |
7.5 |
— |
10 |
10 |
8.0 |
LOW |
|
34 |
4.5 |
10 |
7.5 |
6 |
9 |
10 |
10 |
8.1 |
LOW |
|
35 |
5 |
10 |
7 |
6.5 |
9 |
10 |
10 |
8.2 |
LOW |
|
36 |
5 |
10 |
7 |
7.5 |
— |
10 |
10 |
8.2 |
LOW |
|
37 |
4.5 |
9.5 |
7.5 |
6 |
10 |
10 |
10 |
8.2 |
LOW |
|
38 |
4.5 |
10 |
6 |
8.5 |
— |
10 |
10 |
8.2 |
LOW |
|
39 |
4.5 |
9.5 |
7 |
— |
— |
10 |
10 |
8.2 |
LOW |
|
40 |
4.5 |
10 |
8.5 |
7 |
— |
10 |
10 |
8.3 |
LOW |
|
41 |
4.5 |
9.5 |
7.5 |
— |
9 |
10 |
10 |
8.4 |
LOW |
|
42 |
6.5 |
10 |
7.5 |
6.5 |
8.5 |
10 |
10 |
8.4 |
LOW |
|
43 |
4 |
10 |
7.5 |
7 |
10 |
10 |
10 |
8.4 |
HIGH |
|
44 |
8 |
— |
— |
— |
— |
9 |
— |
8.5 |
LOW |
|
45 |
4 |
10 |
8.5 |
7 |
10 |
10 |
10 |
8.5 |
HIGH |
|
46 |
7.5 |
10 |
7.5 |
6 |
8.5 |
10 |
10 |
8.5 |
LOW |
|
47 |
5.5 |
10 |
7.5 |
8 |
— |
10 |
10 |
8.5 |
LOW |
|
48 |
5 |
10 |
7 |
9 |
10 |
9 |
10 |
8.6 |
NONE |
|
49 |
7.5 |
9.5 |
10 |
5.5 |
— |
10 |
10 |
8.8 |
NONE |
|
50 |
7.5 |
10 |
7.5 |
6.5 |
10 |
10 |
10 |
8.8 |
NONE |
|
51 |
8.5 |
— |
— |
9 |
— |
9 |
— |
8.8 |
NONE |
|
52 |
7.5 |
10 |
9 |
8 |
10 |
10 |
10 |
9.2 |
NONE |
|
53 |
6.5 |
10 |
10 |
8.5 |
— |
10 |
10 |
9.2 |
NONE |
|
54 |
10 |
— |
— |
— |
— |
10 |
— |
10.0 |
NONE |
|
55 |
10 |
— |
— |
— |
— |
10 |
— |
10.0 |
NONE |
|
56 |
10 |
— |
— |
— |
— |
10 |
— |
10.0 |
NONE |