1515from rpy2 .robjects .vectors import DataFrame , BoolVector , FloatVector , IntVector , StrVector , ListVector , IntArray , Matrix , ListSexpVector ,FloatSexpVector ,IntSexpVector ,StrSexpVector ,BoolSexpVector
1616from rpy2 .robjects .functions import SignatureTranslatedFunction
1717from rpy2 .rinterface import RRuntimeWarning
18+ import json
19+
1820
1921rpy2conversion = ro .conversion .get_conversion ()
2022irace_converter = ro .default_converter + numpy2ri .converter + pandas2ri .converter
@@ -83,6 +85,7 @@ def tmp_r_target_runner(experiment, scenario):
8385 py_experiment ['configuration' ] = OrderedDict (
8486 (k ,v ) for k ,v in py_experiment ['configuration' ].items () if not pd .isna (v )
8587 )
88+ py_experiment ['instance' ] = context ['py_instances' ][int (py_experiment ['id.instance' ]) - 1 ]
8689 try :
8790 ret = context ['py_target_runner' ](py_experiment , py_scenario )
8891 except :
@@ -94,7 +97,6 @@ def tmp_r_target_runner(experiment, scenario):
9497def check_windows (scenario ):
9598 if scenario .get ('parallel' , 1 ) != 1 and os .name == 'nt' :
9699 raise NotImplementedError ('Parallel running on windows is not supported yet. Follow https://github.com/auto-optimization/iracepy/issues/16 for updates. Alternatively, use Linux or MacOS or the irace R package directly.' )
97-
98100class irace :
99101 # Import irace R package
100102 try :
@@ -107,12 +109,20 @@ class irace:
107109
108110 def __init__ (self , scenario , parameters_table , target_runner ):
109111 self .scenario = scenario
112+ self .instances = scenario .get ('instances' , None )
113+ self .context = {}
110114 if 'instances' in scenario :
111- self .scenario ['instances' ] = np .asarray (scenario ['instances' ])
115+ self .context .update ({
116+ 'py_instances' : self .scenario ['instances' ],
117+ })
118+ self .scenario ['instances' ] = StrVector (list (map (lambda x : json .dumps (x , skipkeys = True , default = self .scenario .get ('instanceObjectSerializer' , lambda x : '<not serializable>' )), self .scenario ['instances' ])))
119+ self .scenario .pop ('instanceObjectSerializer' , None )
112120 with localconverter (irace_converter_hack ):
113121 self .parameters = self ._pkg .readParameters (text = parameters_table , digits = self .scenario .get ('digits' , 4 ))
114- self .context = {'py_target_runner' : target_runner ,
115- 'py_scenario' : self .scenario }
122+ self .context .update ({
123+ 'py_target_runner' : target_runner ,
124+ 'py_scenario' : self .scenario ,
125+ })
116126 check_windows (scenario )
117127
118128 def read_configurations (self , filename = None , text = None ):
0 commit comments