Skip to content

Commit

Permalink
Merge branch 'main' into mda-progress
Browse files Browse the repository at this point in the history
  • Loading branch information
tlambert03 committed Oct 12, 2024
2 parents f030aff + d58003b commit 7a46bb5
Show file tree
Hide file tree
Showing 141 changed files with 6,740 additions and 5,792 deletions.
32 changes: 14 additions & 18 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,31 +30,26 @@ jobs:
strategy:
fail-fast: false
matrix:
platform: [macos-latest, windows-latest]
python-version: ["3.8", "3.11"]
backend: [pyside2, pyqt5]
include:
- platform: macos-latest
python-version: "3.10"
backend: pyside6
- platform: macos-latest
python-version: "3.11"
backend: pyqt6
platform: [macos-13, windows-latest]
python-version: ["3.10", "3.12"]
backend: [pyside6, pyqt6]
exclude:
- platform: windows-latest
python-version: "3.10"
backend: pyside6
- platform: windows-latest
python-version: "3.11"
backend: pyqt6
- platform: windows-latest
include:
- platform: macos-13
python-version: "3.9"
backend: pyside2
- platform: windows-latest
python-version: "3.9"
backend: pyqt5
exclude:
- python-version: "3.11"
backend: pyside2
- platform: windows-latest
python-version: "3.11"
backend: pyqt5
# - platform: windows-latest
# python-version: "3.13"
# backend: pyqt6

steps:
- uses: actions/checkout@v4
Expand All @@ -63,6 +58,7 @@ jobs:
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true

- name: Install dependencies
run: |
Expand Down Expand Up @@ -154,6 +150,6 @@ jobs:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}

- uses: softprops/action-gh-release@v1
- uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
9 changes: 4 additions & 5 deletions .github/workflows/cron.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,18 @@ name: --pre Test

on:
schedule:
- cron: '0 */12 * * *' # every 12 hours
- cron: "0 */12 * * *" # every 12 hours
workflow_dispatch:

jobs:

test:
name: ${{ matrix.platform }} (${{ matrix.python-version }})
runs-on: ${{ matrix.platform }}
strategy:
fail-fast: false
matrix:
python-version: ['3.8', '3.9', '3.10']
platform: [macos-latest, windows-latest]
python-version: ["3.11"]
platform: [macos-13, windows-latest]
backend: [pyside2, pyqt5]

steps:
Expand Down Expand Up @@ -55,7 +54,7 @@ jobs:
PLATFORM: ${{ matrix.platform }}
PYTHON: ${{ matrix.python }}
RUN_ID: ${{ github.run_id }}
TITLE: '[test-bot] pip install --pre is failing'
TITLE: "[test-bot] pip install --pre is failing"
with:
filename: .github/TEST_FAIL_TEMPLATE.md
update_existing: true
2 changes: 1 addition & 1 deletion .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ on:

jobs:
deploy:
runs-on: macos-latest
runs-on: macos-13
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
Expand Down
12 changes: 6 additions & 6 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,27 @@ ci:

repos:
- repo: https://github.com/crate-ci/typos
rev: v1.19.0
rev: v1.26.0
hooks:
- id: typos

- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.3.0
rev: v0.6.9
hooks:
- id: ruff
args: [--fix, --unsafe-fixes]
- id: ruff-format

- repo: https://github.com/abravalheri/validate-pyproject
rev: v0.16
rev: v0.20.2
hooks:
- id: validate-pyproject

- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.8.0
rev: v1.11.2
hooks:
- id: mypy
files: "^src/"
additional_dependencies:
- pymmcore-plus >=0.9.0
- useq-schema >=0.4.7
- pymmcore-plus >=0.11.0
- useq-schema >=0.5.0
98 changes: 98 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,103 @@
# Changelog

## [v0.8.0](https://github.com/pymmcore-plus/pymmcore-widgets/tree/v0.8.0) (2024-10-04)

