Updates the #rules_map dictionary and #skippable_rules list based on the
    #rules list. Must be called after #rules or any of its items have been
    modified. The same rule name may appear multiple times.

    # Raises
    TypeError: if an item in the `rules` list is not a rule.

def update(self):
    """
    Updates the #rules_map dictionary and #skippable_rules list based on the
    #rules list. Must be called after #rules or any of its items have been
    modified. The same rule name may appear multiple times.

    # Raises
    TypeError: if an item in the `rules` list is not a rule.
    """

    self.rules_map = {}
    self.skippable_rules = []
    for rule in self.rules:
      if not isinstance(rule, Rule):
        raise TypeError('item must be Rule instance', type(rule))
      self.rules_map.setdefault(rule.name, []).append(rule)
      if rule.skip:
        self.skippable_rules.append(rule)