code: def iterstraight(self, raw):
          
  
          # length of row, in bytes
          rb = self.row_bytes
          a = array('B')
          # The previous (reconstructed) scanline.  None indicates first
          # line of image.
          recon = None
          for some in raw:
              a.extend(some)
              while len(a) >= rb + 1:
                  filter_type = a[0]
                  scanline = a[1:rb+1]
                  del a[:rb+1]
                  recon = self.undo_filter(filter_type, scanline, recon)
                  yield recon
          if len(a) != 0:
              # :file:format We get here with a file format error:
              # when the available bytes (after decompressing) do not
              # pack into exact rows.
              raise FormatError(
                'Wrong size for decompressed IDAT chunk.')
          assert len(a) == 0
docs: Iterator that undoes the effect of filtering, and yields
          each row in serialised format (as a sequence of bytes).
          Assumes input is straightlaced.  `raw` should be an iterable
          that yields the raw bytes in chunks of arbitrary size.