import%20marimo%0A%0A__generated_with%20%3D%20%220.24.2%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20return%20(mo%2C)%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%22%22%22%0A%20%20%20%20%23%20Wind%20farm%20output%20%E2%80%94%20sample%20analysis%0A%0A%20%20%20%20A%20tiny%20marimo%20notebook.%20Move%20the%20slider%3A%20every%20cell%20that%20depends%20on%20it%0A%20%20%20%20re-runs%2C%20and%20the%20chart%20below%20updates.%20No%20manual%20cell-running%20order%20to%0A%20%20%20%20get%20wrong.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20turbines%20%3D%20mo.ui.slider(4%2C%2040%2C%20value%3D12%2C%20label%3D%22Turbines%20online%22)%0A%20%20%20%20capacity%20%3D%20mo.ui.number(1.5%2C%206.0%2C%20value%3D3.0%2C%20step%3D0.5%2C%20label%3D%22MW%20per%20turbine%22)%0A%20%20%20%20mo.hstack(%5Bturbines%2C%20capacity%5D%2C%20justify%3D%22start%22%2C%20gap%3D2)%0A%20%20%20%20return%20capacity%2C%20turbines%0A%0A%0A%40app.cell%0Adef%20_(capacity%2C%20mo%2C%20turbines)%3A%0A%20%20%20%20mo.md(f%22**%7Bturbines.value%7D%20turbines%20%C3%97%20%7Bcapacity.value%7D%20MW%20%3D%20%7Bturbines.value%20*%20capacity.value%3A.1f%7D%20MW**%20nameplate%20capacity%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(capacity%2C%20turbines)%3A%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20pandas%20as%20pd%0A%0A%20%20%20%20rng%20%3D%20np.random.default_rng(7)%0A%20%20%20%20hours%20%3D%20pd.date_range(%222026-09-01%22%2C%20periods%3D24%2C%20freq%3D%22h%22)%0A%20%20%20%20load_factor%20%3D%20np.clip(0.42%20%2B%200.25%20*%20np.sin(np.arange(24)%20%2F%2024%20*%202%20*%20np.pi)%20%2B%20rng.normal(0%2C%200.05%2C%2024)%2C%200%2C%201)%0A%20%20%20%20output_mw%20%3D%20turbines.value%20*%20capacity.value%20*%20load_factor%0A%20%20%20%20chart_df%20%3D%20pd.DataFrame(%7B%22hour%22%3A%20hours%2C%20%22output_mw%22%3A%20np.round(output_mw%2C%201)%7D).set_index(%22hour%22)%0A%20%20%20%20return%20(chart_df%2C)%0A%0A%0A%40app.cell%0Adef%20_(chart_df%2C%20mo)%3A%0A%20%20%20%20mo.ui.table(chart_df.reset_index().head(8)%2C%20label%3D%22First%20hours%20%E2%80%94%20sample%20data%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(chart_df)%3A%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%0A%20%20%20%20fig%2C%20ax%20%3D%20plt.subplots(figsize%3D(7%2C%203))%0A%20%20%20%20ax.plot(chart_df.index.hour%2C%20chart_df%5B%22output_mw%22%5D%2C%20marker%3D%22o%22%2C%20color%3D%22%23264fc5%22)%0A%20%20%20%20ax.set_xlabel(%22Hour%20of%20day%22)%0A%20%20%20%20ax.set_ylabel(%22Output%20(MW)%22)%0A%20%20%20%20ax.set_title(%22Simulated%20daily%20output%20curve%22)%0A%20%20%20%20ax.grid(alpha%3D0.3)%0A%20%20%20%20fig.tight_layout()%0A%20%20%20%20fig%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
f89d5bae754874a19c211cb5313fa42f