Learning by coding: handwritten implementations of core LLM algorithms in Jupyter Notebooks with test cases.