docs: def decision_path(self, x):
          # type: (np.ndarray) -> np.ndarray
          """
          compute the decision path of the rule list on x
          :param x: x should be already transformed
          :return:
              return a np.ndarray of shape [n_rules, n_instances] of type bool,
              representing whether an instance has consulted a rule or not
          """
          un_satisfied = np.ones([x.shape[0]], dtype=np.bool)
          paths = np.zeros((self.n_rules, x.shape[0]), dtype=np.bool)
          for i, rule in enumerate(self._rule_list):
              paths[i, :] = un_satisfied
              satisfied = rule.is_satisfied(x)
              # marking new satisfied instances as satisfied
              un_satisfied = np.logical_and(np.logical_not(satisfied), un_satisfied)
          return paths