Source code for pysubgroup.refinement_operator
from collections import defaultdict
from itertools import chain
[docs]class RefinementOperator:
pass
[docs]class StaticSpecializationOperator:
def __init__(self, selectors):
search_space_dict = defaultdict(list)
for selector in selectors:
search_space_dict[selector.attribute_name].append(selector)
self.search_space = list(search_space_dict.values())
self.search_space_index = {
key: i for i, key in enumerate(search_space_dict.keys())
}
[docs] def refinements(self, subgroup):
if subgroup.depth > 0:
index_of_last = self.search_space_index[
subgroup._selectors[-1].attribute_name
]
new_selectors = chain.from_iterable(self.search_space[index_of_last + 1 :])
else:
new_selectors = chain.from_iterable(self.search_space)
return (subgroup & sel for sel in new_selectors)
[docs]class StaticGeneralizationOperator:
def __init__(self, selectors):
self.search_space = selectors
[docs] def refinements(self, sG):
index_of_last_selector = min(
self.search_space.index(sG._selectors[-1]), len(self.search_space) - 1
)
new_selectors = self.search_space[index_of_last_selector + 1 :]
return (sG | sel for sel in new_selectors)