def _getElementList(jItem, filters=None, has_value=False, has_level=False): # get list of elements, with filter HashMap if provided if filters is not None: jFilter = java.HashMap() for idx_name in filters.keys(): jFilter.put(idx_name, to_jlist(filters[idx_name])) jList = jItem.getElements(jFilter) else: jList = jItem.getElements() # return a dataframe if this is a mapping or multi-dimensional parameter dim = jItem.getDim() if dim > 0: idx_names = np.array(jItem.getIdxNames().toArray()[:]) idx_sets = np.array(jItem.getIdxSets().toArray()[:]) data = {} for d in range(dim): ary = np.array(jItem.getCol(d, jList)[:]) if idx_sets[d] == "year": # numpy tricks to avoid extra copy # _ary = ary.view('int') # _ary[:] = ary ary = ary.astype('int') data[idx_names[d]] = ary if has_value: data['value'] = np.array(jItem.getValues(jList)[:]) data['unit'] = np.array(jItem.getUnits(jList)[:]) if has_level: data['lvl'] = np.array(jItem.getLevels(jList)[:]) data['mrg'] = np.array(jItem.getMarginals(jList)[:]) df = pd.DataFrame.from_dict(data, orient='columns', dtype=None) return df else: # for index sets if not (has_value or has_level): return pd.Series(jItem.getCol(0, jList)[:]) data = {} # for parameters as scalars if has_value: data['value'] = jItem.getScalarValue().floatValue() data['unit'] = str(jItem.getScalarUnit()) # for variables as scalars elif has_level: data['lvl'] = jItem.getScalarLevel().floatValue() data['mrg'] = jItem.getScalarMarginal().floatValue() return data