Ophyd-async

Latest version: v0.8.0

Safety actively analyzes 685525 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 1 of 5

0.8.0

Breaking changes

pvi structure changes
Structure now read from `.value` rather than `.pvi` and includes `DeviceVector` support. Supported in FastCS. Requires at least PandABlocks-ioc 0.11.4

`set_and_wait_for_value` changes
Some keyword argument changes to `observe_value` and `set_and_wait_for_value`. There is a new argument to `set_and_wait_for_value`, it now has a `wait_for_set_completion` argument with default of `True`. This is a change in behaviour to before where it would not wait for the set to complete before returning the `Status`, however it is the desired behaviour in the majority of cases. If using with areaDetector then supply `wait_for_set_completion=False` as per [the docs](https://blueskyproject.io/ophyd-async/main/how-to/use_set_and_wait_for_other_value.html)

Epics `signal` module moves
`ophyd_async.epics.signal` moves to `ophyd_async.epics.core` with a backwards compat module that emits deprecation warning.
python
old
from ophyd_async.epics.signal import epics_signal_rw
new
from ophyd_async.epics.core import epics_signal_rw


`StandardReadable` wrappers change to `StandardReadableFormat`
`StandardReadable` wrappers change to enum members of `StandardReadableFormat` (normally imported as `Format`)
python
old
from ophyd_async.core import ConfigSignal, HintedSignal
class MyDevice(StandardReadable):
def __init__(self):
self.add_readables([sig1], ConfigSignal)
self.add_readables([sig2], HintedSignal)
self.add_readables([sig3], HintedSignal.uncached)
new
from ophyd_async.core import StandardReadableFormat as Format
class MyDevice(StandardReadable):
def __init__(self):
self.add_readables([sig1], Format.CONFIG_SIGNAL)
self.add_readables([sig2], Format.HINTED_SIGNAL)
self.add_readables([sig3], Format.HINTED_UNCACHED_SIGNAL


Declarative Devices are now available
python
old
from ophyd_async.core import ConfigSignal, HintedSignal
from ophyd_async.epics.signal import epics_signal_r, epics_signal_rw

class Sensor(StandardReadable):
def __init__(self, prefix: str, name="") -> None:
with self.add_children_as_readables(HintedSignal):
self.value = epics_signal_r(float, prefix + "Value")
with self.add_children_as_readables(ConfigSignal):
self.mode = epics_signal_rw(EnergyMode, prefix + "Mode")
super().__init__(name=name)
new
from typing import Annotated as A
from ophyd_async.core import StandardReadableFormat as Format
from ophyd_async.epics.core import EpicsDevice, PvSuffix, epics_signal_r, epics_signal_rw

class Sensor(StandardReadable, EpicsDevice):
value: A[SignalR[float], PvSuffix("Value"), Format.HINTED_SIGNAL]
mode: A[SignalRW[EnergyMode], PvSuffix("Mode"), Format.CONFIG_SIGNAL]


`StrictEnum` is now requried for all strictly checked `Enums`
python
old
from enum import Enum
class MyEnum(str, Enum):
ONE = "one"
TWO = "two"
new
from ophyd_async.core import StrictEnum
class MyEnum(StrictEnum):
ONE = "one"
TWO = "two"

`SubsetEnum` is now an `Enum` subclass:
python
from ophyd_async.core import SubsetEnum
old
MySubsetEnum = SubsetEnum["one", "two"]
new
class MySubsetEnum(SubsetEnum):
ONE = "one"
TWO = "two"

Use python primitives for scalar types instead of numpy types
python
old
import numpy as np
x = epics_signal_rw(np.int32, "PV")
new
x = epics_signal_rw(int, "PV")

Use `Array1D` for 1D arrays instead of `npt.NDArray`
python
import numpy as np
old
import numpy.typing as npt
x = epics_signal_rw(npt.NDArray[np.int32], "PV")
new
from ophyd_async.core import Array1D
x = epics_signal_rw(Array1D[np.int32], "PV")

Use `Sequence[str]` for arrays of strings instead of `npt.NDArray[np.str_]`
python
import numpy as np
old
import numpy.typing as npt
x = epics_signal_rw(npt.NDArray[np.str_], "PV")
new
from collections.abc import Sequence
x = epics_signal_rw(Sequence[str], "PV")

`MockSignalBackend` requires a real backend
python
old
fake_set_signal = SignalRW(MockSignalBackend(float))
new
fake_set_signal = soft_signal_rw(float)
await fake_set_signal.connect(mock=True)

`get_mock_put` is no longer passed timeout as it is handled in `Signal`
python
old
get_mock_put(driver.capture).assert_called_once_with(Writing.ON, wait=ANY, timeout=ANY)
new
get_mock_put(driver.capture).assert_called_once_with(Writing.ON, wait=ANY)

`super().__init__` required for `Device` subclasses
python
old
class MyDevice(Device):
def __init__(self, name: str = ""):
self.signal, self.backend_put = soft_signal_r_and_setter(int)
new
class MyDevice(Device):
def __init__(self, name: str = ""):
self.signal, self.backend_put = soft_signal_r_and_setter(int)
super().__init__(name=name)

Arbitrary `BaseModel`s not supported, pending use cases for them
The `Table` type has been suitable for everything we have seen so far, if you need an arbitrary `BaseModel` subclass then please make an issue
Child `Device`s set parent on attach, and can't be public children of more than one parent
python
class SourceDevice(Device):
def __init__(self, name: str = ""):
self.signal = soft_signal_rw(int)
super().__init__(name=name)

old
class ReferenceDevice(Device):
def __init__(self, signal: SignalRW[int], name: str = ""):
self.signal = signal
super().__init__(name=name)

def set(self, value) -> AsyncStatus:
return self.signal.set(value + 1)
new
from ophyd_async.core import Reference

class ReferenceDevice(Device):
def __init__(self, signal: SignalRW[int], name: str = ""):
self._signal_ref = Reference(signal)
super().__init__(name=name)

def set(self, value) -> AsyncStatus:
return self._signal_ref().set(value + 1)


What's Changed
* Add test for context race condition by DominicOram in https://github.com/bluesky/ophyd-async/pull/600
* New signal typing by coretl in https://github.com/bluesky/ophyd-async/pull/594
* Update copier template to 2.4.0 by coretl in https://github.com/bluesky/ophyd-async/pull/628
* Logo by coretl in https://github.com/bluesky/ophyd-async/pull/629
* Allow CA/PVA mismatching enums to be bools by coretl in https://github.com/bluesky/ophyd-async/pull/632
* Allow shared parent mock to be passed to Device.connect by jsouter in https://github.com/bluesky/ophyd-async/pull/599
* Report Device name in error when using AsyncStatus.wrap by jsouter in https://github.com/bluesky/ophyd-async/pull/607
* Temporary fix for PyPI publishing by coretl in https://github.com/bluesky/ophyd-async/pull/634
* Windows: fix unit tests & enable CI by Tom-Willemsen in https://github.com/bluesky/ophyd-async/pull/633
* Declarative EPICS and StandardReadable Devices by coretl in https://github.com/bluesky/ophyd-async/pull/598
* Update to copier 2.5.0 by coretl in https://github.com/bluesky/ophyd-async/pull/637
* Speed up device creation and connection in mock mode by coretl in https://github.com/bluesky/ophyd-async/pull/641
* Set parent of children of DeviceVector passed at init by coretl in https://github.com/bluesky/ophyd-async/pull/644
* Fix some small issues discovered in testing by coretl in https://github.com/bluesky/ophyd-async/pull/646
* Yield in each loop of observe_value by coretl in https://github.com/bluesky/ophyd-async/pull/648
* Add introspection of the errors that make up NotConnected by coretl in https://github.com/bluesky/ophyd-async/pull/649
* Rename hdf5_type to data_type in DatasetTable by jwlodek in https://github.com/bluesky/ophyd-async/pull/651
* Fix wrong function call name for str waveform that causes issue when … by DiamondJoseph in https://github.com/bluesky/ophyd-async/pull/653
* wait_for_value_interface_change by ZohebShaikh in https://github.com/bluesky/ophyd-async/pull/652
* Fix type hints and error messages in tests caused by pydantic update by coretl in https://github.com/bluesky/ophyd-async/pull/665
* FIX: Handle NonSupportedFeature exception for pipes by burkeds in https://github.com/bluesky/ophyd-async/pull/660
* Change tango decorators to Annotations by coretl in https://github.com/bluesky/ophyd-async/pull/658
* Restructure epics/test_signals.py by jsouter in https://github.com/bluesky/ophyd-async/pull/630
* Add the python package and the config and make the contracts kept by stan-dot in https://github.com/bluesky/ophyd-async/pull/669
* Add missing space in log message by jwlodek in https://github.com/bluesky/ophyd-async/pull/676

**Full Changelog**: https://github.com/bluesky/ophyd-async/compare/v0.7.0...v0.8.0

0.8.0a6

What's Changed
* wait_for_value_interface_change by ZohebShaikh in https://github.com/bluesky/ophyd-async/pull/652
* Fix type hints and error messages in tests caused by pydantic update by coretl in https://github.com/bluesky/ophyd-async/pull/665
* FIX: Handle NonSupportedFeature exception for pipes by burkeds in https://github.com/bluesky/ophyd-async/pull/660
* Change tango decorators to Annotations by coretl in https://github.com/bluesky/ophyd-async/pull/658
* Restructure epics/test_signals.py by jsouter in https://github.com/bluesky/ophyd-async/pull/630

Changes

`set_and_wait_for_value` changes
Some keyword argument changes to `observe_value` and `set_and_wait_for_value`. There is a new argument to `set_and_wait_for_value`, it now has a `wait_for_set_completion` argument with default of `True`. This is a change in behaviour to before where it would not wait for the set to complete before returning the `Status`, however it is the desired behaviour in the majority of cases. If using with areaDetector then supply `wait_for_set_completion=False` as per [the docs](https://blueskyproject.io/ophyd-async/main/how-to/use_set_and_wait_for_other_value.html)

**Full Changelog**: https://github.com/bluesky/ophyd-async/compare/v0.8.0a5...v0.8.0a6

0.8.0a5

What's Changed
* Set parent of children of DeviceVector passed at init by coretl in https://github.com/bluesky/ophyd-async/pull/644
* Fix some small issues discovered in testing by coretl in https://github.com/bluesky/ophyd-async/pull/646
* Yield in each loop of observe_value by coretl in https://github.com/bluesky/ophyd-async/pull/648
* Add introspection of the errors that make up NotConnected by coretl in https://github.com/bluesky/ophyd-async/pull/649
* Rename hdf5_type to data_type in DatasetTable by jwlodek in https://github.com/bluesky/ophyd-async/pull/651
* Fix wrong function call name for str waveform that causes issue when … by DiamondJoseph in https://github.com/bluesky/ophyd-async/pull/653


**Full Changelog**: https://github.com/bluesky/ophyd-async/compare/v0.8.0a4...v0.8.0a5

0.8.0a4

What's Changed
* Update to copier 2.5.0 by coretl in https://github.com/bluesky/ophyd-async/pull/637
* Speed up device creation and connection in mock mode by coretl in https://github.com/bluesky/ophyd-async/pull/641


**Full Changelog**: https://github.com/bluesky/ophyd-async/compare/v0.8.0a3...v0.8.0a4

0.8.0a3

What's Changed
* Windows: fix unit tests & enable CI by Tom-Willemsen in https://github.com/bluesky/ophyd-async/pull/633
* Declarative EPICS and StandardReadable Devices by coretl in https://github.com/bluesky/ophyd-async/pull/598

Changes

pvi structure changes
Structure read from `.value` now includes `DeviceVector` support. Requires at least PandABlocks-ioc 0.11.2

Epics `signal` module moves
`ophyd_async.epics.signal` moves to `ophyd_async.epics.core` with a backwards compat module that emits deprecation warning.
python
old
from ophyd_async.epics.signal import epics_signal_rw
new
from ophyd_async.epics.core import epics_signal_rw


`StandardReadable` wrappers change to `StandardReadableFormat`
`StandardReadable` wrappers change to enum members of `StandardReadableFormat` (normally imported as `Format`)
python
old
from ophyd_async.core import ConfigSignal, HintedSignal
class MyDevice(StandardReadable):
def __init__(self):
self.add_readables([sig1], ConfigSignal)
self.add_readables([sig2], HintedSignal)
self.add_readables([sig3], HintedSignal.uncached)
new
from ophyd_async.core import StandardReadableFormat as Format
class MyDevice(StandardReadable):
def __init__(self):
self.add_readables([sig1], Format.CONFIG_SIGNAL)
self.add_readables([sig2], Format.HINTED_SIGNAL)
self.add_readables([sig3], Format.HINTED_UNCACHED_SIGNAL


Declarative Devices are now available
python
old
from ophyd_async.core import ConfigSignal, HintedSignal
from ophyd_async.epics.signal import epics_signal_r, epics_signal_rw

class Sensor(StandardReadable):
def __init__(self, prefix: str, name="") -> None:
with self.add_children_as_readables(HintedSignal):
self.value = epics_signal_r(float, prefix + "Value")
with self.add_children_as_readables(ConfigSignal):
self.mode = epics_signal_rw(EnergyMode, prefix + "Mode")
super().__init__(name=name)
new
from typing import Annotated as A
from ophyd_async.core import StandardReadableFormat as Format
from ophyd_async.epics.core import EpicsDevice, PvSuffix, epics_signal_r, epics_signal_rw

class Sensor(StandardReadable, EpicsDevice):
value: A[SignalR[float], PvSuffix("Value"), Format.HINTED_SIGNAL]
mode: A[SignalRW[EnergyMode], PvSuffix("Mode"), Format.CONFIG_SIGNAL]


**Full Changelog**: https://github.com/bluesky/ophyd-async/compare/v0.8.0a2...v0.8.0a3

0.8.0a2

What's Changed
* Allow CA/PVA mismatching enums to be bools by coretl in https://github.com/bluesky/ophyd-async/pull/632
* Allow shared parent mock to be passed to Device.connect by jsouter in https://github.com/bluesky/ophyd-async/pull/599
* Report Device name in error when using AsyncStatus.wrap by jsouter in https://github.com/bluesky/ophyd-async/pull/607
* Temporary fix for PyPI publishing by coretl in https://github.com/bluesky/ophyd-async/pull/634


**Full Changelog**: https://github.com/bluesky/ophyd-async/compare/v0.8.0a1...v0.8.0a2

Page 1 of 5

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.