pymmcore-plus 0.13.6__py3-none-any.whl → 0.14.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pymmcore_plus/__init__.py +2 -0
- pymmcore_plus/_accumulator.py +258 -0
- pymmcore_plus/_cli.py +4 -2
- pymmcore_plus/_util.py +11 -8
- pymmcore_plus/core/__init__.py +34 -1
- pymmcore_plus/core/_device.py +739 -19
- pymmcore_plus/core/_mmcore_plus.py +165 -8
- pymmcore_plus/mda/handlers/_tensorstore_handler.py +3 -1
- {pymmcore_plus-0.13.6.dist-info → pymmcore_plus-0.14.0.dist-info}/METADATA +14 -39
- {pymmcore_plus-0.13.6.dist-info → pymmcore_plus-0.14.0.dist-info}/RECORD +13 -12
- {pymmcore_plus-0.13.6.dist-info → pymmcore_plus-0.14.0.dist-info}/WHEEL +0 -0
- {pymmcore_plus-0.13.6.dist-info → pymmcore_plus-0.14.0.dist-info}/entry_points.txt +0 -0
- {pymmcore_plus-0.13.6.dist-info → pymmcore_plus-0.14.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -23,6 +23,7 @@ from pymmcore_plus._util import find_micromanager, print_tabular_data
|
|
|
23
23
|
from pymmcore_plus.mda import MDAEngine, MDARunner, PMDAEngine
|
|
24
24
|
from pymmcore_plus.metadata.functions import summary_metadata
|
|
25
25
|
|
|
26
|
+
from . import _device
|
|
26
27
|
from ._adapter import DeviceAdapter
|
|
27
28
|
from ._config import Configuration
|
|
28
29
|
from ._config_group import ConfigGroup
|
|
@@ -31,26 +32,38 @@ from ._constants import (
|
|
|
31
32
|
DeviceInitializationState,
|
|
32
33
|
DeviceType,
|
|
33
34
|
FocusDirection,
|
|
35
|
+
Keyword,
|
|
34
36
|
PixelType,
|
|
35
37
|
PropertyType,
|
|
36
38
|
)
|
|
37
|
-
from ._device import Device
|
|
38
39
|
from ._metadata import Metadata
|
|
39
40
|
from ._property import DeviceProperty
|
|
40
41
|
from .events import CMMCoreSignaler, PCoreSignaler, _get_auto_core_callback_class
|
|
41
42
|
|
|
42
43
|
if TYPE_CHECKING:
|
|
43
44
|
from collections.abc import Iterable, Iterator, Sequence
|
|
44
|
-
from typing import Literal, TypedDict, Unpack
|
|
45
|
+
from typing import Literal, TypeAlias, TypedDict, Union, Unpack
|
|
45
46
|
|
|
46
47
|
import numpy as np
|
|
48
|
+
from pymmcore import DeviceLabel
|
|
47
49
|
from useq import MDAEvent
|
|
48
50
|
|
|
49
51
|
from pymmcore_plus.mda._runner import SingleOutput
|
|
50
52
|
from pymmcore_plus.metadata.schema import SummaryMetaV1
|
|
51
53
|
|
|
52
54
|
_T = TypeVar("_T")
|
|
55
|
+
_DT = TypeVar("_DT", bound=_device.Device)
|
|
53
56
|
ListOrTuple = list[_T] | tuple[_T, ...]
|
|
57
|
+
DeviceTypesWithCurrent: TypeAlias = Union[
|
|
58
|
+
Literal[DeviceType.CameraDevice]
|
|
59
|
+
| Literal[DeviceType.ShutterDevice]
|
|
60
|
+
| Literal[DeviceType.StageDevice]
|
|
61
|
+
| Literal[DeviceType.XYStageDevice]
|
|
62
|
+
| Literal[DeviceType.AutoFocusDevice]
|
|
63
|
+
| Literal[DeviceType.SLMDevice]
|
|
64
|
+
| Literal[DeviceType.GalvoDevice]
|
|
65
|
+
| Literal[DeviceType.ImageProcessorDevice]
|
|
66
|
+
]
|
|
54
67
|
|
|
55
68
|
class PropertySchema(TypedDict, total=False):
|
|
56
69
|
"""JSON schema `dict` describing a device property."""
|
|
@@ -334,7 +347,12 @@ class CMMCorePlus(pymmcore.CMMCore):
|
|
|
334
347
|
and the property Value has actually changed.
|
|
335
348
|
"""
|
|
336
349
|
with self._property_change_emission_ensured(stateDeviceLabel, STATE_PROPS):
|
|
337
|
-
|
|
350
|
+
try:
|
|
351
|
+
super().setStateLabel(stateDeviceLabel, stateLabel)
|
|
352
|
+
except RuntimeError as e: # pragma: no cover
|
|
353
|
+
state_labels = self.getStateLabels(stateDeviceLabel)
|
|
354
|
+
msg = f"{e}. Available Labels: {state_labels}"
|
|
355
|
+
raise RuntimeError(msg) from None
|
|
338
356
|
|
|
339
357
|
def setDeviceAdapterSearchPaths(self, paths: Sequence[str]) -> None:
|
|
340
358
|
"""Set the device adapter search paths.
|
|
@@ -377,6 +395,9 @@ class CMMCorePlus(pymmcore.CMMCore):
|
|
|
377
395
|
recognized by the specific plugin library. See
|
|
378
396
|
[`pymmcore.CMMCore.getAvailableDevices`][] for a list of valid device names.
|
|
379
397
|
"""
|
|
398
|
+
if str(label).lower() == Keyword.CoreDevice.value.lower(): # pragma: no cover
|
|
399
|
+
raise ValueError(f"Label {label!r} is reserved.")
|
|
400
|
+
|
|
380
401
|
try:
|
|
381
402
|
super().loadDevice(label, moduleName, deviceName)
|
|
382
403
|
except (RuntimeError, ValueError) as e:
|
|
@@ -850,7 +871,7 @@ class CMMCorePlus(pymmcore.CMMCore):
|
|
|
850
871
|
device_adapter: str | re.Pattern | None = ...,
|
|
851
872
|
*,
|
|
852
873
|
as_object: Literal[True] = ...,
|
|
853
|
-
) -> Iterator[Device]: ...
|
|
874
|
+
) -> Iterator[_device.Device]: ...
|
|
854
875
|
|
|
855
876
|
def iterDevices(
|
|
856
877
|
self,
|
|
@@ -859,7 +880,7 @@ class CMMCorePlus(pymmcore.CMMCore):
|
|
|
859
880
|
device_adapter: str | re.Pattern | None = None,
|
|
860
881
|
*,
|
|
861
882
|
as_object: bool = True,
|
|
862
|
-
) -> Iterator[Device] | Iterator[str]:
|
|
883
|
+
) -> Iterator[_device.Device] | Iterator[str]:
|
|
863
884
|
"""Iterate over currently loaded devices.
|
|
864
885
|
|
|
865
886
|
:sparkles: *This method is new in `CMMCorePlus`.*
|
|
@@ -912,7 +933,7 @@ class CMMCorePlus(pymmcore.CMMCore):
|
|
|
912
933
|
devices = [d for d in devices if ptrn.search(self.getDeviceLibrary(d))]
|
|
913
934
|
|
|
914
935
|
for dev in devices:
|
|
915
|
-
yield Device(dev, mmcore=self) if as_object else dev
|
|
936
|
+
yield _device.Device.create(dev, mmcore=self) if as_object else dev
|
|
916
937
|
|
|
917
938
|
@overload
|
|
918
939
|
def iterProperties(
|
|
@@ -1093,7 +1114,77 @@ class CMMCorePlus(pymmcore.CMMCore):
|
|
|
1093
1114
|
"""
|
|
1094
1115
|
return DeviceAdapter(library_name, mmcore=self)
|
|
1095
1116
|
|
|
1096
|
-
|
|
1117
|
+
@overload
|
|
1118
|
+
def getDeviceObject(
|
|
1119
|
+
self, device_label: str, device_type: Literal[DeviceType.Camera]
|
|
1120
|
+
) -> _device.CameraDevice: ...
|
|
1121
|
+
@overload
|
|
1122
|
+
def getDeviceObject(
|
|
1123
|
+
self, device_label: str, device_type: Literal[DeviceType.Stage]
|
|
1124
|
+
) -> _device.StageDevice: ...
|
|
1125
|
+
@overload
|
|
1126
|
+
def getDeviceObject(
|
|
1127
|
+
self, device_label: str, device_type: Literal[DeviceType.State]
|
|
1128
|
+
) -> _device.StateDevice: ...
|
|
1129
|
+
@overload
|
|
1130
|
+
def getDeviceObject(
|
|
1131
|
+
self, device_label: str, device_type: Literal[DeviceType.Shutter]
|
|
1132
|
+
) -> _device.ShutterDevice: ...
|
|
1133
|
+
@overload
|
|
1134
|
+
def getDeviceObject(
|
|
1135
|
+
self, device_label: str, device_type: Literal[DeviceType.XYStage]
|
|
1136
|
+
) -> _device.XYStageDevice: ...
|
|
1137
|
+
@overload
|
|
1138
|
+
def getDeviceObject(
|
|
1139
|
+
self, device_label: str, device_type: Literal[DeviceType.Serial]
|
|
1140
|
+
) -> _device.SerialDevice: ...
|
|
1141
|
+
@overload
|
|
1142
|
+
def getDeviceObject(
|
|
1143
|
+
self, device_label: str, device_type: Literal[DeviceType.Generic]
|
|
1144
|
+
) -> _device.GenericDevice: ...
|
|
1145
|
+
@overload
|
|
1146
|
+
def getDeviceObject(
|
|
1147
|
+
self, device_label: str, device_type: Literal[DeviceType.AutoFocus]
|
|
1148
|
+
) -> _device.AutoFocusDevice: ...
|
|
1149
|
+
@overload
|
|
1150
|
+
def getDeviceObject(
|
|
1151
|
+
self, device_label: str, device_type: Literal[DeviceType.ImageProcessor]
|
|
1152
|
+
) -> _device.ImageProcessorDevice: ...
|
|
1153
|
+
@overload
|
|
1154
|
+
def getDeviceObject(
|
|
1155
|
+
self, device_label: str, device_type: Literal[DeviceType.SignalIO]
|
|
1156
|
+
) -> _device.SignalIODevice: ...
|
|
1157
|
+
@overload
|
|
1158
|
+
def getDeviceObject(
|
|
1159
|
+
self, device_label: str, device_type: Literal[DeviceType.Magnifier]
|
|
1160
|
+
) -> _device.MagnifierDevice: ...
|
|
1161
|
+
@overload
|
|
1162
|
+
def getDeviceObject(
|
|
1163
|
+
self, device_label: str, device_type: Literal[DeviceType.SLM]
|
|
1164
|
+
) -> _device.SLMDevice: ...
|
|
1165
|
+
@overload
|
|
1166
|
+
def getDeviceObject(
|
|
1167
|
+
self, device_label: str, device_type: Literal[DeviceType.Hub]
|
|
1168
|
+
) -> _device.HubDevice: ...
|
|
1169
|
+
@overload
|
|
1170
|
+
def getDeviceObject(
|
|
1171
|
+
self, device_label: str, device_type: Literal[DeviceType.Galvo]
|
|
1172
|
+
) -> _device.GalvoDevice: ...
|
|
1173
|
+
@overload
|
|
1174
|
+
def getDeviceObject(
|
|
1175
|
+
self,
|
|
1176
|
+
device_label: Literal[Keyword.CoreDevice],
|
|
1177
|
+
device_type: Literal[DeviceType.Core],
|
|
1178
|
+
) -> _device.CoreDevice: ...
|
|
1179
|
+
@overload
|
|
1180
|
+
def getDeviceObject(
|
|
1181
|
+
self, device_label: str, device_type: DeviceType = ...
|
|
1182
|
+
) -> _device.Device: ...
|
|
1183
|
+
@overload
|
|
1184
|
+
def getDeviceObject(self, device_label: str, device_type: type[_DT]) -> _DT: ...
|
|
1185
|
+
def getDeviceObject(
|
|
1186
|
+
self, device_label: str, device_type: type[_DT] | DeviceType = DeviceType.Any
|
|
1187
|
+
) -> _DT | _device.Device:
|
|
1097
1188
|
"""Return a `Device` object bound to device_label on this core.
|
|
1098
1189
|
|
|
1099
1190
|
:sparkles: *This method is new in `CMMCorePlus`.*
|
|
@@ -1136,7 +1227,18 @@ class CMMCorePlus(pymmcore.CMMCore):
|
|
|
1136
1227
|
}
|
|
1137
1228
|
}
|
|
1138
1229
|
"""
|
|
1139
|
-
|
|
1230
|
+
dev = _device.Device.create(device_label, mmcore=self)
|
|
1231
|
+
if (isinstance(device_type, type) and not isinstance(dev, device_type)) or (
|
|
1232
|
+
isinstance(device_type, DeviceType)
|
|
1233
|
+
and device_type not in {DeviceType.Any, DeviceType.Unknown}
|
|
1234
|
+
and dev.type() != device_type
|
|
1235
|
+
):
|
|
1236
|
+
raise TypeError(
|
|
1237
|
+
f"{device_type!r} requested but device with label "
|
|
1238
|
+
f"{device_label!r} is a {dev.type()}."
|
|
1239
|
+
)
|
|
1240
|
+
|
|
1241
|
+
return dev
|
|
1140
1242
|
|
|
1141
1243
|
def getConfigGroupObject(
|
|
1142
1244
|
self, group_name: str, allow_missing: bool = False
|
|
@@ -1189,6 +1291,61 @@ class CMMCorePlus(pymmcore.CMMCore):
|
|
|
1189
1291
|
for group in self.getAvailableConfigGroups():
|
|
1190
1292
|
yield ConfigGroup(group, mmcore=self)
|
|
1191
1293
|
|
|
1294
|
+
def getCurrentDeviceOfType(
|
|
1295
|
+
self, device_type: DeviceTypesWithCurrent
|
|
1296
|
+
) -> DeviceLabel | Literal[""]:
|
|
1297
|
+
"""Return the current device of type `device_type`.
|
|
1298
|
+
|
|
1299
|
+
Only the following device types have a "current" device:
|
|
1300
|
+
- CameraDevice
|
|
1301
|
+
- ShutterDevice
|
|
1302
|
+
- StageDevice
|
|
1303
|
+
- XYStageDevice
|
|
1304
|
+
- AutoFocusDevice
|
|
1305
|
+
- SLMDevice
|
|
1306
|
+
- GalvoDevice
|
|
1307
|
+
- ImageProcessorDevice
|
|
1308
|
+
|
|
1309
|
+
Calling this method with any other device type will raise a `ValueError`.
|
|
1310
|
+
|
|
1311
|
+
:sparkles: *This method is new in `CMMCorePlus`.*
|
|
1312
|
+
|
|
1313
|
+
Parameters
|
|
1314
|
+
----------
|
|
1315
|
+
device_type : DeviceType
|
|
1316
|
+
The type of device to get the current device for.
|
|
1317
|
+
See [`DeviceType`][pymmcore_plus.DeviceType] for a list of device types.
|
|
1318
|
+
|
|
1319
|
+
Returns
|
|
1320
|
+
-------
|
|
1321
|
+
str
|
|
1322
|
+
The label of the current device of type `device_type`.
|
|
1323
|
+
If no device of that type is currently set, an empty string is returned.
|
|
1324
|
+
|
|
1325
|
+
Raises
|
|
1326
|
+
------
|
|
1327
|
+
ValueError
|
|
1328
|
+
If the core does not have the concept of a "current" device of the provided
|
|
1329
|
+
`device_type`.
|
|
1330
|
+
"""
|
|
1331
|
+
if device_type == DeviceType.CameraDevice:
|
|
1332
|
+
return self.getCameraDevice()
|
|
1333
|
+
if device_type == DeviceType.ShutterDevice:
|
|
1334
|
+
return self.getShutterDevice()
|
|
1335
|
+
if device_type == DeviceType.StageDevice:
|
|
1336
|
+
return self.getFocusDevice()
|
|
1337
|
+
if device_type == DeviceType.XYStageDevice:
|
|
1338
|
+
return self.getXYStageDevice()
|
|
1339
|
+
if device_type == DeviceType.AutoFocusDevice:
|
|
1340
|
+
return self.getAutoFocusDevice()
|
|
1341
|
+
if device_type == DeviceType.SLMDevice:
|
|
1342
|
+
return self.getSLMDevice()
|
|
1343
|
+
if device_type == DeviceType.GalvoDevice:
|
|
1344
|
+
return self.getGalvoDevice()
|
|
1345
|
+
if device_type == DeviceType.ImageProcessorDevice:
|
|
1346
|
+
return self.getImageProcessorDevice()
|
|
1347
|
+
raise ValueError(f"'Current' {device_type.name} is undefined. ")
|
|
1348
|
+
|
|
1192
1349
|
def getDeviceSchema(self, device_label: str) -> DeviceSchema:
|
|
1193
1350
|
"""Return JSON-schema describing device `device_label` and its properties.
|
|
1194
1351
|
|
|
@@ -320,7 +320,9 @@ class TensorStoreHandler:
|
|
|
320
320
|
]
|
|
321
321
|
|
|
322
322
|
if self.ts_driver.startswith("zarr"):
|
|
323
|
-
store.kvstore.write(
|
|
323
|
+
store.kvstore.write(
|
|
324
|
+
".zattrs", json_dumps(metadata).decode("utf-8")
|
|
325
|
+
).result()
|
|
324
326
|
elif self.ts_driver == "n5": # pragma: no cover
|
|
325
327
|
attrs = json_loads(store.kvstore.read("attributes.json").result().value)
|
|
326
328
|
attrs.update(metadata)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pymmcore-plus
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.14.0
|
|
4
4
|
Summary: pymmcore superset providing improved APIs, event handling, and a pure python acquisition engine
|
|
5
5
|
Project-URL: Source, https://github.com/pymmcore-plus/pymmcore-plus
|
|
6
6
|
Project-URL: Tracker, https://github.com/pymmcore-plus/pymmcore-plus/issues
|
|
@@ -25,57 +25,32 @@ Classifier: Topic :: System :: Hardware
|
|
|
25
25
|
Classifier: Topic :: System :: Hardware :: Hardware Drivers
|
|
26
26
|
Classifier: Topic :: Utilities
|
|
27
27
|
Requires-Python: >=3.9
|
|
28
|
-
Requires-Dist: numpy>=1.
|
|
28
|
+
Requires-Dist: numpy>=1.25.2
|
|
29
|
+
Requires-Dist: numpy>=1.26.0; python_version >= '3.12'
|
|
30
|
+
Requires-Dist: numpy>=2.1.0; python_version >= '3.13'
|
|
29
31
|
Requires-Dist: platformdirs>=3.0.0
|
|
30
|
-
Requires-Dist: psygnal>=0.
|
|
31
|
-
Requires-Dist: pymmcore>=
|
|
32
|
+
Requires-Dist: psygnal>=0.10
|
|
33
|
+
Requires-Dist: pymmcore>=11.2.1.71.0
|
|
32
34
|
Requires-Dist: rich>=10.2.0
|
|
33
|
-
Requires-Dist: tensorstore
|
|
35
|
+
Requires-Dist: tensorstore!=0.1.72,>=0.1.67
|
|
36
|
+
Requires-Dist: tensorstore!=0.1.72,>=0.1.71; python_version >= '3.13'
|
|
34
37
|
Requires-Dist: typer>=0.4.2
|
|
35
|
-
Requires-Dist: typing-extensions
|
|
36
|
-
Requires-Dist: useq-schema>=0.7.
|
|
38
|
+
Requires-Dist: typing-extensions>=4
|
|
39
|
+
Requires-Dist: useq-schema>=0.7.2
|
|
37
40
|
Provides-Extra: cli
|
|
38
41
|
Requires-Dist: rich>=10.2.0; extra == 'cli'
|
|
39
42
|
Requires-Dist: typer>=0.4.2; extra == 'cli'
|
|
40
|
-
Provides-Extra: dev
|
|
41
|
-
Requires-Dist: ipython; extra == 'dev'
|
|
42
|
-
Requires-Dist: mypy; extra == 'dev'
|
|
43
|
-
Requires-Dist: pdbpp; (sys_platform != 'win32') and extra == 'dev'
|
|
44
|
-
Requires-Dist: pre-commit; extra == 'dev'
|
|
45
|
-
Requires-Dist: ruff; extra == 'dev'
|
|
46
|
-
Requires-Dist: tensorstore-stubs; extra == 'dev'
|
|
47
|
-
Provides-Extra: docs
|
|
48
|
-
Requires-Dist: mkdocs-autorefs==1.3.1; extra == 'docs'
|
|
49
|
-
Requires-Dist: mkdocs-material; extra == 'docs'
|
|
50
|
-
Requires-Dist: mkdocs-typer==0.0.3; extra == 'docs'
|
|
51
|
-
Requires-Dist: mkdocs>=1.4; extra == 'docs'
|
|
52
|
-
Requires-Dist: mkdocstrings-python==1.1.2; extra == 'docs'
|
|
53
|
-
Requires-Dist: mkdocstrings==0.22.0; extra == 'docs'
|
|
54
43
|
Provides-Extra: io
|
|
55
44
|
Requires-Dist: tifffile>=2021.6.14; extra == 'io'
|
|
56
|
-
Requires-Dist: zarr<3,>=2.
|
|
45
|
+
Requires-Dist: zarr<3,>=2.15; extra == 'io'
|
|
57
46
|
Provides-Extra: pyqt5
|
|
58
47
|
Requires-Dist: pyqt5>=5.15.4; extra == 'pyqt5'
|
|
59
48
|
Provides-Extra: pyqt6
|
|
60
|
-
Requires-Dist: pyqt6
|
|
49
|
+
Requires-Dist: pyqt6>=6.4.2; extra == 'pyqt6'
|
|
61
50
|
Provides-Extra: pyside2
|
|
62
|
-
Requires-Dist: pyside2>=5.15; extra == 'pyside2'
|
|
51
|
+
Requires-Dist: pyside2>=5.15.2.1; extra == 'pyside2'
|
|
63
52
|
Provides-Extra: pyside6
|
|
64
|
-
Requires-Dist: pyside6
|
|
65
|
-
Provides-Extra: test
|
|
66
|
-
Requires-Dist: mm-device-adapters; (sys_platform == 'darwin' and platform_machine == 'x86_64') and extra == 'test'
|
|
67
|
-
Requires-Dist: mm-device-adapters; (sys_platform == 'win32') and extra == 'test'
|
|
68
|
-
Requires-Dist: msgpack; extra == 'test'
|
|
69
|
-
Requires-Dist: msgspec; extra == 'test'
|
|
70
|
-
Requires-Dist: pytest-cov>=4; extra == 'test'
|
|
71
|
-
Requires-Dist: pytest-qt>=4; extra == 'test'
|
|
72
|
-
Requires-Dist: pytest>=7.3.2; extra == 'test'
|
|
73
|
-
Requires-Dist: qtpy>=2; extra == 'test'
|
|
74
|
-
Requires-Dist: rich; extra == 'test'
|
|
75
|
-
Requires-Dist: tifffile>=2021.6.14; extra == 'test'
|
|
76
|
-
Requires-Dist: typer>=0.4.2; extra == 'test'
|
|
77
|
-
Requires-Dist: xarray; extra == 'test'
|
|
78
|
-
Requires-Dist: zarr<3,>=2.2; extra == 'test'
|
|
53
|
+
Requires-Dist: pyside6==6.7.3; extra == 'pyside6'
|
|
79
54
|
Description-Content-Type: text/markdown
|
|
80
55
|
|
|
81
56
|
# pymmcore-plus
|
|
@@ -1,22 +1,23 @@
|
|
|
1
|
-
pymmcore_plus/__init__.py,sha256=
|
|
1
|
+
pymmcore_plus/__init__.py,sha256=EEwtq7bwQ1NC0-wu1DoyA9kJQS7nHqZOlUoYmK3-FQI,1500
|
|
2
|
+
pymmcore_plus/_accumulator.py,sha256=WUgCrLW0U8_kWXfmhSRrC17ubWZNQNckkGVBiTp72F8,9205
|
|
2
3
|
pymmcore_plus/_benchmark.py,sha256=YJICxXleFQVbOluJdq4OujnIcTkkuMVzeB8GJ8nUv5I,6011
|
|
3
4
|
pymmcore_plus/_build.py,sha256=RPTAuwCZWGL5IDJj4JZo1DIIouUsIqS3vnbPbG2_bRE,10993
|
|
4
|
-
pymmcore_plus/_cli.py,sha256=
|
|
5
|
+
pymmcore_plus/_cli.py,sha256=wmqlG8UGBNiTefRppSnRHwnD3w-5DAhN168lIBujbRA,16831
|
|
5
6
|
pymmcore_plus/_logger.py,sha256=d7ldqxY0rGWORKdIzNUiFc9BW6cFBx57kHWtXyY1HE0,5416
|
|
6
7
|
pymmcore_plus/_pymmcore.py,sha256=tcWtTRte9AFQznLGn6CmwLW0W3Rsse8N8NQ5L7JwKCc,630
|
|
7
|
-
pymmcore_plus/_util.py,sha256=
|
|
8
|
+
pymmcore_plus/_util.py,sha256=VGcb_nQu6BBWZsQihed0TrCHdTRADKlBo_qSnIbeF0Q,22814
|
|
8
9
|
pymmcore_plus/install.py,sha256=U4TbQXbUc12aMtGRF_SkinNOTDCuuzIhME5Oup_4ds0,10768
|
|
9
10
|
pymmcore_plus/mocks.py,sha256=jNUfmffD1OArtIvEmqWsy7GCrtTpssVF03flH8cEYx8,1867
|
|
10
11
|
pymmcore_plus/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
12
|
pymmcore_plus/seq_tester.py,sha256=ielLx2ZUJrOXVCojk64UXTeKDoARxt8QkQjt5AE5Gng,3776
|
|
12
|
-
pymmcore_plus/core/__init__.py,sha256=
|
|
13
|
+
pymmcore_plus/core/__init__.py,sha256=gCZMmUjvCh4GX3dwKPxiPzt6NQokFtuHl0-tBUG7B9g,1620
|
|
13
14
|
pymmcore_plus/core/_adapter.py,sha256=eu2BhGe_dnoQrIsh-u3poxWXsiF2Y8pfbKIGWbUgOk8,2857
|
|
14
15
|
pymmcore_plus/core/_config.py,sha256=yWwOnW6f37lLt83MnodNce04az-g8YDjyo7BvMiTc8s,10672
|
|
15
16
|
pymmcore_plus/core/_config_group.py,sha256=R-o4xuPDBPQAC3s-mFsiKwHVKWR38L9qq_aoWdPrAq8,8542
|
|
16
17
|
pymmcore_plus/core/_constants.py,sha256=yS_YVRZQkpvTuQdOPFJdetaFpvXh4CTvd7i0qDIiAuA,13200
|
|
17
|
-
pymmcore_plus/core/_device.py,sha256=
|
|
18
|
+
pymmcore_plus/core/_device.py,sha256=v58TcROSuvxE5ALBjzS474Dx430e0iMA61OuBSnc2rE,33197
|
|
18
19
|
pymmcore_plus/core/_metadata.py,sha256=L8x1gX_zXPz02BUqc7eqJM_Bey2G0RyX30SOBs2aBNc,2755
|
|
19
|
-
pymmcore_plus/core/_mmcore_plus.py,sha256=
|
|
20
|
+
pymmcore_plus/core/_mmcore_plus.py,sha256=Qel61qHKIo-CM4fhji-PZusjs_YuSSkm5n37EO6ESPY,100368
|
|
20
21
|
pymmcore_plus/core/_property.py,sha256=QsQEzqOAedR24zEJ1Ge4kwScfT_7NOApVcgz6QxBJrI,8265
|
|
21
22
|
pymmcore_plus/core/_sequencing.py,sha256=QmaCoyWzR9lX-3ldZxGYqAiEqOn8gts3X0qmskZXzQo,16887
|
|
22
23
|
pymmcore_plus/core/events/__init__.py,sha256=F8r10LEBLrAV8qfkXScSkpqfExdT2XoOx92OqSturpc,1078
|
|
@@ -49,7 +50,7 @@ pymmcore_plus/mda/handlers/__init__.py,sha256=TbgpRdcs3BRdCf6uXJlwo_IIbxM6xXaLoc
|
|
|
49
50
|
pymmcore_plus/mda/handlers/_img_sequence_writer.py,sha256=XUJovvdWViTkn2VZr4XcovNIuBNZF4J4cCHIdwAs1WE,11639
|
|
50
51
|
pymmcore_plus/mda/handlers/_ome_tiff_writer.py,sha256=pqqdl3KQd0tH5Gp4rHVgYqqh2Y8iwoKRXTjwq1JLy1E,6239
|
|
51
52
|
pymmcore_plus/mda/handlers/_ome_zarr_writer.py,sha256=cKg3kJR7TId6M2qC1nJMLlxkv5vlfA5XEAlTIr9kt_E,12275
|
|
52
|
-
pymmcore_plus/mda/handlers/_tensorstore_handler.py,sha256=
|
|
53
|
+
pymmcore_plus/mda/handlers/_tensorstore_handler.py,sha256=YrKwahypq1yoXP3cOcsJTGF-f4LOLrp4KuNHYzPBK64,15321
|
|
53
54
|
pymmcore_plus/mda/handlers/_util.py,sha256=pZydpKAXtQ_gjq5x1yNK1D0hfS7NUL2nH9ivOBg4abc,1600
|
|
54
55
|
pymmcore_plus/metadata/__init__.py,sha256=0o_v53kwR4U_RLlCnr7GD1G6OdFlVuUByIqXiaaM5uk,699
|
|
55
56
|
pymmcore_plus/metadata/functions.py,sha256=Nw2zMbJx0c6aJs6I_uaLGz6cop0IIPfRZOR-qx-SQbc,12937
|
|
@@ -64,8 +65,8 @@ pymmcore_plus/model/_device.py,sha256=AX3rO2gbY7AXJyMN3FfI_n2jl2V0IAPuBh7MiDA5Sq
|
|
|
64
65
|
pymmcore_plus/model/_microscope.py,sha256=69VV6cuevinOK_LhYEkQygHGesvCZefdn9YNt3mV618,11353
|
|
65
66
|
pymmcore_plus/model/_pixel_size_config.py,sha256=RXk8AAwARe8clsXue0GZfOTb1bxyXIsO0ibcDLHM4_s,3889
|
|
66
67
|
pymmcore_plus/model/_property.py,sha256=NQzNtnEzSCR9ogwx1cfi8X-qbJ_cBSJKdSBAaoKoPQ0,3720
|
|
67
|
-
pymmcore_plus-0.
|
|
68
|
-
pymmcore_plus-0.
|
|
69
|
-
pymmcore_plus-0.
|
|
70
|
-
pymmcore_plus-0.
|
|
71
|
-
pymmcore_plus-0.
|
|
68
|
+
pymmcore_plus-0.14.0.dist-info/METADATA,sha256=OzbM7QxgZUlFrhCR3w4lpdchrL7i4AGeANeLqwvl8J0,8835
|
|
69
|
+
pymmcore_plus-0.14.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
70
|
+
pymmcore_plus-0.14.0.dist-info/entry_points.txt,sha256=NtFyndrQzBpUNJyil-8e5hMGke2utAf7mkGavTLcLOY,51
|
|
71
|
+
pymmcore_plus-0.14.0.dist-info/licenses/LICENSE,sha256=OHJjRpOPKKRc7FEnpehNWdR5LRBdBhUtIFG-ZI0dCEA,1522
|
|
72
|
+
pymmcore_plus-0.14.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|