docs: def remove_data(self, minimum_address, maximum_address):
          """Remove given data range from this segment. Returns the second
          segment if the removed data splits this segment in two.
  
          """
  
          if ((minimum_address >= self.maximum_address)
              and (maximum_address <= self.minimum_address)):
              raise Error('cannot remove data that is not part of the segment')
  
          if minimum_address < self.minimum_address:
              minimum_address = self.minimum_address
  
          if maximum_address > self.maximum_address:
              maximum_address = self.maximum_address
  
          remove_size = maximum_address - minimum_address
          part1_size = minimum_address - self.minimum_address
          part1_data = self.data[0:part1_size]
          part2_data = self.data[part1_size + remove_size:]
  
          if len(part1_data) and len(part2_data):
              # Update this segment and return the second segment.
              self.maximum_address = self.minimum_address + part1_size
              self.data = part1_data
  
              return _Segment(maximum_address,
                              maximum_address + len(part2_data),
                              part2_data,
                              self._word_size_bytes)
          else:
              # Update this segment.
              if len(part1_data) > 0:
                  self.maximum_address = minimum_address
                  self.data = part1_data
              elif len(part2_data) > 0:
                  self.minimum_address = maximum_address
                  self.data = part2_data
              else:
                  self.maximum_address = self.minimum_address
                  self.data = bytearray()