$ifThenI.init %1==init $setGlobal SCENSET %2 $setGlobal HANDLEPAR %3 Set mattrib / system.GUSSModelAttributes /; Parameter solveRep(mattrib); put_utility 'ECArguments' / gams.workdir '/'; file fgms / solve_engine.gms /; embeddedCode Python: from gams.engine import Configuration, ApiClient from gams.engine.api import jobs_api import zipfile import os working_directory=gams.arguments model_data_path = os.path.join(working_directory, "solve_engine.zip") configuration = Configuration( host=os.environ["ENGINE_URL"], username=os.environ["ENGINE_USER"], password=os.environ["ENGINE_PASSWORD"], discard_unknown_keys=True, ) configuration.temp_folder_path = working_directory pauseEmbeddedCode $endIf.init $ifThenI.solve %1==solve $shift $setGlobal MODELNAME %1 $set SOLVEX $label concat $ set SOLVEX %SOLVEX% %1 $ shift $if not x%1==x $goTo concat put_utility 'Save' / 'solve_engine.g00'; put fgms 'solve %SOLVEX%;' loop(mattrib, put / 'solveRep("' mattrib.tl:0 '") = %MODELNAME%.' mattrib.tl:0 ';'); putClose / 'execute_unload "solverep.gdx", solveRep;' put_utility 'ECArguments' / %SCENSET%.tl:0; continueEmbeddedCode: with zipfile.ZipFile(model_data_path, "w", zipfile.ZIP_DEFLATED) as model_data: for f in [ 'solve_engine.gms', 'solve_engine.g00' ]: model_data.write( os.path.join(working_directory, f), arcname=f ) with ApiClient(configuration) as api_client: job_api_instance = jobs_api.JobsApi(api_client) with open(model_data_path, "rb") as model_data: create_job_response = job_api_instance.create_job( "solve_engine", os.environ["ENGINE_NAMESPACE"], stdout_filename="log_stdout.txt", model_data=model_data, arguments=["savePoint=1", 'restart=solve_engine'], ) token = create_job_response.token job = gams.arguments gams.set('%HANDLEPAR%', [(job, token)] ) pauseEmbeddedCode %HANDLEPAR% $endIf.solve $ifThenI.collect %1==collect $set ISCOLLECTED %2 put_utility 'ECArguments' / %HANDLEPAR%.te(%SCENSET%); continueEmbeddedCode: with ApiClient(configuration) as api_client: job_api_instance = jobs_api.JobsApi(api_client) token = gams.arguments status = job_api_instance.get_job(token).process_status if not status == None: if status == 0: # fetch results with zipfile.ZipFile(job_api_instance.get_job_zip(token)) as zf: sp_file = zf.extract("%MODELNAME%_p.gdx", path=working_directory) solverep_file = zf.extract("solverep.gdx", path=working_directory) job_api_instance.delete_job_zip(token) gams.set('%ISCOLLECTED%', [status+1]) else: gams.set('%ISCOLLECTED%', [0]) pauseEmbeddedCode %ISCOLLECTED% if (%ISCOLLECTED%, if (%ISCOLLECTED% = 1, execute_loadpoint '%MODELNAME%_p.gdx'; execute_load 'solverep.gdx', solveRep; %MODELNAME%.ModelStat = solveRep('ModelStat'); %MODELNAME%.SolveStat = solveRep('SolveStat'); %MODELNAME%.NumInfes = solveRep('NumInfes '); %MODELNAME%.SumInfes = solveRep('SumInfes '); %MODELNAME%.IterUsd = solveRep('IterUsd '); %MODELNAME%.ResUsd = solveRep('ResUsd '); %MODELNAME%.ObjVal = solveRep('ObjVal '); %MODELNAME%.NodUsd = solveRep('NodUsd '); %MODELNAME%.ObjEst = solveRep('ObjEst '); %MODELNAME%.DomUsd = solveRep('DomUsd '); %MODELNAME%.RObj = solveRep('RObj '); %MODELNAME%.MaxInfes = solveRep('MaxInfes '); %MODELNAME%.MeanInfes = solveRep('MeanInfes'); ); %HANDLEPAR%(%SCENSET%) = no; ); $endIf.collect