message_ix
message_ix copied to clipboard
Filter observes a string rather then list when running with 'cache=True'
When running a scenario with 'cache=True', the Filter function sees a string rather than a list. See traceback below from the Gidden/explore_macro branch. Either needs some safety checks or remove the cache option.
TypeError Traceback (most recent call last)
~\Anaconda3\envs\message\lib\site-packages\message_ix-1.2.0-py3.7.egg\message_ix\core.py in add_macro(self, data, scenario, check_convergence) 372 clone.check_out() 373 macro.init(clone) --> 374 macro.add_model_data(self, clone, data) 375 clone.commit('finished adding macro') 376 macro.calibrate(clone, check_convergence=check_convergence)
~\Anaconda3\envs\message\lib\site-packages\message_ix-1.2.0-py3.7.egg\message_ix\macro.py in add_model_data(base, clone, data) 413 414 def add_model_data(base, clone, data): --> 415 c = Calculate(base, data) 416 c.read_data() 417 c.derive_data()
~\Anaconda3\envs\message\lib\site-packages\message_ix-1.2.0-py3.7.egg\message_ix\macro.py in init(self, s, data) 188 raise RuntimeError('Scenario must have a solution to add MACRO') 189 --> 190 demand = s.var('DEMAND', filters={'level': 'useful'}) 191 self.nodes = set(demand['node'].unique()) 192 self.sectors = set(demand['commodity'].unique())
~\Anaconda3\envs\message\lib\site-packages\ixmp-0.2.0.post0.dev9-py3.7.egg\ixmp\core.py in var(self, name, filters, **kwargs) 1181 index names mapped list of index set elements 1182 """ -> 1183 return self._element('var', name, filters, **kwargs) 1184 1185 def equ_list(self):
~\Anaconda3\envs\message\lib\site-packages\ixmp-0.2.0.post0.dev9-py3.7.egg\ixmp\core.py in _element(self, ix_type, name, filters, cache) 807 # if dataframe in python cache, retrieve from there 808 if cache_key in self._pycache: --> 809 return filtered(self._pycache[cache_key], filters) 810 811 # if no cache, retrieve from Java with filters
~\Anaconda3\envs\message\lib\site-packages\ixmp-0.2.0.post0.dev9-py3.7.egg\ixmp\core.py in filtered(df, filters) 1579 mask = pd.Series(True, index=df.index) 1580 for k, v in filters.items(): -> 1581 isin = df[k].isin(v) 1582 mask = mask & isin 1583 return df[mask]
~\Anaconda3\envs\message\lib\site-packages\pandas\core\series.py in isin(self, values) 4507 Name: animal, dtype: bool 4508 """ -> 4509 result = algorithms.isin(self, values) 4510 return self._constructor(result, index=self.index).finalize(self) 4511
~\Anaconda3\envs\message\lib\site-packages\pandas\core\algorithms.py in isin(comps, values) 436 "only list-like objects are allowed to be passed" 437 " to isin(), you passed a [{values_type}]".format( --> 438 values_type=type(values).name 439 ) 440 )
TypeError: only list-like objects are allowed to be passed to isin(), you passed a [str]