Skip to main content

Quantum gate and pulse design with optimal control

Project description

ctrl-freeq

Ctrl-freeq is a numerical framework for the design of quantum gates and pulses via optimal control theory, implemented in Python with PyTorch. The control pulse optimization problem is formulated and solved using automatic differentiation, and the resulting software provides both a programmatic API and a graphical user interface for the configuration and execution of optimization workflows.

  • PyPI package: ctrl-freeq
  • Import path: ctrl_freeq
  • Minimum Python: 3.13
  • CLI entry point: freeq-gui

Features

The framework supports the definition and solution of gate optimization problems through JSON configuration files. A high-level Python API is provided for loading configurations, executing the optimizer, and post-processing results, while a Tkinter-based GUI (launched via freeq-gui) offers an interactive alternative for users who prefer a graphical workflow. Optimization results may be visualized through interactive Plotly dashboards exported as standalone HTML files. CPU thread management is handled automatically, and optional GPU acceleration is available via CUDA.

Installation

Ctrl-freeq depends on NumPy, PyTorch, Qiskit, pytorch-minimize, Plotly, and other scientific packages.

# Install from source
uv sync

# Or with all development tools
uv sync --all-groups

Note: Dependency groups (dev, docs, tools) use PEP 735 and require uv — they are not pip extras.

For pip users:

pip install .

A detailed treatment of all installation methods is provided in the Installation documentation.

Quick Start

Launch the GUI

freeq-gui

Execution of this command launches the Tkinter-based graphical interface defined in ctrl_freeq/cli.py.

Use the API

from ctrl_freeq.api import CtrlFreeQAPI, run_from_config, load_single_qubit_config

# Load a built-in example configuration
config = load_single_qubit_config()

# Option A: one-shot helper
result = run_from_config(config)

# Option B: create an API instance to inspect and edit parameters
api = CtrlFreeQAPI(config)
print(api.get_config_summary())
api.update_parameter("optimization.max_iter", 500)
result = api.run_optimization()
print(f"Final fidelity: {api.parameters.final_fidelity:.6f}")

Project Structure

src/ctrl_freeq/       Core package
  api.py              High-level API
  cli.py              CLI entry point (freeq-gui)
  setup/              GUI and configuration setup
  run/                Optimization engine
  utils/              Plotting, dashboards, helpers
examples/             Example configs and notebooks
tests/                Test suite
pyproject.toml        Build and packaging configuration

Development

Development tools are organized into dependency groups: dev (pytest, jupyter), docs (mkdocs), and tools (ruff, pre-commit).

# Install dev dependencies
uv sync --all-groups

# Run tests
uv run pytest -q

# Lint
uv run ruff format .
uv run ruff check --fix .

Compute Resource Selection (CPU/GPU)

Ctrl-freeq supports execution on both CPU and GPU (CUDA) hardware:

  • cpu (default) — PyTorch threads are limited to max(1, os.cpu_count() - 1). This default may be overridden with the cpu_cores field.
  • gpu — CUDA is used if available; the framework falls back to CPU with a warning if CUDA is not present.

API Configuration

config = {
    "compute_resource": "gpu",   # or "cpu" (default)
    "cpu_cores": 8,              # optional, CPU only
    ...
}

GUI

The compute resource may be selected from the Compute Resource dropdown in the Optimization Parameters section of the graphical interface.

Note: Only CUDA is supported for GPU acceleration. MPS is not currently supported.

A demonstration notebook is provided at examples/api_gpu_cpu_demo.ipynb, illustrating CPU vs CUDA selection and comparative timing.

License

This project is licensed under the Apache License 2.0. See the LICENSE file for details.

Citation

If this software is used in academic work, please cite it using the metadata provided in CITATION.cff.

Project details


Download files

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

Source Distribution

ctrl_freeq-0.1.0.tar.gz (80.1 kB view details)

Uploaded Source

Built Distribution

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

ctrl_freeq-0.1.0-py3-none-any.whl (73.7 kB view details)

Uploaded Python 3

File details

Details for the file ctrl_freeq-0.1.0.tar.gz.

File metadata

  • Download URL: ctrl_freeq-0.1.0.tar.gz
  • Upload date:
  • Size: 80.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ctrl_freeq-0.1.0.tar.gz
Algorithm Hash digest
SHA256 024e84e79d9a2b3ced367a7f63b564bc6425d8a57a7252a576ca73bce7685a78
MD5 3d82e9c445d0a2678f0b4115a4e0612c
BLAKE2b-256 3984c82799dd71f02de2a5c1a79c81bcd911fc347384f60049c4bbb9f008a2ea

See more details on using hashes here.

File details

Details for the file ctrl_freeq-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: ctrl_freeq-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 73.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ctrl_freeq-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4a7aa69a95f81e3bb90b506a586535cfa3346b67c5f77e3c002a79ac7a07fe46
MD5 ad6b2978f0b4f7f3caf720d5b5ded78b
BLAKE2b-256 d2cc4b9396313f69c3894f8a69ae7614e1a27261ccd81fb8accbf4acad926191

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page