docs: def run(self, data):
          """
          Returns:
              list of W, M*W
              ll
          """
          if self.normalize_data:
              data = cell_normalize(data)
          M, W, ll = poisson_estimate_state(data, **self.params)
          outputs = []
          if self.return_w:
              outputs.append(W)
          if self.return_m:
              outputs.append(M)
          if self.return_mw:
              outputs.append(M.dot(W))
          if self.return_mds:
              X = dim_reduce(M, W, 2)
              outputs.append(X.T.dot(W))
          return outputs, ll