def _generate_builtin(key: str): if key == "int": input = output = str(choice(numbers)) return (input, output) elif key == "name": input = output = _generate_name() return (input, output) elif key == "float": input = output = str(choice(numbers) / choice([10, 100])) return (input, output) elif key == "string": input = output = _generate_string() return (input, output) else: raise Exception(f"Builtin generator for {key} not implemented yet")
def _generate_sample(generators: Generators, key: str) -> InputOutput: key = key.replace("'", "") if key in builtin_generators: return _generate_builtin(key) generator = generators[key] if type(generator) == dict: return _generate_input_output_sample(generators, generator) elif type(generator) == list: return _generate_sample(generators, choice(generator)) else: raise Exception(f"Invalid generator {key}")
def _generate_input_output_sample( generators: Generators, generator: InputOutputGenerator) -> InputOutput: input_template = choice(generator["inputs"]) output_template = generator["output"] tags = get_tags(input_template) for tag in tags: key_ = tag.replace("#", "") (input, output) = _generate_sample(generators, key_) input_template = input_template.replace(tag, input, 1) output_template = output_template.replace(tag, output, 1) return (input_template, output_template)
def _generate_string(): text = " ".join(choice(names, choice([1, 2, 3]))) quote = choice(["'", '"']) return quote + text + quote
def _generate_name(): return "_".join(choice(names, choice([1, 2, 3])))
def generate_samples(generators: Generators, n: int) -> List[InputOutput]: return [ _generate_sample(generators, choice(list(generators.keys()))) for _ in range(n) ]