def test_main(agent, env):
    env, _, out_params = env
    runner = Runner(agent[1], env)
    runner.run(1)
    # env.history.df.to_hdf('tests/test_main.hd5', 'hist')
    df = env.history.df.head(100)
    df = df.reindex(sorted(df.columns), axis=1)
    df2 = pd.read_hdf('tests/test_main.hd5', 'hist').head(100)  # noqa
    df2 = df2.reindex(sorted(df2.columns), axis=1)
    assert df[out_params].to_numpy() == approx(df2[out_params].to_numpy(), 5e-2)
def test_main_paramchange(agent, env):
    params, agent = agent
    env, _, out_params = env
    runner = Runner(agent, env)
    params['voltP'].val = 4
    runner.run(1)
    # env.history.df.to_hdf('tests/test_main2.hd5', 'hist')
    df = env.history.df.head(50)
    df = df.reindex(sorted(df.columns), axis=1)
    df2 = pd.read_hdf('tests/test_main.hd5', 'hist').head(50)  # noqa
    df2 = df2.reindex(sorted(df2.columns), axis=1)
    assert df[out_params].to_numpy() != approx(df2[out_params].to_numpy(), 5e-3)

    df2 = pd.read_hdf('tests/test_main2.hd5', 'hist').head(50)  # noqa
    df2 = df2.reindex(sorted(df2.columns), axis=1)
    assert df[out_params].to_numpy() == approx(df2[out_params].to_numpy(), 5e-2)
def test_simpleagent(env):
    np.random.seed(1)
    env, inputs, out_params = env

    class RndAgent(Agent):
        def act(self, obs: pd.Series) -> np.ndarray:
            return np.random.random(len(inputs))

    agent = RndAgent()
    runner = Runner(agent, env)
    runner.run(1)

    # env.history.df.to_hdf('tests/test_main3.hd5', 'hist')
    df = env.history.df.head(50)
    df = df.reindex(sorted(df.columns), axis=1)
    df2 = pd.read_hdf('tests/test_main3.hd5', 'hist').head(50)  # noqa
    df2 = df2.reindex(sorted(df2.columns), axis=1)
    assert df[out_params].to_numpy() == approx(df2[out_params].to_numpy(), 5e-3)
                  for i in '123'], [f'slave.SPI{i}' for i in 'dq0']],
                callback=update_legend,
                color=[['b', 'r', 'g'], ['b', 'r', 'g']],
                style=[[None], ['--']],
                title=
                'Example of using an timevariant external current reference'),
        ],
        log_level=logging.INFO,
        max_episode_steps=max_episode_steps,
        model_params={
            'rl1.resistor1.R': partial(load_step, gain=20),
            'rl1.resistor2.R': partial(load_step, gain=20),
            'rl1.resistor3.R': partial(load_step, gain=20),
            'rl1.inductor1.L': 0.001,
            'rl1.inductor2.L': 0.001,
            'rl1.inductor3.L': 0.001
        },
        model_path='../omg_grid/grid.network.fmu',
        net=net)

    # User runner to execute num_episodes-times episodes of the env controlled by the agent
    runner = Runner(agent, env)

    def timeshift(component, t):
        if t > .1:
            return dict(i_ref=np.array([30, 0, 0]))
        return dict(i_ref=np.array([5, 0, 0]))

    net['inverter2'].post_calculate_hook = timeshift
    runner.run(num_episodes, visualise=True)
                                 'rl1.resistor3.R': callback.load_step_resistance,
                                 'rl1.inductor1.L': callback.load_step_inductance,
                                 'rl1.inductor2.L': callback.load_step_inductance,
                                 'rl1.inductor3.L': callback.load_step_inductance
                                 },

                   max_episode_steps=max_episode_steps,
                   net=net,
                   model_path='../../omg_grid/grid.network_singleInverter.fmu',
                   history=FullHistory()
                   )

    #####################################
    # Execution of the experiment
    # Using a runner to execute 'num_episodes' different episodes (i.e. SafeOpt iterations)
    runner = Runner(agent, env, callback)

    runner.run(num_episodes, visualise=True)

    print('\n Experiment finished with best set: \n\n {}'.format(agent.history.df[:]))

    print('\n Experiment finished with best set: \n')
    print('\n  {} = {}'.format(adjust, agent.history.df.at[np.argmax(agent.history.df['J']), 'Params']))
    print('  Resulting in a performance of J = {}'.format(np.max(agent.history.df['J'])))
    print('\n\nBest experiment results are plotted in the following:')

    # Show best episode measurment (current) plot
    best_env_plt = runner.run_data['best_env_plt']
    if best_env_plt:
        ax = best_env_plt[0].axes[0]
        ax.set_title('Best Episode')