| <!doctype html> |
| <html lang="en" data-theme="light"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>/tmp/tachyon_selfcontained.py - Heatmap</title> |
| <style> |
| /* ========================================================================== |
| Python Profiler - Shared CSS Foundation |
| Design system shared between Flamegraph and Heatmap viewers |
| ========================================================================== */ |
| |
| /* -------------------------------------------------------------------------- |
| CSS Variables & Theme System |
| -------------------------------------------------------------------------- */ |
| |
| :root { |
| /* Typography */ |
| --font-sans: "Source Sans Pro", "Lucida Grande", "Lucida Sans Unicode", |
| "Geneva", "Verdana", sans-serif; |
| --font-mono: 'SF Mono', 'Monaco', 'Consolas', 'Liberation Mono', monospace; |
| |
| /* Python brand colors (theme-independent) */ |
| --python-blue: #3776ab; |
| --python-blue-light: #4584bb; |
| --python-blue-lighter: #5592cc; |
| --python-gold: #ffd43b; |
| --python-gold-dark: #ffcd02; |
| --python-gold-light: #ffdc5c; |
| |
| /* Heat palette - defined per theme below */ |
| |
| /* Layout */ |
| --sidebar-width: 280px; |
| --sidebar-collapsed: 44px; |
| --topbar-height: 56px; |
| --statusbar-height: 32px; |
| |
| /* Border radius */ |
| --radius-sm: 4px; |
| --radius-md: 8px; |
| --radius-lg: 12px; |
| |
| /* Transitions */ |
| --transition-fast: 0.15s ease; |
| --transition-normal: 0.25s ease; |
| --transition-slow: 0.3s ease; |
| } |
| |
| /* Light theme (default) */ |
| :root, [data-theme="light"] { |
| --bg-primary: #ffffff; |
| --bg-secondary: #f8f9fa; |
| --bg-tertiary: #e9ecef; |
| --border: #e9ecef; |
| --border-subtle: #f0f2f5; |
| |
| --text-primary: #2e3338; |
| --text-secondary: #5a6c7d; |
| --text-muted: #6f767e; |
| |
| --accent: #3776ab; |
| --accent-hover: #2d5aa0; |
| --accent-glow: rgba(55, 118, 171, 0.15); |
| |
| --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08); |
| --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.1); |
| --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.15); |
| |
| --header-gradient: linear-gradient(135deg, #3776ab 0%, #4584bb 100%); |
| |
| /* Light mode heat palette - blue to yellow to orange to red (cold to hot) */ |
| --heat-1: #7ba3d1; |
| --heat-2: #a8d0ef; |
| --heat-3: #d6e9f8; |
| --heat-4: #ffe6a8; |
| --heat-5: #ffd43b; |
| --heat-6: #ffb84d; |
| --heat-7: #ff9966; |
| --heat-8: #ff6347; |
| |
| /* Code view specific */ |
| --code-bg: #ffffff; |
| --code-bg-line: #f8f9fa; |
| --code-border: #e9ecef; |
| --code-text: #2e3338; |
| --code-text-muted: #8b949e; |
| --code-accent: #3776ab; |
| |
| /* Navigation colors */ |
| --nav-caller: #2563eb; |
| --nav-caller-hover: #1d4ed8; |
| --nav-callee: #dc2626; |
| --nav-callee-hover: #b91c1c; |
| |
| /* Specialization status colors */ |
| --spec-high: #4caf50; |
| --spec-high-text: #2e7d32; |
| --spec-high-bg: rgba(76, 175, 80, 0.15); |
| --spec-medium: #ff9800; |
| --spec-medium-text: #e65100; |
| --spec-medium-bg: rgba(255, 152, 0, 0.15); |
| --spec-low: #9e9e9e; |
| --spec-low-text: #616161; |
| --spec-low-bg: rgba(158, 158, 158, 0.15); |
| |
| /* Heatmap span highlighting colors */ |
| --span-hot-base: 255, 100, 50; |
| --span-cold-base: 150, 150, 150; |
| } |
| |
| /* Dark theme */ |
| [data-theme="dark"] { |
| --bg-primary: #0d1117; |
| --bg-secondary: #161b22; |
| --bg-tertiary: #21262d; |
| --border: #30363d; |
| --border-subtle: #21262d; |
| |
| --text-primary: #e6edf3; |
| --text-secondary: #8b949e; |
| --text-muted: #757e8a; |
| |
| --accent: #58a6ff; |
| --accent-hover: #79b8ff; |
| --accent-glow: rgba(88, 166, 255, 0.15); |
| |
| --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3); |
| --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4); |
| --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.5); |
| |
| --header-gradient: linear-gradient(135deg, #21262d 0%, #30363d 100%); |
| |
| /* Dark mode heat palette - muted colors that provide sufficient contrast with light text */ |
| --heat-1: rgba(74, 123, 167, 0.35); |
| --heat-2: rgba(90, 159, 168, 0.38); |
| --heat-3: rgba(106, 181, 181, 0.40); |
| --heat-4: rgba(126, 196, 136, 0.42); |
| --heat-5: rgba(160, 216, 120, 0.45); |
| --heat-6: rgba(196, 222, 106, 0.48); |
| --heat-7: rgba(244, 212, 77, 0.50); |
| --heat-8: rgba(255, 107, 53, 0.55); |
| |
| /* Code view specific - dark mode */ |
| --code-bg: #0d1117; |
| --code-bg-line: #161b22; |
| --code-border: #30363d; |
| --code-text: #e6edf3; |
| --code-text-muted: #6e7681; |
| --code-accent: #58a6ff; |
| |
| /* Navigation colors - dark theme friendly */ |
| --nav-caller: #58a6ff; |
| --nav-caller-hover: #4184e4; |
| --nav-callee: #f87171; |
| --nav-callee-hover: #e53e3e; |
| |
| /* Specialization status colors - dark theme */ |
| --spec-high: #81c784; |
| --spec-high-text: #81c784; |
| --spec-high-bg: rgba(129, 199, 132, 0.2); |
| --spec-medium: #ffb74d; |
| --spec-medium-text: #ffb74d; |
| --spec-medium-bg: rgba(255, 183, 77, 0.2); |
| --spec-low: #bdbdbd; |
| --spec-low-text: #9e9e9e; |
| --spec-low-bg: rgba(189, 189, 189, 0.15); |
| |
| /* Heatmap span highlighting colors - dark theme */ |
| --span-hot-base: 255, 107, 53; |
| --span-cold-base: 189, 189, 189; |
| } |
| |
| /* -------------------------------------------------------------------------- |
| Base Styles |
| -------------------------------------------------------------------------- */ |
| |
| *, *::before, *::after { |
| box-sizing: border-box; |
| } |
| |
| html, body { |
| margin: 0; |
| padding: 0; |
| } |
| |
| body { |
| font-family: var(--font-sans); |
| font-size: 14px; |
| line-height: 1.6; |
| color: var(--text-primary); |
| background: var(--bg-primary); |
| -webkit-font-smoothing: antialiased; |
| -moz-osx-font-smoothing: grayscale; |
| transition: background var(--transition-normal), color var(--transition-normal); |
| } |
| |
| /* -------------------------------------------------------------------------- |
| Layout Structure |
| -------------------------------------------------------------------------- */ |
| |
| .app-layout { |
| display: flex; |
| flex-direction: column; |
| } |
| |
| /* -------------------------------------------------------------------------- |
| Top Bar |
| -------------------------------------------------------------------------- */ |
| |
| .top-bar { |
| height: var(--topbar-height); |
| background: var(--header-gradient); |
| display: flex; |
| align-items: center; |
| padding: 0 16px; |
| gap: 16px; |
| flex-shrink: 0; |
| box-shadow: 0 2px 10px rgba(55, 118, 171, 0.25); |
| border-bottom: 2px solid var(--python-gold); |
| } |
| |
| /* Brand / Logo */ |
| .brand { |
| display: flex; |
| align-items: center; |
| gap: 12px; |
| color: white; |
| text-decoration: none; |
| flex-shrink: 0; |
| } |
| |
| .brand-logo { |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| width: 48px; |
| height: 40px; |
| flex-shrink: 0; |
| } |
| |
| /* Style the inlined SVG/img inside brand-logo */ |
| .brand-logo svg, |
| .brand-logo img { |
| width: 48px; |
| height: 40px; |
| display: block; |
| object-fit: contain; |
| filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.2)); |
| } |
| |
| .brand-info { |
| display: flex; |
| flex-direction: column; |
| line-height: 1.15; |
| } |
| |
| .brand-text { |
| font-family: var(--font-sans); |
| font-weight: 700; |
| font-size: 16px; |
| letter-spacing: -0.3px; |
| text-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); |
| color: inherit; |
| text-decoration: none; |
| } |
| |
| .brand-subtitle { |
| font-weight: 500; |
| font-size: 10px; |
| opacity: 0.9; |
| text-transform: uppercase; |
| letter-spacing: 0.5px; |
| } |
| |
| .brand-divider { |
| width: 1px; |
| height: 16px; |
| background: rgba(255, 255, 255, 0.3); |
| } |
| |
| /* Toolbar */ |
| .toolbar { |
| display: flex; |
| align-items: center; |
| gap: 6px; |
| margin-left: auto; |
| } |
| |
| .toolbar-btn { |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| width: 32px; |
| height: 32px; |
| padding: 0; |
| font-size: 15px; |
| color: white; |
| background: rgba(255, 255, 255, 0.12); |
| border: 1px solid rgba(255, 255, 255, 0.18); |
| border-radius: 6px; |
| cursor: pointer; |
| text-decoration: none; |
| transition: all var(--transition-fast); |
| } |
| |
| .toolbar-btn:hover { |
| background: rgba(255, 255, 255, 0.22); |
| border-color: rgba(255, 255, 255, 0.35); |
| } |
| |
| .toolbar-btn:active { |
| transform: scale(0.95); |
| } |
| |
| /* -------------------------------------------------------------------------- |
| Status Bar |
| -------------------------------------------------------------------------- */ |
| |
| .status-bar { |
| height: var(--statusbar-height); |
| background: var(--bg-secondary); |
| border-top: 1px solid var(--border); |
| display: flex; |
| align-items: center; |
| padding: 0 16px; |
| gap: 16px; |
| font-family: var(--font-mono); |
| font-size: 11px; |
| color: var(--text-secondary); |
| flex-shrink: 0; |
| } |
| |
| .status-item { |
| display: flex; |
| align-items: center; |
| gap: 5px; |
| } |
| |
| .status-item::before { |
| content: ''; |
| width: 4px; |
| height: 4px; |
| background: var(--python-gold); |
| border-radius: 50%; |
| } |
| |
| .status-item:first-child::before { |
| display: none; |
| } |
| |
| .status-label { |
| color: var(--text-muted); |
| } |
| |
| .status-value { |
| color: var(--text-primary); |
| font-weight: 500; |
| } |
| |
| .status-value.accent { |
| color: var(--accent); |
| font-weight: 600; |
| } |
| |
| /* -------------------------------------------------------------------------- |
| Animations |
| -------------------------------------------------------------------------- */ |
| |
| @keyframes fadeIn { |
| from { opacity: 0; } |
| to { opacity: 1; } |
| } |
| |
| @keyframes slideUp { |
| from { |
| opacity: 0; |
| transform: translateY(12px); |
| } |
| to { |
| opacity: 1; |
| transform: translateY(0); |
| } |
| } |
| |
| @keyframes shimmer { |
| 0% { left: -100%; } |
| 100% { left: 100%; } |
| } |
| |
| /* -------------------------------------------------------------------------- |
| Focus States (Accessibility) |
| -------------------------------------------------------------------------- */ |
| |
| button:focus-visible, |
| select:focus-visible, |
| input:focus-visible, |
| .toggle-switch:focus-visible, |
| a.toolbar-btn:focus-visible { |
| outline: 2px solid var(--python-gold); |
| outline-offset: 2px; |
| } |
| |
| /* -------------------------------------------------------------------------- |
| Shared Responsive |
| -------------------------------------------------------------------------- */ |
| |
| @media (max-width: 900px) { |
| .brand-subtitle { |
| display: none; |
| } |
| } |
| |
| @media (max-width: 600px) { |
| .toolbar-btn:not(.theme-toggle) { |
| display: none; |
| } |
| } |
| |
| /* -------------------------------------------------------------------------- |
| Toggle Switch |
| -------------------------------------------------------------------------- */ |
| |
| .toggle-switch { |
| display: inline-flex; |
| align-items: center; |
| gap: 8px; |
| cursor: pointer; |
| user-select: none; |
| font-family: var(--font-sans); |
| transition: opacity var(--transition-fast); |
| flex-shrink: 0; |
| } |
| |
| .toggle-switch:hover { |
| opacity: 0.85; |
| } |
| |
| .toggle-switch .toggle-label { |
| font-size: 11px; |
| font-weight: 500; |
| color: var(--text-muted); |
| transition: color var(--transition-fast); |
| white-space: nowrap; |
| display: inline-flex; |
| flex-direction: column; |
| } |
| |
| .toggle-switch .toggle-label.active { |
| color: var(--text-primary); |
| font-weight: 600; |
| } |
| |
| /* Reserve space for bold text to prevent layout shift on toggle */ |
| .toggle-switch .toggle-label::after { |
| content: attr(data-text); |
| font-weight: 600; |
| height: 0; |
| visibility: hidden; |
| } |
| |
| .toggle-switch.disabled { |
| opacity: 0.4; |
| pointer-events: none; |
| cursor: not-allowed; |
| } |
| |
| .toggle-track { |
| position: relative; |
| width: 36px; |
| height: 20px; |
| background: var(--bg-tertiary); |
| border: 2px solid var(--border); |
| border-radius: 12px; |
| transition: all var(--transition-fast); |
| box-shadow: inset var(--shadow-sm); |
| } |
| |
| .toggle-track:hover { |
| border-color: var(--text-muted); |
| } |
| |
| .toggle-track.on { |
| background: var(--accent); |
| border-color: var(--accent); |
| box-shadow: 0 0 8px var(--accent-glow); |
| } |
| |
| .toggle-track::after { |
| content: ''; |
| position: absolute; |
| top: 1px; |
| left: 1px; |
| width: 14px; |
| height: 14px; |
| background: white; |
| border-radius: 50%; |
| box-shadow: var(--shadow-sm); |
| transition: all var(--transition-fast); |
| } |
| |
| .toggle-track.on::after { |
| transform: translateX(16px); |
| box-shadow: var(--shadow-md); |
| } |
| |
| |
| /* ========================================================================== |
| Heatmap Viewer - Component-Specific CSS |
| |
| DEPENDENCY: Requires _shared_assets/base.css to be loaded first |
| This file extends the shared foundation with heatmap-specific styles. |
| ========================================================================== */ |
| |
| /* -------------------------------------------------------------------------- |
| Layout Overrides (Heatmap-specific) |
| -------------------------------------------------------------------------- */ |
| |
| .app-layout { |
| min-height: 100vh; |
| } |
| |
| /* Sticky top bar for heatmap views */ |
| .top-bar { |
| position: sticky; |
| top: 0; |
| z-index: 100; |
| } |
| |
| /* -------------------------------------------------------------------------- |
| Main Content Area |
| -------------------------------------------------------------------------- */ |
| |
| .main-content { |
| flex: 1; |
| padding: 24px 3%; |
| width: 100%; |
| max-width: 100%; |
| } |
| |
| /* -------------------------------------------------------------------------- |
| Stats Summary Cards - Enhanced with Icons & Animations |
| -------------------------------------------------------------------------- */ |
| |
| .stats-summary { |
| display: grid; |
| grid-template-columns: repeat(3, 1fr); |
| gap: 12px; |
| margin-bottom: 24px; |
| } |
| |
| .stat-card { |
| display: flex; |
| align-items: center; |
| gap: 12px; |
| background: var(--bg-primary); |
| border: 2px solid var(--border); |
| border-radius: 10px; |
| padding: 14px 16px; |
| transition: all var(--transition-fast); |
| animation: slideUp 0.5s ease-out backwards; |
| animation-delay: calc(var(--i, 0) * 0.08s); |
| position: relative; |
| overflow: hidden; |
| } |
| |
| .stat-card:nth-child(1) { --i: 0; --card-color: 55, 118, 171; } |
| .stat-card:nth-child(2) { --i: 1; --card-color: 40, 167, 69; } |
| .stat-card:nth-child(3) { --i: 2; --card-color: 255, 193, 7; } |
| .stat-card:nth-child(4) { --i: 3; --card-color: 111, 66, 193; } |
| .stat-card:nth-child(5) { --i: 4; --card-color: 220, 53, 69; } |
| .stat-card:nth-child(6) { --i: 5; --card-color: 23, 162, 184; } |
| |
| .stat-card:hover { |
| border-color: rgba(var(--card-color), 0.6); |
| background: linear-gradient(135deg, rgba(var(--card-color), 0.08) 0%, var(--bg-primary) 100%); |
| transform: translateY(-2px); |
| box-shadow: 0 4px 16px rgba(var(--card-color), 0.15); |
| } |
| |
| .stat-icon { |
| width: 40px; |
| height: 40px; |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| font-size: 18px; |
| background: linear-gradient(135deg, rgba(var(--card-color), 0.15) 0%, rgba(var(--card-color), 0.05) 100%); |
| border: 1px solid rgba(var(--card-color), 0.2); |
| border-radius: 10px; |
| flex-shrink: 0; |
| transition: all var(--transition-fast); |
| } |
| |
| .stat-card:hover .stat-icon { |
| transform: scale(1.05) rotate(-2deg); |
| background: linear-gradient(135deg, rgba(var(--card-color), 0.25) 0%, rgba(var(--card-color), 0.1) 100%); |
| } |
| |
| .stat-data { |
| flex: 1; |
| min-width: 0; |
| } |
| |
| .stat-value { |
| font-family: var(--font-mono); |
| font-size: 1.35em; |
| font-weight: 800; |
| color: rgb(var(--card-color)); |
| display: block; |
| line-height: 1.1; |
| letter-spacing: -0.3px; |
| } |
| |
| .stat-label { |
| font-size: 10px; |
| font-weight: 600; |
| color: var(--text-muted); |
| text-transform: uppercase; |
| letter-spacing: 0.3px; |
| margin-top: 2px; |
| } |
| |
| /* Sparkline decoration for stats */ |
| .stat-sparkline { |
| position: absolute; |
| bottom: 0; |
| left: 0; |
| right: 0; |
| height: 30px; |
| opacity: 0.1; |
| background: linear-gradient(180deg, |
| transparent 0%, |
| rgba(var(--card-color), 0.3) 100% |
| ); |
| pointer-events: none; |
| } |
| |
| /* -------------------------------------------------------------------------- |
| Rate Cards (Error Rate, Missed Samples) with Progress Bars |
| -------------------------------------------------------------------------- */ |
| |
| .rate-card { |
| display: flex; |
| flex-direction: column; |
| gap: 12px; |
| background: var(--bg-primary); |
| border: 2px solid var(--border); |
| border-radius: 12px; |
| padding: 18px 20px; |
| transition: all var(--transition-fast); |
| animation: slideUp 0.5s ease-out backwards; |
| position: relative; |
| overflow: hidden; |
| } |
| |
| .rate-card:nth-child(5) { animation-delay: 0.32s; --rate-color: 220, 53, 69; } |
| .rate-card:nth-child(6) { animation-delay: 0.40s; --rate-color: 255, 152, 0; } |
| |
| .rate-card:hover { |
| border-color: rgba(var(--rate-color), 0.5); |
| transform: translateY(-2px); |
| box-shadow: 0 6px 20px rgba(var(--rate-color), 0.15); |
| } |
| |
| .rate-header { |
| display: flex; |
| justify-content: space-between; |
| align-items: center; |
| } |
| |
| .rate-info { |
| display: flex; |
| align-items: center; |
| gap: 10px; |
| } |
| |
| .rate-icon { |
| width: 36px; |
| height: 36px; |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| font-size: 18px; |
| background: linear-gradient(135deg, rgba(var(--rate-color), 0.15) 0%, rgba(var(--rate-color), 0.05) 100%); |
| border: 1px solid rgba(var(--rate-color), 0.2); |
| border-radius: 10px; |
| flex-shrink: 0; |
| } |
| |
| .rate-label { |
| font-size: 12px; |
| font-weight: 600; |
| color: var(--text-secondary); |
| text-transform: uppercase; |
| letter-spacing: 0.3px; |
| } |
| |
| .rate-value { |
| font-family: var(--font-mono); |
| font-size: 1.4em; |
| font-weight: 800; |
| color: rgb(var(--rate-color)); |
| } |
| |
| .rate-bar { |
| height: 8px; |
| background: var(--bg-tertiary); |
| border-radius: 4px; |
| overflow: hidden; |
| position: relative; |
| } |
| |
| .rate-fill { |
| height: 100%; |
| border-radius: 4px; |
| transition: width 0.8s ease-out; |
| position: relative; |
| overflow: hidden; |
| } |
| |
| .rate-fill.error { |
| background: linear-gradient(90deg, #dc3545 0%, #ff6b6b 100%); |
| } |
| |
| .rate-fill.warning { |
| background: linear-gradient(90deg, #ff9800 0%, #ffc107 100%); |
| } |
| |
| .rate-fill.good { |
| background: linear-gradient(90deg, #28a745 0%, #20c997 100%); |
| } |
| |
| /* Shimmer animation on rate bars */ |
| .rate-fill::after { |
| content: ''; |
| position: absolute; |
| top: 0; |
| left: -100%; |
| width: 100%; |
| height: 100%; |
| background: linear-gradient( |
| 90deg, |
| transparent 0%, |
| rgba(255, 255, 255, 0.4) 50%, |
| transparent 100% |
| ); |
| animation: shimmer 2.5s ease-in-out infinite; |
| } |
| |
| /* -------------------------------------------------------------------------- |
| Section Headers |
| -------------------------------------------------------------------------- */ |
| |
| .section-header { |
| display: flex; |
| align-items: center; |
| gap: 12px; |
| margin-bottom: 16px; |
| padding-bottom: 12px; |
| border-bottom: 2px solid var(--python-gold); |
| } |
| |
| .section-title { |
| font-size: 18px; |
| font-weight: 700; |
| color: var(--text-primary); |
| margin: 0; |
| flex: 1; |
| } |
| |
| /* -------------------------------------------------------------------------- |
| Filter Controls |
| -------------------------------------------------------------------------- */ |
| |
| .filter-controls { |
| display: flex; |
| gap: 8px; |
| flex-wrap: wrap; |
| align-items: center; |
| margin-bottom: 16px; |
| } |
| |
| .control-btn { |
| padding: 8px 16px; |
| background: var(--bg-secondary); |
| color: var(--text-primary); |
| border: 1px solid var(--border); |
| border-radius: 6px; |
| font-size: 13px; |
| font-weight: 500; |
| cursor: pointer; |
| transition: all var(--transition-fast); |
| } |
| |
| .control-btn:hover { |
| background: var(--accent); |
| color: white; |
| border-color: var(--accent); |
| } |
| |
| /* -------------------------------------------------------------------------- |
| Type Sections (stdlib, project, etc) |
| -------------------------------------------------------------------------- */ |
| |
| .type-section { |
| background: var(--bg-primary); |
| border: 1px solid var(--border); |
| border-radius: 8px; |
| overflow: hidden; |
| margin-bottom: 12px; |
| } |
| |
| .type-header { |
| padding: 12px 16px; |
| background: var(--header-gradient); |
| color: white; |
| cursor: pointer; |
| display: flex; |
| align-items: center; |
| gap: 10px; |
| user-select: none; |
| transition: all var(--transition-fast); |
| font-weight: 600; |
| } |
| |
| .type-header:hover { |
| opacity: 0.95; |
| } |
| |
| .type-icon { |
| font-size: 12px; |
| transition: transform var(--transition-fast); |
| min-width: 12px; |
| } |
| |
| .type-title { |
| font-size: 14px; |
| flex: 1; |
| } |
| |
| .type-stats { |
| font-size: 12px; |
| opacity: 0.9; |
| background: rgba(255, 255, 255, 0.15); |
| padding: 4px 10px; |
| border-radius: 4px; |
| font-family: var(--font-mono); |
| } |
| |
| .type-content { |
| padding: 12px; |
| } |
| |
| /* -------------------------------------------------------------------------- |
| Folder Nodes (hierarchical structure) |
| -------------------------------------------------------------------------- */ |
| |
| .folder-node { |
| margin-bottom: 6px; |
| } |
| |
| .folder-header { |
| padding: 8px 12px; |
| background: var(--bg-secondary); |
| border: 1px solid var(--border); |
| border-radius: 6px; |
| cursor: pointer; |
| display: flex; |
| align-items: center; |
| gap: 8px; |
| user-select: none; |
| transition: all var(--transition-fast); |
| } |
| |
| .folder-header:hover { |
| background: var(--accent-glow); |
| border-color: var(--accent); |
| } |
| |
| .folder-icon { |
| font-size: 10px; |
| color: var(--accent); |
| transition: transform var(--transition-fast); |
| min-width: 12px; |
| } |
| |
| .folder-name { |
| flex: 1; |
| font-weight: 500; |
| color: var(--text-primary); |
| font-size: 13px; |
| } |
| |
| .folder-stats { |
| font-size: 11px; |
| color: var(--text-secondary); |
| background: var(--bg-tertiary); |
| padding: 2px 8px; |
| border-radius: 4px; |
| font-family: var(--font-mono); |
| } |
| |
| .folder-content { |
| padding-left: 20px; |
| margin-top: 6px; |
| } |
| |
| /* -------------------------------------------------------------------------- |
| File Items |
| -------------------------------------------------------------------------- */ |
| |
| .files-list { |
| display: flex; |
| flex-direction: column; |
| gap: 4px; |
| margin-top: 8px; |
| } |
| |
| .file-item { |
| display: flex; |
| align-items: center; |
| gap: 12px; |
| padding: 8px 12px; |
| background: var(--bg-primary); |
| border: 1px solid var(--border-subtle); |
| border-radius: 6px; |
| transition: all var(--transition-fast); |
| } |
| |
| .file-item:hover { |
| background: var(--bg-secondary); |
| border-color: var(--border); |
| } |
| |
| .file-item .file-link { |
| flex: 1; |
| min-width: 0; |
| font-size: 13px; |
| } |
| |
| .file-samples { |
| font-size: 12px; |
| color: var(--text-secondary); |
| font-weight: 600; |
| white-space: nowrap; |
| width: 130px; |
| flex-shrink: 0; |
| text-align: right; |
| font-family: var(--font-mono); |
| } |
| |
| .heatmap-bar-container { |
| width: 120px; |
| flex-shrink: 0; |
| display: flex; |
| align-items: center; |
| } |
| |
| .heatmap-bar { |
| flex-shrink: 0; |
| border-radius: 2px; |
| } |
| |
| /* Links */ |
| .file-link { |
| color: var(--accent); |
| text-decoration: none; |
| font-weight: 500; |
| transition: color var(--transition-fast); |
| } |
| |
| .file-link:hover { |
| color: var(--accent-hover); |
| text-decoration: underline; |
| } |
| |
| /* -------------------------------------------------------------------------- |
| Module Badges |
| -------------------------------------------------------------------------- */ |
| |
| .module-badge { |
| display: inline-block; |
| padding: 3px 8px; |
| border-radius: 4px; |
| font-size: 11px; |
| font-weight: 600; |
| } |
| |
| .badge-stdlib { |
| background: rgba(40, 167, 69, 0.15); |
| color: #28a745; |
| } |
| |
| .badge-site-packages { |
| background: rgba(0, 123, 255, 0.15); |
| color: #007bff; |
| } |
| |
| .badge-project { |
| background: rgba(255, 193, 7, 0.2); |
| color: #d39e00; |
| } |
| |
| .badge-other { |
| background: var(--bg-tertiary); |
| color: var(--text-secondary); |
| } |
| |
| [data-theme="dark"] .badge-stdlib { |
| background: rgba(40, 167, 69, 0.25); |
| color: #5dd879; |
| } |
| |
| [data-theme="dark"] .badge-site-packages { |
| background: rgba(88, 166, 255, 0.25); |
| color: #79b8ff; |
| } |
| |
| [data-theme="dark"] .badge-project { |
| background: rgba(255, 212, 59, 0.25); |
| color: #ffd43b; |
| } |
| |
| /* ========================================================================== |
| FILE VIEW STYLES (Code Display) |
| ========================================================================== */ |
| |
| .code-view { |
| font-family: var(--font-mono); |
| min-height: 100vh; |
| } |
| |
| /* Code Header (Top Bar for file view) */ |
| .code-header { |
| height: var(--topbar-height); |
| background: var(--header-gradient); |
| display: flex; |
| align-items: center; |
| padding: 0 16px; |
| gap: 16px; |
| box-shadow: 0 2px 10px rgba(55, 118, 171, 0.25); |
| border-bottom: 2px solid var(--python-gold); |
| position: sticky; |
| top: 0; |
| z-index: 100; |
| } |
| |
| .code-header-content { |
| display: flex; |
| align-items: center; |
| justify-content: space-between; |
| width: 94%; |
| max-width: 100%; |
| margin: 0 auto; |
| } |
| |
| .code-header h1 { |
| font-size: 14px; |
| font-weight: 600; |
| color: white; |
| margin: 0; |
| font-family: var(--font-mono); |
| display: flex; |
| align-items: center; |
| gap: 8px; |
| } |
| |
| /* File Stats Bar */ |
| .file-stats { |
| background: var(--bg-secondary); |
| padding: 16px 24px; |
| border-bottom: 1px solid var(--border); |
| } |
| |
| .file-stats .stats-grid { |
| width: 94%; |
| max-width: 100%; |
| margin: 0 auto; |
| display: grid; |
| grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); |
| gap: 12px; |
| } |
| |
| .stat-item { |
| background: var(--bg-primary); |
| padding: 12px; |
| border-radius: 8px; |
| box-shadow: var(--shadow-sm); |
| text-align: center; |
| border: 1px solid var(--border); |
| transition: all var(--transition-fast); |
| } |
| |
| .stat-item:hover { |
| transform: translateY(-2px); |
| box-shadow: var(--shadow-md); |
| border-color: var(--accent); |
| } |
| |
| .stat-item .stat-value { |
| font-size: 1.4em; |
| font-weight: 700; |
| color: var(--accent); |
| } |
| |
| .stat-item .stat-label { |
| color: var(--text-muted); |
| font-size: 10px; |
| margin-top: 2px; |
| } |
| |
| /* Legend */ |
| .legend { |
| background: var(--bg-secondary); |
| padding: 12px 24px; |
| border-bottom: 1px solid var(--border); |
| } |
| |
| .legend-content { |
| width: 100%; |
| display: flex; |
| align-items: center; |
| gap: 20px; |
| flex-wrap: nowrap; |
| } |
| |
| .legend-separator { |
| width: 1px; |
| height: 24px; |
| background: var(--border); |
| flex-shrink: 0; |
| } |
| |
| .legend-title { |
| font-weight: 600; |
| color: var(--text-primary); |
| font-size: 13px; |
| font-family: var(--font-sans); |
| flex-shrink: 0; |
| } |
| |
| .legend-gradient { |
| width: 150px; |
| flex-shrink: 0; |
| height: 20px; |
| background: linear-gradient(90deg, |
| var(--bg-tertiary) 0%, |
| var(--heat-2) 25%, |
| var(--heat-4) 50%, |
| var(--heat-6) 75%, |
| var(--heat-8) 100% |
| ); |
| border-radius: 4px; |
| border: 1px solid var(--border); |
| } |
| |
| .legend-labels { |
| display: flex; |
| gap: 12px; |
| font-size: 11px; |
| color: var(--text-muted); |
| font-family: var(--font-sans); |
| flex-shrink: 0; |
| } |
| |
| /* Legend Controls Group - wraps toggles and bytecode button together */ |
| .legend-controls { |
| display: flex; |
| align-items: center; |
| gap: 20px; |
| flex-shrink: 0; |
| margin-left: auto; |
| } |
| |
| /* Heatmap-Specific Toggle Overrides */ |
| #toggle-color-mode .toggle-track.on { |
| background: #8e44ad; |
| border-color: #8e44ad; |
| box-shadow: 0 0 8px rgba(142, 68, 173, 0.3); |
| } |
| |
| #toggle-cold .toggle-track.on { |
| background: #e67e22; |
| border-color: #e67e22; |
| box-shadow: 0 0 8px rgba(230, 126, 34, 0.3); |
| } |
| |
| /* Code Container */ |
| .code-container { |
| width: 94%; |
| max-width: 100%; |
| margin: 16px auto; |
| background: var(--bg-primary); |
| border: 1px solid var(--border); |
| border-radius: 8px 8px 8px 8px; |
| box-shadow: var(--shadow-sm); |
| /* Allow horizontal scroll for long lines, but don't clip sticky header */ |
| } |
| |
| /* Code Header Row */ |
| .code-header-row { |
| position: sticky; |
| top: var(--topbar-height); |
| z-index: 50; |
| display: flex; |
| background: var(--bg-secondary); |
| border-bottom: 2px solid var(--border); |
| font-weight: 700; |
| font-size: 11px; |
| color: var(--text-muted); |
| text-transform: uppercase; |
| letter-spacing: 0.5px; |
| border-radius: 8px 8px 0 0; |
| } |
| |
| .header-line-number { |
| flex-shrink: 0; |
| width: 60px; |
| padding: 8px 10px; |
| text-align: right; |
| border-right: 1px solid var(--border); |
| } |
| |
| .header-samples-self, |
| .header-samples-cumulative { |
| flex-shrink: 0; |
| width: 90px; |
| padding: 8px 10px; |
| text-align: right; |
| border-right: 1px solid var(--border); |
| } |
| |
| .header-samples-self { |
| color: var(--heat-8); |
| } |
| |
| .header-samples-cumulative { |
| color: var(--accent); |
| } |
| |
| .header-content { |
| flex: 1; |
| padding: 8px 15px; |
| } |
| |
| /* Code Lines */ |
| .code-line { |
| position: relative; |
| display: flex; |
| min-height: 20px; |
| line-height: 20px; |
| font-size: 13px; |
| transition: background var(--transition-fast); |
| scroll-margin-top: calc(var(--topbar-height) + 50px); |
| } |
| |
| .code-line:hover { |
| filter: brightness(0.97); |
| } |
| |
| [data-theme="dark"] .code-line:hover { |
| filter: brightness(1.1); |
| } |
| |
| .line-number { |
| flex-shrink: 0; |
| width: 60px; |
| padding: 0 10px; |
| text-align: right; |
| color: var(--text-muted); |
| background: var(--bg-secondary); |
| border-right: 1px solid var(--border); |
| user-select: none; |
| transition: all var(--transition-fast); |
| } |
| |
| .line-number:hover { |
| background: var(--accent); |
| color: white; |
| cursor: pointer; |
| } |
| |
| .line-samples-self, |
| .line-samples-cumulative { |
| flex-shrink: 0; |
| width: 90px; |
| padding: 0 10px; |
| text-align: right; |
| background: var(--bg-secondary); |
| border-right: 1px solid var(--border); |
| font-weight: 600; |
| user-select: none; |
| font-size: 12px; |
| } |
| |
| .line-samples-self { |
| color: var(--heat-8); |
| } |
| |
| .line-samples-cumulative { |
| color: var(--accent); |
| } |
| |
| .line-content { |
| flex: 1; |
| padding: 0 15px; |
| white-space: pre; |
| overflow-x: auto; |
| } |
| |
| /* Scrollbar Styling */ |
| .line-content::-webkit-scrollbar { |
| height: 6px; |
| } |
| |
| .line-content::-webkit-scrollbar-thumb { |
| background: var(--border); |
| border-radius: 3px; |
| } |
| |
| .line-content::-webkit-scrollbar-thumb:hover { |
| background: var(--text-muted); |
| } |
| |
| /* Navigation Buttons */ |
| .line-nav-buttons { |
| position: absolute; |
| right: 8px; |
| top: 50%; |
| transform: translateY(-50%); |
| display: flex; |
| gap: 4px; |
| align-items: center; |
| } |
| |
| .nav-btn { |
| padding: 2px 6px; |
| font-size: 12px; |
| font-weight: 500; |
| border: 1px solid var(--accent); |
| border-radius: 4px; |
| background: var(--bg-primary); |
| color: var(--accent); |
| cursor: pointer; |
| transition: all var(--transition-fast); |
| user-select: none; |
| line-height: 1; |
| } |
| |
| .nav-btn:hover:not(:disabled) { |
| background: var(--accent); |
| color: white; |
| transform: translateY(-1px); |
| box-shadow: var(--shadow-sm); |
| } |
| |
| .nav-btn:active:not(:disabled) { |
| transform: translateY(0); |
| } |
| |
| .nav-btn:disabled { |
| opacity: 0.3; |
| cursor: not-allowed; |
| color: var(--text-muted); |
| background: var(--bg-secondary); |
| border-color: var(--border); |
| } |
| |
| .nav-btn.caller { |
| color: var(--nav-caller); |
| border-color: var(--nav-caller); |
| } |
| |
| .nav-btn.callee { |
| color: var(--nav-callee); |
| border-color: var(--nav-callee); |
| } |
| |
| .nav-btn.caller:hover:not(:disabled) { |
| background: var(--nav-caller-hover); |
| color: white; |
| } |
| |
| .nav-btn.callee:hover:not(:disabled) { |
| background: var(--nav-callee-hover); |
| color: white; |
| } |
| |
| /* Highlighted target line */ |
| .code-line:target { |
| animation: highlight-line 2s ease-out; |
| } |
| |
| @keyframes highlight-line { |
| 0% { |
| background: rgba(255, 212, 59, 0.6) !important; |
| outline: 3px solid var(--python-gold); |
| outline-offset: -3px; |
| } |
| 50% { |
| background: rgba(255, 212, 59, 0.5) !important; |
| outline: 3px solid var(--python-gold); |
| outline-offset: -3px; |
| } |
| 100% { |
| outline: 3px solid transparent; |
| outline-offset: -3px; |
| } |
| } |
| |
| /* Popup menu for multiple callees */ |
| .callee-menu { |
| position: absolute; |
| background: var(--bg-primary); |
| border: 1px solid var(--border); |
| border-radius: 8px; |
| box-shadow: var(--shadow-lg); |
| padding: 8px; |
| z-index: 1000; |
| min-width: 250px; |
| max-width: 400px; |
| max-height: 300px; |
| overflow-y: auto; |
| } |
| |
| .callee-menu-header { |
| font-weight: 600; |
| color: var(--text-primary); |
| margin-bottom: 8px; |
| padding-bottom: 8px; |
| border-bottom: 1px solid var(--border); |
| font-size: 13px; |
| font-family: var(--font-sans); |
| } |
| |
| .callee-menu-item { |
| padding: 8px; |
| margin: 4px 0; |
| border-radius: 6px; |
| cursor: pointer; |
| transition: background var(--transition-fast); |
| display: flex; |
| flex-direction: column; |
| gap: 4px; |
| } |
| |
| .callee-menu-item:hover { |
| background: var(--bg-secondary); |
| } |
| |
| .callee-menu-func { |
| font-weight: 500; |
| color: var(--accent); |
| font-size: 12px; |
| } |
| |
| .callee-menu-file { |
| font-size: 11px; |
| color: var(--text-muted); |
| } |
| |
| .count-badge { |
| display: inline-block; |
| background: var(--accent); |
| color: white; |
| font-size: 10px; |
| padding: 2px 6px; |
| border-radius: 4px; |
| font-weight: 600; |
| margin-left: 6px; |
| } |
| |
| /* Callee menu scrollbar */ |
| .callee-menu::-webkit-scrollbar { |
| width: 6px; |
| } |
| |
| .callee-menu::-webkit-scrollbar-track { |
| background: var(--bg-secondary); |
| border-radius: 3px; |
| } |
| |
| .callee-menu::-webkit-scrollbar-thumb { |
| background: var(--border); |
| border-radius: 3px; |
| } |
| |
| /* -------------------------------------------------------------------------- |
| Scroll Minimap Marker |
| -------------------------------------------------------------------------- */ |
| |
| #scroll_marker { |
| position: fixed; |
| z-index: 1000; |
| right: 0; |
| top: 0; |
| width: 12px; |
| height: 100%; |
| background: var(--bg-secondary); |
| border-left: 1px solid var(--border); |
| pointer-events: none; |
| } |
| |
| #scroll_marker .marker { |
| position: absolute; |
| min-height: 3px; |
| width: 100%; |
| pointer-events: none; |
| } |
| |
| #scroll_marker .marker.cold { |
| background: var(--heat-1); |
| } |
| |
| #scroll_marker .marker.cool { |
| background: var(--heat-2); |
| } |
| |
| #scroll_marker .marker.mild { |
| background: var(--heat-3); |
| } |
| |
| #scroll_marker .marker.warm { |
| background: var(--heat-4); |
| } |
| |
| #scroll_marker .marker.hot { |
| background: var(--heat-5); |
| } |
| |
| #scroll_marker .marker.very-hot { |
| background: var(--heat-6); |
| } |
| |
| #scroll_marker .marker.intense { |
| background: var(--heat-7); |
| } |
| |
| #scroll_marker .marker.extreme { |
| background: var(--heat-8); |
| } |
| |
| /* -------------------------------------------------------------------------- |
| Responsive (Heatmap-specific) |
| -------------------------------------------------------------------------- */ |
| |
| @media (max-width: 1100px) { |
| .stats-summary { |
| grid-template-columns: repeat(2, 1fr); |
| } |
| |
| .legend-content { |
| flex-wrap: wrap; |
| justify-content: center; |
| } |
| |
| .legend-controls { |
| margin-left: 0; |
| } |
| } |
| |
| @media (max-width: 900px) { |
| .main-content { |
| padding: 16px; |
| } |
| } |
| |
| @media (max-width: 600px) { |
| .stats-summary { |
| grid-template-columns: 1fr; |
| } |
| |
| .file-stats .stats-grid { |
| grid-template-columns: repeat(2, 1fr); |
| } |
| |
| .legend-content { |
| flex-direction: column; |
| align-items: center; |
| gap: 12px; |
| } |
| |
| .legend-gradient { |
| width: 100%; |
| max-width: none; |
| } |
| |
| .legend-separator { |
| width: 80%; |
| height: 1px; |
| } |
| |
| .legend-controls { |
| flex-direction: column; |
| gap: 12px; |
| } |
| |
| .legend-controls .toggle-switch { |
| justify-content: center; |
| } |
| |
| .legend-controls .toggle-switch .toggle-label:first-child { |
| width: 70px; |
| text-align: right; |
| } |
| |
| .legend-controls .toggle-switch .toggle-label:last-child { |
| width: 90px; |
| text-align: left; |
| } |
| |
| /* Compact code columns on small screens */ |
| .header-line-number, |
| .line-number { |
| width: 40px; |
| } |
| |
| .header-samples-self, |
| .header-samples-cumulative, |
| .line-samples-self, |
| .line-samples-cumulative { |
| width: 55px; |
| font-size: 10px; |
| } |
| |
| /* Adjust padding - headers need vertical, data rows don't */ |
| .header-line-number, |
| .header-samples-self, |
| .header-samples-cumulative { |
| padding: 8px 4px; |
| } |
| |
| .line-number, |
| .line-samples-self, |
| .line-samples-cumulative { |
| padding: 0 4px; |
| } |
| } |
| |
| .bytecode-toggle { |
| flex-shrink: 0; |
| width: 20px; |
| height: 20px; |
| padding: 0; |
| margin: 0 4px; |
| border: none; |
| background: transparent; |
| color: var(--code-accent); |
| cursor: pointer; |
| font-size: 10px; |
| transition: transform var(--transition-fast), color var(--transition-fast); |
| display: inline-flex; |
| align-items: center; |
| justify-content: center; |
| } |
| |
| .bytecode-toggle:hover { |
| color: var(--accent); |
| } |
| |
| .bytecode-spacer { |
| flex-shrink: 0; |
| width: 20px; |
| height: 20px; |
| margin: 0 4px; |
| } |
| |
| .bytecode-panel { |
| margin-left: 90px; |
| padding: 8px 15px; |
| background: var(--bg-secondary); |
| border-left: 3px solid var(--accent); |
| font-family: var(--font-mono); |
| font-size: 12px; |
| margin-bottom: 4px; |
| } |
| |
| /* Specialization summary bar */ |
| .bytecode-spec-summary { |
| display: flex; |
| align-items: center; |
| gap: 8px; |
| padding: 8px 12px; |
| margin-bottom: 10px; |
| border-radius: var(--radius-sm); |
| background: rgba(100, 100, 100, 0.1); |
| } |
| |
| .bytecode-spec-summary .spec-pct { |
| font-size: 1.4em; |
| font-weight: 700; |
| } |
| |
| .bytecode-spec-summary .spec-label { |
| font-weight: 500; |
| text-transform: uppercase; |
| font-size: 0.85em; |
| letter-spacing: 0.5px; |
| } |
| |
| .bytecode-spec-summary .spec-detail { |
| color: var(--text-secondary); |
| font-size: 0.9em; |
| margin-left: auto; |
| } |
| |
| .bytecode-spec-summary.high { |
| background: var(--spec-high-bg); |
| border-left: 3px solid var(--spec-high); |
| } |
| .bytecode-spec-summary.high .spec-pct, |
| .bytecode-spec-summary.high .spec-label { |
| color: var(--spec-high-text); |
| } |
| |
| .bytecode-spec-summary.medium { |
| background: var(--spec-medium-bg); |
| border-left: 3px solid var(--spec-medium); |
| } |
| .bytecode-spec-summary.medium .spec-pct, |
| .bytecode-spec-summary.medium .spec-label { |
| color: var(--spec-medium-text); |
| } |
| |
| .bytecode-spec-summary.low { |
| background: var(--spec-low-bg); |
| border-left: 3px solid var(--spec-low); |
| } |
| .bytecode-spec-summary.low .spec-pct, |
| .bytecode-spec-summary.low .spec-label { |
| color: var(--spec-low-text); |
| } |
| |
| .bytecode-header { |
| display: grid; |
| grid-template-columns: 1fr 80px 80px; |
| gap: 12px; |
| padding: 4px 8px; |
| font-weight: 600; |
| color: var(--text-secondary); |
| border-bottom: 1px solid var(--code-border); |
| margin-bottom: 4px; |
| } |
| |
| .bytecode-expand-all { |
| display: inline-flex; |
| align-items: center; |
| gap: 6px; |
| padding: 6px 12px; |
| background: var(--bg-secondary); |
| border: 1px solid var(--code-border); |
| border-radius: var(--radius-sm); |
| color: var(--text-secondary); |
| font-size: 12px; |
| font-weight: 500; |
| cursor: pointer; |
| transition: all var(--transition-fast); |
| flex-shrink: 0; |
| } |
| |
| .bytecode-expand-all:hover, |
| .bytecode-expand-all.expanded { |
| background: var(--accent); |
| color: white; |
| border-color: var(--accent); |
| } |
| |
| .bytecode-expand-all .expand-icon { |
| font-size: 10px; |
| transition: transform var(--transition-fast); |
| } |
| |
| .bytecode-expand-all.expanded .expand-icon { |
| transform: rotate(90deg); |
| } |
| |
| /* ======================================== |
| INSTRUCTION SPAN HIGHLIGHTING |
| (triggered only from bytecode panel hover) |
| ======================================== */ |
| |
| /* Highlight from bytecode panel hover */ |
| .instr-span.highlight-from-bytecode { |
| outline: 3px solid #ff6b6b !important; |
| background-color: rgba(255, 107, 107, 0.4) !important; |
| border-radius: 2px; |
| } |
| |
| /* Bytecode instruction row */ |
| .bytecode-instruction { |
| display: grid; |
| grid-template-columns: 1fr 80px 80px; |
| gap: 12px; |
| align-items: center; |
| padding: 4px 8px; |
| margin: 2px 0; |
| border-radius: var(--radius-sm); |
| cursor: pointer; |
| transition: background-color var(--transition-fast); |
| } |
| |
| .bytecode-instruction:hover, |
| .bytecode-instruction.highlight { |
| background-color: rgba(55, 118, 171, 0.15); |
| } |
| |
| .bytecode-instruction[data-locations] { |
| cursor: pointer; |
| } |
| |
| .bytecode-instruction[data-locations]:hover { |
| background-color: rgba(255, 107, 107, 0.2); |
| } |
| |
| .bytecode-opname { |
| font-weight: 600; |
| font-family: var(--font-mono); |
| overflow: hidden; |
| text-overflow: ellipsis; |
| white-space: nowrap; |
| } |
| |
| .bytecode-opname.specialized { |
| color: #2e7d32; |
| } |
| |
| [data-theme="dark"] .bytecode-opname.specialized { |
| color: #81c784; |
| } |
| |
| .bytecode-opname .base-op { |
| color: var(--code-text-muted); |
| font-weight: normal; |
| font-size: 0.9em; |
| margin-left: 4px; |
| } |
| |
| .bytecode-samples { |
| text-align: right; |
| font-weight: 600; |
| color: var(--accent); |
| font-family: var(--font-mono); |
| } |
| |
| .bytecode-samples.hot { |
| color: #ff6b6b; |
| } |
| |
| .bytecode-heatbar { |
| width: 60px; |
| height: 12px; |
| background: var(--bg-secondary); |
| border-radius: 2px; |
| overflow: hidden; |
| border: 1px solid var(--code-border); |
| } |
| |
| .bytecode-heatbar-fill { |
| height: 100%; |
| background: linear-gradient(90deg, #00d4ff 0%, #ff6b00 100%); |
| } |
| |
| .specialization-badge { |
| display: inline-block; |
| padding: 1px 6px; |
| font-size: 0.75em; |
| background: #e8f5e9; |
| color: #2e7d32; |
| border-radius: 3px; |
| margin-left: 6px; |
| font-weight: 600; |
| } |
| |
| [data-theme="dark"] .specialization-badge { |
| background: rgba(129, 199, 132, 0.2); |
| color: #81c784; |
| } |
| |
| .bytecode-empty { |
| color: var(--code-text-muted); |
| font-style: italic; |
| padding: 8px; |
| } |
| |
| .bytecode-error { |
| color: #d32f2f; |
| font-style: italic; |
| padding: 8px; |
| } |
| |
| /* ======================================== |
| SPAN TOOLTIPS |
| ======================================== */ |
| |
| .span-tooltip { |
| position: absolute; |
| z-index: 10000; |
| background: var(--bg-primary); |
| color: var(--text-primary); |
| padding: 10px 14px; |
| border-radius: var(--radius-md); |
| border: 1px solid var(--border); |
| font-family: var(--font-sans); |
| font-size: 12px; |
| box-shadow: var(--shadow-lg); |
| pointer-events: none; |
| min-width: 160px; |
| max-width: 300px; |
| } |
| |
| .span-tooltip::after { |
| content: ''; |
| position: absolute; |
| bottom: -7px; |
| left: 50%; |
| transform: translateX(-50%); |
| border-width: 7px 7px 0; |
| border-style: solid; |
| border-color: var(--bg-primary) transparent transparent; |
| filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.1)); |
| } |
| |
| .span-tooltip-header { |
| font-weight: 600; |
| margin-bottom: 8px; |
| padding-bottom: 6px; |
| border-bottom: 1px solid var(--border); |
| color: var(--text-primary); |
| } |
| |
| .span-tooltip-header.hot { |
| color: #e65100; |
| } |
| |
| .span-tooltip-header.warm { |
| color: #f59e0b; |
| } |
| |
| .span-tooltip-header.cold { |
| color: var(--text-muted); |
| } |
| |
| .span-tooltip-row { |
| display: flex; |
| justify-content: space-between; |
| margin: 4px 0; |
| gap: 16px; |
| } |
| |
| .span-tooltip-label { |
| color: var(--text-secondary); |
| } |
| |
| .span-tooltip-value { |
| font-weight: 600; |
| text-align: right; |
| color: var(--text-primary); |
| } |
| |
| .span-tooltip-value.highlight { |
| color: var(--accent); |
| } |
| |
| .span-tooltip-section { |
| font-weight: 600; |
| color: var(--text-secondary); |
| font-size: 11px; |
| margin-top: 8px; |
| margin-bottom: 4px; |
| padding-top: 6px; |
| border-top: 1px solid var(--border); |
| } |
| |
| .span-tooltip-opcode { |
| font-family: var(--font-mono); |
| font-size: 11px; |
| color: var(--text-primary); |
| background: var(--bg-secondary); |
| padding: 3px 8px; |
| margin: 2px 0; |
| border-radius: var(--radius-sm); |
| border-left: 2px solid var(--accent); |
| } |
| |
| </style> |
| </head> |
| <body class="code-view"> |
| <div class="app-layout"> |
| <!-- Top Bar (Code Header) --> |
| <header class="top-bar"> |
| <div class="brand"> |
| <div class="brand-logo"><img src="data:image/png;base64,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" alt="Tachyon logo" class="python-logo"/></div> |
| <a href="https://docs.python.org/3.15/library/profiling.sampling.html#heatmap-format" class="brand-text">Tachyon</a> |
| <span class="brand-divider"></span> |
| <span class="brand-subtitle" style="font-family: var(--font-mono); font-size: 13px;">/tmp/tachyon_selfcontained.py</span> |
| </div> |
| <div class="toolbar"> |
| <a href="https://docs.python.org/3.15/library/profiling.sampling.html#heatmap-format" class="toolbar-btn" title="Back to Index" aria-label="Back to Index"> |
| <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"> |
| <path d="M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z"/> |
| </svg> |
| </a> |
| <a |
| class="toolbar-btn" |
| href="https://docs.python.org/3.15/library/profiling.sampling.html" |
| target="_blank" |
| title="Documentation" |
| > |
| <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"> |
| <path d="M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783"/> |
| </svg> |
| </a> |
| <button |
| class="toolbar-btn theme-toggle" |
| onclick="toggleTheme()" |
| title="Toggle theme" |
| aria-label="Toggle theme" |
| id="theme-btn" |
| > |
| <svg class="icon-moon" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"> |
| <path d="M6 .278a.77.77 0 0 1 .08.858 7.2 7.2 0 0 0-.878 3.46c0 4.021 3.278 7.277 7.318 7.277q.792-.001 1.533-.16a.79.79 0 0 1 .81.316.73.73 0 0 1-.031.893A8.35 8.35 0 0 1 8.344 16C3.734 16 0 12.286 0 7.71 0 4.266 2.114 1.312 5.124.06A.75.75 0 0 1 6 .278M4.858 1.311A7.27 7.27 0 0 0 1.025 7.71c0 4.02 3.279 7.276 7.319 7.276a7.32 7.32 0 0 0 5.205-2.162q-.506.063-1.029.063c-4.61 0-8.343-3.714-8.343-8.29 0-1.167.242-2.278.681-3.286"/> |
| </svg> |
| <svg class="icon-sun" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16" style="display:none"> |
| <path d="M8 11a3 3 0 1 1 0-6 3 3 0 0 1 0 6m0 1a4 4 0 1 0 0-8 4 4 0 0 0 0 8M8 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 0m0 13a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 13m8-5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2a.5.5 0 0 1 .5.5M3 8a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2A.5.5 0 0 1 3 8m10.657-5.657a.5.5 0 0 1 0 .707l-1.414 1.415a.5.5 0 1 1-.707-.708l1.414-1.414a.5.5 0 0 1 .707 0m-9.193 9.193a.5.5 0 0 1 0 .707L3.05 13.657a.5.5 0 0 1-.707-.707l1.414-1.414a.5.5 0 0 1 .707 0m9.193 2.121a.5.5 0 0 1-.707 0l-1.414-1.414a.5.5 0 0 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707M4.464 4.465a.5.5 0 0 1-.707 0L2.343 3.05a.5.5 0 1 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .708"/> |
| </svg> |
| </button> |
| </div> |
| </header> |
| |
| <!-- File Stats Bar --> |
| <div class="file-stats"> |
| <div class="stats-grid"> |
| <div class="stat-item"> |
| <div class="stat-value">1,054</div> |
| <div class="stat-label">Self Samples</div> |
| </div> |
| <div class="stat-item"> |
| <div class="stat-value">4,236</div> |
| <div class="stat-label">Cumulative</div> |
| </div> |
| <div class="stat-item"> |
| <div class="stat-value">24</div> |
| <div class="stat-label">Lines Hit</div> |
| </div> |
| <div class="stat-item"> |
| <div class="stat-value">100.00%</div> |
| <div class="stat-label">% of Total</div> |
| </div> |
| <div class="stat-item"> |
| <div class="stat-value">206</div> |
| <div class="stat-label">Max Self</div> |
| </div> |
| <div class="stat-item"> |
| <div class="stat-value">1054</div> |
| <div class="stat-label">Max Total</div> |
| </div> |
| </div> |
| </div> |
| |
| <!-- Legend --> |
| <div class="legend"> |
| <div class="legend-content"> |
| <span class="legend-title">Intensity:</span> |
| <div class="legend-gradient"></div> |
| <div class="legend-labels"> |
| <span>Cold</span> |
| <span aria-hidden="true">→</span> |
| <span>Hot</span> |
| </div> |
| <div class="legend-separator" aria-hidden="true"></div> |
| <div class="legend-controls"> |
| <div class="toggle-switch" id="toggle-color-mode" title="Toggle between self time and total time coloring" tabindex="0"> |
| <span class="toggle-label active" data-text="Self Time">Self Time</span> |
| <div class="toggle-track"></div> |
| <span class="toggle-label" data-text="Total Time">Total Time</span> |
| </div> |
| <div class="toggle-switch" id="toggle-cold" title="Toggle visibility of lines with zero samples" tabindex="0"> |
| <span class="toggle-label active" data-text="Show All">Show All</span> |
| <div class="toggle-track"></div> |
| <span class="toggle-label" data-text="Hot Only">Hot Only</span> |
| </div> |
| <div class="toggle-switch" id="toggle-spec-view" title="Color lines by specialization level (requires bytecode data)" tabindex="0"> |
| <span class="toggle-label active" data-text="Heat">Heat</span> |
| <div class="toggle-track"></div> |
| <span class="toggle-label" data-text="Specialization">Specialization</span> |
| </div> |
| <div class="legend-separator" aria-hidden="true"></div> |
| <button class="bytecode-expand-all" id="toggle-all-bytecode" title="Expand/collapse all bytecode panels (keyboard: b)"> |
| <span class="expand-icon" aria-hidden="true">â–¶</span> Bytecode |
| </button> |
| </div> |
| </div> |
| </div> |
| |
| <!-- Code Container --> |
| <div class="code-container"> |
| <div class="code-header-row"> |
| <div class="header-line-number">Line</div> |
| <div class="header-samples-self">Self</div> |
| <div class="header-samples-cumulative">Total</div> |
| <div class="header-content">Code</div> |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-1"> |
| <div class="line-number">1</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content">"""</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-2"> |
| <div class="line-number">2</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content">Tachyon Demo - Self-contained profiling example.</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-3"> |
| <div class="line-number">3</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content">Pure Python with no external imports for clean heatmap output.</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-4"> |
| <div class="line-number">4</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content">"""</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-5"> |
| <div class="line-number">5</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-6"> |
| <div class="line-number">6</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.130" data-cumulative-intensity="0.100" data-spec-color="rgba(0, 255, 0, 0.4)" id="line-7" title="Self: 1, Total: 1"> |
| <div class="line-number">7</div> |
| <div class="line-samples-self">1</div> |
| <div class="line-samples-cumulative">1</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 194, "opname": "RESUME_CHECK (RESUME)", "base_opname": "RESUME", "is_specialized": true, "samples": 1, "locations": [{"end_lineno": 7, "col_offset": 0, "end_col_offset": 0}]}]' data-spec-pct="100" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content">def fibonacci(n):</div> |
| |
| </div> |
| <div class="bytecode-panel" id="bytecode-7" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-8"> |
| <div class="line-number">8</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> """Recursive fibonacci - creates deep call stacks."""</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.260" data-cumulative-intensity="0.199" data-spec-color="rgba(222, 172, 86, 0.23249999999999998)" id="line-9" title="Self: 3, Total: 3"> |
| <div class="line-number">9</div> |
| <div class="line-samples-self">3</div> |
| <div class="line-samples-cumulative">3</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 86, "opname": "LOAD_FAST_BORROW", "base_opname": "LOAD_FAST_BORROW", "is_specialized": false, "samples": 1, "locations": [{"end_lineno": 9, "col_offset": 7, "end_col_offset": 8}]}, {"opcode": 100, "opname": "POP_JUMP_IF_FALSE", "base_opname": "POP_JUMP_IF_FALSE", "is_specialized": false, "samples": 1, "locations": [{"end_lineno": 9, "col_offset": 7, "end_col_offset": 13}]}, {"opcode": 167, "opname": "COMPARE_OP_INT (COMPARE_OP)", "base_opname": "COMPARE_OP", "is_specialized": true, "samples": 1, "locations": [{"end_lineno": 9, "col_offset": 7, "end_col_offset": 13}]}]' data-spec-pct="33" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> if <span class="instr-span" data-col-start="7" data-col-end="8" data-samples="1" data-max-samples="2" data-pct="33" data-opcodes="LOAD_FAST_BORROW">n</span><span class="instr-span" data-col-start="7" data-col-end="13" data-samples="2" data-max-samples="2" data-pct="66" data-opcodes="POP_JUMP_IF_FALSE, COMPARE_OP_INT (COMPARE_OP)"> <= 1</span>:</div> |
| |
| </div> |
| <div class="bytecode-panel" id="bytecode-9" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.542" data-cumulative-intensity="0.415" data-spec-color="rgba(158, 158, 158, 0.15)" id="line-10" title="Self: 17, Total: 17"> |
| <div class="line-number">10</div> |
| <div class="line-samples-self">17</div> |
| <div class="line-samples-cumulative">17</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 35, "opname": "RETURN_VALUE", "base_opname": "RETURN_VALUE", "is_specialized": false, "samples": 17, "locations": [{"end_lineno": 10, "col_offset": 8, "end_col_offset": 16}]}, {"opcode": 86, "opname": "LOAD_FAST_BORROW", "base_opname": "LOAD_FAST_BORROW", "is_specialized": false, "samples": 1, "locations": [{"end_lineno": 10, "col_offset": 15, "end_col_offset": 16}]}]' data-spec-pct="0" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> <span class="instr-span" data-col-start="8" data-col-end="16" data-samples="17" data-max-samples="17" data-pct="94" data-opcodes="RETURN_VALUE">return </span><span class="instr-span" data-col-start="15" data-col-end="16" data-samples="1" data-max-samples="17" data-pct="5" data-opcodes="LOAD_FAST_BORROW">n</span></div> |
| <div class="line-nav-buttons"><button class="nav-btn caller" data-nav-multi='[{"file": "tachyon_selfcontained.py", "func": "fibonacci", "count": 4170, "link": "#line-11"}, {"file": "tachyon_selfcontained.py", "func": "compute_heavy", "count": 227, "link": "#line-78"}]' title="2 callers (4,397 samples)">â–²</button><button class="nav-btn callee" data-nav='{"link": "#line-10", "func": "fibonacci"}' title="Go to callee: fibonacci (1 samples)">â–¼</button></div> |
| </div> |
| <div class="bytecode-panel" id="bytecode-10" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="1.000" data-cumulative-intensity="0.780" data-spec-color="rgba(5, 253, 1, 0.39749999999999996)" id="line-11" title="Self: 206, Total: 227"> |
| <div class="line-number">11</div> |
| <div class="line-samples-self">206</div> |
| <div class="line-samples-cumulative">227</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 161, "opname": "CALL_PY_EXACT_ARGS (CALL)", "base_opname": "CALL", "is_specialized": true, "samples": 4315, "locations": [{"end_lineno": 11, "col_offset": 30, "end_col_offset": 46}, {"end_lineno": 11, "col_offset": 11, "end_col_offset": 27}]}, {"opcode": 35, "opname": "RETURN_VALUE", "base_opname": "RETURN_VALUE", "is_specialized": false, "samples": 32, "locations": [{"end_lineno": 11, "col_offset": 4, "end_col_offset": 46}]}, {"opcode": 191, "opname": "LOAD_GLOBAL_MODULE (LOAD_GLOBAL)", "base_opname": "LOAD_GLOBAL", "is_specialized": true, "samples": 14, "locations": [{"end_lineno": 11, "col_offset": 30, "end_col_offset": 39}, {"end_lineno": 11, "col_offset": 11, "end_col_offset": 20}]}, {"opcode": 86, "opname": "LOAD_FAST_BORROW", "base_opname": "LOAD_FAST_BORROW", "is_specialized": false, "samples": 8, "locations": [{"end_lineno": 11, "col_offset": 21, "end_col_offset": 22}]}, {"opcode": 142, "opname": "BINARY_OP_SUBTRACT_INT (BINARY_OP)", "base_opname": "BINARY_OP", "is_specialized": true, "samples": 4, "locations": [{"end_lineno": 11, "col_offset": 21, "end_col_offset": 26}, {"end_lineno": 11, "col_offset": 40, "end_col_offset": 45}]}, {"opcode": 130, "opname": "BINARY_OP_ADD_INT (BINARY_OP)", "base_opname": "BINARY_OP", "is_specialized": true, "samples": 2, "locations": [{"end_lineno": 11, "col_offset": 11, "end_col_offset": 46}]}, {"opcode": 94, "opname": "LOAD_SMALL_INT", "base_opname": "LOAD_SMALL_INT", "is_specialized": false, "samples": 1, "locations": [{"end_lineno": 11, "col_offset": 25, "end_col_offset": 26}]}]' data-spec-pct="99" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> <span class="instr-span" data-col-start="4" data-col-end="46" data-samples="32" data-max-samples="4315" data-pct="0" data-opcodes="RETURN_VALUE">return </span><span class="instr-span" data-col-start="11" data-col-end="20" data-samples="14" data-max-samples="4315" data-pct="0" data-opcodes="LOAD_GLOBAL_MODULE (LOAD_GLOBAL)">fibonacci</span><span class="instr-span" data-col-start="11" data-col-end="27" data-samples="4315" data-max-samples="4315" data-pct="49" data-opcodes="CALL_PY_EXACT_ARGS (CALL)">(</span><span class="instr-span" data-col-start="21" data-col-end="22" data-samples="8" data-max-samples="4315" data-pct="0" data-opcodes="LOAD_FAST_BORROW">n</span><span class="instr-span" data-col-start="21" data-col-end="26" data-samples="4" data-max-samples="4315" data-pct="0" data-opcodes="BINARY_OP_SUBTRACT_INT (BINARY_OP)"> - </span><span class="instr-span" data-col-start="25" data-col-end="26" data-samples="1" data-max-samples="4315" data-pct="0" data-opcodes="LOAD_SMALL_INT">1</span><span class="instr-span" data-col-start="11" data-col-end="27" data-samples="4315" data-max-samples="4315" data-pct="49" data-opcodes="CALL_PY_EXACT_ARGS (CALL)">)</span><span class="instr-span" data-col-start="11" data-col-end="46" data-samples="2" data-max-samples="4315" data-pct="0" data-opcodes="BINARY_OP_ADD_INT (BINARY_OP)"> + </span><span class="instr-span" data-col-start="30" data-col-end="39" data-samples="14" data-max-samples="4315" data-pct="0" data-opcodes="LOAD_GLOBAL_MODULE (LOAD_GLOBAL)">fibonacci</span><span class="instr-span" data-col-start="30" data-col-end="46" data-samples="4315" data-max-samples="4315" data-pct="49" data-opcodes="CALL_PY_EXACT_ARGS (CALL)">(</span><span class="instr-span" data-col-start="40" data-col-end="45" data-samples="4" data-max-samples="4315" data-pct="0" data-opcodes="BINARY_OP_SUBTRACT_INT (BINARY_OP)">n - 2</span><span class="instr-span" data-col-start="30" data-col-end="46" data-samples="4315" data-max-samples="4315" data-pct="49" data-opcodes="CALL_PY_EXACT_ARGS (CALL)">)</span></div> |
| <div class="line-nav-buttons"><button class="nav-btn callee" data-nav='{"link": "#line-10", "func": "fibonacci"}' title="Go to callee: fibonacci (4,170 samples)">â–¼</button></div> |
| </div> |
| <div class="bytecode-panel" id="bytecode-11" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-12"> |
| <div class="line-number">12</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-13"> |
| <div class="line-number">13</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-14"> |
| <div class="line-number">14</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content">def bubble_sort(arr):</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-15"> |
| <div class="line-number">15</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> """Classic bubble sort - O(n^2) comparison sorting."""</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-16"> |
| <div class="line-number">16</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> n = len(arr)</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-17"> |
| <div class="line-number">17</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> for i in range(n):</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.206" data-cumulative-intensity="0.158" data-spec-color="rgba(255, 180, 50, 0.275)" id="line-18" title="Self: 2, Total: 2"> |
| <div class="line-number">18</div> |
| <div class="line-samples-self">2</div> |
| <div class="line-samples-cumulative">2</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 112, "opname": "STORE_FAST", "base_opname": "STORE_FAST", "is_specialized": false, "samples": 1, "locations": [{"end_lineno": 18, "col_offset": 12, "end_col_offset": 13}]}, {"opcode": 173, "opname": "FOR_ITER_RANGE (FOR_ITER)", "base_opname": "FOR_ITER", "is_specialized": true, "samples": 1, "locations": [{"end_lineno": 18, "col_offset": 17, "end_col_offset": 36}]}]' data-spec-pct="50" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> for <span class="instr-span" data-col-start="12" data-col-end="13" data-samples="1" data-max-samples="1" data-pct="50" data-opcodes="STORE_FAST">j</span> in <span class="instr-span" data-col-start="17" data-col-end="36" data-samples="1" data-max-samples="1" data-pct="50" data-opcodes="FOR_ITER_RANGE (FOR_ITER)">range(0, n - i - 1)</span>:</div> |
| |
| </div> |
| <div class="bytecode-panel" id="bytecode-18" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.412" data-cumulative-intensity="0.316" data-spec-color="rgba(255, 180, 50, 0.275)" id="line-19" title="Self: 8, Total: 8"> |
| <div class="line-number">19</div> |
| <div class="line-samples-self">8</div> |
| <div class="line-samples-cumulative">8</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 167, "opname": "COMPARE_OP_INT (COMPARE_OP)", "base_opname": "COMPARE_OP", "is_specialized": true, "samples": 3, "locations": [{"end_lineno": 19, "col_offset": 15, "end_col_offset": 34}]}, {"opcode": 87, "opname": "LOAD_FAST_BORROW_LOAD_FAST_BORROW", "base_opname": "LOAD_FAST_BORROW_LOAD_FAST_BORROW", "is_specialized": false, "samples": 2, "locations": [{"end_lineno": 19, "col_offset": 24, "end_col_offset": 27}, {"end_lineno": 19, "col_offset": 15, "end_col_offset": 18}]}, {"opcode": 94, "opname": "LOAD_SMALL_INT", "base_opname": "LOAD_SMALL_INT", "is_specialized": false, "samples": 2, "locations": [{"end_lineno": 19, "col_offset": 32, "end_col_offset": 33}]}, {"opcode": 137, "opname": "BINARY_OP_SUBSCR_LIST_INT (BINARY_OP)", "base_opname": "BINARY_OP", "is_specialized": true, "samples": 1, "locations": [{"end_lineno": 19, "col_offset": 15, "end_col_offset": 21}]}]' data-spec-pct="50" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> if <span class="instr-span" data-col-start="15" data-col-end="18" data-samples="2" data-max-samples="3" data-pct="20" data-opcodes="LOAD_FAST_BORROW_LOAD_FAST_BORROW">arr</span><span class="instr-span" data-col-start="15" data-col-end="21" data-samples="1" data-max-samples="3" data-pct="10" data-opcodes="BINARY_OP_SUBSCR_LIST_INT (BINARY_OP)">[j]</span><span class="instr-span" data-col-start="15" data-col-end="34" data-samples="3" data-max-samples="3" data-pct="30" data-opcodes="COMPARE_OP_INT (COMPARE_OP)"> > </span><span class="instr-span" data-col-start="24" data-col-end="27" data-samples="2" data-max-samples="3" data-pct="20" data-opcodes="LOAD_FAST_BORROW_LOAD_FAST_BORROW">arr</span><span class="instr-span" data-col-start="15" data-col-end="34" data-samples="3" data-max-samples="3" data-pct="30" data-opcodes="COMPARE_OP_INT (COMPARE_OP)">[j + </span><span class="instr-span" data-col-start="32" data-col-end="33" data-samples="2" data-max-samples="3" data-pct="20" data-opcodes="LOAD_SMALL_INT">1</span><span class="instr-span" data-col-start="15" data-col-end="34" data-samples="3" data-max-samples="3" data-pct="30" data-opcodes="COMPARE_OP_INT (COMPARE_OP)">]</span>:</div> |
| <div class="line-nav-buttons"><button class="nav-btn caller" data-nav='{"link": "#line-90", "func": "data_processing"}' title="Go to caller: data_processing (12 samples)">â–²</button></div> |
| </div> |
| <div class="bytecode-panel" id="bytecode-19" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.206" data-cumulative-intensity="0.158" data-spec-color="rgba(0, 255, 0, 0.4)" id="line-20" title="Self: 2, Total: 2"> |
| <div class="line-number">20</div> |
| <div class="line-samples-self">2</div> |
| <div class="line-samples-cumulative">2</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 137, "opname": "BINARY_OP_SUBSCR_LIST_INT (BINARY_OP)", "base_opname": "BINARY_OP", "is_specialized": true, "samples": 2, "locations": [{"end_lineno": 20, "col_offset": 37, "end_col_offset": 47}]}]' data-spec-pct="100" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> arr[j], arr[j + 1] = <span class="instr-span" data-col-start="37" data-col-end="47" data-samples="2" data-max-samples="2" data-pct="100" data-opcodes="BINARY_OP_SUBSCR_LIST_INT (BINARY_OP)">arr[j + 1]</span>, arr[j]</div> |
| |
| </div> |
| <div class="bytecode-panel" id="bytecode-20" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-21"> |
| <div class="line-number">21</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> return arr</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-22"> |
| <div class="line-number">22</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-23"> |
| <div class="line-number">23</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-24"> |
| <div class="line-number">24</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content">def matrix_multiply(a, b):</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-25"> |
| <div class="line-number">25</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> """Matrix multiplication using nested loops."""</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-26"> |
| <div class="line-number">26</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> rows_a, cols_a = len(a), len(a[0])</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-27"> |
| <div class="line-number">27</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> rows_b, cols_b = len(b), len(b[0])</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-28"> |
| <div class="line-number">28</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> result = [[0] * cols_b for _ in range(rows_a)]</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-29"> |
| <div class="line-number">29</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-30"> |
| <div class="line-number">30</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> for i in range(rows_a):</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-31"> |
| <div class="line-number">31</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> for j in range(cols_b):</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.412" data-cumulative-intensity="0.316" data-spec-color="rgba(229, 174, 78, 0.2425)" id="line-32" title="Self: 8, Total: 8"> |
| <div class="line-number">32</div> |
| <div class="line-samples-self">8</div> |
| <div class="line-samples-cumulative">8</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 112, "opname": "STORE_FAST", "base_opname": "STORE_FAST", "is_specialized": false, "samples": 5, "locations": [{"end_lineno": 32, "col_offset": 16, "end_col_offset": 17}]}, {"opcode": 173, "opname": "FOR_ITER_RANGE (FOR_ITER)", "base_opname": "FOR_ITER", "is_specialized": true, "samples": 3, "locations": [{"end_lineno": 32, "col_offset": 21, "end_col_offset": 34}]}]' data-spec-pct="37" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> for <span class="instr-span" data-col-start="16" data-col-end="17" data-samples="5" data-max-samples="5" data-pct="62" data-opcodes="STORE_FAST">k</span> in <span class="instr-span" data-col-start="21" data-col-end="34" data-samples="3" data-max-samples="5" data-pct="37" data-opcodes="FOR_ITER_RANGE (FOR_ITER)">range(cols_a)</span>:</div> |
| |
| </div> |
| <div class="bytecode-panel" id="bytecode-32" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.777" data-cumulative-intensity="0.595" data-spec-color="rgba(117, 220, 23, 0.3425)" id="line-33" title="Self: 62, Total: 62"> |
| <div class="line-number">33</div> |
| <div class="line-samples-self">62</div> |
| <div class="line-samples-cumulative">62</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 137, "opname": "BINARY_OP_SUBSCR_LIST_INT (BINARY_OP)", "base_opname": "BINARY_OP", "is_specialized": true, "samples": 26, "locations": [{"end_lineno": 33, "col_offset": 42, "end_col_offset": 46}, {"end_lineno": 33, "col_offset": 42, "end_col_offset": 49}, {"end_lineno": 33, "col_offset": 32, "end_col_offset": 36}, {"end_lineno": 33, "col_offset": 32, "end_col_offset": 39}, {"end_lineno": 33, "col_offset": 16, "end_col_offset": 28}]}, {"opcode": 130, "opname": "BINARY_OP_ADD_INT (BINARY_OP)", "base_opname": "BINARY_OP", "is_specialized": true, "samples": 11, "locations": [{"end_lineno": 33, "col_offset": 16, "end_col_offset": 49}]}, {"opcode": 134, "opname": "BINARY_OP_MULTIPLY_INT (BINARY_OP)", "base_opname": "BINARY_OP", "is_specialized": true, "samples": 8, "locations": [{"end_lineno": 33, "col_offset": 32, "end_col_offset": 49}]}, {"opcode": 117, "opname": "SWAP", "base_opname": "SWAP", "is_specialized": false, "samples": 5, "locations": [{"end_lineno": 33, "col_offset": 16, "end_col_offset": 28}]}, {"opcode": 59, "opname": "COPY", "base_opname": "COPY", "is_specialized": false, "samples": 4, "locations": [{"end_lineno": 33, "col_offset": 16, "end_col_offset": 28}]}, {"opcode": 86, "opname": "LOAD_FAST_BORROW", "base_opname": "LOAD_FAST_BORROW", "is_specialized": false, "samples": 3, "locations": [{"end_lineno": 33, "col_offset": 37, "end_col_offset": 38}, {"end_lineno": 33, "col_offset": 47, "end_col_offset": 48}]}, {"opcode": 87, "opname": "LOAD_FAST_BORROW_LOAD_FAST_BORROW", "base_opname": "LOAD_FAST_BORROW_LOAD_FAST_BORROW", "is_specialized": false, "samples": 2, "locations": [{"end_lineno": 33, "col_offset": 42, "end_col_offset": 43}, {"end_lineno": 33, "col_offset": 32, "end_col_offset": 33}]}, {"opcode": 200, "opname": "STORE_SUBSCR_LIST_INT (STORE_SUBSCR)", "base_opname": "STORE_SUBSCR", "is_specialized": true, "samples": 2, "locations": [{"end_lineno": 33, "col_offset": 16, "end_col_offset": 28}]}, {"opcode": 176, "opname": "JUMP_BACKWARD_NO_JIT (JUMP_BACKWARD)", "base_opname": "JUMP_BACKWARD", "is_specialized": true, "samples": 1, "locations": [{"end_lineno": 33, "col_offset": 16, "end_col_offset": 28}]}]' data-spec-pct="77" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> <span class="instr-span" data-col-start="16" data-col-end="28" data-samples="38" data-max-samples="38" data-pct="22" data-opcodes="BINARY_OP_SUBSCR_LIST_INT (BINARY_OP), SWAP, COPY +2 more">result[i][j]</span><span class="instr-span" data-col-start="16" data-col-end="49" data-samples="11" data-max-samples="38" data-pct="6" data-opcodes="BINARY_OP_ADD_INT (BINARY_OP)"> += </span><span class="instr-span" data-col-start="32" data-col-end="33" data-samples="2" data-max-samples="38" data-pct="1" data-opcodes="LOAD_FAST_BORROW_LOAD_FAST_BORROW">a</span><span class="instr-span" data-col-start="32" data-col-end="36" data-samples="26" data-max-samples="38" data-pct="15" data-opcodes="BINARY_OP_SUBSCR_LIST_INT (BINARY_OP)">[i]</span><span class="instr-span" data-col-start="32" data-col-end="39" data-samples="26" data-max-samples="38" data-pct="15" data-opcodes="BINARY_OP_SUBSCR_LIST_INT (BINARY_OP)">[</span><span class="instr-span" data-col-start="37" data-col-end="38" data-samples="3" data-max-samples="38" data-pct="1" data-opcodes="LOAD_FAST_BORROW">k</span><span class="instr-span" data-col-start="32" data-col-end="39" data-samples="26" data-max-samples="38" data-pct="15" data-opcodes="BINARY_OP_SUBSCR_LIST_INT (BINARY_OP)">]</span><span class="instr-span" data-col-start="32" data-col-end="49" data-samples="8" data-max-samples="38" data-pct="4" data-opcodes="BINARY_OP_MULTIPLY_INT (BINARY_OP)"> * </span><span class="instr-span" data-col-start="42" data-col-end="43" data-samples="2" data-max-samples="38" data-pct="1" data-opcodes="LOAD_FAST_BORROW_LOAD_FAST_BORROW">b</span><span class="instr-span" data-col-start="42" data-col-end="46" data-samples="26" data-max-samples="38" data-pct="15" data-opcodes="BINARY_OP_SUBSCR_LIST_INT (BINARY_OP)">[k]</span><span class="instr-span" data-col-start="42" data-col-end="49" data-samples="26" data-max-samples="38" data-pct="15" data-opcodes="BINARY_OP_SUBSCR_LIST_INT (BINARY_OP)">[</span><span class="instr-span" data-col-start="47" data-col-end="48" data-samples="3" data-max-samples="38" data-pct="1" data-opcodes="LOAD_FAST_BORROW">j</span><span class="instr-span" data-col-start="42" data-col-end="49" data-samples="26" data-max-samples="38" data-pct="15" data-opcodes="BINARY_OP_SUBSCR_LIST_INT (BINARY_OP)">]</span></div> |
| <div class="line-nav-buttons"><button class="nav-btn caller" data-nav='{"link": "#line-78", "func": "compute_heavy"}' title="Go to caller: compute_heavy (70 samples)">â–²</button></div> |
| </div> |
| <div class="bytecode-panel" id="bytecode-33" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-34"> |
| <div class="line-number">34</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> return result</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-35"> |
| <div class="line-number">35</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-36"> |
| <div class="line-number">36</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-37"> |
| <div class="line-number">37</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content">def prime_sieve(limit):</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-38"> |
| <div class="line-number">38</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> """Sieve of Eratosthenes - find all primes up to limit."""</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-39"> |
| <div class="line-number">39</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> is_prime = [True] * (limit + 1)</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-40"> |
| <div class="line-number">40</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> is_prime[0] = is_prime[1] = False</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-41"> |
| <div class="line-number">41</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-42"> |
| <div class="line-number">42</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> for num in range(2, int(limit ** 0.5) + 1):</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-43"> |
| <div class="line-number">43</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> if is_prime[num]:</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.130" data-cumulative-intensity="0.100" data-spec-color="rgba(0, 255, 0, 0.4)" id="line-44" title="Self: 1, Total: 1"> |
| <div class="line-number">44</div> |
| <div class="line-samples-self">1</div> |
| <div class="line-samples-cumulative">1</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 173, "opname": "FOR_ITER_RANGE (FOR_ITER)", "base_opname": "FOR_ITER", "is_specialized": true, "samples": 1, "locations": [{"end_lineno": 44, "col_offset": 28, "end_col_offset": 60}]}]' data-spec-pct="100" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> for multiple in <span class="instr-span" data-col-start="28" data-col-end="60" data-samples="1" data-max-samples="1" data-pct="100" data-opcodes="FOR_ITER_RANGE (FOR_ITER)">range(num * num, limit + 1, num)</span>:</div> |
| <div class="line-nav-buttons"><button class="nav-btn caller" data-nav='{"link": "#line-78", "func": "compute_heavy"}' title="Go to caller: compute_heavy (3 samples)">â–²</button></div> |
| </div> |
| <div class="bytecode-panel" id="bytecode-44" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-45"> |
| <div class="line-number">45</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> is_prime[multiple] = False</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-46"> |
| <div class="line-number">46</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.206" data-cumulative-intensity="0.158" data-spec-color="rgba(158, 158, 158, 0.15)" id="line-47" title="Self: 2, Total: 2"> |
| <div class="line-number">47</div> |
| <div class="line-samples-self">2</div> |
| <div class="line-samples-cumulative">2</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 70, "opname": "FOR_ITER", "base_opname": "FOR_ITER", "is_specialized": false, "samples": 2, "locations": [{"end_lineno": 47, "col_offset": 34, "end_col_offset": 53}]}]' data-spec-pct="0" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> return [num for num, prime in <span class="instr-span" data-col-start="34" data-col-end="53" data-samples="2" data-max-samples="2" data-pct="100" data-opcodes="FOR_ITER">enumerate(is_prime)</span> if prime]</div> |
| |
| </div> |
| <div class="bytecode-panel" id="bytecode-47" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-48"> |
| <div class="line-number">48</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-49"> |
| <div class="line-number">49</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-50"> |
| <div class="line-number">50</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content">def string_processing(iterations):</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-51"> |
| <div class="line-number">51</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> """String operations - concatenation and formatting."""</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-52"> |
| <div class="line-number">52</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> for _ in range(iterations):</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-53"> |
| <div class="line-number">53</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> result = ""</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-54"> |
| <div class="line-number">54</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> for i in range(50):</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.848" data-cumulative-intensity="0.650" data-spec-color="rgba(239, 176, 67, 0.255)" id="line-55" title="Self: 91, Total: 91"> |
| <div class="line-number">55</div> |
| <div class="line-samples-self">91</div> |
| <div class="line-samples-cumulative">91</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 3, "opname": "BINARY_OP_INPLACE_ADD_UNICODE (BINARY_OP)", "base_opname": "BINARY_OP", "is_specialized": true, "samples": 39, "locations": [{"end_lineno": 55, "col_offset": 12, "end_col_offset": 34}]}, {"opcode": 12, "opname": "FORMAT_SIMPLE", "base_opname": "FORMAT_SIMPLE", "is_specialized": false, "samples": 32, "locations": [{"end_lineno": 55, "col_offset": 29, "end_col_offset": 32}]}, {"opcode": 50, "opname": "BUILD_STRING", "base_opname": "BUILD_STRING", "is_specialized": false, "samples": 15, "locations": [{"end_lineno": 55, "col_offset": 22, "end_col_offset": 34}]}, {"opcode": 82, "opname": "LOAD_CONST", "base_opname": "LOAD_CONST", "is_specialized": false, "samples": 4, "locations": [{"end_lineno": 55, "col_offset": 24, "end_col_offset": 29}, {"end_lineno": 55, "col_offset": 32, "end_col_offset": 33}]}, {"opcode": 86, "opname": "LOAD_FAST_BORROW", "base_opname": "LOAD_FAST_BORROW", "is_specialized": false, "samples": 1, "locations": [{"end_lineno": 55, "col_offset": 12, "end_col_offset": 18}]}]' data-spec-pct="42" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> <span class="instr-span" data-col-start="12" data-col-end="18" data-samples="1" data-max-samples="39" data-pct="1" data-opcodes="LOAD_FAST_BORROW">result</span><span class="instr-span" data-col-start="12" data-col-end="34" data-samples="39" data-max-samples="39" data-pct="41" data-opcodes="BINARY_OP_INPLACE_ADD_UNICODE (BINARY_OP)"> += </span><span class="instr-span" data-col-start="22" data-col-end="34" data-samples="15" data-max-samples="39" data-pct="15" data-opcodes="BUILD_STRING">f"</span><span class="instr-span" data-col-start="24" data-col-end="29" data-samples="4" data-max-samples="39" data-pct="4" data-opcodes="LOAD_CONST">item_</span><span class="instr-span" data-col-start="29" data-col-end="32" data-samples="32" data-max-samples="39" data-pct="33" data-opcodes="FORMAT_SIMPLE">{i}</span><span class="instr-span" data-col-start="32" data-col-end="33" data-samples="4" data-max-samples="39" data-pct="4" data-opcodes="LOAD_CONST">_</span><span class="instr-span" data-col-start="22" data-col-end="34" data-samples="15" data-max-samples="39" data-pct="15" data-opcodes="BUILD_STRING">"</span></div> |
| <div class="line-nav-buttons"><button class="nav-btn caller" data-nav='{"link": "#line-90", "func": "data_processing"}' title="Go to caller: data_processing (123 samples)">â–²</button></div> |
| </div> |
| <div class="bytecode-panel" id="bytecode-55" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.588" data-cumulative-intensity="0.450" data-spec-color="rgba(163, 207, 31, 0.32)" id="line-56" title="Self: 22, Total: 22"> |
| <div class="line-number">56</div> |
| <div class="line-samples-self">22</div> |
| <div class="line-samples-cumulative">22</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 157, "opname": "CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS (CALL)", "base_opname": "CALL", "is_specialized": true, "samples": 15, "locations": [{"end_lineno": 56, "col_offset": 16, "end_col_offset": 33}]}, {"opcode": 112, "opname": "STORE_FAST", "base_opname": "STORE_FAST", "is_specialized": false, "samples": 7, "locations": [{"end_lineno": 56, "col_offset": 8, "end_col_offset": 13}]}]' data-spec-pct="68" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> <span class="instr-span" data-col-start="8" data-col-end="13" data-samples="7" data-max-samples="15" data-pct="31" data-opcodes="STORE_FAST">parts</span> = <span class="instr-span" data-col-start="16" data-col-end="33" data-samples="15" data-max-samples="15" data-pct="68" data-opcodes="CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS (CALL)">result.split("_")</span></div> |
| |
| </div> |
| <div class="bytecode-panel" id="bytecode-56" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.450" data-cumulative-intensity="0.344" data-spec-color="rgba(0, 255, 0, 0.4)" id="line-57" title="Self: 10, Total: 10"> |
| <div class="line-number">57</div> |
| <div class="line-samples-self">10</div> |
| <div class="line-samples-cumulative">10</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 159, "opname": "CALL_METHOD_DESCRIPTOR_O (CALL)", "base_opname": "CALL", "is_specialized": true, "samples": 10, "locations": [{"end_lineno": 57, "col_offset": 17, "end_col_offset": 32}]}]' data-spec-pct="100" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> joined = <span class="instr-span" data-col-start="17" data-col-end="32" data-samples="10" data-max-samples="10" data-pct="100" data-opcodes="CALL_METHOD_DESCRIPTOR_O (CALL)">"-".join(parts)</span></div> |
| |
| </div> |
| <div class="bytecode-panel" id="bytecode-57" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-58"> |
| <div class="line-number">58</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-59"> |
| <div class="line-number">59</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-60"> |
| <div class="line-number">60</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content">def list_operations(iterations):</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-61"> |
| <div class="line-number">61</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> """List comprehensions and operations."""</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-62"> |
| <div class="line-number">62</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> for _ in range(iterations):</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.896" data-cumulative-intensity="0.687" data-spec-color="rgba(206, 169, 104, 0.2125)" id="line-63" title="Self: 118, Total: 118"> |
| <div class="line-number">63</div> |
| <div class="line-samples-self">118</div> |
| <div class="line-samples-cumulative">118</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 44, "opname": "BINARY_OP", "base_opname": "BINARY_OP", "is_specialized": false, "samples": 54, "locations": [{"end_lineno": 63, "col_offset": 19, "end_col_offset": 25}]}, {"opcode": 173, "opname": "FOR_ITER_RANGE (FOR_ITER)", "base_opname": "FOR_ITER", "is_specialized": true, "samples": 26, "locations": [{"end_lineno": 63, "col_offset": 35, "end_col_offset": 45}]}, {"opcode": 78, "opname": "LIST_APPEND", "base_opname": "LIST_APPEND", "is_specialized": false, "samples": 13, "locations": [{"end_lineno": 63, "col_offset": 19, "end_col_offset": 25}]}, {"opcode": 112, "opname": "STORE_FAST", "base_opname": "STORE_FAST", "is_specialized": false, "samples": 10, "locations": [{"end_lineno": 63, "col_offset": 8, "end_col_offset": 15}]}, {"opcode": 113, "opname": "STORE_FAST_LOAD_FAST", "base_opname": "STORE_FAST_LOAD_FAST", "is_specialized": false, "samples": 9, "locations": [{"end_lineno": 63, "col_offset": 30, "end_col_offset": 31}]}, {"opcode": 176, "opname": "JUMP_BACKWARD_NO_JIT (JUMP_BACKWARD)", "base_opname": "JUMP_BACKWARD", "is_specialized": true, "samples": 4, "locations": [{"end_lineno": 63, "col_offset": 19, "end_col_offset": 25}]}, {"opcode": 94, "opname": "LOAD_SMALL_INT", "base_opname": "LOAD_SMALL_INT", "is_specialized": false, "samples": 2, "locations": [{"end_lineno": 63, "col_offset": 24, "end_col_offset": 25}]}]' data-spec-pct="25" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> <span class="instr-span" data-col-start="8" data-col-end="15" data-samples="10" data-max-samples="71" data-pct="8" data-opcodes="STORE_FAST">squares</span> = [<span class="instr-span" data-col-start="19" data-col-end="25" data-samples="71" data-max-samples="71" data-pct="60" data-opcodes="BINARY_OP, LIST_APPEND, JUMP_BACKWARD_NO_JIT (JUMP_BACKWARD)">x ** </span><span class="instr-span" data-col-start="24" data-col-end="25" data-samples="2" data-max-samples="71" data-pct="1" data-opcodes="LOAD_SMALL_INT">2</span> for <span class="instr-span" data-col-start="30" data-col-end="31" data-samples="9" data-max-samples="71" data-pct="7" data-opcodes="STORE_FAST_LOAD_FAST">x</span> in <span class="instr-span" data-col-start="35" data-col-end="45" data-samples="26" data-max-samples="71" data-pct="22" data-opcodes="FOR_ITER_RANGE (FOR_ITER)">range(500)</span>]</div> |
| |
| </div> |
| <div class="bytecode-panel" id="bytecode-63" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.898" data-cumulative-intensity="0.688" data-spec-color="rgba(206, 169, 104, 0.2125)" id="line-64" title="Self: 119, Total: 119"> |
| <div class="line-number">64</div> |
| <div class="line-samples-self">119</div> |
| <div class="line-samples-cumulative">119</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 44, "opname": "BINARY_OP", "base_opname": "BINARY_OP", "is_specialized": false, "samples": 48, "locations": [{"end_lineno": 64, "col_offset": 39, "end_col_offset": 44}]}, {"opcode": 167, "opname": "COMPARE_OP_INT (COMPARE_OP)", "base_opname": "COMPARE_OP", "is_specialized": true, "samples": 16, "locations": [{"end_lineno": 64, "col_offset": 39, "end_col_offset": 49}]}, {"opcode": 94, "opname": "LOAD_SMALL_INT", "base_opname": "LOAD_SMALL_INT", "is_specialized": false, "samples": 13, "locations": [{"end_lineno": 64, "col_offset": 43, "end_col_offset": 44}, {"end_lineno": 64, "col_offset": 48, "end_col_offset": 49}]}, {"opcode": 172, "opname": "FOR_ITER_LIST (FOR_ITER)", "base_opname": "FOR_ITER", "is_specialized": true, "samples": 13, "locations": [{"end_lineno": 64, "col_offset": 28, "end_col_offset": 35}]}, {"opcode": 112, "opname": "STORE_FAST", "base_opname": "STORE_FAST", "is_specialized": false, "samples": 12, "locations": [{"end_lineno": 64, "col_offset": 8, "end_col_offset": 13}]}, {"opcode": 113, "opname": "STORE_FAST_LOAD_FAST", "base_opname": "STORE_FAST_LOAD_FAST", "is_specialized": false, "samples": 6, "locations": [{"end_lineno": 64, "col_offset": 23, "end_col_offset": 24}]}, {"opcode": 86, "opname": "LOAD_FAST_BORROW", "base_opname": "LOAD_FAST_BORROW", "is_specialized": false, "samples": 4, "locations": [{"end_lineno": 64, "col_offset": 17, "end_col_offset": 18}]}, {"opcode": 78, "opname": "LIST_APPEND", "base_opname": "LIST_APPEND", "is_specialized": false, "samples": 3, "locations": [{"end_lineno": 64, "col_offset": 17, "end_col_offset": 18}]}, {"opcode": 103, "opname": "POP_JUMP_IF_TRUE", "base_opname": "POP_JUMP_IF_TRUE", "is_specialized": false, "samples": 2, "locations": [{"end_lineno": 64, "col_offset": 17, "end_col_offset": 18}]}, {"opcode": 16, "opname": "GET_ITER", "base_opname": "GET_ITER", "is_specialized": false, "samples": 1, "locations": [{"end_lineno": 64, "col_offset": 28, "end_col_offset": 35}]}, {"opcode": 176, "opname": "JUMP_BACKWARD_NO_JIT (JUMP_BACKWARD)", "base_opname": "JUMP_BACKWARD", "is_specialized": true, "samples": 1, "locations": [{"end_lineno": 64, "col_offset": 17, "end_col_offset": 18}]}]' data-spec-pct="25" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> <span class="instr-span" data-col-start="8" data-col-end="13" data-samples="12" data-max-samples="48" data-pct="9" data-opcodes="STORE_FAST">evens</span> = [<span class="instr-span" data-col-start="17" data-col-end="18" data-samples="10" data-max-samples="48" data-pct="7" data-opcodes="LOAD_FAST_BORROW, LIST_APPEND, POP_JUMP_IF_TRUE +1 more">x</span> for <span class="instr-span" data-col-start="23" data-col-end="24" data-samples="6" data-max-samples="48" data-pct="4" data-opcodes="STORE_FAST_LOAD_FAST">x</span> in <span class="instr-span" data-col-start="28" data-col-end="35" data-samples="14" data-max-samples="48" data-pct="10" data-opcodes="FOR_ITER_LIST (FOR_ITER), GET_ITER">squares</span> if <span class="instr-span" data-col-start="39" data-col-end="44" data-samples="48" data-max-samples="48" data-pct="36" data-opcodes="BINARY_OP">x % </span><span class="instr-span" data-col-start="43" data-col-end="44" data-samples="13" data-max-samples="48" data-pct="9" data-opcodes="LOAD_SMALL_INT">2</span><span class="instr-span" data-col-start="39" data-col-end="49" data-samples="16" data-max-samples="48" data-pct="12" data-opcodes="COMPARE_OP_INT (COMPARE_OP)"> == </span><span class="instr-span" data-col-start="48" data-col-end="49" data-samples="13" data-max-samples="48" data-pct="9" data-opcodes="LOAD_SMALL_INT">0</span>]</div> |
| <div class="line-nav-buttons"><button class="nav-btn caller" data-nav='{"link": "#line-90", "func": "data_processing"}' title="Go to caller: data_processing (249 samples)">â–²</button></div> |
| </div> |
| <div class="bytecode-panel" id="bytecode-64" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.481" data-cumulative-intensity="0.368" data-spec-color="rgba(0, 255, 0, 0.4)" id="line-65" title="Self: 12, Total: 12"> |
| <div class="line-number">65</div> |
| <div class="line-samples-self">12</div> |
| <div class="line-samples-cumulative">12</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 148, "opname": "CALL_BUILTIN_FAST_WITH_KEYWORDS (CALL)", "base_opname": "CALL", "is_specialized": true, "samples": 11, "locations": [{"end_lineno": 65, "col_offset": 16, "end_col_offset": 26}]}, {"opcode": 176, "opname": "JUMP_BACKWARD_NO_JIT (JUMP_BACKWARD)", "base_opname": "JUMP_BACKWARD", "is_specialized": true, "samples": 1, "locations": [{"end_lineno": 65, "col_offset": 8, "end_col_offset": 13}]}]' data-spec-pct="100" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> <span class="instr-span" data-col-start="8" data-col-end="13" data-samples="1" data-max-samples="11" data-pct="8" data-opcodes="JUMP_BACKWARD_NO_JIT (JUMP_BACKWARD)">total</span> = <span class="instr-span" data-col-start="16" data-col-end="26" data-samples="11" data-max-samples="11" data-pct="91" data-opcodes="CALL_BUILTIN_FAST_WITH_KEYWORDS (CALL)">sum(evens)</span></div> |
| |
| </div> |
| <div class="bytecode-panel" id="bytecode-65" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-66"> |
| <div class="line-number">66</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-67"> |
| <div class="line-number">67</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-68"> |
| <div class="line-number">68</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content">def dict_operations(iterations):</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-69"> |
| <div class="line-number">69</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> """Dictionary creation and lookups."""</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-70"> |
| <div class="line-number">70</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> for _ in range(iterations):</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="1.000" data-cumulative-intensity="0.766" data-spec-color="rgba(175, 161, 138, 0.1725)" id="line-71" title="Self: 206, Total: 206"> |
| <div class="line-number">71</div> |
| <div class="line-samples-self">206</div> |
| <div class="line-samples-cumulative">206</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 12, "opname": "FORMAT_SIMPLE", "base_opname": "FORMAT_SIMPLE", "is_specialized": false, "samples": 56, "locations": [{"end_lineno": 71, "col_offset": 22, "end_col_offset": 25}]}, {"opcode": 98, "opname": "MAP_ADD", "base_opname": "MAP_ADD", "is_specialized": false, "samples": 56, "locations": [{"end_lineno": 71, "col_offset": 16, "end_col_offset": 34}]}, {"opcode": 50, "opname": "BUILD_STRING", "base_opname": "BUILD_STRING", "is_specialized": false, "samples": 37, "locations": [{"end_lineno": 71, "col_offset": 16, "end_col_offset": 26}]}, {"opcode": 44, "opname": "BINARY_OP", "base_opname": "BINARY_OP", "is_specialized": false, "samples": 21, "locations": [{"end_lineno": 71, "col_offset": 28, "end_col_offset": 34}]}, {"opcode": 173, "opname": "FOR_ITER_RANGE (FOR_ITER)", "base_opname": "FOR_ITER", "is_specialized": true, "samples": 14, "locations": [{"end_lineno": 71, "col_offset": 44, "end_col_offset": 54}]}, {"opcode": 112, "opname": "STORE_FAST", "base_opname": "STORE_FAST", "is_specialized": false, "samples": 12, "locations": [{"end_lineno": 71, "col_offset": 8, "end_col_offset": 12}]}, {"opcode": 176, "opname": "JUMP_BACKWARD_NO_JIT (JUMP_BACKWARD)", "base_opname": "JUMP_BACKWARD", "is_specialized": true, "samples": 6, "locations": [{"end_lineno": 71, "col_offset": 16, "end_col_offset": 34}]}, {"opcode": 86, "opname": "LOAD_FAST_BORROW", "base_opname": "LOAD_FAST_BORROW", "is_specialized": false, "samples": 3, "locations": [{"end_lineno": 71, "col_offset": 28, "end_col_offset": 29}]}, {"opcode": 82, "opname": "LOAD_CONST", "base_opname": "LOAD_CONST", "is_specialized": false, "samples": 1, "locations": [{"end_lineno": 71, "col_offset": 18, "end_col_offset": 22}]}]' data-spec-pct="9" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> <span class="instr-span" data-col-start="8" data-col-end="12" data-samples="12" data-max-samples="62" data-pct="5" data-opcodes="STORE_FAST">data</span> = {<span class="instr-span" data-col-start="16" data-col-end="26" data-samples="37" data-max-samples="62" data-pct="17" data-opcodes="BUILD_STRING">f"</span><span class="instr-span" data-col-start="18" data-col-end="22" data-samples="1" data-max-samples="62" data-pct="0" data-opcodes="LOAD_CONST">key_</span><span class="instr-span" data-col-start="22" data-col-end="25" data-samples="56" data-max-samples="62" data-pct="27" data-opcodes="FORMAT_SIMPLE">{i}</span><span class="instr-span" data-col-start="16" data-col-end="26" data-samples="37" data-max-samples="62" data-pct="17" data-opcodes="BUILD_STRING">"</span><span class="instr-span" data-col-start="16" data-col-end="34" data-samples="62" data-max-samples="62" data-pct="30" data-opcodes="MAP_ADD, JUMP_BACKWARD_NO_JIT (JUMP_BACKWARD)">: </span><span class="instr-span" data-col-start="28" data-col-end="29" data-samples="3" data-max-samples="62" data-pct="1" data-opcodes="LOAD_FAST_BORROW">i</span><span class="instr-span" data-col-start="28" data-col-end="34" data-samples="21" data-max-samples="62" data-pct="10" data-opcodes="BINARY_OP"> ** 2</span> for i in <span class="instr-span" data-col-start="44" data-col-end="54" data-samples="14" data-max-samples="62" data-pct="6" data-opcodes="FOR_ITER_RANGE (FOR_ITER)">range(200)</span>}</div> |
| <div class="line-nav-buttons"><button class="nav-btn caller" data-nav='{"link": "#line-90", "func": "data_processing"}' title="Go to caller: data_processing (369 samples)">â–²</button></div> |
| </div> |
| <div class="bytecode-panel" id="bytecode-71" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.951" data-cumulative-intensity="0.728" data-spec-color="rgba(223, 172, 84, 0.235)" id="line-72" title="Self: 158, Total: 158"> |
| <div class="line-number">72</div> |
| <div class="line-samples-self">158</div> |
| <div class="line-samples-cumulative">158</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 12, "opname": "FORMAT_SIMPLE", "base_opname": "FORMAT_SIMPLE", "is_specialized": false, "samples": 50, "locations": [{"end_lineno": 72, "col_offset": 29, "end_col_offset": 32}]}, {"opcode": 135, "opname": "BINARY_OP_SUBSCR_DICT (BINARY_OP)", "base_opname": "BINARY_OP", "is_specialized": true, "samples": 50, "locations": [{"end_lineno": 72, "col_offset": 18, "end_col_offset": 34}]}, {"opcode": 50, "opname": "BUILD_STRING", "base_opname": "BUILD_STRING", "is_specialized": false, "samples": 43, "locations": [{"end_lineno": 72, "col_offset": 23, "end_col_offset": 33}]}, {"opcode": 112, "opname": "STORE_FAST", "base_opname": "STORE_FAST", "is_specialized": false, "samples": 4, "locations": [{"end_lineno": 72, "col_offset": 8, "end_col_offset": 14}]}, {"opcode": 113, "opname": "STORE_FAST_LOAD_FAST", "base_opname": "STORE_FAST_LOAD_FAST", "is_specialized": false, "samples": 4, "locations": [{"end_lineno": 72, "col_offset": 39, "end_col_offset": 40}]}, {"opcode": 173, "opname": "FOR_ITER_RANGE (FOR_ITER)", "base_opname": "FOR_ITER", "is_specialized": true, "samples": 4, "locations": [{"end_lineno": 72, "col_offset": 44, "end_col_offset": 54}]}, {"opcode": 78, "opname": "LIST_APPEND", "base_opname": "LIST_APPEND", "is_specialized": false, "samples": 2, "locations": [{"end_lineno": 72, "col_offset": 18, "end_col_offset": 34}]}, {"opcode": 86, "opname": "LOAD_FAST_BORROW", "base_opname": "LOAD_FAST_BORROW", "is_specialized": false, "samples": 1, "locations": [{"end_lineno": 72, "col_offset": 30, "end_col_offset": 31}]}]' data-spec-pct="34" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> <span class="instr-span" data-col-start="8" data-col-end="14" data-samples="4" data-max-samples="52" data-pct="2" data-opcodes="STORE_FAST">values</span> = [<span class="instr-span" data-col-start="18" data-col-end="34" data-samples="52" data-max-samples="52" data-pct="32" data-opcodes="BINARY_OP_SUBSCR_DICT (BINARY_OP), LIST_APPEND">data[</span><span class="instr-span" data-col-start="23" data-col-end="33" data-samples="43" data-max-samples="52" data-pct="27" data-opcodes="BUILD_STRING">f"key_</span><span class="instr-span" data-col-start="29" data-col-end="32" data-samples="50" data-max-samples="52" data-pct="31" data-opcodes="FORMAT_SIMPLE">{</span><span class="instr-span" data-col-start="30" data-col-end="31" data-samples="1" data-max-samples="52" data-pct="0" data-opcodes="LOAD_FAST_BORROW">i</span><span class="instr-span" data-col-start="29" data-col-end="32" data-samples="50" data-max-samples="52" data-pct="31" data-opcodes="FORMAT_SIMPLE">}</span><span class="instr-span" data-col-start="23" data-col-end="33" data-samples="43" data-max-samples="52" data-pct="27" data-opcodes="BUILD_STRING">"</span><span class="instr-span" data-col-start="18" data-col-end="34" data-samples="52" data-max-samples="52" data-pct="32" data-opcodes="BINARY_OP_SUBSCR_DICT (BINARY_OP), LIST_APPEND">]</span> for <span class="instr-span" data-col-start="39" data-col-end="40" data-samples="4" data-max-samples="52" data-pct="2" data-opcodes="STORE_FAST_LOAD_FAST">i</span> in <span class="instr-span" data-col-start="44" data-col-end="54" data-samples="4" data-max-samples="52" data-pct="2" data-opcodes="FOR_ITER_RANGE (FOR_ITER)">range(200)</span>]</div> |
| |
| </div> |
| <div class="bytecode-panel" id="bytecode-72" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.336" data-cumulative-intensity="0.257" data-spec-color="rgba(0, 255, 0, 0.4)" id="line-73" title="Self: 5, Total: 5"> |
| <div class="line-number">73</div> |
| <div class="line-samples-self">5</div> |
| <div class="line-samples-cumulative">5</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 148, "opname": "CALL_BUILTIN_FAST_WITH_KEYWORDS (CALL)", "base_opname": "CALL", "is_specialized": true, "samples": 5, "locations": [{"end_lineno": 73, "col_offset": 16, "end_col_offset": 27}]}]' data-spec-pct="100" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> total = <span class="instr-span" data-col-start="16" data-col-end="27" data-samples="5" data-max-samples="5" data-pct="100" data-opcodes="CALL_BUILTIN_FAST_WITH_KEYWORDS (CALL)">sum(values)</span></div> |
| |
| </div> |
| <div class="bytecode-panel" id="bytecode-73" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-74"> |
| <div class="line-number">74</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-75"> |
| <div class="line-number">75</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-76"> |
| <div class="line-number">76</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content">def compute_heavy():</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-77"> |
| <div class="line-number">77</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> """CPU-intensive computation section."""</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.130" data-cumulative-intensity="0.820" data-spec-color="rgba(158, 158, 158, 0.15)" id="line-78" title="Self: 1, Total: 301"> |
| <div class="line-number">78</div> |
| <div class="line-samples-self">1</div> |
| <div class="line-samples-cumulative">301</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 52, "opname": "CALL", "base_opname": "CALL", "is_specialized": false, "samples": 301, "locations": [{"end_lineno": 78, "col_offset": 4, "end_col_offset": 17}]}]' data-spec-pct="0" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> <span class="instr-span" data-col-start="4" data-col-end="17" data-samples="301" data-max-samples="301" data-pct="100" data-opcodes="CALL">fibonacci(30)</span></div> |
| <div class="line-nav-buttons"><button class="nav-btn caller" data-nav='{"link": "#line-102", "func": "main"}' title="Go to caller: main (301 samples)">â–²</button><button class="nav-btn callee" data-nav-multi='[{"file": "tachyon_selfcontained.py", "func": "fibonacci", "count": 227, "link": "#line-10"}, {"file": "tachyon_selfcontained.py", "func": "matrix_multiply", "count": 70, "link": "#line-33"}, {"file": "tachyon_selfcontained.py", "func": "prime_sieve", "count": 3, "link": "#line-44"}]' title="3 callees (300 samples)">â–¼</button></div> |
| </div> |
| <div class="bytecode-panel" id="bytecode-78" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-79"> |
| <div class="line-number">79</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-80"> |
| <div class="line-number">80</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> size = 60</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-81"> |
| <div class="line-number">81</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> a = [[i + j for j in range(size)] for i in range(size)]</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-82"> |
| <div class="line-number">82</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> b = [[i * j for j in range(size)] for i in range(size)]</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-83"> |
| <div class="line-number">83</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> matrix_multiply(a, b)</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-84"> |
| <div class="line-number">84</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-85"> |
| <div class="line-number">85</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> prime_sieve(10000)</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-86"> |
| <div class="line-number">86</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-87"> |
| <div class="line-number">87</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-88"> |
| <div class="line-number">88</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content">def data_processing():</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-89"> |
| <div class="line-number">89</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> """Data structure operations."""</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.952" data-spec-color="rgba(158, 158, 158, 0.15)" id="line-90" title="Self: 0, Total: 753"> |
| <div class="line-number">90</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative">753</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 52, "opname": "CALL", "base_opname": "CALL", "is_specialized": false, "samples": 753, "locations": [{"end_lineno": 90, "col_offset": 4, "end_col_offset": 27}]}]' data-spec-pct="0" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> <span class="instr-span" data-col-start="4" data-col-end="27" data-samples="753" data-max-samples="753" data-pct="100" data-opcodes="CALL">string_processing(2000)</span></div> |
| <div class="line-nav-buttons"><button class="nav-btn caller" data-nav='{"link": "#line-102", "func": "main"}' title="Go to caller: main (753 samples)">â–²</button><button class="nav-btn callee" data-nav-multi='[{"file": "tachyon_selfcontained.py", "func": "dict_operations", "count": 369, "link": "#line-71"}, {"file": "tachyon_selfcontained.py", "func": "list_operations", "count": 249, "link": "#line-64"}, {"file": "tachyon_selfcontained.py", "func": "string_processing", "count": 123, "link": "#line-55"}, {"file": "tachyon_selfcontained.py", "func": "bubble_sort", "count": 12, "link": "#line-19"}]' title="4 callees (753 samples)">â–¼</button></div> |
| </div> |
| <div class="bytecode-panel" id="bytecode-90" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-91"> |
| <div class="line-number">91</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> list_operations(1500)</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-92"> |
| <div class="line-number">92</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> dict_operations(1000)</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-93"> |
| <div class="line-number">93</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-94"> |
| <div class="line-number">94</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> data = list(range(800))</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-95"> |
| <div class="line-number">95</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> for _ in range(3):</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-96"> |
| <div class="line-number">96</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> data = data[::-1]</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-97"> |
| <div class="line-number">97</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> bubble_sort(data[:200])</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-98"> |
| <div class="line-number">98</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-99"> |
| <div class="line-number">99</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-100"> |
| <div class="line-number">100</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content">def main():</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-101"> |
| <div class="line-number">101</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> """Main entry point."""</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="1.000" data-spec-color="rgba(158, 158, 158, 0.15)" id="line-102" title="Self: 0, Total: 1,054"> |
| <div class="line-number">102</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative">1,054</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 52, "opname": "CALL", "base_opname": "CALL", "is_specialized": false, "samples": 1054, "locations": [{"end_lineno": 102, "col_offset": 4, "end_col_offset": 19}]}]' data-spec-pct="0" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> <span class="instr-span" data-col-start="4" data-col-end="19" data-samples="1054" data-max-samples="1054" data-pct="100" data-opcodes="CALL">compute_heavy()</span></div> |
| <div class="line-nav-buttons"><button class="nav-btn caller" data-nav='{"link": "#line-107", "func": "<module>"}' title="Go to caller: <module> (1,054 samples)">â–²</button><button class="nav-btn callee" data-nav-multi='[{"file": "tachyon_selfcontained.py", "func": "data_processing", "count": 753, "link": "#line-90"}, {"file": "tachyon_selfcontained.py", "func": "compute_heavy", "count": 301, "link": "#line-78"}]' title="2 callees (1,054 samples)">â–¼</button></div> |
| </div> |
| <div class="bytecode-panel" id="bytecode-102" style="display:none;"></div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-103"> |
| <div class="line-number">103</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"> data_processing()</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-104"> |
| <div class="line-number">104</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-105"> |
| <div class="line-number">105</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content"></div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="0.000" id="line-106"> |
| <div class="line-number">106</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative"></div> |
| <div class="bytecode-spacer"></div> |
| <div class="line-content">if __name__ == "__main__":</div> |
| |
| </div> |
| <div class="code-line" data-self-intensity="0.000" data-cumulative-intensity="1.000" data-spec-color="rgba(158, 158, 158, 0.15)" id="line-107" title="Self: 0, Total: 1,054"> |
| <div class="line-number">107</div> |
| <div class="line-samples-self"></div> |
| <div class="line-samples-cumulative">1,054</div> |
| <button class="bytecode-toggle" data-bytecode='[{"opcode": 52, "opname": "CALL", "base_opname": "CALL", "is_specialized": false, "samples": 1054, "locations": [{"end_lineno": 107, "col_offset": 4, "end_col_offset": 10}]}]' data-spec-pct="0" onclick="toggleBytecode(this)" title="Show bytecode">▶</button> |
| <div class="line-content"> <span class="instr-span" data-col-start="4" data-col-end="10" data-samples="1054" data-max-samples="1054" data-pct="100" data-opcodes="CALL">main()</span></div> |
| <div class="line-nav-buttons"><button class="nav-btn callee" data-nav='{"link": "#line-102", "func": "main"}' title="Go to callee: main (1,054 samples)">â–¼</button></div> |
| </div> |
| <div class="bytecode-panel" id="bytecode-107" style="display:none;"></div> |
| |
| </div> |
| </div> |
| |
| <script> |
| // Tachyon Profiler - Shared Heatmap JavaScript |
| // Common utilities shared between index and file views |
| |
| // ============================================================================ |
| // Heat Level Mapping (Single source of truth for intensity thresholds) |
| // ============================================================================ |
| |
| // Maps intensity (0-1) to heat level (0-8). Level 0 = no heat, 1-8 = heat levels. |
| function intensityToHeatLevel(intensity) { |
| if (intensity <= 0) return 0; |
| if (intensity <= 0.125) return 1; |
| if (intensity <= 0.25) return 2; |
| if (intensity <= 0.375) return 3; |
| if (intensity <= 0.5) return 4; |
| if (intensity <= 0.625) return 5; |
| if (intensity <= 0.75) return 6; |
| if (intensity <= 0.875) return 7; |
| return 8; |
| } |
| |
| // Class names corresponding to heat levels 1-8 (used by scroll marker) |
| const HEAT_CLASS_NAMES = ['cold', 'cool', 'mild', 'warm', 'hot', 'very-hot', 'intense', 'extreme']; |
| |
| function intensityToClass(intensity) { |
| const level = intensityToHeatLevel(intensity); |
| return level === 0 ? null : HEAT_CLASS_NAMES[level - 1]; |
| } |
| |
| // ============================================================================ |
| // Color Mapping (Intensity to Heat Color) |
| // ============================================================================ |
| |
| function intensityToColor(intensity) { |
| const level = intensityToHeatLevel(intensity); |
| if (level === 0) { |
| return 'transparent'; |
| } |
| const rootStyle = getComputedStyle(document.documentElement); |
| return rootStyle.getPropertyValue(`--heat-${level}`).trim(); |
| } |
| |
| // ============================================================================ |
| // Favicon (Reuse logo image as favicon) |
| // ============================================================================ |
| |
| (function() { |
| const logo = document.querySelector('.brand-logo img'); |
| if (logo) { |
| const favicon = document.createElement('link'); |
| favicon.rel = 'icon'; |
| favicon.type = 'image/png'; |
| favicon.href = logo.src; |
| document.head.appendChild(favicon); |
| } |
| })(); |
| |
| // Tachyon Profiler - Heatmap JavaScript |
| // Interactive features for the heatmap visualization |
| // Aligned with Flamegraph viewer design patterns |
| |
| // ============================================================================ |
| // State Management |
| // ============================================================================ |
| |
| let currentMenu = null; |
| let colorMode = 'self'; // 'self' or 'cumulative' - default to self |
| let coldCodeHidden = false; |
| |
| // ============================================================================ |
| // Theme Support |
| // ============================================================================ |
| |
| function toggleTheme() { |
| const html = document.documentElement; |
| const current = html.getAttribute('data-theme') || 'light'; |
| const next = current === 'light' ? 'dark' : 'light'; |
| html.setAttribute('data-theme', next); |
| localStorage.setItem('heatmap-theme', next); |
| |
| // Update theme button icon |
| const btn = document.getElementById('theme-btn'); |
| if (btn) { |
| btn.querySelector('.icon-moon').style.display = next === 'dark' ? 'none' : ''; |
| btn.querySelector('.icon-sun').style.display = next === 'dark' ? '' : 'none'; |
| } |
| applyLineColors(); |
| |
| // Rebuild scroll marker with new theme colors |
| buildScrollMarker(); |
| } |
| |
| function restoreUIState() { |
| // Restore theme |
| const savedTheme = localStorage.getItem('heatmap-theme'); |
| if (savedTheme) { |
| document.documentElement.setAttribute('data-theme', savedTheme); |
| const btn = document.getElementById('theme-btn'); |
| if (btn) { |
| btn.querySelector('.icon-moon').style.display = savedTheme === 'dark' ? 'none' : ''; |
| btn.querySelector('.icon-sun').style.display = savedTheme === 'dark' ? '' : 'none'; |
| } |
| } |
| } |
| |
| // ============================================================================ |
| // Utility Functions |
| // ============================================================================ |
| |
| function createElement(tag, className, textContent = '') { |
| const el = document.createElement(tag); |
| if (className) el.className = className; |
| if (textContent) el.textContent = textContent; |
| return el; |
| } |
| |
| function calculateMenuPosition(buttonRect, menuWidth, menuHeight) { |
| const viewport = { width: window.innerWidth, height: window.innerHeight }; |
| const scroll = { |
| x: window.pageXOffset || document.documentElement.scrollLeft, |
| y: window.pageYOffset || document.documentElement.scrollTop |
| }; |
| |
| const left = buttonRect.right + menuWidth + 10 < viewport.width |
| ? buttonRect.right + scroll.x + 10 |
| : Math.max(scroll.x + 10, buttonRect.left + scroll.x - menuWidth - 10); |
| |
| const top = buttonRect.bottom + menuHeight + 10 < viewport.height |
| ? buttonRect.bottom + scroll.y + 5 |
| : Math.max(scroll.y + 10, buttonRect.top + scroll.y - menuHeight - 10); |
| |
| return { left, top }; |
| } |
| |
| // ============================================================================ |
| // Menu Management |
| // ============================================================================ |
| |
| function closeMenu() { |
| if (currentMenu) { |
| currentMenu.remove(); |
| currentMenu = null; |
| } |
| } |
| |
| function showNavigationMenu(button, items, title) { |
| closeMenu(); |
| |
| const menu = createElement('div', 'callee-menu'); |
| menu.appendChild(createElement('div', 'callee-menu-header', title)); |
| |
| items.forEach(linkData => { |
| const item = createElement('div', 'callee-menu-item'); |
| |
| const funcDiv = createElement('div', 'callee-menu-func'); |
| funcDiv.textContent = linkData.func; |
| |
| if (linkData.count !== undefined && linkData.count > 0) { |
| const countBadge = createElement('span', 'count-badge'); |
| countBadge.textContent = linkData.count.toLocaleString(); |
| countBadge.title = `${linkData.count.toLocaleString()} samples`; |
| funcDiv.appendChild(document.createTextNode(' ')); |
| funcDiv.appendChild(countBadge); |
| } |
| |
| item.appendChild(funcDiv); |
| item.appendChild(createElement('div', 'callee-menu-file', linkData.file)); |
| item.addEventListener('click', () => window.location.href = linkData.link); |
| menu.appendChild(item); |
| }); |
| |
| const pos = calculateMenuPosition(button.getBoundingClientRect(), 350, 300); |
| menu.style.left = `${pos.left}px`; |
| menu.style.top = `${pos.top}px`; |
| |
| document.body.appendChild(menu); |
| currentMenu = menu; |
| } |
| |
| // ============================================================================ |
| // Navigation |
| // ============================================================================ |
| |
| function handleNavigationClick(button, e) { |
| e.stopPropagation(); |
| |
| const navData = button.getAttribute('data-nav'); |
| if (navData) { |
| window.location.href = JSON.parse(navData).link; |
| return; |
| } |
| |
| const navMulti = button.getAttribute('data-nav-multi'); |
| if (navMulti) { |
| const items = JSON.parse(navMulti); |
| const title = button.classList.contains('caller') ? 'Choose a caller:' : 'Choose a callee:'; |
| showNavigationMenu(button, items, title); |
| } |
| } |
| |
| function scrollToTargetLine() { |
| if (!window.location.hash) return; |
| const target = document.querySelector(window.location.hash); |
| if (target) { |
| target.scrollIntoView({ behavior: 'smooth', block: 'start' }); |
| } |
| } |
| |
| // ============================================================================ |
| // Sample Count & Intensity |
| // ============================================================================ |
| |
| function getSampleCount(line) { |
| let text; |
| if (colorMode === 'self') { |
| text = line.querySelector('.line-samples-self')?.textContent.trim().replace(/,/g, ''); |
| } else { |
| text = line.querySelector('.line-samples-cumulative')?.textContent.trim().replace(/,/g, ''); |
| } |
| return parseInt(text) || 0; |
| } |
| |
| // ============================================================================ |
| // Scroll Minimap |
| // ============================================================================ |
| |
| function buildScrollMarker() { |
| const existing = document.getElementById('scroll_marker'); |
| if (existing) existing.remove(); |
| |
| if (document.body.scrollHeight <= window.innerHeight) return; |
| |
| const allLines = document.querySelectorAll('.code-line'); |
| const lines = Array.from(allLines).filter(line => line.style.display !== 'none'); |
| const markerScale = window.innerHeight / document.body.scrollHeight; |
| const lineHeight = Math.min(Math.max(3, window.innerHeight / lines.length), 10); |
| const maxSamples = Math.max(...Array.from(lines, getSampleCount)); |
| |
| const scrollMarker = createElement('div', ''); |
| scrollMarker.id = 'scroll_marker'; |
| |
| let prevLine = -99, lastMark, lastTop; |
| |
| lines.forEach((line, index) => { |
| const samples = getSampleCount(line); |
| if (samples === 0) return; |
| |
| const lineTop = Math.floor(line.offsetTop * markerScale); |
| const lineNumber = index + 1; |
| const intensityClass = maxSamples > 0 ? (intensityToClass(samples / maxSamples) || 'cold') : 'cold'; |
| |
| if (lineNumber === prevLine + 1 && lastMark?.classList.contains(intensityClass)) { |
| lastMark.style.height = `${lineTop + lineHeight - lastTop}px`; |
| } else { |
| lastMark = createElement('div', `marker ${intensityClass}`); |
| lastMark.style.height = `${lineHeight}px`; |
| lastMark.style.top = `${lineTop}px`; |
| scrollMarker.appendChild(lastMark); |
| lastTop = lineTop; |
| } |
| |
| prevLine = lineNumber; |
| }); |
| |
| document.body.appendChild(scrollMarker); |
| } |
| |
| function applyLineColors() { |
| const lines = document.querySelectorAll('.code-line'); |
| lines.forEach(line => { |
| let intensity; |
| if (colorMode === 'self') { |
| intensity = parseFloat(line.getAttribute('data-self-intensity')) || 0; |
| } else { |
| intensity = parseFloat(line.getAttribute('data-cumulative-intensity')) || 0; |
| } |
| |
| const color = intensityToColor(intensity); |
| line.style.background = color; |
| }); |
| } |
| |
| // ============================================================================ |
| // Toggle Controls |
| // ============================================================================ |
| |
| function updateToggleUI(toggleId, isOn) { |
| const toggle = document.getElementById(toggleId); |
| if (toggle) { |
| const track = toggle.querySelector('.toggle-track'); |
| const labels = toggle.querySelectorAll('.toggle-label'); |
| if (isOn) { |
| track.classList.add('on'); |
| labels[0].classList.remove('active'); |
| labels[1].classList.add('active'); |
| } else { |
| track.classList.remove('on'); |
| labels[0].classList.add('active'); |
| labels[1].classList.remove('active'); |
| } |
| } |
| } |
| |
| function toggleColdCode() { |
| coldCodeHidden = !coldCodeHidden; |
| applyHotFilter(); |
| updateToggleUI('toggle-cold', coldCodeHidden); |
| buildScrollMarker(); |
| } |
| |
| function applyHotFilter() { |
| const lines = document.querySelectorAll('.code-line'); |
| |
| lines.forEach(line => { |
| const selfSamples = line.querySelector('.line-samples-self')?.textContent.trim(); |
| const cumulativeSamples = line.querySelector('.line-samples-cumulative')?.textContent.trim(); |
| |
| let isCold; |
| if (colorMode === 'self') { |
| isCold = !selfSamples || selfSamples === ''; |
| } else { |
| isCold = !cumulativeSamples || cumulativeSamples === ''; |
| } |
| |
| if (isCold) { |
| line.style.display = coldCodeHidden ? 'none' : 'flex'; |
| } else { |
| line.style.display = 'flex'; |
| } |
| }); |
| } |
| |
| function toggleColorMode() { |
| colorMode = colorMode === 'self' ? 'cumulative' : 'self'; |
| applyLineColors(); |
| |
| updateToggleUI('toggle-color-mode', colorMode === 'cumulative'); |
| |
| if (coldCodeHidden) { |
| applyHotFilter(); |
| } |
| |
| buildScrollMarker(); |
| } |
| |
| // ============================================================================ |
| // Initialization |
| // ============================================================================ |
| |
| document.addEventListener('DOMContentLoaded', function() { |
| restoreUIState(); |
| applyLineColors(); |
| |
| // Initialize navigation buttons |
| document.querySelectorAll('.nav-btn').forEach(button => { |
| button.addEventListener('click', e => handleNavigationClick(button, e)); |
| }); |
| |
| // Initialize line number permalink handlers |
| document.querySelectorAll('.line-number').forEach(lineNum => { |
| lineNum.style.cursor = 'pointer'; |
| lineNum.addEventListener('click', e => { |
| window.location.hash = `line-${e.target.textContent.trim()}`; |
| }); |
| }); |
| |
| // Initialize toggle buttons |
| const toggleColdBtn = document.getElementById('toggle-cold'); |
| if (toggleColdBtn) toggleColdBtn.addEventListener('click', toggleColdCode); |
| |
| const colorModeBtn = document.getElementById('toggle-color-mode'); |
| if (colorModeBtn) colorModeBtn.addEventListener('click', toggleColorMode); |
| |
| // Initialize specialization view toggle (hide if no bytecode data) |
| const hasBytecode = document.querySelectorAll('.bytecode-toggle').length > 0; |
| |
| const specViewBtn = document.getElementById('toggle-spec-view'); |
| if (specViewBtn) { |
| if (hasBytecode) { |
| specViewBtn.addEventListener('click', toggleSpecView); |
| } else { |
| specViewBtn.style.display = 'none'; |
| } |
| } |
| |
| // Initialize expand-all bytecode button |
| const expandAllBtn = document.getElementById('toggle-all-bytecode'); |
| if (expandAllBtn) { |
| if (hasBytecode) { |
| expandAllBtn.addEventListener('click', toggleAllBytecode); |
| } else { |
| expandAllBtn.style.display = 'none'; |
| } |
| } |
| |
| // Initialize span tooltips |
| initSpanTooltips(); |
| |
| // Build scroll marker and scroll to target |
| setTimeout(buildScrollMarker, 200); |
| setTimeout(scrollToTargetLine, 100); |
| }); |
| |
| // Close menu when clicking outside |
| document.addEventListener('click', e => { |
| if (currentMenu && !currentMenu.contains(e.target) && !e.target.classList.contains('nav-btn')) { |
| closeMenu(); |
| } |
| }); |
| |
| // ======================================== |
| // SPECIALIZATION VIEW TOGGLE |
| // ======================================== |
| |
| let specViewEnabled = false; |
| |
| /** |
| * Calculate heat color for given intensity (0-1) |
| * Hot spans (>30%) get warm orange, cold spans get dimmed gray |
| * @param {number} intensity - Value between 0 and 1 |
| * @returns {string} rgba color string |
| */ |
| function calculateHeatColor(intensity) { |
| // Hot threshold: only spans with >30% of max samples get color |
| if (intensity > 0.3) { |
| // Normalize intensity above threshold to 0-1 |
| const normalizedIntensity = (intensity - 0.3) / 0.7; |
| // Warm orange-red with increasing opacity for hotter spans |
| const alpha = 0.25 + normalizedIntensity * 0.35; // 0.25 to 0.6 |
| const hotColor = getComputedStyle(document.documentElement).getPropertyValue('--span-hot-base').trim(); |
| return `rgba(${hotColor}, ${alpha})`; |
| } else if (intensity > 0) { |
| // Cold spans: very subtle gray, almost invisible |
| const coldColor = getComputedStyle(document.documentElement).getPropertyValue('--span-cold-base').trim(); |
| return `rgba(${coldColor}, 0.1)`; |
| } |
| return 'transparent'; |
| } |
| |
| /** |
| * Apply intensity-based heat colors to source spans |
| * Hot spans get orange highlight, cold spans get dimmed |
| * @param {boolean} enable - Whether to enable or disable span coloring |
| */ |
| function applySpanHeatColors(enable) { |
| document.querySelectorAll('.instr-span').forEach(span => { |
| const samples = enable ? (parseInt(span.dataset.samples) || 0) : 0; |
| if (samples > 0) { |
| const intensity = samples / (parseInt(span.dataset.maxSamples) || 1); |
| span.style.backgroundColor = calculateHeatColor(intensity); |
| span.style.borderRadius = '2px'; |
| span.style.padding = '0 1px'; |
| span.style.cursor = 'pointer'; |
| } else { |
| span.style.cssText = ''; |
| } |
| }); |
| } |
| |
| // ======================================== |
| // SPAN TOOLTIPS |
| // ======================================== |
| |
| let activeTooltip = null; |
| |
| /** |
| * Create and show tooltip for a span |
| */ |
| function showSpanTooltip(span) { |
| hideSpanTooltip(); |
| |
| const samples = parseInt(span.dataset.samples) || 0; |
| const maxSamples = parseInt(span.dataset.maxSamples) || 1; |
| const pct = span.dataset.pct || '0'; |
| const opcodes = span.dataset.opcodes || ''; |
| |
| if (samples === 0) return; |
| |
| const intensity = samples / maxSamples; |
| const isHot = intensity > 0.7; |
| const isWarm = intensity > 0.3; |
| const hotnessText = isHot ? 'Hot' : isWarm ? 'Warm' : 'Cold'; |
| const hotnessClass = isHot ? 'hot' : isWarm ? 'warm' : 'cold'; |
| |
| // Build opcodes rows - each opcode on its own row |
| let opcodesHtml = ''; |
| if (opcodes) { |
| const opcodeList = opcodes.split(',').map(op => op.trim()).filter(op => op); |
| if (opcodeList.length > 0) { |
| opcodesHtml = ` |
| <div class="span-tooltip-section">Opcodes:</div> |
| ${opcodeList.map(op => `<div class="span-tooltip-opcode">${op}</div>`).join('')} |
| `; |
| } |
| } |
| |
| const tooltip = document.createElement('div'); |
| tooltip.className = 'span-tooltip'; |
| tooltip.innerHTML = ` |
| <div class="span-tooltip-header ${hotnessClass}">${hotnessText}</div> |
| <div class="span-tooltip-row"> |
| <span class="span-tooltip-label">Samples:</span> |
| <span class="span-tooltip-value${isHot ? ' highlight' : ''}">${samples.toLocaleString()}</span> |
| </div> |
| <div class="span-tooltip-row"> |
| <span class="span-tooltip-label">% of line:</span> |
| <span class="span-tooltip-value">${pct}%</span> |
| </div> |
| ${opcodesHtml} |
| `; |
| |
| document.body.appendChild(tooltip); |
| activeTooltip = tooltip; |
| |
| // Position tooltip above the span |
| const rect = span.getBoundingClientRect(); |
| const tooltipRect = tooltip.getBoundingClientRect(); |
| |
| let left = rect.left + (rect.width / 2) - (tooltipRect.width / 2); |
| let top = rect.top - tooltipRect.height - 8; |
| |
| // Keep tooltip in viewport |
| if (left < 5) left = 5; |
| if (left + tooltipRect.width > window.innerWidth - 5) { |
| left = window.innerWidth - tooltipRect.width - 5; |
| } |
| if (top < 5) { |
| top = rect.bottom + 8; // Show below if no room above |
| } |
| |
| tooltip.style.left = `${left + window.scrollX}px`; |
| tooltip.style.top = `${top + window.scrollY}px`; |
| } |
| |
| /** |
| * Hide active tooltip |
| */ |
| function hideSpanTooltip() { |
| if (activeTooltip) { |
| activeTooltip.remove(); |
| activeTooltip = null; |
| } |
| } |
| |
| /** |
| * Initialize span tooltip handlers |
| */ |
| function initSpanTooltips() { |
| document.addEventListener('mouseover', (e) => { |
| const span = e.target.closest('.instr-span'); |
| if (span && specViewEnabled) { |
| showSpanTooltip(span); |
| } |
| }); |
| |
| document.addEventListener('mouseout', (e) => { |
| const span = e.target.closest('.instr-span'); |
| if (span) { |
| hideSpanTooltip(); |
| } |
| }); |
| } |
| |
| function toggleSpecView() { |
| specViewEnabled = !specViewEnabled; |
| const lines = document.querySelectorAll('.code-line'); |
| |
| if (specViewEnabled) { |
| lines.forEach(line => { |
| const specColor = line.getAttribute('data-spec-color'); |
| line.style.background = specColor || 'transparent'; |
| }); |
| } else { |
| applyLineColors(); |
| } |
| |
| applySpanHeatColors(specViewEnabled); |
| updateToggleUI('toggle-spec-view', specViewEnabled); |
| |
| // Disable/enable color mode toggle based on spec view state |
| const colorModeToggle = document.getElementById('toggle-color-mode'); |
| if (colorModeToggle) { |
| colorModeToggle.classList.toggle('disabled', specViewEnabled); |
| } |
| |
| buildScrollMarker(); |
| } |
| |
| // ======================================== |
| // BYTECODE PANEL TOGGLE |
| // ======================================== |
| |
| /** |
| * Toggle bytecode panel visibility for a source line |
| * @param {HTMLElement} button - The toggle button that was clicked |
| */ |
| function toggleBytecode(button) { |
| const lineDiv = button.closest('.code-line'); |
| const lineId = lineDiv.id; |
| const lineNum = lineId.replace('line-', ''); |
| const panel = document.getElementById(`bytecode-${lineNum}`); |
| |
| if (!panel) return; |
| |
| const isExpanded = panel.style.display !== 'none'; |
| |
| if (isExpanded) { |
| panel.style.display = 'none'; |
| button.classList.remove('expanded'); |
| button.innerHTML = '▶'; // Right arrow |
| } else { |
| if (!panel.dataset.populated) { |
| populateBytecodePanel(panel, button); |
| } |
| panel.style.display = 'block'; |
| button.classList.add('expanded'); |
| button.innerHTML = '▼'; // Down arrow |
| } |
| } |
| |
| /** |
| * Populate bytecode panel with instruction data |
| * @param {HTMLElement} panel - The panel element to populate |
| * @param {HTMLElement} button - The button containing the bytecode data |
| */ |
| function populateBytecodePanel(panel, button) { |
| const bytecodeJson = button.getAttribute('data-bytecode'); |
| if (!bytecodeJson) return; |
| |
| // Get line number from parent |
| const lineDiv = button.closest('.code-line'); |
| const lineNum = lineDiv ? lineDiv.id.replace('line-', '') : null; |
| |
| try { |
| const instructions = JSON.parse(bytecodeJson); |
| if (!instructions.length) { |
| panel.innerHTML = '<div class="bytecode-empty">No bytecode data</div>'; |
| panel.dataset.populated = 'true'; |
| return; |
| } |
| |
| const maxSamples = Math.max(...instructions.map(i => i.samples), 1); |
| |
| // Calculate specialization stats |
| const totalSamples = instructions.reduce((sum, i) => sum + i.samples, 0); |
| const specializedSamples = instructions |
| .filter(i => i.is_specialized) |
| .reduce((sum, i) => sum + i.samples, 0); |
| const specPct = totalSamples > 0 ? Math.round(100 * specializedSamples / totalSamples) : 0; |
| const specializedCount = instructions.filter(i => i.is_specialized).length; |
| |
| // Determine specialization level class |
| let specClass = 'low'; |
| if (specPct >= 67) specClass = 'high'; |
| else if (specPct >= 33) specClass = 'medium'; |
| |
| // Build specialization summary |
| let html = `<div class="bytecode-spec-summary ${specClass}"> |
| <span class="spec-pct">${specPct}%</span> |
| <span class="spec-label">specialized</span> |
| <span class="spec-detail">(${specializedCount}/${instructions.length} instructions, ${specializedSamples.toLocaleString()}/${totalSamples.toLocaleString()} samples)</span> |
| </div>`; |
| |
| html += '<div class="bytecode-header">' + |
| '<span class="bytecode-opname">Instruction</span>' + |
| '<span class="bytecode-samples">Samples</span>' + |
| '<span>Heat</span></div>'; |
| |
| for (const instr of instructions) { |
| const heatPct = (instr.samples / maxSamples) * 100; |
| const isHot = heatPct > 50; |
| const specializedClass = instr.is_specialized ? ' specialized' : ''; |
| const baseOpHtml = instr.is_specialized |
| ? `<span class="base-op">(${escapeHtml(instr.base_opname)})</span>` : ''; |
| const badge = instr.is_specialized |
| ? '<span class="specialization-badge">SPECIALIZED</span>' : ''; |
| |
| // Build location data attributes for cross-referencing with source spans |
| const hasLocations = instr.locations && instr.locations.length > 0; |
| const locationData = hasLocations |
| ? `data-locations='${JSON.stringify(instr.locations)}' data-line="${lineNum}" data-opcode="${instr.opcode}"` |
| : ''; |
| |
| html += `<div class="bytecode-instruction" ${locationData}> |
| <span class="bytecode-opname${specializedClass}">${escapeHtml(instr.opname)}${baseOpHtml}${badge}</span> |
| <span class="bytecode-samples${isHot ? ' hot' : ''}">${instr.samples.toLocaleString()}</span> |
| <div class="bytecode-heatbar"><div class="bytecode-heatbar-fill" style="width:${heatPct}%"></div></div> |
| </div>`; |
| } |
| |
| panel.innerHTML = html; |
| panel.dataset.populated = 'true'; |
| |
| // Add hover handlers for bytecode instructions to highlight source spans |
| panel.querySelectorAll('.bytecode-instruction[data-locations]').forEach(instrEl => { |
| instrEl.addEventListener('mouseenter', highlightSourceFromBytecode); |
| instrEl.addEventListener('mouseleave', unhighlightSourceFromBytecode); |
| }); |
| } catch (e) { |
| panel.innerHTML = '<div class="bytecode-error">Error loading bytecode</div>'; |
| console.error('Error parsing bytecode data:', e); |
| } |
| } |
| |
| /** |
| * Highlight source spans when hovering over bytecode instruction |
| */ |
| function highlightSourceFromBytecode(e) { |
| const instrEl = e.currentTarget; |
| const lineNum = instrEl.dataset.line; |
| const locationsStr = instrEl.dataset.locations; |
| |
| if (!lineNum) return; |
| |
| const lineDiv = document.getElementById(`line-${lineNum}`); |
| if (!lineDiv) return; |
| |
| // Parse locations and highlight matching spans by column range |
| try { |
| const locations = JSON.parse(locationsStr || '[]'); |
| const spans = lineDiv.querySelectorAll('.instr-span'); |
| spans.forEach(span => { |
| const spanStart = parseInt(span.dataset.colStart); |
| const spanEnd = parseInt(span.dataset.colEnd); |
| for (const loc of locations) { |
| // Match if span's range matches instruction's location |
| if (spanStart === loc.col_offset && spanEnd === loc.end_col_offset) { |
| span.classList.add('highlight-from-bytecode'); |
| break; |
| } |
| } |
| }); |
| } catch (err) { |
| console.error('Error parsing locations:', err); |
| } |
| |
| // Also highlight the instruction row itself |
| instrEl.classList.add('highlight'); |
| } |
| |
| /** |
| * Remove highlighting from source spans |
| */ |
| function unhighlightSourceFromBytecode(e) { |
| const instrEl = e.currentTarget; |
| const lineNum = instrEl.dataset.line; |
| |
| if (!lineNum) return; |
| |
| const lineDiv = document.getElementById(`line-${lineNum}`); |
| if (!lineDiv) return; |
| |
| const spans = lineDiv.querySelectorAll('.instr-span.highlight-from-bytecode'); |
| spans.forEach(span => { |
| span.classList.remove('highlight-from-bytecode'); |
| }); |
| |
| instrEl.classList.remove('highlight'); |
| } |
| |
| /** |
| * Escape HTML special characters |
| * @param {string} text - Text to escape |
| * @returns {string} Escaped HTML |
| */ |
| function escapeHtml(text) { |
| const div = document.createElement('div'); |
| div.textContent = text; |
| return div.innerHTML; |
| } |
| |
| /** |
| * Toggle all bytecode panels at once |
| */ |
| function toggleAllBytecode() { |
| const buttons = document.querySelectorAll('.bytecode-toggle'); |
| if (buttons.length === 0) return; |
| |
| const someExpanded = Array.from(buttons).some(b => b.classList.contains('expanded')); |
| const expandAllBtn = document.getElementById('toggle-all-bytecode'); |
| |
| buttons.forEach(button => { |
| const isExpanded = button.classList.contains('expanded'); |
| if (someExpanded ? isExpanded : !isExpanded) { |
| toggleBytecode(button); |
| } |
| }); |
| |
| // Update the expand-all button state |
| if (expandAllBtn) { |
| expandAllBtn.classList.toggle('expanded', !someExpanded); |
| } |
| } |
| |
| // Keyboard shortcut: 'b' toggles all bytecode panels, Enter/Space activates toggle switches |
| document.addEventListener('keydown', function(e) { |
| if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') { |
| return; |
| } |
| if (e.key === 'b' && !e.ctrlKey && !e.altKey && !e.metaKey) { |
| toggleAllBytecode(); |
| } |
| if ((e.key === 'Enter' || e.key === ' ') && e.target.classList.contains('toggle-switch')) { |
| e.preventDefault(); |
| e.target.click(); |
| } |
| }); |
| |
| // Handle hash changes |
| window.addEventListener('hashchange', () => setTimeout(scrollToTargetLine, 50)); |
| |
| // Rebuild scroll marker on resize |
| window.addEventListener('resize', buildScrollMarker); |
| |
| </script> |
| </body> |
| </html> |