예제 #1
0
    def recalculate_activity_parameters(self,
                                        group: str,
                                        global_params: dict = None
                                        ) -> Optional[dict]:
        new_values = self.get_altered_values(group)
        if global_params is None:
            global_params = {}

        data = ActivityParameter.load(group)
        if not data:
            return

        for name, amount in new_values.items():
            data[name]["amount"] = amount

        new_symbols = get_new_symbols(data.values(), set(data))
        missing = new_symbols.difference(global_params)
        if missing:
            raise MissingName(
                "The following variables aren't defined:\n{}".format(
                    "|".join(missing)))

        glo = self._static(global_params,
                           needed=new_symbols) if new_symbols else None

        ParameterSet(data, glo).evaluate_and_set_amount_field()
        return self._prune_result_data(data)
예제 #2
0
    def parameter_exchange_dependencies(self) -> dict:
        """

        Schema: {param1: List[tuple], param2: List[tuple]}
        """
        parameters = defaultdict(list)
        for act in self.initial.act_by_group_db:
            exchanges = self.initial.exc_by_group(act.group)
            for exc, formula in exchanges.items():
                params = get_new_symbols([formula])
                # Convert exchange from int to Index
                exc = Index.build_from_exchange(ExchangeDataset.get_by_id(exc))
                for param in params:
                    parameters[param].append(exc)
        return parameters
예제 #3
0
    def recalculate_activity_parameters(self, group: str, global_params: dict = None) -> dict:
        data = self.initial.act_by_group(group)
        if not data:
            return {}

        new_values = self.parameters.data_by_group(group)
        glo = global_params or {}
        for name, amount in new_values.items():
            data[name]["amount"] = amount

        new_symbols = get_new_symbols(data.values(), set(data))
        missing = new_symbols.difference(global_params)
        if missing:
            raise MissingName("The following variables aren't defined:\n{}".format("|".join(missing)))

        glo = Parameters.static(glo, needed=new_symbols) if new_symbols else None

        ParameterSet(data, glo).evaluate_and_set_amount_field()
        return StaticParameters.prune_result_data(data)