Added all module development files to modules/XX_name/ directories:
Module notebooks and scripts:
- 18 modules with .ipynb and .py files (01-20, excluding some gaps)
- Moved from modules/source/ to direct module directories
- Includes tensor, autograd, layers, transformers, optimization modules
Module README files:
- Added README.md for modules with additional documentation
- Complements ABOUT.md files added earlier
This completes the module restructuring:
- Before: modules/source/XX_name/*_dev.{py,ipynb}
- After: modules/XX_name/*_dev.{py,ipynb}
All development happens directly in numbered module directories now.
- Remove circular imports where modules imported from themselves
- Convert tinytorch.core imports to sys.path relative imports
- Only import dependencies that are actually used in each module
- Preserve documentation imports in markdown cells
- Use consistent relative path pattern across all modules
- Remove hardcoded absolute paths in favor of relative imports
Affected modules: 02_activations, 03_layers, 04_losses, 06_optimizers,
07_training, 09_spatial, 12_attention, 17_quantization
- Remove demonstrate_complex_computation_graph() function from Module 05 (autograd)
- Remove demonstrate_optimizer_integration() function from Module 06 (optimizers)
- Module 04 (losses) had no demonstration functions to remove
- Keep all core implementations and unit test functions intact
- Keep final test_module() function for integration testing
- All module tests continue to pass after cleanup(https://claude.ai/code)
This change ensures tests run immediately when developing modules but don't execute when modules are imported by other modules.
Changes:
- Protected all test executions with if __name__ == "__main__" blocks
- Unit tests run immediately after function definitions during development
- Module integration test (test_module()) runs at end when executed directly
- Updated module-developer.md with new testing patterns and examples
Benefits:
- Students see immediate feedback when developing (python module_dev.py runs all tests)
- Clean imports: later modules can import earlier ones without triggering tests
- Maintains educational flow: tests visible right after implementations
- Compatible with nbgrader and notebook environments
Tested:
- Module 01 runs all tests when executed directly ✓
- Importing Tensor from tensor_dev doesn't run tests ✓
- Cross-module imports work without test interference ✓
Removed redundant test calls from all modules:
- Eliminated verbose if __name__ == '__main__': blocks
- Removed duplicate individual test calls
- Each module now simply calls test_module() directly
Changes made to all 9 modules:
- Module 01 (Tensor): Simplified from 16-line main block to 1 line
- Module 02 (Activations): Simplified from 13-line main block to 1 line
- Module 03 (Layers): Simplified from 17-line main block to 1 line
- Module 04 (Losses): Simplified from 20-line main block to 1 line
- Module 05 (Autograd): Simplified from 19-line main block to 1 line
- Module 06 (Optimizers): Simplified from 17-line main block to 1 line
- Module 07 (Training): Simplified from 16-line main block to 1 line
- Module 08 (DataLoader): Simplified from 17-line main block to 1 line
- Module 09 (Spatial): Simplified from 14-line main block to 1 line
Impact:
- Notebook-friendly: Tests run immediately in Jupyter environments
- No redundancy: test_module() already runs all unit tests
- Cleaner code: ~140 lines of redundant code removed
- Better for students: Simpler, more direct execution flow
Critical fixes to resolve module import issues:
1. Module 01 (tensor_dev.py):
- Wrapped all test calls in if __name__ == '__main__': guards
- Tests no longer execute during import
- Clean imports now work: from tensor_dev import Tensor
2. Module 08 (dataloader_dev.py):
- REMOVED redefined Tensor class (was breaking dependency chain)
- Now imports real Tensor from Module 01
- DataLoader uses actual Tensor with full gradient support
Impact:
- Modules properly build on previous work (no isolated implementations)
- Clean dependency chain: each module imports from previous modules
- No test execution during imports = fast, clean module loading
This resolves the root cause where DataLoader had to redefine Tensor
because importing tensor_dev.py would execute all test code.
Major Accomplishments:
• Rebuilt all 20 modules with comprehensive explanations before each function
• Fixed explanatory placement: detailed explanations before implementations, brief descriptions before tests
• Enhanced all modules with ASCII diagrams for visual learning
• Comprehensive individual module testing and validation
• Created milestone directory structure with working examples
• Fixed critical Module 01 indentation error (methods were outside Tensor class)
Module Status:
✅ Modules 01-07: Fully working (Tensor → Training pipeline)
✅ Milestone 1: Perceptron - ACHIEVED (95% accuracy on 2D data)
✅ Milestone 2: MLP - ACHIEVED (complete training with autograd)
⚠️ Modules 08-20: Mixed results (import dependencies need fixes)
Educational Impact:
• Students can now learn complete ML pipeline from tensors to training
• Clear progression: basic operations → neural networks → optimization
• Explanatory sections provide proper context before implementation
• Working milestones demonstrate practical ML capabilities
Next Steps:
• Fix import dependencies in advanced modules (9, 11, 12, 17-20)
• Debug timeout issues in modules 14, 15
• First 7 modules provide solid foundation for immediate educational use(https://claude.ai/code)
- Module 01: Pure Tensor class - ZERO gradient code, perfect data structure focus
- Modules 02-04: Clean usage of basic Tensor, no hasattr() hacks anywhere
- Removed Parameter wrapper complexity, use direct Tensor operations
- Each module now focuses ONLY on its core teaching concept
- Prepared elegant decorator pattern for Module 05 autograd extension
- Perfect separation of concerns: data structure → operations → enhancement
- Added progressive complexity guidelines (Foundation/Intermediate/Advanced)
- Added measurement function consolidation to prevent information overload
- Fixed all diagnostic issues in losses_dev.py
- Fixed markdown formatting across all modules
- Consolidated redundant analysis functions in foundation modules
- Fixed syntax errors and unused variables
- Ensured all educational content is in proper markdown cells for Jupyter
IMPORT PATH FIXES: All modules now reference correct directories
Fixed Paths:
✅ 02_tensor → 01_tensor (in all modules)
✅ 03_activations → 02_activations (in all modules)
✅ 04_layers → 03_layers (in all modules)
✅ 05_losses → 04_losses (in all modules)
✅ Added comprehensive fallback imports for 07_training
Module Test Status:
✅ 01_tensor, 02_activations, 03_layers: All tests pass
✅ 06_optimizers, 08_spatial: All tests pass
🔧 04_losses: Syntax error (markdown in Python)
🔧 05_autograd: Test assertion failure
🔧 07_training: Import paths fixed, ready for retest
All import dependencies now correctly reference reorganized module structure.
CLEANUP: Removed duplicate/obsolete configuration files
Removed Files:
- All old numbered .yml files (02_tensor.yml, 03_activations.yml, etc.)
- These were leftover from the module reorganization
- Had incorrect dependencies (still referenced 'setup')
Current State:
✅ CLI correctly uses module.yaml files (19 modules)
✅ All module.yaml files have correct dependencies
✅ No more duplicate/conflicting configuration files
✅ Clean module structure with single source of truth
The CLI was already using module.yaml correctly, so this cleanup removes
the confusing duplicate files without affecting functionality.
- Removed 01_setup module (archived to archive/setup_module)
- Renumbered all modules: tensor is now 01, activations is 02, etc.
- Added tito setup command for environment setup and package installation
- Added numeric shortcuts: tito 01, tito 02, etc. for quick module access
- Fixed view command to find dev files correctly
- Updated module dependencies and references
- Improved user experience: immediate ML learning instead of boring setup
- Migrated all Python source files to assignments/source/ structure
- Updated nbdev configuration to use assignments/source as nbs_path
- Updated all tito commands (nbgrader, export, test) to use new structure
- Fixed hardcoded paths in Python files and documentation
- Updated config.py to use assignments/source instead of modules
- Fixed test command to use correct file naming (short names vs full module names)
- Regenerated all notebook files with clean metadata
- Verified complete workflow: Python source → NBGrader → nbdev export → testing
All systems now working: NBGrader (14 source assignments, 1 released), nbdev export (7 generated files), and pytest integration.
The modules/ directory has been retired and replaced with standard NBGrader structure.
- Update all test files to import from tinytorch.core.* instead of relative paths
- Consistent with rock solid foundation principle
- Tests now use stable package imports, not local module imports
- Ensures tests validate the actual exported package functionality
- Aligns with production usage patterns