-
Notifications
You must be signed in to change notification settings - Fork 29
Open
Labels
bugSomething isn't workingSomething isn't working
Description
currently in utils.py, there is this function
def _get_entity_combinations(
entities: Collection[ObjectOrVariable],
types: Sequence[Type]) -> Iterator[List[ObjectOrVariable]]:
"""Get all combinations of entities satisfying the given types sequence."""
sorted_entities = sorted(entities)
choices = []
for vt in types:
this_choices = []
for ent in sorted_entities:
if ent.is_instance(vt):
this_choices.append(ent)
choices.append(this_choices)
for choice in itertools.product(*choices):
yield list(choice)
For my application, when there are two objects of the same types in the parameters, it should not try to ground the one object to two parameters. The following edit seems to work:
def _get_entity_combinations(
entities: Collection[ObjectOrVariable],
types: Sequence[Type]) -> Iterator[List[ObjectOrVariable]]:
"""Get all combinations of entities satisfying the given types sequence.
Note: Each entity will appear at most once in each combination.
"""
sorted_entities = sorted(entities)
choices = []
for vt in types:
this_choices = []
for ent in sorted_entities:
if ent.is_instance(vt):
this_choices.append(ent)
choices.append(this_choices)
for choice in itertools.product(*choices):
# Filter out combinations with duplicate entities
if len(set(choice)) == len(choice):
yield list(choice)
else:
logging.warning(f"Duplicate entities in combination: {choice}")
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working