Mercurial > repos > siwaa > gama
view src/MY_sequential_example.py @ 1:168edc2db729 draft
planemo upload for repository https://forgemia.inra.fr/nathalie.rousse/use/-/tree/gama/GAMA/galaxy-tools commit 67d85c013c62c16392b4796af86836b1334f2eef-dirty
author | siwaa |
---|---|
date | Fri, 07 Jun 2024 10:48:35 +0000 |
parents | f895e266b37a |
children | 1437cd0df25b |
line wrap: on
line source
import asyncio from asyncio import Future from typing import Dict from gama_client.base_client import GamaBaseClient from gama_client.command_types import CommandTypes from gama_client.message_types import MessageTypes import pprint # _PRINT_ import argparse nb_preys_init = 100 # default nb_predators_init = 10 # default nb_more_steps = 5 # default experiment_future: Future play_future: Future pause_future: Future expression_future: Future step_future: Future stop_future: Future async def message_handler(message: Dict): print("received", message) if "command" in message: if message["command"]["type"] == CommandTypes.Load.value: experiment_future.set_result(message) elif message["command"]["type"] == CommandTypes.Play.value: play_future.set_result(message) elif message["command"]["type"] == CommandTypes.Pause.value: pause_future.set_result(message) elif message["command"]["type"] == CommandTypes.Expression.value: expression_future.set_result(message) elif message["command"]["type"] == CommandTypes.Step.value: step_future.set_result(message) elif message["command"]["type"] == CommandTypes.Stop.value: stop_future.set_result(message) async def main(): global experiment_future global play_future global pause_future global expression_future global step_future global stop_future # Experiment and Gama-server constants MY_SERVER_URL = "localhost" MY_SERVER_PORT = 6868 GAML_FILE_PATH_ON_SERVER = "gama-platform/headless/samples/predatorPrey/MY_predatorPrey.gaml" EXPERIMENT_NAME = "prey_predator" MY_EXP_INIT_PARAMETERS = [{"type": "int", "name": "nb_preys_init", "value": nb_preys_init}, {"type": "int", "name": "nb_predators_init", "value": nb_predators_init}] print("[MY_sequential_example.py Setting]", " MY_SERVER_URL:", MY_SERVER_URL, ", MY_SERVER_PORT:", MY_SERVER_PORT, ", GAML_FILE_PATH_ON_SERVER: ", GAML_FILE_PATH_ON_SERVER, ", EXPERIMENT_NAME: ", EXPERIMENT_NAME, ", MY_EXP_INIT_PARAMETERS: ", MY_EXP_INIT_PARAMETERS) client = GamaBaseClient(MY_SERVER_URL, MY_SERVER_PORT, message_handler) print("connecting to Gama server") await client.connect() print("initialize a gaml model") experiment_future = asyncio.get_running_loop().create_future() #await client.load(GAML_FILE_PATH_ON_SERVER, EXPERIMENT_NAME, True, True, True, MY_EXP_INIT_PARAMETERS) # error await client.load(file_path=GAML_FILE_PATH_ON_SERVER, experiment_name=EXPERIMENT_NAME, console=True, status=True, dialog=True, runtime=True, parameters=MY_EXP_INIT_PARAMETERS) gama_response = await experiment_future print("*********************") # _PRINT_ print("gama_response.keys():", gama_response.keys()) print("gama_response:") pprint.pprint(gama_response) print("*********************") try: experiment_id = gama_response["content"] except Exception as e: print("error while initializing", gama_response, e) return print("initialization successful, running the model") play_future = asyncio.get_running_loop().create_future() await client.play(experiment_id) gama_response = await play_future if gama_response["type"] != MessageTypes.CommandExecutedSuccessfully.value: print("error while trying to run the experiment", gama_response) return print("*********************") # _PRINT_ print("gama_response.keys():", gama_response.keys()) print("gama_response:") pprint.pprint(gama_response) print("*********************") print("model running, waiting a bit") await asyncio.sleep(2) print("pausing the model") pause_future = asyncio.get_running_loop().create_future() await client.pause(experiment_id) gama_response = await pause_future if gama_response["type"] != MessageTypes.CommandExecutedSuccessfully.value: print("Unable to pause the experiment", gama_response) return print("*********************") # _PRINT_ print("gama_response.keys():", gama_response.keys()) print("gama_response:") pprint.pprint(gama_response) print("*********************") expression_future = asyncio.get_running_loop().create_future() await client.expression(experiment_id, r"cycle") gama_response = await expression_future print("asking simulation the value of: cycle=", gama_response["content"]) print("*********************") # _PRINT_ print("gama_response.keys():", gama_response.keys()) print("gama_response:") pprint.pprint(gama_response) print("*********************") expression_future = asyncio.get_running_loop().create_future() await client.expression(experiment_id, r"nb_preys/nb_preys_init") gama_response = await expression_future print("asking simulation the value of: nb_preys/nb_preys_init=", gama_response["content"]) print("*********************") # _PRINT_ print("gama_response.keys():", gama_response.keys()) print("gama_response:") pprint.pprint(gama_response) print("*********************") print("asking gama to run ",nb_more_steps," more steps of the experiment") step_future = asyncio.get_running_loop().create_future() await client.step(experiment_id, nb_more_steps, True) #await client.step(experiment_id, 10, True) gama_response = await step_future if gama_response["type"] != MessageTypes.CommandExecutedSuccessfully.value: print("Unable to execute 10 new steps in the experiment", gama_response) return print("*********************") # _PRINT_ print("gama_response.keys():", gama_response.keys()) print("gama_response:") pprint.pprint(gama_response) print("*********************") expression_future = asyncio.get_running_loop().create_future() await client.expression(experiment_id, r"cycle") gama_response = await expression_future print("asking simulation the value of: cycle=", gama_response["content"]) print("*********************") # _PRINT_ print("gama_response.keys():", gama_response.keys()) print("gama_response:") pprint.pprint(gama_response) print("*********************") print("killing the simulation") stop_future = asyncio.get_running_loop().create_future() await client.stop(experiment_id) gama_response = await stop_future if gama_response["type"] != MessageTypes.CommandExecutedSuccessfully.value: print("Unable to stop the experiment", gama_response) return print("*********************") # _PRINT_ print("gama_response.keys():", gama_response.keys()) print("gama_response:") pprint.pprint(gama_response) print("*********************") # Added print("killing gama-server") exit_future = asyncio.get_running_loop().create_future() await client.exit() # no response print("*********************") # _PRINT_ print("Command exit() done") print("*********************") if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("-nb_preys_init", type=int, help="nb_preys_init") parser.add_argument("-nb_predators_init", type=int, help="nb_predators_init") parser.add_argument("-nb_more_steps", type=int, help="nb_more_steps") args = parser.parse_args() if (args.nb_preys_init is not None) and (args.nb_preys_init != 'None') : nb_preys_init = args.nb_preys_init if (args.nb_predators_init is not None) and (args.nb_predators_init != 'None') : nb_predators_init = args.nb_predators_init if (args.nb_more_steps is not None) and (args.nb_more_steps != 'None') : nb_more_steps = args.nb_more_steps print("[MY_sequential_example.py Parameters]", " nb_preys_init (for MY_predatorPrey.gaml) :", nb_preys_init, " nb_predators_init (for MY_predatorPrey.gaml) :", nb_predators_init, ", nb_more_steps (for MY_sequential_example.py) :", nb_more_steps) asyncio.run(main())