code: def erase(self, addresses=None):
          
          if self._mode == self.Mode.MASS:
              self._mass_erase()
          elif self._mode == self.Mode.CHIP:
              self._chip_erase()
          elif self._mode == self.Mode.SECTOR and addresses:
              self._sector_erase(addresses)
          else:
              LOG.warning("No operation performed")
docs: ! @brief Perform the type of erase operation selected when the object was created.
          
          For sector erase mode, an iterable of sector addresses specifications must be provided via
          the _addresses_ parameter. The address iterable elements can be either strings, tuples,
          or integers. Tuples must have two elements, the start and end addresses of a range to erase.
          Integers are simply an address within the single page to erase.
          
          String address specifications may be in one of three formats: "<address>", "<start>-<end>",
          or "<start>+<length>". Each field denoted by angled brackets is an integer literal in
          either decimal or hex notation.
          
          Examples:
          - "0x1000" - erase the one sector at 0x1000
          - "0x1000-0x4fff" - erase sectors from 0x1000 up to but not including 0x5000
          - "0x8000+0x800" - erase sectors starting at 0x8000 through 0x87ff
          
          @param self
          @param addresses List of addresses or address ranges of the sectors to erase.