docstr: Read at most size bytes from the chunk.
  If size is omitted or negative, read until the end
  of the chunk.
docstr_tok: ["Read","at","most","size","bytes","from","the","chunk",".","If","size","is","omitted","or","negative",",","read","until","the","end","of","the","chunk","."]
code: def read(self, size=-1):
      """Read at most size bytes from the chunk.
      If size is omitted or negative, read until the end
      of the chunk.
      """
  
      if self.closed:
          raise ValueError("I/O operation on closed file")
      if self.size_read >= self.chunksize:
          return b""
      if size < 0:
          size = self.chunksize - self.size_read
      if size > self.chunksize - self.size_read:
          size = self.chunksize - self.size_read
      data = self.file.read(size)
      self.size_read = self.size_read + len(data)
      if (
          self.size_read == self.chunksize
          and self.align
          and (self.chunksize & 1)
      ):
          dummy = self.file.read(1)
          self.size_read = self.size_read + len(dummy)
      return data
  
imports: from collections import namedtuple
  import builtins
  import struct
  import sys
label_desc: Use image node_id 6 for calling the _Chunk obj's underlying member method code with example usage: obj.read(size) and returns: data, bytes