Two files in 50_ode/ are markdown rather than notebooks:
50_ode/00_Ordinary_Differential_Equation_Exact_Solution.md
50_ode/40_comparing_with_num_int.md
Every other lesson in the module (and the curriculum at large) is a .ipynb. The two .md files break the "every numbered lesson is an executable notebook" pattern, and they are excluded from notebook-execution CI.
Scope
- Convert each
.md to .ipynb (jupyter nbconvert --to notebook --from markdown, or hand-rebuild if the markdown predates a useful structure).
- Preserve the markdown prose as markdown cells; promote any code blocks to code cells.
- Add Colab badges (the existing badge automation will pick them up after merge).
- Verify the new notebooks execute under the standard test runner.
Why
Consistency: learners arriving at 50_ode/ see a uniform set of notebooks, no special "this lesson is markdown only" exception. CI consistency: the new notebooks become subject to the same execution-as-test guarantee as everything else.
Small, mechanical, low-risk. Good first PR for someone wanting to learn the repo conventions.
Two files in
50_ode/are markdown rather than notebooks:50_ode/00_Ordinary_Differential_Equation_Exact_Solution.md50_ode/40_comparing_with_num_int.mdEvery other lesson in the module (and the curriculum at large) is a
.ipynb. The two.mdfiles break the "every numbered lesson is an executable notebook" pattern, and they are excluded from notebook-execution CI.Scope
.mdto.ipynb(jupyter nbconvert --to notebook --from markdown, or hand-rebuild if the markdown predates a useful structure).Why
Consistency: learners arriving at
50_ode/see a uniform set of notebooks, no special "this lesson is markdown only" exception. CI consistency: the new notebooks become subject to the same execution-as-test guarantee as everything else.Small, mechanical, low-risk. Good first PR for someone wanting to learn the repo conventions.