def read(self, addr: str) -> Optional[Union[(bool, int, float, str)]]:
    '\n        Returns the value of a single IO from the memory store\n        '
    with lock:
        if (not self._first_read):
            return None
        self._check_for_address(addr)
        val = self._io.get(addr)
        return val
Returns the value of a single IO from the memory store
def read(self, addr: str) -> Optional[Union[(bool, int, float, str)]]:
    '\n        \n        '
    with lock:
        if (not self._first_read):
            return None
        self._check_for_address(addr)
        val = self._io.get(addr)
        return val