def prepare_input_measures(property_recommendations, goal): """ Basic function to convert recommendations_to_upload to a format that is suitable for the optimiser - large :param property_recommendations: object containing the recommendations, created in the plan trigger api :param goal: goal to be optimised for, should be one of the keys in gain_map. E.g. if the gain is SAP points, the goal should reflect that desired gain :return: Nested list of input measures """ goal_map = { "Increasing EPC": "sap_points" } goal_key = goal_map[goal] if not goal_key: raise NotImplementedError("Not implemented this gain type - investigate me") input_measures = [] for recs in property_recommendations: if recs[0]["type"] == "solar_pv": # if the recommendation is a solar recommendation with a battery, we exclude it from the optimisation. recs = [r for r in recs if ~r["has_battery"]] input_measures.append( [ { "id": rec["recommendation_id"], "cost": rec["total"], "gain": rec[goal_key], "type": rec["type"] } for rec in recs ] ) return input_measures