mirror of
https://github.com/harvard-edge/cs249r_book.git
synced 2026-05-01 01:59:10 -05:00
295 lines
78 KiB
HTML
295 lines
78 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<link rel="icon" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/favicon.ico" />
|
|
<!-- Preload is necessary because we show these images when we disconnect from the server,
|
|
but at that point we cannot load these images from the server -->
|
|
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/gradient-yHQUC_QB.png" as="image" />
|
|
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/noise-60BoTA8O.png" as="image" />
|
|
<!-- Preload the fonts -->
|
|
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/Lora-VariableFont_wght-B2ootaw-.ttf" as="font" crossorigin="anonymous" />
|
|
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/PTSans-Regular-CxL0S8W7.ttf" as="font" crossorigin="anonymous" />
|
|
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/PTSans-Bold-D9fedIX3.ttf" as="font" crossorigin="anonymous" />
|
|
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/FiraMono-Regular-BTCkDNvf.ttf" as="font" crossorigin="anonymous" />
|
|
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/FiraMono-Medium-DU3aDxX5.ttf" as="font" crossorigin="anonymous" />
|
|
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/FiraMono-Bold-CLVRCuM9.ttf" as="font" crossorigin="anonymous" />
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<meta name="theme-color" content="#000000" />
|
|
<meta name="description" content="a marimo app" />
|
|
<link rel="apple-touch-icon" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/apple-touch-icon.png" />
|
|
<link rel="manifest" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/manifest.json" />
|
|
|
|
<script data-marimo="true">
|
|
function __resizeIframe(obj) {
|
|
const scrollbarHeight = 20; // Max between windows, mac, and linux
|
|
|
|
function setHeight() {
|
|
// Guard against race condition where iframe isn't ready
|
|
if (!obj.contentWindow?.document?.documentElement) {
|
|
return;
|
|
}
|
|
const element = obj.contentWindow.document.documentElement;
|
|
// If there is no vertical scrollbar, we don't need to resize the iframe
|
|
if (element.scrollHeight === element.clientHeight) {
|
|
return;
|
|
}
|
|
|
|
// Create a new height that includes the scrollbar height if it's visible
|
|
const hasHorizontalScrollbar = element.scrollWidth > element.clientWidth;
|
|
const newHeight = element.scrollHeight + (hasHorizontalScrollbar ? scrollbarHeight : 0);
|
|
|
|
// Only update the height if it's different from the current height
|
|
if (obj.style.height !== `${newHeight}px`) {
|
|
obj.style.height = `${newHeight}px`;
|
|
}
|
|
}
|
|
|
|
// Resize the iframe to the height of the content and bottom scrollbar height
|
|
setHeight();
|
|
|
|
// Resize the iframe when the content changes
|
|
const resizeObserver = new ResizeObserver((_entries) => {
|
|
setHeight();
|
|
});
|
|
// Only observe if iframe content is ready
|
|
if (obj.contentWindow?.document?.body) {
|
|
resizeObserver.observe(obj.contentWindow.document.body);
|
|
}
|
|
}
|
|
</script>
|
|
<marimo-filename hidden>lab_01_ml_intro.py</marimo-filename>
|
|
<!-- TODO(Trevor): Legacy, required by VS Code plugin. Remove when plugin is updated (see marimo/server/_templates/template.py) -->
|
|
<marimo-version data-version="{{ version }}" hidden></marimo-version>
|
|
<marimo-user-config data-config="{{ user_config }}" hidden></marimo-user-config>
|
|
<marimo-server-token data-token="{{ server_token }}" hidden></marimo-server-token>
|
|
<!-- /TODO -->
|
|
<title>lab 01 ml intro</title>
|
|
<script type="module" crossorigin crossorigin="anonymous" src="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/index-BI2D29sc.js"></script>
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/preload-helper-BW0IMuFq.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/hotkeys-uKX61F1_.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/defaultLocale-BLUna9fQ.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/precisionRound-Cl9k9ZmS.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/defaultLocale-DzliDDTm.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/vega-loader.browser-C8wT63Va.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/_Uint8Array-BGESiCQL.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/tooltip-CrRUCOBw.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/clsx-D0MtrJOx.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/cn-C1rgT0yh.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/chunk-LvLJmgfZ.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/react-BGmjiNul.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/compiler-runtime-DeeZ7FnK.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/jsx-runtime-DN_bIXfG.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/badge-DAnNhy3O.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/useEventListener-COkmyg1v.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/button-B8cGZzP5.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/react-dom-C9fstfnp.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/Combination-D1TsGrBC.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/menu-items-9PZrU2e0.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/dist-CBrDuocE.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/createLucideIcon-CW2xpJ57.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/check-CrAQug3q.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/select-D9lTzMzP.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/tooltip-CvjcEpZC.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/use-toast-Bzf3rpev.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/_getTag-BWqNuuwU.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/_baseIsEqual-Cz9Tt_-E.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/useEvent-DlWF5OMa.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/invariant-C6yE60hi.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/_baseFor-Duhs3RiJ.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/merge-BBX6ug-N.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/zod-Cg4WLWh2.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/utils-Czt8B2GX.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/constants-Bkp4R3bQ.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/Deferred-DzyBMRsy.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/config-CENq_7Pd.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/uuid-ClFZlR7U.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/DeferredRequestRegistry-B3BENoUa.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/requests-C0HaHO6a.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/isSymbol-BGkTcW3U.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/toString-DlRqgfqz.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/_hasUnicode-zBEpxwYe.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/useLifecycle-CmDXEyIC.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/useNonce-EAuSVK-5.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/useTheme-BSVRc0kJ.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/once-CTiSlR1m.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/capabilities-BmAOeMOK.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/createReducer-DDa-hVe3.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/dist-CAcX026F.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/dist-DKNOF5xd.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/dist-CI6_zMIl.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/dist-BVf1IY4_.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/dist-Cq_4nPfh.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/dist-CVj-_Iiz.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/dist-HGZzCB0y.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/dist-RKnr9SNh.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/dist-BuhT82Xx.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/stex-0ac7Aukl.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/toDate-5JckKRQn.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/cjs-Bj40p_Np.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/_arrayReduce-bZBYsK-u.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/type-BdyvjzTI.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/_baseProperty-DuoFhI7N.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/now-6sUe0ZdD.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/debounce-BbFlGgjv.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/toInteger-CDcO32Gx.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/database-zap-CaVvnK_o.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/main-CwSdzVhm.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/cells-CmJW_FeD.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/ErrorBoundary-C7JBxSzd.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/kbd-Czc5z_04.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/useInstallPackage-RldLPyJs.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/alert-dialog-jcHA5geR.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/dialog-CF5DtF1E.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/useDebounce-em3gna-v.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/numbers-C9_R_vlY.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/SSRProvider-DD7JA3RM.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/context-BAYdLMF_.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/useNumberFormatter-D8ks3oPN.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/usePress-C2LPFxyv.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/input-Bkl2Yfmh.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/ImperativeModal-BZvZlZQZ.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/cell-link-D7bPw7Fz.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/multi-map-CQd4MZr5.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/alert-BEdExd6A.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/chevron-right-CqEd11Di.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/dropdown-menu-BP4_BZLr.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/links-DNmjkr65.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/datasource-CCq9qyVG.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/state-B8vBQnkH.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/MarimoErrorOutput-DAK6volb.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/copy-DRhpWiOq.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/copy-gBVL4NN-.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/copy-icon-jWsqdLn1.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/spinner-C1czjtp7.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/es-BJsT6vfZ.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/focus-KGgBDCvb.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/LazyAnyLanguageCodeMirror-Dr2G5gxJ.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/katex-dFZM4X_7.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/marked.esm-BZNXs5FA.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/chunk-OGVTOU66-DQphfHw1.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/markdown-renderer-DjqhqmES.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/dist-D0NgYwYf.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/command-B1zRJT1a.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/popover-DtnzNVk-.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/useRunCells-DNnhJ0Gs.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/mode-CXc0VeQq.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/purify.es-N-2faAGj.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/RenderHTML-B4Nb8r0D.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/table-BatLo2vd.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/tabs-CHiEPtZV.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/useAsyncData-Dj1oqsrZ.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/useIframeCapabilities-CU-WWxnz.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/errors-z7WpYca5.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/error-banner-Cq4Yn1WZ.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/formats-DtJ_484s.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/en-US-DhMN8sxe.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/isValid-DhzaK-Y1.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/dates-CdsE1R40.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/download-C_slsU-7.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/maps-s2pQkyf5.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/extends-B9D0JO9U.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/emotion-is-prop-valid.esm-lG8j6oqk.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/useDateFormatter-CV0QXb5P.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/range-sshwVRcP.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/capitalize-DQeWKRGx.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/table-BLx7B_us.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/JsonOutput-DlwRx3jE.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/file-BnFXtaZZ.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/play-BJDBXApx.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/chat-components-BQ_d4LQG.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/isEmpty-DIxUV1UR.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/circle-check-big-OIMTUpe6.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/chat-display-ZS_L6G-P.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/ai-model-dropdown-C-5PlP5A.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/renderShortcut-BzTDKVab.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/useDeleteCell-D-55qWAK.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/icons-9QU2Dup7.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/process-output-DN66BQYe.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/blob-DtJQFQyD.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/objectWithoutPropertiesLoose-CboCOq4o.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/esm-D2_Kx6xF.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/add-cell-with-ai-DEdol3w0.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/chart-no-axes-column-D42sFB6d.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/square-function-DxXFdbn8.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/spec-qp_XZeSS.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/column-preview-DZ--KOk1.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/switch-C5jvDmuG.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/toggle-D-5M3JI_.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/globals-DPW2B3A9.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/share-CXQVxivL.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/memoize-DN0TMY36.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/get-CyLJYAfP.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/_baseSet-6FYvpjrm.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/react-resizable-panels.browser.esm-B7ZqbY8M.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/utilities.esm-CqQATX3k.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/floating-outline-DqdzWKrn.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/useAddCell-DveVmvs9.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/eye-off-D9zAYqG9.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/plus-CHesBJpY.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/readonly-python-code-Dr5fAkba.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/file-video-camera-CZUg-nFA.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/types-D5CL190S.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/label-CqyOmxjL.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/textarea-DzIuH-E_.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/refresh-ccw-DbW1_PHb.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/trash-2-C-lF7BNB.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/form-DyJ8-Zz6.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/field-86WoveRM.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/useBoolean-GvygmcM1.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/useDeepCompareMemoize-81gQouTn.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/types-B42u_5hF.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/prop-types-C638SUfx.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/es-FiXEquL2.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/VisuallyHidden-B0mBEsSm.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/hasIn-DydgU7lx.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/_baseFlatten-CLPh0yMf.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/flatten-Buk63LQO.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/pick-DeQioq0G.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/code-xml-MBUyxNtK.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/download-DobaYJPt.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/house-CncUa_LL.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/refresh-cw-Din9uFKE.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/settings-MTlHVxz3.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/square-leQTJTJJ.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/triangle-alert-CbD0f2J6.js">
|
|
<link rel="modulepreload" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/bundle.esm-dxSncdJD.js">
|
|
<link rel="stylesheet" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/cells-jmgGt1lS.css">
|
|
<link rel="stylesheet" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/markdown-renderer-DdDKmWlR.css">
|
|
<link rel="stylesheet" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/JsonOutput-B7vuddcd.css">
|
|
<link rel="stylesheet" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.19.6/dist/assets/index-BI9O54ok.css">
|
|
|
|
<script data-marimo="true">
|
|
window.__MARIMO_STATIC__ = {};
|
|
window.__MARIMO_STATIC__.files = {};
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<div id="root"></div>
|
|
<!-- This is a portal for the data editor to render in -->
|
|
<div id="portal" data-testid="glide-portal" style="position: fixed; left: 0; top: 0; z-index: 9999"></div>
|
|
<script data-marimo="true">
|
|
window.__MARIMO_MOUNT_CONFIG__ = {
|
|
"filename": "lab_01_ml_intro.py",
|
|
"mode": "read",
|
|
"version": "0.19.6",
|
|
"serverToken": "static",
|
|
"config": {"ai": {"custom_providers": {}, "models": {"custom_models": [], "displayed_models": []}}, "completion": {"activate_on_typing": true, "copilot": false, "signature_hint_on_typing": false}, "diagnostics": {"sql_linter": true}, "display": {"cell_output": "below", "code_editor_font_size": 14, "dataframes": "rich", "default_table_max_columns": 50, "default_table_page_size": 10, "default_width": "medium", "reference_highlighting": true, "theme": "light"}, "formatting": {"line_length": 79}, "keymap": {"overrides": {}, "preset": "default"}, "language_servers": {"pylsp": {"enable_flake8": false, "enable_mypy": true, "enable_pydocstyle": false, "enable_pyflakes": false, "enable_pylint": false, "enable_ruff": true, "enabled": false}}, "mcp": {"mcpServers": {}, "presets": []}, "package_management": {"manager": "pip"}, "runtime": {"auto_instantiate": false, "auto_reload": "off", "default_csv_encoding": "utf-8", "default_sql_output": "auto", "on_cell_change": "autorun", "output_max_bytes": 8000000, "reactive_tests": true, "std_stream_max_bytes": 1000000, "watcher_on_save": "lazy"}, "save": {"autosave": "after_delay", "autosave_delay": 1000, "format_on_save": false}, "server": {"browser": "default", "follow_symlink": false}, "snippets": {"custom_paths": [], "include_default_snippets": true}},
|
|
"configOverrides": {},
|
|
"appConfig": {"sql_output": "auto", "width": "medium"},
|
|
"view": {"showAppCode": true},
|
|
"notebook": {"cells": [{"code": "import marimo as mo\nimport sys\nimport os\nfrom pathlib import Path\nimport plotly.graph_objects as go\nimport numpy as np\n\n# --- PATHS ---\ntry:\n notebook_path = Path(os.path.abspath(__file__))\nexcept NameError:\n notebook_path = Path(os.getcwd()) / \"labs\" / \"vol1\" / \"lab_01_ml_intro.py\"\n\nproject_root = notebook_path.parents[2]\nsys.path.append(str(project_root / \"book\" / \"quarto\"))\nsys.path.append(str(project_root))\n\nfrom mlsys import Engine, Models, Systems, ureg, Q_\nfrom labs.core.style import COLORS, LAB_CSS, apply_plotly_theme\nfrom labs.core.components import Card, PredictionLock, MetricRow, ComparisonRow, StakeholderMessage\n", "code_hash": "d23b36ac16dc24cc6f9b22859f71de65", "config": {"column": null, "disabled": false, "hide_code": false}, "id": "Hbol", "name": "__"}, {"code": "# --- GLOBAL PRIMER ---\nmo.vstack([\n LAB_CSS,\n mo.md(\"# \ud83d\ude80 Lab 01: The Quantitative Orientation\"),\n mo.md(\n r\"\"\"\n ### **System Design is the Calculus of Trade-offs**\n In the tradition of **Hennessy \u0026 Patterson**, this laboratory replaces intuition with measurement. We define **AI Engineering** as the discipline of building stochastic systems with deterministic reliability.\n\n To succeed, you must move beyond \"it feels slow\" to \"**The memory bandwidth is 100,000x smaller than required.**\" This lab uses real machine invariants to calibrate your quantitative intuition.\n \"\"\"\n )\n])", "code_hash": "18ef5e8532f309b11c82c9f99af8da96", "config": {"column": null, "disabled": false, "hide_code": false}, "id": "MJUe", "name": "__"}, {"code": "# --- NAVIGATION ---\ntabs = mo.ui.tabs({\n \"1. THE MAGNITUDE GAP\": mo.md(\"\"), \n \"2. THE BITTER LESSON\": mo.md(\"\"),\n \"3. THE VERIFICATION GAP\": mo.md(\"\"),\n \"4. CLAIM MISSION\": mo.md(\"\")\n})\ntabs", "code_hash": "61fff62e3554e0b191acd1fd8a84f95b", "config": {"column": null, "disabled": false, "hide_code": false}, "id": "vblA", "name": "__"}, {"code": "# --- GLOBAL UI STATE ---\n# Part 1\np1_val, p1_lock_ui = PredictionLock(1, \"By what factor (ratio) does an H100 (Cloud) exceed an ESP32 (TinyML) in peak TFLOPS?\")\np1_tier_slider = mo.ui.slider(start=0, stop=3, step=1, value=0, label=\"Select Target Archetype (Tiny \u2192 Cloud)\")\n\n# Part 2\np2_val, p2_lock_ui = PredictionLock(2, \"Based on historical data, which axis has delivered more 'Accuracy-per-Dollar': Human Algorithm Tuning or Machine Scaling?\")\np2_time_slider = mo.ui.slider(start=2012, stop=2024, step=1, value=2012, label=\"Year of Analysis\")\n\n# Part 3\np3_val, p3_lock_ui = PredictionLock(3, \"Given the input space of a standard vision model, can we achieve 1% coverage through testing alone?\")\np3_img_res = mo.ui.number(start=32, stop=1024, step=32, value=224, label=\"Input Resolution (Width/Height)\")\np3_test_rate = mo.ui.number(start=1, stop=10000, value=100, label=\"Test Rate (Samples/Second)\")\n\n# Part 4\ntrack_selector = mo.ui.radio(\n options={\n \"\u2601\ufe0f Cloud Titan (LLM Serving)\": \"CLOUD\",\n \"\ud83e\udd16 Edge Guardian (AV Systems)\": \"EDGE\",\n \"\ud83d\udd76\ufe0f Mobile Nomad (AR Glasses)\": \"MOBILE\",\n \"\ud83d\udc42 Tiny Pioneer (Neural Hearing)\": \"TINY\"\n },\n label=\"Select your Career Specialization Track\"\n)\n", "code_hash": "bafa88ed6810a00143282cfe23f1f852", "config": {"column": null, "disabled": false, "hide_code": false}, "id": "bkHC", "name": "__"}, {"code": "# --- TAB 1: THE MAGNITUDE GAP ---\ndef render_tab_1():\n mo.stop(tabs.value != \"1. THE MAGNITUDE GAP\")\n if p1_val.value == \"\": return p1_lock_ui\n\n baseline = Systems.Tiny\n _tiers = [Systems.Tiny, Systems.Mobile, Systems.Edge, Systems.Cloud]\n selected = _tiers[p1_tier_slider.value]\n\n # Plot: Absolute Values (Log Scale)\n fig = go.Figure()\n fig.add_trace(go.Bar(\n x=['RAM (GB)', 'Compute (TFLOPS)', 'Power (W)'],\n y=[np.log10(max(selected.ram.m_as('GB'), 1e-6)),\n np.log10(max(selected.peak_flops.m_as('TFLOPs/s'), 1e-6)),\n np.log10(max(selected.power_budget.m_as('watt'), 1e-6))],\n text=[f\"{selected.ram:~}\", f\"{selected.peak_flops:~}\", f\"{selected.power_budget:~}\"],\n textposition='auto', marker_color=\"#006395\"\n ))\n fig.update_layout(yaxis=dict(range=[-6, 6], title=\"Log10 Magnitude\"), height=300)\n\n # Comparison logic\n comp_metrics = mo.Html(\"\".join([\n ComparisonRow(\"RAM Gap\", baseline.ram, selected.ram, \"GB\"),\n ComparisonRow(\"Compute Gap\", baseline.peak_flops, selected.peak_flops, \"TFLOPS\"),\n ComparisonRow(\"Power Gap\", baseline.power_budget, selected.power_budget, \"W\")\n ]))\n\n return mo.vstack([\n mo.md(\"## Part 1: Quantifying the Magnitude Gap\"),\n mo.md(f\"Compare **{selected.name}** against the **{baseline.name}** baseline. Design space exploration requires reasoning across $10^9$ differences.\"),\n p1_tier_slider,\n mo.hstack([\n Card(\"Log-Scale Architecture View\", mo.as_html(apply_plotly_theme(fig))),\n Card(\"Scaling Ratios (vs. Tiny)\", comp_metrics)\n ], widths=[2, 1]),\n mo.ui.text_area(label=\"REFLECT: Which axis (D, A, or M) is most responsible for this 9-order-of-magnitude span?\")\n ])\n\nrender_tab_1()", "code_hash": "0f8d1fb4d9ee56c0385789c789542c6d", "config": {"column": null, "disabled": false, "hide_code": false}, "id": "lEQa", "name": "__"}, {"code": "# --- TAB 2: THE BITTER LESSON (DATA-DRIVEN) ---\ndef render_tab_2():\n mo.stop(tabs.value != \"2. THE BITTER LESSON\")\n if p2_val.value == \"\": return p2_lock_ui\n\n # Actual Benchmark Data Points from mlsys\n history = [\n {\"year\": 2012, \"name\": \"AlexNet\", \"flops\": 1.2e18, \"acc\": 84.7},\n {\"year\": 2015, \"name\": \"ResNet-50\", \"flops\": 5.0e19, \"acc\": 92.4},\n {\"year\": 2018, \"name\": \"BERT-Large\", \"flops\": 3.0e21, \"acc\": 95.0},\n {\"year\": 2020, \"name\": \"GPT-3\", \"flops\": 3.1e23, \"acc\": 98.0},\n {\"year\": 2023, \"name\": \"GPT-4\", \"flops\": 2.0e25, \"acc\": 99.0}\n ]\n\n visible = [p for p in history if p['year'] \u003C= p2_time_slider.value]\n latest = visible[-1]\n\n fig = go.Figure()\n # Learning Curve (Power Law)\n fig.add_trace(go.Scatter(\n x=[p['flops'] for p in history], y=[p['acc'] for p in history],\n mode='lines', line=dict(color=\"#bdc3c7\", dash='dot'), name=\"Scaling Law Trend\"\n ))\n # Actual Points\n fig.add_trace(go.Scatter(\n x=[p['flops'] for p in visible], y=[p['acc'] for p in visible],\n mode='markers+text', text=[p['name'] for p in visible],\n textposition=\"top center\", marker=dict(size=12, color=\"#CB202D\"), name=\"Verified Benchmarks\"\n ))\n\n fig.update_layout(xaxis_type=\"log\", xaxis_title=\"Training Compute (FLOPs)\", yaxis_title=\"Relative Capability %\", height=300)\n\n _stats = mo.Html(\"\".join([\n MetricRow(\"Leading Model\", latest['name']),\n MetricRow(\"Compute Scale\", f\"{latest['flops']:.1e} FLOPs\"),\n MetricRow(\"Era\", \"Software 2.0 (Learning)\" if latest['year'] \u003E= 2012 else \"Software 1.0\")\n ]))\n\n return mo.vstack([\n mo.md(\"## Part 2: Proving the Bitter Lesson\"),\n mo.md(\"Step through the history of AI. Observe how performance scales with **Computation** rather than manual rule-writing.\"),\n p2_time_slider,\n mo.hstack([\n Card(\"The Historical Record\", mo.as_html(apply_plotly_theme(fig))),\n Card(\"System State\", _stats)\n ], widths=[2, 1]),\n mo.ui.text_area(label=\"REFLECT: At current scaling rates, is human 'feature engineering' still an economical investment?\")\n ])\n\nrender_tab_2()", "code_hash": "9bd542818bd6d9dd9bf5b5eae9d4fdc6", "config": {"column": null, "disabled": false, "hide_code": false}, "id": "PKri", "name": "__"}, {"code": "# --- TAB 3: THE VERIFICATION GAP ---\ndef render_tab_3():\n mo.stop(tabs.value != \"3. THE VERIFICATION GAP\")\n if p3_val.value == \"\": return p3_lock_ui\n\n # The Math of the Gap\n num_pixels = p3_img_res.value * p3_img_res.value * 3\n # Space size = 256^num_pixels. \n # log10(size) = num_pixels * log10(256)\n log_space = num_pixels * np.log10(256)\n\n # How long to test 1%?\n # One trillion images = 10^12\n # Target samples = 0.01 * 10^log_space (Impossible to calculate directly)\n\n # Dimensioning: How many years to run 1 billion tests?\n samples_per_year = p3_test_rate.value * 3600 * 24 * 365\n years_for_billion = 1e9 / samples_per_year\n\n _results = mo.Html(\"\".join([\n MetricRow(\"Input State Space\", f\"10^{log_space:,.0f}\", \"Possible RGB configs\"),\n MetricRow(\"Test Capacity\", f\"{samples_per_year:,.0e} / yr\", f\"At {p3_test_rate.value} samples/s\"),\n MetricRow(\"1% Coverage Time\", \"\u221e\", \"Exceeds age of universe\")\n ]))\n\n return mo.vstack([\n mo.md(\"## Part 3: The Verification Gap Audit\"),\n mo.md(\"Quantify why ML systems are 'untestable' in the traditional sense. Use the calculator to dimension a test suite.\"),\n mo.hstack([p3_img_res, p3_test_rate]),\n mo.hstack([\n Card(\"The Physics of Uncertainty\", mo.md(\n f\"A **{p3_img_res.value}x{p3_img_res.value}** image is a high-dimensional vector. \"\n \"Traditional 'Unit Testing' assumes we can partition this space. \"\n \"**The math proves we cannot.**\"\n )),\n Card(\"Audit Results\", _results)\n ], widths=[1, 1]),\n mo.ui.text_area(label=\"REFLECT: Given this gap, how must our 'Deployment' strategy change? (Hint: See MLOps Monitoring).\")\n ])\n\nrender_tab_3()", "code_hash": "81d02c5e71d714d9b3b7f9f41fbed8cd", "config": {"column": null, "disabled": false, "hide_code": false}, "id": "Xref", "name": "__"}, {"code": "# --- TAB 4: CLAIM MISSION ---\ndef render_tab_4():\n mo.stop(tabs.value != \"4. CLAIM MISSION\")\n\n _data = {\n \"CLOUD\": (\"LLM Architect\", \"Maximize Llama-3-70B serving on one H100 node.\", COLORS['BlueLine'], \"CFO: We are burning $10k/day. If utilization isn't 80%, you're fired.\"),\n \"EDGE\": (\"AV Systems Lead\", \"Maintain 10ms safety-critical vision-to-brake loop.\", COLORS['RedLine'], \"Safety: A 5ms jitter spike caused a phantom brake event. Fix it.\"),\n \"MOBILE\": (\"AR Glasses Dev\", \"Run 60FPS translation overlay under 2W thermal cap.\", COLORS['OrangeLine'], \"UX: User reports the frames are 'uncomfortably warm' after 2 minutes.\"),\n \"TINY\": (\"Neural Hearable Lead\", \"Real-time speech isolation in \u003C10ms under 1mW.\", COLORS['GreenLine'], \"Hardware Lead: We have 256KB SRAM. Every weight bit is a liability.\")\n }\n\n _mission_ui = mo.md(\"_Please choose a specialization path above to initialize your ledger._\")\n if track_selector.value:\n name, mission, color, quote = _data[track_selector.value]\n _mission_ui = mo.vstack([\n StakeholderMessage(name, quote, color),\n Card(\"Design Ledger: Mission Initialized\", f\"\"\"\n **Persona:** {name}\u003Cbr/\u003E\n **North Star:** {mission}\u003Cbr/\u003E\u003Cbr/\u003E\n \u2705 **Quantitative intuition calibrated.**\u003Cbr/\u003E\n Proceed to **Lab 02: ML Systems** to begin your first performance audit.\n \"\"\")\n ])\n\n return mo.vstack([\n mo.md(\"## Part 4: Choose Your physical Regime\"),\n mo.md(\"Your choice defines your narrative and physical constraints for the next 15 labs.\"),\n track_selector,\n mo.md(\"---\"),\n _mission_ui\n ])\n\nrender_tab_4()", "code_hash": "73fa4befd9ff9eaffc4619153c9d53c2", "config": {"column": null, "disabled": false, "hide_code": false}, "id": "SFPL", "name": "__"}], "metadata": {"marimo_version": "0.19.6"}, "version": "1"},
|
|
"session": {"cells": [{"code_hash": "d23b36ac16dc24cc6f9b22859f71de65", "console": [], "id": "Hbol", "outputs": [{"data": {"text/plain": ""}, "type": "data"}]}, {"code_hash": "18ef5e8532f309b11c82c9f99af8da96", "console": [], "id": "MJUe", "outputs": [{"data": {"text/html": "\u003Cdiv style='display: flex;flex: 1;flex-direction: column;justify-content: flex-start;align-items: normal;flex-wrap: nowrap;gap: 0.5rem'\u003E\n\u003Cstyle\u003E\n :root {\n --blue: #006395;\n --red: #CB202D;\n --green: #008F45;\n --text: #2c3e50;\n }\n\n .lab-container {\n font-family: 'Inter', -apple-system, sans-serif;\n color: var(--text);\n max-width: 900px;\n margin: auto;\n }\n\n .lab-card {\n background-color: white;\n border: 1px solid #dee2e6;\n border-radius: 12px;\n padding: 1.5rem;\n height: 100%;\n box-shadow: 0 4px 12px rgba(0,0,0,0.03);\n display: flex;\n flex-direction: column;\n }\n\n .lab-card h3 {\n margin-top: 0;\n font-size: 0.9rem;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: #7f8c8d;\n border-bottom: 1px solid #eee;\n padding-bottom: 8px;\n margin-bottom: 1rem;\n }\n\n .metric-row {\n display: flex;\n justify-content: space-between;\n padding: 8px 0;\n border-bottom: 1px solid #f8f9fa;\n }\n\n .metric-label { font-weight: 500; color: #7f8c8d; font-size: 0.9rem; }\n .metric-value { font-family: 'SF Mono', monospace; font-weight: 600; color: var(--blue); }\n\n .prediction-box {\n background-color: #FFE5CC;\n border-left: 4px solid #CC5500;\n padding: 1rem;\n border-radius: 8px;\n margin: 1rem 0;\n }\n\n .feasibility-banner {\n padding: 1rem;\n border-radius: 10px;\n font-weight: 700;\n text-align: center;\n margin-bottom: 2rem;\n box-shadow: 0 4px 15px rgba(0,0,0,0.1);\n }\n\n .stakeholder-card {\n background: #f8f9fa;\n border-radius: 12px;\n padding: 1.5rem;\n border-left: 6px solid var(--blue);\n margin-top: 1rem;\n }\n\u003C/style\u003E\n\u003Cspan class=\"markdown prose dark:prose-invert contents\"\u003E\u003Ch1 id=\"lab-01-the-quantitative-orientation\"\u003E\ud83d\ude80 Lab 01: The Quantitative Orientation\u003C/h1\u003E\u003C/span\u003E\u003Cspan class=\"markdown prose dark:prose-invert contents\"\u003E\u003Ch3 id=\"system-design-is-the-calculus-of-trade-offs\"\u003E\u003Cstrong\u003ESystem Design is the Calculus of Trade-offs\u003C/strong\u003E\u003C/h3\u003E\n\u003Cspan class=\"paragraph\"\u003EIn the tradition of \u003Cstrong\u003EHennessy \u0026amp; Patterson\u003C/strong\u003E, this laboratory replaces intuition with measurement. We define \u003Cstrong\u003EAI Engineering\u003C/strong\u003E as the discipline of building stochastic systems with deterministic reliability.\u003C/span\u003E\n\u003Cspan class=\"paragraph\"\u003ETo succeed, you must move beyond \"it feels slow\" to \"\u003Cstrong\u003EThe memory bandwidth is 100,000x smaller than required.\u003C/strong\u003E\" This lab uses real machine invariants to calibrate your quantitative intuition.\u003C/span\u003E\u003C/span\u003E\u003C/div\u003E"}, "type": "data"}]}, {"code_hash": "61fff62e3554e0b191acd1fd8a84f95b", "console": [], "id": "vblA", "outputs": [{"data": {"text/html": "\u003Cmarimo-ui-element object-id='vblA-0' random-id='452729e6-433e-1d37-1581-8c2b70decf86'\u003E\u003Cmarimo-tabs data-initial-value='\u0026quot;\u0026quot;' data-label='null' data-tabs='[\u0026quot;\u0026lt;span class=\u0026#92;\u0026quot;markdown prose dark:prose-invert contents\u0026#92;\u0026quot;\u0026gt;\u0026lt;ol\u0026gt;\u0026#92;n\u0026lt;li\u0026gt;THE MAGNITUDE GAP\u0026lt;/li\u0026gt;\u0026#92;n\u0026lt;/ol\u0026gt;\u0026lt;/span\u0026gt;\u0026quot;,\u0026quot;\u0026lt;span class=\u0026#92;\u0026quot;markdown prose dark:prose-invert contents\u0026#92;\u0026quot;\u0026gt;\u0026lt;ol start=\u0026#92;\u0026quot;2\u0026#92;\u0026quot;\u0026gt;\u0026#92;n\u0026lt;li\u0026gt;THE BITTER LESSON\u0026lt;/li\u0026gt;\u0026#92;n\u0026lt;/ol\u0026gt;\u0026lt;/span\u0026gt;\u0026quot;,\u0026quot;\u0026lt;span class=\u0026#92;\u0026quot;markdown prose dark:prose-invert contents\u0026#92;\u0026quot;\u0026gt;\u0026lt;ol start=\u0026#92;\u0026quot;3\u0026#92;\u0026quot;\u0026gt;\u0026#92;n\u0026lt;li\u0026gt;THE VERIFICATION GAP\u0026lt;/li\u0026gt;\u0026#92;n\u0026lt;/ol\u0026gt;\u0026lt;/span\u0026gt;\u0026quot;,\u0026quot;\u0026lt;span class=\u0026#92;\u0026quot;markdown prose dark:prose-invert contents\u0026#92;\u0026quot;\u0026gt;\u0026lt;ol start=\u0026#92;\u0026quot;4\u0026#92;\u0026quot;\u0026gt;\u0026#92;n\u0026lt;li\u0026gt;CLAIM MISSION\u0026lt;/li\u0026gt;\u0026#92;n\u0026lt;/ol\u0026gt;\u0026lt;/span\u0026gt;\u0026quot;]'\u003E\u003Cdiv data-kind='tab'\u003E\u003Cspan class=\"markdown prose dark:prose-invert contents\"\u003E\u003C/span\u003E\u003C/div\u003E\u003Cdiv data-kind='tab'\u003E\u003Cspan class=\"markdown prose dark:prose-invert contents\"\u003E\u003C/span\u003E\u003C/div\u003E\u003Cdiv data-kind='tab'\u003E\u003Cspan class=\"markdown prose dark:prose-invert contents\"\u003E\u003C/span\u003E\u003C/div\u003E\u003Cdiv data-kind='tab'\u003E\u003Cspan class=\"markdown prose dark:prose-invert contents\"\u003E\u003C/span\u003E\u003C/div\u003E\u003C/marimo-tabs\u003E\u003C/marimo-ui-element\u003E"}, "type": "data"}]}, {"code_hash": "bafa88ed6810a00143282cfe23f1f852", "console": [], "id": "bkHC", "outputs": [{"data": {"text/plain": ""}, "type": "data"}]}, {"code_hash": "0f8d1fb4d9ee56c0385789c789542c6d", "console": [], "id": "lEQa", "outputs": [{"data": {"text/html": "\u003Cdiv style='display: flex;flex: 1;flex-direction: column;justify-content: flex-start;align-items: normal;flex-wrap: nowrap;gap: 0.5rem'\u003E\u003Cmarimo-ui-element object-id='bkHC-0' random-id='e879231d-07d5-7dff-eb17-ba67fe27e7de'\u003E\u003Cmarimo-text-area data-initial-value='\u0026quot;\u0026quot;' data-label='\u0026quot;\u0026lt;span class=\u0026#92;\u0026quot;markdown prose dark:prose-invert contents\u0026#92;\u0026quot;\u0026gt;\u0026lt;span class=\u0026#92;\u0026quot;paragraph\u0026#92;\u0026quot;\u0026gt;PREDICT: By what factor (ratio) does an H100 (Cloud) exceed an ESP32 (TinyML) in peak TFLOPS?\u0026lt;/span\u0026gt;\u0026lt;/span\u0026gt;\u0026quot;' data-placeholder='\u0026quot;Type your quantitative hypothesis...\u0026quot;' data-disabled='false' data-debounce='true' data-full-width='true'\u003E\u003C/marimo-text-area\u003E\u003C/marimo-ui-element\u003E\n \u003Cdiv class=\"prediction-box\"\u003E\n \u003Cspan style=\"font-weight:700;\"\u003E\u26a0\ufe0f TASK 1 LOCKED\u003C/span\u003E\u003Cbr/\u003E\n Analyze the textbook math and enter a prediction to unlock the instruments.\n \u003C/div\u003E\n \u003C/div\u003E"}, "type": "data"}]}, {"code_hash": "9bd542818bd6d9dd9bf5b5eae9d4fdc6", "console": [], "id": "PKri", "outputs": [{"data": {"text/plain": ""}, "type": "data"}]}, {"code_hash": "81d02c5e71d714d9b3b7f9f41fbed8cd", "console": [], "id": "Xref", "outputs": [{"data": {"text/plain": ""}, "type": "data"}]}, {"code_hash": "73fa4befd9ff9eaffc4619153c9d53c2", "console": [], "id": "SFPL", "outputs": [{"data": {"text/plain": ""}, "type": "data"}]}], "metadata": {"marimo_version": "0.19.6"}, "version": "1"},
|
|
"runtimeConfig": null,
|
|
};
|
|
</script>
|
|
|
|
<marimo-code hidden="">
|
|
import%20marimo%0A%0A__generated_with%20%3D%20%220.19.6%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20sys%0A%20%20%20%20import%20os%0A%20%20%20%20from%20pathlib%20import%20Path%0A%20%20%20%20import%20plotly.graph_objects%20as%20go%0A%20%20%20%20import%20numpy%20as%20np%0A%0A%20%20%20%20%23%20---%20PATHS%20---%0A%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20notebook_path%20%3D%20Path(os.path.abspath(__file__))%0A%20%20%20%20except%20NameError%3A%0A%20%20%20%20%20%20%20%20notebook_path%20%3D%20Path(os.getcwd())%20%2F%20%22labs%22%20%2F%20%22vol1%22%20%2F%20%22lab_01_ml_intro.py%22%0A%0A%20%20%20%20project_root%20%3D%20notebook_path.parents%5B2%5D%0A%20%20%20%20sys.path.append(str(project_root%20%2F%20%22book%22%20%2F%20%22quarto%22))%0A%20%20%20%20sys.path.append(str(project_root))%0A%0A%20%20%20%20from%20mlsys%20import%20Engine%2C%20Models%2C%20Systems%2C%20ureg%2C%20Q_%0A%20%20%20%20from%20labs.core.style%20import%20COLORS%2C%20LAB_CSS%2C%20apply_plotly_theme%0A%20%20%20%20from%20labs.core.components%20import%20Card%2C%20PredictionLock%2C%20MetricRow%2C%20ComparisonRow%2C%20StakeholderMessage%0A%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20COLORS%2C%0A%20%20%20%20%20%20%20%20Card%2C%0A%20%20%20%20%20%20%20%20ComparisonRow%2C%0A%20%20%20%20%20%20%20%20LAB_CSS%2C%0A%20%20%20%20%20%20%20%20MetricRow%2C%0A%20%20%20%20%20%20%20%20PredictionLock%2C%0A%20%20%20%20%20%20%20%20StakeholderMessage%2C%0A%20%20%20%20%20%20%20%20Systems%2C%0A%20%20%20%20%20%20%20%20apply_plotly_theme%2C%0A%20%20%20%20%20%20%20%20go%2C%0A%20%20%20%20%20%20%20%20mo%2C%0A%20%20%20%20%20%20%20%20np%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell%0Adef%20_(LAB_CSS%2C%20mo)%3A%0A%20%20%20%20%23%20---%20GLOBAL%20PRIMER%20---%0A%20%20%20%20mo.vstack(%5B%0A%20%20%20%20%20%20%20%20LAB_CSS%2C%0A%20%20%20%20%20%20%20%20mo.md(%22%23%20%F0%9F%9A%80%20Lab%2001%3A%20The%20Quantitative%20Orientation%22)%2C%0A%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%23%23%20**System%20Design%20is%20the%20Calculus%20of%20Trade-offs**%0A%20%20%20%20%20%20%20%20%20%20%20%20In%20the%20tradition%20of%20**Hennessy%20%26%20Patterson**%2C%20this%20laboratory%20replaces%20intuition%20with%20measurement.%20We%20define%20**AI%20Engineering**%20as%20the%20discipline%20of%20building%20stochastic%20systems%20with%20deterministic%20reliability.%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20To%20succeed%2C%20you%20must%20move%20beyond%20%22it%20feels%20slow%22%20to%20%22**The%20memory%20bandwidth%20is%20100%2C000x%20smaller%20than%20required.**%22%20This%20lab%20uses%20real%20machine%20invariants%20to%20calibrate%20your%20quantitative%20intuition.%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%5D)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20%23%20---%20NAVIGATION%20---%0A%20%20%20%20tabs%20%3D%20mo.ui.tabs(%7B%0A%20%20%20%20%20%20%20%20%221.%20THE%20MAGNITUDE%20GAP%22%3A%20mo.md(%22%22)%2C%20%0A%20%20%20%20%20%20%20%20%222.%20THE%20BITTER%20LESSON%22%3A%20mo.md(%22%22)%2C%0A%20%20%20%20%20%20%20%20%223.%20THE%20VERIFICATION%20GAP%22%3A%20mo.md(%22%22)%2C%0A%20%20%20%20%20%20%20%20%224.%20CLAIM%20MISSION%22%3A%20mo.md(%22%22)%0A%20%20%20%20%7D)%0A%20%20%20%20tabs%0A%20%20%20%20return%20(tabs%2C)%0A%0A%0A%40app.cell%0Adef%20_(PredictionLock%2C%20mo)%3A%0A%20%20%20%20%23%20---%20GLOBAL%20UI%20STATE%20---%0A%20%20%20%20%23%20Part%201%0A%20%20%20%20p1_val%2C%20p1_lock_ui%20%3D%20PredictionLock(1%2C%20%22By%20what%20factor%20(ratio)%20does%20an%20H100%20(Cloud)%20exceed%20an%20ESP32%20(TinyML)%20in%20peak%20TFLOPS%3F%22)%0A%20%20%20%20p1_tier_slider%20%3D%20mo.ui.slider(start%3D0%2C%20stop%3D3%2C%20step%3D1%2C%20value%3D0%2C%20label%3D%22Select%20Target%20Archetype%20(Tiny%20%E2%86%92%20Cloud)%22)%0A%0A%20%20%20%20%23%20Part%202%0A%20%20%20%20p2_val%2C%20p2_lock_ui%20%3D%20PredictionLock(2%2C%20%22Based%20on%20historical%20data%2C%20which%20axis%20has%20delivered%20more%20'Accuracy-per-Dollar'%3A%20Human%20Algorithm%20Tuning%20or%20Machine%20Scaling%3F%22)%0A%20%20%20%20p2_time_slider%20%3D%20mo.ui.slider(start%3D2012%2C%20stop%3D2024%2C%20step%3D1%2C%20value%3D2012%2C%20label%3D%22Year%20of%20Analysis%22)%0A%0A%20%20%20%20%23%20Part%203%0A%20%20%20%20p3_val%2C%20p3_lock_ui%20%3D%20PredictionLock(3%2C%20%22Given%20the%20input%20space%20of%20a%20standard%20vision%20model%2C%20can%20we%20achieve%201%25%20coverage%20through%20testing%20alone%3F%22)%0A%20%20%20%20p3_img_res%20%3D%20mo.ui.number(start%3D32%2C%20stop%3D1024%2C%20step%3D32%2C%20value%3D224%2C%20label%3D%22Input%20Resolution%20(Width%2FHeight)%22)%0A%20%20%20%20p3_test_rate%20%3D%20mo.ui.number(start%3D1%2C%20stop%3D10000%2C%20value%3D100%2C%20label%3D%22Test%20Rate%20(Samples%2FSecond)%22)%0A%0A%20%20%20%20%23%20Part%204%0A%20%20%20%20track_selector%20%3D%20mo.ui.radio(%0A%20%20%20%20%20%20%20%20options%3D%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%E2%98%81%EF%B8%8F%20Cloud%20Titan%20(LLM%20Serving)%22%3A%20%22CLOUD%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%F0%9F%A4%96%20Edge%20Guardian%20(AV%20Systems)%22%3A%20%22EDGE%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%F0%9F%95%B6%EF%B8%8F%20Mobile%20Nomad%20(AR%20Glasses)%22%3A%20%22MOBILE%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%F0%9F%91%82%20Tiny%20Pioneer%20(Neural%20Hearing)%22%3A%20%22TINY%22%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20label%3D%22Select%20your%20Career%20Specialization%20Track%22%0A%20%20%20%20)%0A%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20p1_lock_ui%2C%0A%20%20%20%20%20%20%20%20p1_tier_slider%2C%0A%20%20%20%20%20%20%20%20p1_val%2C%0A%20%20%20%20%20%20%20%20p2_lock_ui%2C%0A%20%20%20%20%20%20%20%20p2_time_slider%2C%0A%20%20%20%20%20%20%20%20p2_val%2C%0A%20%20%20%20%20%20%20%20p3_img_res%2C%0A%20%20%20%20%20%20%20%20p3_lock_ui%2C%0A%20%20%20%20%20%20%20%20p3_test_rate%2C%0A%20%20%20%20%20%20%20%20p3_val%2C%0A%20%20%20%20%20%20%20%20track_selector%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20Card%2C%0A%20%20%20%20ComparisonRow%2C%0A%20%20%20%20Systems%2C%0A%20%20%20%20apply_plotly_theme%2C%0A%20%20%20%20go%2C%0A%20%20%20%20mo%2C%0A%20%20%20%20np%2C%0A%20%20%20%20p1_lock_ui%2C%0A%20%20%20%20p1_tier_slider%2C%0A%20%20%20%20p1_val%2C%0A%20%20%20%20tabs%2C%0A)%3A%0A%20%20%20%20%23%20---%20TAB%201%3A%20THE%20MAGNITUDE%20GAP%20---%0A%20%20%20%20def%20render_tab_1()%3A%0A%20%20%20%20%20%20%20%20mo.stop(tabs.value%20!%3D%20%221.%20THE%20MAGNITUDE%20GAP%22)%0A%20%20%20%20%20%20%20%20if%20p1_val.value%20%3D%3D%20%22%22%3A%20return%20p1_lock_ui%0A%0A%20%20%20%20%20%20%20%20baseline%20%3D%20Systems.Tiny%0A%20%20%20%20%20%20%20%20_tiers%20%3D%20%5BSystems.Tiny%2C%20Systems.Mobile%2C%20Systems.Edge%2C%20Systems.Cloud%5D%0A%20%20%20%20%20%20%20%20selected%20%3D%20_tiers%5Bp1_tier_slider.value%5D%0A%0A%20%20%20%20%20%20%20%20%23%20Plot%3A%20Absolute%20Values%20(Log%20Scale)%0A%20%20%20%20%20%20%20%20fig%20%3D%20go.Figure()%0A%20%20%20%20%20%20%20%20fig.add_trace(go.Bar(%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3D%5B'RAM%20(GB)'%2C%20'Compute%20(TFLOPS)'%2C%20'Power%20(W)'%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3D%5Bnp.log10(max(selected.ram.m_as('GB')%2C%201e-6))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20np.log10(max(selected.peak_flops.m_as('TFLOPs%2Fs')%2C%201e-6))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20np.log10(max(selected.power_budget.m_as('watt')%2C%201e-6))%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3D%5Bf%22%7Bselected.ram%3A~%7D%22%2C%20f%22%7Bselected.peak_flops%3A~%7D%22%2C%20f%22%7Bselected.power_budget%3A~%7D%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20textposition%3D'auto'%2C%20marker_color%3D%22%23006395%22%0A%20%20%20%20%20%20%20%20))%0A%20%20%20%20%20%20%20%20fig.update_layout(yaxis%3Ddict(range%3D%5B-6%2C%206%5D%2C%20title%3D%22Log10%20Magnitude%22)%2C%20height%3D300)%0A%0A%20%20%20%20%20%20%20%20%23%20Comparison%20logic%0A%20%20%20%20%20%20%20%20comp_metrics%20%3D%20mo.Html(%22%22.join(%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20ComparisonRow(%22RAM%20Gap%22%2C%20baseline.ram%2C%20selected.ram%2C%20%22GB%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20ComparisonRow(%22Compute%20Gap%22%2C%20baseline.peak_flops%2C%20selected.peak_flops%2C%20%22TFLOPS%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20ComparisonRow(%22Power%20Gap%22%2C%20baseline.power_budget%2C%20selected.power_budget%2C%20%22W%22)%0A%20%20%20%20%20%20%20%20%5D))%0A%0A%20%20%20%20%20%20%20%20return%20mo.vstack(%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22%23%23%20Part%201%3A%20Quantifying%20the%20Magnitude%20Gap%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(f%22Compare%20**%7Bselected.name%7D**%20against%20the%20**%7Bbaseline.name%7D**%20baseline.%20Design%20space%20exploration%20requires%20reasoning%20across%20%2410%5E9%24%20differences.%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20p1_tier_slider%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.hstack(%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Card(%22Log-Scale%20Architecture%20View%22%2C%20mo.as_html(apply_plotly_theme(fig)))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Card(%22Scaling%20Ratios%20(vs.%20Tiny)%22%2C%20comp_metrics)%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%20widths%3D%5B2%2C%201%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.ui.text_area(label%3D%22REFLECT%3A%20Which%20axis%20(D%2C%20A%2C%20or%20M)%20is%20most%20responsible%20for%20this%209-order-of-magnitude%20span%3F%22)%0A%20%20%20%20%20%20%20%20%5D)%0A%0A%20%20%20%20render_tab_1()%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20Card%2C%0A%20%20%20%20MetricRow%2C%0A%20%20%20%20apply_plotly_theme%2C%0A%20%20%20%20go%2C%0A%20%20%20%20mo%2C%0A%20%20%20%20p2_lock_ui%2C%0A%20%20%20%20p2_time_slider%2C%0A%20%20%20%20p2_val%2C%0A%20%20%20%20tabs%2C%0A)%3A%0A%20%20%20%20%23%20---%20TAB%202%3A%20THE%20BITTER%20LESSON%20(DATA-DRIVEN)%20---%0A%20%20%20%20def%20render_tab_2()%3A%0A%20%20%20%20%20%20%20%20mo.stop(tabs.value%20!%3D%20%222.%20THE%20BITTER%20LESSON%22)%0A%20%20%20%20%20%20%20%20if%20p2_val.value%20%3D%3D%20%22%22%3A%20return%20p2_lock_ui%0A%0A%20%20%20%20%20%20%20%20%23%20Actual%20Benchmark%20Data%20Points%20from%20mlsys%0A%20%20%20%20%20%20%20%20history%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%22year%22%3A%202012%2C%20%22name%22%3A%20%22AlexNet%22%2C%20%22flops%22%3A%201.2e18%2C%20%22acc%22%3A%2084.7%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%22year%22%3A%202015%2C%20%22name%22%3A%20%22ResNet-50%22%2C%20%22flops%22%3A%205.0e19%2C%20%22acc%22%3A%2092.4%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%22year%22%3A%202018%2C%20%22name%22%3A%20%22BERT-Large%22%2C%20%22flops%22%3A%203.0e21%2C%20%22acc%22%3A%2095.0%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%22year%22%3A%202020%2C%20%22name%22%3A%20%22GPT-3%22%2C%20%22flops%22%3A%203.1e23%2C%20%22acc%22%3A%2098.0%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%22year%22%3A%202023%2C%20%22name%22%3A%20%22GPT-4%22%2C%20%22flops%22%3A%202.0e25%2C%20%22acc%22%3A%2099.0%7D%0A%20%20%20%20%20%20%20%20%5D%0A%0A%20%20%20%20%20%20%20%20visible%20%3D%20%5Bp%20for%20p%20in%20history%20if%20p%5B'year'%5D%20%3C%3D%20p2_time_slider.value%5D%0A%20%20%20%20%20%20%20%20latest%20%3D%20visible%5B-1%5D%0A%0A%20%20%20%20%20%20%20%20fig%20%3D%20go.Figure()%0A%20%20%20%20%20%20%20%20%23%20Learning%20Curve%20(Power%20Law)%0A%20%20%20%20%20%20%20%20fig.add_trace(go.Scatter(%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3D%5Bp%5B'flops'%5D%20for%20p%20in%20history%5D%2C%20y%3D%5Bp%5B'acc'%5D%20for%20p%20in%20history%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mode%3D'lines'%2C%20line%3Ddict(color%3D%22%23bdc3c7%22%2C%20dash%3D'dot')%2C%20name%3D%22Scaling%20Law%20Trend%22%0A%20%20%20%20%20%20%20%20))%0A%20%20%20%20%20%20%20%20%23%20Actual%20Points%0A%20%20%20%20%20%20%20%20fig.add_trace(go.Scatter(%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3D%5Bp%5B'flops'%5D%20for%20p%20in%20visible%5D%2C%20y%3D%5Bp%5B'acc'%5D%20for%20p%20in%20visible%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mode%3D'markers%2Btext'%2C%20text%3D%5Bp%5B'name'%5D%20for%20p%20in%20visible%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20textposition%3D%22top%20center%22%2C%20marker%3Ddict(size%3D12%2C%20color%3D%22%23CB202D%22)%2C%20name%3D%22Verified%20Benchmarks%22%0A%20%20%20%20%20%20%20%20))%0A%0A%20%20%20%20%20%20%20%20fig.update_layout(xaxis_type%3D%22log%22%2C%20xaxis_title%3D%22Training%20Compute%20(FLOPs)%22%2C%20yaxis_title%3D%22Relative%20Capability%20%25%22%2C%20height%3D300)%0A%0A%20%20%20%20%20%20%20%20_stats%20%3D%20mo.Html(%22%22.join(%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20MetricRow(%22Leading%20Model%22%2C%20latest%5B'name'%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20MetricRow(%22Compute%20Scale%22%2C%20f%22%7Blatest%5B'flops'%5D%3A.1e%7D%20FLOPs%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20MetricRow(%22Era%22%2C%20%22Software%202.0%20(Learning)%22%20if%20latest%5B'year'%5D%20%3E%3D%202012%20else%20%22Software%201.0%22)%0A%20%20%20%20%20%20%20%20%5D))%0A%0A%20%20%20%20%20%20%20%20return%20mo.vstack(%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22%23%23%20Part%202%3A%20Proving%20the%20Bitter%20Lesson%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22Step%20through%20the%20history%20of%20AI.%20Observe%20how%20performance%20scales%20with%20**Computation**%20rather%20than%20manual%20rule-writing.%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20p2_time_slider%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.hstack(%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Card(%22The%20Historical%20Record%22%2C%20mo.as_html(apply_plotly_theme(fig)))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Card(%22System%20State%22%2C%20_stats)%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%20widths%3D%5B2%2C%201%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.ui.text_area(label%3D%22REFLECT%3A%20At%20current%20scaling%20rates%2C%20is%20human%20'feature%20engineering'%20still%20an%20economical%20investment%3F%22)%0A%20%20%20%20%20%20%20%20%5D)%0A%0A%20%20%20%20render_tab_2()%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20Card%2C%0A%20%20%20%20MetricRow%2C%0A%20%20%20%20mo%2C%0A%20%20%20%20np%2C%0A%20%20%20%20p3_img_res%2C%0A%20%20%20%20p3_lock_ui%2C%0A%20%20%20%20p3_test_rate%2C%0A%20%20%20%20p3_val%2C%0A%20%20%20%20tabs%2C%0A)%3A%0A%20%20%20%20%23%20---%20TAB%203%3A%20THE%20VERIFICATION%20GAP%20---%0A%20%20%20%20def%20render_tab_3()%3A%0A%20%20%20%20%20%20%20%20mo.stop(tabs.value%20!%3D%20%223.%20THE%20VERIFICATION%20GAP%22)%0A%20%20%20%20%20%20%20%20if%20p3_val.value%20%3D%3D%20%22%22%3A%20return%20p3_lock_ui%0A%0A%20%20%20%20%20%20%20%20%23%20The%20Math%20of%20the%20Gap%0A%20%20%20%20%20%20%20%20num_pixels%20%3D%20p3_img_res.value%20*%20p3_img_res.value%20*%203%0A%20%20%20%20%20%20%20%20%23%20Space%20size%20%3D%20256%5Enum_pixels.%20%0A%20%20%20%20%20%20%20%20%23%20log10(size)%20%3D%20num_pixels%20*%20log10(256)%0A%20%20%20%20%20%20%20%20log_space%20%3D%20num_pixels%20*%20np.log10(256)%0A%0A%20%20%20%20%20%20%20%20%23%20How%20long%20to%20test%201%25%3F%0A%20%20%20%20%20%20%20%20%23%20One%20trillion%20images%20%3D%2010%5E12%0A%20%20%20%20%20%20%20%20%23%20Target%20samples%20%3D%200.01%20*%2010%5Elog_space%20(Impossible%20to%20calculate%20directly)%0A%0A%20%20%20%20%20%20%20%20%23%20Dimensioning%3A%20How%20many%20years%20to%20run%201%20billion%20tests%3F%0A%20%20%20%20%20%20%20%20samples_per_year%20%3D%20p3_test_rate.value%20*%203600%20*%2024%20*%20365%0A%20%20%20%20%20%20%20%20years_for_billion%20%3D%201e9%20%2F%20samples_per_year%0A%0A%20%20%20%20%20%20%20%20_results%20%3D%20mo.Html(%22%22.join(%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20MetricRow(%22Input%20State%20Space%22%2C%20f%2210%5E%7Blog_space%3A%2C.0f%7D%22%2C%20%22Possible%20RGB%20configs%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20MetricRow(%22Test%20Capacity%22%2C%20f%22%7Bsamples_per_year%3A%2C.0e%7D%20%2F%20yr%22%2C%20f%22At%20%7Bp3_test_rate.value%7D%20samples%2Fs%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20MetricRow(%221%25%20Coverage%20Time%22%2C%20%22%E2%88%9E%22%2C%20%22Exceeds%20age%20of%20universe%22)%0A%20%20%20%20%20%20%20%20%5D))%0A%0A%20%20%20%20%20%20%20%20return%20mo.vstack(%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22%23%23%20Part%203%3A%20The%20Verification%20Gap%20Audit%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22Quantify%20why%20ML%20systems%20are%20'untestable'%20in%20the%20traditional%20sense.%20Use%20the%20calculator%20to%20dimension%20a%20test%20suite.%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.hstack(%5Bp3_img_res%2C%20p3_test_rate%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.hstack(%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Card(%22The%20Physics%20of%20Uncertainty%22%2C%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22A%20**%7Bp3_img_res.value%7Dx%7Bp3_img_res.value%7D**%20image%20is%20a%20high-dimensional%20vector.%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Traditional%20'Unit%20Testing'%20assumes%20we%20can%20partition%20this%20space.%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22**The%20math%20proves%20we%20cannot.**%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Card(%22Audit%20Results%22%2C%20_results)%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%20widths%3D%5B1%2C%201%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.ui.text_area(label%3D%22REFLECT%3A%20Given%20this%20gap%2C%20how%20must%20our%20'Deployment'%20strategy%20change%3F%20(Hint%3A%20See%20MLOps%20Monitoring).%22)%0A%20%20%20%20%20%20%20%20%5D)%0A%0A%20%20%20%20render_tab_3()%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(COLORS%2C%20Card%2C%20StakeholderMessage%2C%20mo%2C%20tabs%2C%20track_selector)%3A%0A%20%20%20%20%23%20---%20TAB%204%3A%20CLAIM%20MISSION%20---%0A%20%20%20%20def%20render_tab_4()%3A%0A%20%20%20%20%20%20%20%20mo.stop(tabs.value%20!%3D%20%224.%20CLAIM%20MISSION%22)%0A%0A%20%20%20%20%20%20%20%20_data%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22CLOUD%22%3A%20(%22LLM%20Architect%22%2C%20%22Maximize%20Llama-3-70B%20serving%20on%20one%20H100%20node.%22%2C%20COLORS%5B'BlueLine'%5D%2C%20%22CFO%3A%20We%20are%20burning%20%2410k%2Fday.%20If%20utilization%20isn't%2080%25%2C%20you're%20fired.%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22EDGE%22%3A%20(%22AV%20Systems%20Lead%22%2C%20%22Maintain%2010ms%20safety-critical%20vision-to-brake%20loop.%22%2C%20COLORS%5B'RedLine'%5D%2C%20%22Safety%3A%20A%205ms%20jitter%20spike%20caused%20a%20phantom%20brake%20event.%20Fix%20it.%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22MOBILE%22%3A%20(%22AR%20Glasses%20Dev%22%2C%20%22Run%2060FPS%20translation%20overlay%20under%202W%20thermal%20cap.%22%2C%20COLORS%5B'OrangeLine'%5D%2C%20%22UX%3A%20User%20reports%20the%20frames%20are%20'uncomfortably%20warm'%20after%202%20minutes.%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22TINY%22%3A%20(%22Neural%20Hearable%20Lead%22%2C%20%22Real-time%20speech%20isolation%20in%20%3C10ms%20under%201mW.%22%2C%20COLORS%5B'GreenLine'%5D%2C%20%22Hardware%20Lead%3A%20We%20have%20256KB%20SRAM.%20Every%20weight%20bit%20is%20a%20liability.%22)%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20_mission_ui%20%3D%20mo.md(%22_Please%20choose%20a%20specialization%20path%20above%20to%20initialize%20your%20ledger._%22)%0A%20%20%20%20%20%20%20%20if%20track_selector.value%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20name%2C%20mission%2C%20color%2C%20quote%20%3D%20_data%5Btrack_selector.value%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20_mission_ui%20%3D%20mo.vstack(%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20StakeholderMessage(name%2C%20quote%2C%20color)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Card(%22Design%20Ledger%3A%20Mission%20Initialized%22%2C%20f%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20**Persona%3A**%20%7Bname%7D%3Cbr%2F%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20**North%20Star%3A**%20%7Bmission%7D%3Cbr%2F%3E%3Cbr%2F%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%E2%9C%85%20**Quantitative%20intuition%20calibrated.**%3Cbr%2F%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Proceed%20to%20**Lab%2002%3A%20ML%20Systems**%20to%20begin%20your%20first%20performance%20audit.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D)%0A%0A%20%20%20%20%20%20%20%20return%20mo.vstack(%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22%23%23%20Part%204%3A%20Choose%20Your%20physical%20Regime%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22Your%20choice%20defines%20your%20narrative%20and%20physical%20constraints%20for%20the%20next%2015%20labs.%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20track_selector%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22---%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20_mission_ui%0A%20%20%20%20%20%20%20%20%5D)%0A%0A%20%20%20%20render_tab_4()%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
|
|
</marimo-code>
|
|
|
|
<marimo-code-hash hidden="">80a66b0b1c336026d09b413e4fc7c58b</marimo-code-hash>
|
|
</body>
|
|
</html>
|