import gradio as gr
def time_value_of_money_calculator(capital_expenditure, annual_revenue, operating_expenditure, project_years, minimum_attractive_rate_of_return):
capital_expenditure = float(capital_expenditure)
annual_revenue = float(annual_revenue)
operating_expenditure = float(operating_expenditure)
project_years = int(project_years)
minimum_attractive_rate_of_return = float(minimum_attractive_rate_of_return)/100
cash_flows = [-capital_expenditure] + [annual_revenue - operating_expenditure] * project_years
net_present_value = sum(cf/(1+minimum_attractive_rate_of_return)**i for i,cf in enumerate(cash_flows))
cumulative_cash_flow = 0
payback_period = 0
for i in range(1, len(cash_flows)):
cumulative_cash_flow += cash_flows[i]
payback_period = i
if cumulative_cash_flow >= capital_expenditure: break
profitability_index = abs(net_present_value/capital_expenditure)*100
project_status = "โ
PROJECT VIABLE" if net_present_value>0 else "โ PROJECT REVIEW NEEDED"
return f"""
๐งช Time Value of Money Analysis
๐ INPUT PARAMETERS
| CAPEX: | ${capital_expenditure:,.0f} |
| REV: | ${annual_revenue:,.0f} |
| OPEX: | ${operating_expenditure:,.0f} |
๐ฏ KEY RESULTS
${net_present_value:,.0f}
NPV
{payback_period} yrs
PAYBACK
0 else '#f8d7da'}, {'#c3e6cb' if net_present_value>0 else '#f5c6cb'});
border-radius: 15px;
border-left: 6px solid {'#28a745' if net_present_value>0 else '#dc3545'};
text-align: center;
font-size: 18px;
font-weight: 700;
color: {'#155724' if net_present_value>0 else '#721c24'};
'>{project_status}
๐จโ๐ผ **App Builder: M.Kamran Liaqat** | ๐ **2k23-chE-05**
"""
css = """
.gradio-container {
background: linear-gradient(135deg, #1e3c72 0%, #2a5298 50%, #0f3460 100%) !important;
min-height: 100vh;
}
.block.gradio-container > div {
background: rgba(255,255,255,0.95) !important;
border-radius: 25px !important;
box-shadow: 0 25px 50px rgba(0,0,0,0.15) !important;
border: 1px solid rgba(255,255,255,0.3) !important;
}
.gr-button {
background: linear-gradient(45deg, #667eea 0%, #764ba2 100%) !important;
border: none !important;
color: white !important;
border-radius: 15px !important;
font-weight: 700 !important;
font-size: 16px !important;
box-shadow: 0 10px 25px rgba(102,126,234,0.4) !important;
transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
}
.gr-button:hover {
transform: translateY(-3px) scale(1.02) !important;
box-shadow: 0 15px 35px rgba(102,126,234,0.6) !important;
}
.gr-number input, .gr-slider input {
background: rgba(255,255,255,0.95) !important;
border: 2px solid #e8ecff !important;
border-radius: 12px !important;
padding: 15px !important;
font-size: 16px !important;
transition: all 0.3s ease !important;
}
.gr-number input:focus, .gr-slider input:focus {
border-color: #667eea !important;
box-shadow: 0 0 0 3px rgba(102,126,234,0.1) !important;
}
"""
with gr.Blocks(css=css, title="ChemEng TVM Calculator") as demo:
gr.Markdown("# ๐งช Chemical Engineering TVM Calculator")
gr.Markdown("**Professional Capital Budgeting & Economic Analysis Tool**")
with gr.Row():
with gr.Column(scale=1):
gr.Markdown("### ๐ฐ **Financial Inputs**")
capital_expenditure_input = gr.Number(value=10000000, label="**CAPEX** ($)", precision=0)
annual_revenue_input = gr.Number(value=5000000, label="**Annual Revenue** ($)", precision=0)
operating_expenditure_input = gr.Number(value=3500000, label="**OPEX** ($)", precision=0)
with gr.Column(scale=1):
gr.Markdown("### ๐ **Project Parameters**")
project_years_input = gr.Slider(minimum=5, maximum=30, value=15, step=1, label="**Project Years**")
marr_input = gr.Slider(minimum=8, maximum=25, value=12, step=0.5, label="**MARR (%)**")
calculate_button = gr.Button("๐ฌ **PERFORM ECONOMIC ANALYSIS**", variant="primary", size="lg")
results_output = gr.Markdown()
calculate_button.click(time_value_of_money_calculator,
inputs=[capital_expenditure_input, annual_revenue_input, operating_expenditure_input, project_years_input, marr_input],
outputs=results_output)
demo.launch()