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:
- Getting started
- Writing tasks
- Hardware definitions
- Architecture
- CLI reference
- Troubleshooting
- Migration from pyControl v2
Contracts and internals:
Extending pyControl:
- Task handlers - includes integrations and optional extras.
- Experiment handlers
- Addon settings
- Task sharing archives
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)
| File | Size | Uploaded | |
|---|---|---|---|
| pycontrol_core-3.0.0b1.tar.gz | 528.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|