code: def step1ab(self):
          
          if self.b[self.k] == "s":
              if self.ends("sses"):
                  self.k = self.k - 2
              elif self.ends("ies"):
                  self.setto("i")
              elif self.b[self.k - 1] != "s":
                  self.k = self.k - 1
          if self.ends("eed"):
              if self.m() > 0:
                  self.k = self.k - 1
          elif (self.ends("ed") or self.ends("ing")) and self.vowelinstem():
              self.k = self.j
              if self.ends("at"):
                  self.setto("ate")
              elif self.ends("bl"):
                  self.setto("ble")
              elif self.ends("iz"):
                  self.setto("ize")
              elif self.doublec(self.k):
                  self.k = self.k - 1
                  ch = self.b[self.k]
                  if ch == "l" or ch == "s" or ch == "z":
                      self.k = self.k + 1
              elif self.m() == 1 and self.cvc(self.k):
                  self.setto("e")
docs: step1ab() gets rid of plurals and -ed or -ing. e.g.
  
             caresses  ->  caress
             ponies    ->  poni
             ties      ->  ti
             caress    ->  caress
             cats      ->  cat
  
             feed      ->  feed
             agreed    ->  agree
             disabled  ->  disable
  
             matting   ->  mat
             mating    ->  mate
             meeting   ->  meet
             milling   ->  mill
             messing   ->  mess
  
             meetings  ->  meet