Spaces:
Build error
Build error
| import gradio as gr | |
| def convert_to_meters(feet): | |
| """Converts feet to meters.""" | |
| return round(feet * 0.3048, 2) | |
| def convert_to_feet(meters): | |
| """Converts meters to feet.""" | |
| return round(meters / 0.3048, 2) | |
| def calculate_area(length, width): | |
| """Calculates area from length and width.""" | |
| return round(length * width, 2) | |
| def app( | |
| price_input, | |
| room1_length_ft, room1_width_ft, room1_area_sqft, | |
| room2_length_ft, room2_width_ft, room2_area_sqft, | |
| room3_length_ft, room3_width_ft, room3_area_sqft, | |
| room4_length_ft, room4_width_ft, room4_area_sqft, | |
| room5_length_ft, room5_width_ft, room5_area_sqft, | |
| price_per_sqft_input | |
| ): | |
| try: | |
| total_area_sqft = 0 | |
| rooms = [] | |
| for length_ft, width_ft, area_sqft in [ | |
| (room1_length_ft, room1_width_ft, room1_area_sqft), | |
| (room2_length_ft, room2_width_ft, room2_area_sqft), | |
| (room3_length_ft, room3_width_ft, room3_area_sqft), | |
| (room4_length_ft, room4_width_ft, room4_area_sqft), | |
| (room5_length_ft, room5_width_ft, room5_area_sqft), | |
| ]: | |
| if length_ft and width_ft: | |
| length_ft, width_ft = float(length_ft), float(width_ft) | |
| length_m, width_m = convert_to_meters(length_ft), convert_to_meters(width_ft) | |
| area_sqft = calculate_area(length_ft, width_ft) | |
| area_sqmt = round(area_sqft * 0.092903, 2) | |
| elif area_sqft: | |
| area_sqft = float(area_sqft) | |
| area_sqmt = round(area_sqft * 0.092903, 2) | |
| length_ft = width_ft = None | |
| length_m = width_m = None | |
| else: | |
| continue | |
| rooms.append((length_ft, width_ft, length_m, width_m, area_sqft, area_sqmt)) | |
| total_area_sqft += area_sqft | |
| total_area_sqmt = round(total_area_sqft * 0.092903, 2) | |
| total_price = float(price_input) * 1000 | |
| current_ppsqft = round(total_price / total_area_sqft, 2) | |
| offers = [float(offer.strip()) for offer in price_per_sqft_input.split(",")] | |
| offer_results = [(offer, round(offer * total_area_sqft, 2)) for offer in offers] | |
| return ( | |
| f"Total Area: {total_area_sqft:.2f} sqft ({total_area_sqmt:.2f} m²)", | |
| rooms, | |
| f"Current Price per Sqft: £{current_ppsqft:.2f}", | |
| offer_results | |
| ) | |
| except Exception as e: | |
| return f"Error: {e}", None, None, None | |
| iface = gr.Interface( | |
| fn=app, | |
| inputs=[ | |
| gr.Textbox(label="Total Price (in thousands, e.g., 100 for £100k)"), | |
| gr.Textbox(label="Room 1 Length (ft)"), gr.Textbox(label="Room 1 Width (ft)"), gr.Textbox(label="Room 1 Area (sqft)"), | |
| gr.Textbox(label="Room 2 Length (ft)"), gr.Textbox(label="Room 2 Width (ft)"), gr.Textbox(label="Room 2 Area (sqft)"), | |
| gr.Textbox(label="Room 3 Length (ft)"), gr.Textbox(label="Room 3 Width (ft)"), gr.Textbox(label="Room 3 Area (sqft)"), | |
| gr.Textbox(label="Room 4 Length (ft)"), gr.Textbox(label="Room 4 Width (ft)"), gr.Textbox(label="Room 4 Area (sqft)"), | |
| gr.Textbox(label="Room 5 Length (ft)"), gr.Textbox(label="Room 5 Width (ft)"), gr.Textbox(label="Room 5 Area (sqft)"), | |
| gr.Textbox(label="Price Per Square Foot Offers (£, comma-separated, e.g., 250,270,300)"), | |
| ], | |
| outputs=[ | |
| "text", | |
| gr.Dataframe(headers=["Length (ft)", "Width (ft)", "Length (m)", "Width (m)", "Area (sqft)", "Area (sqmt)"], | |
| label="Room Details"), | |
| "text", | |
| gr.Dataframe(headers=["Price Per Sqft (£)", "Offer Price (£)"], | |
| label="Price Offers"), | |
| ], | |
| title="Room Area Calculator", | |
| description="Enter dimensions for up to 5 rooms in feet or area directly in sqft. The tool calculates total area and provides price offers based on input values. Prices are in thousands (e.g., 100 = £100k)." | |
| ) | |
| if __name__ == "__main__": | |
| iface.launch() | |