dindizz's picture
Update app.py
5366c37 verified
import gradio as gr
import matplotlib.pyplot as plt
# Helper function to format INR values
def format_rupees(value):
inr = f"₹ {value:,.2f}"
if value >= 1e7:
cr = f" (₹ {value / 1e7:.2f} Cr)"
return inr + cr
return inr
def cmda_redevelopment_final_model(
uds, num_owners, total_fsi, guideline_value, market_rate, construction_cost
):
owner_fsi = 2.0
premium_fsi = total_fsi - owner_fsi
# Area calculations
owner_total_area = owner_fsi * uds
builder_area = premium_fsi * uds
total_built_up_area = total_fsi * uds
# Premium FSI Charges
premium_fsi_charge = 0.4 * guideline_value * uds * premium_fsi
# Construction cost for entire built-up area
total_construction_cost = total_built_up_area * construction_cost
# Builder Revenue
builder_sale_value = builder_area * market_rate
# Builder Profit
builder_profit = builder_sale_value - total_construction_cost - premium_fsi_charge
# Owner share
uds_per_owner = uds / num_owners
owner_area_per_owner = owner_total_area / num_owners
# Chart
fig, ax = plt.subplots(figsize=(6, 4))
labels = ['Owner Area (2.0x UDS)', f'Builder Area ({premium_fsi:.1f}x UDS)', 'Total Area']
values = [owner_total_area, builder_area, total_built_up_area]
ax.bar(labels, values, edgecolor='black')
ax.set_ylabel("Area (sq.ft)")
ax.set_title("Redevelopment Share Breakdown")
plt.tight_layout()
# Output with formatted rupees
result = {
"Total UDS": f"{uds:.2f} sq.ft",
"Total Built-up Area (FSI × UDS)": f"{total_built_up_area:.2f} sq.ft",
"Owner Entitlement Area (2.0 × UDS)": f"{owner_total_area:.2f} sq.ft",
f"Builder Saleable Area ({premium_fsi:.1f} × UDS)": f"{builder_area:.2f} sq.ft",
"--- Builder Financials ---": "",
"Premium FSI Charges (0.4 × guideline × UDS × extra FSI)": format_rupees(premium_fsi_charge),
"Total Construction Cost (entire built-up area)": format_rupees(total_construction_cost),
"Builder Revenue (@ market rate)": format_rupees(builder_sale_value),
"Estimated Builder Profit": format_rupees(builder_profit),
"--- Owner Breakdown ---": "",
"Number of Owners": num_owners,
"UDS per Owner": f"{uds_per_owner:.2f} sq.ft",
"New Flat per Owner (2.0 × UDS)": f"{owner_area_per_owner:.2f} sq.ft"
}
return result, fig
# Gradio Interface
inputs = [
gr.Number(label="Total UDS (in sq.ft)", value=450),
gr.Number(label="Number of Owners", value=4),
gr.Number(label="Total FSI (e.g., 2.8)", value=2.8, minimum=2.0, maximum=3.5, step=0.1),
gr.Number(label="Guideline Value (₹/sq.ft)", value=5000),
gr.Number(label="Market Rate (₹/sq.ft for builder sale)", value=9500),
gr.Number(label="Construction Cost (₹/sq.ft)", value=3500),
]
outputs = [
gr.JSON(label="CMDA Redevelopment Report"),
gr.Plot(label="Redevelopment Share Chart")
]
app = gr.Interface(
fn=cmda_redevelopment_final_model,
inputs=inputs,
outputs=outputs,
title="CMDA Redevelopment Calculator (Fixed Owner FSI Model)",
description=(
"Owners receive flats at 2.0× their UDS. Builder gets only the premium FSI share, sells at market rate, "
"and bears full construction cost and premium FSI charges. Figures over ₹1 Cr are shown in crores."
)
)
if __name__ == "__main__":
app.launch()