mirror of
https://github.com/MLSysBook/TinyTorch.git
synced 2026-05-24 02:45:50 -05:00
��️ Major architectural improvement implementing clean separation of concerns: ✨ NEW: Activations Module - Complete activations module with ReLU, Sigmoid, Tanh implementations - Educational NBDev structure with student TODOs + instructor solutions - Comprehensive testing suite (24 tests) with mathematical correctness validation - Visual learning features with matplotlib plotting (disabled during testing) - Clean export to tinytorch.core.activations 🔧 REFACTOR: Layers Module - Removed duplicate activation function implementations - Clean import from activations module: 'from tinytorch.core.activations import ReLU, Sigmoid, Tanh' - Updated documentation to reflect modular architecture - Preserved all existing functionality while improving code organization 🧪 TESTING: Comprehensive Test Coverage - All 24 activations tests passing ✅ - All 17 layers tests passing ✅ - Integration tests verify clean architecture works end-to-end - CLI testing with 'tito test --module' works for both modules 📦 ARCHITECTURE: Clean Dependency Graph - activations (math functions) → layers (building blocks) → networks (applications) - Separation of concerns: pure math vs. neural network components - Reusable components across future modules - Single source of truth for activation implementations �� PEDAGOGY: Enhanced Learning Experience - Week-sized chunks: students master activations, then build layers - Clear progression from mathematical foundations to applications - Real-world software architecture patterns - Modular design principles in practice This establishes the foundation for scalable, maintainable ML systems education.
253 lines
8.5 KiB
Python
253 lines
8.5 KiB
Python
# AUTOGENERATED! DO NOT EDIT! File to edit: ../../modules/setup/setup_dev.ipynb.
|
|
|
|
# %% auto 0
|
|
__all__ = ['hello_tinytorch', 'add_numbers', 'SystemInfo', 'DeveloperProfile']
|
|
|
|
# %% ../../modules/setup/setup_dev.ipynb 3
|
|
def hello_tinytorch():
|
|
"""
|
|
A simple hello world function for TinyTorch.
|
|
|
|
TODO: Implement this function to display TinyTorch ASCII art and welcome message.
|
|
Load the flame art from tinytorch_flame.txt file with graceful fallback.
|
|
"""
|
|
raise NotImplementedError("Student implementation required")
|
|
|
|
def add_numbers(a, b):
|
|
"""
|
|
Add two numbers together.
|
|
|
|
TODO: Implement addition of two numbers.
|
|
This is the foundation of all mathematical operations in ML.
|
|
"""
|
|
raise NotImplementedError("Student implementation required")
|
|
|
|
# %% ../../modules/setup/setup_dev.ipynb 4
|
|
def hello_tinytorch():
|
|
"""Display the TinyTorch ASCII art and welcome message."""
|
|
try:
|
|
# Get the directory containing this file
|
|
current_dir = Path(__file__).parent
|
|
art_file = current_dir / "tinytorch_flame.txt"
|
|
|
|
if art_file.exists():
|
|
with open(art_file, 'r') as f:
|
|
ascii_art = f.read()
|
|
print(ascii_art)
|
|
print("Tiny🔥Torch")
|
|
print("Build ML Systems from Scratch!")
|
|
else:
|
|
print("🔥 TinyTorch 🔥")
|
|
print("Build ML Systems from Scratch!")
|
|
except NameError:
|
|
# Handle case when running in notebook where __file__ is not defined
|
|
try:
|
|
art_file = Path(os.getcwd()) / "tinytorch_flame.txt"
|
|
if art_file.exists():
|
|
with open(art_file, 'r') as f:
|
|
ascii_art = f.read()
|
|
print(ascii_art)
|
|
print("Tiny🔥Torch")
|
|
print("Build ML Systems from Scratch!")
|
|
else:
|
|
print("🔥 TinyTorch 🔥")
|
|
print("Build ML Systems from Scratch!")
|
|
except:
|
|
print("🔥 TinyTorch 🔥")
|
|
print("Build ML Systems from Scratch!")
|
|
|
|
def add_numbers(a, b):
|
|
"""Add two numbers together."""
|
|
return a + b
|
|
|
|
# %% ../../modules/setup/setup_dev.ipynb 8
|
|
class SystemInfo:
|
|
"""
|
|
Simple system information class.
|
|
|
|
TODO: Implement this class to collect and display system information.
|
|
"""
|
|
|
|
def __init__(self):
|
|
"""
|
|
Initialize system information collection.
|
|
|
|
TODO: Collect Python version, platform, and machine information.
|
|
"""
|
|
raise NotImplementedError("Student implementation required")
|
|
|
|
def __str__(self):
|
|
"""
|
|
Return human-readable system information.
|
|
|
|
TODO: Format system info as a readable string.
|
|
"""
|
|
raise NotImplementedError("Student implementation required")
|
|
|
|
def is_compatible(self):
|
|
"""
|
|
Check if system meets minimum requirements.
|
|
|
|
TODO: Check if Python version is >= 3.8
|
|
"""
|
|
raise NotImplementedError("Student implementation required")
|
|
|
|
# %% ../../modules/setup/setup_dev.ipynb 9
|
|
class SystemInfo:
|
|
"""Simple system information class."""
|
|
|
|
def __init__(self):
|
|
self.python_version = sys.version_info
|
|
self.platform = platform.system()
|
|
self.machine = platform.machine()
|
|
|
|
def __str__(self):
|
|
return f"Python {self.python_version.major}.{self.python_version.minor} on {self.platform} ({self.machine})"
|
|
|
|
def is_compatible(self):
|
|
"""Check if system meets minimum requirements."""
|
|
return self.python_version >= (3, 8)
|
|
|
|
# %% ../../modules/setup/setup_dev.ipynb 13
|
|
class DeveloperProfile:
|
|
"""
|
|
Developer profile for personalizing TinyTorch experience.
|
|
|
|
TODO: Implement this class to store and display developer information.
|
|
Default to course instructor but allow students to personalize.
|
|
"""
|
|
|
|
@staticmethod
|
|
def _load_default_flame():
|
|
"""
|
|
Load the default TinyTorch flame ASCII art from file.
|
|
|
|
TODO: Implement file loading for tinytorch_flame.txt with fallback.
|
|
"""
|
|
raise NotImplementedError("Student implementation required")
|
|
|
|
def __init__(self, name="Vijay Janapa Reddi", affiliation="Harvard University",
|
|
email="vj@eecs.harvard.edu", github_username="profvjreddi", ascii_art=None):
|
|
"""
|
|
Initialize developer profile.
|
|
|
|
TODO: Store developer information with sensible defaults.
|
|
Students should be able to customize this with their own info and ASCII art.
|
|
"""
|
|
raise NotImplementedError("Student implementation required")
|
|
|
|
def __str__(self):
|
|
"""
|
|
Return formatted developer information.
|
|
|
|
TODO: Format developer info as a professional signature with optional ASCII art.
|
|
"""
|
|
raise NotImplementedError("Student implementation required")
|
|
|
|
def get_signature(self):
|
|
"""
|
|
Get a short signature for code headers.
|
|
|
|
TODO: Return a concise signature like "Built by Name (@github)"
|
|
"""
|
|
raise NotImplementedError("Student implementation required")
|
|
|
|
def get_ascii_art(self):
|
|
"""
|
|
Get ASCII art for the profile.
|
|
|
|
TODO: Return custom ASCII art or default flame loaded from file.
|
|
"""
|
|
raise NotImplementedError("Student implementation required")
|
|
|
|
# %% ../../modules/setup/setup_dev.ipynb 14
|
|
class DeveloperProfile:
|
|
"""Developer profile for personalizing TinyTorch experience."""
|
|
|
|
@staticmethod
|
|
def _load_default_flame():
|
|
"""Load the default TinyTorch flame ASCII art from file."""
|
|
try:
|
|
# Try to load from the same directory as this module
|
|
try:
|
|
# Try to get the directory of the current file
|
|
current_dir = os.path.dirname(__file__)
|
|
except NameError:
|
|
# If __file__ is not defined (e.g., in notebook), use current directory
|
|
current_dir = os.getcwd()
|
|
|
|
flame_path = os.path.join(current_dir, 'tinytorch_flame.txt')
|
|
|
|
with open(flame_path, 'r', encoding='utf-8') as f:
|
|
flame_art = f.read()
|
|
|
|
# Add the Tiny🔥Torch text below the flame
|
|
return f"""{flame_art}
|
|
|
|
Tiny🔥Torch
|
|
Build ML Systems from Scratch!
|
|
"""
|
|
except (FileNotFoundError, IOError):
|
|
# Fallback to simple flame if file not found
|
|
return """
|
|
🔥 TinyTorch Developer 🔥
|
|
. . . . . .
|
|
. . . . . .
|
|
. . . . . . .
|
|
. . . . . . . .
|
|
. . . . . . . . .
|
|
. . . . . . . . . .
|
|
. . . . . . . . . . .
|
|
. . . . . . . . . . . .
|
|
. . . . . . . . . . . . .
|
|
. . . . . . . . . . . . . .
|
|
\\ \\ \\ \\ \\ \\ \\ \\ \\ / / / / / /
|
|
\\ \\ \\ \\ \\ \\ \\ \\ / / / / / /
|
|
\\ \\ \\ \\ \\ \\ \\ / / / / / /
|
|
\\ \\ \\ \\ \\ \\ / / / / / /
|
|
\\ \\ \\ \\ \\ / / / / / /
|
|
\\ \\ \\ \\ / / / / / /
|
|
\\ \\ \\ / / / / / /
|
|
\\ \\ / / / / / /
|
|
\\ / / / / / /
|
|
\\/ / / / / /
|
|
\\/ / / / /
|
|
\\/ / / /
|
|
\\/ / /
|
|
\\/ /
|
|
\\/
|
|
|
|
Tiny🔥Torch
|
|
Build ML Systems from Scratch!
|
|
"""
|
|
|
|
def __init__(self, name="Vijay Janapa Reddi", affiliation="Harvard University",
|
|
email="vj@eecs.harvard.edu", github_username="profvjreddi", ascii_art=None):
|
|
self.name = name
|
|
self.affiliation = affiliation
|
|
self.email = email
|
|
self.github_username = github_username
|
|
self.ascii_art = ascii_art or self._load_default_flame()
|
|
|
|
def __str__(self):
|
|
return f"👨💻 {self.name} | {self.affiliation} | @{self.github_username}"
|
|
|
|
def get_signature(self):
|
|
"""Get a short signature for code headers."""
|
|
return f"Built by {self.name} (@{self.github_username})"
|
|
|
|
def get_ascii_art(self):
|
|
"""Get ASCII art for the profile."""
|
|
return self.ascii_art
|
|
|
|
def get_full_profile(self):
|
|
"""Get complete profile with ASCII art."""
|
|
return f"""{self.ascii_art}
|
|
|
|
👨💻 Developer: {self.name}
|
|
🏛️ Affiliation: {self.affiliation}
|
|
📧 Email: {self.email}
|
|
🐙 GitHub: @{self.github_username}
|
|
🔥 Ready to build ML systems from scratch!
|
|
"""
|