Skip to main content

Python API for THzDAQ laboratory instruments

Project description

thzdaqapi

Профессиональная Python-библиотека для управления лабораторными THzDAQ-устройствами.

Репозиторий содержит:

  • runtime API (src/thzdaqapi),
  • документацию по каждому девайсу,
  • тесты,
  • CI/CD,
  • pre-commit конфигурацию для автопроверки и автоформатирования.

Что внутри

Установка

Runtime

uv pip install thzdaqapi

Разработка

uv sync --extra dev

Быстрый старт (правильный порядок)

from thzdaqapi.RohdeSchwarz.vna import VNABlock

# 1) Инициализация
vna = VNABlock(host="169.254.106.189", port=5025)

# 2) Проверка связи
print(vna.idn())
assert vna.test()

# 3) Настройка
vna.set_sweep(801)
vna.set_start_frequency(2e9)
vna.set_stop_frequency(12e9)

# 4) Получение данных
payload = vna.get_data()
print(payload.keys())

Рекомендуемый шаблон для любого девайса:

  1. Создать экземпляр класса с правильными host/port/gpib/adapter.
  2. Выполнить idn() и/или test().
  3. Применить set_* параметры.
  4. Считать get_* / measure_* / fetch().
  5. Явно закрыть соединение (close() / disconnect()), если метод доступен.

Архитектура и адаптеры

Транспортный слой

Большинство устройств работают через базовый инструментальный слой и адаптеры из thzdaqapi.adapters.

Поддерживаемые типы адаптеров в thzdaqapi.settings:

  • SOCKET
  • SOCKET_SINGLE
  • PROLOGIX_ETHERNET
  • PROLOGIX_USB
  • HTTP
  • SERIAL

Сопоставление тип -> класс задаётся в ADAPTERS.

Конфигурация

  • Общие константы/транспорты: thzdaqapi.settings
  • Дефолты IP/портов задаются прямо в __init__ конкретных классов устройств
  • Параметры Pfeiffer: thzdaqapi.Pfeiffer.parameters (PFEIFFER_PARAMETERS)

Инициализация устройств: что важно

1) Проверяйте параметры подключения

  • host: IP прибора или Prologix.
  • port: TCP-порт прибора (или COM-порт для serial-классов).
  • gpib: адрес прибора на GPIB-шине (если нужен).
  • adapter: транспорт (SOCKET, PROLOGIX_ETHERNET, HTTP и т.д.).

2) Запускайте в безопасной последовательности

Для источников/генераторов:

  1. Отключённый output.
  2. Установка диапазонов/лимитов.
  3. Установка целевых значений.
  4. Включение output.

3) Всегда валидируйте ответ

  • Для методов, возвращающих числа/словарь, проверяйте диапазон и тип.
  • Для сетевых/serial нестабильностей используйте retry-логику уровня сценария.

Паттерны работы с методами

Группа set_*

  • Изменяют состояние прибора.
  • Часто не возвращают значение (None) или возвращают сырую строку статуса.

Группа get_*

  • Возвращают текущее значение с устройства.
  • Тип зависит от конкретного метода (float, int, str, dict, tuple).

Группа measure_* / fetch()

  • Возвращают результат измерения.
  • Для плавающих интерфейсов рекомендуется повторная валидация значения.

Очень важные best practices

  • Не делайте резких шагов напряжения/тока/мощности.
  • На старте работайте с минимальными уровнями.
  • Для моторов/чоппера сначала проверяйте нулевую/опорную позицию (set_origin(), align*()).
  • Для vacuum/pump устройств учитывайте задержки между командами.
  • Логируйте все команды в критических экспериментах.

Подробные документы по девайсам

Каждый файл в docs/devices/*.md включает:

  • сигнатуру __init__,
  • параметры и defaults,
  • таблицу публичных методов,
  • сценарий эксплуатации,
  • рабочие примеры,
  • рекомендации по диагностике.

Если нужна вся поверхность API в одном месте — используйте docs/api-reference.md.

Типизация и IDE-подсказки

Типы указаны прямо в исходниках (.py) — без *.pyi.

Это означает:

  • IDE автодополнение читает фактические сигнатуры из runtime-кода,
  • меньше риска рассинхрона между реализацией и документацией,
  • легче поддерживать при рефакторинге.

Локальная проверка качества

uv sync --extra dev
uv run ruff check src tests
uv run ruff format src tests
uv run pytest -q

Pre-commit (автоформат и проверки перед commit)

uv sync --extra dev
uv run pre-commit install
uv run pre-commit run --all-files

Что запускается:

  • check-merge-conflict
  • end-of-file-fixer
  • trailing-whitespace
  • check-yaml
  • check-toml
  • ruff --fix
  • ruff format

CI/CD

Workflow-файлы:

  • .github/workflows/ci.yml — линт + тесты на push/PR
  • .github/workflows/publish-pypi.yml — публикация в PyPI (release/manual)

Публикация в PyPI

Рекомендуемый сценарий:

  1. Настроить Trusted Publishing (OIDC) в PyPI.
  2. Создать GitHub Release.
  3. Workflow соберёт и опубликует пакет.

Альтернатива: токен через PYPI_API_TOKEN (секрет репозитория).

Частые проблемы и решения

Прибор не отвечает

  • Проверьте кабель/порт/IP.
  • Проверьте, что порт не занят другим процессом.
  • Проверьте firewall и маршрутизацию.

Ответ парсится с ошибкой

  • Убедитесь, что модель прибора совпадает с драйвером.
  • Проверьте версию прошивки.
  • Снимите сырые ответы и сравните с ожидаемым форматом.

Нестабильные измерения

  • Увеличьте таймауты/паузы.
  • Добавьте повторные запросы и медиану по нескольким чтениям.

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

thzdaqapi-0.1.0.tar.gz (55.0 kB view details)

Uploaded Source

Built Distribution

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

thzdaqapi-0.1.0-py3-none-any.whl (62.4 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for thzdaqapi-0.1.0.tar.gz
Algorithm Hash digest
SHA256 697ce3093a2e57ad5a8e02397048e8b65e6d0c8dbcf7ba6051227d9755117fff
MD5 404c2cfed05f9ceb01a394efa0b3ed54
BLAKE2b-256 ea4ef18c28d947e94c4474661ad6cb22bdde79d911788893ced62a2ec1647839

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for thzdaqapi-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f938254dfd1e565a661a80beea96e0d2ef2441a0e15266b4c3fb1f8323a05cc0
MD5 9fd712360691a203fd2d6a8f1b979a8e
BLAKE2b-256 7f5db1d62185b9e20c04432a539630bb8e2683b51118c738f597c918b4e7ae25

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