Files
print_hej/update_memory_charts.py
T
Ein Anderssono 43870e5920 Reorganize documentation: create separate reports for each decimal level
- Create reports/ directory with detailed performance reports
- Simplify README.md to provide overview and summary
- Add links to detailed reports for each decimal level (1, 2, 5, 10, 100, 1000, 2000)
- Keep summary table and key findings in main README
- Remove verbose charts from main README to reduce noise
2026-04-23 10:16:20 +02:00

84 lines
2.6 KiB
Python

#!/usr/bin/env python3
"""Update Memory Usage Over Time charts with actual data from timeline files."""
import os
import re
from pathlib import Path
# Languages with Memory Usage Over Time charts
LANGUAGES = {
"C": {"max_time": 12, "max_memory": 1},
"Rust": {"max_time": 12, "max_memory": 1},
"Assembly": {"max_time": 20, "max_memory": 1},
"Haskell": {"max_time": 8, "max_memory": 12},
"Dart": {"max_time": 12, "max_memory": 11},
"Elixir": {"max_time": 300, "max_memory": 3},
"TypeScript": {"max_time": 1500, "max_memory": 3},
"Scala": {"max_time": 360, "max_memory": 3},
"JavaScript": {"max_time": 500, "max_memory": 3},
}
def get_memory_timeline(lang_dir):
"""Get memory timeline from timeline files."""
timeline_dir = Path(f"timelines/{lang_dir}")
if not timeline_dir.exists():
return []
# Read first timeline file
tsv_file = timeline_dir / "run_1.tsv"
if not tsv_file.exists():
return []
memories = []
with open(tsv_file, 'r') as f:
for line in f:
parts = line.strip().split()
if len(parts) >= 2:
try:
memory_bytes = int(parts[1])
# Convert to MB
memory_mb = memory_bytes / (1024 * 1024)
memories.append(round(memory_mb, 1))
except ValueError:
continue
return memories
def update_readme():
"""Update README with actual memory timeline data."""
with open('README.md', 'r') as f:
content = f.read()
for lang, config in LANGUAGES.items():
# Get memory timeline
memories = get_memory_timeline(lang)
if not memories:
print(f"No timeline data for {lang}")
continue
# Find and replace memory chart
# Pattern to match the line chart values
pattern = rf'(title "{lang} - Memory Usage Over Time".*?line \[).*?(\])'
# Create new values string
values_str = ', '.join(map(str, memories))
replacement = f'\\g<1>{values_str}\\g<2>'
# Update content
new_content = re.sub(pattern, replacement, content, flags=re.DOTALL)
if new_content != content:
content = new_content
print(f"Updated {lang} with {len(memories)} memory values: {memories[:5]}...")
else:
print(f"No match found for {lang}")
# Write updated README
with open('README.md', 'w') as f:
f.write(content)
print("\nUpdated README with actual memory timeline data")
if __name__ == "__main__":
update_readme()