s + 1 / (2 * len(self.D))))

    def _grow_rule(self, X, y):
        &#34;&#34;&#34; Starts with empty conjunction of conditions and
        greedily adds rules to maximize Z_tilde
        &#34;&#34;&#34;

        stop_condition = False
        features = list(range(X.shape[1]))

        # rule is stored as a list of dictionaries, each dictionary is a condition
        curr_rule = []

        while not stop_condition:
            candidate_rule = curr_rule.copy()
            for feat in features:
          