{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "from aesim.simba import ProjectRepository, ThermalData\n",
    "import matplotlib.pyplot as plt\n",
    "from IPython.display import display, clear_output\n",
    "from ipywidgets import widgets\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "33058160ab07428292952654f0f7a49e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "VBox(children=(FloatSlider(value=1.5, description='Kp:', max=10.0, min=0.1, step=0.2), FloatSlider(value=15000…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d28a52b9024342159394f54ae66539d5",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "SIMBA_SCRIPT_TEST = os.environ.get('SIMBA_SCRIPT_TEST') == 'True'\n",
    "\n",
    "def run_simulation(kp, ki):\n",
    "    print('kp={:.2f}'.format(kp))\n",
    "    print('ki={:.0f}'.format(ki))\n",
    "    file_path = os.path.join(os.getcwd(), \"SliderWidget_BuckAverageCM.jsimba\")\n",
    "    project = ProjectRepository(file_path)\n",
    "    design = project.GetDesignByName('DC-DC Buck Average Current-Mode IGBT')\n",
    "    design.TransientAnalysis.StopAtSteadyState = True\n",
    "    PI = design.Circuit.GetDeviceByName('PID1')\n",
    "    PI.Kp = kp\n",
    "    PI.Ki = ki\n",
    "\n",
    "    job = design.TransientAnalysis.NewJob()\n",
    "    status = job.Run()\n",
    "    if str(status) != \"OK\":\n",
    "        raise Exception(job.Summary())\n",
    "    V_out = job.GetSignalByName('R1 - Voltage').DataPoints\n",
    "    I_out = job.GetSignalByName('R1 - Current').DataPoints\n",
    "    time = job.TimePoints\n",
    "\n",
    "    fig, ax = plt.subplots()\n",
    "    ax.set_title(\"Output - Voltage (V)\")\n",
    "    ax.set_ylabel('Voltage (V)')\n",
    "    ax.set_xlabel('time (s)')\n",
    "    ax.plot(time, V_out)\n",
    "    plt.grid(True)\n",
    "    plt.show()\n",
    "\n",
    "if SIMBA_SCRIPT_TEST:\n",
    "    run_simulation(1.5, 15000)\n",
    "else:\n",
    "    Kp = widgets.FloatSlider(\n",
    "        value=1.5,  # Initial value\n",
    "        min=0.1,    # Minimum value\n",
    "        max=10,     # Maximum value\n",
    "        step=0.2,   # Step size\n",
    "        description='Kp:',  # Label for the slider\n",
    "        orientation='horizontal'  # Orientation of the slider\n",
    "    )\n",
    "    Ki = widgets.FloatSlider(\n",
    "        value=15000,  # Initial value\n",
    "        min=5000,     # Minimum value\n",
    "        max=25000,    # Maximum value\n",
    "        step=500,     # Step size\n",
    "        description='Ki:',  # Label for the slider\n",
    "        orientation='horizontal'  # Orientation of the slider\n",
    "    )\n",
    "\n",
    "    output_widget = widgets.Output()\n",
    "    box1 = widgets.VBox([Kp, Ki])\n",
    "    display(box1)\n",
    "\n",
    "    def handle_slider_change(change):\n",
    "        with output_widget:\n",
    "            clear_output(wait=True)\n",
    "            run_simulation(Kp.value, Ki.value)\n",
    "\n",
    "    Kp.observe(handle_slider_change, names='value')\n",
    "    Ki.observe(handle_slider_change, names='value')\n",
    "    display(output_widget)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "myenv",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.3"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
