Skip to main content
Pre-release

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

pycontrol-core

pycontrol-core is the host engine for pyControl. It handles board communication, the wire protocol, workspace configuration, data logging, task and experiment handlers, firmware sync, and the pycontrol command-line tool.

The package is designed so GUI and script frontends share the same tested core:

Pyboard <-> Transport <-> protocol codec <-> BoardSession <-> event bus <-> subscribers

The board wire protocol remains compatible with existing pyControl tasks. The host writes one canonical .pycontrol.zip run bundle per recording, and the analysis importer reads those bundles (not pyControl v2 loose TSV files). See wire-protocol.md and data-format.md for the frozen specs.

Install From PyPI

3.0.0 is in beta, so allow pre-releases:

uv add pycontrol-core --prerelease allow
# or
pip install --pre pycontrol-core

For the GUI workflow, install the app once globally with pycontrol-manager app install, verify it with pycontrol-manager app status, then launch it with pycontrol gui. See getting-started.md.

Install For Development

From this package:

pip install -e ".[test,lint]"

With uv:

uv sync --extra test --extra lint

Run checks:

uv run pytest
uv run ruff check src tests
uv run mypy

Create A Workspace

Most lab-authored files live in a workspace, not inside this package.

pycontrol workspace init my-workspace
cd my-workspace
pycontrol setups add BoxA --port /dev/cu.usbmodemXXXX

The workspace contains:

Path Purpose
tasks/ Task files uploaded to the board.
hardware_definitions/ Rig wiring files uploaded as hardware_definition.py.
devices/ Workspace device classes uploaded when referenced.
addons/task_handlers/ Host-side task automation.
addons/experiment_handlers/ Whole-experiment automation.
addons/plotters/ Optional GUI plotters.
addons/controls/ Optional GUI control panels.
experiments/*.json Multi-subject experiment definitions.
settings.json / setups.json Workspace settings and setup registry.
data/ Default output folder for native .pycontrol.zip run bundles.

For a full walkthrough, use getting-started.md.

Run A Task

pycontrol run --setup BoxA --task examples/blinker \
  --subject mouse42 --duration 10

--setup looks up the serial port and setup variables from setups.json. --task and --hwdef are resolved against the workspace by stem or by path. Tasks that import hardware_definition need an explicit --hwdef or a setup default hardware definition.

The run command connects to the board, checks firmware status, uploads the hardware definition when the task needs one, uploads the task, starts the framework, and writes a .pycontrol.zip run bundle under the workspace data directory.

Run An Experiment

pycontrol experiment blink_demo --duration 10

Experiment identity comes from the JSON file path under experiments/. For example, experiments/training/day1.json is experiment training/day1.

Experiment JSON supports a first-class optional hardware_definition field. When present, it overrides each setup's default hardware definition for that experiment; when omitted, the setup default is used.

Firmware And Board Checks

BoardSession.connect() performs a read-only firmware status check. It never syncs files automatically.

pycontrol firmware status --setup BoxA
pycontrol firmware sync --setup BoxA
pycontrol board info --setup BoxA --json

Setups can pin an expected MCU so the host refuses the wrong board:

pycontrol setups add BoxH7 --port /dev/cu.usbmodemYYYY --mcu stm32h743
pycontrol setups detect BoxH7

See troubleshooting.md for operator triage.

Public Imports

pycontrol.__init__ exports only __version__. Import from explicit modules:

from pycontrol.session import BoardSession
from pycontrol.recording import NativeEventLogger
from pycontrol.addons import TaskHandler
from pycontrol.workspace import Workspace
from pycontrol.analysis.data_import import session_dataframe

Install pandas dataframe helpers into the global app with pycontrol-manager app extras add analysis, or install pycontrol-core[analysis] in a pip-managed environment. Rig-control, recording, bundles, and the CLI do not require pandas.

See public-api.md for the supported import surface.

Documentation

Start with Understanding one run, then use the references below. Release acceptance distinguishes host verification from the hardware evidence required for lab deployment.

Orientation and operation:

Contracts and internals:

Extending pyControl:

Project process:

Contributing

See CONTRIBUTING.md for local development and review.

Release files for pycontrol-core 3.0.0b1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pycontrol-core 3.0.0b1
File Size Uploaded
pycontrol_core-3.0.0b1.tar.gz 528.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pycontrol-core 3.0.0b1
File Interpreter ABI Platform
pycontrol_core-3.0.0b1-py3-none-any.whl Python 3 none any Details

Total release size: 816.8 kB

Release files / pycontrol_core-3.0.0b1.tar.gz

Download URL pycontrol_core-3.0.0b1.tar.gz
Size 528.0 kB
Tags Source
SHA-256 checksum
How to use checksums
38eeca99df43486bffe1ebb798641f969f03eb2d171dbbd1c0c27383b62ecb03
BLAKE2b-256 checksum
How to use checksums
94506530016f78e378a112a46a60f385d3c7530633de004a3fea7819904b1841
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.0

Release files / pycontrol_core-3.0.0b1-py3-none-any.whl

Download URL pycontrol_core-3.0.0b1-py3-none-any.whl
Size 288.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0833a0fd1747711e41e84971ddddb16ce07f17a8d6aaf5989d0ab138a44d5f82
BLAKE2b-256 checksum
How to use checksums
9fee528c09e376541a2a42847e49f2848da17642e439d7370b573ab2c323c484
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.0
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