{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"authorship_tag":"ABX9TyPMXUfcMeR+tfBL1oi3dHOt"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"},"widgets":{"application/vnd.jupyter.widget-state+json":{"498eccf3f95d4bee9543f7c408c21eb3":{"model_module":"@jupyter-widgets/controls","model_name":"VBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"VBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"VBoxView","box_style":"","children":["IPY_MODEL_56789a857e9f40d89df6d7f15f6dbe8d","IPY_MODEL_d7b1d9aede5645e7a822c055240796af"],"layout":"IPY_MODEL_6d0ada32ac1f4c4c93298dc469869920"}},"56789a857e9f40d89df6d7f15f6dbe8d":{"model_module":"@jupyter-widgets/controls","model_name":"TextareaModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"TextareaModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"TextareaView","continuous_update":true,"description":"Enter data (x,y per line):","description_tooltip":null,"disabled":false,"layout":"IPY_MODEL_e75a0402453244d2a2486f238ba45abc","placeholder":"​","rows":null,"style":"IPY_MODEL_a4a8f19565214a46989d989e75a521fd","value":"\n0.00,0.00\n0.05,0.10\n0.10,0.25\n0.15,0.45\n0.20,0.70\n0.25,1.00\n0.30,1.35\n0.35,1.75\n0.40,2.20\n0.45,2.70\n\n"}},"d7b1d9aede5645e7a822c055240796af":{"model_module":"@jupyter-widgets/controls","model_name":"FloatTextModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatTextModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"FloatTextView","continuous_update":false,"description":"Step Size:","description_tooltip":null,"disabled":false,"layout":"IPY_MODEL_63fa685a9c5749ce8c72c34ab94842bf","step":null,"style":"IPY_MODEL_dc8102f951134621b02e5b7ca125d9d3","value":0.005}},"6d0ada32ac1f4c4c93298dc469869920":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"e75a0402453244d2a2486f238ba45abc":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":"200px","justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":"400px"}},"a4a8f19565214a46989d989e75a521fd":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"63fa685a9c5749ce8c72c34ab94842bf":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"dc8102f951134621b02e5b7ca125d9d3":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"6303e4bac1124de19a56c02f0e0674e3":{"model_module":"@jupyter-widgets/output","model_name":"OutputModel","model_module_version":"1.0.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/output","_model_module_version":"1.0.0","_model_name":"OutputModel","_view_count":null,"_view_module":"@jupyter-widgets/output","_view_module_version":"1.0.0","_view_name":"OutputView","layout":"IPY_MODEL_1177608448d54e3f876a286e6935d222","msg_id":"","outputs":[{"output_type":"stream","name":"stdout","text":["Error: Invalid data format in line: \n"]}]}},"1177608448d54e3f876a286e6935d222":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"eba49acc47f34c10a6b64f060efb9754":{"model_module":"@jupyter-widgets/controls","model_name":"VBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"VBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"VBoxView","box_style":"","children":["IPY_MODEL_a512fc9bda4948c0886b3eef5d1de505","IPY_MODEL_61f97ca9e3724e9f853c72d308b0e2f4","IPY_MODEL_dd69b9c73b614ce5afad9597f3c4e1b9"],"layout":"IPY_MODEL_525dabc08f0d4a359c0d06ba89a1ab14"}},"a512fc9bda4948c0886b3eef5d1de505":{"model_module":"@jupyter-widgets/controls","model_name":"TextareaModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"TextareaModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"TextareaView","continuous_update":true,"description":"Input Data:","description_tooltip":null,"disabled":false,"layout":"IPY_MODEL_92f453f67626428f96af4516209db03c","placeholder":"Paste your data here, one \"x,y\" pair per line.","rows":null,"style":"IPY_MODEL_a21267c2ca714fe999f74927eef9a3c1","value":" 0., 0.\n 2.20284, 0.0014\n 12.1156, 0.0056\n 16.5213, 0.007\n 20.9269, 0.0083\n 23.1298, 0.009\n 25.3326, 0.0098\n 27.5355, 0.0106\n 35.2454, 0.0138\n 39.6511, 0.0157\n 40.7525, 0.0162\n 47.361, 0.0189\n 52.8681, 0.0213\n 56.1723, 0.0227\n 60.578, 0.0245\n 62.7808, 0.0253\n 67.1865, 0.0269\n 73.795, 0.0291\n 78.2007, 0.0304\n 79.3021, 0.0307\n 80.4035, 0.031\n 83.7078, 0.032\n 90.3163, 0.0338\n 91.4177, 0.0341\n 93.6206, 0.0346\n 99.1276, 0.036\n 106.838, 0.0378\n 111.243, 0.0387\n 115.649, 0.0395\n 116.75, 0.0397\n 123.359, 0.041\n 125.562, 0.0414\n 126.663, 0.0416\n 127.765, 0.0418\n 131.069, 0.0424\n 132.17, 0.0426\n 135.474, 0.0432\n 142.083, 0.0443\n 145.387, 0.0448\n 146.489, 0.045\n 149.793, 0.0456\n 150.894, 0.0458\n 159.706, 0.0472\n 160.807, 0.0474\n 165.213, 0.0482\n 170.72, 0.049\n 174.024, 0.0494\n 180.633, 0.0504\n 182.835, 0.0507\n 185.038, 0.051\n 191.647, 0.052\n 198.255, 0.0528\n 203.762, 0.0536\n 205.965, 0.0539\n 208.168, 0.0542\n 211.472, 0.0546\n 216.979, 0.0552\n 223.588, 0.056\n 225.791, 0.0563\n 235.704, 0.0574\n 243.413, 0.0584\n 247.819, 0.0589\n 253.326, 0.0595\n 258.833, 0.0602\n 262.138, 0.0606\n 272.05, 0.0616\n 276.456, 0.0621\n 277.557, 0.0622\n 279.76, 0.0624\n 281.963, 0.0626\n 283.065, 0.0627\n 286.369, 0.063\n 290.774, 0.0635\n 292.977, 0.0637\n 294.079, 0.0638\n 296.282, 0.064\n 299.586, 0.0643\n 302.89, 0.0646\n 310.6, 0.0654\n 315.006, 0.0658\n 318.31, 0.0661\n 323.817, 0.0667\n 327.121, 0.067\n 329.324, 0.0672\n 332.628, 0.0675\n 334.831, 0.0677\n 335.933, 0.0678\n 338.135, 0.068\n 340.338, 0.0682\n 341.44, 0.0683\n 343.643, 0.0685\n 346.947, 0.0688\n 353.555, 0.0693\n 354.657, 0.0694\n 356.86, 0.0696\n 367.874, 0.0707\n 374.482, 0.0712\n 376.685, 0.0714\n 377.786, 0.0715\n 379.989, 0.0717\n 392.105, 0.0726\n 394.308, 0.0728\n 400.916, 0.0733\n 402.018, 0.0734\n 408.626, 0.0739\n 418.539, 0.0747\n 421.843, 0.075\n 427.35, 0.0754\n 430.655, 0.0757\n 433.959, 0.076\n 436.162, 0.0762\n 437.263, 0.0763\n 443.872, 0.0768\n 447.176, 0.077\n 459.291, 0.0779\n 465.9, 0.0784\n 469.204, 0.0786\n 473.61, 0.0789\n 481.32, 0.0795\n 485.725, 0.0798\n 489.03, 0.08\n 493.435, 0.0803\n 508.855, 0.0814\n 514.362, 0.0818\n 522.072, 0.0824\n 542.999, 0.084\n 552.912, 0.0846\n 568.332, 0.0856\n 576.042, 0.0862\n 581.549, 0.0866\n 588.157, 0.087\n 594.766, 0.0875\n 599.172, 0.0878\n 602.476, 0.088\n 605.78, 0.0882\n 611.287, 0.0885\n 615.693, 0.0888\n 620.098, 0.0891\n 627.808, 0.0896\n 633.316, 0.0899\n 641.025, 0.0904\n 649.837, 0.091\n 653.141, 0.0912\n 656.445, 0.0914\n 663.054, 0.0918\n 676.271, 0.0926\n 679.575, 0.0928\n 682.879, 0.093\n 687.285, 0.0933\n 691.691, 0.0936\n 696.096, 0.0939\n 701.603, 0.0942\n 704.908, 0.0944\n 719.226, 0.0952\n 724.733, 0.0955\n 729.139, 0.0958\n 735.747, 0.0962\n 742.356, 0.0966\n 750.066, 0.0971\n 768.79, 0.0982\n 772.094, 0.0984\n 777.601, 0.0987\n 793.021, 0.0997\n 815.05, 0.101\n 824.962, 0.1016\n 834.875, 0.1022\n 842.585, 0.1027\n 848.092, 0.103\n 851.396, 0.1032\n 861.309, 0.1038\n 865.715, 0.104"}},"61f97ca9e3724e9f853c72d308b0e2f4":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_db5a2d2211184ac08a13614bd87f2ea2","IPY_MODEL_4f52e2824db544cca81fa22924c1566d"],"layout":"IPY_MODEL_f14356bd12134a47b051e4ca90da2ffa"}},"dd69b9c73b614ce5afad9597f3c4e1b9":{"model_module":"@jupyter-widgets/output","model_name":"OutputModel","model_module_version":"1.0.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/output","_model_module_version":"1.0.0","_model_name":"OutputModel","_view_count":null,"_view_module":"@jupyter-widgets/output","_view_module_version":"1.0.0","_view_name":"OutputView","layout":"IPY_MODEL_1398d935c5e04601a7f3e835f01cec28","msg_id":"","outputs":[{"output_type":"stream","name":"stdout","text":["✅ Success! Interpolated results are ready below.\n","----------------------------------------\n","X (Strain), Y (Stress)\n","----------------------------------------\n","0.00,0.000\n","10.70,0.005\n","25.88,0.010\n","38.03,0.015\n","49.89,0.020\n","61.95,0.025\n","76.85,0.030\n","95.19,0.035\n","118.28,0.040\n","146.49,0.045\n","177.99,0.050\n","215.14,0.055\n","257.26,0.060\n","306.75,0.065\n","360.87,0.070\n","421.84,0.075\n","489.03,0.080\n","559.08,0.085\n","634.86,0.090\n","715.65,0.095\n","798.10,0.100\n"]},{"output_type":"display_data","data":{"text/plain":"
","image/png":"iVBORw0KGgoAAAANSUhEUgAAArcAAAIjCAYAAAAZajMiAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAmrVJREFUeJzs3XlclNX+B/DPM8MyqCyiIi4oaopLgKa5tGllWmmlUFlZafWrrllmZdS9tyQsNbVMs0W7t6ttVrccq9timWmbayY6goIpgqaoiQoqm/Oc3x/jjAzM4AwMPHPm+bxfL140zzzzcA4fxr4czjmPIoQQICIiIiIKAAatG0BERERE5CssbomIiIgoYLC4JSIiIqKAweKWiIiIiAIGi1siIiIiChgsbomIiIgoYLC4JSIiIqKAweKWiIiIiAIGi1siIiIiChgsbomI6mjIkCEYMmSI1s3wK2vWrIGiKFizZo3WTXESHx+P8ePHa90MImoELG6JyMmSJUugKAp+++03rZsCADh9+jSee+45vyuWvBEfH4+RI0fW6bVff/01nnvuOd82yE/5Q18VRXF8BAUFITo6Gn379sWjjz6K7OzsOl83EH6OiWTB4paI/Nrp06eRkZGh26Lg66+/RkZGhtbNaBT+0tdrrrkG7733HhYvXoxp06bhoosuwjvvvIPk5GTMnTu3TtfU+88xUWMK0roBRETUuIQQKCsrQ1hYmNZN8UvdunXDnXfe6XTsxRdfxA033IAnnngC3bt3x/XXX69R64jofDhyS0TnNX78eDRr1gx//vknRo0ahWbNmqFVq1aYMmUKrFar47y9e/dCURS89NJLeOWVV9CxY0eEhYVh8ODB2L59u9M13c1XHT9+POLj4x3Xa9WqFQAgIyPD8efi2v50XVRUhClTpiAxMRHNmjVDREQErrvuOmzdutXpPPvc0P/+97+YPn062rdvD5PJhKuvvhp//PFHjeu+9dZb6NKlC8LCwtC/f3/8/PPPHn73aqr6fbJfNzQ0FBdffDE2bdrk9L14/fXXATj/udxOVVXMmzcPvXr1gslkQuvWrfHggw/i2LFjTl/PPi3i22+/Rb9+/RAWFoZFixY5rvvwww/jgw8+QEJCAkwmE/r27YuffvqpRru3bNmC6667DhEREWjWrBmuvvpqrF+//rz9/fnnn3HLLbegQ4cOCA0NRVxcHB577DGUlpb6vK9CCLzwwgto3749mjRpgiuvvBJZWVnnbeP5tGjRAh999BGCgoIwffp0x/GKigpMnToVffv2RWRkJJo2bYrLL78cq1evdpxzvp/jbdu2Yfz48ejcuTNMJhNiY2Nx77334ujRo/VuN5EeceSWiDxitVoxfPhwDBgwAC+99BK+//57vPzyy+jSpQsmTJjgdO67776LkpISTJw4EWVlZZg/fz6uuuoqWCwWtG7d2uOv2apVK7z55puYMGECRo8ejZSUFABAUlKS29fs2bMHn332GW655RZ06tQJhw4dwqJFizB48GBkZ2ejbdu2Tue/+OKLMBgMmDJlCk6cOIHZs2dj7Nix2LBhg+Oct99+Gw8++CAuueQSTJ48GXv27MGNN96I6OhoxMXFedyf6pYuXYqSkhI8+OCDUBQFs2fPRkpKCvbs2YPg4GA8+OCDOHDgAFauXIn33nuvxusffPBBLFmyBPfccw8mTZqEvLw8vPbaa9iyZQt+/fVXBAcHO87NycnB7bffjgcffBD3338/EhISHM/9+OOP+PjjjzFp0iSEhobijTfewLXXXouNGzfiwgsvBABkZWXh8ssvR0REBNLS0hAcHIxFixZhyJAh+PHHHzFgwAC3/fzkk09w+vRpTJgwAS1atMDGjRuxYMEC7N+/H5988omjL77o69SpU/HCCy/g+uuvx/XXX4/ff/8dw4YNQ0VFRd1CqqJDhw4YPHgwVq9ejeLiYkRERKC4uBj//ve/cfvtt+P+++9HSUkJ3n77bQwfPhwbN25E7969z/tzvHLlSuzZswf33HMPYmNjkZWVhbfeegtZWVlYv369U5FPRB4QRERVLF68WAAQmzZtchwbN26cACCmTZvmdG6fPn1E3759HY/z8vIEABEWFib279/vOL5hwwYBQDz22GOOY4MHDxaDBw+u8fXHjRsnOnbs6Hh85MgRAUCkp6d71P6ysjJhtVqdjuXl5YnQ0FCn9q9evVoAED169BDl5eWO4/PnzxcAhMViEUIIUVFRIWJiYkTv3r2dznvrrbcEAJd9qK5jx45ixIgRTu0BIFq0aCGKioocxz///HMBQPzvf/9zHJs4caJw9U/1zz//LACIDz74wOn4ihUrahzv2LGjACBWrFhR4zoABADx22+/OY7l5+cLk8kkRo8e7Tg2atQoERISInbv3u04duDAAREeHi6uuOIKxzH793X16tWOY6dPn67xdWfOnCkURRH5+fk+6+vhw4dFSEiIGDFihFBV1XHeP/7xDwFAjBs3rsa1XX0/Jk6c6Pb5Rx99VAAQW7duFUIIcebMGaefCyGEOHbsmGjdurW49957Hcdq+zl29f358MMPBQDx008/nbfNROSM0xKIyGN/+9vfnB5ffvnl2LNnT43zRo0ahXbt2jke9+/fHwMGDMDXX3/d4G0MDQ2FwWD7p81qteLo0aNo1qwZEhIS8Pvvv9c4/5577kFISIjj8eWXXw4Ajn799ttvOHz4MP72t785nTd+/HhERkbWq61jxoxB8+bN3X7t2nzyySeIjIzENddcg7/++svx0bdvXzRr1szpz+IA0KlTJwwfPtzltQYNGoS+ffs6Hnfo0AE33XQTvv32W1itVlitVnz33XcYNWoUOnfu7DivTZs2uOOOO/DLL7+guLjYbVurzu09deoU/vrrL1xyySUQQmDLli0+6+v333+PiooKPPLII06jnZMnTz7v1/BUs2bNAAAlJSUAAKPR6Pi5UFUVRUVFOHPmDPr16+fy582Vqt+fsrIy/PXXXxg4cCAAeHwNIjqH0xKIyCMmk8kxb9CuefPmNeY8AkDXrl1rHOvWrRv++9//Nlj77FRVxfz58/HGG28gLy/PaU5wixYtapzfoUMHp8f2YtPer/z8fAA1+xQcHOxU6NXF+b52bXbt2oUTJ04gJibG5fOHDx92etypUye313KX1+nTp3HkyBEAttX+Vacy2PXo0QOqqmLfvn3o1auXy+sXFBRg6tSp+OKLL2r07cSJE27bZedpX91l1apVK6dfIurj5MmTAIDw8HDHsXfeeQcvv/wydu7cicrKSsfx2r7nVRUVFSEjIwMfffRRjdw8+f4QkTMWt0TkEaPR6NPrKYoCIUSN41WL0bqYMWMGnn32Wdx77714/vnnER0dDYPBgMmTJ0NV1Rrnu+uXq7b5Wn2+tqqqiImJwQcffODy+eq/iGi1M4LVasU111yDoqIiPPXUU+jevTuaNm2KP//8E+PHj3eZSXXe9rUhbd++HUaj0VG4vv/++xg/fjxGjRqFJ598EjExMTAajZg5cyZ2797t0TVvvfVWrF27Fk8++SR69+6NZs2aQVVVXHvttR59f4jIGYtbIvK5Xbt21TiWm5vr2AUBsI1Suvrzu330zc7bxTSffvoprrzySrz99ttOx48fP46WLVt6dS0A6NixIwBbn6666irH8crKSuTl5SE5Odnra3rDXf+7dOmC77//Hpdeemm9C1d3eTVp0sRRODZp0gQ5OTk1ztu5cycMBoPbhXUWiwW5ubl45513cPfddzuOr1y5ssa59e1r1ayqjqofOXLEo9Hw8ykoKMCPP/6IQYMGOUZuP/30U3Tu3Blms9mp/enp6U6vdde3Y8eOYdWqVcjIyMDUqVMdx11lQkSe4ZxbIvK5zz77DH/++afj8caNG7FhwwZcd911jmNdunTBzp07HX/2BoCtW7fi119/dbpWkyZNANiKU08YjcYaI5+ffPKJU3u80a9fP7Rq1QoLFy50WnG/ZMkSj9tUH02bNgVQs/+33norrFYrnn/++RqvOXPmjFdtW7dundPczn379uHzzz/HsGHDYDQaYTQaMWzYMHz++efYu3ev47xDhw5h6dKluOyyyxAREeHy2vbR6aqZCCEwf/78GufWt69Dhw5FcHAwFixY4PT15s2bV2v/PVFUVITbb78dVqsV//znPx3HXfVvw4YNWLdundPr3f0cu3q9r9pMpFccuSUin7vgggtw2WWXYcKECSgvL8e8efPQokULpKWlOc659957MXfuXAwfPhz33XcfDh8+jIULF6JXr15Oi5PCwsLQs2dPfPzxx+jWrRuio6Nx4YUXOraoqm7kyJGYNm0a7rnnHlxyySWwWCz44IMP6jw/Njg4GC+88AIefPBBXHXVVRgzZgzy8vKwePHies+59YR9odekSZMwfPhwGI1G3HbbbRg8eDAefPBBzJw5E5mZmRg2bBiCg4Oxa9cufPLJJ5g/fz5uvvlmj77GhRdeiOHDhzttBQbA6W5hL7zwAlauXInLLrsMDz30EIKCgrBo0SKUl5dj9uzZbq/dvXt3dOnSBVOmTMGff/6JiIgILFu2zOVIan37at97eebMmRg5ciSuv/56bNmyBd98841Xo/a5ubl4//33IYRAcXExtm7dik8++QQnT57E3Llzce211zrOHTlyJMxmM0aPHo0RI0YgLy8PCxcuRM+ePR3zc4Haf46vuOIKzJ49G5WVlWjXrh2+++475OXledxeIqpGo10aiMhPudsKrGnTpjXOTU9Pd9q6yb7F1Zw5c8TLL78s4uLiRGhoqLj88ssdWydV9f7774vO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BOzYsQMAsGPHDtx0001O51966aWYN28erFary71lv//+e8ycORM7d+5EcXExzpw5U6Mt1VksFlitVnTr1s3peHl5OVq0aOFoy+hq84kGDRqEFStWOHZLCA0N9XiPQHE2bPv5VqsVM2bMwH//+1/8+eefqKioQHl5uds2V/X666/jP//5DwoKClBaWoqKigr07t3bo3boldVqxd69exEfH889iiXAvOTCvOTjNjN3+9kCQGlp4zSuAbC4bQTp6bY5t/adNBRFQAgFU6c27krT4OBgp8eKopx3W5CTJ08iIyMDKSkpNZ4zmUyO/27atKlvGlmLvXv3YuTIkZgwYQKmT5+O6Oho/PLLL7jvvvtQUVHhtlA8efIkjEYjNm/eXOMf4mbNmnn0tb3d8sZewHfq1AkAMGfOHMyfPx/z5s1zzBmePHkyKioqar3ORx99hClTpuDll1/GoEGDEB4ejjlz5mDDhg1etUePSkpKtG4CeYF5yYV5ycdlZt26Adu2OR+TcY5tNSxuG0FKiu2GHtOmATk5tp+Zp58ux+jRIVo3zUlwcHCNLa8uuugi5OTk4IILLqjTNdevX+/YOPrYsWPIzc1Fjx49AAA9evTAr7/+6nT+r7/+im7durkcDdi8eTNUVcXLL78Mg8G2FvK///2v0zkhISE1+tCnTx9YrVYcPnwYl19+uct29ujRo0bBuH79ei966mzevHmIiIjA0KFDHf266aabcOeddwKwFcu5ubno2bNnrW3/9ddfcckll+Chhx5yHNu9e3ed20VERASz2bbtV3a283HJ9rN1h8VtI0lJsX0Atp+b0tKG3ee2LuLj47Fq1SpceumlCA0NRfPmzTF16lSMHDkSHTp0wM033wyDwYCtW7di+/bteOGFF857zWnTpqFFixZo3bo1/vnPf6Jly5aO/XefeOIJXHzxxXj++ecxZswYrFu3Dq+99hreeOMNl9e64IILUFlZiQULFuCGG27Ar7/+ioULF9bow8mTJ7Fq1SokJyejSZMm6NatG8aOHYu7774bL7/8Mvr06YMjR45g1apVSEpKwogRIzBp0iRceumleOmll3DTTTfh22+/xYoVKzz6vh0/fhyFhYUoLy9Hbm4uFi1ahM8++wzvvvuuY8/drl274tNPP8XatWvRvHlzzJ07F4cOHXIqbuPj47Fhwwbs3bsXzZo1Q3R0NLp2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Xi327NkjFi9eLEwmk3jjjTcavX+Bxtu8ysvLxZYtW8SWLVtEmzZtxJQpU8SWLVvErl27PL6mbFjc+sCCBQtEhw4dREhIiOjfv79Yv36947nBgweLcePGOZ3/3//+V3Tr1k2EhISIXr16ia+++srpeVVVxbPPPitat24tQkNDxdVXXy1ycnIaoyu64cvM8vLyBACXH6tXr26kHgU2X7/HqmNx63sNkdnbb78tLrjgAmEymURycrL47LPPGrobuuHrvA4ePCjGjx8v2rZtK0wmk0hISBAvv/yyUFW1MboT8LzJy93/owYPHuzxNWWjCCGERoPGREREREQ+xTm3RERERBQwWNwSERERUcBgcUtEREREAYPFLREREREFDBa3RERERBQwWNwSERERUcBgcUtEREREAYPFLREREREFDBa3RESNZO/evVAUBZmZmVo3BVdccQWWLl2qdTO8tnDhQtxwww1aN4OI/BiLWyLSHSEEhg4diuHDh9d47o033kBUVBT279+vQcsaxxdffIFDhw7htttucxzbunUrbrzxRsTExMBkMiE+Ph5jxozB4cOHAQBr1qyBoig4fvy4Rq22uffee/H777/j559/1rQdROS/WNwSke4oioLFixdjw4YNWLRokeN4Xl4e0tLSsGDBArRv317DFjasV199Fffccw8MBtv/Ao4cOYKrr74a0dHR+Pbbb7Fjxw4sXrwYbdu2xalTp7y6dkVFRUM02SEkJAR33HEHXn311Qb9OkQkLxa3RKRLcXFxmD9/PqZMmYK8vDwIIXDfffdh2LBhuOuuu2qcf8cdd2DMmDFOxyorK9GyZUu8++67AIAVK1bgsssuQ1RUFFq0aIGRI0di9+7dbtuwZMkSREVFOR377LPPoCiK07HPP/8cF110EUwmEzp37oyMjAycOXMGgG0U+rnnnkOHDh0QGhqKtm3bYtKkSW6/5pEjR/DDDz84/Wn/119/xYkTJ/Dvf/8bffr0QadOnXDllVfilVdeQadOnbB3715ceeWVAIDmzZtDURSMHz8eADBkyBA8/PDDmDx5Mlq2bOkYDd++fTuuu+46NGvWDK1bt8Zdd92Fv/76y/E1P/30UyQmJiIsLAwtWrTA0KFDHYX0mjVr0L9/fzRt2hRRUVG49NJLkZ+f73jtDTfcgC+++AKlpaVu+0lE+sXiloh0a9y4cbj66qtx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\n"},"metadata":{}}]}},"525dabc08f0d4a359c0d06ba89a1ab14":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"92f453f67626428f96af4516209db03c":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":"150px","justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":"95%"}},"a21267c2ca714fe999f74927eef9a3c1":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":"initial"}},"db5a2d2211184ac08a13614bd87f2ea2":{"model_module":"@jupyter-widgets/controls","model_name":"FloatTextModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatTextModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"FloatTextView","continuous_update":false,"description":"Step Size:","description_tooltip":null,"disabled":false,"layout":"IPY_MODEL_adb44bb2dc8d419bb1b26cfa818215ba","step":null,"style":"IPY_MODEL_cc5d52b977824c55bb02c67d071eb2ce","value":0.005}},"4f52e2824db544cca81fa22924c1566d":{"model_module":"@jupyter-widgets/controls","model_name":"ButtonModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ButtonModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ButtonView","button_style":"success","description":"Generate Curve","disabled":false,"icon":"cogs","layout":"IPY_MODEL_2ee8eeea715e40eface50441d9e5b6e3","style":"IPY_MODEL_6bb2a131fde8427b99f3397a6eb1b8ff","tooltip":"Click to process the data and generate the plot"}},"f14356bd12134a47b051e4ca90da2ffa":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"adb44bb2dc8d419bb1b26cfa818215ba":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"cc5d52b977824c55bb02c67d071eb2ce":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":"initial"}},"2ee8eeea715e40eface50441d9e5b6e3":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"6bb2a131fde8427b99f3397a6eb1b8ff":{"model_module":"@jupyter-widgets/controls","model_name":"ButtonStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ButtonStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","button_color":null,"font_weight":""}},"1398d935c5e04601a7f3e835f01cec28":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}}}}},"cells":[{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000,"referenced_widgets":["eba49acc47f34c10a6b64f060efb9754","a512fc9bda4948c0886b3eef5d1de505","61f97ca9e3724e9f853c72d308b0e2f4","dd69b9c73b614ce5afad9597f3c4e1b9","525dabc08f0d4a359c0d06ba89a1ab14","92f453f67626428f96af4516209db03c","a21267c2ca714fe999f74927eef9a3c1","db5a2d2211184ac08a13614bd87f2ea2","4f52e2824db544cca81fa22924c1566d","f14356bd12134a47b051e4ca90da2ffa","adb44bb2dc8d419bb1b26cfa818215ba","cc5d52b977824c55bb02c67d071eb2ce","2ee8eeea715e40eface50441d9e5b6e3","6bb2a131fde8427b99f3397a6eb1b8ff","1398d935c5e04601a7f3e835f01cec28"]},"id":"NeWKSdLKlNzp","executionInfo":{"status":"ok","timestamp":1755180179451,"user_tz":-60,"elapsed":49,"user":{"displayName":"Arun Sankar Sreethar","userId":"01453538360872467285"}},"outputId":"b0e2376f-383d-41a1-edb7-65311549df59"},"outputs":[{"output_type":"display_data","data":{"text/plain":["VBox(children=(Textarea(value='0.0,0.0\\n0.1,150.5\\n0.2,250.0\\n0.3,310.2\\n0.4,340.0\\n0.5,355.8', description='I…"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"eba49acc47f34c10a6b64f060efb9754"}},"metadata":{}}],"source":["import ipywidgets as widgets\n","from ipywidgets import VBox, HBox, Layout\n","import matplotlib.pyplot as plt\n","import numpy as np\n","\n","# --- 1. Define Core Functions (Interpolation and Plotting) ---\n","\n","# This is the main function that processes the data. It's now designed\n","# to be called when the ipywidget button is clicked.\n","def process_and_plot(b):\n"," \"\"\"\n"," Reads data from widgets, performs interpolation, prints the results,\n"," and displays a plot. This function serves as the callback for the button.\n"," \"\"\"\n"," # Direct all output (prints, plots) to the output_area widget\n"," with output_area:\n"," # Clear previous results and plots\n"," output_area.clear_output(wait=True)\n","\n"," try:\n"," # Retrieve data from the input text area\n"," data_str = data_textarea.value.strip()\n"," if not data_str:\n"," print(\"⚠️ Input Error: No data provided! Please paste data and try again.\")\n"," return\n","\n"," # Retrieve step size from the float text widget\n"," step_size = step_size_floattext.value\n"," if step_size <= 0:\n"," print(\"⚠️ Input Error: Step size must be a positive number.\")\n"," return\n","\n"," # Convert input string to a list of (x, y) tuples\n"," data_lines = data_str.splitlines()\n"," data = []\n"," for i, line in enumerate(data_lines):\n"," line = line.strip()\n"," if not line: # Skip empty lines\n"," continue\n"," try:\n"," # Remove any characters that are not digits, decimals, or commas\n"," cleaned_line = \"\".join(c for c in line if c.isdigit() or c == '.' or c == ',')\n"," # Be flexible with separators (comma or space) and handle potential errors during conversion\n"," parts = cleaned_line.split(',')\n"," if len(parts) != 2:\n"," print(f\"⚠️ Input Error: Line {i+1} does not contain exactly two values separated by a comma after removing invalid characters.\")\n"," return\n"," x, y = map(float, parts)\n"," data.append((x, y))\n"," except ValueError:\n"," print(f\"⚠️ Input Error: Could not convert values to numbers on line {i+1} after cleaning. Please check your data format.\")\n"," return\n","\n","\n"," if len(data) < 2:\n"," print(\"⚠️ Input Error: At least two data points are required for interpolation.\")\n"," return\n","\n"," # IMPORTANT: Sort data based on the y-values for correct interpolation\n"," # This is crucial for np.interp to work correctly when interpolating x based on y.\n"," data.sort(key=lambda item: item[1])\n","\n"," # Extract sorted x and y values\n"," x_values = [item[0] for item in data]\n"," y_values = [item[1] for item in data]\n","\n"," # Define the linear interpolation function\n"," def interp_func(y_target, x_vals, y_vals):\n"," # Use numpy's interpolation function which is fast and robust\n"," # It handles edges cases automatically.\n"," return np.interp(y_target, y_vals, x_vals)\n","\n"," # Determine the range for new y values\n"," min_y, max_y = y_values[0], y_values[-1]\n","\n"," # Generate new y values from min_y to max_y with the specified step size\n"," # We use np.arange for this, which is standard for numerical ranges.\n"," # Add a small epsilon to max_y to ensure the last point is included if it aligns exactly with a step.\n"," new_y_values = np.arange(min_y, max_y + step_size * 1e-9, step_size)\n","\n"," # Compute the corresponding x values using our interpolation function\n"," new_x_values = interp_func(new_y_values, x_values, y_values)\n","\n"," # --- Display the Results ---\n"," print(\"✅ Success! Interpolated results are ready below.\")\n"," print(\"-\" * 40)\n"," print(\"X (Strain), Y (Stress)\")\n"," print(\"-\" * 40)\n"," # Create and print the result string\n"," result_str = []\n"," for x, y in zip(new_x_values, new_y_values):\n"," result_str.append(f\"{x:.2f},{y:.3f}\")\n"," print(\"\\n\".join(result_str))\n","\n","\n"," # --- Plot the Graphs ---\n"," fig, ax = plt.subplots(figsize=(8, 6))\n","\n"," # Plot original data (Stress vs. Strain)\n"," ax.plot(y_values, x_values, 'r-', marker='.', markersize=8, label='Input Data')\n","\n"," # Plot interpolated data\n"," ax.plot(new_y_values, new_x_values, 'bo', markersize=4, label='Interpolated Data')\n","\n"," # Add labels, title, legend, and grid\n"," ax.set_xlabel('Y values (Stress)')\n"," ax.set_ylabel('X values (Strain)')\n"," ax.set_title('Input and Interpolated Data')\n"," ax.legend()\n"," ax.grid(True, linestyle='--', alpha=0.6)\n","\n"," plt.show() # Display the plot within the output area\n","\n"," except Exception as e:\n"," # Catch any other unexpected errors\n"," print(f\"❌ An unexpected error occurred: {e}\")\n"," print(\"Please review your input and try again. If the problem persists, contact support.\")\n","\n","\n","# --- 2. Create Interactive Widgets ---\n","\n","# Text area for user to paste their data, pre-filled with an example\n","data_textarea = widgets.Textarea(\n"," value='0.0,0.0\\n0.1,150.5\\n0.2,250.0\\n0.3,310.2\\n0.4,340.0\\n0.5,355.8',\n"," placeholder='Paste your data here, one \"x,y\" pair per line.',\n"," description='Input Data:',\n"," layout=Layout(width='95%', height='150px'),\n"," style={'description_width': 'initial'}\n",")\n","\n","# Float text widget for the step size\n","step_size_floattext = widgets.FloatText(\n"," value=0.05,\n"," description='Step Size:',\n"," style={'description_width': 'initial'}\n",")\n","\n","# Button to trigger the analysis\n","generate_button = widgets.Button(\n"," description='Generate Curve',\n"," button_style='success', # 'success', 'info', 'warning', 'danger' or ''\n"," tooltip='Click to process the data and generate the plot',\n"," icon='cogs' # (FontAwesome names without the `fa-` prefix)\n",")\n","\n","# An output widget to capture and display the results and plot\n","output_area = widgets.Output()\n","\n","# --- 3. Link Button to Function ---\n","# When the button is clicked, it will call the `process_and_plot` function.\n","generate_button.on_click(process_and_plot)\n","\n","\n","# --- 4. Arrange Widgets and Display the UI ---\n","# HBox for the controls (step size and button)\n","controls = HBox([step_size_floattext, generate_button])\n","\n","# VBox to stack all elements vertically\n","# This is the final UI that will be displayed in the Colab cell.\n","ui = VBox([data_textarea, controls, output_area])\n","\n","# Display the user interface\n","display(ui)"]},{"cell_type":"code","source":["!pip install voila\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"EZ_PSpd8zUYq","executionInfo":{"status":"ok","timestamp":1755698805456,"user_tz":-60,"elapsed":21379,"user":{"displayName":"Arun Sankar Sreethar","userId":"01453538360872467285"}},"outputId":"98bcfc1f-7b11-42a8-f20d-d6c4d43531e5"},"execution_count":1,"outputs":[{"output_type":"stream","name":"stdout","text":["Collecting voila\n"," Downloading voila-0.5.10-py3-none-any.whl.metadata (9.4 kB)\n","Collecting jupyter-client<9,>=7.4.4 (from voila)\n"," Downloading jupyter_client-8.6.3-py3-none-any.whl.metadata (8.3 kB)\n","Requirement already satisfied: jupyter-core>=4.11.0 in /usr/local/lib/python3.12/dist-packages (from voila) (5.8.1)\n","Collecting jupyter-server<3,>=1.18 (from voila)\n"," Downloading jupyter_server-2.16.0-py3-none-any.whl.metadata (8.5 kB)\n","Collecting jupyterlab-server<3,>=2.3.0 (from voila)\n"," Downloading jupyterlab_server-2.27.3-py3-none-any.whl.metadata (5.9 kB)\n","Requirement already satisfied: nbclient>=0.4.0 in /usr/local/lib/python3.12/dist-packages (from voila) (0.10.2)\n","Requirement already satisfied: nbconvert<8,>=6.4.5 in /usr/local/lib/python3.12/dist-packages (from voila) (7.16.6)\n","Requirement already satisfied: traitlets<6,>=5.0.3 in /usr/local/lib/python3.12/dist-packages (from voila) (5.7.1)\n","Requirement already satisfied: websockets>=9.0 in /usr/local/lib/python3.12/dist-packages (from voila) (15.0.1)\n","Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.12/dist-packages (from jupyter-client<9,>=7.4.4->voila) (2.9.0.post0)\n","Requirement already satisfied: pyzmq>=23.0 in /usr/local/lib/python3.12/dist-packages (from jupyter-client<9,>=7.4.4->voila) (26.2.1)\n","Requirement already satisfied: tornado>=6.2 in /usr/local/lib/python3.12/dist-packages (from jupyter-client<9,>=7.4.4->voila) (6.4.2)\n","Requirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.12/dist-packages (from jupyter-core>=4.11.0->voila) (4.3.8)\n","Requirement already satisfied: anyio>=3.1.0 in /usr/local/lib/python3.12/dist-packages (from jupyter-server<3,>=1.18->voila) (4.10.0)\n","Requirement already satisfied: argon2-cffi>=21.1 in /usr/local/lib/python3.12/dist-packages (from jupyter-server<3,>=1.18->voila) (25.1.0)\n","Requirement already satisfied: jinja2>=3.0.3 in /usr/local/lib/python3.12/dist-packages (from jupyter-server<3,>=1.18->voila) (3.1.6)\n","Collecting jupyter-events>=0.11.0 (from jupyter-server<3,>=1.18->voila)\n"," Downloading jupyter_events-0.12.0-py3-none-any.whl.metadata (5.8 kB)\n","Collecting jupyter-server-terminals>=0.4.4 (from jupyter-server<3,>=1.18->voila)\n"," Downloading jupyter_server_terminals-0.5.3-py3-none-any.whl.metadata (5.6 kB)\n","Requirement already satisfied: nbformat>=5.3.0 in /usr/local/lib/python3.12/dist-packages (from jupyter-server<3,>=1.18->voila) (5.10.4)\n","Collecting overrides>=5.0 (from jupyter-server<3,>=1.18->voila)\n"," Downloading overrides-7.7.0-py3-none-any.whl.metadata (5.8 kB)\n","Requirement already satisfied: packaging>=22.0 in /usr/local/lib/python3.12/dist-packages (from jupyter-server<3,>=1.18->voila) (25.0)\n","Requirement already satisfied: prometheus-client>=0.9 in /usr/local/lib/python3.12/dist-packages (from jupyter-server<3,>=1.18->voila) (0.22.1)\n","Requirement already satisfied: send2trash>=1.8.2 in /usr/local/lib/python3.12/dist-packages (from jupyter-server<3,>=1.18->voila) (1.8.3)\n","Requirement already satisfied: terminado>=0.8.3 in /usr/local/lib/python3.12/dist-packages (from jupyter-server<3,>=1.18->voila) (0.18.1)\n","Requirement already satisfied: websocket-client>=1.7 in /usr/local/lib/python3.12/dist-packages (from jupyter-server<3,>=1.18->voila) (1.8.0)\n","Requirement already satisfied: babel>=2.10 in /usr/local/lib/python3.12/dist-packages (from jupyterlab-server<3,>=2.3.0->voila) (2.17.0)\n","Collecting json5>=0.9.0 (from jupyterlab-server<3,>=2.3.0->voila)\n"," Downloading json5-0.12.1-py3-none-any.whl.metadata (36 kB)\n","Requirement already satisfied: jsonschema>=4.18.0 in /usr/local/lib/python3.12/dist-packages (from jupyterlab-server<3,>=2.3.0->voila) (4.25.0)\n","Requirement already satisfied: requests>=2.31 in /usr/local/lib/python3.12/dist-packages (from jupyterlab-server<3,>=2.3.0->voila) (2.32.3)\n","Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.12/dist-packages (from nbconvert<8,>=6.4.5->voila) (4.13.4)\n","Requirement already satisfied: bleach!=5.0.0 in /usr/local/lib/python3.12/dist-packages (from bleach[css]!=5.0.0->nbconvert<8,>=6.4.5->voila) (6.2.0)\n","Requirement already satisfied: defusedxml in /usr/local/lib/python3.12/dist-packages (from nbconvert<8,>=6.4.5->voila) (0.7.1)\n","Requirement already satisfied: jupyterlab-pygments in /usr/local/lib/python3.12/dist-packages (from nbconvert<8,>=6.4.5->voila) (0.3.0)\n","Requirement already satisfied: markupsafe>=2.0 in /usr/local/lib/python3.12/dist-packages (from nbconvert<8,>=6.4.5->voila) (3.0.2)\n","Requirement already satisfied: mistune<4,>=2.0.3 in /usr/local/lib/python3.12/dist-packages (from nbconvert<8,>=6.4.5->voila) (3.1.3)\n","Requirement already satisfied: pandocfilters>=1.4.1 in /usr/local/lib/python3.12/dist-packages (from nbconvert<8,>=6.4.5->voila) (1.5.1)\n","Requirement already satisfied: pygments>=2.4.1 in /usr/local/lib/python3.12/dist-packages (from nbconvert<8,>=6.4.5->voila) (2.19.2)\n","Requirement already satisfied: idna>=2.8 in /usr/local/lib/python3.12/dist-packages (from anyio>=3.1.0->jupyter-server<3,>=1.18->voila) (3.10)\n","Requirement already satisfied: sniffio>=1.1 in /usr/local/lib/python3.12/dist-packages (from anyio>=3.1.0->jupyter-server<3,>=1.18->voila) (1.3.1)\n","Requirement already satisfied: typing_extensions>=4.5 in /usr/local/lib/python3.12/dist-packages (from anyio>=3.1.0->jupyter-server<3,>=1.18->voila) (4.14.1)\n","Requirement already satisfied: argon2-cffi-bindings in /usr/local/lib/python3.12/dist-packages (from argon2-cffi>=21.1->jupyter-server<3,>=1.18->voila) (25.1.0)\n","Requirement already satisfied: webencodings in /usr/local/lib/python3.12/dist-packages (from bleach!=5.0.0->bleach[css]!=5.0.0->nbconvert<8,>=6.4.5->voila) (0.5.1)\n","Requirement already satisfied: tinycss2<1.5,>=1.1.0 in /usr/local/lib/python3.12/dist-packages (from bleach[css]!=5.0.0->nbconvert<8,>=6.4.5->voila) (1.4.0)\n","Requirement already satisfied: attrs>=22.2.0 in /usr/local/lib/python3.12/dist-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.3.0->voila) (25.3.0)\n","Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.12/dist-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.3.0->voila) (2025.4.1)\n","Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.12/dist-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.3.0->voila) (0.36.2)\n","Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.12/dist-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.3.0->voila) (0.27.0)\n","Collecting python-json-logger>=2.0.4 (from jupyter-events>=0.11.0->jupyter-server<3,>=1.18->voila)\n"," Downloading python_json_logger-3.3.0-py3-none-any.whl.metadata (4.0 kB)\n","Requirement already satisfied: pyyaml>=5.3 in /usr/local/lib/python3.12/dist-packages (from jupyter-events>=0.11.0->jupyter-server<3,>=1.18->voila) (6.0.2)\n","Collecting rfc3339-validator (from jupyter-events>=0.11.0->jupyter-server<3,>=1.18->voila)\n"," Downloading rfc3339_validator-0.1.4-py2.py3-none-any.whl.metadata (1.5 kB)\n","Collecting rfc3986-validator>=0.1.1 (from jupyter-events>=0.11.0->jupyter-server<3,>=1.18->voila)\n"," Downloading rfc3986_validator-0.1.1-py2.py3-none-any.whl.metadata (1.7 kB)\n","Requirement already satisfied: fastjsonschema>=2.15 in /usr/local/lib/python3.12/dist-packages (from nbformat>=5.3.0->jupyter-server<3,>=1.18->voila) (2.21.2)\n","Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.12/dist-packages (from python-dateutil>=2.8.2->jupyter-client<9,>=7.4.4->voila) (1.17.0)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.12/dist-packages (from requests>=2.31->jupyterlab-server<3,>=2.3.0->voila) (3.4.3)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.12/dist-packages (from requests>=2.31->jupyterlab-server<3,>=2.3.0->voila) (2.5.0)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.12/dist-packages (from requests>=2.31->jupyterlab-server<3,>=2.3.0->voila) (2025.8.3)\n","Requirement already satisfied: ptyprocess in /usr/local/lib/python3.12/dist-packages (from terminado>=0.8.3->jupyter-server<3,>=1.18->voila) (0.7.0)\n","Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.12/dist-packages (from beautifulsoup4->nbconvert<8,>=6.4.5->voila) (2.7)\n","Collecting fqdn (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=1.18->voila)\n"," Downloading fqdn-1.5.1-py3-none-any.whl.metadata (1.4 kB)\n","Collecting isoduration (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=1.18->voila)\n"," Downloading isoduration-20.11.0-py3-none-any.whl.metadata (5.7 kB)\n","Requirement already satisfied: jsonpointer>1.13 in /usr/local/lib/python3.12/dist-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=1.18->voila) (3.0.0)\n","Collecting rfc3987-syntax>=1.1.0 (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=1.18->voila)\n"," Downloading rfc3987_syntax-1.1.0-py3-none-any.whl.metadata (7.7 kB)\n","Collecting uri-template (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=1.18->voila)\n"," Downloading uri_template-1.3.0-py3-none-any.whl.metadata (8.8 kB)\n","Requirement already satisfied: webcolors>=24.6.0 in /usr/local/lib/python3.12/dist-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=1.18->voila) (24.11.1)\n","Requirement already satisfied: cffi>=1.0.1 in /usr/local/lib/python3.12/dist-packages (from argon2-cffi-bindings->argon2-cffi>=21.1->jupyter-server<3,>=1.18->voila) (1.17.1)\n","Requirement already satisfied: pycparser in /usr/local/lib/python3.12/dist-packages (from cffi>=1.0.1->argon2-cffi-bindings->argon2-cffi>=21.1->jupyter-server<3,>=1.18->voila) (2.22)\n","Collecting lark>=1.2.2 (from rfc3987-syntax>=1.1.0->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=1.18->voila)\n"," Downloading lark-1.2.2-py3-none-any.whl.metadata (1.8 kB)\n","Collecting arrow>=0.15.0 (from isoduration->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=1.18->voila)\n"," Downloading arrow-1.3.0-py3-none-any.whl.metadata (7.5 kB)\n","Collecting types-python-dateutil>=2.8.10 (from arrow>=0.15.0->isoduration->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=1.18->voila)\n"," Downloading types_python_dateutil-2.9.0.20250809-py3-none-any.whl.metadata (1.8 kB)\n","Downloading voila-0.5.10-py3-none-any.whl (4.5 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.5/4.5 MB\u001b[0m \u001b[31m32.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hDownloading jupyter_client-8.6.3-py3-none-any.whl (106 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m106.1/106.1 kB\u001b[0m \u001b[31m5.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hDownloading jupyter_server-2.16.0-py3-none-any.whl (386 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m386.9/386.9 kB\u001b[0m \u001b[31m17.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hDownloading jupyterlab_server-2.27.3-py3-none-any.whl (59 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m59.7/59.7 kB\u001b[0m \u001b[31m4.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hDownloading json5-0.12.1-py3-none-any.whl (36 kB)\n","Downloading jupyter_events-0.12.0-py3-none-any.whl (19 kB)\n","Downloading jupyter_server_terminals-0.5.3-py3-none-any.whl (13 kB)\n","Downloading overrides-7.7.0-py3-none-any.whl (17 kB)\n","Downloading python_json_logger-3.3.0-py3-none-any.whl (15 kB)\n","Downloading rfc3986_validator-0.1.1-py2.py3-none-any.whl (4.2 kB)\n","Downloading rfc3339_validator-0.1.4-py2.py3-none-any.whl (3.5 kB)\n","Downloading rfc3987_syntax-1.1.0-py3-none-any.whl (8.0 kB)\n","Downloading fqdn-1.5.1-py3-none-any.whl (9.1 kB)\n","Downloading isoduration-20.11.0-py3-none-any.whl (11 kB)\n","Downloading uri_template-1.3.0-py3-none-any.whl (11 kB)\n","Downloading arrow-1.3.0-py3-none-any.whl (66 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m66.4/66.4 kB\u001b[0m \u001b[31m4.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hDownloading lark-1.2.2-py3-none-any.whl (111 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m111.0/111.0 kB\u001b[0m \u001b[31m6.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hDownloading types_python_dateutil-2.9.0.20250809-py3-none-any.whl (17 kB)\n","Installing collected packages: uri-template, types-python-dateutil, rfc3986-validator, rfc3339-validator, python-json-logger, overrides, lark, json5, fqdn, rfc3987-syntax, jupyter-server-terminals, jupyter-client, arrow, isoduration, jupyter-events, jupyter-server, jupyterlab-server, voila\n"," Attempting uninstall: jupyter-client\n"," Found existing installation: jupyter-client 6.1.12\n"," Uninstalling jupyter-client-6.1.12:\n"," Successfully uninstalled jupyter-client-6.1.12\n"," Attempting uninstall: jupyter-server\n"," Found existing installation: jupyter-server 1.16.0\n"," Uninstalling jupyter-server-1.16.0:\n"," Successfully uninstalled jupyter-server-1.16.0\n","\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n","google-colab 1.0.0 requires jupyter-server==1.16.0, but you have jupyter-server 2.16.0 which is incompatible.\n","notebook 6.5.7 requires jupyter-client<8,>=5.3.4, but you have jupyter-client 8.6.3 which is incompatible.\n","jupyter-kernel-gateway 2.5.2 requires jupyter-client<8.0,>=5.2.0, but you have jupyter-client 8.6.3 which is incompatible.\u001b[0m\u001b[31m\n","\u001b[0mSuccessfully installed arrow-1.3.0 fqdn-1.5.1 isoduration-20.11.0 json5-0.12.1 jupyter-client-8.6.3 jupyter-events-0.12.0 jupyter-server-2.16.0 jupyter-server-terminals-0.5.3 jupyterlab-server-2.27.3 lark-1.2.2 overrides-7.7.0 python-json-logger-3.3.0 rfc3339-validator-0.1.4 rfc3986-validator-0.1.1 rfc3987-syntax-1.1.0 types-python-dateutil-2.9.0.20250809 uri-template-1.3.0 voila-0.5.10\n"]}]},{"cell_type":"code","source":["!pip install streamlit\n"],"metadata":{"id":"bkdbpKsm0hx8","executionInfo":{"status":"ok","timestamp":1755699103679,"user_tz":-60,"elapsed":8295,"user":{"displayName":"Arun Sankar Sreethar","userId":"01453538360872467285"}},"outputId":"73afe55f-8b91-4ec4-a6f9-ab083e0fddff","colab":{"base_uri":"https://localhost:8080/"}},"execution_count":2,"outputs":[{"output_type":"stream","name":"stdout","text":["Collecting streamlit\n"," Downloading streamlit-1.48.1-py3-none-any.whl.metadata (9.5 kB)\n","Requirement already satisfied: altair!=5.4.0,!=5.4.1,<6,>=4.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (5.5.0)\n","Requirement already satisfied: blinker<2,>=1.5.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (1.9.0)\n","Requirement already satisfied: cachetools<7,>=4.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (5.5.2)\n","Requirement already satisfied: click<9,>=7.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (8.2.1)\n","Requirement already satisfied: numpy<3,>=1.23 in /usr/local/lib/python3.12/dist-packages (from streamlit) (2.0.2)\n","Requirement already satisfied: packaging<26,>=20 in /usr/local/lib/python3.12/dist-packages (from streamlit) (25.0)\n","Requirement already satisfied: pandas<3,>=1.4.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (2.2.2)\n","Requirement already satisfied: pillow<12,>=7.1.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (11.3.0)\n","Requirement already satisfied: protobuf<7,>=3.20 in /usr/local/lib/python3.12/dist-packages (from streamlit) (5.29.5)\n","Requirement already satisfied: pyarrow>=7.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (18.1.0)\n","Requirement already satisfied: requests<3,>=2.27 in /usr/local/lib/python3.12/dist-packages (from streamlit) (2.32.3)\n","Requirement already satisfied: tenacity<10,>=8.1.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (9.1.2)\n","Requirement already satisfied: toml<2,>=0.10.1 in /usr/local/lib/python3.12/dist-packages (from streamlit) (0.10.2)\n","Requirement already satisfied: typing-extensions<5,>=4.4.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (4.14.1)\n","Collecting watchdog<7,>=2.1.5 (from streamlit)\n"," Downloading watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl.metadata (44 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m44.3/44.3 kB\u001b[0m \u001b[31m2.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: gitpython!=3.1.19,<4,>=3.0.7 in /usr/local/lib/python3.12/dist-packages (from streamlit) (3.1.45)\n","Collecting pydeck<1,>=0.8.0b4 (from streamlit)\n"," Downloading pydeck-0.9.1-py2.py3-none-any.whl.metadata (4.1 kB)\n","Requirement already satisfied: tornado!=6.5.0,<7,>=6.0.3 in /usr/local/lib/python3.12/dist-packages (from streamlit) (6.4.2)\n","Requirement already satisfied: jinja2 in /usr/local/lib/python3.12/dist-packages (from altair!=5.4.0,!=5.4.1,<6,>=4.0->streamlit) (3.1.6)\n","Requirement already satisfied: jsonschema>=3.0 in /usr/local/lib/python3.12/dist-packages (from altair!=5.4.0,!=5.4.1,<6,>=4.0->streamlit) (4.25.0)\n","Requirement already satisfied: narwhals>=1.14.2 in /usr/local/lib/python3.12/dist-packages (from altair!=5.4.0,!=5.4.1,<6,>=4.0->streamlit) (2.1.1)\n","Requirement already satisfied: gitdb<5,>=4.0.1 in /usr/local/lib/python3.12/dist-packages (from gitpython!=3.1.19,<4,>=3.0.7->streamlit) (4.0.12)\n","Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.12/dist-packages (from pandas<3,>=1.4.0->streamlit) (2.9.0.post0)\n","Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.12/dist-packages (from pandas<3,>=1.4.0->streamlit) (2025.2)\n","Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.12/dist-packages (from pandas<3,>=1.4.0->streamlit) (2025.2)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.12/dist-packages (from requests<3,>=2.27->streamlit) (3.4.3)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.12/dist-packages (from requests<3,>=2.27->streamlit) (3.10)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.12/dist-packages (from requests<3,>=2.27->streamlit) (2.5.0)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.12/dist-packages (from requests<3,>=2.27->streamlit) (2025.8.3)\n","Requirement already satisfied: smmap<6,>=3.0.1 in /usr/local/lib/python3.12/dist-packages (from gitdb<5,>=4.0.1->gitpython!=3.1.19,<4,>=3.0.7->streamlit) (5.0.2)\n","Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.12/dist-packages (from jinja2->altair!=5.4.0,!=5.4.1,<6,>=4.0->streamlit) (3.0.2)\n","Requirement already satisfied: attrs>=22.2.0 in /usr/local/lib/python3.12/dist-packages (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<6,>=4.0->streamlit) (25.3.0)\n","Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.12/dist-packages (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<6,>=4.0->streamlit) (2025.4.1)\n","Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.12/dist-packages (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<6,>=4.0->streamlit) (0.36.2)\n","Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.12/dist-packages (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<6,>=4.0->streamlit) (0.27.0)\n","Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.12/dist-packages (from python-dateutil>=2.8.2->pandas<3,>=1.4.0->streamlit) (1.17.0)\n","Downloading streamlit-1.48.1-py3-none-any.whl (9.9 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m9.9/9.9 MB\u001b[0m \u001b[31m92.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hDownloading pydeck-0.9.1-py2.py3-none-any.whl (6.9 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.9/6.9 MB\u001b[0m \u001b[31m115.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hDownloading watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl (79 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m79.1/79.1 kB\u001b[0m \u001b[31m6.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hInstalling collected packages: watchdog, pydeck, streamlit\n","Successfully installed pydeck-0.9.1 streamlit-1.48.1 watchdog-6.0.0\n"]}]},{"cell_type":"markdown","metadata":{"id":"ffe844c3"},"source":["# Task\n","Explain the error in the provided Python code for curve generation, fix it, and rewrite the code to work in Google Colab with a graphical user interface using `ipywidgets`. The GUI should include input fields for data points and step size, and display the generated curve and plot."]},{"cell_type":"markdown","metadata":{"id":"3a4efc3b"},"source":["## Install ipywidgets\n","\n","### Subtask:\n","Install the `ipywidgets` library.\n"]},{"cell_type":"markdown","metadata":{"id":"cb9c4982"},"source":["**Reasoning**:\n","The subtask is to install the `ipywidgets` library. This can be done using a shell command with pip.\n","\n"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"362b3882","executionInfo":{"status":"ok","timestamp":1755175137255,"user_tz":-60,"elapsed":9951,"user":{"displayName":"Arun Sankar Sreethar","userId":"01453538360872467285"}},"outputId":"d6beb585-565b-42b4-dd45-3479f6b4acba"},"source":["pip install ipywidgets"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Requirement already satisfied: ipywidgets in /usr/local/lib/python3.11/dist-packages (7.7.1)\n","Requirement already satisfied: ipykernel>=4.5.1 in /usr/local/lib/python3.11/dist-packages (from ipywidgets) (6.17.1)\n","Requirement already satisfied: ipython-genutils~=0.2.0 in /usr/local/lib/python3.11/dist-packages (from ipywidgets) (0.2.0)\n","Requirement already satisfied: traitlets>=4.3.1 in /usr/local/lib/python3.11/dist-packages (from ipywidgets) (5.7.1)\n","Requirement already satisfied: widgetsnbextension~=3.6.0 in /usr/local/lib/python3.11/dist-packages (from ipywidgets) (3.6.10)\n","Requirement already satisfied: ipython>=4.0.0 in /usr/local/lib/python3.11/dist-packages (from ipywidgets) (7.34.0)\n","Requirement already satisfied: jupyterlab-widgets>=1.0.0 in /usr/local/lib/python3.11/dist-packages (from ipywidgets) (3.0.15)\n","Requirement already satisfied: debugpy>=1.0 in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets) (1.8.15)\n","Requirement already satisfied: jupyter-client>=6.1.12 in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets) (6.1.12)\n","Requirement already satisfied: matplotlib-inline>=0.1 in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets) (0.1.7)\n","Requirement already satisfied: nest-asyncio in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets) (1.6.0)\n","Requirement already satisfied: packaging in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets) (25.0)\n","Requirement already satisfied: psutil in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets) (5.9.5)\n","Requirement already satisfied: pyzmq>=17 in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets) (26.2.1)\n","Requirement already satisfied: tornado>=6.1 in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets) (6.4.2)\n","Requirement already satisfied: setuptools>=18.5 in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets) (75.2.0)\n","Collecting jedi>=0.16 (from ipython>=4.0.0->ipywidgets)\n"," Downloading jedi-0.19.2-py2.py3-none-any.whl.metadata (22 kB)\n","Requirement already satisfied: decorator in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets) (4.4.2)\n","Requirement already satisfied: pickleshare in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets) (0.7.5)\n","Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets) (3.0.51)\n","Requirement already satisfied: pygments in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets) (2.19.2)\n","Requirement already satisfied: backcall in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets) (0.2.0)\n","Requirement already satisfied: pexpect>4.3 in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets) (4.9.0)\n","Requirement already satisfied: notebook>=4.4.1 in /usr/local/lib/python3.11/dist-packages (from widgetsnbextension~=3.6.0->ipywidgets) (6.5.7)\n","Requirement already satisfied: parso<0.9.0,>=0.8.4 in /usr/local/lib/python3.11/dist-packages (from jedi>=0.16->ipython>=4.0.0->ipywidgets) (0.8.4)\n","Requirement already satisfied: jupyter-core>=4.6.0 in /usr/local/lib/python3.11/dist-packages (from jupyter-client>=6.1.12->ipykernel>=4.5.1->ipywidgets) (5.8.1)\n","Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.11/dist-packages (from jupyter-client>=6.1.12->ipykernel>=4.5.1->ipywidgets) (2.9.0.post0)\n","Requirement already satisfied: jinja2 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (3.1.6)\n","Requirement already satisfied: argon2-cffi in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (25.1.0)\n","Requirement already satisfied: nbformat in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (5.10.4)\n","Requirement already satisfied: nbconvert>=5 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (7.16.6)\n","Requirement already satisfied: Send2Trash>=1.8.0 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (1.8.3)\n","Requirement already satisfied: terminado>=0.8.3 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (0.18.1)\n","Requirement already satisfied: prometheus-client in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (0.22.1)\n","Requirement already satisfied: nbclassic>=0.4.7 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (1.3.1)\n","Requirement already satisfied: ptyprocess>=0.5 in /usr/local/lib/python3.11/dist-packages (from pexpect>4.3->ipython>=4.0.0->ipywidgets) (0.7.0)\n","Requirement already satisfied: wcwidth in /usr/local/lib/python3.11/dist-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython>=4.0.0->ipywidgets) (0.2.13)\n","Requirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.11/dist-packages (from jupyter-core>=4.6.0->jupyter-client>=6.1.12->ipykernel>=4.5.1->ipywidgets) (4.3.8)\n","Requirement already satisfied: notebook-shim>=0.2.3 in /usr/local/lib/python3.11/dist-packages (from nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (0.2.4)\n","Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (4.13.4)\n","Requirement already satisfied: bleach!=5.0.0 in /usr/local/lib/python3.11/dist-packages (from bleach[css]!=5.0.0->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (6.2.0)\n","Requirement already satisfied: defusedxml in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (0.7.1)\n","Requirement already satisfied: jupyterlab-pygments in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (0.3.0)\n","Requirement already satisfied: markupsafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (3.0.2)\n","Requirement already satisfied: mistune<4,>=2.0.3 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (3.1.3)\n","Requirement already satisfied: nbclient>=0.5.0 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (0.10.2)\n","Requirement already satisfied: pandocfilters>=1.4.1 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (1.5.1)\n","Requirement already satisfied: fastjsonschema>=2.15 in /usr/local/lib/python3.11/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (2.21.1)\n","Requirement already satisfied: jsonschema>=2.6 in /usr/local/lib/python3.11/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (4.25.0)\n","Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.11/dist-packages (from python-dateutil>=2.1->jupyter-client>=6.1.12->ipykernel>=4.5.1->ipywidgets) (1.17.0)\n","Requirement already satisfied: argon2-cffi-bindings in /usr/local/lib/python3.11/dist-packages (from argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (25.1.0)\n","Requirement already satisfied: webencodings in /usr/local/lib/python3.11/dist-packages (from bleach!=5.0.0->bleach[css]!=5.0.0->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (0.5.1)\n","Requirement already satisfied: tinycss2<1.5,>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from bleach[css]!=5.0.0->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (1.4.0)\n","Requirement already satisfied: attrs>=22.2.0 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (25.3.0)\n","Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (2025.4.1)\n","Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (0.36.2)\n","Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (0.27.0)\n","Requirement already satisfied: jupyter-server<3,>=1.8 in /usr/local/lib/python3.11/dist-packages (from notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (1.16.0)\n","Requirement already satisfied: cffi>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from argon2-cffi-bindings->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (1.17.1)\n","Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.11/dist-packages (from beautifulsoup4->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (2.7)\n","Requirement already satisfied: typing-extensions>=4.0.0 in /usr/local/lib/python3.11/dist-packages (from beautifulsoup4->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (4.14.1)\n","Requirement already satisfied: pycparser in /usr/local/lib/python3.11/dist-packages (from cffi>=1.0.1->argon2-cffi-bindings->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (2.22)\n","Requirement already satisfied: anyio>=3.1.0 in /usr/local/lib/python3.11/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (4.10.0)\n","Requirement already satisfied: websocket-client in /usr/local/lib/python3.11/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (1.8.0)\n","Requirement already satisfied: idna>=2.8 in /usr/local/lib/python3.11/dist-packages (from anyio>=3.1.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (3.10)\n","Requirement already satisfied: sniffio>=1.1 in /usr/local/lib/python3.11/dist-packages (from anyio>=3.1.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets) (1.3.1)\n","Downloading jedi-0.19.2-py2.py3-none-any.whl (1.6 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.6/1.6 MB\u001b[0m \u001b[31m28.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hInstalling collected packages: jedi\n","Successfully installed jedi-0.19.2\n"]}]},{"cell_type":"markdown","metadata":{"id":"061e96fe"},"source":["## Import necessary libraries\n","\n","### Subtask:\n","Import the necessary libraries for creating the GUI and displaying output in Google Colab.\n"]},{"cell_type":"markdown","metadata":{"id":"d51ee04e"},"source":["**Reasoning**:\n","Import the necessary libraries for creating the GUI and displaying output in Google Colab as instructed.\n","\n"]},{"cell_type":"code","metadata":{"id":"57fe3542"},"source":["import ipywidgets as widgets\n","from IPython.display import display"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"92edb73d"},"source":["## Create input widgets\n","\n","### Subtask:\n","Create `Textarea` widgets for data input and a `FloatText` widget for step size input.\n"]},{"cell_type":"markdown","metadata":{"id":"6b337606"},"source":["**Reasoning**:\n","Instantiate the `Textarea` and `FloatText` widgets as described in the instructions.\n","\n"]},{"cell_type":"code","metadata":{"id":"859a5b76"},"source":["data_input = \"\"\"\n","0.00,0.00\n","0.05,0.10\n","0.10,0.25\n","0.15,0.45\n","0.20,0.70\n","0.25,1.00\n","0.30,1.35\n","0.35,1.75\n","0.40,2.20\n","0.45,2.70\n","0.50,3.25\n","0.55,3.85\n","0.60,4.50\n","0.65,5.20\n","0.70,5.95\n","0.75,6.75\n","0.80,7.60\n","0.85,8.50\n","0.90,9.45\n","0.95,10.45\n","1.00,11.50\n","\"\"\"\n","\n","step_size = 0.005\n","\n","data_input_widget = widgets.Textarea(\n"," value=data_input,\n"," description='Enter data (x,y per line):',\n"," layout={'height': '200px', 'width': '400px'}\n",")\n","\n","step_size_widget = widgets.FloatText(\n"," value=step_size,\n"," description='Step Size:'\n",")"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"f090ca57"},"source":["## Create an output widget\n","\n","### Subtask:\n","Create an `Output` widget to display the interpolated results and the plot.\n"]},{"cell_type":"markdown","metadata":{"id":"8e50597a"},"source":["**Reasoning**:\n","Create an Output widget to display results and plots.\n","\n"]},{"cell_type":"code","metadata":{"id":"1609d3a9"},"source":["output_widget = widgets.Output()"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"85bf9b7c"},"source":["## Define an interactive function\n","\n","### Subtask:\n","Create a function that takes the widget values as input, calls the `generate_curve` function, and displays the output in the output widget.\n"]},{"cell_type":"markdown","metadata":{"id":"bbe15ea1"},"source":["**Reasoning**:\n","Define the interactive function that takes widget values, clears the output, calls the curve generation function, and displays the results.\n","\n"]},{"cell_type":"code","metadata":{"id":"251f5cb7"},"source":["def interactive_generate_curve(data_str, step_size):\n"," with output_widget:\n"," output_widget.clear_output()\n"," interpolated_results = generate_curve(data_str, step_size)\n"," if interpolated_results:\n"," print(\"Interpolated Results:\")\n"," print(interpolated_results)"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"b2a1633c"},"source":["## Link widgets and display\n","\n","### Subtask:\n","Use `widgets.interactive_output` to link the input widgets to the interactive function and display the input widgets and the output widget.\n"]},{"cell_type":"markdown","metadata":{"id":"6ded93de"},"source":["**Reasoning**:\n","Link the input widgets to the interactive function and display the widgets and output.\n","\n"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":272,"referenced_widgets":["498eccf3f95d4bee9543f7c408c21eb3","56789a857e9f40d89df6d7f15f6dbe8d","d7b1d9aede5645e7a822c055240796af","6d0ada32ac1f4c4c93298dc469869920","e75a0402453244d2a2486f238ba45abc","a4a8f19565214a46989d989e75a521fd","63fa685a9c5749ce8c72c34ab94842bf","dc8102f951134621b02e5b7ca125d9d3","6303e4bac1124de19a56c02f0e0674e3","1177608448d54e3f876a286e6935d222"]},"id":"68725b18","executionInfo":{"status":"ok","timestamp":1755175499425,"user_tz":-60,"elapsed":44,"user":{"displayName":"Arun Sankar Sreethar","userId":"01453538360872467285"}},"outputId":"51b77cba-d7f2-4e78-ee58-c4edb53d5839"},"source":["interactive_plot = widgets.interactive_output(\n"," interactive_generate_curve,\n"," {'data_str': data_input_widget, 'step_size': step_size_widget}\n",")\n","\n","input_widgets_container = widgets.VBox([data_input_widget, step_size_widget])\n","\n","display(input_widgets_container, output_widget)"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["VBox(children=(Textarea(value='\\n0.00,0.00\\n0.05,0.10\\n0.10,0.25\\n0.15,0.45\\n0.20,0.70\\n0.25,1.00\\n0.30,1.35\\n…"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"498eccf3f95d4bee9543f7c408c21eb3"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["Output()"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"6303e4bac1124de19a56c02f0e0674e3"}},"metadata":{}}]},{"cell_type":"markdown","metadata":{"id":"931ed37b"},"source":["## Refine the display\n","\n","### Subtask:\n","Improve the presentation of the input widgets and output, potentially using a `VBox` to arrange them.\n"]},{"cell_type":"markdown","metadata":{"id":"1061bbbb"},"source":["## Summary:\n","\n","### Data Analysis Key Findings\n","\n","* The `ipywidgets` library was successfully installed and its dependencies were satisfied in the Google Colab environment.\n","* `ipywidgets.Textarea` and `ipywidgets.FloatText` widgets were successfully created to capture data input and step size respectively.\n","* An `ipywidgets.Output` widget was created to serve as the display area for results and plots.\n","* An interactive Python function was defined to process the input widget values and utilize a curve generation function (which is expected to be defined later).\n","* `ipywidgets.interactive_output` was successfully used to link the input widgets to the interactive function, enabling dynamic updates based on user interaction.\n","* The input widgets and the output widget were successfully displayed in the notebook using `IPython.display.display`, with input widgets organized in a vertical box using `ipywidgets.VBox`.\n","\n","### Insights or Next Steps\n","\n","* The next crucial step is to define and implement the `generate_curve` function, which will perform the actual data parsing, error handling, curve generation (including interpolation), and plotting.\n","* The `interactive_generate_curve` function should be enhanced to handle potential errors during data parsing or curve generation and display informative messages to the user within the `output_widget`.\n"]}]}