Skip to content
Back to skills

2256 Cell F834f3e4

ASecurity

Work with individual cells, including cross-notebook execution and testing.

  • 9 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 31, 2026
testingpythongoreacttestingapifrontend

Works with

  • api

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned May 31, 2026

npx -y skills add tools-only/X-Skills --skill 2256-cell_f834f3e4 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 2256 Cell F834f3e4?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 2256 Cell F834f3e4
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-2256-cell-f834f3e4/badge)](https://www.skillsdirectory.com/skills/tools-only-2256-cell-f834f3e4)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
# Cell API Reference

Work with individual cells, including cross-notebook execution and testing.

## Cell Basics

Cells are the fundamental execution units in marimo notebooks. Each cell:
- Defines variables (accessible to other cells)
- References variables (from other cells)
- Produces output (displayed in the notebook)
- Can be imported and run independently

## Cell Structure

```python
import marimo

app = marimo.App()

@app.cell
def _():
    # Cell without inputs
    x = 42
    return (x,)

@app.cell
def _(x):
    # Cell with input 'x' from another cell
    y = x * 2
    return (y,)

@app.cell
def _(x, y):
    # Cell with multiple inputs
    result = x + y
    return (result,)
```

## Cell Properties

### defs

Variables defined by the cell.

```python
from my_notebook import calculate

calculate.defs  # Set of variable names defined
# e.g., {"result", "intermediate"}
```

### refs

Variables referenced (inputs) by the cell.

```python
from my_notebook import calculate

calculate.refs  # Set of variable names used as inputs
# e.g., {"input_data", "config"}
```

### name

The cell's identifier (if named).

```python
@app.cell(name="process_data")
def _(data):
    result = process(data)
    return (result,)

# Later
from my_notebook import process_data
process_data.name  # "process_data"
```

## Running Cells

### cell.run

Execute a cell and get its output and definitions.

```python
from my_notebook import calculate

# Run with automatic dependency resolution
output, defs = calculate.run()

# output: The cell's visual output (if any)
# defs: Dict of variable names to values
result = defs["result"]
```

### With Parameter Override

```python
# Override input values
output, defs = calculate.run(x=10, y=20)

# The cell runs with x=10, y=20 instead of
# resolving them from parent cells
```

### Automatic Dependency Resolution

When parameters aren't provided, marimo runs parent cells:

```python
# If calculate depends on prepare
# and prepare depends on load_data

output, defs = calculate.run()
# Automatically runs: load_data -> prepare -> calculate
```

```python
# Override one dependency
output, defs = calculate.run(prepared_data=my_data)
# Only runs calculate, skips load_data and prepare
```

## Async Cells

Async cells return awaitables:

```python
@app.cell
async def _(url):
    data = await fetch_data(url)
    return (data,)

# Running async cell
from my_notebook import fetch_cell

output, defs = await fetch_cell.run(url="https://api.example.com")
```

## UI Elements in Cells

When a cell's output contains interactive UI elements stored in `defs`, frontend interactions trigger reactive execution:

```python
@app.cell
def _():
    slider = mo.ui.slider(0, 100)
    return (slider,)

# When embedded or run, slider interactions
# trigger dependent cells to re-execute
```

## Named Cells

Give cells names for clearer imports:

```python
@app.cell(name="load_config")
def _():
    config = load_config_file()
    return (config,)

@app.cell(name="process_data")
def _(config, raw_data):
    processed = transform(raw_data, config)
    return (processed,)

# Import by name
from my_notebook import load_config, process_data
```

## Testing Cells

### With pytest

```python
# test_notebook.py
import pytest
from my_notebook import process_data, validate_input

def test_process_data():
    """Test the process_data cell."""
    output, defs = process_data.run(
        raw_data=[1, 2, 3],
        config={"scale": 2}
    )
    assert defs["processed"] == [2, 4, 6]

def test_validate_input():
    """Test validation logic."""
    output, defs = validate_input.run(data=None)
    assert defs["is_valid"] == False

def test_validate_input_with_data():
    output, defs = validate_input.run(data=[1, 2, 3])
    assert defs["is_valid"] == True
```

### Testing with Fixtures

```python
import pytest
from my_notebook import analyze

@pytest.fixture
def sample_data():
    return pd.DataFrame({"x": [1, 2, 3], "y": [4, 5, 6]})

def test_analyze(sample_data):
    output, defs = analyze.run(df=sample_data)
    assert "summary" in defs
    assert defs["summary"]["mean_x"] == 2.0
```

### Testing Output

```python
def test_cell_output():
    output, defs = report_cell.run(data=test_data)

    # Check output exists
    assert output is not None

    # Check output content (if HTML)
    assert "Summary" in str(output)
```

## Cross-Notebook Imports

### Basic Import

```python
# main_notebook.py
from utils_notebook import helper_function, process

result = helper_function(data)
processed = process(raw_data)
```

### Import and Run Cell

```python
from data_loader import load_data

# Run the cell to get fresh data
output, defs = load_data.run(path="data.csv")
df = defs["df"]
```

### Selective Execution

```python
from pipeline import step1, step2, step3

# Run only what you need
_, defs1 = step1.run(raw_data=my_data)
_, defs3 = step3.run(
    intermediate=defs1["processed"],
    config=my_config
)
# Skipped step2 entirely
```

## Best Practices

### Clear Cell Boundaries

```python
# Good - single responsibility
@app.cell(name="load_data")
def _():
    df = pd.read_csv("data.csv")
    return (df,)

@app.cell(name="clean_data")
def _(df):
    cleaned = df.dropna()
    return (cleaned,)

# Avoid - too much in one cell
@app.cell
def _():
    df = pd.read_csv("data.csv")
    cleaned = df.dropna()
    transformed = cleaned.apply(...)
    result = analyze(transformed)
    return (df, cleaned, transformed, result,)
```

### Name Important Cells

```python
# Name cells you'll import or test
@app.cell(name="calculate_metrics")
def _(data):
    metrics = compute_metrics(data)
    return (metrics,)

# Anonymous cells are fine for display-only
@app.cell
def _(metrics):
    mo.md(f"Metrics: {metrics}")
    return ()
```

### Design for Testability

```python
# Testable - clear inputs and outputs
@app.cell(name="transform")
def _(df, config):
    result = apply_transform(df, config)
    return (result,)

# Hard to test - hidden dependencies
@app.cell
def _():
    # Uses global state
    result = process(GLOBAL_DATA)
    return (result,)
```

### Document Cell Purpose

```python
@app.cell(name="feature_engineering")
def _(raw_features):
    """
    Transform raw features into model-ready format.

    Input: raw_features (DataFrame)
    Output: engineered (DataFrame with new columns)
    """
    engineered = create_features(raw_features)
    return (engineered,)
```

Files in this skill

  • README.md765 B
  • skill.md6.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.