Loading interactive Python kernel...
import%20base64%0Aimport%20datetime%20as%20dt%0Aimport%20io%0Aimport%20math%0Aimport%20random%0Aimport%20sys%0A%0Aimport%20marimo%20as%20mo
%23%20Quartz%20exports%20cells%20as%20browser-side%20Marimo%20islands.%20Installing%20explicitly%0A%23%20makes%20the%20Pyodide%20dependency%20boundary%20visible%20and%20deterministic%20instead%20of%0A%23%20relying%20on%20a%20slow%20first-use%20import%20hook.%0A_browser_runtime%20%3D%20sys.platform%20%3D%3D%20%22emscripten%22%0Aif%20_browser_runtime%3A%0A%20%20%20%20import%20micropip%20as%20_micropip%0A%0A%20%20%20%20await%20_micropip.install(%0A%20%20%20%20%20%20%20%20%22wigglystuff%3D%3D0.5.21%22%0A%20%20%20%20)%0A%0Apackage_ready%20%3D%20%7B%0A%20%20%20%20%22runtime%22%3A%20%22Pyodide%20in%20your%20browser%22%20if%20_browser_runtime%20else%20%22local%20Python%22%2C%0A%20%20%20%20%22marimo%22%3A%20%220.23.9%22%2C%0A%20%20%20%20%22wigglystuff%22%3A%20%220.5.21%22%2C%0A%7D%0Amo.output.replace(%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20f%22%22%22%0A%20%20%20%20%20%20%20%20%3Cdiv%20data-showcase-runtime%20style%3D%22display%3Aflex%3Bgap%3A.55rem%3Bflex-wrap%3Awrap%3Bmargin%3A.4rem%200%201.2rem%22%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22border%3A1px%20solid%20var(--lightgray)%3Bborder-radius%3A999px%3Bpadding%3A.2rem%20.65rem%22%3E%F0%9F%90%8D%20%7Bpackage_ready%5B'runtime'%5D%7D%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22border%3A1px%20solid%20var(--lightgray)%3Bborder-radius%3A999px%3Bpadding%3A.2rem%20.65rem%22%3Emarimo%20%7Bpackage_ready%5B'marimo'%5D%7D%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22border%3A1px%20solid%20var(--lightgray)%3Bborder-radius%3A999px%3Bpadding%3A.2rem%20.65rem%22%3EWigglyStuff%20%7Bpackage_ready%5B'wigglystuff'%5D%7D%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22border%3A1px%20solid%20var(--lightgray)%3Bborder-radius%3A999px%3Bpadding%3A.2rem%20.65rem%22%3Eno%20notebook%20server%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A)
%23%20This%20cell%20deliberately%20depends%20on%20the%20browser%20installer%20above.%0A_%20%3D%20package_ready%0Aimport%20wigglystuff%20as%20ws
mo.md(%0A%20%20%20%20r%22%22%22%0A%20%20%20%20%3Csection%20data-showcase-hero%20style%3D%22padding%3Aclamp(1.25rem%2C4vw%2C3.2rem)%3Bborder%3A1px%20solid%20var(--lightgray)%3Bborder-radius%3A1.2rem%3Bbackground%3Alinear-gradient(135deg%2Ccolor-mix(in%20srgb%2Cvar(--secondary)%2015%25%2Ctransparent)%2Ccolor-mix(in%20srgb%2Cvar(--tertiary)%2012%25%2Ctransparent))%3Bmargin-bottom%3A1.4rem%22%3E%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22font-size%3A.82rem%3Bletter-spacing%3A.12em%3Btext-transform%3Auppercase%3Bopacity%3A.72%22%3EA%20browser-native%20notebook%20field%20lab%3C%2Fdiv%3E%0A%20%20%20%20%20%20%3Ch1%20style%3D%22font-size%3Aclamp(2.4rem%2C7vw%2C5.8rem)%3Bline-height%3A.92%3Bmargin%3A.55rem%200%201rem%22%3EThe%20Reactive%3Cbr%2F%3EGarden%3C%2Fh1%3E%0A%20%20%20%20%20%20%3Cp%20style%3D%22font-size%3Aclamp(1.05rem%2C2vw%2C1.35rem)%3Bmax-width%3A48rem%3Bmargin%3A0%22%3EA%20complete%2C%20tactile%20tour%20of%20%3Cstrong%3Eevery%20public%20Marimo%20UI%20constructor%3C%2Fstrong%3E%20and%20%3Cstrong%3Eevery%20WigglyStuff%200.5.21%20export%3C%2Fstrong%3E%E2%80%94controls%2C%20sketches%2C%20graphs%2C%20charts%2C%203D%20scenes%2C%20media%2C%20tours%2C%20helpers%2C%20and%20the%20honest%20edges%20of%20what%20a%20static%20website%20can%20do.%3C%2Fp%3E%0A%20%20%20%20%3C%2Fsection%3E%0A%0A%20%20%20%20This%20is%20not%20a%20screenshot%20of%20a%20notebook.%20Python%20runs%20locally%20in%20your%20tab%2C%0A%20%20%20%20controls%20update%20downstream%20cells%2C%20and%20WigglyStuff's%20AnyWidgets%20exchange%0A%20%20%20%20state%20with%20that%20browser-side%20Python%20kernel.%20Nothing%20you%20do%20below%20is%20sent%0A%20%20%20%20back%20to%20this%20website.%0A%20%20%20%20%22%22%22%0A)
def%20anywidget_card(title%2C%20factory%2C%20note%3D%22%22%2C%20badge%3D%22live%22)%3A%0A%20%20%20%20%22%22%22Render%20one%20WigglyStuff%20demo%20without%20letting%20an%20optional%20extra%20break%20its%20gallery.%22%22%22%0A%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20_view%20%3D%20mo.ui.anywidget(factory())%0A%20%20%20%20%20%20%20%20_items%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22%23%23%23%20%7Btitle%7D%20%26nbsp%3B%20%3Csmall%20style%3D'opacity%3A.65'%3E%7Bbadge%7D%3C%2Fsmall%3E%22%0A%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_view%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20if%20note%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_items.append(mo.md(note))%0A%20%20%20%20%20%20%20%20return%20mo.vstack(%0A%20%20%20%20%20%20%20%20%20%20%20%20_items%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20gap%3D0.45%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20except%20Exception%20as%20exc%3A%0A%20%20%20%20%20%20%20%20return%20mo.vstack(%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.md(f'%3Cspan%20data-wiggly-failure%3D%22%7Btitle%7D%22%3E%3C%2Fspan%3E')%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.callout(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22%23%23%23%20%7Btitle%7D%5Cn%5Cn**Capability%20demo.**%20This%20browser%20build%20could%20not%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22start%20the%20optional%20backend%3A%20%60%7Btype(exc).__name__%7D%3A%20%7Bexc%7D%60%5Cn%5Cn%7Bnote%7D%22%0A%20%20%20%20%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%20%20%20%20%20kind%3D%22warn%22%2C%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%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20gap%3D0%2C%0A%20%20%20%20%20%20%20%20)%0A%0Adef%20native_card(title%2C%20widget%2C%20note%3D%22%22)%3A%0A%20%20%20%20_items%20%3D%20%5Bmo.md(f%22%23%23%23%20%7Btitle%7D%22)%2C%20widget%5D%0A%20%20%20%20if%20note%3A%0A%20%20%20%20%20%20%20%20_items.append(mo.md(note))%0A%20%20%20%20return%20mo.vstack(%0A%20%20%20%20%20%20%20%20_items%2C%0A%20%20%20%20%20%20%20%20gap%3D0.4%2C%0A%20%20%20%20)%0A%0Adef%20capability_card(title%2C%20requirement%2C%20example)%3A%0A%20%20%20%20return%20mo.callout(%0A%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22%23%23%23%20%7Btitle%7D%5Cn%5Cn**Requires%20%7Brequirement%7D.**%20The%20public%20page%20keeps%20the%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22boundary%20visible%20instead%20of%20inventing%20a%20successful%20connection.%5Cn%5Cn%22%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22%60%60%60python%5Cn%7Bexample%7D%5Cn%60%60%60%22%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20kind%3D%22warn%22%2C%0A%20%20%20%20)%0A%0A_%20%3D%20ws
MARIMO_COMPONENTS%20%3D%20(%0A%20%20%20%20%22altair_chart%22%2C%0A%20%20%20%20%22anywidget%22%2C%0A%20%20%20%20%22array%22%2C%0A%20%20%20%20%22batch%22%2C%0A%20%20%20%20%22button%22%2C%0A%20%20%20%20%22chat%22%2C%0A%20%20%20%20%22checkbox%22%2C%0A%20%20%20%20%22code_editor%22%2C%0A%20%20%20%20%22data_editor%22%2C%0A%20%20%20%20%22data_explorer%22%2C%0A%20%20%20%20%22dataframe%22%2C%0A%20%20%20%20%22date%22%2C%0A%20%20%20%20%22date_range%22%2C%0A%20%20%20%20%22datetime%22%2C%0A%20%20%20%20%22dictionary%22%2C%0A%20%20%20%20%22dropdown%22%2C%0A%20%20%20%20%22experimental_data_editor%22%2C%0A%20%20%20%20%22file%22%2C%0A%20%20%20%20%22file_browser%22%2C%0A%20%20%20%20%22form%22%2C%0A%20%20%20%20%22matplotlib%22%2C%0A%20%20%20%20%22matrix%22%2C%0A%20%20%20%20%22microphone%22%2C%0A%20%20%20%20%22multiselect%22%2C%0A%20%20%20%20%22number%22%2C%0A%20%20%20%20%22panel%22%2C%0A%20%20%20%20%22plotly%22%2C%0A%20%20%20%20%22radio%22%2C%0A%20%20%20%20%22range_slider%22%2C%0A%20%20%20%20%22refresh%22%2C%0A%20%20%20%20%22run_button%22%2C%0A%20%20%20%20%22slider%22%2C%0A%20%20%20%20%22switch%22%2C%0A%20%20%20%20%22table%22%2C%0A%20%20%20%20%22tabs%22%2C%0A%20%20%20%20%22text%22%2C%0A%20%20%20%20%22text_area%22%2C%0A)%0A%0AWIGGLY_GROUPS%20%3D%20%7B%0A%20%20%20%20%22Geometry%20%26%20tangible%20math%22%3A%20(%0A%20%20%20%20%20%20%20%20%22Slider2D%22%2C%0A%20%20%20%20%20%20%20%20%22BezierCurve%22%2C%0A%20%20%20%20%20%20%20%20%22CurveEditor%22%2C%0A%20%20%20%20%20%20%20%20%22CircularSlider%22%2C%0A%20%20%20%20%20%20%20%20%22CircularRangeSlider%22%2C%0A%20%20%20%20%20%20%20%20%22Matrix%22%2C%0A%20%20%20%20%20%20%20%20%22TangleSlider%22%2C%0A%20%20%20%20%20%20%20%20%22TangleChoice%22%2C%0A%20%20%20%20%20%20%20%20%22TangleSelect%22%2C%0A%20%20%20%20%20%20%20%20%22TangleLatex%22%2C%0A%20%20%20%20)%2C%0A%20%20%20%20%22Sketches%20%26%20graphs%22%3A%20(%0A%20%20%20%20%20%20%20%20%22Paint%22%2C%0A%20%20%20%20%20%20%20%20%22Excalidraw%22%2C%0A%20%20%20%20%20%20%20%20%22GraphWidget%22%2C%0A%20%20%20%20%20%20%20%20%22GridDraw%22%2C%0A%20%20%20%20%20%20%20%20%22EdgeDraw%22%2C%0A%20%20%20%20%20%20%20%20%22SortableList%22%2C%0A%20%20%20%20%20%20%20%20%22WidgetDAG%22%2C%0A%20%20%20%20)%2C%0A%20%20%20%20%22Data%20%26%20charts%22%3A%20(%0A%20%20%20%20%20%20%20%20%22AltairWidget%22%2C%0A%20%20%20%20%20%20%20%20%22ChartPuck%22%2C%0A%20%20%20%20%20%20%20%20%22ChartSelect%22%2C%0A%20%20%20%20%20%20%20%20%22ChartMultiSelect%22%2C%0A%20%20%20%20%20%20%20%20%22ObservablePlot%22%2C%0A%20%20%20%20%20%20%20%20%22ParallelCoordinates%22%2C%0A%20%20%20%20%20%20%20%20%22RidgelineChart%22%2C%0A%20%20%20%20%20%20%20%20%22ScatterLog%22%2C%0A%20%20%20%20%20%20%20%20%22ScatterWidget%22%2C%0A%20%20%20%20%20%20%20%20%22SplineDraw%22%2C%0A%20%20%20%20%20%20%20%20%22Treemap%22%2C%0A%20%20%20%20%20%20%20%20%22NestedTable%22%2C%0A%20%20%20%20%20%20%20%20%22forecast_chart%22%2C%0A%20%20%20%20)%2C%0A%20%20%20%20%22Space%2C%20frames%20%26%20sensors%22%3A%20(%0A%20%20%20%20%20%20%20%20%22ThreeWidget%22%2C%0A%20%20%20%20%20%20%20%20%22CubeWidget%22%2C%0A%20%20%20%20%20%20%20%20%22FramePlayer%22%2C%0A%20%20%20%20%20%20%20%20%22ManimWeb%22%2C%0A%20%20%20%20%20%20%20%20%22HoverZoom%22%2C%0A%20%20%20%20%20%20%20%20%22WebcamCapture%22%2C%0A%20%20%20%20%20%20%20%20%22WebkitSpeechToTextWidget%22%2C%0A%20%20%20%20%20%20%20%20%22GamepadWidget%22%2C%0A%20%20%20%20%20%20%20%20%22KeystrokeWidget%22%2C%0A%20%20%20%20)%2C%0A%20%20%20%20%22Notebook%20utilities%22%3A%20(%0A%20%20%20%20%20%20%20%20%22AnnotationWidget%22%2C%0A%20%20%20%20%20%20%20%20%22ColorPicker%22%2C%0A%20%20%20%20%20%20%20%20%22CopyToClipboard%22%2C%0A%20%20%20%20%20%20%20%20%22TextCompare%22%2C%0A%20%20%20%20%20%20%20%20%22PlaySlider%22%2C%0A%20%20%20%20%20%20%20%20%22ProgressBar%22%2C%0A%20%20%20%20%20%20%20%20%22HTMLRefreshWidget%22%2C%0A%20%20%20%20%20%20%20%20%22ImageRefreshWidget%22%2C%0A%20%20%20%20%20%20%20%20%22EsmWidget%22%2C%0A%20%20%20%20%20%20%20%20%22LiveEdit%22%2C%0A%20%20%20%20%20%20%20%20%22inspect_run%22%2C%0A%20%20%20%20%20%20%20%20%22ApiDoc%22%2C%0A%20%20%20%20)%2C%0A%20%20%20%20%22Runtime%20%26%20integrations%22%3A%20(%0A%20%20%20%20%20%20%20%20%22AsyncFlow%22%2C%0A%20%20%20%20%20%20%20%20%22CellTour%22%2C%0A%20%20%20%20%20%20%20%20%22DriverTour%22%2C%0A%20%20%20%20%20%20%20%20%22EnvConfig%22%2C%0A%20%20%20%20%20%20%20%20%22ModuleTreeWidget%22%2C%0A%20%20%20%20%20%20%20%20%22Neo4jWidget%22%2C%0A%20%20%20%20%20%20%20%20%22WandbChart%22%2C%0A%20%20%20%20)%2C%0A%7D%0AWIGGLY_COMPONENTS%20%3D%20tuple(%0A%20%20%20%20name%20for%20names%20in%20WIGGLY_GROUPS.values()%20for%20name%20in%20names%0A)
_published%20%3D%20set(ws.__all__)%0A_expected%20%3D%20set(WIGGLY_COMPONENTS)%0A_coverage_ok%20%3D%20_published%20%3D%3D%20_expected%0Amo.md(%0A%20%20%20%20f%22%22%22%0A%20%20%20%20%23%23%20Coverage%20contract%0A%0A%20%20%20%20%3Cdiv%20data-component-coverage%20style%3D%22display%3Agrid%3Bgrid-template-columns%3Arepeat(auto-fit%2Cminmax(12rem%2C1fr))%3Bgap%3A.8rem%3Bmargin%3A1rem%200%22%3E%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A1rem%3Bborder%3A1px%20solid%20var(--lightgray)%3Bborder-radius%3A.8rem%22%3E%3Cstrong%20style%3D%22font-size%3A2rem%22%3E%7Blen(MARIMO_COMPONENTS)%7D%3C%2Fstrong%3E%3Cbr%2F%3EMarimo%20UI%20constructors%3C%2Fdiv%3E%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A1rem%3Bborder%3A1px%20solid%20var(--lightgray)%3Bborder-radius%3A.8rem%22%3E%3Cstrong%20style%3D%22font-size%3A2rem%22%3E%7Blen(WIGGLY_COMPONENTS)%7D%3C%2Fstrong%3E%3Cbr%2F%3EWigglyStuff%20exports%3C%2Fdiv%3E%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A1rem%3Bborder%3A1px%20solid%20var(--lightgray)%3Bborder-radius%3A.8rem%22%3E%3Cstrong%20style%3D%22font-size%3A2rem%22%3E%7Blen(MARIMO_COMPONENTS)%20%2B%20len(WIGGLY_COMPONENTS)%7D%3C%2Fstrong%3E%3Cbr%2F%3Enamed%20surfaces%20catalogued%3C%2Fdiv%3E%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A1rem%3Bborder%3A1px%20solid%20var(--lightgray)%3Bborder-radius%3A.8rem%22%3E%3Cstrong%20style%3D%22font-size%3A2rem%22%3E%7B'%E2%9C%93'%20if%20_coverage_ok%20else%20'!'%7D%3C%2Fstrong%3E%3Cbr%2F%3E%7B'exact%20release%20match'%20if%20_coverage_ok%20else%20'manifest%20drift%20detected'%7D%3C%2Fdiv%3E%0A%20%20%20%20%3C%2Fdiv%3E%0A%0A%20%20%20%20%E2%80%9CEvery%E2%80%9D%20means%20the%20exact%20public%20surface%20of%20the%20versions%20printed%20above%E2%80%94not%20a%0A%20%20%20%20hand-picked%20highlights%20reel.%20Switch%20galleries%20to%20instantiate%20each%20family%3B%0A%20%20%20%20the%20inventory%20at%20the%20end%20records%20every%20name%20and%20its%20runtime%20boundary.%0A%20%20%20%20%22%22%22%0A)
mo.md(%0A%20%20%20%20%22%22%22%0A%20%20%20%20%23%23%201%20%C2%B7%20Signal%20Studio%0A%0A%20%20%20%20Start%20with%20a%20tiny%20analysis%20instrument.%20Shape%20a%20synthetic%20signal%2C%20gate%20a%0A%20%20%20%20time%20window%2C%20then%20drag%20the%20WigglyStuff%20puck%20to%20inject%20an%20intervention.%0A%20%20%20%20The%20summary%2C%20chart%2C%20and%20table%20all%20derive%20from%20the%20same%20reactive%20state.%0A%20%20%20%20%22%22%22%0A)
signal_shape%20%3D%20mo.ui.dropdown(%0A%20%20%20%20%5B%22sine%22%2C%20%22triangle%22%2C%20%22pulse%22%5D%2C%20value%3D%22sine%22%2C%20label%3D%22waveform%22%0A)%0Asignal_amplitude%20%3D%20mo.ui.slider(%0A%20%20%20%200.5%2C%205.0%2C%20value%3D2.4%2C%20step%3D0.1%2C%20show_value%3DTrue%2C%20label%3D%22amplitude%22%0A)%0Asignal_frequency%20%3D%20mo.ui.slider(%0A%20%20%20%201%2C%208%2C%20value%3D3%2C%20step%3D1%2C%20show_value%3DTrue%2C%20label%3D%22frequency%22%0A)%0Asignal_window%20%3D%20mo.ui.range_slider(%0A%20%20%20%200%2C%2047%2C%20value%3D%5B8%2C%2039%5D%2C%20step%3D1%2C%20show_value%3DTrue%2C%20label%3D%22active%20window%22%0A)%0Asignal_noise%20%3D%20mo.ui.slider(%0A%20%20%20%200%2C%201%2C%20value%3D0.18%2C%20step%3D0.02%2C%20show_value%3DTrue%2C%20label%3D%22deterministic%20noise%22%0A)%0Asignal_palette%20%3D%20mo.ui.radio(%0A%20%20%20%20%7B%22ember%22%3A%20%22%23db6d28%22%2C%20%22moss%22%3A%20%22%23568259%22%2C%20%22violet%22%3A%20%22%237457a8%22%7D%2C%0A%20%20%20%20value%3D%22ember%22%2C%0A%20%20%20%20inline%3DTrue%2C%0A%20%20%20%20label%3D%22ink%22%2C%0A)%0Asignal_enabled%20%3D%20mo.ui.switch(value%3DTrue%2C%20label%3D%22apply%20intervention%22)%0A%0Asignal_controls%20%3D%20mo.vstack(%0A%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20mo.hstack(%5Bsignal_shape%2C%20signal_palette%2C%20signal_enabled%5D%2C%20widths%3D%22equal%22)%2C%0A%20%20%20%20%20%20%20%20mo.hstack(%5Bsignal_amplitude%2C%20signal_frequency%5D%2C%20widths%3D%22equal%22)%2C%0A%20%20%20%20%20%20%20%20mo.hstack(%5Bsignal_window%2C%20signal_noise%5D%2C%20widths%3D%22equal%22)%2C%0A%20%20%20%20%5D%2C%0A%20%20%20%20gap%3D0.8%2C%0A)%0Asignal_controls
garden_point%20%3D%20mo.ui.anywidget(%0A%20%20%20%20ws.Slider2D(%0A%20%20%20%20%20%20%20%20x%3D0.25%2C%0A%20%20%20%20%20%20%20%20y%3D0.35%2C%0A%20%20%20%20%20%20%20%20width%3D620%2C%0A%20%20%20%20%20%20%20%20height%3D250%2C%0A%20%20%20%20%20%20%20%20x_bounds%3D(-1.0%2C%201.0)%2C%0A%20%20%20%20%20%20%20%20y_bounds%3D(-1.0%2C%201.0)%2C%0A%20%20%20%20)%0A)%0Amo.vstack(%0A%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20mo.md(%22%23%23%23%20Intervention%20puck%20%C2%B7%20%60Slider2D%60%5CnDrag%20in%20two%20dimensions%3A%20horizontal%20position%20shifts%20phase%3B%20vertical%20position%20adds%20bias.%22)%2C%0A%20%20%20%20%20%20%20%20garden_point%2C%0A%20%20%20%20%5D%0A)
_rng%20%3D%20random.Random(730)%0A_start%2C%20_stop%20%3D%20signal_window.value%0Asignal_rows%20%3D%20%5B%5D%0Afor%20_step%20in%20range(48)%3A%0A%20%20%20%20_phase%20%3D%20(_step%20%2F%2047%20%2B%20garden_point.value%5B%22x%22%5D%20*%200.12)%20*%20signal_frequency.value%0A%20%20%20%20if%20signal_shape.value%20%3D%3D%20%22triangle%22%3A%0A%20%20%20%20%20%20%20%20_raw%20%3D%202%20*%20abs(2%20*%20(_phase%20%25%201)%20-%201)%20-%201%0A%20%20%20%20elif%20signal_shape.value%20%3D%3D%20%22pulse%22%3A%0A%20%20%20%20%20%20%20%20_raw%20%3D%201%20if%20(_phase%20%25%201)%20%3C%200.28%20else%20-0.45%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20_raw%20%3D%20math.sin(math.tau%20*%20_phase)%0A%20%20%20%20_inside%20%3D%20_start%20%3C%3D%20_step%20%3C%3D%20_stop%0A%20%20%20%20_intervention%20%3D%20garden_point.value%5B%22y%22%5D%20if%20signal_enabled.value%20and%20_inside%20else%200%0A%20%20%20%20_value%20%3D%20signal_amplitude.value%20*%20_raw%20%2B%20_intervention%0A%20%20%20%20_value%20%2B%3D%20(_rng.random()%20-%200.5)%20*%20signal_noise.value%0A%20%20%20%20signal_rows.append(%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22step%22%3A%20_step%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22value%22%3A%20round(_value%2C%204)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22active%22%3A%20_inside%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22wave%22%3A%20signal_shape.value%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20)
_values%20%3D%20%5Brow%5B%22value%22%5D%20for%20row%20in%20signal_rows%5D%0A_mean%20%3D%20sum(_values)%20%2F%20len(_values)%0A_energy%20%3D%20sum(value%20*%20value%20for%20value%20in%20_values)%20%2F%20len(_values)%0A_width%2C%20_height%2C%20_pad%20%3D%20820%2C%20300%2C%2038%0A_low%2C%20_high%20%3D%20min(_values)%2C%20max(_values)%0A_span%20%3D%20max(_high%20-%20_low%2C%200.001)%0A%0Adef%20_sx(step)%3A%0A%20%20%20%20return%20_pad%20%2B%20step%20%2F%2047%20*%20(_width%20-%202%20*%20_pad)%0A%0Adef%20_sy(value)%3A%0A%20%20%20%20return%20_height%20-%20_pad%20-%20(value%20-%20_low)%20%2F%20_span%20*%20(_height%20-%202%20*%20_pad)%0A%0A_points%20%3D%20%22%20%22.join(%0A%20%20%20%20f%22%7B_sx(row%5B'step'%5D)%3A.1f%7D%2C%7B_sy(row%5B'value'%5D)%3A.1f%7D%22%20for%20row%20in%20signal_rows%0A)%0A_zero%20%3D%20_sy(0)%0A_dots%20%3D%20%22%22.join(%0A%20%20%20%20f'%3Ccircle%20cx%3D%22%7B_sx(row%5B%22step%22%5D)%3A.1f%7D%22%20cy%3D%22%7B_sy(row%5B%22value%22%5D)%3A.1f%7D%22%20r%3D%222.7%22%20%2F%3E'%0A%20%20%20%20for%20row%20in%20signal_rows%0A%20%20%20%20if%20row%5B%22active%22%5D%0A)%0A_chart%20%3D%20mo.Html(%0A%20%20%20%20f%22%22%22%0A%20%20%20%20%3Csvg%20data-signal-chart%20viewBox%3D%220%200%20%7B_width%7D%20%7B_height%7D%22%20role%3D%22img%22%20aria-label%3D%22Reactive%20signal%20chart%22%0A%20%20%20%20%20%20%20%20%20style%3D%22width%3A100%25%3Bmax-width%3A%7B_width%7Dpx%3Bheight%3Aauto%3Bborder%3A1px%20solid%20var(--lightgray)%3Bborder-radius%3A.75rem%3Bbackground%3Acolor-mix(in%20srgb%2Cvar(--light)%2094%25%2Ctransparent)%22%3E%0A%20%20%20%20%20%20%3Cline%20x1%3D%22%7B_pad%7D%22%20x2%3D%22%7B_width%20-%20_pad%7D%22%20y1%3D%22%7B_zero%3A.1f%7D%22%20y2%3D%22%7B_zero%3A.1f%7D%22%20stroke%3D%22var(--lightgray)%22%20stroke-width%3D%221%22%20%2F%3E%0A%20%20%20%20%20%20%3Cpolyline%20points%3D%22%7B_points%7D%22%20fill%3D%22none%22%20stroke%3D%22%7Bsignal_palette.value%7D%22%20stroke-width%3D%223%22%20stroke-linejoin%3D%22round%22%20stroke-linecap%3D%22round%22%20%2F%3E%0A%20%20%20%20%20%20%3Cg%20fill%3D%22%7Bsignal_palette.value%7D%22%3E%7B_dots%7D%3C%2Fg%3E%0A%20%20%20%20%20%20%3Ctext%20x%3D%22%7B_pad%7D%22%20y%3D%2222%22%20fill%3D%22currentColor%22%20opacity%3D%22.7%22%20font-size%3D%2213%22%3Emax%20%7B_high%3A%2B.2f%7D%3C%2Ftext%3E%0A%20%20%20%20%20%20%3Ctext%20x%3D%22%7B_pad%7D%22%20y%3D%22%7B_height%20-%2012%7D%22%20fill%3D%22currentColor%22%20opacity%3D%22.7%22%20font-size%3D%2213%22%3Emin%20%7B_low%3A%2B.2f%7D%3C%2Ftext%3E%0A%20%20%20%20%3C%2Fsvg%3E%0A%20%20%20%20%22%22%22%0A)%0Amo.vstack(%0A%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22**Mean**%20%60%7B_mean%3A%2B.3f%7D%60%20%C2%B7%20**RMS**%20%60%7B_energy%20**%20.5%3A.3f%7D%60%20%C2%B7%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22**puck**%20%60(%7Bgarden_point.value%5B'x'%5D%3A%2B.2f%7D%2C%20%7Bgarden_point.value%5B'y'%5D%3A%2B.2f%7D)%60%22%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20_chart%2C%0A%20%20%20%20%5D%2C%0A%20%20%20%20gap%3D0.5%2C%0A)
signal_table%20%3D%20mo.ui.table(%0A%20%20%20%20signal_rows%2C%0A%20%20%20%20page_size%3D8%2C%0A%20%20%20%20selection%3D%22multi%22%2C%0A%20%20%20%20show_column_summaries%3DTrue%2C%0A%20%20%20%20label%3D%22select%20samples%20to%20inspect%22%2C%0A)%0Asignal_table
mo.md(%0A%20%20%20%20f%22Selected%20**%7Blen(signal_table.value)%7D**%20sample(s).%20%22%0A%20%20%20%20%22The%20table%20is%20not%20decorative%3A%20its%20selection%20is%20Python%20state%20too.%22%0A)
mo.md(%0A%20%20%20%20%22%22%22%0A%20%20%20%20%23%23%202%20%C2%B7%20Every%20native%20Marimo%20component%0A%0A%20%20%20%20Pick%20a%20deck.%20Only%20that%20deck%20boots%2C%20which%20keeps%20the%20initial%20page%20humane.%0A%20%20%20%20Switching%20decks%20exercises%20all%2037%20public%20names%20in%20%60mo.ui%60%20(36%20distinct%0A%20%20%20%20constructors%20plus%20the%20%60experimental_data_editor%60%20compatibility%20alias).%0A%20%20%20%20%22%22%22%0A)%0Anative_deck%20%3D%20mo.ui.dropdown(%0A%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%22Inputs%20%26%20time%22%2C%0A%20%20%20%20%20%20%20%20%22Composition%20%26%20forms%22%2C%0A%20%20%20%20%20%20%20%20%22Data%20%26%20plots%22%2C%0A%20%20%20%20%20%20%20%20%22Files%2C%20media%20%26%20agents%22%2C%0A%20%20%20%20%5D%2C%0A%20%20%20%20value%3D%22Inputs%20%26%20time%22%2C%0A%20%20%20%20label%3D%22Marimo%20deck%22%2C%0A%20%20%20%20full_width%3DTrue%2C%0A)%0Anative_deck
mo.stop(native_deck.value%20!%3D%20%22Inputs%20%26%20time%22)%0A_button%20%3D%20mo.ui.button(label%3D%22release%20a%20firefly%22%2C%20value%3D0%2C%20on_click%3Dlambda%20n%3A%20n%20%2B%201)%0A_run%20%3D%20mo.ui.run_button(label%3D%22recompute%20now%22%2C%20kind%3D%22success%22)%0A_refresh%20%3D%20mo.ui.refresh(options%3D%5B%2210s%22%2C%20%2230s%22%2C%20%221m%22%5D%2C%20default_interval%3D%2230s%22%2C%20label%3D%22pulse%22)%0A_cards%20%3D%20%5B%0A%20%20%20%20native_card(%22slider%22%2C%20mo.ui.slider(0%2C%20100%2C%20value%3D42%2C%20show_value%3DTrue%2C%20label%3D%22canopy%22))%2C%0A%20%20%20%20native_card(%22range_slider%22%2C%20mo.ui.range_slider(0%2C%2024%2C%20value%3D%5B6%2C%2018%5D%2C%20show_value%3DTrue%2C%20label%3D%22daylight%22))%2C%0A%20%20%20%20native_card(%22number%22%2C%20mo.ui.number(0%2C%20999%2C%20value%3D144%2C%20label%3D%22seed%20count%22))%2C%0A%20%20%20%20native_card(%22checkbox%22%2C%20mo.ui.checkbox(True%2C%20label%3D%22show%20spores%22))%2C%0A%20%20%20%20native_card(%22switch%22%2C%20mo.ui.switch(True%2C%20label%3D%22night%20mode%20for%20moths%22))%2C%0A%20%20%20%20native_card(%22dropdown%22%2C%20mo.ui.dropdown(%5B%22fern%22%2C%20%22moss%22%2C%20%22lichen%22%5D%2C%20value%3D%22moss%22%2C%20label%3D%22specimen%22))%2C%0A%20%20%20%20native_card(%22multiselect%22%2C%20mo.ui.multiselect(%5B%22wind%22%2C%20%22rain%22%2C%20%22sun%22%5D%2C%20value%3D%5B%22rain%22%5D%2C%20label%3D%22conditions%22))%2C%0A%20%20%20%20native_card(%22radio%22%2C%20mo.ui.radio(%5B%22quiet%22%2C%20%22curious%22%2C%20%22feral%22%5D%2C%20value%3D%22curious%22%2C%20inline%3DTrue%2C%20label%3D%22mood%22))%2C%0A%20%20%20%20native_card(%22text%22%2C%20mo.ui.text(%22Ada%22%2C%20label%3D%22field%20researcher%22))%2C%0A%20%20%20%20native_card(%22text_area%22%2C%20mo.ui.text_area(%22The%20moss%20is%20learning.%22%2C%20rows%3D3%2C%20label%3D%22observation%22))%2C%0A%20%20%20%20native_card(%22code_editor%22%2C%20mo.ui.code_editor(%22def%20bloom(x)%3A%5Cn%20%20%20%20return%20x%20**%202%22%2C%20language%3D%22python%22%2C%20label%3D%22tiny%20experiment%22))%2C%0A%20%20%20%20native_card(%22button%22%2C%20_button%2C%20%22Each%20click%20increments%20its%20reactive%20event%20value.%22)%2C%0A%20%20%20%20native_card(%22run_button%22%2C%20_run%2C%20%22A%20boolean%20event%20source%20for%20expensive%20cells.%22)%2C%0A%20%20%20%20native_card(%22refresh%22%2C%20_refresh%2C%20%22An%20optional%20reactive%20clock%3B%20left%20at%20a%20gentle%20cadence.%22)%2C%0A%20%20%20%20native_card(%22date%22%2C%20mo.ui.date(value%3Ddt.date(2026%2C%207%2C%2030)%2C%20label%3D%22survey%20date%22))%2C%0A%20%20%20%20native_card(%22date_range%22%2C%20mo.ui.date_range(value%3D(dt.date(2026%2C%207%2C%2024)%2C%20dt.date(2026%2C%207%2C%2030))%2C%20label%3D%22migration%20window%22))%2C%0A%20%20%20%20native_card(%22datetime%22%2C%20mo.ui.datetime(value%3Ddt.datetime(2026%2C%207%2C%2030%2C%2021%2C%2015)%2C%20precision%3D%22minute%22%2C%20label%3D%22night%20watch%22))%2C%0A%5D%0Amo.vstack(_cards%2C%20gap%3D1.15)
mo.stop(native_deck.value%20!%3D%20%22Composition%20%26%20forms%22)%0A_array%20%3D%20mo.ui.array(%0A%20%20%20%20%5Bmo.ui.slider(0%2C%2010%2C%20value%3Di%2C%20label%3Df%22plot%20%7Bi%20%2B%201%7D%22)%20for%20i%20in%20(2%2C%205%2C%208)%5D%2C%0A%20%20%20%20label%3D%22array%22%2C%0A)%0A_dictionary%20%3D%20mo.ui.dictionary(%0A%20%20%20%20%7B%22species%22%3A%20mo.ui.text(%22foxglove%22)%2C%20%22count%22%3A%20mo.ui.number(0%2C%20100%2C%20value%3D12)%7D%2C%0A%20%20%20%20label%3D%22dictionary%22%2C%0A)%0A_batch%20%3D%20mo.ui.batch(%0A%20%20%20%20mo.md(%22A%20**%7Badjective%7D**%20garden%20with%20**%7Bcount%7D**%20gates.%22)%2C%0A%20%20%20%20%7B%22adjective%22%3A%20mo.ui.text(%22reactive%22)%2C%20%22count%22%3A%20mo.ui.slider(1%2C%209%2C%20value%3D3)%7D%2C%0A)%0A_form%20%3D%20mo.ui.form(%0A%20%20%20%20mo.ui.dictionary(%0A%20%20%20%20%20%20%20%20%7B%22name%22%3A%20mo.ui.text(%22nocturne%22)%2C%20%22confidence%22%3A%20mo.ui.slider(0%2C%201%2C%20value%3D.8%2C%20step%3D.05)%7D%0A%20%20%20%20)%2C%0A%20%20%20%20submit_button_label%3D%22press%20specimen%22%2C%0A%20%20%20%20show_clear_button%3DTrue%2C%0A%20%20%20%20label%3D%22form%22%2C%0A)%0A_tabs%20%3D%20mo.ui.tabs(%0A%20%20%20%20%7B%22leaf%22%3A%20mo.md(%22%F0%9F%8D%83%20chlorophyll%22)%2C%20%22root%22%3A%20mo.md(%22%F0%9F%AB%9A%20mycelial%20network%22)%2C%20%22sky%22%3A%20mo.md(%22%E2%9C%A8%20navigation%22)%7D%2C%0A%20%20%20%20value%3D%22leaf%22%2C%0A%20%20%20%20lazy%3DTrue%2C%0A%20%20%20%20label%3D%22tabs%22%2C%0A)%0A_cards%20%3D%20%5B%0A%20%20%20%20native_card(%22array%22%2C%20_array%2C%20%22A%20sequence%20of%20widgets%20becomes%20one%20list-valued%20control.%22)%2C%0A%20%20%20%20native_card(%22dictionary%22%2C%20_dictionary%2C%20%22Named%20widgets%20become%20one%20dictionary-valued%20control.%22)%2C%0A%20%20%20%20native_card(%22batch%22%2C%20_batch%2C%20%22Interpolates%20controls%20directly%20into%20prose.%22)%2C%0A%20%20%20%20native_card(%22form%22%2C%20_form%2C%20%22Downstream%20cells%20update%20only%20when%20the%20form%20is%20submitted.%22)%2C%0A%20%20%20%20native_card(%22matrix%22%2C%20mo.ui.matrix(%5B%5B1.0%2C%20.2%5D%2C%20%5B.2%2C%201.0%5D%5D%2C%20min_value%3D-2%2C%20max_value%3D2%2C%20step%3D.1%2C%20symmetric%3DTrue%2C%20row_labels%3D%5B%22x%22%2C%20%22y%22%5D%2C%20column_labels%3D%5B%22x%22%2C%20%22y%22%5D%2C%20label%3D%22correlation%22))%2C%0A%20%20%20%20native_card(%22tabs%22%2C%20_tabs%2C%20%22Lazy%20tabs%20render%20only%20the%20active%20branch.%22)%2C%0A%5D%0Amo.vstack(_cards%2C%20gap%3D1.15)
mo.stop(native_deck.value%20!%3D%20%22Data%20%26%20plots%22)%0Aif%20sys.platform%20%3D%3D%20%22emscripten%22%3A%0A%20%20%20%20import%20micropip%20as%20_micropip%0A%0A%20%20%20%20await%20_micropip.install(%5B%22altair%3E%3D6%2C%3C7%22%2C%20%22matplotlib%22%2C%20%22numpy%22%2C%20%22pandas%22%2C%20%22plotly%3E%3D6%2C%3C7%22%5D)%0A_alt%20%3D%20__import__(%22altair%22)%0A_plt%20%3D%20__import__(%22matplotlib.pyplot%22%2C%20fromlist%3D%5B%22pyplot%22%5D)%0A_np%20%3D%20__import__(%22numpy%22)%0A_pd%20%3D%20__import__(%22pandas%22)%0A_go%20%3D%20__import__(%22plotly.graph_objects%22%2C%20fromlist%3D%5B%22graph_objects%22%5D)%0A%0A_records%20%3D%20%5B%0A%20%20%20%20%7B%22species%22%3A%20%22moss%22%2C%20%22moisture%22%3A%2082%2C%20%22growth%22%3A%207.2%7D%2C%0A%20%20%20%20%7B%22species%22%3A%20%22fern%22%2C%20%22moisture%22%3A%2061%2C%20%22growth%22%3A%205.6%7D%2C%0A%20%20%20%20%7B%22species%22%3A%20%22lichen%22%2C%20%22moisture%22%3A%2035%2C%20%22growth%22%3A%203.9%7D%2C%0A%20%20%20%20%7B%22species%22%3A%20%22foxglove%22%2C%20%22moisture%22%3A%2054%2C%20%22growth%22%3A%208.1%7D%2C%0A%5D%0A_frame%20%3D%20_pd.DataFrame(_records)%0A_alt_chart%20%3D%20_alt.Chart(_frame).mark_circle(size%3D150).encode(%0A%20%20%20%20x%3D%22moisture%3AQ%22%2C%20y%3D%22growth%3AQ%22%2C%20color%3D%22species%3AN%22%2C%20tooltip%3Dlist(_frame.columns)%0A).properties(height%3D280)%0A_plotly_figure%20%3D%20_go.Figure(%0A%20%20%20%20data%3D_go.Scatter(%0A%20%20%20%20%20%20%20%20x%3D_frame%5B%22moisture%22%5D%2C%20y%3D_frame%5B%22growth%22%5D%2C%20mode%3D%22markers%2Btext%22%2C%0A%20%20%20%20%20%20%20%20text%3D_frame%5B%22species%22%5D%2C%20textposition%3D%22top%20center%22%2C%0A%20%20%20%20%20%20%20%20marker%3D%7B%22size%22%3A%2014%2C%20%22color%22%3A%20%5B%22%23568259%22%2C%20%22%233f7f5f%22%2C%20%22%23b58b48%22%2C%20%22%23a4516c%22%5D%7D%2C%0A%20%20%20%20)%0A)%0A_plotly_figure.update_layout(height%3D320%2C%20margin%3D%7B%22l%22%3A%2035%2C%20%22r%22%3A%2015%2C%20%22t%22%3A%2020%2C%20%22b%22%3A%2035%7D)%0A_x%20%3D%20_np.linspace(-3%2C%203%2C%2080)%0A_fig%2C%20_ax%20%3D%20_plt.subplots(figsize%3D(7%2C%203))%0A_ax.scatter(_x%2C%20_np.sin(_x%20*%202)%20*%20_np.exp(-_x**2%20%2F%207)%2C%20c%3D_x%2C%20cmap%3D%22viridis%22)%0A_ax.set_title(%22drag%20a%20box%20or%20shift-drag%20a%20lasso%22)%0A_fig.tight_layout()%0A_cards%20%3D%20%5B%0A%20%20%20%20native_card(%22table%22%2C%20mo.ui.table(_records%2C%20page_size%3D4%2C%20selection%3D%22multi%22%2C%20show_column_summaries%3DTrue))%2C%0A%20%20%20%20native_card(%22data_editor%22%2C%20mo.ui.data_editor(_records%2C%20page_size%3D4%2C%20label%3D%22editable%20field%20sheet%22))%2C%0A%20%20%20%20native_card(%22experimental_data_editor%22%2C%20mo.ui.experimental_data_editor(_records%2C%20page_size%3D4%2C%20label%3D%22same%20API%20alias%22)%2C%20%22Compatibility%20alias%2C%20deliberately%20included%20in%20the%20exhaustive%20surface.%22)%2C%0A%20%20%20%20native_card(%22dataframe%22%2C%20mo.ui.dataframe(_frame%2C%20page_size%3D4%2C%20show_download%3DTrue))%2C%0A%20%20%20%20native_card(%22data_explorer%22%2C%20mo.ui.data_explorer(_frame%2C%20x%3D%22moisture%22%2C%20y%3D%22growth%22%2C%20color%3D%22species%22))%2C%0A%20%20%20%20native_card(%22altair_chart%22%2C%20mo.ui.altair_chart(_alt_chart%2C%20chart_selection%3D%22interval%22)%2C%20%22Brush%20points%3B%20selection%20returns%20a%20filtered%20dataframe.%22)%2C%0A%20%20%20%20native_card(%22plotly%22%2C%20mo.ui.plotly(_plotly_figure)%2C%20%22Box-%20or%20lasso-select%20points.%22)%2C%0A%20%20%20%20native_card(%22matplotlib%22%2C%20mo.ui.matplotlib(_ax%2C%20debounce%3DTrue)%2C%20%22A%20static%20Matplotlib%20render%20with%20reactive%20selection%20geometry.%22)%2C%0A%5D%0Amo.vstack(_cards%2C%20gap%3D1.15)
mo.stop(native_deck.value%20!%3D%20%22Files%2C%20media%20%26%20agents%22)%0A%0Adef%20_garden_bot(messages%2C%20config)%3A%0A%20%20%20%20_question%20%3D%20messages%5B-1%5D.content%20if%20messages%20else%20%22hello%22%0A%20%20%20%20return%20f%22The%20local%20garden%20heard%3A%20%E2%80%98%7B_question%7D%E2%80%99.%20No%20API%20key%20or%20network%20model%20was%20used.%22%0A%0A_cards%20%3D%20%5B%0A%20%20%20%20native_card(%22file%22%2C%20mo.ui.file(filetypes%3D%5B%22.csv%22%2C%20%22.json%22%2C%20%22.txt%22%5D%2C%20kind%3D%22area%22%2C%20label%3D%22drop%20local%20observations%22)%2C%20%22Files%20remain%20inside%20this%20browser%20tab.%22)%2C%0A%20%20%20%20native_card(%22file_browser%22%2C%20mo.ui.file_browser(initial_path%3D%22%2F%22%2C%20restrict_navigation%3DTrue%2C%20label%3D%22Pyodide%20filesystem%22)%2C%20%22This%20browses%20the%20notebook's%20sandboxed%20in-memory%20filesystem.%22)%2C%0A%20%20%20%20native_card(%22microphone%22%2C%20mo.ui.microphone(label%3D%22record%20a%20field%20note%22)%2C%20%22Requires%20browser%20microphone%20permission%3B%20audio%20stays%20local.%22)%2C%0A%20%20%20%20native_card(%22chat%22%2C%20mo.ui.chat(_garden_bot%2C%20prompts%3D%5B%22What%20did%20the%20garden%20hear%3F%22%2C%20%22Name%20this%20specimen.%22%5D%2C%20max_height%3D320)%2C%20%22A%20deterministic%20offline%20model%20proves%20the%20chat%20protocol%20without%20a%20paid%20service.%22)%2C%0A%20%20%20%20native_card(%22anywidget%22%2C%20mo.ui.anywidget(ws.ColorPicker(color%3D%22%23db6d28%22))%2C%20%22The%20bridge%20that%20lets%20Marimo%20host%20WigglyStuff.%22)%2C%0A%20%20%20%20capability_card(%0A%20%20%20%20%20%20%20%20%22panel%22%2C%0A%20%20%20%20%20%20%20%20%22the%20optional%20%60panel%60%20Python%20package%20and%20its%20browser%20extension%22%2C%0A%20%20%20%20%20%20%20%20%22import%20panel%20as%20pn%5Cnmo.ui.panel(pn.widgets.IntSlider(start%3D0%2C%20end%3D10%2C%20value%3D5))%22%2C%0A%20%20%20%20)%2C%0A%5D%0Amo.vstack(_cards%2C%20gap%3D1.15)
mo.md(%0A%20%20%20%20%22%22%22%0A%20%20%20%20%23%23%203%20%C2%B7%20Every%20WigglyStuff%20component%0A%0A%20%20%20%20WigglyStuff%20is%20the%20experimental%20playground%3A%20direct-manipulation%20math%2C%0A%20%20%20%20sketching%2C%20tours%2C%20sensor%20bridges%2C%20animation%2C%20model%20inspection%2C%20and%20odd%0A%20%20%20%20little%20notebook%20utilities.%20Select%20a%20lab%20bench%3B%20the%20exact%20names%20on%20that%0A%20%20%20%20bench%20appear%20underneath%20it.%0A%20%20%20%20%22%22%22%0A)%0Awiggly_bench%20%3D%20mo.ui.dropdown(%0A%20%20%20%20list(WIGGLY_GROUPS)%2C%0A%20%20%20%20value%3D%22Geometry%20%26%20tangible%20math%22%2C%0A%20%20%20%20label%3D%22WigglyStuff%20bench%22%2C%0A%20%20%20%20full_width%3DTrue%2C%0A)%0Awiggly_bench
_names%20%3D%20WIGGLY_GROUPS%5Bwiggly_bench.value%5D%0Amo.md(%22%20%C2%B7%20%22.join(f%22%60%7Bname%7D%60%22%20for%20name%20in%20_names))
mo.stop(wiggly_bench.value%20!%3D%20%22Geometry%20%26%20tangible%20math%22)%0A_cards%20%3D%20%5B%0A%20%20%20%20anywidget_card(%22Slider2D%22%2C%20lambda%3A%20ws.Slider2D(x%3D.3%2C%20y%3D-.2%2C%20width%3D620%2C%20height%3D260)%2C%20%22Drag%20a%20point%20through%20a%20two-dimensional%20parameter%20space.%22)%2C%0A%20%20%20%20anywidget_card(%22BezierCurve%22%2C%20lambda%3A%20ws.BezierCurve(points%3D%5B%7B%22x%22%3A%20.05%2C%20%22y%22%3A%20.25%7D%2C%20%7B%22x%22%3A%20.28%2C%20%22y%22%3A%20.95%7D%2C%20%7B%22x%22%3A%20.7%2C%20%22y%22%3A%20.05%7D%2C%20%7B%22x%22%3A%20.95%2C%20%22y%22%3A%20.72%7D%5D%2C%20width%3D620%2C%20height%3D300%2C%20show_axes%3DTrue%2C%20playing%3DTrue%2C%20loop%3DTrue%2C%20duration_ms%3D6000)%2C%20%22Move%20control%20points%20or%20play%20the%20parameter%20along%20the%20curve.%22)%2C%0A%20%20%20%20anywidget_card(%22CurveEditor%22%2C%20lambda%3A%20ws.CurveEditor(points%3D%5B%7B%22x%22%3A%20.05%2C%20%22y%22%3A%20.15%7D%2C%20%7B%22x%22%3A%20.28%2C%20%22y%22%3A%20.82%7D%2C%20%7B%22x%22%3A%20.58%2C%20%22y%22%3A%20.35%7D%2C%20%7B%22x%22%3A%20.94%2C%20%22y%22%3A%20.75%7D%5D%2C%20curve%3D%22catmull_rom%22%2C%20width%3D620%2C%20height%3D300%2C%20show_axes%3DTrue)%2C%20%22Editable%20knots%20with%20multiple%20interpolation%20families.%22)%2C%0A%20%20%20%20anywidget_card(%22CircularSlider%22%2C%20lambda%3A%20ws.CircularSlider(0%2C%20360%2C%20step%3D1%2C%20value%3D212%2C%20size%3D190%2C%20label%3D%22bearing%22%2C%20color%3D%22%23db6d28%22))%2C%0A%20%20%20%20anywidget_card(%22CircularRangeSlider%22%2C%20lambda%3A%20ws.CircularRangeSlider(0%2C%2024%2C%20step%3D.5%2C%20value%3D(18%2C%205)%2C%20size%3D190%2C%20label%3D%22nocturnal%20window%22%2C%20color%3D%22%237457a8%22))%2C%0A%20%20%20%20anywidget_card(%22Matrix%22%2C%20lambda%3A%20ws.Matrix(rows%3D3%2C%20cols%3D3%2C%20min_value%3D-1%2C%20max_value%3D1%2C%20step%3D.05%2C%20digits%3D2%2C%20mirror%3DTrue%2C%20row_names%3D%5B%22rain%22%2C%20%22moss%22%2C%20%22moths%22%5D%2C%20col_names%3D%5B%22rain%22%2C%20%22moss%22%2C%20%22moths%22%5D)%2C%20%22Edit%20a%20symmetric%20relationship%20matrix.%22)%2C%0A%20%20%20%20anywidget_card(%22TangleSlider%22%2C%20lambda%3A%20ws.TangleSlider(amount%3D2.718%2C%20min_value%3D0%2C%20max_value%3D10%2C%20step%3D.001%2C%20prefix%3D%22growth%20%3D%20%22%2C%20suffix%3D%22%C3%97%22%2C%20digits%3D3)%2C%20%22Drag%20the%20number%20itself.%22)%2C%0A%20%20%20%20anywidget_card(%22TangleChoice%22%2C%20lambda%3A%20ws.TangleChoice(%5B%22moss%22%2C%20%22lichen%22%2C%20%22fern%22%2C%20%22mycelium%22%5D)%2C%20%22Scrub%20through%20words%20in-place.%22)%2C%0A%20%20%20%20anywidget_card(%22TangleSelect%22%2C%20lambda%3A%20ws.TangleSelect(%5B%22linear%22%2C%20%22logistic%22%2C%20%22chaotic%22%5D)%2C%20%22A%20compact%20textual%20selector.%22)%2C%0A%20%20%20%20anywidget_card(%22TangleLatex%22%2C%20lambda%3A%20ws.TangleLatex(r%22f(x)%3D%5C%5Ctangle%7Ba%7Dx%5E2%2B%5C%5Ctangle%7Bb%7Dx%22%2C%20%7B%22a%22%3A%20%7B%22value%22%3A%201.5%2C%20%22min_value%22%3A%20-4%2C%20%22max_value%22%3A%204%2C%20%22step%22%3A%20.1%2C%20%22display%22%3A%20%22symbol%22%7D%2C%20%22b%22%3A%20%7B%22value%22%3A%20-1%2C%20%22min_value%22%3A%20-5%2C%20%22max_value%22%3A%205%2C%20%22step%22%3A%20.1%2C%20%22display%22%3A%20%22symbol%22%7D%7D%2C%20reveal_all_on_drag%3DTrue)%2C%20%22Drag%20the%20highlighted%20symbols%20inside%20the%20equation.%22)%2C%0A%5D%0Amo.vstack(_cards%2C%20gap%3D1.3)
mo.stop(wiggly_bench.value%20!%3D%20%22Sketches%20%26%20graphs%22)%0A_dag_a%20%3D%20mo.ui.slider(0%2C%2010%2C%20value%3D4%2C%20label%3D%22rain%22)%0A_dag_b%20%3D%20mo.ui.slider(0%2C%2010%2C%20value%3D7%2C%20label%3D%22sun%22)%0A_dag_result%20%3D%20%22mean%20response%22%0A_cards%20%3D%20%5B%0A%20%20%20%20anywidget_card(%22Paint%22%2C%20lambda%3A%20ws.Paint(width%3D700%2C%20height%3D360%2C%20rainbow_brush%3DTrue)%2C%20%22Paint%20a%20local%20raster%20and%20read%20its%20pixels%20back%20in%20Python.%22)%2C%0A%20%20%20%20anywidget_card(%22Excalidraw%22%2C%20lambda%3A%20ws.Excalidraw(height%3D430%2C%20theme%3D%22light%22)%2C%20%22A%20full%20whiteboard%20scene%20with%20synced%20JSON%20state.%22)%2C%0A%20%20%20%20anywidget_card(%22GraphWidget%22%2C%20lambda%3A%20ws.GraphWidget(nodes%3D%5B%7B%22id%22%3A%20%22seed%22%2C%20%22label%22%3A%20%22seed%22%7D%2C%20%7B%22id%22%3A%20%22rain%22%2C%20%22label%22%3A%20%22rain%22%7D%2C%20%7B%22id%22%3A%20%22moss%22%2C%20%22label%22%3A%20%22moss%22%7D%2C%20%7B%22id%22%3A%20%22moth%22%2C%20%22label%22%3A%20%22moth%22%7D%5D%2C%20edges%3D%5B(%22seed%22%2C%20%22moss%22)%2C%20(%22rain%22%2C%20%22moss%22)%2C%20(%22moss%22%2C%20%22moth%22)%5D%2C%20height%3D330)%2C%20%22Drag%20nodes%3B%20add%20or%20remove%20relationships.%22)%2C%0A%20%20%20%20anywidget_card(%22GridDraw%22%2C%20lambda%3A%20ws.GridDraw(rows%3D6%2C%20cols%3D10%2C%20width%3D650%2C%20height%3D340%2C%20dots%3D%5B(1%2C%201)%2C%20(2%2C%203)%2C%20(4%2C%207)%5D%2C%20lines%3D%5B%7B%22source%22%3A%20%5B1%2C%201%5D%2C%20%22target%22%3A%20%5B2%2C%203%5D%7D%5D)%2C%20%22Draw%20paths%20on%20a%20constrained%20lattice.%22)%2C%0A%20%20%20%20anywidget_card(%22EdgeDraw%22%2C%20lambda%3A%20ws.EdgeDraw(%5B%22capture%22%2C%20%22clean%22%2C%20%22model%22%2C%20%22publish%22%5D%2C%20links%3D%5B(%22capture%22%2C%20%22clean%22)%2C%20(%22clean%22%2C%20%22model%22)%2C%20(%22model%22%2C%20%22publish%22)%5D%2C%20width%3D650%2C%20height%3D320)%2C%20%22Edit%20a%20tiny%20workflow%20graph.%22)%2C%0A%20%20%20%20anywidget_card(%22SortableList%22%2C%20lambda%3A%20ws.SortableList(%5B%22collect%22%2C%20%22question%22%2C%20%22model%22%2C%20%22verify%22%2C%20%22publish%22%5D%2C%20addable%3DTrue%2C%20removable%3DTrue%2C%20editable%3DTrue%2C%20label%3D%22research%20loop%22)%2C%20%22Reorder%20the%20pipeline%3B%20add%20and%20edit%20steps.%22)%2C%0A%20%20%20%20mo.vstack(%5Bmo.md(%22%23%23%23%20WidgetDAG%22)%2C%20ws.WidgetDAG(nodes%3D%7B%22rain%22%3A%20_dag_a%2C%20%22sun%22%3A%20_dag_b%2C%20%22growth%22%3A%20_dag_result%7D%2C%20edges%3D%5B(%22rain%22%2C%20%22growth%22)%2C%20(%22sun%22%2C%20%22growth%22)%5D)%2C%20mo.md(%22Live%20Marimo%20controls%20laid%20out%20as%20a%20dependency%20graph.%22)%5D)%2C%0A%5D%0Amo.vstack(_cards%2C%20gap%3D1.3)
mo.stop(wiggly_bench.value%20!%3D%20%22Data%20%26%20charts%22)%0Aif%20sys.platform%20%3D%3D%20%22emscripten%22%3A%0A%20%20%20%20import%20micropip%20as%20_micropip%0A%0A%20%20%20%20await%20_micropip.install(%5B%22altair%3E%3D6%2C%3C7%22%2C%20%22matplotlib%22%2C%20%22numpy%22%2C%20%22pandas%22%5D)%0A_alt%20%3D%20__import__(%22altair%22)%0A_plt%20%3D%20__import__(%22matplotlib.pyplot%22%2C%20fromlist%3D%5B%22pyplot%22%5D)%0A_np%20%3D%20__import__(%22numpy%22)%0A_pd%20%3D%20__import__(%22pandas%22)%0A%0A_frame%20%3D%20_pd.DataFrame(signal_rows)%0A_alt_chart%20%3D%20_alt.Chart(_frame).mark_line().encode(x%3D%22step%3AQ%22%2C%20y%3D%22value%3AQ%22%2C%20color%3D%22wave%3AN%22)%0A%0Adef%20_scatter_figure(title)%3A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20_plt.subplots(figsize%3D(6.3%2C%203.2))%0A%20%20%20%20_x%20%3D%20_np.linspace(-3%2C%203%2C%2080)%0A%20%20%20%20_ax.scatter(_x%2C%20_np.sin(_x%20*%202)%20%2B%20_x%20%2F%204%2C%20c%3D_x%2C%20cmap%3D%22viridis%22%2C%20s%3D24)%0A%20%20%20%20_ax.set_title(title)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20return%20_fig%0A%0Adef%20_linear_spline(x%2C%20y)%3A%0A%20%20%20%20_order%20%3D%20_np.argsort(x)%0A%20%20%20%20_curve_x%20%3D%20_np.linspace(x.min()%2C%20x.max()%2C%20150)%0A%20%20%20%20return%20_curve_x%2C%20_np.interp(_curve_x%2C%20x%5B_order%5D%2C%20y%5B_order%5D)%0A%0A_log%20%3D%20ws.ScatterLog(x_label%3D%22step%22%2C%20y_label%3D%22value%22%2C%20max_points%3D100%2C%20width%3D640%2C%20height%3D300)%0Afor%20_row%20in%20signal_rows%5B%3A%3A4%5D%3A%0A%20%20%20%20_log.append(_row%5B%22step%22%5D%2C%20_row%5B%22value%22%5D%2C%20color%3D_row%5B%22wave%22%5D)%0A%0A_ridge%20%3D%20_pd.DataFrame(%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%22value%22%3A%20%5Bmath.sin(i%20%2F%203)%20%2B%20band%20*%20.7%20for%20band%20in%20range(4)%20for%20i%20in%20range(30)%5D%2C%0A%20%20%20%20%20%20%20%20%22habitat%22%3A%20%5Bname%20for%20name%20in%20%5B%22canopy%22%2C%20%22meadow%22%2C%20%22marsh%22%2C%20%22soil%22%5D%20for%20_%20in%20range(30)%5D%2C%0A%20%20%20%20%7D%0A)%0A_forecast%20%3D%20_pd.DataFrame(%7B%22date%22%3A%20_pd.date_range(%222026-01-01%22%2C%20periods%3D90)%2C%20%22signal%22%3A%20%5B2%20%2B%20i%20*%20.015%20%2B%20math.sin(i%20%2F%206)%20*%20.35%20for%20i%20in%20range(90)%5D%7D)%0A_cards%20%3D%20%5B%0A%20%20%20%20anywidget_card(%22AltairWidget%22%2C%20lambda%3A%20ws.AltairWidget(_alt_chart%2C%20width%3D650%2C%20height%3D300)%2C%20%22Flicker-free%20reactive%20Vega%20updates.%22)%2C%0A%20%20%20%20anywidget_card(%22ChartPuck%22%2C%20lambda%3A%20ws.ChartPuck(_scatter_figure(%22drag%20the%20puck%22)%2C%20x%3D0%2C%20y%3D0%2C%20puck_color%3D%22%23db6d28%22))%2C%0A%20%20%20%20anywidget_card(%22ChartSelect%22%2C%20lambda%3A%20ws.ChartSelect(_scatter_figure(%22box%20or%20lasso%20a%20region%22)%2C%20mode%3D%22lasso%22))%2C%0A%20%20%20%20anywidget_card(%22ChartMultiSelect%22%2C%20lambda%3A%20ws.ChartMultiSelect(_scatter_figure(%22paint%20two%20classes%22)%2C%20n_classes%3D2%2C%20mode%3D%22brush%22))%2C%0A%20%20%20%20anywidget_card(%22ObservablePlot%22%2C%20lambda%3A%20ws.ObservablePlot('Plot.plot(%7Bmarks%3A%5BPlot.barY(samples%2C%7Bx%3A%22step%22%2Cy%3A%22value%22%2Cfill%3A%22wave%22%7D)%2CPlot.ruleY(%5B0%5D)%5D%7D)'%2C%20variables%3D%7B%22samples%22%3A%20signal_rows%7D%2C%20width%3D650%2C%20height%3D300%2C%20version%3D%220.6.17%22))%2C%0A%20%20%20%20anywidget_card(%22ParallelCoordinates%22%2C%20lambda%3A%20ws.ParallelCoordinates(_pd.DataFrame(%5B%7B%22species%22%3A%20%22moss%22%2C%20%22moisture%22%3A%2082%2C%20%22growth%22%3A%207.2%2C%20%22shade%22%3A%208%7D%2C%20%7B%22species%22%3A%20%22fern%22%2C%20%22moisture%22%3A%2061%2C%20%22growth%22%3A%205.6%2C%20%22shade%22%3A%205%7D%2C%20%7B%22species%22%3A%20%22lichen%22%2C%20%22moisture%22%3A%2035%2C%20%22growth%22%3A%203.9%2C%20%22shade%22%3A%202%7D%2C%20%7B%22species%22%3A%20%22foxglove%22%2C%20%22moisture%22%3A%2054%2C%20%22growth%22%3A%208.1%2C%20%22shade%22%3A%204%7D%5D)%2C%20color_by%3D%22species%22%2C%20height%3D360))%2C%0A%20%20%20%20anywidget_card(%22RidgelineChart%22%2C%20lambda%3A%20ws.RidgelineChart(_ridge%2C%20width%3D650%2C%20height%3D360%2C%20overlap%3D.65%2C%20x_label%3D%22response%22%2C%20y_label%3D%22habitat%22))%2C%0A%20%20%20%20anywidget_card(%22ScatterLog%22%2C%20lambda%3A%20_log%2C%20%22A%20stable%20chart%20that%20accumulates%20observations%20instead%20of%20resetting%20on%20reactivity.%22)%2C%0A%20%20%20%20anywidget_card(%22ScatterWidget%22%2C%20lambda%3A%20ws.ScatterWidget(n_classes%3D3%2C%20width%3D650%2C%20height%3D330)%2C%20%22Paint%20a%20synthetic%20classification%20dataset.%22)%2C%0A%20%20%20%20anywidget_card(%22SplineDraw%22%2C%20lambda%3A%20ws.SplineDraw(_linear_spline%2C%20width%3D650%2C%20height%3D330)%2C%20%22Draw%20points%3B%20Python%20fits%20and%20returns%20a%20curve.%22)%2C%0A%20%20%20%20anywidget_card(%22Treemap%22%2C%20lambda%3A%20ws.Treemap(%7B%22garden%22%3A%20%7B%22plants%22%3A%20%7B%22moss%22%3A%2034%2C%20%22fern%22%3A%2021%2C%20%22lichen%22%3A%2013%7D%2C%20%22animals%22%3A%20%7B%22moths%22%3A%2018%2C%20%22beetles%22%3A%208%7D%2C%20%22weather%22%3A%20%7B%22rain%22%3A%2025%2C%20%22sun%22%3A%2016%7D%7D%7D%2C%20width%3D650%2C%20height%3D360))%2C%0A%20%20%20%20anywidget_card(%22NestedTable%22%2C%20lambda%3A%20ws.NestedTable(%7B%22garden%22%3A%20%7B%22plants%22%3A%20%7B%22moss%22%3A%2034%2C%20%22fern%22%3A%2021%7D%2C%20%22animals%22%3A%20%7B%22moths%22%3A%2018%2C%20%22beetles%22%3A%208%7D%7D%2C%20%22lab%22%3A%20%7B%22samples%22%3A%2081%2C%20%22models%22%3A%207%7D%7D%2C%20initial_expand_depth%3D2))%2C%0A%20%20%20%20anywidget_card(%22forecast_chart%22%2C%20lambda%3A%20ws.AltairWidget(ws.forecast_chart(_forecast%2C%20%22date%22%2C%20%22signal%22%2C%20fit_window%3D45%2C%20projection_days%3D30%2C%20title%3D%22growth%20forecast%22)%2C%20width%3D650%2C%20height%3D340)%2C%20%22The%20helper%20returns%20an%20Altair%20chart%3B%20AltairWidget%20keeps%20it%20live.%22%2C%20badge%3D%22helper%20function%22)%2C%0A%5D%0Amo.vstack(_cards%2C%20gap%3D1.3)
mo.stop(wiggly_bench.value%20!%3D%20%22Space%2C%20frames%20%26%20sensors%22)%0Aif%20sys.platform%20%3D%3D%20%22emscripten%22%3A%0A%20%20%20%20import%20micropip%20as%20_micropip%0A%0A%20%20%20%20await%20_micropip.install(%22pillow%22)%0A_pil%20%3D%20__import__(%22PIL%22%2C%20fromlist%3D%5B%22Image%22%2C%20%22ImageDraw%22%5D)%0A_Image%20%3D%20_pil.Image%0A_ImageDraw%20%3D%20_pil.ImageDraw%0A%0A_points%20%3D%20%5B%0A%20%20%20%20%7B%22x%22%3A%20math.cos(i%20%2F%208)%20*%20(1%20%2B%20i%20%2F%2080)%2C%20%22y%22%3A%20math.sin(i%20%2F%208)%20*%20(1%20%2B%20i%20%2F%2080)%2C%20%22z%22%3A%20i%20%2F%2025%20-%202%2C%20%22color%22%3A%20%22%23db6d28%22%20if%20i%20%25%202%20else%20%22%23568259%22%7D%0A%20%20%20%20for%20i%20in%20range(80)%0A%5D%0A_frames%20%3D%20%5B%5D%0Afor%20_frame_i%20in%20range(12)%3A%0A%20%20%20%20_image%20%3D%20_Image.new(%22RGB%22%2C%20(420%2C%20180)%2C%20%22%23111827%22)%0A%20%20%20%20_draw%20%3D%20_ImageDraw.Draw(_image)%0A%20%20%20%20for%20_star%20in%20range(16)%3A%0A%20%20%20%20%20%20%20%20_x%20%3D%20(_star%20*%2047%20%2B%20_frame_i%20*%20(_star%20%25%204%20%2B%201)%20*%205)%20%25%20420%0A%20%20%20%20%20%20%20%20_y%20%3D%20(_star%20*%2031)%20%25%20180%0A%20%20%20%20%20%20%20%20_r%20%3D%202%20%2B%20(_star%20%25%203)%0A%20%20%20%20%20%20%20%20_draw.ellipse((_x%20-%20_r%2C%20_y%20-%20_r%2C%20_x%20%2B%20_r%2C%20_y%20%2B%20_r)%2C%20fill%3D%22%23f4d35e%22)%0A%20%20%20%20_frames.append(_image)%0A_preview_buffer%20%3D%20io.BytesIO()%0A_frames%5B3%5D.save(_preview_buffer%2C%20format%3D%22PNG%22)%0A_preview_uri%20%3D%20%22data%3Aimage%2Fpng%3Bbase64%2C%22%20%2B%20base64.b64encode(_preview_buffer.getvalue()).decode()%0A_cards%20%3D%20%5B%0A%20%20%20%20anywidget_card(%22ThreeWidget%22%2C%20lambda%3A%20ws.ThreeWidget(data%3D_points%2C%20width%3D650%2C%20height%3D380%2C%20show_grid%3DTrue%2C%20show_axes%3DTrue%2C%20axis_labels%3D%5B%22x%22%2C%20%22y%22%2C%20%22time%22%5D%2C%20auto_rotate%3DTrue))%2C%0A%20%20%20%20anywidget_card(%22CubeWidget%22%2C%20lambda%3A%20ws.CubeWidget(x_axis%3D%7B%22name%22%3A%20%22angle%22%2C%20%22values%22%3A%20list(range(0%2C%2091%2C%2010))%7D%2C%20y_axis%3D%7B%22name%22%3A%20%22force%22%2C%20%22values%22%3A%20list(range(0%2C%20101%2C%2010))%7D%2C%20z_axis%3D%7B%22name%22%3A%20%22time%22%2C%20%22values%22%3A%20%5Bround(i%20*%20.25%2C%202)%20for%20i%20in%20range(21)%5D%7D)%2C%20%22Lock%20axes%20to%20move%20from%20volume%20%E2%86%92%20plane%20%E2%86%92%20line%20%E2%86%92%20point.%22)%2C%0A%20%20%20%20anywidget_card(%22FramePlayer%22%2C%20lambda%3A%20ws.FramePlayer(_frames%2C%20interval_ms%3D90%2C%20loop%3DTrue%2C%20width%3D650)%2C%20%22A%20sequence%20of%20PIL%20frames%20becomes%20a%20tiny%20local%20movie.%22)%2C%0A%20%20%20%20anywidget_card(%22ManimWeb%22%2C%20lambda%3A%20ws.ManimWeb(code%3D%22%22%22from%20manim%20import%20*%5Cnclass%20Orbit(Scene)%3A%5Cn%20%20%20%20def%20construct(self)%3A%5Cn%20%20%20%20%20%20%20%20dot%20%3D%20Dot(color%3DORANGE)%5Cn%20%20%20%20%20%20%20%20self.play(dot.animate.shift(RIGHT%20*%202)%2C%20run_time%3D2)%5Cn%22%22%22%2C%20width%3D650%2C%20height%3D360)%2C%20%22Runs%20Manim%20WebAssembly%20in%20the%20tab%3B%20its%20own%20runtime%20may%20take%20a%20moment.%22)%2C%0A%20%20%20%20anywidget_card(%22HoverZoom%22%2C%20lambda%3A%20ws.HoverZoom(_preview_uri%2C%20zoom_factor%3D4%2C%20width%3D650)%2C%20%22Hover%20the%20generated%20star%20field%20for%20a%20magnifying%20lens.%22)%2C%0A%20%20%20%20anywidget_card(%22WebcamCapture%22%2C%20lambda%3A%20ws.WebcamCapture(interval_ms%3D1200%2C%20facing_mode%3D%22user%22)%2C%20%22Requires%20explicit%20camera%20permission%3B%20frames%20remain%20in%20the%20browser.%22%2C%20badge%3D%22permission-gated%22)%2C%0A%20%20%20%20anywidget_card(%22WebkitSpeechToTextWidget%22%2C%20lambda%3A%20ws.WebkitSpeechToTextWidget()%2C%20%22Uses%20the%20browser's%20speech-recognition%20capability%20where%20available.%22%2C%20badge%3D%22browser-dependent%22)%2C%0A%20%20%20%20anywidget_card(%22GamepadWidget%22%2C%20lambda%3A%20ws.GamepadWidget()%2C%20%22Connect%20or%20press%20a%20gamepad%20to%20inspect%20axes%20and%20buttons.%22%2C%20badge%3D%22hardware-optional%22)%2C%0A%20%20%20%20anywidget_card(%22KeystrokeWidget%22%2C%20lambda%3A%20ws.KeystrokeWidget()%2C%20%22Focus%20the%20widget%20and%20press%20keys%3B%20the%20event%20becomes%20Python%20state.%22%2C%20badge%3D%22focus-gated%22)%2C%0A%5D%0Amo.vstack(_cards%2C%20gap%3D1.3)
mo.stop(wiggly_bench.value%20!%3D%20%22Notebook%20utilities%22)%0Aif%20sys.platform%20%3D%3D%20%22emscripten%22%3A%0A%20%20%20%20import%20micropip%20as%20_micropip%0A%0A%20%20%20%20await%20_micropip.install(%5B%22numpy%22%2C%20%22pillow%22%5D)%0A_np%20%3D%20__import__(%22numpy%22)%0A_pil%20%3D%20__import__(%22PIL%22%2C%20fromlist%3D%5B%22Image%22%2C%20%22ImageDraw%22%5D)%0A_Image%20%3D%20_pil.Image%0A_ImageDraw%20%3D%20_pil.ImageDraw%0A%0A_image%20%3D%20_Image.new(%22RGB%22%2C%20(520%2C%20190)%2C%20%22%2318212f%22)%0A_draw%20%3D%20_ImageDraw.Draw(_image)%0Afor%20_i%20in%20range(28)%3A%0A%20%20%20%20_draw.line((0%2C%20_i%20*%207%2C%20520%2C%20190%20-%20_i%20*%205)%2C%20fill%3D(35%20%2B%20_i%20*%205%2C%20150%2C%20120)%2C%20width%3D2)%0A_buffer%20%3D%20io.BytesIO()%0A_image.save(_buffer%2C%20format%3D%22PNG%22)%0A_image_uri%20%3D%20%22data%3Aimage%2Fpng%3Bbase64%2C%22%20%2B%20base64.b64encode(_buffer.getvalue()).decode()%0A%0Adef%20_tiny_model(x%2C%20curve%3D1.7)%3A%0A%20%20%20%20return%20%5B%7B%22x%22%3A%20float(v)%2C%20%22y%22%3A%20float(v**curve)%7D%20for%20v%20in%20x%5D%0A%0A_cards%20%3D%20%5B%0A%20%20%20%20anywidget_card(%22AnnotationWidget%22%2C%20lambda%3A%20ws.AnnotationWidget(actions%3D%5B%22keep%22%2C%20%22question%22%2C%20%22discard%22%5D%2C%20keyboard_mapping%3D%7B%221%22%3A%20%22keep%22%2C%20%222%22%3A%20%22question%22%2C%20%223%22%3A%20%22discard%22%7D%2C%20width%3D650)%2C%20%22Label%20examples%20by%20button%2C%20key%2C%20or%20gamepad.%22)%2C%0A%20%20%20%20anywidget_card(%22ColorPicker%22%2C%20lambda%3A%20ws.ColorPicker(color%3D%22%23568259%22))%2C%0A%20%20%20%20anywidget_card(%22CopyToClipboard%22%2C%20lambda%3A%20ws.CopyToClipboard(%22The%20garden%20is%20a%20graph%20with%20weather.%22)%2C%20%22Copies%20only%20after%20your%20click.%22)%2C%0A%20%20%20%20anywidget_card(%22TextCompare%22%2C%20lambda%3A%20ws.TextCompare(%22Reactive%20notebooks%20make%20dependencies%20visible%20and%20reproducible.%22%2C%20%22Reactive%20gardens%20make%20relationships%20visible%2C%20playful%2C%20and%20reproducible.%22%2C%20min_match_words%3D2))%2C%0A%20%20%20%20anywidget_card(%22PlaySlider%22%2C%20lambda%3A%20ws.PlaySlider(value%3D12%2C%20min_value%3D0%2C%20max_value%3D47%2C%20step%3D1%2C%20interval_ms%3D120%2C%20loop%3DTrue%2C%20width%3D620))%2C%0A%20%20%20%20anywidget_card(%22ProgressBar%22%2C%20lambda%3A%20ws.ProgressBar(value%3D73%2C%20max_value%3D100%2C%20color%3D%22%23568259%22%2C%20width%3D%22100%25%22%2C%20height%3D25))%2C%0A%20%20%20%20anywidget_card(%22HTMLRefreshWidget%22%2C%20lambda%3A%20ws.HTMLRefreshWidget(html%3D%22%3Cdiv%20style%3D'padding%3A1rem%3Bborder-radius%3A.7rem%3Bbackground%3Alinear-gradient(90deg%2C%2356825944%2C%23db6d2844)'%3E%3Cstrong%3ELive%20HTML%20state%3C%2Fstrong%3E%3Cbr%2F%3EUseful%20for%20server-generated%20snippets%20that%20update%20in%20place.%3C%2Fdiv%3E%22))%2C%0A%20%20%20%20anywidget_card(%22ImageRefreshWidget%22%2C%20lambda%3A%20ws.ImageRefreshWidget(src%3D_image_uri)%2C%20%22A%20data%20URI%20stands%20in%20for%20a%20repeatedly%20regenerated%20plot.%22)%2C%0A%20%20%20%20anywidget_card(%22EsmWidget%22%2C%20lambda%3A%20ws.EsmWidget(%22%22%22export%20default%20%7B%20render(%7Bmodel%2C%20el%7D)%20%7B%20const%20b%3Ddocument.createElement('button')%3B%20b.textContent%3D'poke%20the%20JavaScript%20%E2%86%94%20Python%20bridge'%3B%20b.style.cssText%3D'padding%3A1rem%3Bborder-radius%3A999px%3Bborder%3A1px%20solid%20currentColor%3Bbackground%3Atransparent%3Bcolor%3Ainherit'%3B%20b.onclick%3D()%3D%3E%7B%20const%20n%3D(model.get('data').pokes%7C%7C0)%2B1%3B%20model.set('data'%2C%7Bpokes%3An%7D)%3B%20model.save_changes()%3B%20b.textContent%3D%60bridge%20poked%20%24%7Bn%7D%C3%97%60%3B%20%7D%3B%20el.appendChild(b)%3B%20%7D%20%7D%22%22%22%2C%20data%3D%7B%22pokes%22%3A%200%7D%2C%20width%3D650%2C%20height%3D90)%2C%20%22A%20trusted%20inline%20ES%20module%20with%20a%20two-way%20data%20trait.%22)%2C%0A%20%20%20%20anywidget_card(%22LiveEdit%22%2C%20lambda%3A%20ws.LiveEdit(%22def%20power_curve(x%2C%20curve%3D1.7)%3A%5Cn%20%20%20%20return%20%5B%7B'x'%3A%20float(v)%2C%20'y'%3A%20float(v%20**%20curve)%7D%20for%20v%20in%20x%5D%22%2C%20args%3D(_np.linspace(0%2C%201%2C%2012)%2C)%2C%20function_name%3D%22power_curve%22%2C%20editable%3DTrue%2C%20height%3D330)%2C%20%22Edit%20and%20rerun%20a%20small%20function%20inside%20the%20widget.%22)%2C%0A%20%20%20%20anywidget_card(%22inspect_run%22%2C%20lambda%3A%20ws.inspect_run(_tiny_model%2C%20_np.linspace(0%2C%201%2C%2012)%2C%20curve%3D1.7)%2C%20%22Function%20helper%20that%20produces%20a%20LiveEdit%20inspector.%22%2C%20badge%3D%22helper%20function%22)%2C%0A%20%20%20%20anywidget_card(%22ApiDoc%22%2C%20lambda%3A%20ws.ApiDoc(ws.Slider2D%2C%20width%3D650)%2C%20%22Live%20signature%20and%20documentation%20for%20a%20Python%20object.%22)%2C%0A%5D%0Amo.vstack(_cards%2C%20gap%3D1.3)
mo.stop(wiggly_bench.value%20!%3D%20%22Runtime%20%26%20integrations%22)%0A_cards%20%3D%20%5B%0A%20%20%20%20capability_card(%22AsyncFlow%22%2C%20%22Python%203.12%20%60sys.monitoring%60%20in%20a%20full%20Marimo%20kernel%22%2C%20%22flow%20%3D%20await%20ws.AsyncFlow.trace(my_async_pipeline())%5Cnmo.ui.anywidget(flow)%22)%2C%0A%20%20%20%20anywidget_card(%22CellTour%22%2C%20lambda%3A%20ws.CellTour(steps%3D%5B%7B%22cell_name%22%3A%20%22native_deck%22%2C%20%22popover%22%3A%20%7B%22title%22%3A%20%22Marimo%20deck%22%2C%20%22description%22%3A%20%22Switch%20component%20families%20here.%22%2C%20%22side%22%3A%20%22bottom%22%7D%7D%5D%2C%20auto_start%3DFalse)%2C%20%22Targets%20named%20cells%20in%20the%20full%20editor%3B%20exported%20islands%20may%20not%20retain%20those%20names.%22%2C%20badge%3D%22editor-context%22)%2C%0A%20%20%20%20anywidget_card(%22DriverTour%22%2C%20lambda%3A%20ws.DriverTour(steps%3D%5B%7B%22element%22%3A%20%22%5Bdata-showcase-hero%5D%22%2C%20%22popover%22%3A%20%7B%22title%22%3A%20%22The%20Reactive%20Garden%22%2C%20%22description%22%3A%20%22This%20tour%20targets%20ordinary%20page%20CSS.%22%2C%20%22side%22%3A%20%22bottom%22%7D%7D%5D%2C%20auto_start%3DFalse)%2C%20%22A%20CSS-targeted%20tour%20can%20guide%20either%20an%20app%20or%20a%20published%20page.%22)%2C%0A%20%20%20%20anywidget_card(%22EnvConfig%22%2C%20lambda%3A%20ws.EnvConfig(%7B%22DEMO_GARDEN_NAME%22%3A%20None%7D)%2C%20%22A%20harmless%20placeholder%20demonstrates%20validation.%20Never%20paste%20a%20real%20secret%20into%20a%20public%20notebook.%22%2C%20badge%3D%22local%20environment%22)%2C%0A%20%20%20%20capability_card(%22ModuleTreeWidget%22%2C%20%22a%20live%20PyTorch%20module%20and%20the%20optional%20%60torch%60%20extra%22%2C%20%22model%20%3D%20torch.nn.Sequential(...)%5Cnmo.ui.anywidget(ws.ModuleTreeWidget(model))%22)%2C%0A%20%20%20%20capability_card(%22Neo4jWidget%22%2C%20%22a%20Neo4j%20driver%2C%20database%20URL%2C%20and%20credentials%22%2C%20%22mo.ui.anywidget(ws.Neo4jWidget(driver%2C%20initial_query%3D'MATCH%20(n)%20RETURN%20n%20LIMIT%2050'))%22)%2C%0A%20%20%20%20capability_card(%22WandbChart%22%2C%20%22a%20Weights%20%26%20Biases%20run%20plus%20authenticated%20network%20access%22%2C%20%22mo.ui.anywidget(ws.WandbChart(run%2C%20chart%3D'loss'))%22)%2C%0A%5D%0Amo.vstack(_cards%2C%20gap%3D1.3)
mo.md(%0A%20%20%20%20%22%22%22%0A%20%20%20%20%23%23%204%20%C2%B7%20Exhaustive%20inventory%0A%0A%20%20%20%20This%20is%20the%20audit%20trail.%20%E2%80%9CLive%E2%80%9D%20means%20it%20can%20run%20in%20this%20static%20browser%0A%20%20%20%20notebook%3B%20the%20other%20labels%20name%20a%20real%20requirement.%20Use%20the%20search%20box%0A%20%20%20%20and%20column%20filters%20to%20find%20a%20component%20by%20purpose%20or%20runtime.%0A%20%20%20%20%22%22%22%0A)%0A_permission%20%3D%20%7B%0A%20%20%20%20%22microphone%22%2C%20%22WebcamCapture%22%2C%20%22WebkitSpeechToTextWidget%22%2C%0A%20%20%20%20%22GamepadWidget%22%2C%20%22KeystrokeWidget%22%2C%0A%7D%0A_server%20%3D%20%7B%22panel%22%2C%20%22AsyncFlow%22%2C%20%22ModuleTreeWidget%22%2C%20%22Neo4jWidget%22%2C%20%22WandbChart%22%7D%0A_context%20%3D%20%7B%22file_browser%22%2C%20%22CellTour%22%2C%20%22EnvConfig%22%7D%0A_helpers%20%3D%20%7B%22forecast_chart%22%2C%20%22inspect_run%22%2C%20%22WidgetDAG%22%7D%0A_rows%20%3D%20%5B%5D%0Afor%20_name%20in%20MARIMO_COMPONENTS%3A%0A%20%20%20%20_mode%20%3D%20%22permission%22%20if%20_name%20in%20_permission%20else%20%22server%2Fextra%22%20if%20_name%20in%20_server%20else%20%22contextual%22%20if%20_name%20in%20_context%20else%20%22live%22%0A%20%20%20%20_rows.append(%7B%22library%22%3A%20%22Marimo%22%2C%20%22component%22%3A%20_name%2C%20%22mode%22%3A%20_mode%2C%20%22family%22%3A%20%22native%20UI%22%7D)%0Afor%20_family%2C%20_names%20in%20WIGGLY_GROUPS.items()%3A%0A%20%20%20%20for%20_name%20in%20_names%3A%0A%20%20%20%20%20%20%20%20_mode%20%3D%20%22permission%22%20if%20_name%20in%20_permission%20else%20%22server%2Fextra%22%20if%20_name%20in%20_server%20else%20%22contextual%22%20if%20_name%20in%20_context%20else%20%22helper%22%20if%20_name%20in%20_helpers%20else%20%22live%22%0A%20%20%20%20%20%20%20%20_rows.append(%7B%22library%22%3A%20%22WigglyStuff%22%2C%20%22component%22%3A%20_name%2C%20%22mode%22%3A%20_mode%2C%20%22family%22%3A%20_family%7D)%0Acomponent_inventory%20%3D%20mo.ui.table(%0A%20%20%20%20_rows%2C%0A%20%20%20%20page_size%3D20%2C%0A%20%20%20%20selection%3D%22multi%22%2C%0A%20%20%20%20show_column_summaries%3DTrue%2C%0A%20%20%20%20freeze_columns_left%3D%5B%22library%22%2C%20%22component%22%5D%2C%0A%20%20%20%20label%3Df%22%7Blen(MARIMO_COMPONENTS)%7D%20Marimo%20names%20%2B%20%7Blen(WIGGLY_COMPONENTS)%7D%20WigglyStuff%20names%22%2C%0A)%0Acomponent_inventory
mo.md(%0A%20%20%20%20f%22%22%22%0A%20%20%20%20Selected%20inventory%20rows%3A%20**%7Blen(component_inventory.value)%7D**.%0A%0A%20%20%20%20%23%23%23%20What%20this%20page%20proves%0A%0A%20%20%20%20-%20Quartz%20can%20publish%20a%20Marimo%20notebook%20as%20a%20normal%20garden%20note%20while%20its%20Python%20runs%20locally.%0A%20%20%20%20-%20Native%20controls%2C%20tabular%20analysis%2C%20plots%2C%20and%20third-party%20AnyWidgets%20share%20one%20reactive%20graph.%0A%20%20%20%20-%20A%20static%20site%20can%20still%20expose%20honest%20permission%2C%20hardware%2C%20package%2C%20credential%2C%20and%20server%20boundaries.%0A%0A%20%20%20%20The%20best%20notebook%20widgets%20are%20not%20ornamental.%20They%20make%20the%20model's%0A%20%20%20%20assumptions%20graspable%E2%80%94something%20you%20can%20drag%2C%20sketch%2C%20select%2C%20reorder%2C%0A%20%20%20%20inspect%2C%20and%20contradict.%0A%20%20%20%20%22%22%22%0A)