Ejemplo n.º 1
0
def batch_distribute_helper(
    base_permalink: Permalink,
    seed_number: int,
    timeout: int,
    validate: bool,
    output_dir: Path,
) -> float:
    permalink = Permalink(
        seed_number=seed_number,
        spoiler=True,
        patcher_configuration=base_permalink.patcher_configuration,
        layout_configuration=base_permalink.layout_configuration,
    )

    start_time = time.perf_counter()
    description = generator.generate_description(
        permalink=permalink,
        status_update=None,
        validate_after_generation=validate,
        timeout=timeout)
    delta_time = time.perf_counter() - start_time

    description.save_to_file(output_dir.joinpath(
        "{}.json".format(seed_number)))
    return delta_time
Ejemplo n.º 2
0
def distribute_command_logic(args):
    def status_update(s):
        if args.status_update:
            print(s)

    if args.permalink is not None:
        permalink = Permalink.from_str(args.permalink)
    else:
        permalink = asyncio.run(_create_permalink(args))
        print(f"Permalink: {permalink.as_base64_str}")

    if permalink.spoiler:
        debug.set_level(args.debug)

    extra_args = {}
    if args.no_retry:
        extra_args["attempts"] = 0

    before = time.perf_counter()
    layout_description = generator.generate_description(
        permalink=permalink,
        status_update=status_update,
        validate_after_generation=args.validate,
        timeout=None,
        **extra_args)
    after = time.perf_counter()
    print("Took {} seconds. Hash: {}".format(
        after - before, layout_description.shareable_hash))

    layout_description.save_to_file(args.output_file)
Ejemplo n.º 3
0
def distribute_command_logic(args):
    from randovania.layout.permalink import Permalink
    from randovania.generator import generator

    async def _create_permalink(args_) -> Permalink:
        from randovania.interface_common import persistence
        from randovania.interface_common.preset_manager import PresetManager

        preset_manager = PresetManager(persistence.user_data_dir())
        await preset_manager.load_user_presets()
        preset = preset_manager.preset_for_name(args_.preset_name).get_preset()

        return Permalink(
            args_.seed_number,
            spoiler=True,
            presets={i: preset
                     for i in range(args_.player_count)},
        )

    def status_update(s):
        if args.status_update:
            print(s)

    if args.permalink is not None:
        permalink = Permalink.from_str(args.permalink)
    else:
        permalink = asyncio.run(_create_permalink(args))
        print(f"Permalink: {permalink.as_base64_str}")

    if permalink.spoiler:
        debug.set_level(args.debug)

    extra_args = {}
    if args.no_retry:
        extra_args["attempts"] = 0

    before = time.perf_counter()
    layout_description = generator.generate_description(
        permalink=permalink,
        status_update=status_update,
        validate_after_generation=args.validate,
        timeout=None,
        **extra_args)
    after = time.perf_counter()
    print("Took {} seconds. Hash: {}".format(
        after - before, layout_description.shareable_hash))

    layout_description.save_to_file(args.output_file)
Ejemplo n.º 4
0
def test_compare_generated_with_data(mock_permalink_as_str: PropertyMock,
                                     layout_description: LayoutDescription):
    debug.set_level(0)
    status_update = MagicMock()
    mock_permalink_as_str.return_value = "fixed-seed!"

    generated_description = generator.generate_description(
        layout_description.permalink,
        status_update=status_update,
        validate_after_generation=True,
        timeout=None)

    # indices: List[int] = [None] * echoes_pickup_database.total_pickup_count
    # for index, pickup in generated_description.patches.pickup_assignment.items():
    #     indices[index.index] = echoes_pickup_database.original_index(pickup).index
    # print(indices)

    assert generated_description.without_solver_path == layout_description
Ejemplo n.º 5
0
def distribute_command_logic(args):
    def status_update(s):
        pass

    permalink = Permalink.from_str(args.permalink)
    if permalink.spoiler:
        debug.set_level(args.debug)

    before = time.perf_counter()
    layout_description = generator.generate_description(
        permalink=permalink,
        status_update=status_update,
        validate_after_generation=args.validate,
        timeout=None)
    after = time.perf_counter()
    print("Took {} seconds. Hash: {}".format(
        after - before, layout_description.shareable_hash))

    layout_description.save_to_file(args.output_file)
Ejemplo n.º 6
0
def _generate_layout_worker(output_pipe: Connection,
                            permalink: Permalink,
                            validate_after_generation: bool,
                            timeout_during_generation: bool,
                            debug_level: int):
    def status_update(message: str):
        output_pipe.send(message)
        if output_pipe.poll():
            raise RuntimeError(output_pipe.recv())

    debug.set_level(debug_level)
    extra_args = {}
    if not timeout_during_generation:
        extra_args["timeout"] = None

    return generator.generate_description(permalink,
                                          status_update=status_update,
                                          validate_after_generation=validate_after_generation,
                                          **extra_args)
Ejemplo n.º 7
0
def distribute_command_logic(args):
    debug._DEBUG_LEVEL = args.debug

    def status_update(s):
        pass

    permalink = Permalink.from_str(args.permalink)

    before = time.perf_counter()
    layout_description = generator.generate_description(permalink=permalink, status_update=status_update,
                                                        validate_after_generation=args.validate, timeout=None)
    after = time.perf_counter()
    print("Took {} seconds. Hash: {}".format(after - before, layout_description.shareable_hash))

    layout_description.save_to_file(args.output_file)
    simplified_patcher.write_patcher_file_to_disk(
        args.output_file.with_suffix(".patcher-json"),
        layout_description,
        CosmeticPatches.default(),
    )
Ejemplo n.º 8
0
def _generate_layout_worker(output_pipe,
                            permalink: Permalink,
                            validate_after_generation: bool,
                            timeout_during_generation: bool,
                            debug_level: int):
    try:
        def status_update(message: str):
            output_pipe.send(message)

        debug._DEBUG_LEVEL = debug_level
        extra_args = {}
        if not timeout_during_generation:
            extra_args["timeout"] = None

        layout_description = generator.generate_description(permalink,
                                                            status_update=status_update,
                                                            validate_after_generation=validate_after_generation,
                                                            **extra_args)
        output_pipe.send(layout_description)
    except Exception as e:
        traceback.print_exc()
        output_pipe.send(e)
Ejemplo n.º 9
0
def randomize_command_logic(args):
    def status_update(s):
        if args.verbose:
            print(s)

    if args.permalink is not None:
        layout_description = generator.generate_description(permalink=Permalink.from_str(args.permalink),
                                                            status_update=status_update,
                                                            validate_after_generation=True)
    else:
        layout_description = LayoutDescription.from_file(args.log_file)

    cosmetic_patches = CosmeticPatches(
        disable_hud_popup=args.disable_hud_popup,
        speed_up_credits=args.speed_up_credits)

    claris_randomizer.apply_layout(description=layout_description,
                                   cosmetic_patches=cosmetic_patches,
                                   backup_files_path=args.backup_files,
                                   progress_update=lambda x, _: status_update(x),
                                   game_root=args.game_files,
                                   )