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()