예제 #1
0
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")
예제 #2
0
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}")
예제 #3
0
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)
예제 #4
0
def _generate_string():
    text = " ".join(choice(names, choice([1, 2, 3])))
    quote = choice(["'", '"'])
    return quote + text + quote
예제 #5
0
def _generate_name():
    return "_".join(choice(names, choice([1, 2, 3])))
예제 #6
0
def generate_samples(generators: Generators, n: int) -> List[InputOutput]:
    return [
        _generate_sample(generators, choice(list(generators.keys())))
        for _ in range(n)
    ]