# Path: concert/base.py
# class AccessorNotImplementedError(NotImplementedError):
# 
#     """Raised when a setter or getter is not implemented."""
# 
# Path: concert/devices/base.py
# class Device(Parameterizable):
# 
#     """
#     A :class:`.Device` provides locked access to a real-world device.
# 
#     It implements the context protocol to provide locking::
# 
#         async with device:
#             # device is locked
#             await device.set_parameter(1 * q.m)
#             ...
# 
#         # device is unlocked again
#     """
# 
#     def __init__(self):
#         # We have to create the lock early on because it will be accessed in
#         # any add_parameter calls, especially those in the Parameterizable base
#         # class
#         self._lock = asyncio.Lock()
#         super(Device, self).__init__()
# 
#     async def __aenter__(self):
#         await self._lock.acquire()
# 
#         return self
# 
#     async def __aexit__(self, exc_type, exc, tb):
#         self._lock.release()
# 
#     @background
#     async def emergency_stop(self):
#         """Emergency stop."""
#         await self._emergency_stop()
# 
#     async def _emergency_stop(self):
#         """Emergency stop implementation."""
#         pass


from concert.base import AccessorNotImplementedError
from concert.devices.base import Device
"""Sample exchanger is a device that will pick a sample from a sample holder and
transfer it onto another one.
"""


class SampleChanger(Device):

    """ A device that moves samples in and out from the sample holder."""

    def __init__(self):
        super(SampleChanger, self).__init__()

    async def _set_sample(self):
        raise AccessorNotImplementedError

    async def _get_sample(self):

# Path: concert/base.py
# class AccessorNotImplementedError(NotImplementedError):
# 
#     """Raised when a setter or getter is not implemented."""
# 
# Path: concert/devices/base.py
# class Device(Parameterizable):
# 
#     """
#     A :class:`.Device` provides locked access to a real-world device.
# 
#     It implements the context protocol to provide locking::
# 
#         async with device:
#             # device is locked
#             await device.set_parameter(1 * q.m)
#             ...
# 
#         # device is unlocked again
#     """
# 
#     def __init__(self):
#         # We have to create the lock early on because it will be accessed in
#         # any add_parameter calls, especially those in the Parameterizable base
#         # class
#         self._lock = asyncio.Lock()
#         super(Device, self).__init__()
# 
#     async def __aenter__(self):
#         await self._lock.acquire()
# 
#         return self
# 
#     async def __aexit__(self, exc_type, exc, tb):
#         self._lock.release()
# 
#     @background
#     async def emergency_stop(self):
#         """Emergency stop."""
#         await self._emergency_stop()
# 
#     async def _emergency_stop(self):
#         """Emergency stop implementation."""
#         pass


# Path: concert/devices/samplechangers/base.py
from concert.base import AccessorNotImplementedError
from concert.devices.base import Device

"""Sample exchanger is a device that will pick a sample from a sample holder and
transfer it onto another one.
"""


class SampleChanger(Device):

    """ A device that moves samples in and out from the sample holder."""

    def __init__(self):
        super(SampleChanger, self).__init__()

    async def _set_sample(self):
        raise AccessorNotImplementedError

    async def _get_sample(self):

        raise AccessorNotImplementedError