def _create_class(rule, index):
        # type: (Type[Rule], int) -> Type[SplitRule]
        """
        Create subtype of SplitRule based on rule.
        :param rule: Rule from which the SplitRule derive.
        :param index: Index of the rule (in original Rule class) to use for SplitRule.
        :return: Class inherited from SplitRule representing rule at index.
        """
        name = 'SplitRule[' + rule.__name__ + ';' + str(index) + ']'
        created = type(name, (SplitRule,), SplitRule.__dict__.copy())  # type: Type[SplitRule]
        created.rule = rule.rules[index]
        created.rule_index = index
        created.from_rule = rule
        return created
Create subtype of SplitRule based on rule.
        :param rule: Rule from which the SplitRule derive.
        :param index: Index of the rule (in original Rule class) to use for SplitRule.
        :return: Class inherited from SplitRule representing rule at index.