mirror of
https://github.com/harvard-edge/cs249r_book.git
synced 2026-05-01 01:59:10 -05:00
295 lines
70 KiB
HTML
295 lines
70 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_00_the_map.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 00 the map</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_00_the_map.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_00_the_map.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, StakeholderMessage\nfrom labs.core.state import DesignLedger\n\nledger = DesignLedger()\n", "code_hash": "3b058e1b92666ec4c73b6d105de30d2c", "config": {"column": null, "disabled": false, "hide_code": false}, "id": "Hbol", "name": "__"}, {"code": "# --- HEADER ---\nmo.vstack([\n LAB_CSS,\n mo.md(\"# \ud83d\uddfa\ufe0f Lab 00: The Systems Map\"),\n mo.md(\n r\"\"\"\n ### **Welcome to the Design Phase**\n This is the **Machine Learning Systems Laboratory**. To engineer AI systems at scale, you must master the **Read-Design-Build-Deploy** lifecycle. \n\n The textbook gives you the physics. These labs give you the **Simulator**.\n \"\"\"\n ),\n mo.md(\"\"\"\n ```mermaid\n graph LR\n A[\ud83d\udcd6 READ\u003Cbr\u003ETheory] --\u003E B[\ud83d\udcd0 DESIGN\u003Cbr\u003ELabs]\n style B fill:#006395,stroke:#333,stroke-width:4px,color:#fff\n B --\u003E C[\ud83c\udfd7\ufe0f BUILD\u003Cbr\u003ETinyTorch]\n C --\u003E D[\ud83d\ude80 DEPLOY\u003Cbr\u003EKits]\n ```\n \"\"\")\n])", "code_hash": "8bb2e63fb4739ba598605cb8dc1fd4c3", "config": {"column": null, "disabled": false, "hide_code": false}, "id": "MJUe", "name": "__"}, {"code": "# --- NAVIGATION ---\ntabs_onboarding = mo.ui.tabs({\n \"1. THE ECOSYSTEM\": mo.md(\"\"),\n \"2. THE GEARBOX\": mo.md(\"\"),\n \"3. CLAIM MISSION\": mo.md(\"\")\n})\ntabs_onboarding", "code_hash": "1563afa93ff59b193876dbe446598ba1", "config": {"column": null, "disabled": false, "hide_code": false}, "id": "vblA", "name": "__"}, {"code": "# --- PART 1: THE ECOSYSTEM AUDIT ---\ndef render_part_1():\n mo.stop(tabs_onboarding.value != \"1. THE ECOSYSTEM\")\n\n _budget = mo.ui.slider(start=0, stop=100, step=10, value=10, label=\"Design Phase Investment (Hours)\")\n\n return mo.vstack([\n mo.md(\"## Part 1: The Vision\"),\n mo.md(\"The cost of discovering a physical constraint (like RAM limits) increases exponentially as you move from Design to Deployment. Analyze the 'Risk-Reward' of early simulation.\"),\n _budget,\n mo.hstack([\n Card(\"Efficiency Gain\", mo.md(f\"By investing **{_budget.value} hours** in Design, you reduce integration risk by **{_budget.value * 2}%**.\")),\n Card(\"Cost Invariant\", \"Mistakes in 'Deploy' cost **100x** more than mistakes in 'Design'.\")\n ]),\n mo.ui.text_area(label=\"REFLECT: Why is the 'Design' phase the bridge between theory and hardware?\")\n ])\n\nrender_part_1()", "code_hash": "fd546c42380f1f496817ece252c11294", "config": {"column": null, "disabled": false, "hide_code": false}, "id": "bkHC", "name": "__"}, {"code": "# --- PART 2: GEARBOX DEFINITIONS ---\nmo.stop(tabs_onboarding.value != \"2. THE GEARBOX\")\n\n# Task 2 Prediction Lock\np0_val, p0_ui = PredictionLock(0, \"If you double the clock frequency (f) of a processor, does the Power draw (P) double, quadruple, or increase cubically?\")\n", "code_hash": "22965edd608dc389fdf91b89c50c64e9", "config": {"column": null, "disabled": false, "hide_code": false}, "id": "lEQa", "name": "__"}, {"code": "# --- PART 2: THE GEARBOX (TUTORIAL) ---\ndef render_part_2():\n if p0_val.value == \"\": return p0_ui\n\n _freq = mo.ui.slider(start=1, stop=4, step=0.1, value=1, label=\"Clock Frequency (GHz)\")\n\n # Math: Power scales with f^3 (Simplified for tutorial)\n _f_vals = np.linspace(1, 4, 50)\n _p_vals = _f_vals**3\n\n _fig = go.Figure()\n _fig.add_trace(go.Scatter(x=_f_vals, y=_p_vals, name=\"Power Wall\", line=dict(color=COLORS['RedLine'], width=4)))\n _curr_p = _freq.value**3\n _fig.add_trace(go.Scatter(x=[_freq.value], y=[_curr_p], mode='markers', marker=dict(size=15, color=COLORS['BlueLine'])))\n\n _fig.update_layout(xaxis_title=\"Frequency (GHz)\", yaxis_title=\"Power (W)\", height=250)\n\n return mo.vstack([\n mo.md(\"## Part 2: The Gearbox Certification\"),\n mo.md(\"To prevent 'slider guessing', all instruments are locked until you hypothesize. Witness the non-linear **Power Wall** below.\"),\n _freq,\n mo.hstack([\n Card(\"The Cubic Law (P \u221d f\u00b3)\", mo.as_html(apply_plotly_theme(_fig))),\n Card(\"Quantitative Reality\", f\"Current Power: \u003Cspan class='metric-value'\u003E{_curr_p:.1f} W\u003C/span\u003E\")\n ], widths=[2, 1]),\n mo.ui.text_area(label=\"REFLECT: Reconcile the result. Why did doubling the speed result in 8x more heat?\")\n ])\n\nrender_part_2()", "code_hash": "ee1c004b5f467ccff6faaa13d9452d2c", "config": {"column": null, "disabled": false, "hide_code": false}, "id": "PKri", "name": "__"}, {"code": "# --- PART 3: TRACK SELECTION ---\nmo.stop(tabs_onboarding.value != \"3. CLAIM MISSION\")\n\n_selector = mo.ui.radio(\n options={\n \"\u2601\ufe0f Cloud Titan (LLM)\": \"CLOUD\",\n \"\ud83e\udd16 Edge Guardian (AV)\": \"EDGE\",\n \"\ud83d\udd76\ufe0f Mobile Nomad (AR)\": \"MOBILE\",\n \"\ud83d\udc42 Tiny Pioneer (Hearable)\": \"TINY\"\n },\n label=\"Select your Career Specialization Track\"\n)\n\n_data = {\n \"CLOUD\": (\"LLM Architect\", \"Maximize Llama-3-70B serving on one H100.\", COLORS['BlueLine'], \"The Memory Wall\"),\n \"EDGE\": (\"AV Lead\", \"Maintain 10ms safety-critical loop on Orin.\", COLORS['RedLine'], \"The Determinism Wall\"),\n \"MOBILE\": (\"AR Glasses Dev\", \"60FPS overlay under 2W thermal cap.\", COLORS['OrangeLine'], \"The Power Wall\"),\n \"TINY\": (\"Hearable Lead\", \"Neural isolation in \u003C10ms under 1mW.\", COLORS['GreenLine'], \"The Echo Wall\")\n}\n\ndef render_selection():\n if _selector.value is None: return mo.md(\"_Choose your path._\")\n name, mission, color, wall = _data[_selector.value]\n\n return mo.vstack([\n mo.md(f\"### \ud83c\udf96\ufe0f MISSION GRANTED: {name}\"),\n mo.md(f\"\"\"\n \u003Cdiv style='padding:20px; border-left:8px solid {color}; background:#f8faff;'\u003E\n \u003Cstrong\u003EMission:\u003C/strong\u003E {mission}\u003Cbr/\u003E\n \u003Cstrong\u003EArch Nemesis:\u003C/strong\u003E \u003Cspan style='color:{COLORS['RedLine']};'\u003E{wall}\u003C/span\u003E\n \u003C/div\u003E\n \"\"\"),\n Card(\"Roadmap Initialized\", \"\u2705 Your Design Ledger has been synchronized.\u003Cbr/\u003E\u003Cbr/\u003E\ud83d\udc49 **Proceed to Lab 01: The Quantitative Orientation.**\")\n ])", "code_hash": "83311ac163e2036073a16753b946ab9e", "config": {"column": null, "disabled": false, "hide_code": false}, "id": "Xref", "name": "__"}], "metadata": {"marimo_version": "0.19.6"}, "version": "1"},
|
|
"session": {"cells": [{"code_hash": "3b058e1b92666ec4c73b6d105de30d2c", "console": [], "id": "Hbol", "outputs": [{"data": {"text/plain": ""}, "type": "data"}]}, {"code_hash": "8bb2e63fb4739ba598605cb8dc1fd4c3", "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-00-the-systems-map\"\u003E\ud83d\uddfa\ufe0f Lab 00: The Systems Map\u003C/h1\u003E\u003C/span\u003E\u003Cspan class=\"markdown prose dark:prose-invert contents\"\u003E\u003Ch3 id=\"welcome-to-the-design-phase\"\u003E\u003Cstrong\u003EWelcome to the Design Phase\u003C/strong\u003E\u003C/h3\u003E\n\u003Cspan class=\"paragraph\"\u003EThis is the \u003Cstrong\u003EMachine Learning Systems Laboratory\u003C/strong\u003E. To engineer AI systems at scale, you must master the \u003Cstrong\u003ERead-Design-Build-Deploy\u003C/strong\u003E lifecycle. \u003C/span\u003E\n\u003Cspan class=\"paragraph\"\u003EThe textbook gives you the physics. These labs give you the \u003Cstrong\u003ESimulator\u003C/strong\u003E.\u003C/span\u003E\u003C/span\u003E\u003Cspan class=\"markdown prose dark:prose-invert contents\"\u003E\u003Cdiv class=\"language-ecl codehilite\"\u003E\u003Cpre\u003E\u003Cspan\u003E\u003C/span\u003E\u003Ccode\u003E\u003Cspan class=\"nf\"\u003Egraph\u003C/span\u003E\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"n\"\u003ELR\u003C/span\u003E\n\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"n\"\u003EA\u003C/span\u003E\u003Cspan class=\"p\"\u003E[\u003C/span\u003E\u003Cspan class=\"err\"\u003E\ud83d\udcd6\u003C/span\u003E\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"n\"\u003EREAD\u003C/span\u003E\u003Cspan class=\"o\"\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\"n\"\u003Ebr\u003C/span\u003E\u003Cspan class=\"o\"\u003E\u0026gt;\u003C/span\u003E\u003Cspan class=\"n\"\u003ETheory\u003C/span\u003E\u003Cspan class=\"p\"\u003E]\u003C/span\u003E\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"o\"\u003E--\u0026gt;\u003C/span\u003E\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"n\"\u003EB\u003C/span\u003E\u003Cspan class=\"p\"\u003E[\u003C/span\u003E\u003Cspan class=\"err\"\u003E\ud83d\udcd0\u003C/span\u003E\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"n\"\u003EDESIGN\u003C/span\u003E\u003Cspan class=\"o\"\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\"n\"\u003Ebr\u003C/span\u003E\u003Cspan class=\"o\"\u003E\u0026gt;\u003C/span\u003E\u003Cspan class=\"n\"\u003ELabs\u003C/span\u003E\u003Cspan class=\"p\"\u003E]\u003C/span\u003E\n\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"n\"\u003Estyle\u003C/span\u003E\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"n\"\u003EB\u003C/span\u003E\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"n\"\u003Efill\u003C/span\u003E\u003Cspan class=\"o\"\u003E:\u003C/span\u003E\u003Cspan class=\"err\"\u003E#\u003C/span\u003E\u003Cspan class=\"mo\"\u003E0063\u003C/span\u003E\u003Cspan class=\"mi\"\u003E95\u003C/span\u003E\u003Cspan class=\"p\"\u003E,\u003C/span\u003E\u003Cspan class=\"n\"\u003Estroke\u003C/span\u003E\u003Cspan class=\"o\"\u003E:\u003C/span\u003E\u003Cspan class=\"err\"\u003E#\u003C/span\u003E\u003Cspan class=\"mi\"\u003E333\u003C/span\u003E\u003Cspan class=\"p\"\u003E,\u003C/span\u003E\u003Cspan class=\"n\"\u003Estroke\u003C/span\u003E\u003Cspan class=\"o\"\u003E-\u003C/span\u003E\u003Cspan class=\"n\"\u003Ewidth\u003C/span\u003E\u003Cspan class=\"o\"\u003E:\u003C/span\u003E\u003Cspan class=\"mi\"\u003E4\u003C/span\u003E\u003Cspan class=\"n\"\u003Epx\u003C/span\u003E\u003Cspan class=\"p\"\u003E,\u003C/span\u003E\u003Cspan class=\"n\"\u003Ecolor\u003C/span\u003E\u003Cspan class=\"o\"\u003E:\u003C/span\u003E\u003Cspan class=\"err\"\u003E#\u003C/span\u003E\u003Cspan class=\"n\"\u003Efff\u003C/span\u003E\n\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"n\"\u003EB\u003C/span\u003E\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"o\"\u003E--\u0026gt;\u003C/span\u003E\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"n\"\u003EC\u003C/span\u003E\u003Cspan class=\"p\"\u003E[\u003C/span\u003E\u003Cspan class=\"err\"\u003E\ud83c\udfd7\ufe0f\u003C/span\u003E\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"kr\"\u003EBUILD\u003C/span\u003E\u003Cspan class=\"o\"\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\"n\"\u003Ebr\u003C/span\u003E\u003Cspan class=\"o\"\u003E\u0026gt;\u003C/span\u003E\u003Cspan class=\"n\"\u003ETinyTorch\u003C/span\u003E\u003Cspan class=\"p\"\u003E]\u003C/span\u003E\n\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"n\"\u003EC\u003C/span\u003E\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"o\"\u003E--\u0026gt;\u003C/span\u003E\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"n\"\u003ED\u003C/span\u003E\u003Cspan class=\"p\"\u003E[\u003C/span\u003E\u003Cspan class=\"err\"\u003E\ud83d\ude80\u003C/span\u003E\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"n\"\u003EDEPLOY\u003C/span\u003E\u003Cspan class=\"o\"\u003E\u0026lt;\u003C/span\u003E\u003Cspan class=\"n\"\u003Ebr\u003C/span\u003E\u003Cspan class=\"o\"\u003E\u0026gt;\u003C/span\u003E\u003Cspan class=\"n\"\u003EKits\u003C/span\u003E\u003Cspan class=\"p\"\u003E]\u003C/span\u003E\n\u003C/code\u003E\u003C/pre\u003E\u003C/div\u003E\u003C/span\u003E\u003C/div\u003E"}, "type": "data"}]}, {"code_hash": "1563afa93ff59b193876dbe446598ba1", "console": [], "id": "vblA", "outputs": [{"data": {"text/html": "\u003Cmarimo-ui-element object-id='vblA-0' random-id='280e985f-accd-ef16-39d0-6723305b9558'\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 ECOSYSTEM\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 GEARBOX\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;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\u003C/marimo-tabs\u003E\u003C/marimo-ui-element\u003E"}, "type": "data"}]}, {"code_hash": "fd546c42380f1f496817ece252c11294", "console": [{"mimetype": "application/vnd.marimo+traceback", "name": "stderr", "text": "\u003Cspan class=\"codehilite\"\u003E\u003Cdiv class=\"highlight\"\u003E\u003Cpre\u003E\u003Cspan\u003E\u003C/span\u003E\u003Cspan class=\"gt\"\u003ETraceback (most recent call last):\u003C/span\u003E\n File \u003Cspan class=\"nb\"\u003E\u0026quot;/var/folders/nv/p2yc903d60vbvprnhf4hhvhc0000gq/T/marimo_67736/__marimo__cell_bkHC_.py\u0026quot;\u003C/span\u003E, line \u003Cspan class=\"m\"\u003E18\u003C/span\u003E, in \u003Cspan class=\"n\"\u003E\u0026lt;module\u0026gt;\u003C/span\u003E\n\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"n\"\u003Erender_part_1\u003C/span\u003E\u003Cspan class=\"p\"\u003E()\u003C/span\u003E\n\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"pm\"\u003E~~~~~~~~~~~~~^^\u003C/span\u003E\n File \u003Cspan class=\"nb\"\u003E\u0026quot;/var/folders/nv/p2yc903d60vbvprnhf4hhvhc0000gq/T/marimo_67736/__marimo__cell_bkHC_.py\u0026quot;\u003C/span\u003E, line \u003Cspan class=\"m\"\u003E12\u003C/span\u003E, in \u003Cspan class=\"n\"\u003Erender_part_1\u003C/span\u003E\n\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"n\"\u003ECard\u003C/span\u003E\u003Cspan class=\"p\"\u003E(\u003C/span\u003E\u003Cspan class=\"s2\"\u003E\u0026quot;Efficiency Gain\u0026quot;\u003C/span\u003E\u003Cspan class=\"p\"\u003E,\u003C/span\u003E \u003Cspan class=\"n\"\u003Emo\u003C/span\u003E\u003Cspan class=\"o\"\u003E.\u003C/span\u003E\u003Cspan class=\"n\"\u003Emd\u003C/span\u003E\u003Cspan class=\"p\"\u003E(\u003C/span\u003E\u003Cspan class=\"sa\"\u003Ef\u003C/span\u003E\u003Cspan class=\"s2\"\u003E\u0026quot;By investing **\u003C/span\u003E\u003Cspan class=\"si\"\u003E{\u003C/span\u003E\u003Cspan class=\"n\"\u003E_budget\u003C/span\u003E\u003Cspan class=\"o\"\u003E.\u003C/span\u003E\u003Cspan class=\"n\"\u003Evalue\u003C/span\u003E\u003Cspan class=\"si\"\u003E}\u003C/span\u003E\u003Cspan class=\"s2\"\u003E hours** in Design, you reduce integration risk by **\u003C/span\u003E\u003Cspan class=\"si\"\u003E{\u003C/span\u003E\u003Cspan class=\"n\"\u003E_budget\u003C/span\u003E\u003Cspan class=\"o\"\u003E.\u003C/span\u003E\u003Cspan class=\"n\"\u003Evalue\u003C/span\u003E\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"o\"\u003E*\u003C/span\u003E\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"mi\"\u003E2\u003C/span\u003E\u003Cspan class=\"si\"\u003E}\u003C/span\u003E\u003Cspan class=\"s2\"\u003E%**.\u0026quot;\u003C/span\u003E\u003Cspan class=\"p\"\u003E)),\u003C/span\u003E\n\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"pm\"\u003E^^^^^^^^^^^^^\u003C/span\u003E\n File \u003Cspan class=\"nb\"\u003E\u0026quot;/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/marimo/_plugins/ui/_core/ui_element.py\u0026quot;\u003C/span\u003E, line \u003Cspan class=\"m\"\u003E319\u003C/span\u003E, in \u003Cspan class=\"n\"\u003Evalue\u003C/span\u003E\n\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"k\"\u003Eraise\u003C/span\u003E \u003Cspan class=\"ne\"\u003ERuntimeError\u003C/span\u003E\u003Cspan class=\"p\"\u003E(\u003C/span\u003E\n\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"o\"\u003E...\u0026lt;\u003C/span\u003E\u003Cspan class=\"mi\"\u003E3\u003C/span\u003E \u003Cspan class=\"n\"\u003Elines\u003C/span\u003E\u003Cspan class=\"o\"\u003E\u0026gt;...\u003C/span\u003E\n\u003Cspan class=\"w\"\u003E \u003C/span\u003E\u003Cspan class=\"p\"\u003E)\u003C/span\u003E\n\u003Cspan class=\"gr\"\u003ERuntimeError\u003C/span\u003E: \u003Cspan class=\"n\"\u003EAccessing the value of a UIElement in the cell that created it is not allowed. Fix: move the value access to another cell.\u003C/span\u003E\n\u003C/pre\u003E\u003C/div\u003E\n\u003C/span\u003E", "type": "stream"}], "id": "bkHC", "outputs": [{"ename": "exception", "evalue": "Accessing the value of a UIElement in the cell that created it is not allowed. Fix: move the value access to another cell.", "traceback": [], "type": "error"}]}, {"code_hash": "22965edd608dc389fdf91b89c50c64e9", "console": [], "id": "lEQa", "outputs": [{"data": {"text/plain": ""}, "type": "data"}]}, {"code_hash": "ee1c004b5f467ccff6faaa13d9452d2c", "console": [], "id": "PKri", "outputs": [{"ename": "ancestor-stopped", "evalue": "This cell wasn't run because an ancestor was stopped with `mo.stop`: ", "traceback": [], "type": "error"}]}, {"code_hash": "83311ac163e2036073a16753b946ab9e", "console": [], "id": "Xref", "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_00_the_map.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%20StakeholderMessage%0A%20%20%20%20from%20labs.core.state%20import%20DesignLedger%0A%0A%20%20%20%20ledger%20%3D%20DesignLedger()%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%20LAB_CSS%2C%0A%20%20%20%20%20%20%20%20PredictionLock%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---%20HEADER%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%97%BA%EF%B8%8F%20Lab%2000%3A%20The%20Systems%20Map%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**Welcome%20to%20the%20Design%20Phase**%0A%20%20%20%20%20%20%20%20%20%20%20%20This%20is%20the%20**Machine%20Learning%20Systems%20Laboratory**.%20To%20engineer%20AI%20systems%20at%20scale%2C%20you%20must%20master%20the%20**Read-Design-Build-Deploy**%20lifecycle.%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20The%20textbook%20gives%20you%20the%20physics.%20These%20labs%20give%20you%20the%20**Simulator**.%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)%2C%0A%20%20%20%20%20%20%20%20mo.md(%22%22%22%0A%20%20%20%20%20%20%20%20%60%60%60mermaid%0A%20%20%20%20%20%20%20%20graph%20LR%0A%20%20%20%20%20%20%20%20%20%20%20%20A%5B%F0%9F%93%96%20READ%3Cbr%3ETheory%5D%20--%3E%20B%5B%F0%9F%93%90%20DESIGN%3Cbr%3ELabs%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20style%20B%20fill%3A%23006395%2Cstroke%3A%23333%2Cstroke-width%3A4px%2Ccolor%3A%23fff%0A%20%20%20%20%20%20%20%20%20%20%20%20B%20--%3E%20C%5B%F0%9F%8F%97%EF%B8%8F%20BUILD%3Cbr%3ETinyTorch%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20C%20--%3E%20D%5B%F0%9F%9A%80%20DEPLOY%3Cbr%3EKits%5D%0A%20%20%20%20%20%20%20%20%60%60%60%0A%20%20%20%20%20%20%20%20%22%22%22)%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_onboarding%20%3D%20mo.ui.tabs(%7B%0A%20%20%20%20%20%20%20%20%221.%20THE%20ECOSYSTEM%22%3A%20mo.md(%22%22)%2C%0A%20%20%20%20%20%20%20%20%222.%20THE%20GEARBOX%22%3A%20mo.md(%22%22)%2C%0A%20%20%20%20%20%20%20%20%223.%20CLAIM%20MISSION%22%3A%20mo.md(%22%22)%0A%20%20%20%20%7D)%0A%20%20%20%20tabs_onboarding%0A%20%20%20%20return%20(tabs_onboarding%2C)%0A%0A%0A%40app.cell%0Adef%20_(Card%2C%20mo%2C%20tabs_onboarding)%3A%0A%20%20%20%20%23%20---%20PART%201%3A%20THE%20ECOSYSTEM%20AUDIT%20---%0A%20%20%20%20def%20render_part_1()%3A%0A%20%20%20%20%20%20%20%20mo.stop(tabs_onboarding.value%20!%3D%20%221.%20THE%20ECOSYSTEM%22)%0A%0A%20%20%20%20%20%20%20%20_budget%20%3D%20mo.ui.slider(start%3D0%2C%20stop%3D100%2C%20step%3D10%2C%20value%3D10%2C%20label%3D%22Design%20Phase%20Investment%20(Hours)%22)%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%20The%20Vision%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22The%20cost%20of%20discovering%20a%20physical%20constraint%20(like%20RAM%20limits)%20increases%20exponentially%20as%20you%20move%20from%20Design%20to%20Deployment.%20Analyze%20the%20'Risk-Reward'%20of%20early%20simulation.%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20_budget%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(%22Efficiency%20Gain%22%2C%20mo.md(f%22By%20investing%20**%7B_budget.value%7D%20hours**%20in%20Design%2C%20you%20reduce%20integration%20risk%20by%20**%7B_budget.value%20*%202%7D%25**.%22))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Card(%22Cost%20Invariant%22%2C%20%22Mistakes%20in%20'Deploy'%20cost%20**100x**%20more%20than%20mistakes%20in%20'Design'.%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.ui.text_area(label%3D%22REFLECT%3A%20Why%20is%20the%20'Design'%20phase%20the%20bridge%20between%20theory%20and%20hardware%3F%22)%0A%20%20%20%20%20%20%20%20%5D)%0A%0A%20%20%20%20render_part_1()%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(PredictionLock%2C%20mo%2C%20tabs_onboarding)%3A%0A%20%20%20%20%23%20---%20PART%202%3A%20GEARBOX%20DEFINITIONS%20---%0A%20%20%20%20mo.stop(tabs_onboarding.value%20!%3D%20%222.%20THE%20GEARBOX%22)%0A%0A%20%20%20%20%23%20Task%202%20Prediction%20Lock%0A%20%20%20%20p0_val%2C%20p0_ui%20%3D%20PredictionLock(0%2C%20%22If%20you%20double%20the%20clock%20frequency%20(f)%20of%20a%20processor%2C%20does%20the%20Power%20draw%20(P)%20double%2C%20quadruple%2C%20or%20increase%20cubically%3F%22)%0A%0A%20%20%20%20return%20p0_ui%2C%20p0_val%0A%0A%0A%40app.cell%0Adef%20_(COLORS%2C%20Card%2C%20apply_plotly_theme%2C%20go%2C%20mo%2C%20np%2C%20p0_ui%2C%20p0_val)%3A%0A%20%20%20%20%23%20---%20PART%202%3A%20THE%20GEARBOX%20(TUTORIAL)%20---%0A%20%20%20%20def%20render_part_2()%3A%0A%20%20%20%20%20%20%20%20if%20p0_val.value%20%3D%3D%20%22%22%3A%20return%20p0_ui%0A%0A%20%20%20%20%20%20%20%20_freq%20%3D%20mo.ui.slider(start%3D1%2C%20stop%3D4%2C%20step%3D0.1%2C%20value%3D1%2C%20label%3D%22Clock%20Frequency%20(GHz)%22)%0A%0A%20%20%20%20%20%20%20%20%23%20Math%3A%20Power%20scales%20with%20f%5E3%20(Simplified%20for%20tutorial)%0A%20%20%20%20%20%20%20%20_f_vals%20%3D%20np.linspace(1%2C%204%2C%2050)%0A%20%20%20%20%20%20%20%20_p_vals%20%3D%20_f_vals**3%0A%0A%20%20%20%20%20%20%20%20_fig%20%3D%20go.Figure()%0A%20%20%20%20%20%20%20%20_fig.add_trace(go.Scatter(x%3D_f_vals%2C%20y%3D_p_vals%2C%20name%3D%22Power%20Wall%22%2C%20line%3Ddict(color%3DCOLORS%5B'RedLine'%5D%2C%20width%3D4)))%0A%20%20%20%20%20%20%20%20_curr_p%20%3D%20_freq.value**3%0A%20%20%20%20%20%20%20%20_fig.add_trace(go.Scatter(x%3D%5B_freq.value%5D%2C%20y%3D%5B_curr_p%5D%2C%20mode%3D'markers'%2C%20marker%3Ddict(size%3D15%2C%20color%3DCOLORS%5B'BlueLine'%5D)))%0A%0A%20%20%20%20%20%20%20%20_fig.update_layout(xaxis_title%3D%22Frequency%20(GHz)%22%2C%20yaxis_title%3D%22Power%20(W)%22%2C%20height%3D250)%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%20The%20Gearbox%20Certification%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22To%20prevent%20'slider%20guessing'%2C%20all%20instruments%20are%20locked%20until%20you%20hypothesize.%20Witness%20the%20non-linear%20**Power%20Wall**%20below.%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20_freq%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%20Cubic%20Law%20(P%20%E2%88%9D%20f%C2%B3)%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(%22Quantitative%20Reality%22%2C%20f%22Current%20Power%3A%20%3Cspan%20class%3D'metric-value'%3E%7B_curr_p%3A.1f%7D%20W%3C%2Fspan%3E%22)%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%20Reconcile%20the%20result.%20Why%20did%20doubling%20the%20speed%20result%20in%208x%20more%20heat%3F%22)%0A%20%20%20%20%20%20%20%20%5D)%0A%0A%20%20%20%20render_part_2()%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(COLORS%2C%20Card%2C%20mo%2C%20tabs_onboarding)%3A%0A%20%20%20%20%23%20---%20PART%203%3A%20TRACK%20SELECTION%20---%0A%20%20%20%20mo.stop(tabs_onboarding.value%20!%3D%20%223.%20CLAIM%20MISSION%22)%0A%0A%20%20%20%20_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)%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)%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)%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(Hearable)%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%20_data%20%3D%20%7B%0A%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.%22%2C%20COLORS%5B'BlueLine'%5D%2C%20%22The%20Memory%20Wall%22)%2C%0A%20%20%20%20%20%20%20%20%22EDGE%22%3A%20(%22AV%20Lead%22%2C%20%22Maintain%2010ms%20safety-critical%20loop%20on%20Orin.%22%2C%20COLORS%5B'RedLine'%5D%2C%20%22The%20Determinism%20Wall%22)%2C%0A%20%20%20%20%20%20%20%20%22MOBILE%22%3A%20(%22AR%20Glasses%20Dev%22%2C%20%2260FPS%20overlay%20under%202W%20thermal%20cap.%22%2C%20COLORS%5B'OrangeLine'%5D%2C%20%22The%20Power%20Wall%22)%2C%0A%20%20%20%20%20%20%20%20%22TINY%22%3A%20(%22Hearable%20Lead%22%2C%20%22Neural%20isolation%20in%20%3C10ms%20under%201mW.%22%2C%20COLORS%5B'GreenLine'%5D%2C%20%22The%20Echo%20Wall%22)%0A%20%20%20%20%7D%0A%0A%20%20%20%20def%20render_selection()%3A%0A%20%20%20%20%20%20%20%20if%20_selector.value%20is%20None%3A%20return%20mo.md(%22_Choose%20your%20path._%22)%0A%20%20%20%20%20%20%20%20name%2C%20mission%2C%20color%2C%20wall%20%3D%20_data%5B_selector.value%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(f%22%23%23%23%20%F0%9F%8E%96%EF%B8%8F%20MISSION%20GRANTED%3A%20%7Bname%7D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(f%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D'padding%3A20px%3B%20border-left%3A8px%20solid%20%7Bcolor%7D%3B%20background%3A%23f8faff%3B'%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cstrong%3EMission%3A%3C%2Fstrong%3E%20%7Bmission%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%3Cstrong%3EArch%20Nemesis%3A%3C%2Fstrong%3E%20%3Cspan%20style%3D'color%3A%7BCOLORS%5B'RedLine'%5D%7D%3B'%3E%7Bwall%7D%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20Card(%22Roadmap%20Initialized%22%2C%20%22%E2%9C%85%20Your%20Design%20Ledger%20has%20been%20synchronized.%3Cbr%2F%3E%3Cbr%2F%3E%F0%9F%91%89%20**Proceed%20to%20Lab%2001%3A%20The%20Quantitative%20Orientation.**%22)%0A%20%20%20%20%20%20%20%20%5D)%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="">ad81580ed2da1016807d1ff47c5c82be</marimo-code-hash>
|
|
</body>
|
|
</html>
|