def read(self, offset, length):
        """Read a string of bytes from the specified `offset` in bytes,
        relative to the base physical address of the MMIO region.

        Args:
            offset (int, long): offset from base physical address, in bytes.
            length (int): number of bytes to read.

        Returns:
            bytes: bytes read.

        Raises:
            TypeError: if `offset` type is invalid.
            ValueError: if `offset` is out of bounds.

        """
        if not isinstance(offset, (int, long)):
            raise TypeError("Invalid offset type, should be integer.")

        offset = self._adjust_offset(offset)
        self._validate_offset(offset, length)
        return bytes(self.mapping[offset:offset + length])
def read ( self , offset , length ) : if not isinstance ( offset , ( int , long ) ) : raise TypeError ( "Invalid offset type, should be integer." ) offset = self . _adjust_offset ( offset ) self . _validate_offset ( offset , length ) return bytes ( self . mapping [ offset : offset + length ] )
Read a string of bytes from the specified `offset` in bytes,
        relative to the base physical address of the MMIO region.

        Args:
            offset (int, long): offset from base physical address, in bytes.
            length (int): number of bytes to read.

        Returns:
            bytes: bytes read.

        Raises:
            TypeError: if `offset` type is invalid.
            ValueError: if `offset` is out of bounds.