Restructure: Separate developer source (src/) from learner notebooks (modules/)

Major directory restructure to support both developer and learner workflows:

Structure Changes:
- NEW: src/ directory for Python source files (version controlled)
  - Files renamed: tensor.py → 01_tensor.py (matches directory naming)
  - All 20 modules moved from modules/ to src/
- CHANGED: modules/ now holds generated notebooks (gitignored)
  - Generated from src/*.py using jupytext
  - Learners work in notebooks, developers work in Python source
- UNCHANGED: tinytorch/ package (still auto-generated from notebooks)

Workflow: src/*.py → modules/*.ipynb → tinytorch/*.py

Command Updates:
- Updated export command to read from src/ and generate to modules/
- Export flow: discovers modules in src/, converts to notebooks in modules/, exports to tinytorch/
- All 20 modules tested and working

Configuration:
- Updated .gitignore to ignore modules/ directory
- Updated README.md with new three-layer architecture explanation
- Updated export.py source mappings and paths

Benefits:
- Clean separation: developers edit Python, learners use notebooks
- Better version control: only Python source committed, notebooks generated
- Flexible learning: can work in notebooks OR Python source
- Maintains backward compatibility: tinytorch package unchanged

Tested:
- Single module export: tito export 01_tensor 
- All modules export: tito export --all 
- Package imports: from tinytorch.core.tensor import Tensor 
- 20/20 modules successfully converted and exported
This commit is contained in:
Vijay Janapa Reddi
2025-11-25 00:02:21 -05:00
parent 68131e6be0
commit d3a126235c
79 changed files with 2233 additions and 11146 deletions

View File

@@ -31,6 +31,9 @@ dependencies = [
"PyYAML>=6.0",
]
[project.scripts]
tito = "tito.main:main"
[project.optional-dependencies]
dev = [
"pytest>=8.0.0",
@@ -52,5 +55,5 @@ Issues = "https://github.com/mlsysbook/TinyTorch/issues"
[tool.setuptools.packages.find]
where = ["."]
include = ["tinytorch*"]
exclude = ["tests*", "modules*", "site*", "docs*", "milestones*", "assignments*", "tito*"]
include = ["tinytorch*", "tito*"]
exclude = ["tests*", "modules*", "site*", "docs*", "milestones*", "assignments*"]