def write(self, bytes):
        """Write data to the memory.

        .. note::
            Writes beyond the specified memory range will be truncated and a
            :py:exc:`.TruncationWarning` is produced. These warnings can be
            converted into exceptions using :py:func:`warnings.simplefilter`::

                >>> import warnings
                >>> from rig.machine_control.machine_controller \\
                ...     import TruncationWarning
                >>> warnings.simplefilter('error', TruncationWarning)

        Parameters
        ----------
        bytes : :py:class:`bytes`
            Data to write to the memory as a bytestring.

        Returns
        -------
        int
            Number of bytes written.
        """
        if self.address + len(bytes) > self._end_address:
            n_bytes = self._end_address - self.address

            warnings.warn("write truncated from {} to {} bytes".format(
                len(bytes), n_bytes), TruncationWarning, stacklevel=3)
            bytes = bytes[:n_bytes]

        if len(bytes) == 0:
            return 0

        # Perform the write and increment the offset
        self._parent._perform_write(self.address, bytes)
        self._offset += len(bytes)
        return len(bytes)
Write data to the memory.

        .. note::
            Writes beyond the specified memory range will be truncated and a
            :py:exc:`.TruncationWarning` is produced. These warnings can be
            converted into exceptions using :py:func:`warnings.simplefilter`::

                >>> import warnings
                >>> from rig.machine_control.machine_controller \\
                ...     import TruncationWarning
                >>> warnings.simplefilter('error', TruncationWarning)

        Parameters
        ----------
        bytes : :py:class:`bytes`
            Data to write to the memory as a bytestring.

        Returns
        -------
        int
            Number of bytes written.