def prepare_input_measures(property_recommendations, goal, housing_type): """ 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 :param housing_type: type of housing the recommendations are for - should be one of "Social" or "Private" :return: Nested list of input measures """ if housing_type not in ["Social", "Private"]: raise ValueError("Invalid housing type - investigate me") goal_map = { "Increase EPC": "sap_points" } goal_key = goal_map[goal] if not goal_key: raise NotImplementedError("Not implemented this gain type - investigate me") # We don't include suspended and solid floor insulation as possible measures in private housing, because # of the need to decant the tenant ignored_measures = ["suspended_floor_insulation", "solid_floor_insulation"] if housing_type == "Private" else [] input_measures = [] for recs in property_recommendations: input_measures.append( [ { "id": rec["recommendation_id"], "cost": rec["total"], "gain": rec[goal_key], "type": rec["type"] } for rec in recs if rec["type"] not in ignored_measures ] ) return input_measures