def process_solution(self):
        # Add levelized cost
        self.solution = self.solution.merge(self.get_levelized_cost().to_dataset(name='levelized_cost'))
        # Add capacity factor
        self.solution = self.solution.merge(self.get_capacity_factor().to_dataset(name='capacity_factor'))
        # Add metadata
        md = self.get_metadata()
        md.columns.name = 'cols_metadata'
        md.index.name = 'y'
        self.solution = self.solution.merge(xr.DataArray(md).to_dataset(name='metadata'))
        # Add summary
        summary = self.get_summary()
        summary.columns.name = 'cols_summary'
        summary.index.name = 'techs'
        self.solution = self.solution.merge(xr.DataArray(summary).to_dataset(name='summary'))
        # Add groups
        groups = self.get_groups()
        groups.columns.name = 'cols_groups'
        groups.index.name = 'techs'
        self.solution = self.solution.merge(xr.DataArray(groups).to_dataset(name='groups'))
        # Add shares
        shares = self.get_shares(groups)
        shares.columns.name = 'cols_shares'
        shares.index.name = 'techs'
        self.solution = self.solution.merge(xr.DataArray(shares).to_dataset(name='shares'))
        # Add time resolution, and give it a nicer index
        time_res = self.data.time_res_series.copy()
        time_res.index = self.solution.coords['t'].values
        time_res.index.name = 't'
        self.solution = self.solution.merge(xr.DataArray(time_res).to_dataset(name='time_res'))
        # Add model and run configuration
        self.solution.attrs['config_run'] = self.config_run
        self.solution.attrs['config_model'] = self.config_model
Called from both load_solution() and load_solution_iterative()
dataset/ETHPy150Open calliope-project/calliope/calliope/core.py/Model.process_solution