code: def readinto(self, buf, **kwargs):
          
          self.i2c.readfrom_into(self.device_address, buf, **kwargs)
          if self._debug:
              print("i2c_device.readinto:", [hex(i) for i in buf])
docs: Read into ``buf`` from the device. The number of bytes read will be the
          length of ``buf``.
  
          If ``start`` or ``end`` is provided, then the buffer will be sliced
          as if ``buf[start:end]``. This will not cause an allocation like
          ``buf[start:end]`` will so it saves memory.
  
          :param bytearray buffer: buffer to write into
          :param int start: Index to start writing at
          :param int end: Index to write up to but not include