room / app.py
Jugal-sheth's picture
Update app.py
d18b2ed verified
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()