[Full Changelog](https://github.com/pymmcore-plus/pymmcore-widgets/compare/v0.7.2...v0.8.0)

**Implemented enhancements:**

- feat: add HCSWizard to MDAWIdget [\#362](https://github.com/pymmcore-plus/pymmcore-widgets/pull/362) ([fdrgsp](https://github.com/fdrgsp))
- feat: add High Content Screening wizard [\#360](https://github.com/pymmcore-plus/pymmcore-widgets/pull/360) ([fdrgsp](https://github.com/fdrgsp))
- feat: reload prior config file on HCW rejection [\#359](https://github.com/pymmcore-plus/pymmcore-widgets/pull/359) ([gselzer](https://github.com/gselzer))
- feat: plate navigator for HCS calibration testing [\#356](https://github.com/pymmcore-plus/pymmcore-widgets/pull/356) ([fdrgsp](https://github.com/fdrgsp))
- feat: plate calibration widget [\#355](https://github.com/pymmcore-plus/pymmcore-widgets/pull/355) ([tlambert03](https://github.com/tlambert03))
- feat: reusable single-well calibration widget for plate calibration widget [\#353](https://github.com/pymmcore-plus/pymmcore-widgets/pull/353) ([fdrgsp](https://github.com/fdrgsp))
- feat: Refactor GridPlanWidget [\#351](https://github.com/pymmcore-plus/pymmcore-widgets/pull/351) ([gselzer](https://github.com/gselzer))
- feat: add restrict well area [\#319](https://github.com/pymmcore-plus/pymmcore-widgets/pull/319) ([fdrgsp](https://github.com/fdrgsp))
- feat: add useq.WellPlanPlan widget with well selection [\#318](https://github.com/pymmcore-plus/pymmcore-widgets/pull/318) ([tlambert03](https://github.com/tlambert03))
- feat: add overlap checkbox [\#317](https://github.com/pymmcore-plus/pymmcore-widgets/pull/317) ([fdrgsp](https://github.com/fdrgsp))
- feat: add minimal Points plan view [\#316](https://github.com/pymmcore-plus/pymmcore-widgets/pull/316) ([tlambert03](https://github.com/tlambert03))
- feat: Points plan selector [\#315](https://github.com/pymmcore-plus/pymmcore-widgets/pull/315) ([tlambert03](https://github.com/tlambert03))
- feat: multi point plan useq widgets [\#314](https://github.com/pymmcore-plus/pymmcore-widgets/pull/314) ([tlambert03](https://github.com/tlambert03))
- feat: add select all for hub devices [\#310](https://github.com/pymmcore-plus/pymmcore-widgets/pull/310) ([tlambert03](https://github.com/tlambert03))

**Fixed bugs:**

- fix: fix splitting logic and deduplicate code in Groups Presets Widgets [\#365](https://github.com/pymmcore-plus/pymmcore-widgets/pull/365) ([tlambert03](https://github.com/tlambert03))
- fix: disable Autofocus checkbox when using HCSWizard [\#364](https://github.com/pymmcore-plus/pymmcore-widgets/pull/364) ([fdrgsp](https://github.com/fdrgsp))
- fix: enable ct axis order [\#361](https://github.com/pymmcore-plus/pymmcore-widgets/pull/361) ([fdrgsp](https://github.com/fdrgsp))
- fix: fix valueChanged signals on PropertyWidget [\#352](https://github.com/pymmcore-plus/pymmcore-widgets/pull/352) ([tlambert03](https://github.com/tlambert03))
- fix: Only allow YAML save/load when YAML available [\#347](https://github.com/pymmcore-plus/pymmcore-widgets/pull/347) ([gselzer](https://github.com/gselzer))
- fix: Align spin boxes and labels in GridPlan [\#345](https://github.com/pymmcore-plus/pymmcore-widgets/pull/345) ([gselzer](https://github.com/gselzer))
- fix: update the GroupPresetTableWidget policy [\#330](https://github.com/pymmcore-plus/pymmcore-widgets/pull/330) ([fdrgsp](https://github.com/fdrgsp))
- fix: make name editable EditGroupWidget [\#328](https://github.com/pymmcore-plus/pymmcore-widgets/pull/328) ([fdrgsp](https://github.com/fdrgsp))
- fix: WellPlateWidget initial drawing [\#327](https://github.com/pymmcore-plus/pymmcore-widgets/pull/327) ([fdrgsp](https://github.com/fdrgsp))
- fix: fix bug in config wizard where core state bleeds into model [\#309](https://github.com/pymmcore-plus/pymmcore-widgets/pull/309) ([tlambert03](https://github.com/tlambert03))

**Merged pull requests:**

- build: pin useq-schema to 0.5.0 [\#367](https://github.com/pymmcore-plus/pymmcore-widgets/pull/367) ([tlambert03](https://github.com/tlambert03))
- refactor: full repo reorganization [\#366](https://github.com/pymmcore-plus/pymmcore-widgets/pull/366) ([tlambert03](https://github.com/tlambert03))
- ci\(pre-commit.ci\): autoupdate [\#358](https://github.com/pymmcore-plus/pymmcore-widgets/pull/358) ([pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci))
- ci\(pre-commit.ci\): autoupdate [\#357](https://github.com/pymmcore-plus/pymmcore-widgets/pull/357) ([pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci))
- refactor: more grid plan cleanup [\#354](https://github.com/pymmcore-plus/pymmcore-widgets/pull/354) ([tlambert03](https://github.com/tlambert03))
- refactor: split run mda in mda widget [\#350](https://github.com/pymmcore-plus/pymmcore-widgets/pull/350) ([wl-stepp](https://github.com/wl-stepp))
- style: clarify save/load buttons in MDAWidget [\#346](https://github.com/pymmcore-plus/pymmcore-widgets/pull/346) ([gselzer](https://github.com/gselzer))
- style: unfill radio buttions in GridPlanWidget [\#344](https://github.com/pymmcore-plus/pymmcore-widgets/pull/344) ([gselzer](https://github.com/gselzer))
- style: Manually compute sizeHint\(\) [\#343](https://github.com/pymmcore-plus/pymmcore-widgets/pull/343) ([gselzer](https://github.com/gselzer))
- style: fix pixel affine table [\#341](https://github.com/pymmcore-plus/pymmcore-widgets/pull/341) ([tlambert03](https://github.com/tlambert03))
- refactor: refactor stage widget [\#334](https://github.com/pymmcore-plus/pymmcore-widgets/pull/334) ([tlambert03](https://github.com/tlambert03))
- refactor: remove old MDA widget [\#313](https://github.com/pymmcore-plus/pymmcore-widgets/pull/313) ([tlambert03](https://github.com/tlambert03))
- refactor: pydantic2 syntax [\#311](https://github.com/pymmcore-plus/pymmcore-widgets/pull/311) ([tlambert03](https://github.com/tlambert03))
- ci\(pre-commit.ci\): autoupdate [\#306](https://github.com/pymmcore-plus/pymmcore-widgets/pull/306) ([pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci))

## [v0.7.2](https://github.com/pymmcore-plus/pymmcore-widgets/tree/v0.7.2) (2024-06-13)

[Full Changelog](https://github.com/pymmcore-plus/pymmcore-widgets/compare/v0.7.1...v0.7.2)

**Merged pull requests:**

- fix: fix attribute error in signal blocker [\#302](https://github.com/pymmcore-plus/pymmcore-widgets/pull/302) ([tlambert03](https://github.com/tlambert03))
- ci\(pre-commit.ci\): autoupdate [\#297](https://github.com/pymmcore-plus/pymmcore-widgets/pull/297) ([pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci))
- fix: pre test macos-13 [\#296](https://github.com/pymmcore-plus/pymmcore-widgets/pull/296) ([fdrgsp](https://github.com/fdrgsp))
- ci\(pre-commit.ci\): autoupdate [\#294](https://github.com/pymmcore-plus/pymmcore-widgets/pull/294) ([pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci))
- ci\(pre-commit.ci\): autoupdate [\#291](https://github.com/pymmcore-plus/pymmcore-widgets/pull/291) ([pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci))
- feat: Stack viewer [\#187](https://github.com/pymmcore-plus/pymmcore-widgets/pull/187) ([wl-stepp](https://github.com/wl-stepp))

## [v0.7.1](https://github.com/pymmcore-plus/pymmcore-widgets/tree/v0.7.1) (2024-03-13)

[Full Changelog](https://github.com/pymmcore-plus/pymmcore-widgets/compare/v0.7.0...v0.7.1)

**Fixed bugs:**

- fix: fix issue with channel group widget not working with only one group [\#288](https://github.com/pymmcore-plus/pymmcore-widgets/pull/288) ([fdrgsp](https://github.com/fdrgsp))

**Merged pull requests:**

- ci\(dependabot\): bump softprops/action-gh-release from 1 to 2 [\#287](https://github.com/pymmcore-plus/pymmcore-widgets/pull/287) ([dependabot[bot]](https://github.com/apps/dependabot))

## [v0.7.0](https://github.com/pymmcore-plus/pymmcore-widgets/tree/v0.7.0) (2024-03-06)

[Full Changelog](https://github.com/pymmcore-plus/pymmcore-widgets/compare/v0.7.0rc1...v0.7.0)

## [v0.7.0rc1](https://github.com/pymmcore-plus/pymmcore-widgets/tree/v0.7.0rc1) (2024-03-05)

[Full Changelog](https://github.com/pymmcore-plus/pymmcore-widgets/compare/v0.6.1...v0.7.0rc1)

**Implemented enhancements:**

- feat: add pymmcore-plus writer to MDAWidget [\#279](https://github.com/pymmcore-plus/pymmcore-widgets/pull/279) ([fdrgsp](https://github.com/fdrgsp))

**Fixed bugs:**

- fix: fix selection of axis orders in mdaWidget.setValue [\#286](https://github.com/pymmcore-plus/pymmcore-widgets/pull/286) ([tlambert03](https://github.com/tlambert03))
- fix: make grid widget scrollable [\#285](https://github.com/pymmcore-plus/pymmcore-widgets/pull/285) ([tlambert03](https://github.com/tlambert03))

**Merged pull requests:**

- docs: rename mda\_widget to mda\_demo [\#283](https://github.com/pymmcore-plus/pymmcore-widgets/pull/283) ([tlambert03](https://github.com/tlambert03))
- chore: use ruff-format instead of black [\#282](https://github.com/pymmcore-plus/pymmcore-widgets/pull/282) ([tlambert03](https://github.com/tlambert03))

## [v0.6.1](https://github.com/pymmcore-plus/pymmcore-widgets/tree/v0.6.1) (2024-02-15)

[Full Changelog](https://github.com/pymmcore-plus/pymmcore-widgets/compare/v0.6.0...v0.6.1)
Expand Down
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ It forms the basis of [`napari-micromanager`](https://github.com/pymmcore-plus/n

See complete list of available widgets in the [documentation](https://pymmcore-plus.github.io/pymmcore-widgets/#widgets)


## Installation

```sh
Expand All @@ -28,5 +27,5 @@ pip install pymmcore-widgets
# you must install one yourself, for example:
pip install PyQt5

# package is tested against PyQt5, PyQt6, PySide2, and PySide6
# package is tested against PyQt5, PyQt6, PySide2, and PySide6(==6.7)
```
20 changes: 15 additions & 5 deletions docs/getting_started.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,18 @@ pip install pymmcore-widgets

### Installing PyQt or PySide

Since [pymmcore-widgets](./index.md) relies on either the [PyQt](https://riverbankcomputing.com/software/pyqt/) or [PySide](https://www.qt.io/qt-for-python) libraries, you also **need** to install one of these packages. You can use any of the available versions of these libraries: [PyQt5](https://pypi.org/project/PyQt5/), [PyQt6](https://pypi.org/project/PyQt6/), [PySide2](https://pypi.org/project/PySide2/) or [PySide6](https://pypi.org/project/PySide6/). For example, to install [PyQt6](https://riverbankcomputing.com/software/pyqt/download), you can use:
Since [pymmcore-widgets](./index.md) relies on either the
[PyQt](https://riverbankcomputing.com/software/pyqt/) or
[PySide](https://www.qt.io/qt-for-python) libraries, you also **need** to
install one of these packages. You can use any of the available versions of
these libraries: [PyQt5](https://pypi.org/project/PyQt5/),
[PyQt6](https://pypi.org/project/PyQt6/),
[PySide2](https://pypi.org/project/PySide2/) or
[PySide6](https://pypi.org/project/PySide6/). We strongly recommend using PyQt6
if possible. If you must use a specific backend version and run into problems,
please open an issue

For example, to install [PyQt6](https://riverbankcomputing.com/software/pyqt/download), you can use:

```sh
pip install PyQt6
Expand All @@ -21,10 +32,9 @@ pip install PyQt6
!!! Note
Widgets are tested on:

* `macOS & Windows`
* `Python 3.8, 3.9 3.10 & 3.11`
* `PyQt5 & PyQt6`
* `PySide2 & PySide6`
* macOS & Windows
* Python 3.9 and above
* PyQt5, PyQt6, PySide2 & PySide6(==6.7)

### Installing Micro-Manager

Expand Down
1 change: 1 addition & 0 deletions examples/grid_plan_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
mmc.loadSystemConfiguration()

grid_wdg = GridPlanWidget()
grid_wdg.valueChanged.connect(print)
grid_wdg.show()

app.exec_()
32 changes: 32 additions & 0 deletions examples/hcs_wizard.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from contextlib import suppress

import useq
from pymmcore_plus import CMMCorePlus
from qtpy.QtWidgets import QApplication

from pymmcore_widgets import StageWidget

with suppress(ImportError):
from rich import print

from pymmcore_widgets.hcs import HCSWizard

app = QApplication([])
mmc = CMMCorePlus.instance()
mmc.loadSystemConfiguration()
w = HCSWizard()
w.show()
w.accepted.connect(lambda: print(w.value()))
s = StageWidget("XY", mmcore=mmc)
s.show()


plan = useq.WellPlatePlan(
plate=useq.WellPlate.from_str("96-well"),
a1_center_xy=(1000, 1500),
rotation=0.3,
selected_wells=slice(0, 8, 2),
)
w.setValue(plan)

app.exec()
5 changes: 5 additions & 0 deletions examples/mda_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,17 @@
It is fully connected to the CMMCorePlus object, and has a "run" button.
"""

from contextlib import suppress

import useq
from pymmcore_plus import CMMCorePlus
from qtpy.QtWidgets import QApplication

from pymmcore_widgets import MDAWidget

with suppress(ImportError):
from rich import print

app = QApplication([])

CMMCorePlus.instance().loadSystemConfiguration()
Expand Down
21 changes: 21 additions & 0 deletions examples/points_plan_widget.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from qtpy.QtWidgets import QApplication
from useq import RandomPoints

from pymmcore_widgets.useq_widgets import PointsPlanWidget

app = QApplication([])

points = RandomPoints(
num_points=60,
allow_overlap=False,
fov_width=300,
fov_height=200,
max_width=4000,
max_height=4000,
)

fs = PointsPlanWidget(points)
fs.setWellSize(6, 6)
fs.show()

app.exec()
Loading

0 comments on commit 7a46bb5

Please sign in to comment.