Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

gofish-python

A Python wrapper for the GoFish graphics library. Both the mid-level chart API and the low-level mark/operator API are supported. (See notes/design.md and notes/implementation.md for more details.)

Installation

pip install --pre gofish-graphics

The latest stable release on PyPI is old and lags far behind development. The docs at gofish.graphics describe the current dev builds, which are published on every change to main. You must include the --pre flag, otherwise pip installs the outdated stable release.

The package is imported as gofish:

from gofish import chart

See the getting started docs for a full introduction.

Usage

from gofish import chart, spread, stack, rect

# Create a chart specification
data = [{"lake": "A", "species": "B", "count": 10}]
c = (
    chart(data, options={"w": 800, "h": 600})
    .flow(
        spread("lake", dir="x", spacing=64),
        stack("species", dir="y", spacing=0),
    )
    .mark(rect(h="count", fill="species"))
)

# Convert to JSON IR
ir = c.to_ir()
print(ir)
# {
#     "data": None,
#     "operators": [
#         {"type": "spread", "field": "lake", "dir": "x", "spacing": 64},
#         {"type": "stack", "field": "species", "dir": "y", "spacing": 0}
#     ],
#     "mark": {"type": "rect", "h": "count", "fill": "species"},
#     "options": {"w": 800, "h": 600}
# }

IR Format

The JSON IR has the following structure:

{
  "data": null,
  "operators": [
    { "type": "spread", "field": "lake", "dir": "x", "spacing": 8 },
    { "type": "derive", "lambdaId": "uuid-here" },
    { "type": "stack", "field": "species", "dir": "y" }
  ],
  "mark": { "type": "rect", "h": "count", "fill": "species" },
  "options": {}
}

Development

Note: This package uses uv for fast package management and testing.

Prerequisites

  • Python 3.10+
  • uv - Fast Python package manager
  • Node.js (for building the widget bundle)
  • pnpm (for managing Node.js dependencies)

Development Install

cd packages/gofish-python
uv pip install -e .

Installing Node.js Dependencies

If you need to build the widget bundle, install Node.js dependencies:

pnpm install

Building the Widget Bundle

The widget bundle is a self-contained JavaScript module that includes all dependencies. Build it with:

# From the package directory
pnpm run build:widget

# Or directly with Node.js
node build-widget.mjs

This will:

  • Bundle the TypeScript widget source (widget-src/index.ts)
  • Include all dependencies (gofish-graphics, solid-js, apache-arrow)
  • Output to gofish/_static/widget.esm.js

Note: The build process will automatically use gofish-graphics/dist/index.js if available, otherwise it falls back to the package import. Make sure gofish-graphics is built first if you're developing locally.

Running Tests

Python Unit Tests

# Install with test dependencies
uv pip install -e ".[test]"

# Run all tests
uv run pytest

# Or run directly if installed
pytest

# Run specific test file
pytest tests/test_ast.py

# Run with verbose output
pytest -v

Jupyter Notebook Tests

The package includes Jupyter notebooks for interactive testing:

  • tests/test_ir.ipynb - Tests for IR generation
  • tests/test_rendering.ipynb - Tests for widget rendering

To run these:

# Start Jupyter
jupyter notebook

# Or use the provided script (if available)
./run_notebook.sh

Development Workflow

  1. Install dependencies:

    uv pip install -e ".[test]"
    pnpm install
    
  2. Make changes to Python code or widget TypeScript source

  3. Build widget (if you modified widget code):

    pnpm run build:widget
    
  4. Run tests:

    pytest
    
  5. Test in Jupyter (optional):

    jupyter notebook tests/test_rendering.ipynb
    

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gofish_graphics-0.1.1.dev20260821.tar.gz (974.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gofish_graphics-0.1.1.dev20260821-py3-none-any.whl (970.7 kB view details)

Uploaded Python 3

File details

Details for the file gofish_graphics-0.1.1.dev20260821.tar.gz.

File metadata

File hashes

Hashes for gofish_graphics-0.1.1.dev20260821.tar.gz
Algorithm Hash digest
SHA256 10edfe54c5554d5b6c3d2bb9f5c3ceb8bdae53bbcdbcdab32cfa12f0ab53f519
MD5 84d10e0b71f2fe2179f092192be699c8
BLAKE2b-256 ba296838ed99e119777e070d3d75ca22a0f934cbe7263fc6ab8dff9f803642f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for gofish_graphics-0.1.1.dev20260821.tar.gz:

Publisher: release.yml on gofish-graphics/gofish-graphics

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gofish_graphics-0.1.1.dev20260821-py3-none-any.whl.

File metadata

File hashes

Hashes for gofish_graphics-0.1.1.dev20260821-py3-none-any.whl
Algorithm Hash digest
SHA256 dc99fb21bddabb11b13eaa3ab1a882ca5b11ee68f3d63b9f4c0a0040af931c88
MD5 ececb4ae0683eb6f57e7dfe288710cbd
BLAKE2b-256 96cc22d0ed1a99cb3522b39a130daaa0f30d3a563eab01d0aed30e9679ff3768

See more details on using hashes here.

Provenance

The following attestation bundles were made for gofish_graphics-0.1.1.dev20260821-py3-none-any.whl:

Publisher: release.yml on gofish-graphics/gofish-graphics

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page