def sub_fn()

in src/substitution_fns.py [0:0]


    def sub_fn(ex: QAExample):
        """Derive all modified examples from one original example."""
        # Determine which aliases are valid substitutions
        # Store these as Dict[alias_text --> GoldAnswer] so we can retrieve the info for each alias
        gold_answer_texts = [ga.text for ga in ex.gold_answers]
        alias_to_info = {
            alias: ga for ga in ex.gold_answers if ga.aliases for alias in ga.aliases
        }
        valid_aliases = list(set(alias_to_info.keys()) - set(gold_answer_texts))
        sub_exs = [
            # As the sub_answer is an alias we expect the metadata to be mostly the same as the original answer
            create_new_example(
                ex=ex,
                new_id=f"alias-sub-{idx}",
                answer_text=alias,
                ner_label=alias_to_info[alias].ner_label,
                kb_id=alias_to_info[alias].kb_id,
                wikidata_label=alias_to_info[alias].wikidata_label,
                aliases=[alias_to_info[alias].text],
                wikidata_types=alias_to_info[alias].wikidata_types,
                wikipedia_page=alias_to_info[alias].wikipedia_page,
                popularity=alias_to_info[alias].popularity,
                answer_type=alias_to_info[alias].answer_type,
                replace_every_original_answer=replace_every,
            )
            for idx, alias in enumerate(valid_aliases)
        ]
        return sub_exs