Spaces:
Sleeping
Sleeping
| import marimo | |
| __generated_with = "0.9.2" | |
| app = marimo.App() | |
| def __(): | |
| import marimo as mo | |
| mo.md("# Welcome to marimo! ππ") | |
| return (mo,) | |
| def __(mo): | |
| slider = mo.ui.slider(1, 22) | |
| return (slider,) | |
| def __(mo, slider): | |
| mo.md( | |
| f""" | |
| marimo is a **reactive** Python notebook. | |
| This means that unlike traditional notebooks, marimo notebooks **run | |
| automatically** when you modify them or | |
| interact with UI elements, like this slider: {slider}. | |
| {"##" + "π" * slider.value} | |
| """ | |
| ) | |
| return | |
| def __(mo): | |
| mo.accordion( | |
| { | |
| "Tip: disabling automatic execution": mo.md( | |
| rf""" | |
| marimo lets you disable automatic execution: just go into the | |
| notebook settings and set | |
| "Runtime > On Cell Change" to "lazy". | |
| When the runtime is lazy, after running a cell, marimo marks its | |
| descendants as stale instead of automatically running them. The | |
| lazy runtime puts you in control over when cells are run, while | |
| still giving guarantees about the notebook state. | |
| """ | |
| ) | |
| } | |
| ) | |
| return | |
| def __(mo): | |
| mo.md( | |
| """ | |
| Tip: This is a tutorial notebook. You can create your own notebooks | |
| by entering `marimo edit` at the command line. | |
| """ | |
| ).callout() | |
| return | |
| def __(mo): | |
| mo.md( | |
| """ | |
| ## 1. Reactive execution | |
| A marimo notebook is made up of small blocks of Python code called | |
| cells. | |
| marimo reads your cells and models the dependencies among them: whenever | |
| a cell that defines a global variable is run, marimo | |
| **automatically runs** all cells that reference that variable. | |
| Reactivity keeps your program state and outputs in sync with your code, | |
| making for a dynamic programming environment that prevents bugs before they | |
| happen. | |
| """ | |
| ) | |
| return | |
| def __(changed, mo): | |
| ( | |
| mo.md( | |
| f""" | |
| **β¨ Nice!** The value of `changed` is now {changed}. | |
| When you updated the value of the variable `changed`, marimo | |
| **reacted** by running this cell automatically, because this cell | |
| references the global variable `changed`. | |
| Reactivity ensures that your notebook state is always | |
| consistent, which is crucial for doing good science; it's also what | |
| enables marimo notebooks to double as tools and apps. | |
| """ | |
| ) | |
| if changed | |
| else mo.md( | |
| """ | |
| **π See it in action.** In the next cell, change the value of the | |
| variable `changed` to `True`, then click the run button. | |
| """ | |
| ) | |
| ) | |
| return | |
| def __(): | |
| changed = False | |
| return (changed,) | |
| def __(mo): | |
| mo.accordion( | |
| { | |
| "Tip: execution order": ( | |
| """ | |
| The order of cells on the page has no bearing on | |
| the order in which cells are executed: marimo knows that a cell | |
| reading a variable must run after the cell that defines it. This | |
| frees you to organize your code in the way that makes the most | |
| sense for you. | |
| """ | |
| ) | |
| } | |
| ) | |
| return | |
| def __(mo): | |
| mo.md( | |
| """ | |
| **Global names must be unique.** To enable reactivity, marimo imposes a | |
| constraint on how names appear in cells: no two cells may define the same | |
| variable. | |
| """ | |
| ) | |
| return | |
| def __(mo): | |
| mo.accordion( | |
| { | |
| "Tip: encapsulation": ( | |
| """ | |
| By encapsulating logic in functions, classes, or Python modules, | |
| you can minimize the number of global variables in your notebook. | |
| """ | |
| ) | |
| } | |
| ) | |
| return | |
| def __(mo): | |
| mo.accordion( | |
| { | |
| "Tip: private variables": ( | |
| """ | |
| Variables prefixed with an underscore are "private" to a cell, so | |
| they can be defined by multiple cells. | |
| """ | |
| ) | |
| } | |
| ) | |
| return | |
| def __(mo): | |
| mo.md( | |
| """ | |
| ## 2. UI elements | |
| Cells can output interactive UI elements. Interacting with a UI | |
| element **automatically triggers notebook execution**: when | |
| you interact with a UI element, its value is sent back to Python, and | |
| every cell that references that element is re-run. | |
| marimo provides a library of UI elements to choose from under | |
| `marimo.ui`. | |
| """ | |
| ) | |
| return | |
| def __(mo): | |
| mo.md("""**π Some UI elements.** Try interacting with the below elements.""") | |
| return | |
| def __(mo): | |
| icon = mo.ui.dropdown(["π", "π", "β¨"], value="π") | |
| return (icon,) | |
| def __(icon, mo): | |
| repetitions = mo.ui.slider(1, 16, label=f"number of {icon.value}: ") | |
| return (repetitions,) | |
| def __(icon, repetitions): | |
| icon, repetitions | |
| return | |
| def __(icon, mo, repetitions): | |
| mo.md("# " + icon.value * repetitions.value) | |
| return | |
| def __(mo): | |
| mo.md( | |
| """ | |
| ## 3. marimo is just Python | |
| marimo cells parse Python (and only Python), and marimo notebooks are | |
| stored as pure Python files β outputs are _not_ included. There's no | |
| magical syntax. | |
| The Python files generated by marimo are: | |
| - easily versioned with git, yielding minimal diffs | |
| - legible for both humans and machines | |
| - formattable using your tool of choice, | |
| - usable as Python scripts, with UI elements taking their default | |
| values, and | |
| - importable by other modules (more on that in the future). | |
| """ | |
| ) | |
| return | |
| def __(mo): | |
| mo.md( | |
| """ | |
| ## 4. Running notebooks as apps | |
| marimo notebooks can double as apps. Click the app window icon in the | |
| bottom-right to see this notebook in "app view." | |
| Serve a notebook as an app with `marimo run` at the command-line. | |
| Of course, you can use marimo just to level-up your | |
| notebooking, without ever making apps. | |
| """ | |
| ) | |
| return | |
| def __(mo): | |
| mo.md( | |
| """ | |
| ## 5. The `marimo` command-line tool | |
| **Creating and editing notebooks.** Use | |
| ``` | |
| marimo edit | |
| ``` | |
| in a terminal to start the marimo notebook server. From here | |
| you can create a new notebook or edit existing ones. | |
| **Running as apps.** Use | |
| ``` | |
| marimo run notebook.py | |
| ``` | |
| to start a webserver that serves your notebook as an app in read-only mode, | |
| with code cells hidden. | |
| **Convert a Jupyter notebook.** Convert a Jupyter notebook to a marimo | |
| notebook using `marimo convert`: | |
| ``` | |
| marimo convert your_notebook.ipynb > your_app.py | |
| ``` | |
| **Tutorials.** marimo comes packaged with tutorials: | |
| - `dataflow`: more on marimo's automatic execution | |
| - `ui`: how to use UI elements | |
| - `markdown`: how to write markdown, with interpolated values and | |
| LaTeX | |
| - `plots`: how plotting works in marimo | |
| - `sql`: how to use SQL | |
| - `layout`: layout elements in marimo | |
| - `fileformat`: how marimo's file format works | |
| - `markdown-format`: for using `.md` files in marimo | |
| - `for-jupyter-users`: if you are coming from Jupyter | |
| Start a tutorial with `marimo tutorial`; for example, | |
| ``` | |
| marimo tutorial dataflow | |
| ``` | |
| In addition to tutorials, we have examples in our | |
| [our GitHub repo](https://www.github.com/marimo-team/marimo/tree/main/examples). | |
| """ | |
| ) | |
| return | |
| def __(mo): | |
| mo.md( | |
| """ | |
| ## 6. The marimo editor | |
| Here are some tips to help you get started with the marimo editor. | |
| """ | |
| ) | |
| return | |
| def __(mo, tips): | |
| mo.accordion(tips) | |
| return | |
| def __(mo): | |
| mo.md("""## Finally, a fun fact""") | |
| return | |
| def __(mo): | |
| mo.md( | |
| """ | |
| The name "marimo" is a reference to a type of algae that, under | |
| the right conditions, clumps together to form a small sphere | |
| called a "marimo moss ball". Made of just strands of algae, these | |
| beloved assemblages are greater than the sum of their parts. | |
| """ | |
| ) | |
| return | |
| def __(): | |
| tips = { | |
| "Saving": ( | |
| """ | |
| **Saving** | |
| - _Name_ your app using the box at the top of the screen, or | |
| with `Ctrl/Cmd+s`. You can also create a named app at the | |
| command line, e.g., `marimo edit app_name.py`. | |
| - _Save_ by clicking the save icon on the bottom right, or by | |
| inputting `Ctrl/Cmd+s`. By default marimo is configured | |
| to autosave. | |
| """ | |
| ), | |
| "Running": ( | |
| """ | |
| 1. _Run a cell_ by clicking the play ( β· ) button on the top | |
| right of a cell, or by inputting `Ctrl/Cmd+Enter`. | |
| 2. _Run a stale cell_ by clicking the yellow run button on the | |
| right of the cell, or by inputting `Ctrl/Cmd+Enter`. A cell is | |
| stale when its code has been modified but not run. | |
| 3. _Run all stale cells_ by clicking the play ( β· ) button on | |
| the bottom right of the screen, or input `Ctrl/Cmd+Shift+r`. | |
| """ | |
| ), | |
| "Console Output": ( | |
| """ | |
| Console output (e.g., `print()` statements) is shown below a | |
| cell. | |
| """ | |
| ), | |
| "Creating, Moving, and Deleting Cells": ( | |
| """ | |
| 1. _Create_ a new cell above or below a given one by clicking | |
| the plus button to the left of the cell, which appears on | |
| mouse hover. | |
| 2. _Move_ a cell up or down by dragging on the handle to the | |
| right of the cell, which appears on mouse hover. | |
| 3. _Delete_ a cell by clicking the trash bin icon. Bring it | |
| back by clicking the undo button on the bottom right of the | |
| screen, or with `Ctrl/Cmd+Shift+z`. | |
| """ | |
| ), | |
| "Disabling Automatic Execution": ( | |
| """ | |
| Via the notebook settings (gear icon) or footer panel, you | |
| can disable automatic execution. This is helpful when | |
| working with expensive notebooks or notebooks that have | |
| side-effects like database transactions. | |
| """ | |
| ), | |
| "Disabling Cells": ( | |
| """ | |
| You can disable a cell via the cell context menu. | |
| marimo will never run a disabled cell or any cells that depend on it. | |
| This can help prevent accidental execution of expensive computations | |
| when editing a notebook. | |
| """ | |
| ), | |
| "Code Folding": ( | |
| """ | |
| You can collapse or fold the code in a cell by clicking the arrow | |
| icons in the line number column to the left, or by using keyboard | |
| shortcuts. | |
| Use the command palette (`Ctrl/Cmd+k`) or a keyboard shortcut to | |
| quickly fold or unfold all cells. | |
| """ | |
| ), | |
| "Code Formatting": ( | |
| """ | |
| If you have [ruff](https://github.com/astral-sh/ruff) installed, | |
| you can format a cell with the keyboard shortcut `Ctrl/Cmd+b`. | |
| """ | |
| ), | |
| "Command Palette": ( | |
| """ | |
| Use `Ctrl/Cmd+k` to open the command palette. | |
| """ | |
| ), | |
| "Keyboard Shortcuts": ( | |
| """ | |
| Open the notebook menu (top-right) or input `Ctrl/Cmd+Shift+h` to | |
| view a list of all keyboard shortcuts. | |
| """ | |
| ), | |
| "Configuration": ( | |
| """ | |
| Configure the editor by clicking the gears icon near the top-right | |
| of the screen. | |
| """ | |
| ), | |
| } | |
| return (tips,) | |
| if __name__ == "__main__": | |
| app.run() | |