diff --git a/.circleci/config.yml b/.circleci/config.yml index f393378bc..a5618f363 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2.1 executors: grid2op-executor: docker: - - image: bdonnot/grid2op:test + - image: python:3.10-buster working_directory: /Grid2Op python37: @@ -29,6 +29,7 @@ jobs: parallelism: 4 steps: - checkout + - run: apt-get update -y - run: apt-get install -y coinor-cbc - run: python -m pip install virtualenv - run: python -m virtualenv venv_test diff --git a/.gitignore b/.gitignore index 2dc7408af..b7b8900c8 100644 --- a/.gitignore +++ b/.gitignore @@ -386,6 +386,12 @@ test_malte.py example_gym_act.py test_to_fix.txt doc_raise_alert.py +_profiling/profile.html +_profiling/profile.json +actspace_converter.py +grid2op/data_test/input_data_local/ +test_sim2real_battery.py +grid2op/tests/list_test_debug # profiling files **.prof diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 56735a746..a13bb88dc 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -31,10 +31,16 @@ Change Log - [???] "asynch" multienv - [???] properly model interconnecting powerlines -[1.9.5] - 2023-xx-yy +[1.9.5] - 2023-09-18 --------------------- -- XXX - +- [FIXED] issue https://github.com/rte-france/Grid2Op/issues/518 +- [FIXED] issue https://github.com/rte-france/Grid2Op/issues/446 +- [FIXED] issue https://github.com/rte-france/Grid2Op/issues/523 by having a "_BackendAction" folder instead of a file +- [FIXED] issue https://github.com/rte-france/Grid2Op/issues/522 and adding back certain notebooks to the CI +- [FIXED] an issue when disconnecting loads / generators on msot recent pandas version +- [FIXED] issue https://github.com/rte-france/Grid2Op/issues/527 : now do nothing action are detected in + `act.as_serializable_dict()` AND weird do nothing action can be made through the action space + (`env.action_space({"change_bus": {}})` is not ambiguous, though might not be super efficient...) [1.9.4] - 2023-09-04 --------------------- diff --git a/_profiling/profiler_assessment.py b/_profiling/profiler_assessment.py index 95aef78bb..3624dcd1d 100644 --- a/_profiling/profiler_assessment.py +++ b/_profiling/profiler_assessment.py @@ -28,7 +28,7 @@ from utils_benchmark import run_env, str2bool, ProfileAgent try: - from lightsim2grid.LightSimBackend import LightSimBackend + from lightsim2grid import LightSimBackend light_sim_avail = True except ImportError: light_sim_avail = False diff --git a/_profiling/utils_benchmark.py b/_profiling/utils_benchmark.py index e8a732b83..af207d7d2 100644 --- a/_profiling/utils_benchmark.py +++ b/_profiling/utils_benchmark.py @@ -152,9 +152,9 @@ def __init__(self, self.action_space.all_actions = all_actions # add the action "reset everything to bus 1" - self.action_space.all_actions.append(action_space({"set_bus": np.ones(action_space.dim_topo, dtype=np.int), + self.action_space.all_actions.append(action_space({"set_bus": np.ones(action_space.dim_topo, dtype=int), "set_line_status": np.ones(action_space.n_line, - dtype=np.int)})) + dtype=int)})) def print_res(env_klu, env_pp, diff --git a/getting_started/01_Grid2opFramework.ipynb b/getting_started/01_Grid2opFramework.ipynb index bd11a4be2..8a6e1745f 100644 --- a/getting_started/01_Grid2opFramework.ipynb +++ b/getting_started/01_Grid2opFramework.ipynb @@ -187,7 +187,7 @@ "\n", "custom_params = Parameters()\n", "custom_params.MAX_SUB_CHANGED = 1\n", - "env = grid2op.make(\"rte_case14_redisp\", param=custom_params, test=True)" + "env = grid2op.make(\"l2rpn_case14_sandbox\", param=custom_params, test=True)" ] }, { diff --git a/getting_started/02_Observation.ipynb b/getting_started/02_Observation.ipynb index ac9a1d59f..bb2203a44 100644 --- a/getting_started/02_Observation.ipynb +++ b/getting_started/02_Observation.ipynb @@ -35,7 +35,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -44,9 +44,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/donnotben/Documents/grid2op_dev/getting_started/grid2op/Backend/pandaPowerBackend.py:30: UserWarning: Numba cannot be loaded. You will gain possibly massive speed if installing it by \n", + "\t/bin/python3 -m pip install numba\n", + "\n", + " warnings.warn(\n" + ] + } + ], "source": [ "import os\n", "import sys\n", @@ -56,9 +67,19 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Impossible to automatically add a menu / table of content to this notebook.\n", + "You can download \"jyquickhelper\" package with: \n", + "\"pip install jyquickhelper\"\n" + ] + } + ], "source": [ "res = None\n", "try:\n", @@ -99,11 +120,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "env = grid2op.make(test=True)\n", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/donnotben/Documents/grid2op_dev/getting_started/grid2op/MakeEnv/Make.py:420: UserWarning: You are using a development environment. This environment is not intended for training agents. It might not be up to date and its primary use if for tests (hence the \"test=True\" you passed as argument). Use at your own risk.\n", + " warnings.warn(_MAKE_DEV_ENV_WARN)\n" + ] + } + ], + "source": [ + "env = grid2op.make(\"l2rpn_case14_sandbox\", test=True)\n", "obs = env.reset() " ] }, @@ -144,9 +174,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2019, 1, 6, 0, 0, 6)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "obs.year, obs.month, obs.day, obs.hour_of_day, obs.minute_of_hour, obs.day_of_week" ] @@ -160,9 +201,21 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of generators of the powergrid: 6\n", + "Number of loads of the powergrid: 11\n", + "Number of powerline of the powergrid: 20\n", + "Number of elements connected to each substations in the powergrid: [3 6 4 6 5 7 3 2 5 3 3 3 4 3]\n", + "Total number of elements: 57\n" + ] + } + ], "source": [ "print(\"Number of generators of the powergrid: {}\".format(obs.n_gen))\n", "print(\"Number of loads of the powergrid: {}\".format(obs.n_load))\n", @@ -180,9 +233,19 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generators active production: [81.4 79.3 5.3 0. 0. 82.24667]\n", + "Generators reactive production: [ 19.496038 71.34023 24.368923 24.368923 24.01807 -17.27466 ]\n", + "Generators voltage setpoint : [142.1 142.1 22. 22. 13.200001 142.1 ]\n" + ] + } + ], "source": [ "print(\"Generators active production: {}\".format(obs.gen_p))\n", "print(\"Generators reactive production: {}\".format(obs.gen_q))\n", @@ -198,9 +261,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loads active consumption: [21.9 85.8 44.3 6.9 11.9 28.5 8.8 3.5 5.4 12.6 14.4]\n", + "Loads reactive consumption: [15.4 59.7 30.8 4.8 8.3 19.4 6.1 2.4 3.9 8.8 10.5]\n", + "Loads voltage (voltage magnitude of the bus to which it is connected) : [142.1 142.1 138.66075 139.29695 22. 21.13022\n", + " 21.12955 21.478817 21.571596 21.432823 20.750198]\n" + ] + } + ], "source": [ "print(\"Loads active consumption: {}\".format(obs.load_p))\n", "print(\"Loads reactive consumption: {}\".format(obs.load_q))\n", @@ -226,9 +300,50 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Origin active flow: [ 4.2346096e+01 3.9900578e+01 2.3991766e+01 4.1828262e+01\n", + " 3.5666172e+01 1.7225140e+01 -2.7542929e+01 8.1183472e+00\n", + " 7.4602180e+00 1.7347816e+01 4.3849845e+00 8.2175179e+00\n", + " -4.4212246e+00 1.9712504e+00 6.4163899e+00 2.6171078e+01\n", + " 1.4931423e+01 3.9526379e+01 -1.0408341e-14 -2.6171078e+01]\n", + "Origin reactive flow: [-16.060501 -1.2141596 -7.423434 0.40774456 -0.44919857\n", + " 7.7376227 -2.1186779 10.543067 5.6506634 15.18845\n", + " -1.5994288 3.6139119 -7.7159214 1.5654972 7.370694\n", + " -16.11945 -3.0833588 -5.630818 -23.178274 -4.492154 ]\n", + "Origin current flow: [184.01025 162.1905 102.03776 169.9557 144.92264 76.722275\n", + " 115.02098 349.20593 245.6016 605.0953 127.5342 245.28467\n", + " 242.99077 67.37295 263.24207 127.98145 63.482616 165.48074\n", + " 900.4441 725.5414 ]\n", + "Origin voltage (voltage magnitude to the bus to which the origin end is connected): [142.1 142.1 142.1 142.1 142.1 142.1\n", + " 138.66075 22. 22. 22. 21.13022 21.13022\n", + " 21.12955 21.571596 21.432823 138.66075 138.66075 139.29695\n", + " 14.861537 21.13022 ]\n", + "Extremity active flow: [-4.1986198e+01 -3.9088322e+01 -2.3725140e+01 -4.0866714e+01\n", + " -3.4981895e+01 -1.6992859e+01 2.7643835e+01 -7.9793596e+00\n", + " -7.3712506e+00 -1.7057173e+01 -4.3787756e+00 -8.1257477e+00\n", + " 4.4793596e+00 -1.9592170e+00 -6.2742519e+00 -2.6171078e+01\n", + " -1.4931423e+01 -3.9526379e+01 1.0408341e-14 2.6171078e+01]\n", + "Extremity reactive flow: [ 11.560926 -0.54758495 3.9026122 -1.0090021 -1.0585623\n", + " -8.46951 2.4369648 -10.252009 -5.4654975 -14.616084\n", + " 1.6159215 -3.4187043 7.8520093 -1.5546099 -7.0812955\n", + " 17.991196 4.285767 9.055665 24.01807 5.187079 ]\n", + "Extremity current flow: [ 176.93805 162.027 97.690315 170.2111 145.05737 79.05555\n", + " 115.02098 349.20593 245.6016 605.0953 127.5342 245.28467\n", + " 242.99077 67.37295 263.24207 1233.7778 424.4511 1064.1736\n", + " 1050.5181 1036.4877 ]\n", + "Extremity voltage (voltage magnitude to the bus to which the origin end is connected): [142.1 139.29695 142.1 138.66075 139.29695 138.66075\n", + " 139.29695 21.478817 21.571596 21.432823 21.12955 20.750198\n", + " 21.478817 21.432823 20.750198 14.861537 21.13022 22.\n", + " 13.200001 14.861537]\n" + ] + } + ], "source": [ "print(\"Origin active flow: {}\".format(obs.p_or))\n", "print(\"Origin reactive flow: {}\".format(obs.q_or))\n", @@ -249,9 +364,24 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.34012985, 0.36042336, 0.2721007 , 0.26722595, 0.82812935,\n", + " 0.26920095, 0.3433462 , 0.5315159 , 0.4951645 , 0.7316751 ,\n", + " 0.28853893, 0.38265938, 0.28927472, 0.43187788, 0.39644888,\n", + " 0.5446019 , 0.53346735, 0.9244734 , 0.4533958 , 0.4615403 ],\n", + " dtype=float32)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "obs.rho" ] @@ -265,9 +395,22 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int32)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "obs.timestep_overflow # the number of timestep each of the powerline is in overflow (1 powerline per component)\n", "obs.line_status # the status of each powerline: True connected, False disconnected\n", @@ -289,9 +432,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "load_id = 2\n", "obs.topo_vect[obs.load_pos_topo_vect[load_id]]" @@ -306,9 +460,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "obs.load_bus[load_id]" ] @@ -335,9 +500,22 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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k7Jlyza+//77Y3Oes3DhwlLt2rWrU7Zs2cYVKlRo1KdPn2oHDhywvNUJ2Ag9YwJIVRV4Q0TmAB8Bi0XkLlWdFODQTMk0EyuMYYwxxhhjSqjU1FRZsWJFcGFdr2HDhumhoaGa1/aTJ08uN378+HVTpkxZ9/nnn0f16dOndr169Q4HBwfrzTffXHvMmDEbbrnllv3z588P7datWx2Xy6WPPfbY3506dTpw55131vR6vTgcDubMmRNZtWrV9G+++Sby9ttv3//9999HXnTRRSkhISGalpYm7du3r3f55Zcnr127dpmqcsstt1Tv3r17zXnz5q3JjuWTTz4p+957763/6quv1qempjpyJvxOZNq0aaVHjx69Yfz48ZtnzZoV1rlz5/odOnQ42LVr14M7duxwtW/fvv7gwYN3TJ06dV1SUpKzW7dutfr371910qRJm870Z1ycWULPmHOAqi4VkYuAl4CPRKQTMEhVDwY4NFOyzAJutnX0jDHGGGNMSbRixYrgiy66KK6wrvfHH38sv/DCCw/ntf2ll16a3Lt372SAnj17Jk+cODFp3Lhx5VwuF23btk3u16/ffoDWrVun3nvvvTvffffd8o899tjfnTt3PpiamuqcO3duaKlSpbxut1tvu+22v3/44YfI22+/ff+MGTMiu3btuh9g8uTJUYcOHXK+9dZbWx0O3+C4V155ZWutWrUarVu3zl27du1MgA4dOiT17NkzGSAiIsKbl/gvuOCClP79++/3n3+oQYMGafPnzw/r2rXrwbFjx5atXr16+vDhw/8GCAkJyXr88ce3denSpX5WVtYml8vSV8eyn4gx5whVTQPuFZFpwHiglYjcqKr/C3BopuSYBbiBlsBPgQ3FGGOMMcaYwtWwYcP0P/74Y3lhXu902levXj392O3FixeHulwurV+//lGJwbp166bv3LkzCCA8PFwTEhJSpk6dGhkcHKxt2rQ5cNVVVx0YM2ZMxf379zsWL14c9tZbb20CWL16dal9+/a5o6KimuTsLygoSNevXx+UndCrXr16xuneb0xMTGbO7dDQUO/BgwcdAGvWrAlevnx5aERExFHXFRG2bNnirlmz5lHnGkvoGXPOUdWvRKQRMBH4VUQeBl5S1Tw99TDmTKnqFhFZh2/arSX0jDHGGGNMiRIaGqqnM2KusG3evDnomO3g2NjYTLfbrRs2bDhqqvDatWuDK1aseCTp1q5duwM//fRTZFBQkN5xxx27L7zwwsOqyksvvVQhOjo6K/u+K1asmFmpUqX0LVu2LDtZLA6HI89ThfOiYsWKmQkJCSnz589fnZ/9Fme2uKAx5yBV3QZ0BB4FngamiUjsyc8yJl/MwgpjGGOMMcYYc86ZPXt21KRJk6KysrL49NNPI6dNm1b6jjvu2NOvX789s2bNinrvvfdKZ2VlMXfu3JDRo0dXvOWWW/Zkn3vllVcmL1y4MPzPP/8M79Kly0GANm3aHBg1alTF1q1bH8hu16dPn/1ZWVly//33x+7du9cJsG3bNtc777wTXZD3dvfdd+9dsWJF6HPPPVf+4MGDDq/Xy9q1a93vv/9+6YK8blFmCT1jzlGq6lHV54BLgBrAEhHpGtioTAkwE2gmImGBDsQYY4wxxhjzjx49euwdP358uaioqKZDhgyp9uKLL27q3LlzSvv27Q+9995761544YVKpUuXbnrjjTfWvvPOO/9+5JFHdmWf26JFi7SIiAhP3bp108qVK+cB6NixY3JKSorz8ssvP5LQi46O9s6bN2/Vli1bguLj4xuGh4c3bdGiRYM5c+ZEFOS91a1bN2P27Nmrpk+fHlmrVq34qKioJp06daq3ZMmSkIK8blEmviKbxphzmYhEAKOBvsAbwIP+NfeMyVciUgXYAnRU1R8DHY8xxhhjjDH5bcGCBbVcLteMevXqHQgJCTntteACoVmzZvWbN29+cNSoUdsDHcu5LC0tLWj16tWRWVlZ7RMSEtYHOp6CZCP0jCkCVPWgqt4C3ATcDPwuIvEBDssUQ6q6FViLTbs1xhhjjDHGmHOWJfSMKUJUNRFoAqQAf4jIABGRwEZliqGZwdAOkbL4RocaY4wxxhhjjDmHWJVbY4oYVd0gIm2Ax/BNw+0kIneo6p5TnGrMyYlEAT02Q8tYiAP2+PdvBj4GPkR1cQAjNMYYY4wxpkT6/fff/wp0DObcYiP0jCmCVDVTVR/FNy3yAmCxiLQPcFimKBNpCSwH3qkKcc6jj1YDHgQWIvISIvbeYYwxxhhjjDEBZF/KjCnCVHU20BiYD/wkIs+JiDvAYZmiRuQS4Ceg8qlaAg8A/y3wmIwxxhhjjDHGnJAl9Iwp4lR1H9AduAsYBMwVkTqBjcoUMS8Bp1MO/lZEmhVUMMYYY4wxxhhjTs4SesYUA+rzDpAABAELRaRvrgUzRFyIVECkIiKlTuc6IjhEsCIcxYnIZUDzvDT1Hv2rf7hA4jHGGGOMMcYYc0pWFMOYYkRVV4pIc+BZYAK+ghkDVDUZkQ7ATcB1QJT/lExEfgQ+Aj5DNQ1AhDLAVUBjl4tGDgeNMjMpBzgBnE7S3W42Z2SwSJVl+Kb8zlQlszDv1+SLi3JuKLCU85nOZSwnjmXupqzS+hzMCsGLEwceSrtSqCtrr/hNGAssA35QZXVAojfGGGOMMcaYEsgSesYUM6p6GBgivkTde5GwaKfI5orQJpfmbuBK4MrDBP/fZTL3v785L2nncNDZ4UDq1yerSROC4uKgalUIDgavF1JTCV6zhrpLl1J78WKu2bKFIJeLJBE+At5X5dfCvGdzVhRgM1WZSF8+cvdlRWY9ykVlcP75wkVN3PQ9D6Kjwe2GzEwne/ZEsWJFgtuxmNuWLkVSUnAFB7MkI4OJwAeq7ArwPRljjDHGGGNMsWYJPWOKKVWdWlek6ZewvCLUOGE74HOu5z+ul8/b6K360mXt1XNTH3Feey1ERhJ0iss4gKB162DSJEq//z79/vqLe9xuvsvK4gFVVubfHZ0ZEbkNGA9cp6pf+ve9i296shfIBIap6vRczg0HPvO3dalq6WOOPwjcgu/n8Bdwm6om5dLP7cC/gHTgDlX907//SWCVqibmx72eid9otuwzuvGaYwhRkdCjt5u3e0OLFkE4Tr0ogzsrC2bNgsREzv/kE55LS+MpEZ4BRqqSWuA3YIwxxhhjjDmpUaNGlX366acr79q1a0mgYwkNDW06efLktV26dDkY6FiKOltDz5hibA10ivtneu1xVlOXNs55dOczLu5WhXXrHfwwTZx9+0JkZN6vU7s2PPwwrFqF+8cfoV49OoiwzOFglMhpFVvIVyJSA7gT35TgnIaoaiNVbQL0Bz4Rkdz+PcwEngc65NL35cBtQAtVbQgsAJ4+QSiP4pvaej/wf/7z44BGgUzmiXBrK9dvH46LHKovvuJm6y43b7wBl1xCXpJ5ALhc0KEDjB+P7NqF64knKFWqFMPdbtaLcG2B3oAxxpgCIyKjRGSjiKiINDlBm9v8x6/NQ3/v+duWzrHvYhFZLCKrRWSGiORabV1EHvefe12OfSIiG0Qkyb89XETG5Tjeyn9O2xz73hKREaeK1RhjzNFEJOHLL7+MOJ1zRo0aVTYmJqbRsftTU1MXWjIvf1hCz5ji7f9OdGAKV3KR808ONbyQ336DDyc5qV797C/YoQMsWYL77bdxhIUxwO1mvghVzr7n0+NP0I0DBuIbGXfEMaPoTpjwVNV0VZ0BJOVyuDHwi6pmvxlNBW4+QVceoBQQBmT4Y3sFX4Kv0Ingdjh4B3h3wACi1m10yaBBEHSq8ZinEBrqS+xu2ICzVy8qAF+I8IyIvdcYY0wR9CnQCtiU28GTPDTLre31cPQ6u/73wg+BwapaD9/76Ksn6WYBcHuO7cuAPTm2ZwJtc2y3A37LZd+MU8VrjDHGFAX2JcuY4kokEqid26F3uZWr5Ruu6x3KvN/dNGuWv5d2OqFfP/jzT5w1atDQ7eYPERrk71VOaSgwV1UX5HZQRJ4TkXXA50A3VfWeZv8LgA4iUtFfTfgmIEJEyuTS9t/Aj8Aw4ElgADBFVXP9klSQRAhxuZgaFMRtn38Or73mWx8vP1WsCBMnIuPGgdPJMIeDD0RsiQdjjClKVHWOqm7N7djJHprl0jYG3wPGocccSgCyVHWmf3ss0FVESp2gq1+A2iJS0b99O74lNbLNB2JFJPshYlt877lt/XFUAqqBrfNrjMmdCAmBeJ1OjM8880z5qlWrxoeFhTUtW7Zs427dutXwxX70CLq//vorSEQSli1bFpzz/BEjRlSIiYlpVLp06SY9evSokZyc7ADwer0MHjw4NiYmplFYWFjTmJiYRvfdd19lgDp16sQB9OrVq25oaGjTNm3a1AUYP358dFxc3HmRkZFNoqOjG7dv377OqlWrggC+//778AcffLD67t273aGhoU1DQ0ObjhkzpkxusU6aNCkqLi7uvIiIiCY1atSIf+yxx2I8Hk+O34skPP300xUuuOCCBqGhoU3r1avX8Icffgg/nZ9bcWUJPWNKmOm0p5/8lwf/7eDdCQ5Knehjcz6oWxfmz8fVqBHl3G6+FyGfU0e5E5F4oBvw1InaqOowVa0N3AC8ICKnNT7N/wXkJeBbfF8idvsPZeXS9nNVvUBVLwUOAdcAo0XkGRH5WERONFU3X4kgDgdvlypFuzlzcF533anPORt33AFTpyJOJz058XRkY4wxRc9JH5od4x3g3zlGtGerRo7Rf/7jB4DYk/T1AXCLf9ruRcAPOc7PAOYB7UQkGKipqlOBKv4kYTvgV3/xMGOMKXKWLl0aPGLEiCqff/752kOHDi1cv3790n79+u059Zk+e/fudS9evDh0zZo1yxYuXLh85cqVIXfddVdVgK+++iryo48+KvfLL7+sOnTo0MIlS5Ysv/baa5MA1q5duxxg0qRJa1JTUxfOmTNnDUBkZKRn3LhxG/ft27doxYoVywF69epVC6Bz584pL7744qby5ctnpqamLkxNTV14zz337Ds2ptmzZ4fefPPNtYcMGbJz3759i95///31b731VszTTz9dIWe7iRMnlps4ceKG5OTkha1atTp422231TzDH2OxYgk9Y4or1QPAspy7NlGNnq7PuP5a5dlnQaTgwyhTBr79Flfp0lR2uUgspOmXrfEVAlkjIhuB5sDbInLPsQ1V9ScgAjj/dC+iqm+q6oWqejEwC9iqvp/7ybyG74tQWyBWVXvi+7LR7nSvfwbuU6XPpEk483tU5ol07Ahjx+IA/i1Cj8K5qjHGmIKSl4dmOdr2Azb7l6/IDxPwFaO6CZiMr7hVTtnTbi8Gfvfvmw+08O+fiTHGFFFut1tVVRYtWhSyb98+R1RUlPeKK65Iyev5qsrYsWO3REZGemvWrJn52GOPbfvss8/KZmVlERQU5M3IyJCFCxeWSklJkZiYGE+HDh0Onay/7t27H2jRokWay+WiUqVKWSNGjNi2ePHisP379+f5+97YsWPLt23bNrlfv3773W43rVu3Tr333nt3vvvuu+Vzths4cOCu+Pj4dLfbzYABA3bv2LEjaMuWLSV+BpAl9Iwp3o582Fagj2sSFWuF8e5EZ6Ek87JVrAhffYVLlY7AoIK+nqqOUdVKqlpDVWvg+zDfX1XHiIhbROpktxWRZkAFYP3pXsc/fQcRCcU3reeFU7TvCaxU1aX41tNT/yEvUKDDxkWIE+GVJ56Aq64qyCsd77bb4O67UaeTiSJUKtyrG2OMORUR6Ssii/yv207RPM8PzfCNirvGX1xjo3/fEhFpCmwGjqzeKyIR+Na13X6iC6vqNnyj+oYD7+bSZKb/mu3wPWgDmJ1jn62fZ4wpsho0aJAxbty49RMnTixXvXr1RvHx8eeNHTs2t+V+chUZGZlVtmzZI3NZ69atm5GVlSVbt251X3XVVSnDhw/f+uKLL1aqWLFikwsvvLD+F198cdIyiVOmTAlv0aJFvfLlyzcKDw9v2qlTpwYA27dvd+c1pm3btrlr1qx51NINdevWTd+5c+dRs6eqVKmSkf33iIgIL0BycrIzr9cprkp8RtOYYu4TfJVYO03nMn7JasG89yA8ACsOtGgBgwfjGD3KM3yFnL+gIStTgc2o7j7lyfnLDUwQkSh802MPAd1VdT+AiDwJbFfVt/zbS4DyQKSIbAVmqmp28Ytp/nWEgoD3gdEnuqiIRAP3Ah39u74H+vn73+Dfzl8iIUA9IKSCY/fw0nXKeh9+WALyxvfyy8hnn+HavZsHOX4dJWOMMQGkqhOBiXlsOwYYk70tIrOAV1X1y1za3pRzW0QUX4X3JP/7p1tE2vmXsbgL+CYPU2IfBS5Q1bX+whw5/YHvId1NwNX+fbPxLY9RiX9G7RljzHFUycsyAgHVp0+fpD59+iRlZmYyYcKE6P79+9dq0aLFodDQUG9KSsqRz/mbN28+Lql24MAB1969e53ZSb1169YFuVwurVKlSibA4MGD9w4ePHhvWlqaPP/88xV69epVZ+fOnYuio6O9csxokMOHD8sNN9xQd+jQodunTp26Njo62jt37tyQVq1aNVT1jVlwOE49fqxy5cqZGzZsOGqdv7Vr1wZXrFgx40TnmH/YCD1jijNfoYdrvMi4J5wj6NA2ixYtAhfOgw+CCKV/5PI5wP+AnYjMQOROTrKGnQg3ivCtCFeeyZRdVW2b/UVDVVNV9RJVjVfVJv6/z8jR9rHsZJ5/u5F/tJ9DVavkSOahquerapyq1lXVJzX73Sv3GParapvsLyqqmqGqV/v7v0ZVM0907mkT6YDIB8DfwKJV1P91t7dM5yeeEHce3lcLREgI/N//4XI6uVeEmMBEYYwxJq9EZKz/QVYV4AcRWZvH854UkbtP1c5fjKoP8JqIrAa6AEPycN7/VPXtExzLxFc8I0JVV/n3rca3tMYv+fpea4wxhWzx4sXBH3/8cVRycrLD7XYTHR3tAXA6ncTHxx+aMGFC2dTUVNmyZYvriSeeOG49UhFhwIABVQ4cOODYuHGj+8knn4y97rrr9rpcLmbOnBn63XffhaekpEhwcLBGRER4RASXyzcGrFy5cpkrV648svp6enq6pKenO6Kjoz3R0dHejRs3uh9++OHKOa8XGxubmZSU5Nq5c+cJBxT069dvz6xZs6Lee++90llZWcydOzdk9OjRFW+55ZY8rw1YkllCz5jiTjXdiffVXzwteOjRvA3KnTRpEq1btyYyMhIRISvrnzoPaWlp9OjRg7p16+JwOHjkkUfyHEpMDPTr7+RN9/3Zuxz4psC8DfzKP5XpjtUfuAqYAmwQ4QER8jy8vMQQcSEyFl9F3ZvwT+N9m/7UqpZFjzysYHey3/1vv/1G165dqVixIpGRkZx//vm8+25uM55y178/hIXhwLf+kTHGmEBIlHg+cr9F4nGj246iqnf5H2S5VDVGVeucoN2Rh2b+7aMejB3TVlQ1Kcf2r/4HW/X8/Ww5wXmPq+rgXPZvVNXSx+zrrKqVjtlXSVU7n/hujTHm3Jeenu54/vnnK1WpUqVReHh402HDhlUdPXr0hri4uPQ333xz8+7du93lypVrctlll9Xr3bv33mPPL1u2bGZ8fHxanTp14hs3bhxXt27dw2PHjt0CcPDgQeeDDz5YNSYmpklUVFSTd999t/wHH3ywNnt666OPPrpt1KhRFSMiIpq0a9euTlRUlPfll1/eOHLkyEqhoaFNO3XqVPf666/fn/N6Xbt2PdChQ4ekBg0anB8REdHkrbfeOu77W/v27Q+9995761544YVKpUuXbnrjjTfWvvPOO/9+5JFHdhXUz7E4kZMMKDHGFBMi3BMSwusHDuB05SGn98MPP7Bv3z7S0tK44447yMzMPPJ05vDhw4wZM4YmTZrw0EMP0aFDB5566pTrYh/x3Xdw5ZWwg4pU5Lh/pzcAjVA9anFXkSOLXGfz+F/vA6NVWZTnAIozkfH4plgf5UL3Ipr3b8zoE04I/sfJfvdTp07l77//5sorr6R8+fLMmjWLa665hokTJ3LttdfmKcRu16su/Xr98tWeOsOB6agmn8YdGmOMORuJEozD/SfezIaI62c0qy299djCEsYYU+wtWLCglsvlmlGvXr0DISEhNr2zGElLSwtavXp1ZFZWVvuEhITTXie9KLEResaUACK0adEC8pLMA+jUqRM33ngjtWrVOu5YqVKlGDJkCO3ataNUqVK5nH1yLVuCiPILrXI7XBPfOnOn4sS3bl1fYKEI8/3Tck84bbfYEzkfuPXY3QcJZ2HW+bRunbduTva7v/LKK7n11lupUKECIkK7du1o3749M2fmvWhgm0tFdkuFeC/yGbALkc8RuSTPHRhjjDkbwxFnfS75GNBWFEKhKmOMMcYUDEvoGVMCBAWR0Lw550QVoKgoqFcjgyU0OlGTB5A8F27IXuz1IuBDYLsIT4hQ+STnFFf/Bo6rXbyChnjVwUUX5f8FDxw4wG+//UbTpk3zfM6FF0JSVgRbqAoQDFwHzEZkcP5HaIwx5ohEaQkyjAtecVL9Boh/TMDxAonSMNChGWOMMeb0WZVbY0qG8MiTFh0vXFFRkMIJS+2Wv4X3Lpko5Fz3IewUXWY/nCiLr/rdIyL0BFaeXaRFRwqhF4SRmst+3885v3//GRkZ9OzZkwYNGtCnT588nxcVdXRcfk7gFUR2ojrp2HNEuAN4HHgI+FAVWyvCGGNOR6KE4XAnUqGtlzp3+R6axT0EW78UkpYlkigX0dsKRhhjjDFFiSX0jCkZPN5zaIUcTxa4yDrh8a+5evZZdC/+1ydn0UeRs4RGtGD+cfudeADIz99/amoq119/PRkZGXzzzTdH1tjLC48vnBP9/h9HZLK/OnNOt+Grsvg+cIsI/VXZcEbBG2NMCdTgX6zZczCz0n2D4nm8vX8wt8PNi/9r7/ri/UWNdyaxdsNN0lVVlwQ2UmOMKYJ2zw0hK9VBpcsPBToUU7JYQs+YkmHPjh2cqIJsoVKFnbuEaPbnevwQocuTiO55zO538U2rPREP4AW+BhKBv/Ij1qKkPLvvA+4+dn9Z/0DHHTugQoWzv87+/fu56qqrKFOmDF9++eVpr6O4c6fvzxP8/usDnYDvsneI4AYuzNGmLbBShIeAUar+jKUxxpjcJUqnHx+i0vT0u9iY8s9w7dWrV/PNj7/zy5cj+WvK0CothjMByPsaCsYYY+DwLiezutTHk+rkioVLiWpoBTZMobGEnjElQHo6P8+eTRz/rDl3Uh6Ph8zMTDIyMvznp5OVlUVQUBAOh4P09HRUFa/Xi8fj4fDhwzgcDoKCTl2TYvNm2LY7iBb8muvxMFIfVmV5zn0i5Pa0y4NvquYW4FXgXdUTZAlLAln3MHATEJFz93msJMJ5iLlzw2jc+NTdnOx3//fff9OxY0fOO+88PvjgA9zuPP3ndJS5c6GWewsVMnefqEnVY7Yb4VtrL5vL/3oJuFmE21RZfNqBGGNMSZAo0Yh7YtUm13hZe7GDlE1HDs2cOZOuXbviOO9+ztv+pVaImtPw5T4SNfQDqz5ujDF5tmhYLA63k1LVlQWDq9J+2rpAh2RKDiuKYUzJ8MvSpbgOHMhb4/fff5+QkBA6deoEQHh4OCEhIcyZMweA+vXrExISws8//8xzzz1HSEgIHTt2zFPfP/8MbsmkGb/ndngSvlF2J5MJKPATcCVQQ5WXS3QyD0B1HzAQ30jFI1x4aMGv/Dwnb3NuT/a7Hzt2LEuXLuXbb78lOjqa8PBwwsPDueKKK/Ic5s8zM2mdOf2Ex+9g3JMifCPCiyLcDvSGXEfhOYDzgQUiPCNCSJ6DMMaYEsMxmqCoMjR7y4EcXTdp7969REdHgzigxURn+UhHUOfGvBCgQI0xpujZt6AUG96vQOOnIGGUsPPH0mz9OuLUJxqTPyyhZ0zJMBvwfvxx3hrfeuutqOpxr7Zt2wKwcePG447NmjUrT31/OCGLS5zzCSUt524PMAK4CdXcCh5k70sBXgfqqdJZle9UOYdWBwww1QnA1cCenLsv93zPlG+87M9DyvNkv/vhw4ejqhw6dIiUlJQjr+++++7UHQMbN8IvvzrpwE+5Hs/AnTaD9uPx/Z4vB94AhsIJKzS7/Mf+DawQoW2eAjHGmJIgUXqAtzfNJ7gILnvc4bJly7I/+40hrDrJWonaFehPorQr5EiNMaboUS8sGFyNqDil1h0Q2xlir4SFD1bDazWGTOGwhJ4xJYAqu4B3R4wgMzOA7y+//w7f/+RiSNaLe/FNlf0FGARURvWxXIohZLvV/4pR5QFV1hZKwEWR6hR801a7A58BG+7gv7skPV1HjQpsaM8966Wy7OAGJud6PIjMVzZozf9T5UZVmuCrbrwrD107gerATBF+FCHBv/aeMcaUTIlSEXG9Q+1+SuUrc23Stm1bpkyZgqqyZs0aSleoQXCNrh7E/QGJks+10Y0xppjZ9HEUu3+JIGGU4PA/e77gZUhZX4pVL5cviEs2a9as/qBBg2ILom+AhISE+kOHDi2w/k3+szX0jCkhVHl261Zuf+89uPPOgFyfRx7B43az5JrMrxNUyW0k3onO3QxMKMDwihfVw/iSeZ8BRAMHhMdfeomH770XV7lyhR/S+vUw/r/K654nCSLXrPJ04Jlj9sX4X3mRPZesA/A/IEuEtcAqYKX/tQpYpcrB043fGGOKjEQRxDWekEqhXPCyANxyyy3873//Iy0tjV9++YWffvqJ+vXrc8UVV9CqVStEhNGjR0ODWCffNqhARvKrwO2BvRFjjDlHeQ4Lix6qRrUeEHPpP/sj60P9QbD8ucrUunUfpWKseJspUJbQM6aEUGW9w8GoQYMY2KIFzvj4wr3+yy/DTz/hUGXo6STzTL55NT2d/r16UeGHH3A6TzSJtQCkpUH3azKpL2u5lfeOPZyKb2rtw6gem+lrcZJus/CNMncA+4CZwBzgdyADaACc539dDfwLf1EYEbZyfKJvJbDL/ts0xhQDl6NZV+AI8jLnOg/AhL7g7VsJr1edDgcepncA4D8Xwn8u9C9BuvdfMBdwhTvJ2H8bifI6vXVhoG7CGGPOWcufqcDhnUE0yWXZ0fhHYcP7ThYNi6X5u1sKPzhTklhCz5gSRJX/eDw079KFCxcuxBUdXTjXnTEDHnwQVWWYKrMK56omJ1WSRLh65kzmPfwwzueeK7Trctdd6IpVjrTpWf0mBZNRHt97zz5gCvA1qrlVMQZoia/IhwNfMRQXvpF4W/GN6JsD/AyszSUR92fODRFcQE3+SfI1AJoBtwDZU8uSRI4k93Im/Dao5lqYwxhjzkW/AG+Tss5Jiq/YoteLTP6Na0PcpFxzIT/moY80YGlBBmmMMUVS6hYXq16O5bwHIbzG8ceDSkPjp+GPeypQ777dlEk4XBBh/Pnnn6UGDx5cdenSpaFBQUF62WWXJb/++utby5Yt6wF49tlny48fP77Cjh07gkqVKuVt1arVgTFjxmypVKlSFkBmZiYDBw6s8umnn5b1eDz07t17z8mvaM5FltAzpgRRJUOE67ZtY0mHDkR//z2u8gWywsM/Zs+Ga6/2eh0Ox5ceDy8W7NXMyajyPxHuev55xkdEwP/9H8cWPcxXXi8MHoy+/z6As8clOnfqaXaRhS+B9xf/JPB+UWXb6caiShawxv86UklZBAEqcnSi7zygE5C9hkiGCKs5PtG3WpXU043FGGMKVG9NBe7Kucsp0hffWrRtVHV5IMIyxphi4c8HK+OOEuKGnbhNrdth9RvKgsHV6DB7NZK/pQv279/v6Ny5c71rrrlm35QpU9bt27fP2b1791o9e/as8dNPP60DqFSpUuZnn322Ni4uLn3dunVB3bt3r9W/f/+q33zzzQaARx99tOI333wT/cMPP/zVsGHD9GHDhlVavHhx2KWXXmpL0xQhVhTDmBJGlZ1ZWbReupSdF15I5uLFBXYd3n4bOnbwcHna1zrV03GwTWcMPFXeBe575BH01lvRtLRTnnJGkpLg6qvxvPEGHuBGVU43mQfwf0BZVRqocq8qH59JMu9k/EV8d6gyQ5U3VBmoSgdVKgNRwMVAf+BbIAjoCbwPLARSRNggwlQRXhbhThFaiRCAVQqNMSZ3IhICPAWMt2SeMcachb9/CWXz5HI0eUFwhZ24ncMJF44Sdv8SwaaPo/I7jMmTJ5fOzMyUN998c2tERIS3evXqma+++urm6dOnl968ebML4NZbb01q1KhRutPppF69ehn/+te/dv78889HYvnoo4/KDRgwYFdCQsLhkJAQHTly5PbIyEibkVLEWELPmBJIlb8yM7lwxw5+v+givA89BAcO5F//K1ZAlyuyuOsueDDrWSZ7uzk78uPA/LuCORuqvAFcnZjIobg4Mr/6ypeAzQ9eL7z/PjRoQNa0aez3emmnysdnGKdXlf35E9kZXf+AKr+rMkGVh1S5VpX6QCgQB/QAxuGbPnwp8Cq+KcC7RdgtwhwR3hZhiAidRaghYu+7xphCNxAoBwwPdCDGGFNkqRf+HFyNss2UGr1P3b5CG6jWAxY9VA3P4XydE7NlyxZ35cqVM9xu95F9DRs2TAdYt25dEMCECRNKN23atEGZMmUah4eHN7377rtrJicnO7OysgDYtWtXUK1atdKzz3e5XMTGxmbkZ5ym4NkXC2NKKFV2ZWbSLjOTB196iZQaNcgaPRr2n0X6ZPVqGHCPl0bne9k6/S+m056neBQnXoA78it2c/ZU+TYri/M3b+ara6+FNm3wzJzpS8idicxMmDIFEhLI6tsX/ftvJmRmEq/KL/ka+DlAlQxVVqjymSpPq9JHlQQgAqiOb7ruU8AKoB4wDPgO2AAcFOFPERJFeFSEHiLEixAcqPsxxhRfIlIW32jnkaq6PdDxGGNMkbXuv9HsWxBGwijJ85o1TV6Aw7uCWP5MhfwMpWrVqpnbt28Pysz8p57cypUrgwFq166dsW7dOvftt99e++677/5769atS1JSUha+9dZbGwDU/xQ/JiYmY8OGDUHZ52dlZbFjx44gTJFiCT1jSjBVMlV5OSuLGvv38+b995NVoQLeq6/GO2kSbNx48gRPejosWQIjR0JCowzq14evxu1mrPdO/sxqRHtm5mwejRTkim3mdKmyMSuLHsAlv/3Gn+3bQ+WKHu/QoTBnjm/a7Mns2QPTp8OAAVCxgsfbpQssW8YcoKnXSz9VdhXCbZwz/CMKN6syTZXXVLlblbaqxABlgUuAQcAMfIU4bgU+xrfwfKoIa0T4WoTnRbhNhOYi5Ps0DWNMifIwvsrftoatMcacqcyDDpYMr0rNW6Bcs7yfF14DGj4Iq16OJXVLvtUv6NGjR5LL5dKBAwdWSUlJkc2bN7uGDBlStV27dsnVqlXLOnDggNPr9VKhQoWs0NBQXbp0afCLL75YKWcfPXv23PvGG29UXLhwYam0tDR58MEHY5OTk535FaMpHFYUwxiDKnuB+0UY7vVy3fffc/O339JWFSlVCk+DBnhq1SIoOBg8HkhN8bBmZRZrN7nxeB1EOVO43vMJz5FIu6yZuHIvCLrnyCMhc05RZR7QTIS4a3a/881Xo6+s+cor1QCILZdBw3ihdDk3QUGQkQF7d2ayfLny937fQ7yG7tV0z5y55G3u6pGZydoA3so5S5V9wDz/6wgRQoC6HF2UozNwP/hG7Ymwk38KceQsyrHd1qXMGxGZhq/4iRc4CAxS1YX+Y53xjagMAlKBu1Q119VFRaQa8Aa+kZceYIyqvn5Mm/fwVU+OVtWkXPq4HfgXkA7coap/+vc/CaxS1cSzvV9jAESkJnAfMERV83FhDWOMKWFWvVKOwzvcpG2DuTed3rmeQ5B1yMHSJypy8bit+RFOmTJlvFOnTl09ePDgqlWqVGkcFBTkbd++ffLrr7++FaBp06aHH3rooW39+/ev0adPH2e9evXSevbsuXfZsmWh2X2MGDFi5/79+50dOnSo7/V66d27957GjRsfyo/4TOER+35tjMmNCKXxrROW/aokQimHerzX8kXH81gZEsdy4lhOff4iiMyT9gc8jeojBRy2OVsiPyp02ER1lhPHMuJZRQMOEkGmBOPWdEqTxHmsJPv3X4WtCHyA6s2BDr+4EMGJb/rusdV3zwOi/c0O8k+CL2eib73qqf+HLElEpHR2ck1ErgMeV9XGIhINrMVf+VNEWuNL0sXn0ocA/wOeU9VP/PtiVHVXjjbXA1cA/ThxQm8DEA8k4EssdheROOBpVb02P+/blGwikghcCMSpqv2bYIwxOSxYsKCWy+WaUa9evQMhISEnXztu/8JS/PlglbO64Hn/2kls55Sz6sPkSVpaWtDq1asjs7Ky2ickJKwPdDwFyUboGWNypUoSMNf/ysEJ0mMQ8NppdHcAeDm/YjMFaoFAhxpsogabuCpncdqTP/9ZUMBxlSiqeID1/teU7P0iCFCe4xN9bYFq/maZIqzl+ETfX6qUyA+SxyTWovjnv+bawN7syp+q+rOIVBORC7JHzuVwGZCenczzt8+ZzIvBt1ZZO3wJvRPxAKWAMCBDRBzAK8CdZ3JvxuRGRC4EbgS6WzLPGGPOUnTTw1z2k81CMeccS+gZY87E6/imnN2bh7bJQBdU9xVsSCafvIxvnbeQ0zhnN/B2wYRjcvJPsf3b/5qd85gI4UB9jh7Ndy3wIOD2t9nC0Um+7L//Xdyn74rIRHzJNoAr/X+uAcqKSEtVnSciV+MrblIDODah1xDYLSKT8P2cNwIPqGr2k993gH+r6sFTLBf6b+BHfCMs7wIGAFNUddNZ3J4xR/hHk74IzAc+D3A4xhhjjCkgltAzxpw+31z9+xCZjy9Z0OjYJmmUYgUNVybw51Wobij0GM2ZUf0bkSeA5/J6BvBvVFMLMCqTB/7Rdws4ZrSkCG6gFkcn+poDt+FLXgHsF8k10bfRP1qwyFPVvgAicgvwPHClqiaLSHfgWREJB37FV504K5cuXEB7oLl/eu7dwGTgQhHpB2xW1Rl5iONz/EkWEakKXAN0FpFn8I0YXKuqD5/l7ZqS7Qp8o3Zbq62tY4wxxhRbltAzxpw51Q+ADxBpCFyFr5JnJrCmHqtrbKXqQ4DXvk0UMarPI5IKvISvUMCJHALuQvXDwgnMnAn/enp/+V9fZe/3T9+N5ehEXwN8yYDsSmjpIqzm+ETfalXSCuse8pOqThCRt0SkrKruVdWZ4CvJLSLBwE58Sb1jbQYWZk/PBd4H3hQRN76Rf21EpEuO9ktE5Jrs4hsn8BowFF/yJVZVe4rIBBFp54/LmNMiIk7gBeBLVf0l0PEYY0xJ4PF6yPJmSbAr2L72mEJlCT1jzNlTXcExX4C3CsHAzfim/dwQiLDMWVB9HZGpwE341mFqkOPoIuAj4ENUtwUgOpMP/FNst/lf03Me8xfFqc/Rib7e+EaQOQAVYSO5VN/1V/Q9Z4hIaSBUVbf7t68F9oIvThGppKo7/M0fBWaoam7r5HwHvCAildX33/2VwEr/+mRHlbwTEQUa5VYUI0ebnv7zl/qn+mZ/CfAC4Wdyr8bgq7DcAOge6ECMMaYk2Jy82dX7s961ktOTXR91+2hdfIX49EDHZEoOS+gZYwqEKukiDAG+EaGdKjbapKhRXQc8CTzJY3IRlfidPVzEo/q/QIdmCpa/KM5v/tcR4kvU1+Hoghzt8a0DF+Jvs5vjE32rgC2qeAvnDo4SBXwiIiH4kmW7gS45piI+6a9u68I35faO7BNF5Elgu6q+paqH/NNsp/jXKEsGep1JQP7quvcCHf27vgf6icgSYIN/25jTIiKhwAjgHVVdFeh4jDGmuJu8fHLkPVPuqRUZHOmIDI6k+bjmcS9c/sLGARcNOKcebpriyxJ6xpiCNAXfF9PXRLhANdd1qUxR0ADfGnlRRXOapckfqqQDy/2vI0RwAFU5OtHXELgeX1VegFT/On3HrtW3RpWMgotZNwHNTnL8hNVlVfWxY7anAdPycM2TVsVQ1f1AmxzbGcDVp+rXmFMYjC+B/USA4zDGmGItLTNNBn0/qPK4P8fF3Bh/I2OuGkOwK5hhPw3j3qn31vxx/Y9R468Zvym6VHQgHmSaEsQSesaYAqOK+kfpLQX6A28GOCRjTAHwj7zb5H8dNbpMhLIcneg7D7gdXyVZATwirOP4RN8qVZIL6RaMKdJEpDwwDHhRVXcGOh5jjCmuluxaEnzjZzfW3pS0KeS9a96jb+O+ZFe3f7Xzq3So1YHbvrytTNO3moZPvG7iujbV21jhOFNgHIEOwBhTvKmyCt/C70/5v9gbY0oQVfaq8osq41R5QJUrVamFb524pkAfYBKQjm9durHAfCBJhG0iTBdhtAj3inCZCLH+gh7GmH88BqQCIwMdiDHGFEde9fL6b6+XbfHfFnHBzuCQP+/6k1ua3HIkmZetS70uLL5nMXXK1Am6bOJl5z0287EYj9cToKhNcWcj9IwxhWEEvgIZT+JbN8oYU8KpkoqvwMqinPtFcAI1OXpE3wX4Ck+U9jc74J++e+xafettar8paUSkLnA3cJ+qpgQ6HmOMKW72pe1z3PblbdW/Xv11maHNh/LMZc8Q7Ao+YfvYiFim3TyNF+a+wCMzHqkyc8PMqA+7fbi+WlQ1+4xi8pWN0DPGFDj/tLlhwN0iNA50PMaYc5cqHlXWqvKtKi+qcrsqLYEyQEWgHb5/T+YDscB9wJfAX/jW6VsuwqciPCXCTSJcIEJYgG7HmMLwDLAO+G+gAzHGmOLm500/hzZ5q0ncr1t/LTO191RGdhp50mReNoc4GNZqGL/c/gtbD24Nv2DsBfFfrPwishBCPieNGjWqbExMTKNAx1Hc2Ag9Y0xhmQDcg69ARjtV9FQnGGNMNv+/Gbv8r1k5j4kQAdTn6LX6uuGryOvyt9nM0aP5sv++2/49MkWViDQHugPXqqqN/DDGmHz269Zfw7Yc2BK0duBaapepfdrnN6/SnIV3LZTKL1d2ztgwI+K68647UABhBkxWVhYigtPpLJTrHT58WEqVKmWf2/xshJ4xplD4F80fBFyK78uHMcbkC1UOqvI/Vd5X5WFVrlflPCAUX3LveuAt4G/gEuAlYDa+5OAeEX4RYZwID4hwpQi1/FN/jTlniW/hpheBX4CvAxyOMcYUS73ie+0XhIU7F55xH6v3riY1M5We8T33n208W7ZscXXo0KF2REREkypVqpw/ZsyYMiKS8O2330YAzJgxI6xZs2b1S5cu3SQ2Nvb8+++/PzYzM/PI+SKS8PTTT1e44IILGoSGhjatV69ewx9++CE85zVGjx5dtn79+g0jIiKa1KlTJ+7tt9+Ozj727bffRohIwttvvx1do0aN+NDQ0Au2bdvmGj9+fHRcXNx5kZGRTaKjoxu3b9++zqpVq4IAvv/++/AHH3yw+u7du92hoaFNQ0NDm44ZM6YMwJ9//lmqTZs2daOjoxvHxMQ06t27d/W9e/ce+QzWrFmz+n379q3WpUuXWpGRkU1uv/32qmf7MyxOLKFnjCk0qswHJgIjRQgNdDzGmOJNlUxVVqnyhSrPqtJXlYuASKAq0BF4HFgC1Ab+BUzBN30xRYRFIkwSYbgIN4jQSIRSAbodY451NdAKeFBVbbSCMcYUgGpR1bIujL0w5bMVn51xH5+t+IzKEZUzW1ZtedYVb2+44YZaXq9X1q9fv3ThwoUrPv300yPJtsWLFwd36dKlXr9+/f7evXv3olmzZv31/fffl37kkUcq5uxj4sSJ5SZOnLghOTl5YatWrQ7edtttNbOPjRo1quzTTz8d+84772xMSkpa9MYbb2waOnRojWOTfp988kmZ+fPnr0xOTl4YGxubFRkZ6Rk3btzGffv2LVqxYsVygF69etUC6Ny5c8qLL764qXz58pmpqakLU1NTF95zzz379u/f7+jcuXO9+vXrp23evHnp77//vnLNmjWlevbsWeOYa5W9+eab9+7fv3/R2LFjt57tz7A4sYSeMaawDQOigX8HOhBjTMmkiqqyVZUfVXldlQGqtFOlEr61+loCA4Bp+Eb59QE+AhYDh0RYK8K3Irwowu0itBQh+oQXNCafiYgLeB74VFXnBzoeY4wpzq6uf/X+b9d8y+Gsw6d9rqry6cpP9cq6V+5zyNmlX9atW+eeP39+xIsvvri1fPnynvLly3uee+65bdnHX3nllQqXXXZZUv/+/fe73W7q1auXMXjw4J0fffRRuZz9DBw4cFd8fHy62+1mwIABu3fs2BG0ZcsWF8Do0aNjhg4duqNNmzapTqeTTp06pXTp0mXf+PHjy+bs46WXXtpasWJFT0hIiLpcLrp3736gRYsWaS6Xi0qVKmWNGDFi2+LFi8P2799/wpuePHly6czMTHnzzTe3RkREeKtXr5756quvbp4+fXrpzZs3H1kerkOHDkk9e/ZMdjqdREREeM/qh1jM2Bp6xphCpcoOEZ4CHhfhXVU2BTomY4zJpsp+4Ff/6wj/yLw6/FN5twHQAV/l7hB/m785vvLuSmCrrdNn8tkd+EaVdg10IMYYU9zdeP6N+x+d+WjVH9f9SNf6p/fP7pJdS1i/f7283eXts55uu2nTpiCAunXrZmTvq1ev3pG/r1+/vtRvv/0WEREREZW9T1XF6z06B1alSpUj52QnyJKTk51Vq1bN2rx5c6nhw4dXffLJJ6tkt/F4PHLRRRcdzNlH/fr1M3JuT5kyJfypp56KXbt2bam0tLQjU2a3b9/ujo6OTs/tfrZs2eKuXLlyhtvtPrKvYcOG6QDr1q0LqlbNVxW4evXqGbmdbyyhZ4wJjFeBfvjWseoR2FCMMebUVDkMLPO/jhDBAVTj6ERfPL5/27KfZh8SOZLgy5noW6eKfUg1p0VEwoEngLdUdU2g4zHGmOKudnTtzMYxjVM/W/lZ6Okm9D5b+RkxYTFZbWu0PXS2cWQnttasWROUkJBwOPvv2ccrVKiQefXVV+/75JNPNp7pNcqWLZv50EMPbb/vvvv2nqyd0+k88qDy8OHDcsMNN9QdOnTo9qlTp66Njo72zp07N6RVq1YNs1eEcDiOH6hXtWrVzO3btwdlZmaSndRbuXJlMEDt2rWPfD5yOBz2UPQEbMqtMabQqZIODAG6i9Au0PEYY8yZUsWrykZVvlPlZVX6q9JalXJAeaANMBSYA5QD7gQ+A1bgT/SJ8IUIz4rQV4SLRIgM2A2ZouABfFPBRwQ6EGOMKSm61uu676u/viLDc3rP4T5Z8Yl2rtN5n9Nx9rW2ateundmsWbOD//73vyvv2bPHuWfPHudDDz1UOfv4wIED//7uu++ix48fH3348GHJyspi2bJlwZ9++mmeP1fcfffdu1588cVKs2fPDvV4PKSlpcns2bNDf/755xOuf56eni7p6emO6OhoT3R0tHfjxo3uhx9+uHLONrGxsZlJSUmunTt3HvlB9OjRI8nlcunAgQOrpKSkyObNm11Dhgyp2q5du+Ts0Xnm5CyhZ4wJlCnA98BrIjZa2BhT/KiyR5WfVXlblaGqXKFKDSAMuAC4BZgMZOGbOvkO8DuQLMJWEX4U4XURBojQToRKIkig7scEgEhtRK5B5AZEOvUSqQU8CDyvqn8HOjxjjCkpbjz/xv1Jh5OYuWFmns9ZuXslq/askh5xPc56um22yZMnb1BVqVmz5vmNGzdu2KVLlySAkJAQ76WXXpr69ddfr/7vf/9brlKlSo2io6ObdO/evfaGDRuCTtHtEY8++ujfw4YN2z5gwIDq/kq5jR588MGqKSkpJ8wdRUVFeV9++eWNI0eOrBQaGtq0U6dOda+//vqj7rlr164HOnTokNSgQYPzIyIimrz11ltlypQp4506derqZcuWhVSpUqXxhRde2LBmzZrpH3/88YYz/gGVMGJFsYwxgSJCfXzT1war8kag4zEnkShx+H5X8fTW5YEOx5jiyP9woya+abs5p/CeB2Svh5PM0VN3s//coIo9zS4OfAUv7gb6AhflPJQOWVMh80LoWlV1ekDiM8aYYmDBggW1XC7XjHr16h0ICQnJ07C7uDfjGl5S9ZKQt7u+nadrPDXnKV6d/6pn5792LnI5Cmb8wrx580IuueSShhs3blxSvXr1zAK5SBGTlpYWtHr16sisrKz2CQkJ6wMdT0GyUTHGmIBR5S8RXgNGiDBJlZOu1WCMMcWZPyG3xv/6Jnu/f1ReRY5P9F0OZE9pyRBhDccX5fhLldTCugdzlkTKAF8Dl+R2OBhc1/k+v09D5BFUny3U+IwxpgTrUrfLvvGLxsc+3vZxyUvF2k9WfKIda3fcn5/JvD/++KNUenq6o0WLFqkbN250Dx06tOrFF1980JJ5JZMl9IwxgfYk0AffWkADAhyLMcacc/wVcnf4X0fN9fGvt1efoxN9N+CryOv0t9lELtV3VdlTSLdg8kJEgKnAxXlo7QCeQeQAqjbC3RhjCkGv83slvTDvhcqVX6586sY+MvzS4fk23RZg//79zv79+9fctWuXOzQ01HvxxRcfHDNmzJb8vIYpOiyhZ4wJKFUOiPAQME6EsaosDnRMxhhTVKhyAPjD/zpChCCgNkcn+toA/fGt4YcIezm+8u4qYJMq3kK6hRJLhAigIVABCOrPWxdez+cX12EtNdmAgzwti/MIIuNRTSvQYI0xxtC0YtPDP/T5YZXH68nzerbta7Y/6+q2OXXs2PHQxo0bl+Vnn6bosoSeMeZcMAG4B1+BjHb+0SjGGGPOkCoZ/JOkO0IEB75puseu0dcViPE3SxPhL45P9K32Vyk3Z0CEaKCb08l1TicX4JtGfcTb3MXb3AVAiOMw5znX0DJzFjfyES349UTVUCoCNwLjCzR4Y4wxAHSs3fG4BF3avjSHJ9Mj4THhnkDEZEouS+gZYwJOFa8Ig4BfgR74qj4aY4zJZ/6Rd1v8r2k5j4lQBl+CL+dafX2BWoAAXhHWc3yib6UqSYV0C0WOCG2cTv7tcNDJ6cTRuTM0b44jLg7i4iA2FoKDweuFgwdh9WpYvrwUy5adz/ff1Gf0uoFUd2/j5szxPMBISpN87CVqBuK+jDHGwN/L/g6e2GFig8zUTMeNX934V412NWzdWlNoLKFnjDknqDJfhInASyJ8a4u4G2NM4VJlHzDP/zpChFJAPY5O9HUEBgKl/G12kkuiD9hWUkddi1DX6eQl4OoWLfD064fz2mshKir39k4nlCkDzZv7XgAvvxzE4sUwaVJl3hwzjDGpA3k86xHuYizuf4oa2/ulMcYEQHYyL7JypDO0fKh8dM1H9S2pZwqTJfSMMeeSYcBq4N/A44ENxRhjDIAqh4El/tcRIjiBahw9fbcR0BMo42+WInIkuZcz4bdOlWJZkc9flfhBEZ6pVQvva69B5844Jc8rLh3VF02a+F7/+Y+bp58uzdBXX2Os3MenWddQn9UKfJW/d2CMMeZUcibzbv7pZnGHuJl03SSHJfVMYTp1rWVjjCkkquzAV+32PyJUD3Q8xhhjTkwVjyobVJmqykhV7lSlFVAOX6GHS4F/Ab/4t+8CPseX0EsVYaUIn4vwjAg3i3Chv1BEkSVCsNPJJIeD5557DueKFbivuMKXmDtb0dHw0kuw8i8nIefX5iLnn3zATb+guuLsezfGGJNXxybzQqJDcJVy0euLXlS9pKrjo2s+qr9x5sbQQMdpij9L6BljzjWvAVuBlwIdiDHGmNOniqqyW5U5qoxVZYgqnVWpDoQDCcCtwKeAF7gG+C++Sr0HRNgiwjQRRolwjwhtRajoH/l2zhLB7XIxNTiYbj/8gPz73+AqgLkwtWvDnHlurr6hFLfI+5eIcHX+X8UYY0xuckvmZbOknilsltAzxpxT/BUUhwDdRWgX6HiMKYlEZJqILBGRRSLys4g0PUG7tiKS5m+X/QrJcfwOEVkjIutE5B0RcZ+gn1kikiEiFXLsqyUiXhH50r89U0T65Dj+iIgcFpFSOfatEpHL8uFHYAqIKodU+VOVD1V5VJXuqsQBoUB94FpgNLAduBh4DpgJ7AD2iTBPhPEiPChCFxHq+Kf+Fi4RByKXINITkV6ItHHgHel00nbOHJwdOhTs5UuVgokfOLnlVhGnk49EaFCwVzTGGHOyZF42S+qZwmQJPWPMuWgK8B0wSsTW+jQmAG5Q1Uaq2gR4GXjvJG3/UtUmOV5pACJSE98U+tZAHSAG6H+SfpYAN+fYvh1YkGN7JtA2x3Y7YBHQ3H+9SkANYO7Jb82ci1TJUmW1Kl+p8rwqt6pyMVAaqAx0AB4B/sS3bt9g4BtgDXBIhCUiTBbhCRF6idBEhOO/aZ0tkVhEXsFXJfgXYBLw0QfcNNuLY+B77+FISMj3q+bK4YAxY5CmTQlyu/lWhMjCubIxxpQ8eUnmZQtEUq9y5crnv/zyy+UK+jrm3GIJPWPMOcdfEXEIvgXW7wpwOMaUOKqalGMzCs6oSml34GtV3amqCrwF3HiS9hOAWwBExIGvsEJijuNHEnoiEgTUBN7hnyRfW2C+qh4+g1jNOco/fXe7KtNVeUOV+1TpoEplfMm+i/G9T0wFgoBewAfAQnyJvg0iTBVhpAh3itBKhLJnFIzIJfiSyIOB2Ozd+ynNvc63GDRQ6dXrzO/1TAQHwxdf4AoNpTq+hKcxxph8djrJvGxFcaReVlYWHo8n0GGY02AJPWPMOUmVv4BXgRFn/OXLGHPGRGSiiGzBN8ru5pM0rS0if4rIHyIyIMf+asCmHNsb/ftOZAuwU0QuBjoC/wP25zj+GxArIlXxjcr7HZgFR6bmtwNmnOq+TPGhSrIqv6syQZVhqlyrSn0gDIgDeuBbm28fvoTvq8DPwB4RdoswR4SxIgwRobMI1UVO8NlYpBbwA1D+2EOjGISUKsWTIwKzxF+VKvDww7icTgaJHB+fMcaYM3cmybxsBZHUe+aZZ8pXrVo1PiwsrGnZsmUbd+vWrUabNm3q7tixI+ihhx6qFhoa2rROnTpx4EvQPfroozE1atSIj4iIaBIfH3/e5MmTj4zm/vbbbyNEJOHtt9+OrlGjRnxoaOgF27Ztc40fPz46Li7uvMjIyCbR0dGN27dvX2fVqlVB2ed5vV7+7//+r2KlSpXOj4iIaNKzZ8/qV155Za1u3brVyG6zZ88e50033VQtNjb2/NKlSze59NJL66xYsSIIk68soWeMOZeNADL8fxpjCpGq9lXVqvhG/Tx/gmZ/AlVU9QLgOuBuEbnhLC47HrjD/xp/TDwZ+KbTtvW/ZqnqOqCKfx29tvhG8ZkSTpV0VVao8pkqT6nSR5UEIAKoDnQGngZW4BsJ/hC+ZR42AgdF+FOED0V4VITuIsRl4noEX6LwKAeI4FXXvxj8LxdRUaeObdKkSbRu3ZrIyEhEhKysrCPH1q9fzyWXXEK5cuWIjIykdu3ajBgxAq/Xe8p+77kHwsNx4hvdbowxJp9MuWdKdYfL4TrdZF627KRemdplHF/3+7rW2cSydOnS4BEjRlT5/PPP1x46dGjh+vXrl/br12/PnDlz1lSqVCnj2Wef3Zyamrpw7dq1ywFGjBgR8/bbb8d88MEH6/ft27do0KBBO2+66aY6v/zyy1GJxU8++aTM/PnzVyYnJy+MjY3NioyM9IwbN27jvn37Fq1YsWI5QK9evY7E/uabb5Z98803K3744Yfr9+3bt6h58+aHpk2bVjr7uNfr5aqrrqp98OBB58KFC1fs2LFjccOGDdO6du1aNz09/ZwucFXUWELPGHPOUuUAvi9ad4nQONDxGFMciUjfHAUtbjv2uKpOANqJyHEjZVX1gKom+/++FfgI35p5AJvxJU+y1fDvO5kvgU5AY2B6Lsdn4huJ1w7f6DyA+fhGYlXGN4rPmFyp4lVlsyo/qPKqKnercqkqFYByQCvgfnwjPUsDtwGTo9m3TDn+/w2An+hAsiecgQPzFkN0dDQDBgzg1VdfPe5Y+fLlGT9+PLt27eLAgQP8+OOPJCYm8sYbb5yy3/BwuPtuXMHB3JS3SIwxxuRF/Wvq7zu47SB/vPnHGfex7ONl7Fy8k7pd6u47m1jcbreqqixatChk3759jqioKO8VV1yRcqL2EyZMKH/fffftbNWqVarb7aZ///7727Rpk/zmm28etdbeSy+9tLVixYqekJAQdblcdO/e/UCLFi3SXC4XlSpVyhoxYsS2xYsXh+3fv98BkJiYWLZXr1572rdvf8jtdjNkyJA9DRo0SMvub968eaF//vln+Pvvv78pJibGExISoq+//vq2bdu2Bc+aNeu4h2PmzFlCzxhzrpuAb2H8USLYEx1j8pmqTsxR0OJdESktIkfWBxORa4G9+KYtHkVEKvnXu0NEIoAu+NYuA/gMuFpEKoqIAHfjKyBwslgO4xthNEhVcxuWNBNfcYTqqrrKv2828Cgw1z+Kz5jTpspeVeaqMk6Vf6lylSq1gLBhPNc9iMxcz/uZ1jRqkEHZPC4M0alTJ2688UZq1Tp+kEZERAT169fH6fQV7RURHA4Hf/31V576btsW0tOpJkLFvEVjjDHmVFr+q+Wey569bPPMR2Yy5+k5p33+ogmL+Oq2r7howEU7O7/SefvZxNKgQYOMcePGrZ84cWK56tWrN4qPjz9v7NixZU7UfteuXe46deqk59xXq1at9G3bth019bV+/fpHfX6aMmVKeIsWLeqVL1++UXh4eNNOnTo1ANi+fbsbYOfOne7q1asf1W+VKlWObK9cuTLY4/FIlSpVGkVERDSJiIhoEh0d3QRg48aNNu02H1n1SGPMOU0VrwgD+WcUzuQAh2RMcRcFfCIiIYAX2A108Re2QETG4St28TXQDbhHRLLwfab4BHgXQFXXi8hw/qk6OwsYe6qLq+rnJzn8BxCNrxJ2ttn+fsfneoYxZ0GVNOTFRSc6/rO7Pa3aB+frNVu3bs3//vc/Dh8+TJUqVbj33nvzdF7LliCCqtIa3/+Lxhhj8kGrYa12A0x/aHo1gDYPt8nTeTmTeVeMumKbOM5+bEKfPn2S+vTpk5SZmcmECROi+/fvX6tFixaHfM9OjxYTE5O5du3ao96kNmzYEFy5cuWjEnhOp/NI8bPDhw/LDTfcUHfo0KHbp06dujY6Oto7d+7ckFatWjX0fxSkYsWKmZs2bTqq361btwbXr18/DSA2NjbT7Xbrnj17FgcHB59JYTWTRzZCzxhzzlPlN2Ai8JII53yFKGOKMlXdpKrNVPV8VW2sqh1UdVGO4/38yTxUdbSqxvnbxanq49mJP//xd1S1tv91h6rmOsxJVduq6pe57H9PVa/NsZ2lqhGq2ivHvr9UVVT1uXz5ARhzvPX4qtseZxPVadAgfy/2888/k5KSwty5c7n55pupUKFCns6LjISYGDI5eqq7McaYfNBqWKvdpzNSryCSeYsXLw7++OOPo5KTkx1ut5vo6GgPgNPppHz58pl//fVXqZztb7755t1vvPFGxXnz5oVkZmYybty46NmzZ0fdfffde050jfT0dElPT3dER0d7oqOjvRs3bnQ//PDDlXO2ufHGG/d+/PHHZWfPnh2amZnJa6+9VnbVqlVHFhjs1KlTSt26ddP69u1bbdu2bS6A3bt3O997773SBw8etBxUPrIfpjGmqBiGb2TOfwIdiDHmHJYotzIpeCOJ0jzQoZhiwpekfjK3Q4e9QZQqlduRs+N0OmnZsiWlS5emf//+eT4v2Dde4vRXbTfGGHNKeU3qFUQyDyA9Pd3x/PPPV6pSpUqj8PDwpsOGDas6evToDXFxcekPP/zw9h9++KF0REREk3r16jUEGD58+K7bb7/97169etWOjo5u+sorr1ScOHHiujZt2qSe6BpRUVHel19+eePIkSMrhYaGNu3UqVPd66+/fn/ONvfee+/e/v377+rZs2edMmXKNJk7d254u3btkoODg70ALpeLmTNnrg4JCfE2a9bsvLCwsKaNGjVq+MUXX0SLiI3Yy0eS40G6Mcac00T4N/AE0ECVTYGOp0RJlDhgGRBPb10e6HCMyVWi1EScy3GGheBJW49mnk9vPeGHVmPyzDeX6U18a0EeUc6VxBOvRpHHWbFHzJo1i3bt2pGZmYnLdeIVcJ5++mk++ugjli1blqd+Y2PJ2LGDR1R58fQiMsaYkmXBggW1XC7XjHr16h0ICQk5rTV4f3nul/LTH5perd1T7Y6bfltQybxzXYMGDRped911+5599tmdgY4lLS0taPXq1ZFZWVntExIS1gc6noJkI/SMMUXJa8BW4KVAB2KMOcckigNxv094HTdXLABncHUQm4Zr8oeqonoPMAhIzt5dTTazenXeu/F4PBw+fJiMDN93x/T0dA4fPozX6+XHH39k3rx5pKenk5WVxcyZM3nttde48sor89R3Sgrs2oUb2HIad2aMMeY0nWikXklK5r3zzjvRKSkpkpqaKk888USF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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "from grid2op.PlotGrid import PlotMatplot\n", "plot_helper = PlotMatplot(env.observation_space)\n", @@ -366,9 +544,26 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1., 1., 1., ..., 0., 0., 0.],\n", + " [1., 1., 1., ..., 0., 0., 0.],\n", + " [1., 1., 1., ..., 0., 0., 0.],\n", + " ...,\n", + " [0., 0., 0., ..., 1., 1., 1.],\n", + " [0., 0., 0., ..., 1., 1., 1.],\n", + " [0., 0., 0., ..., 1., 1., 1.]], dtype=float32)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# if \"as_csr_matrix\" is set to True, then the result will be given as a csr scipy sparse matrix\n", "mat = obs.connectivity_matrix(as_csr_matrix=False)\n", @@ -384,9 +579,24 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 8, -1, -1, 10, -1, -1],\n", + " [ 8, -1, -1, 11, -1, -1],\n", + " [ 8, -1, -1, -1, 16, -1],\n", + " [ 8, -1, -1, 19, -1, -1],\n", + " [ 8, 5, -1, -1, -1, -1]], dtype=int32)" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "load_id = 5\n", "which_connected = mat[obs.load_pos_topo_vect[load_id]] == 1\n", @@ -444,9 +654,34 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1., 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", + " [1., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", + " [0., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", + " [0., 1., 1., 1., 1., 0., 1., 0., 1., 0., 0., 0., 0., 0.],\n", + " [1., 1., 0., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0.],\n", + " [0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 1., 1., 1., 0.],\n", + " [0., 0., 0., 1., 0., 0., 1., 1., 1., 0., 0., 0., 0., 0.],\n", + " [0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 0., 0.],\n", + " [0., 0., 0., 1., 0., 0., 1., 0., 1., 1., 0., 0., 0., 1.],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 1., 0., 0., 0.],\n", + " [0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 1., 0., 0., 0.],\n", + " [0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1., 1., 0.],\n", + " [0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1., 1., 1.],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 1.]],\n", + " dtype=float32)" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "obs.bus_connectivity_matrix(as_csr_matrix=False)" ] @@ -482,9 +717,75 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 8.2246674e+01, -4.2346096e+01, 0.0000000e+00, 0.0000000e+00,\n", + " -3.9900578e+01, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00],\n", + " [ 4.1986198e+01, 5.9500000e+01, -2.3991766e+01, -4.1828262e+01,\n", + " -3.5666172e+01, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00],\n", + " [ 0.0000000e+00, 2.3725140e+01, -6.5000000e+00, -1.7225140e+01,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00],\n", + " [ 0.0000000e+00, 4.0866714e+01, 1.6992859e+01, -4.4299999e+01,\n", + " 2.7542929e+01, 0.0000000e+00, -2.6171078e+01, 0.0000000e+00,\n", + " -1.4931423e+01, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00],\n", + " [ 3.9088322e+01, 3.4981895e+01, 0.0000000e+00, -2.7643835e+01,\n", + " -6.9000001e+00, -3.9526379e+01, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00],\n", + " [ 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 3.9526379e+01, -6.5999994e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, -8.1183472e+00, -7.4602180e+00,\n", + " -1.7347816e+01, 0.0000000e+00],\n", + " [ 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 2.6171078e+01,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 1.0408341e-14,\n", + " -2.6171078e+01, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00],\n", + " [ 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, -1.0408341e-14, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00],\n", + " [ 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 1.4931423e+01,\n", + " 0.0000000e+00, 0.0000000e+00, 2.6171078e+01, 0.0000000e+00,\n", + " -2.8500000e+01, -4.3849845e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, -8.2175179e+00],\n", + " [ 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 4.3787756e+00, -8.8000002e+00, 4.4212246e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00],\n", + " [ 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 7.9793596e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, -4.4793596e+00, -3.5000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00],\n", + " [ 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 7.3712506e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, -5.4000001e+00,\n", + " -1.9712504e+00, 0.0000000e+00],\n", + " [ 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 1.7057173e+01, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 1.9592170e+00,\n", + " -1.2600000e+01, -6.4163899e+00],\n", + " [ 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 8.1257477e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 6.2742519e+00, -1.4400000e+01]], dtype=float32)" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "mat, (load_bus, gen_bus, stor_bus, lor_bus, lex_bus) = obs.flow_bus_matrix(active_flow=True, as_csr_matrix=False)\n", "mat, (load_bus, gen_bus, stor_bus, lor_bus, lex_bus) = obs.flow_bus_matrix(active_flow=True, as_csr_matrix=False)\n", @@ -509,9 +810,28 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The load 5 absorbs: 28.50MW\n", + "It is connected to the bus id 8 of the matrix\n", + "And we can see the diagonal coefficient of the \"flow bus matrix\" at this bus is: -28.50\n", + "Also we can see that powerlines [10 11 19] have their origin side connected at this bus.\n", + "And powerlines [16] have their extremity side connected at this bus.\n", + "And, for example, if we look at powerline 10, that connects bus 8 to bus 9 we can see that:\n", + "The flow from bus 8 to 9 is -4.38MW\n", + "For information, the flow at the origin side of this line 10 is 4.38MW. And this is not a coincidence.\n", + "\n", + "Also, we want to emphasize that this matrix is NOT symmetrical, for example:\n", + "\t the power from bus 8 to 9 is -4.38498 MW\n", + "\t the power from bus 9 to 8 is 4.37878 MW\n" + ] + } + ], "source": [ "load_id = 5\n", "this_load_bus = load_bus[load_id]\n", @@ -613,11 +933,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": { "scrolled": true }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import networkx\n", "graph = obs.as_networkx()\n", @@ -633,9 +964,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "networkx.draw_networkx(graph,\n", " with_labels=False,\n", @@ -649,7 +991,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -695,9 +1037,136 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 2.0190000e+03, 1.0000000e+00, 6.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 6.0000000e+00, 8.1400002e+01, 7.9300003e+01,\n", + " 5.3000002e+00, 0.0000000e+00, 0.0000000e+00, 8.2246674e+01,\n", + " 1.9496038e+01, 7.1340233e+01, 2.4368923e+01, 2.4368923e+01,\n", + " 2.4018070e+01, -1.7274660e+01, 1.4210001e+02, 1.4210001e+02,\n", + " 2.2000000e+01, 2.2000000e+01, 1.3200001e+01, 1.4210001e+02,\n", + " 2.1900000e+01, 8.5800003e+01, 4.4299999e+01, 6.9000001e+00,\n", + " 1.1900000e+01, 2.8500000e+01, 8.8000002e+00, 3.5000000e+00,\n", + " 5.4000001e+00, 1.2600000e+01, 1.4400000e+01, 1.5400000e+01,\n", + " 5.9700001e+01, 3.0799999e+01, 4.8000002e+00, 8.3000002e+00,\n", + " 1.9400000e+01, 6.0999999e+00, 2.4000001e+00, 3.9000001e+00,\n", + " 8.8000002e+00, 1.0500000e+01, 1.4210001e+02, 1.4210001e+02,\n", + " 1.3866075e+02, 1.3929695e+02, 2.2000000e+01, 2.1130220e+01,\n", + " 2.1129551e+01, 2.1478817e+01, 2.1571596e+01, 2.1432823e+01,\n", + " 2.0750198e+01, 4.2346096e+01, 3.9900578e+01, 2.3991766e+01,\n", + " 4.1828262e+01, 3.5666172e+01, 1.7225140e+01, -2.7542929e+01,\n", + " 8.1183472e+00, 7.4602180e+00, 1.7347816e+01, 4.3849845e+00,\n", + " 8.2175179e+00, -4.4212246e+00, 1.9712504e+00, 6.4163899e+00,\n", + " 2.6171078e+01, 1.4931423e+01, 3.9526379e+01, -1.0408341e-14,\n", + " -2.6171078e+01, -1.6060501e+01, -1.2141596e+00, -7.4234338e+00,\n", + " 4.0774456e-01, -4.4919857e-01, 7.7376227e+00, -2.1186779e+00,\n", + " 1.0543067e+01, 5.6506634e+00, 1.5188450e+01, -1.5994288e+00,\n", + " 3.6139119e+00, -7.7159214e+00, 1.5654972e+00, 7.3706942e+00,\n", + " -1.6119450e+01, -3.0833588e+00, -5.6308179e+00, -2.3178274e+01,\n", + " -4.4921541e+00, 1.4210001e+02, 1.4210001e+02, 1.4210001e+02,\n", + " 1.4210001e+02, 1.4210001e+02, 1.4210001e+02, 1.3866075e+02,\n", + " 2.2000000e+01, 2.2000000e+01, 2.2000000e+01, 2.1130220e+01,\n", + " 2.1130220e+01, 2.1129551e+01, 2.1571596e+01, 2.1432823e+01,\n", + " 1.3866075e+02, 1.3866075e+02, 1.3929695e+02, 1.4861537e+01,\n", + " 2.1130220e+01, 1.8401025e+02, 1.6219051e+02, 1.0203776e+02,\n", + " 1.6995570e+02, 1.4492264e+02, 7.6722275e+01, 1.1502098e+02,\n", + " 3.4920593e+02, 2.4560159e+02, 6.0509528e+02, 1.2753420e+02,\n", + " 2.4528467e+02, 2.4299077e+02, 6.7372948e+01, 2.6324207e+02,\n", + " 1.2798145e+02, 6.3482616e+01, 1.6548074e+02, 9.0044409e+02,\n", + " 7.2554138e+02, -4.1986198e+01, -3.9088322e+01, -2.3725140e+01,\n", + " -4.0866714e+01, -3.4981895e+01, -1.6992859e+01, 2.7643835e+01,\n", + " -7.9793596e+00, -7.3712506e+00, -1.7057173e+01, -4.3787756e+00,\n", + " -8.1257477e+00, 4.4793596e+00, -1.9592170e+00, -6.2742519e+00,\n", + " -2.6171078e+01, -1.4931423e+01, -3.9526379e+01, 1.0408341e-14,\n", + " 2.6171078e+01, 1.1560926e+01, -5.4758495e-01, 3.9026122e+00,\n", + " -1.0090021e+00, -1.0585623e+00, -8.4695101e+00, 2.4369648e+00,\n", + " -1.0252009e+01, -5.4654975e+00, -1.4616084e+01, 1.6159215e+00,\n", + " -3.4187043e+00, 7.8520093e+00, -1.5546099e+00, -7.0812955e+00,\n", + " 1.7991196e+01, 4.2857671e+00, 9.0556650e+00, 2.4018070e+01,\n", + " 5.1870790e+00, 1.4210001e+02, 1.3929695e+02, 1.4210001e+02,\n", + " 1.3866075e+02, 1.3929695e+02, 1.3866075e+02, 1.3929695e+02,\n", + " 2.1478817e+01, 2.1571596e+01, 2.1432823e+01, 2.1129551e+01,\n", + " 2.0750198e+01, 2.1478817e+01, 2.1432823e+01, 2.0750198e+01,\n", + " 1.4861537e+01, 2.1130220e+01, 2.2000000e+01, 1.3200001e+01,\n", + " 1.4861537e+01, 1.7693805e+02, 1.6202699e+02, 9.7690315e+01,\n", + " 1.7021111e+02, 1.4505737e+02, 7.9055550e+01, 1.1502098e+02,\n", + " 3.4920593e+02, 2.4560159e+02, 6.0509528e+02, 1.2753420e+02,\n", + " 2.4528467e+02, 2.4299077e+02, 6.7372948e+01, 2.6324207e+02,\n", + " 1.2337778e+03, 4.2445111e+02, 1.0641736e+03, 1.0505181e+03,\n", + " 1.0364877e+03, 3.4012985e-01, 3.6042336e-01, 2.7210069e-01,\n", + " 2.6722595e-01, 8.2812935e-01, 2.6920095e-01, 3.4334621e-01,\n", + " 5.3151590e-01, 4.9516451e-01, 7.3167509e-01, 2.8853893e-01,\n", + " 3.8265938e-01, 2.8927472e-01, 4.3187788e-01, 3.9644888e-01,\n", + " 5.4460192e-01, 5.3346735e-01, 9.2447340e-01, 4.5339581e-01,\n", + " 4.6154031e-01, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " -1.0000000e+00, -1.0000000e+00, -1.0000000e+00, -1.0000000e+00,\n", + " -1.0000000e+00, -1.0000000e+00, -1.0000000e+00, -1.0000000e+00,\n", + " -1.0000000e+00, -1.0000000e+00, -1.0000000e+00, -1.0000000e+00,\n", + " -1.0000000e+00, -1.0000000e+00, -1.0000000e+00, -1.0000000e+00,\n", + " -1.0000000e+00, -1.0000000e+00, -1.0000000e+00, -1.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 5.3000002e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 1.0000000e+00, 1.0000000e+00,\n", + " 0.0000000e+00, -1.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, -2.1208096e+01, 2.1130220e+01, 1.0000000e+00,\n", + " 0.0000000e+00, 5.7500000e+02, 5.0000000e+00, 5.0000000e+00,\n", + " 1.0000000e+01, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 1.5000000e+01, 5.0000000e+00, 1.0000000e+01, 0.0000000e+00,\n", + " 0.0000000e+00, 0.0000000e+00, 1.5000000e+01], dtype=float32)" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "vector_representation_of_observation = obs.to_vect()\n", "vector_representation_of_observation" @@ -712,7 +1181,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -728,9 +1197,17 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[nan nan nan nan nan nan]\n" + ] + } + ], "source": [ "obs2.reset()\n", "print(obs2.gen_p)" @@ -745,9 +1222,21 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([81.4 , 79.3 , 5.3 , 0. , 0. , 82.24667],\n", + " dtype=float32)" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "obs2.from_vect(vector_representation_of_observation)\n", "obs2.gen_p" @@ -762,9 +1251,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "obs == obs2" ] @@ -808,7 +1308,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -818,18 +1318,42 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([81.4 , 79.3 , 5.3 , 0. , 0. , 82.24667],\n", + " dtype=float32)" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "obs.gen_p" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([82.7 , 80.9 , 5.3 , 0. , 0. , 80.43334],\n", + " dtype=float32)" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "obs_sim.gen_p" ] @@ -849,9 +1373,26 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1., 1., 1., ..., 0., 0., 0.],\n", + " [1., 1., 1., ..., 0., 0., 0.],\n", + " [1., 1., 1., ..., 0., 0., 0.],\n", + " ...,\n", + " [0., 0., 0., ..., 1., 1., 1.],\n", + " [0., 0., 0., ..., 1., 1., 1.],\n", + " [0., 0., 0., ..., 1., 1., 1.]], dtype=float32)" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "action_description = {}\n", "act = env.action_space(action_description)\n", @@ -901,7 +1442,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -960,9 +1501,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The results for DoNothing agent are:\n", + "\tFor chronics with id 0000\n", + "\t\t - cumulative reward: 645.702087\n", + "\t\t - number of time steps completed: 10 / 10\n" + ] + } + ], "source": [ "from grid2op.Runner import Runner\n", "from grid2op.Agent import DoNothingAgent\n", @@ -985,9 +1537,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The results for the custom agent are:\n", + "\tFor chronics with id 0000\n", + "\t\t - cumulative reward: 645.705750\n", + "\t\t - number of time steps completed: 10 / 10\n" + ] + } + ], "source": [ "runner = Runner(**env.get_params_for_runner(),\n", " agentClass=MyAgent\n", @@ -1019,9 +1582,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The results for the PowerLineSwitch agent are:\n", + "\tFor chronics with id 0000\n", + "\t\t - cumulative reward: 645.705750\n", + "\t\t - number of time steps completed: 10 / 10\n" + ] + } + ], "source": [ "from grid2op.Agent import PowerLineSwitch\n", "runner = Runner(**env.get_params_for_runner(),\n", @@ -1060,7 +1634,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.12" + "version": "3.8.10" } }, "nbformat": 4, diff --git a/getting_started/04_TrainingAnAgent.ipynb b/getting_started/04_TrainingAnAgent.ipynb index ccc01c439..5627f35a2 100644 --- a/getting_started/04_TrainingAnAgent.ipynb +++ b/getting_started/04_TrainingAnAgent.ipynb @@ -202,8 +202,8 @@ "source": [ "from grid2op.gym_compat import GymEnv\n", "import grid2op\n", - "from gym import Env\n", - "from gym.utils.env_checker import check_env\n", + "from gymnasium import Env\n", + "from gymnasium.utils.env_checker import check_env\n", "try:\n", " from lightsim2grid import LightSimBackend\n", " bk_cls = LightSimBackend\n", @@ -329,7 +329,7 @@ "metadata": {}, "outputs": [], "source": [ - "obs, reward, done, info = gym_env.step(0) # perform action labeled 0\n", + "obs, reward, terminated, truncated, info = gym_env.step(0) # perform action labeled 0\n", "obs" ] }, @@ -339,7 +339,7 @@ "metadata": {}, "outputs": [], "source": [ - "obs, reward, done, info = gym_env.step(53) # perform action labeled 53\n", + "obs, reward, terminated, truncated, info = gym_env.step(53) # perform action labeled 53\n", "obs" ] }, @@ -528,7 +528,6 @@ "metadata": {}, "outputs": [], "source": [ - "from l2rpn_baselines.DuelQSimple import evaluate\n", "import shutil\n", "from tqdm.notebook import tqdm\n", "from grid2op.Runner import Runner\n", @@ -721,7 +720,7 @@ " if not act_as_vect in actions_count:\n", " actions_count[act_as_vect] = 0\n", " actions_count[act_as_vect] += 1\n", - "print(\"The agent did {} different valid actions:\\n\".format(len(actions_count)))" + "print(\"The agent did {} different valid actions.\".format(len(actions_count)))" ] }, { diff --git a/getting_started/07_MultiEnv.ipynb b/getting_started/07_MultiEnv.ipynb index 0654ffa5a..44313f4c7 100644 --- a/getting_started/07_MultiEnv.ipynb +++ b/getting_started/07_MultiEnv.ipynb @@ -266,7 +266,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### III.b) Practical example\n", + "### III.b) Practical example (work in progress)\n", "\n", "We reuse the code of the Notebook [04_TrainingAnAgent](04_TrainingAnAgent.ipynb) to train a new agent we strongly recommend you to have a look at it if it is not done already.\n", "\n", @@ -284,163 +284,8 @@ "\n", "This is especially suited in the case of powersystem operations, as it can be quite computationnally expensive to solve for the powerflow equations at each nodes of the grid (also called [Kirchhoff's laws](https://en.wikipedia.org/wiki/Kirchhoff%27s_circuit_laws))\n", "\n", - "#### What you have to do\n", - "\n", - "We recall here the code that we used in the relevant notebook to train the agent:\n", - "```python\n", - "# create an environment\n", - "env = make(env_name, test=True) \n", - "# don't forget to set \"test=False\" (or remove it, as False is the default value) for \"real\" training\n", - "\n", - "# import the train function and train your agent\n", - "from l2rpn_baselines.DuelQSimple import train\n", - "from l2rpn_baselines.utils import NNParam, TrainingParam\n", - "agent_name = \"test_agent\"\n", - "save_path = \"saved_agent_DDDQN_{}\".format(train_iter)\n", - "logs_dir=\"tf_logs_DDDQN\"\n", - "\n", - "\n", - "# we then define the neural network we want to make (you may change this at will)\n", - "## 1. first we choose what \"part\" of the observation we want as input, \n", - "## here for example only the generator and load information\n", - "## see https://grid2op.readthedocs.io/en/latest/observation.html#main-observation-attributes\n", - "## for the detailed about all the observation attributes you want to have\n", - "li_attr_obs_X = [\"gen_p\", \"gen_v\", \"load_p\", \"load_q\"]\n", - "# this automatically computes the size of the resulting vector\n", - "observation_size = NNParam.get_obs_size(env, li_attr_obs_X) \n", - "\n", - "## 2. then we define its architecture\n", - "sizes = [300, 300, 300] # 3 hidden layers, of 300 units each, why not...\n", - "activs = [\"relu\" for _ in sizes] # all followed by relu activation, because... why not\n", - "## 4. you put it all on a dictionnary like that (specific to this baseline)\n", - "kwargs_archi = {'observation_size': observation_size,\n", - " 'sizes': sizes,\n", - " 'activs': activs,\n", - " \"list_attr_obs\": li_attr_obs_X}\n", - "\n", - "# you can also change the training parameters you are using\n", - "# more information at https://l2rpn-baselines.readthedocs.io/en/latest/utils.html#l2rpn_baselines.utils.TrainingParam\n", - "tp = TrainingParam()\n", - "tp.batch_size = 32 # for example...\n", - "tp.update_tensorboard_freq = int(train_iter / 10)\n", - "tp.save_model_each = int(train_iter / 3)\n", - "tp.min_observation = int(train_iter / 5)\n", - "train(env,\n", - " name=agent_name,\n", - " iterations=train_iter,\n", - " save_path=save_path,\n", - " load_path=None, # put something else if you want to reload an agent instead of creating a new one\n", - " logs_dir=logs_dir,\n", - " kwargs_archi=kwargs_archi,\n", - " training_param=tp)\n", - "```\n", - "\n", "Here, you will see in the next cell how to (*not really*) change it to train a agent on different environments:" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "train_iter = TRAINING_STEP\n", - "# import the train function and train your agent\n", - "from l2rpn_baselines.DuelQSimple import train\n", - "from l2rpn_baselines.utils import NNParam, TrainingParam, make_multi_env\n", - "agent_name = \"test_agent_multi\"\n", - "save_path = \"saved_agent_DDDQN_{}_multi\".format(train_iter)\n", - "logs_dir=\"tf_logs_DDDQN\"\n", - "\n", - "# just add the relevant import (see above) and this line\n", - "my_envs = make_multi_env(env_init=env, nb_env=NUM_CORE)\n", - "# and that's it !\n", - "\n", - "\n", - "# we then define the neural network we want to make (you may change this at will)\n", - "## 1. first we choose what \"part\" of the observation we want as input, \n", - "## here for example only the generator and load information\n", - "## see https://grid2op.readthedocs.io/en/latest/observation.html#main-observation-attributes\n", - "## for the detailed about all the observation attributes you want to have\n", - "li_attr_obs_X = [\"gen_p\", \"gen_v\", \"load_p\", \"load_q\"]\n", - "# this automatically computes the size of the resulting vector\n", - "observation_size = NNParam.get_obs_size(env, li_attr_obs_X) \n", - "\n", - "## 2. then we define its architecture\n", - "sizes = [300, 300, 300] # 3 hidden layers, of 300 units each, why not...\n", - "activs = [\"relu\" for _ in sizes] # all followed by relu activation, because... why not\n", - "## 4. you put it all on a dictionnary like that (specific to this baseline)\n", - "kwargs_archi = {'observation_size': observation_size,\n", - " 'sizes': sizes,\n", - " 'activs': activs,\n", - " \"list_attr_obs\": li_attr_obs_X}\n", - "\n", - "# you can also change the training parameters you are using\n", - "# more information at https://l2rpn-baselines.readthedocs.io/en/latest/utils.html#l2rpn_baselines.utils.TrainingParam\n", - "tp = TrainingParam()\n", - "tp.batch_size = 32 # for example...\n", - "tp.update_tensorboard_freq = int(train_iter / 10)\n", - "tp.save_model_each = int(train_iter / 3)\n", - "tp.min_observation = int(train_iter / 5)\n", - "train(my_envs,\n", - " name=agent_name,\n", - " iterations=train_iter,\n", - " save_path=save_path,\n", - " load_path=None, # put something else if you want to reload an agent instead of creating a new one\n", - " logs_dir=logs_dir,\n", - " kwargs_archi=kwargs_archi,\n", - " training_param=tp)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### II c) Assess the performance of the trained agent" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Nothing is changing... Like really, it's the same code as in notebook 4 (we told you to have a look ;-) )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from l2rpn_baselines.DuelQSimple import evaluate\n", - "path_save_results = \"{}_results_multi\".format(save_path)\n", - "\n", - "evaluated_agent, res_runner = evaluate(env,\n", - " name=agent_name,\n", - " load_path=save_path,\n", - " logs_path=path_save_results,\n", - " nb_episode=2,\n", - " nb_process=1,\n", - " max_steps=100,\n", - " verbose=True,\n", - " save_gif=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### II d) That is it ?\n", - "\n", - "Yes there is nothing more to say about it. As long as you use one of the compatible baselines (at the date of writing):\n", - "- [DeepQSimple](https://l2rpn-baselines.readthedocs.io/en/master/DeepQSimple.html)\n", - "- [DuelQSimple](https://l2rpn-baselines.readthedocs.io/en/master/DuelQSimple.html)\n", - "- [DuelQLeapNet](https://l2rpn-baselines.readthedocs.io/en/master/DuelQLeapNet.html)\n", - "\n", - "You do not have anything more to do :-)\n", - "\n", - "If you want to use another baseline that does not support this feature, feel free to add an issue in the l2rpn-baselines official github at this adress [https://github.com/rte-france/l2rpn-baselines/issues](https://github.com/rte-france/l2rpn-baselines/issues)" - ] } ], "metadata": { diff --git a/getting_started/08_PlottingCapabilities.ipynb b/getting_started/08_PlottingCapabilities.ipynb index e6d62db0a..5c6ccb012 100644 --- a/getting_started/08_PlottingCapabilities.ipynb +++ b/getting_started/08_PlottingCapabilities.ipynb @@ -302,7 +302,7 @@ "outputs": [], "source": [ "from grid2op.Runner import Runner\n", - "env = grid2op.make(test=True)\n", + "env = grid2op.make(\"l2rpn_case14_sandbox\", test=True)\n", "my_awesome_agent = CustomRandom(env.action_space)\n", "runner = Runner(**env.get_params_for_runner(), agentClass=None, agentInstance=my_awesome_agent)" ] @@ -501,7 +501,7 @@ "source": [ "# If you want to start grid2viz for better plotting, you may try the following :\n", "# (remove the \"if False:\" or replace it with \"if True:\")\n", - "if True:\n", + "if False:\n", " !$sys.executable -m grid2viz.main --agents_path $path_agents\n", "else:\n", " print(\"You need to copy paste the command in the cell above to run grid2viz\")" diff --git a/grid2op/Action/_BackendAction.py b/grid2op/Action/_BackendAction/__init__.py similarity index 75% rename from grid2op/Action/_BackendAction.py rename to grid2op/Action/_BackendAction/__init__.py index 97de586fb..d34e00287 100644 --- a/grid2op/Action/_BackendAction.py +++ b/grid2op/Action/_BackendAction/__init__.py @@ -7,7 +7,7 @@ # This file is part of Grid2Op, Grid2Op a testbed platform to model sequential decision making in power systems. """ -This file is here to maintain compatibility with lightsim2grid (but will disappear "soon") +This folder / file is here to maintain compatibility with lightsim2grid (but is likely to disappear "soon") """ -from grid2op.Action._backendAction import _BackendAction +from .._backendAction import _BackendAction \ No newline at end of file diff --git a/grid2op/Action/__init__.py b/grid2op/Action/__init__.py index d082e05e8..03b116beb 100644 --- a/grid2op/Action/__init__.py +++ b/grid2op/Action/__init__.py @@ -20,6 +20,7 @@ "TopologyChangeAction", "TopologyChangeAndDispatchAction", "DispatchAction", + "_BackendAction" ] # Internals @@ -49,3 +50,4 @@ TopologyChangeAndDispatchAction, ) from grid2op.Action.dispatchAction import DispatchAction +import grid2op.Action._backendAction as _BackendAction diff --git a/grid2op/Action/baseAction.py b/grid2op/Action/baseAction.py index 8c58c9145..02e3770f1 100644 --- a/grid2op/Action/baseAction.py +++ b/grid2op/Action/baseAction.py @@ -612,10 +612,16 @@ def as_serializable_dict(self) -> dict: res["raise_alert"] = [ int(id_) for id_, val in enumerate(self._raise_alert) if val ] + if not res["raise_alert"]: + del res["raise_alert"] + if self._modif_alarm: res["raise_alarm"] = [ int(id_) for id_, val in enumerate(self._raise_alarm) if val ] + if not res["raise_alarm"]: + del res["raise_alarm"] + if self._modif_change_bus: res["change_bus"] = {} self._aux_serialize_add_key_change("load_change_bus", "loads_id", res["change_bus"]) @@ -623,11 +629,15 @@ def as_serializable_dict(self) -> dict: self._aux_serialize_add_key_change("line_or_change_bus", "lines_or_id", res["change_bus"]) self._aux_serialize_add_key_change("line_ex_change_bus", "lines_ex_id", res["change_bus"]) self._aux_serialize_add_key_change("storage_change_bus", "storages_id", res["change_bus"]) + if not res["change_bus"]: + del res["change_bus"] if self._modif_change_status: res["change_line_status"] = [ int(id_) for id_, val in enumerate(self._switch_line_status) if val ] + if not res["change_line_status"]: + del res["change_line_status"] # int elements if self._modif_set_bus: @@ -637,6 +647,8 @@ def as_serializable_dict(self) -> dict: self._aux_serialize_add_key_set("line_or_set_bus", "lines_or_id", res["set_bus"]) self._aux_serialize_add_key_set("line_ex_set_bus", "lines_ex_id", res["set_bus"]) self._aux_serialize_add_key_set("storage_set_bus", "storages_id", res["set_bus"]) + if not res["set_bus"]: + del res["set_bus"] if self._modif_set_status: res["set_line_status"] = [ @@ -644,6 +656,8 @@ def as_serializable_dict(self) -> dict: for id_, val in enumerate(self._set_line_status) if val != 0 ] + if not res["set_line_status"]: + del res["set_line_status"] # float elements if self._modif_redispatch: @@ -652,18 +666,26 @@ def as_serializable_dict(self) -> dict: for id_, val in enumerate(self._redispatch) if val != 0.0 ] + if not res["redispatch"]: + del res["redispatch"] + if self._modif_storage: res["set_storage"] = [ (int(id_), float(val)) for id_, val in enumerate(self._storage_power) if val != 0.0 ] + if not res["set_storage"]: + del res["set_storage"] + if self._modif_curtailment: res["curtail"] = [ (int(id_), float(val)) for id_, val in enumerate(self._curtail) if val != -1 ] + if not res["curtail"]: + del res["curtail"] # more advanced options if self._modif_inj: @@ -1787,7 +1809,7 @@ def _digest_setbus(self, dict_): if dict_["set_bus"] is None: # no real action has been made return - + if isinstance(dict_["set_bus"], dict): ddict_ = dict_["set_bus"] handled = False @@ -1809,6 +1831,9 @@ def _digest_setbus(self, dict_): if "substations_id" in ddict_: self.sub_set_bus = ddict_["substations_id"] handled = True + if ddict_ == {}: + handled = True + # weird way to do nothing but hey, how am I to judge ? if not handled: msg = 'Invalid way to set the topology. When dict_["set_bus"] is a dictionary it should have' msg += ( @@ -1849,6 +1874,9 @@ def _digest_change_bus(self, dict_): if "substations_id" in ddict_: self.sub_change_bus = ddict_["substations_id"] handled = True + if ddict_ == {}: + handled = True + # weird way to do nothing but hey, how am I to judge ? if not handled: msg = 'Invalid way to change the topology. When dict_["set_bus"] is a dictionary it should have' msg += ( diff --git a/grid2op/Backend/pandaPowerBackend.py b/grid2op/Backend/pandaPowerBackend.py index f532115d5..116d09080 100644 --- a/grid2op/Backend/pandaPowerBackend.py +++ b/grid2op/Backend/pandaPowerBackend.py @@ -902,7 +902,7 @@ def _apply_load_bus(self, new_bus, id_el_backend, id_topo): self._grid.load["in_service"].iat[id_el_backend] = True else: self._grid.load["in_service"].iat[id_el_backend] = False - self._grid.load["bus"].iat[id_el_backend] = -1 + # self._grid.load["bus"].iat[id_el_backend] = -1 # not needed and cause bugs with certain pandas version def _apply_gen_bus(self, new_bus, id_el_backend, id_topo): new_bus_backend = type(self).local_bus_to_global_int( @@ -919,7 +919,7 @@ def _apply_gen_bus(self, new_bus, id_el_backend, id_topo): self._grid.ext_grid["bus"].iat[0] = new_bus_backend else: self._grid.gen["in_service"].iat[id_el_backend] = False - self._grid.gen["bus"].iat[id_el_backend] = -1 + # self._grid.gen["bus"].iat[id_el_backend] = -1 # not needed and cause bugs with certain pandas version # in this case the slack bus cannot be disconnected def _apply_lor_bus(self, new_bus, id_el_backend, id_topo): diff --git a/grid2op/Chronics/fromOneEpisodeData.py b/grid2op/Chronics/fromOneEpisodeData.py index 39ba20426..a21324337 100644 --- a/grid2op/Chronics/fromOneEpisodeData.py +++ b/grid2op/Chronics/fromOneEpisodeData.py @@ -64,7 +64,7 @@ class FromOneEpisodeData(GridValue): parameters (see example below) .. seealso:: - :class:`grid2op.Chronics.FromMultiEpisodeData`if you want to use multiple episode data + :class:`grid2op.Chronics.FromMultiEpisodeData` if you want to use multiple episode data Examples --------- diff --git a/grid2op/Environment/_obsEnv.py b/grid2op/Environment/_obsEnv.py index 8db0060d4..421ba2490 100644 --- a/grid2op/Environment/_obsEnv.py +++ b/grid2op/Environment/_obsEnv.py @@ -192,8 +192,8 @@ def _init_backend( from grid2op.Observation import ObservationSpace from grid2op.Reward import FlatReward - ob_sp_cls = ObservationSpace.init_grid(backend) - self._observation_space = ob_sp_cls(backend, + ob_sp_cls = ObservationSpace.init_grid(type(backend)) + self._observation_space = ob_sp_cls(type(backend), env=self, with_forecast=False, rewardClass=FlatReward, diff --git a/grid2op/Observation/observationSpace.py b/grid2op/Observation/observationSpace.py index afb2c919c..9e64ca48b 100644 --- a/grid2op/Observation/observationSpace.py +++ b/grid2op/Observation/observationSpace.py @@ -121,7 +121,7 @@ def __init__( self._ObsEnv_class._INIT_GRID_CLS = _ObsEnv # otherwise it's lost setattr(sys.modules[_ObsEnv.__module__], self._ObsEnv_class.__name__, self._ObsEnv_class) if _with_obs_env: - self._create_obs_env(env) + self._create_obs_env(env, observationClass) self.reward_helper.initialize(self.obs_env) for k, v in self.obs_env.other_rewards.items(): v.reset(self.obs_env) @@ -174,7 +174,7 @@ def set_real_env_kwargs(self, env): if "observation_bk_kwargs" in self._real_env_kwargs: del self._real_env_kwargs["observation_bk_kwargs"] - def _create_obs_env(self, env): + def _create_obs_env(self, env, observationClass): other_rewards = {k: v.rewardClass for k, v in env.other_rewards.items()} self.obs_env = self._ObsEnv_class( init_env_path=None, # don't leak the path of the real grid to the observation space diff --git a/grid2op/Space/GridObjects.py b/grid2op/Space/GridObjects.py index e885328da..a47b2a9aa 100644 --- a/grid2op/Space/GridObjects.py +++ b/grid2op/Space/GridObjects.py @@ -2709,7 +2709,7 @@ def init_grid(cls, gridobj, force=False, extra_name=None, force_module=None): # with shunt and without shunt, then # there might be issues name_res += "_noshunt" - + if name_res in globals(): if not force: # no need to recreate the class, it already exists diff --git a/grid2op/__init__.py b/grid2op/__init__.py index 481fdcafb..315237735 100644 --- a/grid2op/__init__.py +++ b/grid2op/__init__.py @@ -11,7 +11,7 @@ Grid2Op """ -__version__ = '1.9.4' +__version__ = '1.9.5.dev0' __all__ = [ "Action", diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/load_p.csv.bz2 b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/load_p.csv.bz2 new file mode 100644 index 000000000..cb68d0275 Binary files /dev/null and b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/load_p.csv.bz2 differ diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/load_p_forecasted.csv.bz2 b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/load_p_forecasted.csv.bz2 new file mode 100644 index 000000000..19c21de8b Binary files /dev/null and b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/load_p_forecasted.csv.bz2 differ diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/load_q.csv.bz2 b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/load_q.csv.bz2 new file mode 100644 index 000000000..35d398131 Binary files /dev/null and b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/load_q.csv.bz2 differ diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/load_q_forecasted.csv.bz2 b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/load_q_forecasted.csv.bz2 new file mode 100644 index 000000000..6c262e2d8 Binary files /dev/null and b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/load_q_forecasted.csv.bz2 differ diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/prod_p.csv.bz2 b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/prod_p.csv.bz2 new file mode 100644 index 000000000..c2f9e0442 Binary files /dev/null and b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/prod_p.csv.bz2 differ diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/prod_p_forecasted.csv.bz2 b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/prod_p_forecasted.csv.bz2 new file mode 100644 index 000000000..c79351441 Binary files /dev/null and b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/prod_p_forecasted.csv.bz2 differ diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/prod_v.csv.bz2 b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/prod_v.csv.bz2 new file mode 100644 index 000000000..79c31540f Binary files /dev/null and b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/prod_v.csv.bz2 differ diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/prod_v_forecasted.csv.bz2 b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/prod_v_forecasted.csv.bz2 new file mode 100644 index 000000000..79c31540f Binary files /dev/null and b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/prod_v_forecasted.csv.bz2 differ diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/start_datetime.info b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/start_datetime.info new file mode 100644 index 000000000..5e520426f --- /dev/null +++ b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/start_datetime.info @@ -0,0 +1 @@ +2019-01-11 23:55 diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/time_interval.info b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/time_interval.info new file mode 100644 index 000000000..beb9b9011 --- /dev/null +++ b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-12/time_interval.info @@ -0,0 +1 @@ +00:05 diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/load_p.csv.bz2 b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/load_p.csv.bz2 new file mode 100644 index 000000000..488a31b2a Binary files /dev/null and b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/load_p.csv.bz2 differ diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/load_p_forecasted.csv.bz2 b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/load_p_forecasted.csv.bz2 new file mode 100644 index 000000000..8e341212e Binary files /dev/null and b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/load_p_forecasted.csv.bz2 differ diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/load_q.csv.bz2 b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/load_q.csv.bz2 new file mode 100644 index 000000000..887ff90b5 Binary files /dev/null and b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/load_q.csv.bz2 differ diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/load_q_forecasted.csv.bz2 b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/load_q_forecasted.csv.bz2 new file mode 100644 index 000000000..74f6595f6 Binary files /dev/null and b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/load_q_forecasted.csv.bz2 differ diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/prod_p.csv.bz2 b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/prod_p.csv.bz2 new file mode 100644 index 000000000..a8f9567a0 Binary files /dev/null and b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/prod_p.csv.bz2 differ diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/prod_p_forecasted.csv.bz2 b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/prod_p_forecasted.csv.bz2 new file mode 100644 index 000000000..8a5119858 Binary files /dev/null and b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/prod_p_forecasted.csv.bz2 differ diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/prod_v.csv.bz2 b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/prod_v.csv.bz2 new file mode 100644 index 000000000..79c31540f Binary files /dev/null and b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/prod_v.csv.bz2 differ diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/prod_v_forecasted.csv.bz2 b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/prod_v_forecasted.csv.bz2 new file mode 100644 index 000000000..79c31540f Binary files /dev/null and b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/prod_v_forecasted.csv.bz2 differ diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/start_datetime.info b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/start_datetime.info new file mode 100644 index 000000000..d1822dcde --- /dev/null +++ b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/start_datetime.info @@ -0,0 +1 @@ +2019-01-12 23:55 diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/time_interval.info b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/time_interval.info new file mode 100644 index 000000000..beb9b9011 --- /dev/null +++ b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/chronics/2019-01-13/time_interval.info @@ -0,0 +1 @@ +00:05 diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/config.py b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/config.py new file mode 100644 index 000000000..023372c6f --- /dev/null +++ b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/config.py @@ -0,0 +1,42 @@ +from grid2op.Action import PowerlineChangeDispatchAndStorageAction +from grid2op.Reward import L2RPNReward +from grid2op.Rules import DefaultRules +from grid2op.Chronics import Multifolder +from grid2op.Chronics import GridStateFromFileWithForecasts +from grid2op.Backend import PandaPowerBackend +from grid2op.l2rpn_utils import ActionIDF2023, ObservationIDF2023 + +config = { + "backend": PandaPowerBackend, + "action_class": PowerlineChangeDispatchAndStorageAction, + "observation_class": ObservationIDF2023, + "action_class": ActionIDF2023, + "reward_class": L2RPNReward, + "gamerules_class": DefaultRules, + "chronics_class": Multifolder, + "grid_value_class": GridStateFromFileWithForecasts, + "volagecontroler_class": None, + "thermal_limits": [ + 541.0, + 450.0, + 375.0, + 636.0, + 175.0, + 285.0, + 335.0, + 657.0, + 496.0, + 827.0, + 442.0, + 641.0, + 840.0, + 156.0, + 664.0, + 235.0, + 119.0, + 179.0, + 1986.0, + 1572.0, + ], + "names_chronics_to_grid": None, +} diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/difficulty_levels.json b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/difficulty_levels.json new file mode 100644 index 000000000..da8317445 --- /dev/null +++ b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/difficulty_levels.json @@ -0,0 +1,58 @@ +{ + "0": { + "NO_OVERFLOW_DISCONNECTION": true, + "NB_TIMESTEP_OVERFLOW_ALLOWED": 9999, + "NB_TIMESTEP_COOLDOWN_SUB": 0, + "NB_TIMESTEP_COOLDOWN_LINE": 0, + "HARD_OVERFLOW_THRESHOLD": 9999, + "NB_TIMESTEP_RECONNECTION": 0, + "IGNORE_MIN_UP_DOWN_TIME": true, + "ALLOW_DISPATCH_GEN_SWITCH_OFF": true, + "ENV_DC": false, + "FORECAST_DC": false, + "MAX_SUB_CHANGED": 1, + "MAX_LINE_STATUS_CHANGED": 1 + }, + "1": { + "NO_OVERFLOW_DISCONNECTION": false, + "NB_TIMESTEP_OVERFLOW_ALLOWED": 6, + "NB_TIMESTEP_COOLDOWN_SUB": 0, + "NB_TIMESTEP_COOLDOWN_LINE": 0, + "HARD_OVERFLOW_THRESHOLD": 3.0, + "NB_TIMESTEP_RECONNECTION": 1, + "IGNORE_MIN_UP_DOWN_TIME": true, + "ALLOW_DISPATCH_GEN_SWITCH_OFF": true, + "ENV_DC": false, + "FORECAST_DC": false, + "MAX_SUB_CHANGED": 1, + "MAX_LINE_STATUS_CHANGED": 1 + }, + "2": { + "NO_OVERFLOW_DISCONNECTION": false, + "NB_TIMESTEP_OVERFLOW_ALLOWED": 3, + "NB_TIMESTEP_COOLDOWN_SUB": 1, + "NB_TIMESTEP_COOLDOWN_LINE": 1, + "HARD_OVERFLOW_THRESHOLD": 2.5, + "NB_TIMESTEP_RECONNECTION": 6, + "IGNORE_MIN_UP_DOWN_TIME": true, + "ALLOW_DISPATCH_GEN_SWITCH_OFF": true, + "ENV_DC": false, + "FORECAST_DC": false, + "MAX_SUB_CHANGED": 1, + "MAX_LINE_STATUS_CHANGED": 1 + }, + "competition": { + "NO_OVERFLOW_DISCONNECTION": false, + "NB_TIMESTEP_OVERFLOW_ALLOWED": 3, + "NB_TIMESTEP_COOLDOWN_SUB": 3, + "NB_TIMESTEP_COOLDOWN_LINE": 3, + "HARD_OVERFLOW_THRESHOLD": 2.0, + "NB_TIMESTEP_RECONNECTION": 12, + "IGNORE_MIN_UP_DOWN_TIME": true, + "ALLOW_DISPATCH_GEN_SWITCH_OFF": true, + "ENV_DC": false, + "FORECAST_DC": false, + "MAX_SUB_CHANGED": 1, + "MAX_LINE_STATUS_CHANGED": 1 + } +} diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/grid.json b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/grid.json new file mode 100644 index 000000000..2f27b3528 --- /dev/null +++ b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/grid.json @@ -0,0 +1,1766 @@ +{ + "_module": "pandapower.auxiliary", + "_class": "pandapowerNet", + "_object": { + "bus": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"vn_kv\",\"type\",\"zone\",\"in_service\",\"min_vm_pu\",\"max_vm_pu\"],\"index\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],\"data\":[[1,138.0,\"b\",1.0,true,0.94,1.06],[2,138.0,\"b\",1.0,true,0.94,1.06],[3,138.0,\"b\",1.0,true,0.94,1.06],[4,138.0,\"b\",1.0,true,0.94,1.06],[5,138.0,\"b\",1.0,true,0.94,1.06],[6,20.0,\"b\",1.0,true,0.94,1.06],[7,14.0,\"b\",1.0,true,0.94,1.06],[8,12.0,\"b\",1.0,true,0.94,1.06],[9,20.0,\"b\",1.0,true,0.94,1.06],[10,20.0,\"b\",1.0,true,0.94,1.06],[11,20.0,\"b\",1.0,true,0.94,1.06],[12,20.0,\"b\",1.0,true,0.94,1.06],[13,20.0,\"b\",1.0,true,0.94,1.06],[14,20.0,\"b\",1.0,true,0.94,1.06]]}", + "orient": "split", + "dtype": { + "name": "object", + "vn_kv": "float64", + "type": "object", + "zone": "object", + "in_service": "bool", + "min_vm_pu": "float64", + "max_vm_pu": "float64" + } + }, + "load": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"bus\",\"p_mw\",\"q_mvar\",\"const_z_percent\",\"const_i_percent\",\"sn_mva\",\"scaling\",\"in_service\",\"type\",\"controllable\"],\"index\":[0,1,2,3,4,5,6,7,8,9,10],\"data\":[[null,1,21.699999999999999,12.699999999999999,0.0,0.0,null,1.0,true,null,false],[null,2,94.200000000000003,19.0,0.0,0.0,null,1.0,true,null,false],[null,3,47.799999999999997,-3.9,0.0,0.0,null,1.0,true,null,false],[null,4,7.6,1.6,0.0,0.0,null,1.0,true,null,false],[null,5,11.199999999999999,7.5,0.0,0.0,null,1.0,true,null,false],[null,8,29.5,16.600000000000001,0.0,0.0,null,1.0,true,null,false],[null,9,9.0,5.8,0.0,0.0,null,1.0,true,null,false],[null,10,3.5,1.8,0.0,0.0,null,1.0,true,null,false],[null,11,6.1,1.6,0.0,0.0,null,1.0,true,null,false],[null,12,13.5,5.8,0.0,0.0,null,1.0,true,null,false],[null,13,14.9,5.0,0.0,0.0,null,1.0,true,null,false]]}", + "orient": "split", + "dtype": { + "name": "object", + "bus": "uint32", + "p_mw": "float64", + "q_mvar": "float64", + "const_z_percent": "float64", + "const_i_percent": "float64", + "sn_mva": "float64", + "scaling": "float64", + "in_service": "bool", + "type": "object", + "controllable": "object" + } + }, + "sgen": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"bus\",\"p_mw\",\"q_mvar\",\"sn_mva\",\"scaling\",\"in_service\",\"type\",\"current_source\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "bus": "int64", + "p_mw": "float64", + "q_mvar": "float64", + "sn_mva": "float64", + "scaling": "float64", + "in_service": "bool", + "type": "object", + "current_source": "bool" + } + }, + "motor": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"bus\",\"pn_mech_mw\",\"loading_percent\",\"cos_phi\",\"cos_phi_n\",\"efficiency_percent\",\"efficiency_n_percent\",\"lrc_pu\",\"vn_kv\",\"scaling\",\"in_service\",\"rx\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "bus": "int64", + "pn_mech_mw": "float64", + "loading_percent": "float64", + "cos_phi": "float64", + "cos_phi_n": "float64", + "efficiency_percent": "float64", + "efficiency_n_percent": "float64", + "lrc_pu": "float64", + "vn_kv": "float64", + "scaling": "float64", + "in_service": "bool", + "rx": "float64" + } + }, + "asymmetric_load": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"bus\",\"p_a_mw\",\"q_a_mvar\",\"p_b_mw\",\"q_b_mvar\",\"p_c_mw\",\"q_c_mvar\",\"sn_mva\",\"scaling\",\"in_service\",\"type\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "bus": "uint32", + "p_a_mw": "float64", + "q_a_mvar": "float64", + "p_b_mw": "float64", + "q_b_mvar": "float64", + "p_c_mw": "float64", + "q_c_mvar": "float64", + "sn_mva": "float64", + "scaling": "float64", + "in_service": "bool", + "type": "object" + } + }, + "asymmetric_sgen": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"bus\",\"p_a_mw\",\"q_a_mvar\",\"p_b_mw\",\"q_b_mvar\",\"p_c_mw\",\"q_c_mvar\",\"sn_mva\",\"scaling\",\"in_service\",\"type\",\"current_source\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "bus": "int64", + "p_a_mw": "float64", + "q_a_mvar": "float64", + "p_b_mw": "float64", + "q_b_mvar": "float64", + "p_c_mw": "float64", + "q_c_mvar": "float64", + "sn_mva": "float64", + "scaling": "float64", + "in_service": "bool", + "type": "object", + "current_source": "bool" + } + }, + "storage": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"bus\",\"p_mw\",\"q_mvar\",\"sn_mva\",\"soc_percent\",\"min_e_mwh\",\"max_e_mwh\",\"scaling\",\"in_service\",\"type\"],\"index\":[0,1],\"data\":[[null,5,0.0,0.0,null,null,0.0,15.0,1.0,true,null],[null,7,0.0,0.0,null,null,0.0,7.0,1.0,true,null]]}", + "orient": "split", + "dtype": { + "name": "object", + "bus": "int64", + "p_mw": "float64", + "q_mvar": "float64", + "sn_mva": "float64", + "soc_percent": "float64", + "min_e_mwh": "float64", + "max_e_mwh": "float64", + "scaling": "float64", + "in_service": "bool", + "type": "object" + } + }, + "gen": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"bus\",\"p_mw\",\"vm_pu\",\"sn_mva\",\"min_q_mvar\",\"max_q_mvar\",\"scaling\",\"slack\",\"in_service\",\"type\",\"controllable\",\"min_p_mw\",\"max_p_mw\",\"slack_weight\",\"power_station_trafo\"],\"index\":[0,1,2,3,4,5],\"data\":[[null,1,40.0,1.045,null,-40.0,50.0,1.0,false,true,null,true,0.0,140.0,0.0,null],[null,2,0.0,1.01,null,0.0,40.0,1.0,false,true,null,true,0.0,100.0,0.0,null],[null,5,0.0,1.07,null,-6.0,24.0,1.0,false,true,null,true,0.0,100.0,0.0,null],[null,5,0.0,1.07,null,-6.0,24.0,1.0,false,true,null,true,0.0,100.0,0.0,null],[null,7,0.0,1.09,null,-6.0,24.0,1.0,false,true,null,true,0.0,100.0,0.0,null],[\"gen_0_5\",0,-219.0,1.06,null,-9999.0,9999.0,1.0,true,true,null,true,null,null,1.0,null]]}", + "orient": "split", + "dtype": { + "name": "object", + "bus": "uint32", + "p_mw": "float64", + "vm_pu": "float64", + "sn_mva": "float64", + "min_q_mvar": "float64", + "max_q_mvar": "float64", + "scaling": "float64", + "slack": "bool", + "in_service": "bool", + "type": "object", + "controllable": "object", + "min_p_mw": "float64", + "max_p_mw": "float64", + "slack_weight": "float64", + "power_station_trafo": "float64" + } + }, + "switch": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"bus\",\"element\",\"et\",\"type\",\"closed\",\"name\",\"z_ohm\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "bus": "int64", + "element": "int64", + "et": "object", + "type": "object", + "closed": "bool", + "name": "object", + "z_ohm": "float64" + } + }, + "shunt": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"bus\",\"name\",\"q_mvar\",\"p_mw\",\"vn_kv\",\"step\",\"max_step\",\"in_service\"],\"index\":[0],\"data\":[[8,null,-19.0,0.0,20.0,1,1,true]]}", + "orient": "split", + "dtype": { + "bus": "uint32", + "name": "object", + "q_mvar": "float64", + "p_mw": "float64", + "vn_kv": "float64", + "step": "uint32", + "max_step": "uint32", + "in_service": "bool" + } + }, + "line": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"std_type\",\"from_bus\",\"to_bus\",\"length_km\",\"r_ohm_per_km\",\"x_ohm_per_km\",\"c_nf_per_km\",\"g_us_per_km\",\"max_i_ka\",\"df\",\"parallel\",\"type\",\"in_service\",\"max_loading_percent\"],\"index\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],\"data\":[[null,null,0,1,1.0,3.6907272,11.2683348,882.522683811391971,0.0,41.418606267951418,1.0,1,\"ol\",true,100.0],[null,null,0,4,1.0,10.2894732,42.475737599999995,822.350682642433412,0.0,41.418606267951418,1.0,1,\"ol\",true,100.0],[null,null,1,2,1.0,8.948775599999999,37.701406800000001,732.092680888995574,0.0,41.418606267951418,1.0,1,\"ol\",true,100.0],[null,null,1,3,1.0,11.0664684,33.578380799999998,568.29112215127509,0.0,41.418606267951418,1.0,1,\"ol\",true,100.0],[null,null,1,4,1.0,10.845558,33.1137072,578.319789012768069,0.0,41.418606267951418,1.0,1,\"ol\",true,100.0],[null,null,2,3,1.0,12.761384400000001,32.570953199999998,213.94489304518595,0.0,41.418606267951418,1.0,1,\"ol\",true,100.0],[null,null,3,4,1.0,2.542374,8.019428400000001,0.0,0.0,41.418606267951418,1.0,1,\"ol\",true,100.0],[null,null,5,10,1.0,0.37992,0.7956,0.0,0.0,285.788383248864761,1.0,1,\"ol\",true,100.0],[null,null,5,11,1.0,0.49164,1.02324,0.0,0.0,285.788383248864761,1.0,1,\"ol\",true,100.0],[null,null,5,12,1.0,0.2646,0.52108,0.0,0.0,285.788383248864761,1.0,1,\"ol\",true,100.0],[null,null,8,9,1.0,0.12724,0.338,0.0,0.0,285.788383248864761,1.0,1,\"ol\",true,100.0],[null,null,8,13,1.0,0.50844,1.08152,0.0,0.0,285.788383248864761,1.0,1,\"ol\",true,100.0],[null,null,9,10,1.0,0.3282,0.76828,0.0,0.0,285.788383248864761,1.0,1,\"ol\",true,100.0],[null,null,11,12,1.0,0.88368,0.79952,0.0,0.0,285.788383248864761,1.0,1,\"ol\",true,100.0],[null,null,12,13,1.0,0.68372,1.39208,0.0,0.0,285.788383248864761,1.0,1,\"ol\",true,100.0]]}", + "orient": "split", + "dtype": { + "name": "object", + "std_type": "object", + "from_bus": "uint32", + "to_bus": "uint32", + "length_km": "float64", + "r_ohm_per_km": "float64", + "x_ohm_per_km": "float64", + "c_nf_per_km": "float64", + "g_us_per_km": "float64", + "max_i_ka": "float64", + "df": "float64", + "parallel": "uint32", + "type": "object", + "in_service": "bool", + "max_loading_percent": "float64" + } + }, + "trafo": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"std_type\",\"hv_bus\",\"lv_bus\",\"sn_mva\",\"vn_hv_kv\",\"vn_lv_kv\",\"vk_percent\",\"vkr_percent\",\"pfe_kw\",\"i0_percent\",\"shift_degree\",\"tap_side\",\"tap_neutral\",\"tap_min\",\"tap_max\",\"tap_step_percent\",\"tap_step_degree\",\"tap_pos\",\"tap_phase_shifter\",\"parallel\",\"df\",\"in_service\",\"max_loading_percent\"],\"index\":[0,1,2,3,4],\"data\":[[null,null,3,6,9900.0,138.0,14.0,2070.288000000000011,0.0,0.0,0.0,0.0,\"hv\",0,null,null,2.200000000000002,0.0,-1,false,1,1.0,true,100.0],[null,null,3,8,9900.0,138.0,20.0,5506.181999999999789,0.0,0.0,0.0,0.0,\"hv\",0,null,null,3.100000000000003,0.0,-1,false,1,1.0,true,100.0],[null,null,4,5,9900.0,138.0,20.0,2494.998000000000047,0.0,0.0,0.0,0.0,\"hv\",0,null,null,6.799999999999995,0.0,-1,false,1,1.0,true,100.0],[null,null,6,7,9900.0,14.0,12.0,1743.884999999999991,0.0,0.0,0.0,0.0,false,0,null,null,0.0,0.0,0,false,1,1.0,true,100.0],[null,null,8,6,9900.0,20.0,14.0,1089.098999999999933,0.0,0.0,0.0,0.0,false,0,null,null,0.0,0.0,0,false,1,1.0,true,100.0]]}", + "orient": "split", + "dtype": { + "name": "object", + "std_type": "object", + "hv_bus": "uint32", + "lv_bus": "uint32", + "sn_mva": "float64", + "vn_hv_kv": "float64", + "vn_lv_kv": "float64", + "vk_percent": "float64", + "vkr_percent": "float64", + "pfe_kw": "float64", + "i0_percent": "float64", + "shift_degree": "float64", + "tap_side": "object", + "tap_neutral": "int32", + "tap_min": "float64", + "tap_max": "float64", + "tap_step_percent": "float64", + "tap_step_degree": "float64", + "tap_pos": "int32", + "tap_phase_shifter": "bool", + "parallel": "uint32", + "df": "float64", + "in_service": "bool", + "max_loading_percent": "float64" + } + }, + "trafo3w": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"std_type\",\"hv_bus\",\"mv_bus\",\"lv_bus\",\"sn_hv_mva\",\"sn_mv_mva\",\"sn_lv_mva\",\"vn_hv_kv\",\"vn_mv_kv\",\"vn_lv_kv\",\"vk_hv_percent\",\"vk_mv_percent\",\"vk_lv_percent\",\"vkr_hv_percent\",\"vkr_mv_percent\",\"vkr_lv_percent\",\"pfe_kw\",\"i0_percent\",\"shift_mv_degree\",\"shift_lv_degree\",\"tap_side\",\"tap_neutral\",\"tap_min\",\"tap_max\",\"tap_step_percent\",\"tap_step_degree\",\"tap_pos\",\"tap_at_star_point\",\"in_service\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "std_type": "object", + "hv_bus": "uint32", + "mv_bus": "uint32", + "lv_bus": "uint32", + "sn_hv_mva": "float64", + "sn_mv_mva": "float64", + "sn_lv_mva": "float64", + "vn_hv_kv": "float64", + "vn_mv_kv": "float64", + "vn_lv_kv": "float64", + "vk_hv_percent": "float64", + "vk_mv_percent": "float64", + "vk_lv_percent": "float64", + "vkr_hv_percent": "float64", + "vkr_mv_percent": "float64", + "vkr_lv_percent": "float64", + "pfe_kw": "float64", + "i0_percent": "float64", + "shift_mv_degree": "float64", + "shift_lv_degree": "float64", + "tap_side": "object", + "tap_neutral": "int32", + "tap_min": "int32", + "tap_max": "int32", + "tap_step_percent": "float64", + "tap_step_degree": "float64", + "tap_pos": "int32", + "tap_at_star_point": "bool", + "in_service": "bool" + } + }, + "impedance": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"from_bus\",\"to_bus\",\"rft_pu\",\"xft_pu\",\"rtf_pu\",\"xtf_pu\",\"sn_mva\",\"in_service\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "from_bus": "uint32", + "to_bus": "uint32", + "rft_pu": "float64", + "xft_pu": "float64", + "rtf_pu": "float64", + "xtf_pu": "float64", + "sn_mva": "float64", + "in_service": "bool" + } + }, + "dcline": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"from_bus\",\"to_bus\",\"p_mw\",\"loss_percent\",\"loss_mw\",\"vm_from_pu\",\"vm_to_pu\",\"max_p_mw\",\"min_q_from_mvar\",\"min_q_to_mvar\",\"max_q_from_mvar\",\"max_q_to_mvar\",\"in_service\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "from_bus": "uint32", + "to_bus": "uint32", + "p_mw": "float64", + "loss_percent": "float64", + "loss_mw": "float64", + "vm_from_pu": "float64", + "vm_to_pu": "float64", + "max_p_mw": "float64", + "min_q_from_mvar": "float64", + "min_q_to_mvar": "float64", + "max_q_from_mvar": "float64", + "max_q_to_mvar": "float64", + "in_service": "bool" + } + }, + "ward": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"bus\",\"ps_mw\",\"qs_mvar\",\"qz_mvar\",\"pz_mw\",\"in_service\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "bus": "uint32", + "ps_mw": "float64", + "qs_mvar": "float64", + "qz_mvar": "float64", + "pz_mw": "float64", + "in_service": "bool" + } + }, + "xward": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"bus\",\"ps_mw\",\"qs_mvar\",\"qz_mvar\",\"pz_mw\",\"r_ohm\",\"x_ohm\",\"vm_pu\",\"in_service\",\"slack_weight\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "bus": "uint32", + "ps_mw": "float64", + "qs_mvar": "float64", + "qz_mvar": "float64", + "pz_mw": "float64", + "r_ohm": "float64", + "x_ohm": "float64", + "vm_pu": "float64", + "in_service": "bool", + "slack_weight": "float64" + } + }, + "measurement": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"measurement_type\",\"element_type\",\"element\",\"value\",\"std_dev\",\"side\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "measurement_type": "object", + "element_type": "object", + "element": "uint32", + "value": "float64", + "std_dev": "float64", + "side": "object" + } + }, + "pwl_cost": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"power_type\",\"element\",\"et\",\"points\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "power_type": "object", + "element": "uint32", + "et": "object", + "points": "object" + } + }, + "poly_cost": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"element\",\"et\",\"cp0_eur\",\"cp1_eur_per_mw\",\"cp2_eur_per_mw2\",\"cq0_eur\",\"cq1_eur_per_mvar\",\"cq2_eur_per_mvar2\"],\"index\":[0,1,2,3,4],\"data\":[[0,\"ext_grid\",0.0,20.0,0.0430293,0.0,0.0,0.0],[0,\"gen\",0.0,20.0,0.25,0.0,0.0,0.0],[1,\"gen\",0.0,40.0,0.01,0.0,0.0,0.0],[2,\"gen\",0.0,40.0,0.01,0.0,0.0,0.0],[3,\"gen\",0.0,40.0,0.01,0.0,0.0,0.0]]}", + "orient": "split", + "dtype": { + "element": "uint32", + "et": "object", + "cp0_eur": "float64", + "cp1_eur_per_mw": "float64", + "cp2_eur_per_mw2": "float64", + "cq0_eur": "float64", + "cq1_eur_per_mvar": "float64", + "cq2_eur_per_mvar2": "float64" + } + }, + "characteristic": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"object\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "object": "object" + } + }, + "controller": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"object\",\"in_service\",\"order\",\"level\",\"initial_run\",\"recycle\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "object": "object", + "in_service": "bool", + "order": "float64", + "level": "object", + "initial_run": "bool", + "recycle": "object" + } + }, + "line_geodata": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"coords\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "coords": "object" + } + }, + "bus_geodata": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"x\",\"y\",\"coords\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "x": "float64", + "y": "float64", + "coords": "object" + } + }, + "version": "2.8.0", + "converged": false, + "name": "", + "f_hz": 50, + "sn_mva": 1.0, + "std_types": { + "line": { + "NAYY 4x50 SE": { + "c_nf_per_km": 210, + "r_ohm_per_km": 0.642, + "x_ohm_per_km": 0.083, + "max_i_ka": 0.142, + "type": "cs", + "q_mm2": 50, + "alpha": 0.00403 + }, + "NAYY 4x120 SE": { + "c_nf_per_km": 264, + "r_ohm_per_km": 0.225, + "x_ohm_per_km": 0.08, + "max_i_ka": 0.242, + "type": "cs", + "q_mm2": 120, + "alpha": 0.00403 + }, + "NAYY 4x150 SE": { + "c_nf_per_km": 261, + "r_ohm_per_km": 0.208, + "x_ohm_per_km": 0.08, + "max_i_ka": 0.27, + "type": "cs", + "q_mm2": 150, + "alpha": 0.00403 + }, + "NA2XS2Y 1x95 RM/25 12/20 kV": { + "c_nf_per_km": 216, + "r_ohm_per_km": 0.313, + "x_ohm_per_km": 0.132, + "max_i_ka": 0.252, + "type": "cs", + "q_mm2": 95, + "alpha": 0.00403 + }, + "NA2XS2Y 1x185 RM/25 12/20 kV": { + "c_nf_per_km": 273, + "r_ohm_per_km": 0.161, + "x_ohm_per_km": 0.117, + "max_i_ka": 0.362, + "type": "cs", + "q_mm2": 185, + "alpha": 0.00403 + }, + "NA2XS2Y 1x240 RM/25 12/20 kV": { + "c_nf_per_km": 304, + "r_ohm_per_km": 0.122, + "x_ohm_per_km": 0.112, + "max_i_ka": 0.421, + "type": "cs", + "q_mm2": 240, + "alpha": 0.00403 + }, + "NA2XS2Y 1x95 RM/25 6/10 kV": { + "c_nf_per_km": 315, + "r_ohm_per_km": 0.313, + "x_ohm_per_km": 0.123, + "max_i_ka": 0.249, + "type": "cs", + "q_mm2": 95, + "alpha": 0.00403 + }, + "NA2XS2Y 1x185 RM/25 6/10 kV": { + "c_nf_per_km": 406, + "r_ohm_per_km": 0.161, + "x_ohm_per_km": 0.11, + "max_i_ka": 0.358, + "type": "cs", + "q_mm2": 185, + "alpha": 0.00403 + }, + "NA2XS2Y 1x240 RM/25 6/10 kV": { + "c_nf_per_km": 456, + "r_ohm_per_km": 0.122, + "x_ohm_per_km": 0.105, + "max_i_ka": 0.416, + "type": "cs", + "q_mm2": 240, + "alpha": 0.00403 + }, + "NA2XS2Y 1x150 RM/25 12/20 kV": { + "c_nf_per_km": 250, + "r_ohm_per_km": 0.206, + "x_ohm_per_km": 0.116, + "max_i_ka": 0.319, + "type": "cs", + "q_mm2": 150, + "alpha": 0.00403 + }, + "NA2XS2Y 1x120 RM/25 12/20 kV": { + "c_nf_per_km": 230, + "r_ohm_per_km": 0.253, + "x_ohm_per_km": 0.119, + "max_i_ka": 0.283, + "type": "cs", + "q_mm2": 120, + "alpha": 0.00403 + }, + "NA2XS2Y 1x70 RM/25 12/20 kV": { + "c_nf_per_km": 190, + "r_ohm_per_km": 0.443, + "x_ohm_per_km": 0.132, + "max_i_ka": 0.22, + "type": "cs", + "q_mm2": 70, + "alpha": 0.00403 + }, + "NA2XS2Y 1x150 RM/25 6/10 kV": { + "c_nf_per_km": 360, + "r_ohm_per_km": 0.206, + "x_ohm_per_km": 0.11, + "max_i_ka": 0.315, + "type": "cs", + "q_mm2": 150, + "alpha": 0.00403 + }, + "NA2XS2Y 1x120 RM/25 6/10 kV": { + "c_nf_per_km": 340, + "r_ohm_per_km": 0.253, + "x_ohm_per_km": 0.113, + "max_i_ka": 0.28, + "type": "cs", + "q_mm2": 120, + "alpha": 0.00403 + }, + "NA2XS2Y 1x70 RM/25 6/10 kV": { + "c_nf_per_km": 280, + "r_ohm_per_km": 0.443, + "x_ohm_per_km": 0.123, + "max_i_ka": 0.217, + "type": "cs", + "q_mm2": 70, + "alpha": 0.00403 + }, + "N2XS(FL)2Y 1x120 RM/35 64/110 kV": { + "c_nf_per_km": 112, + "r_ohm_per_km": 0.153, + "x_ohm_per_km": 0.166, + "max_i_ka": 0.366, + "type": "cs", + "q_mm2": 120, + "alpha": 0.00393 + }, + "N2XS(FL)2Y 1x185 RM/35 64/110 kV": { + "c_nf_per_km": 125, + "r_ohm_per_km": 0.099, + "x_ohm_per_km": 0.156, + "max_i_ka": 0.457, + "type": "cs", + "q_mm2": 185, + "alpha": 0.00393 + }, + "N2XS(FL)2Y 1x240 RM/35 64/110 kV": { + "c_nf_per_km": 135, + "r_ohm_per_km": 0.075, + "x_ohm_per_km": 0.149, + "max_i_ka": 0.526, + "type": "cs", + "q_mm2": 240, + "alpha": 0.00393 + }, + "N2XS(FL)2Y 1x300 RM/35 64/110 kV": { + "c_nf_per_km": 144, + "r_ohm_per_km": 0.06, + "x_ohm_per_km": 0.144, + "max_i_ka": 0.588, + "type": "cs", + "q_mm2": 300, + "alpha": 0.00393 + }, + "15-AL1/3-ST1A 0.4": { + "c_nf_per_km": 11, + "r_ohm_per_km": 1.8769, + "x_ohm_per_km": 0.35, + "max_i_ka": 0.105, + "type": "ol", + "q_mm2": 16, + "alpha": 0.00403 + }, + "24-AL1/4-ST1A 0.4": { + "c_nf_per_km": 11.25, + "r_ohm_per_km": 1.2012, + "x_ohm_per_km": 0.335, + "max_i_ka": 0.14, + "type": "ol", + "q_mm2": 24, + "alpha": 0.00403 + }, + "48-AL1/8-ST1A 0.4": { + "c_nf_per_km": 12.2, + "r_ohm_per_km": 0.5939, + "x_ohm_per_km": 0.3, + "max_i_ka": 0.21, + "type": "ol", + "q_mm2": 48, + "alpha": 0.00403 + }, + "94-AL1/15-ST1A 0.4": { + "c_nf_per_km": 13.2, + "r_ohm_per_km": 0.306, + "x_ohm_per_km": 0.29, + "max_i_ka": 0.35, + "type": "ol", + "q_mm2": 94, + "alpha": 0.00403 + }, + "34-AL1/6-ST1A 10.0": { + "c_nf_per_km": 9.7, + "r_ohm_per_km": 0.8342, + "x_ohm_per_km": 0.36, + "max_i_ka": 0.17, + "type": "ol", + "q_mm2": 34, + "alpha": 0.00403 + }, + "48-AL1/8-ST1A 10.0": { + "c_nf_per_km": 10.1, + "r_ohm_per_km": 0.5939, + "x_ohm_per_km": 0.35, + "max_i_ka": 0.21, + "type": "ol", + "q_mm2": 48, + "alpha": 0.00403 + }, + "70-AL1/11-ST1A 10.0": { + "c_nf_per_km": 10.4, + "r_ohm_per_km": 0.4132, + "x_ohm_per_km": 0.339, + "max_i_ka": 0.29, + "type": "ol", + "q_mm2": 70, + "alpha": 0.00403 + }, + "94-AL1/15-ST1A 10.0": { + "c_nf_per_km": 10.75, + "r_ohm_per_km": 0.306, + "x_ohm_per_km": 0.33, + "max_i_ka": 0.35, + "type": "ol", + "q_mm2": 94, + "alpha": 0.00403 + }, + "122-AL1/20-ST1A 10.0": { + "c_nf_per_km": 11.1, + "r_ohm_per_km": 0.2376, + "x_ohm_per_km": 0.323, + "max_i_ka": 0.41, + "type": "ol", + "q_mm2": 122, + "alpha": 0.00403 + }, + "149-AL1/24-ST1A 10.0": { + "c_nf_per_km": 11.25, + "r_ohm_per_km": 0.194, + "x_ohm_per_km": 0.315, + "max_i_ka": 0.47, + "type": "ol", + "q_mm2": 149, + "alpha": 0.00403 + }, + "34-AL1/6-ST1A 20.0": { + "c_nf_per_km": 9.15, + "r_ohm_per_km": 0.8342, + "x_ohm_per_km": 0.382, + "max_i_ka": 0.17, + "type": "ol", + "q_mm2": 34, + "alpha": 0.00403 + }, + "48-AL1/8-ST1A 20.0": { + "c_nf_per_km": 9.5, + "r_ohm_per_km": 0.5939, + "x_ohm_per_km": 0.372, + "max_i_ka": 0.21, + "type": "ol", + "q_mm2": 48, + "alpha": 0.00403 + }, + "70-AL1/11-ST1A 20.0": { + "c_nf_per_km": 9.7, + "r_ohm_per_km": 0.4132, + "x_ohm_per_km": 0.36, + "max_i_ka": 0.29, + "type": "ol", + "q_mm2": 70, + "alpha": 0.00403 + }, + "94-AL1/15-ST1A 20.0": { + "c_nf_per_km": 10, + "r_ohm_per_km": 0.306, + "x_ohm_per_km": 0.35, + "max_i_ka": 0.35, + "type": "ol", + "q_mm2": 94, + "alpha": 0.00403 + }, + "122-AL1/20-ST1A 20.0": { + "c_nf_per_km": 10.3, + "r_ohm_per_km": 0.2376, + "x_ohm_per_km": 0.344, + "max_i_ka": 0.41, + "type": "ol", + "q_mm2": 122, + "alpha": 0.00403 + }, + "149-AL1/24-ST1A 20.0": { + "c_nf_per_km": 10.5, + "r_ohm_per_km": 0.194, + "x_ohm_per_km": 0.337, + "max_i_ka": 0.47, + "type": "ol", + "q_mm2": 149, + "alpha": 0.00403 + }, + "184-AL1/30-ST1A 20.0": { + "c_nf_per_km": 10.75, + "r_ohm_per_km": 0.1571, + "x_ohm_per_km": 0.33, + "max_i_ka": 0.535, + "type": "ol", + "q_mm2": 184, + "alpha": 0.00403 + }, + "243-AL1/39-ST1A 20.0": { + "c_nf_per_km": 11, + "r_ohm_per_km": 0.1188, + "x_ohm_per_km": 0.32, + "max_i_ka": 0.645, + "type": "ol", + "q_mm2": 243, + "alpha": 0.00403 + }, + "48-AL1/8-ST1A 110.0": { + "c_nf_per_km": 8, + "r_ohm_per_km": 0.5939, + "x_ohm_per_km": 0.46, + "max_i_ka": 0.21, + "type": "ol", + "q_mm2": 48, + "alpha": 0.00403 + }, + "70-AL1/11-ST1A 110.0": { + "c_nf_per_km": 8.4, + "r_ohm_per_km": 0.4132, + "x_ohm_per_km": 0.45, + "max_i_ka": 0.29, + "type": "ol", + "q_mm2": 70, + "alpha": 0.00403 + }, + "94-AL1/15-ST1A 110.0": { + "c_nf_per_km": 8.65, + "r_ohm_per_km": 0.306, + "x_ohm_per_km": 0.44, + "max_i_ka": 0.35, + "type": "ol", + "q_mm2": 94, + "alpha": 0.00403 + }, + "122-AL1/20-ST1A 110.0": { + "c_nf_per_km": 8.5, + "r_ohm_per_km": 0.2376, + "x_ohm_per_km": 0.43, + "max_i_ka": 0.41, + "type": "ol", + "q_mm2": 122, + "alpha": 0.00403 + }, + "149-AL1/24-ST1A 110.0": { + "c_nf_per_km": 8.75, + "r_ohm_per_km": 0.194, + "x_ohm_per_km": 0.41, + "max_i_ka": 0.47, + "type": "ol", + "q_mm2": 149, + "alpha": 0.00403 + }, + "184-AL1/30-ST1A 110.0": { + "c_nf_per_km": 8.8, + "r_ohm_per_km": 0.1571, + "x_ohm_per_km": 0.4, + "max_i_ka": 0.535, + "type": "ol", + "q_mm2": 184, + "alpha": 0.00403 + }, + "243-AL1/39-ST1A 110.0": { + "c_nf_per_km": 9, + "r_ohm_per_km": 0.1188, + "x_ohm_per_km": 0.39, + "max_i_ka": 0.645, + "type": "ol", + "q_mm2": 243, + "alpha": 0.00403 + }, + "305-AL1/39-ST1A 110.0": { + "c_nf_per_km": 9.2, + "r_ohm_per_km": 0.0949, + "x_ohm_per_km": 0.38, + "max_i_ka": 0.74, + "type": "ol", + "q_mm2": 305, + "alpha": 0.00403 + }, + "490-AL1/64-ST1A 110.0": { + "c_nf_per_km": 9.75, + "r_ohm_per_km": 0.059, + "x_ohm_per_km": 0.37, + "max_i_ka": 0.96, + "type": "ol", + "q_mm2": 490, + "alpha": 0.00403 + }, + "679-AL1/86-ST1A 110.0": { + "c_nf_per_km": 9.95, + "r_ohm_per_km": 0.042, + "x_ohm_per_km": 0.36, + "max_i_ka": 1.15, + "type": "ol", + "q_mm2": 679, + "alpha": 0.00403 + }, + "490-AL1/64-ST1A 220.0": { + "c_nf_per_km": 10, + "r_ohm_per_km": 0.059, + "x_ohm_per_km": 0.285, + "max_i_ka": 0.96, + "type": "ol", + "q_mm2": 490, + "alpha": 0.00403 + }, + "679-AL1/86-ST1A 220.0": { + "c_nf_per_km": 11.7, + "r_ohm_per_km": 0.042, + "x_ohm_per_km": 0.275, + "max_i_ka": 1.15, + "type": "ol", + "q_mm2": 679, + "alpha": 0.00403 + }, + "490-AL1/64-ST1A 380.0": { + "c_nf_per_km": 11, + "r_ohm_per_km": 0.059, + "x_ohm_per_km": 0.253, + "max_i_ka": 0.96, + "type": "ol", + "q_mm2": 490, + "alpha": 0.00403 + }, + "679-AL1/86-ST1A 380.0": { + "c_nf_per_km": 14.6, + "r_ohm_per_km": 0.042, + "x_ohm_per_km": 0.25, + "max_i_ka": 1.15, + "type": "ol", + "q_mm2": 679, + "alpha": 0.00403 + } + }, + "trafo": { + "160 MVA 380/110 kV": { + "i0_percent": 0.06, + "pfe_kw": 60, + "vkr_percent": 0.25, + "sn_mva": 160, + "vn_lv_kv": 110.0, + "vn_hv_kv": 380.0, + "vk_percent": 12.2, + "shift_degree": 0, + "vector_group": "Yy0", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -9, + "tap_max": 9, + "tap_step_degree": 0, + "tap_step_percent": 1.5, + "tap_phase_shifter": false + }, + "100 MVA 220/110 kV": { + "i0_percent": 0.06, + "pfe_kw": 55, + "vkr_percent": 0.26, + "sn_mva": 100, + "vn_lv_kv": 110.0, + "vn_hv_kv": 220.0, + "vk_percent": 12.0, + "shift_degree": 0, + "vector_group": "Yy0", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -9, + "tap_max": 9, + "tap_step_degree": 0, + "tap_step_percent": 1.5, + "tap_phase_shifter": false + }, + "63 MVA 110/20 kV": { + "i0_percent": 0.04, + "pfe_kw": 22, + "vkr_percent": 0.32, + "sn_mva": 63, + "vn_lv_kv": 20.0, + "vn_hv_kv": 110.0, + "vk_percent": 18, + "shift_degree": 150, + "vector_group": "YNd5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -9, + "tap_max": 9, + "tap_step_degree": 0, + "tap_step_percent": 1.5, + "tap_phase_shifter": false + }, + "40 MVA 110/20 kV": { + "i0_percent": 0.05, + "pfe_kw": 18, + "vkr_percent": 0.34, + "sn_mva": 40, + "vn_lv_kv": 20.0, + "vn_hv_kv": 110.0, + "vk_percent": 16.2, + "shift_degree": 150, + "vector_group": "YNd5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -9, + "tap_max": 9, + "tap_step_degree": 0, + "tap_step_percent": 1.5, + "tap_phase_shifter": false + }, + "25 MVA 110/20 kV": { + "i0_percent": 0.07, + "pfe_kw": 14, + "vkr_percent": 0.41, + "sn_mva": 25, + "vn_lv_kv": 20.0, + "vn_hv_kv": 110.0, + "vk_percent": 12, + "shift_degree": 150, + "vector_group": "YNd5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -9, + "tap_max": 9, + "tap_step_degree": 0, + "tap_step_percent": 1.5, + "tap_phase_shifter": false + }, + "63 MVA 110/10 kV": { + "sn_mva": 63, + "vn_hv_kv": 110, + "vn_lv_kv": 10, + "vk_percent": 18, + "vkr_percent": 0.32, + "pfe_kw": 22, + "i0_percent": 0.04, + "shift_degree": 150, + "vector_group": "YNd5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -9, + "tap_max": 9, + "tap_step_degree": 0, + "tap_step_percent": 1.5, + "tap_phase_shifter": false + }, + "40 MVA 110/10 kV": { + "sn_mva": 40, + "vn_hv_kv": 110, + "vn_lv_kv": 10, + "vk_percent": 16.2, + "vkr_percent": 0.34, + "pfe_kw": 18, + "i0_percent": 0.05, + "shift_degree": 150, + "vector_group": "YNd5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -9, + "tap_max": 9, + "tap_step_degree": 0, + "tap_step_percent": 1.5, + "tap_phase_shifter": false + }, + "25 MVA 110/10 kV": { + "sn_mva": 25, + "vn_hv_kv": 110, + "vn_lv_kv": 10, + "vk_percent": 12, + "vkr_percent": 0.41, + "pfe_kw": 14, + "i0_percent": 0.07, + "shift_degree": 150, + "vector_group": "YNd5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -9, + "tap_max": 9, + "tap_step_degree": 0, + "tap_step_percent": 1.5, + "tap_phase_shifter": false + }, + "0.25 MVA 20/0.4 kV": { + "sn_mva": 0.25, + "vn_hv_kv": 20, + "vn_lv_kv": 0.4, + "vk_percent": 6, + "vkr_percent": 1.44, + "pfe_kw": 0.8, + "i0_percent": 0.32, + "shift_degree": 150, + "vector_group": "Yzn5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -2, + "tap_max": 2, + "tap_step_degree": 0, + "tap_step_percent": 2.5, + "tap_phase_shifter": false + }, + "0.4 MVA 20/0.4 kV": { + "sn_mva": 0.4, + "vn_hv_kv": 20, + "vn_lv_kv": 0.4, + "vk_percent": 6, + "vkr_percent": 1.425, + "pfe_kw": 1.35, + "i0_percent": 0.3375, + "shift_degree": 150, + "vector_group": "Dyn5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -2, + "tap_max": 2, + "tap_step_degree": 0, + "tap_step_percent": 2.5, + "tap_phase_shifter": false + }, + "0.63 MVA 20/0.4 kV": { + "sn_mva": 0.63, + "vn_hv_kv": 20, + "vn_lv_kv": 0.4, + "vk_percent": 6, + "vkr_percent": 1.206, + "pfe_kw": 1.65, + "i0_percent": 0.2619, + "shift_degree": 150, + "vector_group": "Dyn5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -2, + "tap_max": 2, + "tap_step_degree": 0, + "tap_step_percent": 2.5, + "tap_phase_shifter": false + }, + "0.25 MVA 10/0.4 kV": { + "sn_mva": 0.25, + "vn_hv_kv": 10, + "vn_lv_kv": 0.4, + "vk_percent": 4, + "vkr_percent": 1.2, + "pfe_kw": 0.6, + "i0_percent": 0.24, + "shift_degree": 150, + "vector_group": "Dyn5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -2, + "tap_max": 2, + "tap_step_degree": 0, + "tap_step_percent": 2.5, + "tap_phase_shifter": false + }, + "0.4 MVA 10/0.4 kV": { + "sn_mva": 0.4, + "vn_hv_kv": 10, + "vn_lv_kv": 0.4, + "vk_percent": 4, + "vkr_percent": 1.325, + "pfe_kw": 0.95, + "i0_percent": 0.2375, + "shift_degree": 150, + "vector_group": "Dyn5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -2, + "tap_max": 2, + "tap_step_degree": 0, + "tap_step_percent": 2.5, + "tap_phase_shifter": false + }, + "0.63 MVA 10/0.4 kV": { + "sn_mva": 0.63, + "vn_hv_kv": 10, + "vn_lv_kv": 0.4, + "vk_percent": 4, + "vkr_percent": 1.0794, + "pfe_kw": 1.18, + "i0_percent": 0.1873, + "shift_degree": 150, + "vector_group": "Dyn5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -2, + "tap_max": 2, + "tap_step_degree": 0, + "tap_step_percent": 2.5, + "tap_phase_shifter": false + } + }, + "trafo3w": { + "63/25/38 MVA 110/20/10 kV": { + "sn_hv_mva": 63, + "sn_mv_mva": 25, + "sn_lv_mva": 38, + "vn_hv_kv": 110, + "vn_mv_kv": 20, + "vn_lv_kv": 10, + "vk_hv_percent": 10.4, + "vk_mv_percent": 10.4, + "vk_lv_percent": 10.4, + "vkr_hv_percent": 0.28, + "vkr_mv_percent": 0.32, + "vkr_lv_percent": 0.35, + "pfe_kw": 35, + "i0_percent": 0.89, + "shift_mv_degree": 0, + "shift_lv_degree": 0, + "vector_group": "YN0yn0yn0", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -10, + "tap_max": 10, + "tap_step_percent": 1.2 + }, + "63/25/38 MVA 110/10/10 kV": { + "sn_hv_mva": 63, + "sn_mv_mva": 25, + "sn_lv_mva": 38, + "vn_hv_kv": 110, + "vn_mv_kv": 10, + "vn_lv_kv": 10, + "vk_hv_percent": 10.4, + "vk_mv_percent": 10.4, + "vk_lv_percent": 10.4, + "vkr_hv_percent": 0.28, + "vkr_mv_percent": 0.32, + "vkr_lv_percent": 0.35, + "pfe_kw": 35, + "i0_percent": 0.89, + "shift_mv_degree": 0, + "shift_lv_degree": 0, + "vector_group": "YN0yn0yn0", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -10, + "tap_max": 10, + "tap_step_percent": 1.2 + } + } + }, + "res_bus": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"vm_pu\",\"va_degree\",\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "vm_pu": "float64", + "va_degree": "float64", + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_line": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_from_mw\",\"q_from_mvar\",\"p_to_mw\",\"q_to_mvar\",\"pl_mw\",\"ql_mvar\",\"i_from_ka\",\"i_to_ka\",\"i_ka\",\"vm_from_pu\",\"va_from_degree\",\"vm_to_pu\",\"va_to_degree\",\"loading_percent\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_from_mw": "float64", + "q_from_mvar": "float64", + "p_to_mw": "float64", + "q_to_mvar": "float64", + "pl_mw": "float64", + "ql_mvar": "float64", + "i_from_ka": "float64", + "i_to_ka": "float64", + "i_ka": "float64", + "vm_from_pu": "float64", + "va_from_degree": "float64", + "vm_to_pu": "float64", + "va_to_degree": "float64", + "loading_percent": "float64" + } + }, + "res_trafo": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_hv_mw\",\"q_hv_mvar\",\"p_lv_mw\",\"q_lv_mvar\",\"pl_mw\",\"ql_mvar\",\"i_hv_ka\",\"i_lv_ka\",\"vm_hv_pu\",\"va_hv_degree\",\"vm_lv_pu\",\"va_lv_degree\",\"loading_percent\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_hv_mw": "float64", + "q_hv_mvar": "float64", + "p_lv_mw": "float64", + "q_lv_mvar": "float64", + "pl_mw": "float64", + "ql_mvar": "float64", + "i_hv_ka": "float64", + "i_lv_ka": "float64", + "vm_hv_pu": "float64", + "va_hv_degree": "float64", + "vm_lv_pu": "float64", + "va_lv_degree": "float64", + "loading_percent": "float64" + } + }, + "res_trafo3w": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_hv_mw\",\"q_hv_mvar\",\"p_mv_mw\",\"q_mv_mvar\",\"p_lv_mw\",\"q_lv_mvar\",\"pl_mw\",\"ql_mvar\",\"i_hv_ka\",\"i_mv_ka\",\"i_lv_ka\",\"vm_hv_pu\",\"va_hv_degree\",\"vm_mv_pu\",\"va_mv_degree\",\"vm_lv_pu\",\"va_lv_degree\",\"va_internal_degree\",\"vm_internal_pu\",\"loading_percent\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_hv_mw": "float64", + "q_hv_mvar": "float64", + "p_mv_mw": "float64", + "q_mv_mvar": "float64", + "p_lv_mw": "float64", + "q_lv_mvar": "float64", + "pl_mw": "float64", + "ql_mvar": "float64", + "i_hv_ka": "float64", + "i_mv_ka": "float64", + "i_lv_ka": "float64", + "vm_hv_pu": "float64", + "va_hv_degree": "float64", + "vm_mv_pu": "float64", + "va_mv_degree": "float64", + "vm_lv_pu": "float64", + "va_lv_degree": "float64", + "va_internal_degree": "float64", + "vm_internal_pu": "float64", + "loading_percent": "float64" + } + }, + "res_impedance": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_from_mw\",\"q_from_mvar\",\"p_to_mw\",\"q_to_mvar\",\"pl_mw\",\"ql_mvar\",\"i_from_ka\",\"i_to_ka\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_from_mw": "float64", + "q_from_mvar": "float64", + "p_to_mw": "float64", + "q_to_mvar": "float64", + "pl_mw": "float64", + "ql_mvar": "float64", + "i_from_ka": "float64", + "i_to_ka": "float64" + } + }, + "res_ext_grid": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_load": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_motor": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_sgen": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_storage": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_shunt": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\",\"vm_pu\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64", + "vm_pu": "float64" + } + }, + "res_gen": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\",\"va_degree\",\"vm_pu\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64", + "va_degree": "float64", + "vm_pu": "float64" + } + }, + "res_ward": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\",\"vm_pu\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64", + "vm_pu": "float64" + } + }, + "res_xward": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\",\"vm_pu\",\"va_internal_degree\",\"vm_internal_pu\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64", + "vm_pu": "float64", + "va_internal_degree": "float64", + "vm_internal_pu": "float64" + } + }, + "res_dcline": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_from_mw\",\"q_from_mvar\",\"p_to_mw\",\"q_to_mvar\",\"pl_mw\",\"vm_from_pu\",\"va_from_degree\",\"vm_to_pu\",\"va_to_degree\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_from_mw": "float64", + "q_from_mvar": "float64", + "p_to_mw": "float64", + "q_to_mvar": "float64", + "pl_mw": "float64", + "vm_from_pu": "float64", + "va_from_degree": "float64", + "vm_to_pu": "float64", + "va_to_degree": "float64" + } + }, + "res_asymmetric_load": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_asymmetric_sgen": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_bus_est": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"vm_pu\",\"va_degree\",\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "vm_pu": "float64", + "va_degree": "float64", + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_line_est": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_from_mw\",\"q_from_mvar\",\"p_to_mw\",\"q_to_mvar\",\"pl_mw\",\"ql_mvar\",\"i_from_ka\",\"i_to_ka\",\"i_ka\",\"vm_from_pu\",\"va_from_degree\",\"vm_to_pu\",\"va_to_degree\",\"loading_percent\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_from_mw": "float64", + "q_from_mvar": "float64", + "p_to_mw": "float64", + "q_to_mvar": "float64", + "pl_mw": "float64", + "ql_mvar": "float64", + "i_from_ka": "float64", + "i_to_ka": "float64", + "i_ka": "float64", + "vm_from_pu": "float64", + "va_from_degree": "float64", + "vm_to_pu": "float64", + "va_to_degree": "float64", + "loading_percent": "float64" + } + }, + "res_trafo_est": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_hv_mw\",\"q_hv_mvar\",\"p_lv_mw\",\"q_lv_mvar\",\"pl_mw\",\"ql_mvar\",\"i_hv_ka\",\"i_lv_ka\",\"vm_hv_pu\",\"va_hv_degree\",\"vm_lv_pu\",\"va_lv_degree\",\"loading_percent\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_hv_mw": "float64", + "q_hv_mvar": "float64", + "p_lv_mw": "float64", + "q_lv_mvar": "float64", + "pl_mw": "float64", + "ql_mvar": "float64", + "i_hv_ka": "float64", + "i_lv_ka": "float64", + "vm_hv_pu": "float64", + "va_hv_degree": "float64", + "vm_lv_pu": "float64", + "va_lv_degree": "float64", + "loading_percent": "float64" + } + }, + "res_trafo3w_est": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_hv_mw\",\"q_hv_mvar\",\"p_mv_mw\",\"q_mv_mvar\",\"p_lv_mw\",\"q_lv_mvar\",\"pl_mw\",\"ql_mvar\",\"i_hv_ka\",\"i_mv_ka\",\"i_lv_ka\",\"vm_hv_pu\",\"va_hv_degree\",\"vm_mv_pu\",\"va_mv_degree\",\"vm_lv_pu\",\"va_lv_degree\",\"va_internal_degree\",\"vm_internal_pu\",\"loading_percent\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_hv_mw": "float64", + "q_hv_mvar": "float64", + "p_mv_mw": "float64", + "q_mv_mvar": "float64", + "p_lv_mw": "float64", + "q_lv_mvar": "float64", + "pl_mw": "float64", + "ql_mvar": "float64", + "i_hv_ka": "float64", + "i_mv_ka": "float64", + "i_lv_ka": "float64", + "vm_hv_pu": "float64", + "va_hv_degree": "float64", + "vm_mv_pu": "float64", + "va_mv_degree": "float64", + "vm_lv_pu": "float64", + "va_lv_degree": "float64", + "va_internal_degree": "float64", + "vm_internal_pu": "float64", + "loading_percent": "float64" + } + }, + "res_impedance_est": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_from_mw\",\"q_from_mvar\",\"p_to_mw\",\"q_to_mvar\",\"pl_mw\",\"ql_mvar\",\"i_from_ka\",\"i_to_ka\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_from_mw": "float64", + "q_from_mvar": "float64", + "p_to_mw": "float64", + "q_to_mvar": "float64", + "pl_mw": "float64", + "ql_mvar": "float64", + "i_from_ka": "float64", + "i_to_ka": "float64" + } + }, + "res_bus_sc": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[],\"index\":[],\"data\":[]}", + "orient": "split" + }, + "res_line_sc": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[],\"index\":[],\"data\":[]}", + "orient": "split" + }, + "res_trafo_sc": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[],\"index\":[],\"data\":[]}", + "orient": "split" + }, + "res_trafo3w_sc": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[],\"index\":[],\"data\":[]}", + "orient": "split" + }, + "res_ext_grid_sc": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[],\"index\":[],\"data\":[]}", + "orient": "split" + }, + "res_gen_sc": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[],\"index\":[],\"data\":[]}", + "orient": "split" + }, + "res_sgen_sc": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[],\"index\":[],\"data\":[]}", + "orient": "split" + }, + "res_bus_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"vm_a_pu\",\"va_a_degree\",\"vm_b_pu\",\"va_b_degree\",\"vm_c_pu\",\"va_c_degree\",\"p_a_mw\",\"q_a_mvar\",\"p_b_mw\",\"q_b_mvar\",\"p_c_mw\",\"q_c_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "vm_a_pu": "float64", + "va_a_degree": "float64", + "vm_b_pu": "float64", + "va_b_degree": "float64", + "vm_c_pu": "float64", + "va_c_degree": "float64", + "p_a_mw": "float64", + "q_a_mvar": "float64", + "p_b_mw": "float64", + "q_b_mvar": "float64", + "p_c_mw": "float64", + "q_c_mvar": "float64" + } + }, + "res_line_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_a_from_mw\",\"q_a_from_mvar\",\"p_b_from_mw\",\"q_b_from_mvar\",\"q_c_from_mvar\",\"p_a_to_mw\",\"q_a_to_mvar\",\"p_b_to_mw\",\"q_b_to_mvar\",\"p_c_to_mw\",\"q_c_to_mvar\",\"p_a_l_mw\",\"q_a_l_mvar\",\"p_b_l_mw\",\"q_b_l_mvar\",\"p_c_l_mw\",\"q_c_l_mvar\",\"i_a_from_ka\",\"i_a_to_ka\",\"i_b_from_ka\",\"i_b_to_ka\",\"i_c_from_ka\",\"i_c_to_ka\",\"i_a_ka\",\"i_b_ka\",\"i_c_ka\",\"i_n_from_ka\",\"i_n_to_ka\",\"i_n_ka\",\"loading_a_percent\",\"loading_b_percent\",\"loading_c_percent\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_a_from_mw": "float64", + "q_a_from_mvar": "float64", + "p_b_from_mw": "float64", + "q_b_from_mvar": "float64", + "q_c_from_mvar": "float64", + "p_a_to_mw": "float64", + "q_a_to_mvar": "float64", + "p_b_to_mw": "float64", + "q_b_to_mvar": "float64", + "p_c_to_mw": "float64", + "q_c_to_mvar": "float64", + "p_a_l_mw": "float64", + "q_a_l_mvar": "float64", + "p_b_l_mw": "float64", + "q_b_l_mvar": "float64", + "p_c_l_mw": "float64", + "q_c_l_mvar": "float64", + "i_a_from_ka": "float64", + "i_a_to_ka": "float64", + "i_b_from_ka": "float64", + "i_b_to_ka": "float64", + "i_c_from_ka": "float64", + "i_c_to_ka": "float64", + "i_a_ka": "float64", + "i_b_ka": "float64", + "i_c_ka": "float64", + "i_n_from_ka": "float64", + "i_n_to_ka": "float64", + "i_n_ka": "float64", + "loading_a_percent": "float64", + "loading_b_percent": "float64", + "loading_c_percent": "float64" + } + }, + "res_trafo_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_a_hv_mw\",\"q_a_hv_mvar\",\"p_b_hv_mw\",\"q_b_hv_mvar\",\"p_c_hv_mw\",\"q_c_hv_mvar\",\"p_a_lv_mw\",\"q_a_lv_mvar\",\"p_b_lv_mw\",\"q_b_lv_mvar\",\"p_c_lv_mw\",\"q_c_lv_mvar\",\"p_a_l_mw\",\"q_a_l_mvar\",\"p_b_l_mw\",\"q_b_l_mvar\",\"p_c_l_mw\",\"q_c_l_mvar\",\"i_a_hv_ka\",\"i_a_lv_ka\",\"i_b_hv_ka\",\"i_b_lv_ka\",\"i_c_hv_ka\",\"i_c_lv_ka\",\"loading_a_percent\",\"loading_b_percent\",\"loading_c_percent\",\"loading_percent\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_a_hv_mw": "float64", + "q_a_hv_mvar": "float64", + "p_b_hv_mw": "float64", + "q_b_hv_mvar": "float64", + "p_c_hv_mw": "float64", + "q_c_hv_mvar": "float64", + "p_a_lv_mw": "float64", + "q_a_lv_mvar": "float64", + "p_b_lv_mw": "float64", + "q_b_lv_mvar": "float64", + "p_c_lv_mw": "float64", + "q_c_lv_mvar": "float64", + "p_a_l_mw": "float64", + "q_a_l_mvar": "float64", + "p_b_l_mw": "float64", + "q_b_l_mvar": "float64", + "p_c_l_mw": "float64", + "q_c_l_mvar": "float64", + "i_a_hv_ka": "float64", + "i_a_lv_ka": "float64", + "i_b_hv_ka": "float64", + "i_b_lv_ka": "float64", + "i_c_hv_ka": "float64", + "i_c_lv_ka": "float64", + "loading_a_percent": "float64", + "loading_b_percent": "float64", + "loading_c_percent": "float64", + "loading_percent": "float64" + } + }, + "res_ext_grid_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_a_mw\",\"q_a_mvar\",\"p_b_mw\",\"q_b_mvar\",\"p_c_mw\",\"q_c_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_a_mw": "float64", + "q_a_mvar": "float64", + "p_b_mw": "float64", + "q_b_mvar": "float64", + "p_c_mw": "float64", + "q_c_mvar": "float64" + } + }, + "res_shunt_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[],\"index\":[],\"data\":[]}", + "orient": "split" + }, + "res_load_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_sgen_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_storage_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_asymmetric_load_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_a_mw\",\"q_a_mvar\",\"p_b_mw\",\"q_b_mvar\",\"p_c_mw\",\"q_c_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_a_mw": "float64", + "q_a_mvar": "float64", + "p_b_mw": "float64", + "q_b_mvar": "float64", + "p_c_mw": "float64", + "q_c_mvar": "float64" + } + }, + "res_asymmetric_sgen_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_a_mw\",\"q_a_mvar\",\"p_b_mw\",\"q_b_mvar\",\"p_c_mw\",\"q_c_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_a_mw": "float64", + "q_a_mvar": "float64", + "p_b_mw": "float64", + "q_b_mvar": "float64", + "p_c_mw": "float64", + "q_c_mvar": "float64" + } + }, + "user_pf_options": {} + } +} \ No newline at end of file diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/grid_forecast.json b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/grid_forecast.json new file mode 100644 index 000000000..2f27b3528 --- /dev/null +++ b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/grid_forecast.json @@ -0,0 +1,1766 @@ +{ + "_module": "pandapower.auxiliary", + "_class": "pandapowerNet", + "_object": { + "bus": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"vn_kv\",\"type\",\"zone\",\"in_service\",\"min_vm_pu\",\"max_vm_pu\"],\"index\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],\"data\":[[1,138.0,\"b\",1.0,true,0.94,1.06],[2,138.0,\"b\",1.0,true,0.94,1.06],[3,138.0,\"b\",1.0,true,0.94,1.06],[4,138.0,\"b\",1.0,true,0.94,1.06],[5,138.0,\"b\",1.0,true,0.94,1.06],[6,20.0,\"b\",1.0,true,0.94,1.06],[7,14.0,\"b\",1.0,true,0.94,1.06],[8,12.0,\"b\",1.0,true,0.94,1.06],[9,20.0,\"b\",1.0,true,0.94,1.06],[10,20.0,\"b\",1.0,true,0.94,1.06],[11,20.0,\"b\",1.0,true,0.94,1.06],[12,20.0,\"b\",1.0,true,0.94,1.06],[13,20.0,\"b\",1.0,true,0.94,1.06],[14,20.0,\"b\",1.0,true,0.94,1.06]]}", + "orient": "split", + "dtype": { + "name": "object", + "vn_kv": "float64", + "type": "object", + "zone": "object", + "in_service": "bool", + "min_vm_pu": "float64", + "max_vm_pu": "float64" + } + }, + "load": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"bus\",\"p_mw\",\"q_mvar\",\"const_z_percent\",\"const_i_percent\",\"sn_mva\",\"scaling\",\"in_service\",\"type\",\"controllable\"],\"index\":[0,1,2,3,4,5,6,7,8,9,10],\"data\":[[null,1,21.699999999999999,12.699999999999999,0.0,0.0,null,1.0,true,null,false],[null,2,94.200000000000003,19.0,0.0,0.0,null,1.0,true,null,false],[null,3,47.799999999999997,-3.9,0.0,0.0,null,1.0,true,null,false],[null,4,7.6,1.6,0.0,0.0,null,1.0,true,null,false],[null,5,11.199999999999999,7.5,0.0,0.0,null,1.0,true,null,false],[null,8,29.5,16.600000000000001,0.0,0.0,null,1.0,true,null,false],[null,9,9.0,5.8,0.0,0.0,null,1.0,true,null,false],[null,10,3.5,1.8,0.0,0.0,null,1.0,true,null,false],[null,11,6.1,1.6,0.0,0.0,null,1.0,true,null,false],[null,12,13.5,5.8,0.0,0.0,null,1.0,true,null,false],[null,13,14.9,5.0,0.0,0.0,null,1.0,true,null,false]]}", + "orient": "split", + "dtype": { + "name": "object", + "bus": "uint32", + "p_mw": "float64", + "q_mvar": "float64", + "const_z_percent": "float64", + "const_i_percent": "float64", + "sn_mva": "float64", + "scaling": "float64", + "in_service": "bool", + "type": "object", + "controllable": "object" + } + }, + "sgen": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"bus\",\"p_mw\",\"q_mvar\",\"sn_mva\",\"scaling\",\"in_service\",\"type\",\"current_source\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "bus": "int64", + "p_mw": "float64", + "q_mvar": "float64", + "sn_mva": "float64", + "scaling": "float64", + "in_service": "bool", + "type": "object", + "current_source": "bool" + } + }, + "motor": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"bus\",\"pn_mech_mw\",\"loading_percent\",\"cos_phi\",\"cos_phi_n\",\"efficiency_percent\",\"efficiency_n_percent\",\"lrc_pu\",\"vn_kv\",\"scaling\",\"in_service\",\"rx\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "bus": "int64", + "pn_mech_mw": "float64", + "loading_percent": "float64", + "cos_phi": "float64", + "cos_phi_n": "float64", + "efficiency_percent": "float64", + "efficiency_n_percent": "float64", + "lrc_pu": "float64", + "vn_kv": "float64", + "scaling": "float64", + "in_service": "bool", + "rx": "float64" + } + }, + "asymmetric_load": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"bus\",\"p_a_mw\",\"q_a_mvar\",\"p_b_mw\",\"q_b_mvar\",\"p_c_mw\",\"q_c_mvar\",\"sn_mva\",\"scaling\",\"in_service\",\"type\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "bus": "uint32", + "p_a_mw": "float64", + "q_a_mvar": "float64", + "p_b_mw": "float64", + "q_b_mvar": "float64", + "p_c_mw": "float64", + "q_c_mvar": "float64", + "sn_mva": "float64", + "scaling": "float64", + "in_service": "bool", + "type": "object" + } + }, + "asymmetric_sgen": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"bus\",\"p_a_mw\",\"q_a_mvar\",\"p_b_mw\",\"q_b_mvar\",\"p_c_mw\",\"q_c_mvar\",\"sn_mva\",\"scaling\",\"in_service\",\"type\",\"current_source\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "bus": "int64", + "p_a_mw": "float64", + "q_a_mvar": "float64", + "p_b_mw": "float64", + "q_b_mvar": "float64", + "p_c_mw": "float64", + "q_c_mvar": "float64", + "sn_mva": "float64", + "scaling": "float64", + "in_service": "bool", + "type": "object", + "current_source": "bool" + } + }, + "storage": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"bus\",\"p_mw\",\"q_mvar\",\"sn_mva\",\"soc_percent\",\"min_e_mwh\",\"max_e_mwh\",\"scaling\",\"in_service\",\"type\"],\"index\":[0,1],\"data\":[[null,5,0.0,0.0,null,null,0.0,15.0,1.0,true,null],[null,7,0.0,0.0,null,null,0.0,7.0,1.0,true,null]]}", + "orient": "split", + "dtype": { + "name": "object", + "bus": "int64", + "p_mw": "float64", + "q_mvar": "float64", + "sn_mva": "float64", + "soc_percent": "float64", + "min_e_mwh": "float64", + "max_e_mwh": "float64", + "scaling": "float64", + "in_service": "bool", + "type": "object" + } + }, + "gen": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"bus\",\"p_mw\",\"vm_pu\",\"sn_mva\",\"min_q_mvar\",\"max_q_mvar\",\"scaling\",\"slack\",\"in_service\",\"type\",\"controllable\",\"min_p_mw\",\"max_p_mw\",\"slack_weight\",\"power_station_trafo\"],\"index\":[0,1,2,3,4,5],\"data\":[[null,1,40.0,1.045,null,-40.0,50.0,1.0,false,true,null,true,0.0,140.0,0.0,null],[null,2,0.0,1.01,null,0.0,40.0,1.0,false,true,null,true,0.0,100.0,0.0,null],[null,5,0.0,1.07,null,-6.0,24.0,1.0,false,true,null,true,0.0,100.0,0.0,null],[null,5,0.0,1.07,null,-6.0,24.0,1.0,false,true,null,true,0.0,100.0,0.0,null],[null,7,0.0,1.09,null,-6.0,24.0,1.0,false,true,null,true,0.0,100.0,0.0,null],[\"gen_0_5\",0,-219.0,1.06,null,-9999.0,9999.0,1.0,true,true,null,true,null,null,1.0,null]]}", + "orient": "split", + "dtype": { + "name": "object", + "bus": "uint32", + "p_mw": "float64", + "vm_pu": "float64", + "sn_mva": "float64", + "min_q_mvar": "float64", + "max_q_mvar": "float64", + "scaling": "float64", + "slack": "bool", + "in_service": "bool", + "type": "object", + "controllable": "object", + "min_p_mw": "float64", + "max_p_mw": "float64", + "slack_weight": "float64", + "power_station_trafo": "float64" + } + }, + "switch": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"bus\",\"element\",\"et\",\"type\",\"closed\",\"name\",\"z_ohm\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "bus": "int64", + "element": "int64", + "et": "object", + "type": "object", + "closed": "bool", + "name": "object", + "z_ohm": "float64" + } + }, + "shunt": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"bus\",\"name\",\"q_mvar\",\"p_mw\",\"vn_kv\",\"step\",\"max_step\",\"in_service\"],\"index\":[0],\"data\":[[8,null,-19.0,0.0,20.0,1,1,true]]}", + "orient": "split", + "dtype": { + "bus": "uint32", + "name": "object", + "q_mvar": "float64", + "p_mw": "float64", + "vn_kv": "float64", + "step": "uint32", + "max_step": "uint32", + "in_service": "bool" + } + }, + "line": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"std_type\",\"from_bus\",\"to_bus\",\"length_km\",\"r_ohm_per_km\",\"x_ohm_per_km\",\"c_nf_per_km\",\"g_us_per_km\",\"max_i_ka\",\"df\",\"parallel\",\"type\",\"in_service\",\"max_loading_percent\"],\"index\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],\"data\":[[null,null,0,1,1.0,3.6907272,11.2683348,882.522683811391971,0.0,41.418606267951418,1.0,1,\"ol\",true,100.0],[null,null,0,4,1.0,10.2894732,42.475737599999995,822.350682642433412,0.0,41.418606267951418,1.0,1,\"ol\",true,100.0],[null,null,1,2,1.0,8.948775599999999,37.701406800000001,732.092680888995574,0.0,41.418606267951418,1.0,1,\"ol\",true,100.0],[null,null,1,3,1.0,11.0664684,33.578380799999998,568.29112215127509,0.0,41.418606267951418,1.0,1,\"ol\",true,100.0],[null,null,1,4,1.0,10.845558,33.1137072,578.319789012768069,0.0,41.418606267951418,1.0,1,\"ol\",true,100.0],[null,null,2,3,1.0,12.761384400000001,32.570953199999998,213.94489304518595,0.0,41.418606267951418,1.0,1,\"ol\",true,100.0],[null,null,3,4,1.0,2.542374,8.019428400000001,0.0,0.0,41.418606267951418,1.0,1,\"ol\",true,100.0],[null,null,5,10,1.0,0.37992,0.7956,0.0,0.0,285.788383248864761,1.0,1,\"ol\",true,100.0],[null,null,5,11,1.0,0.49164,1.02324,0.0,0.0,285.788383248864761,1.0,1,\"ol\",true,100.0],[null,null,5,12,1.0,0.2646,0.52108,0.0,0.0,285.788383248864761,1.0,1,\"ol\",true,100.0],[null,null,8,9,1.0,0.12724,0.338,0.0,0.0,285.788383248864761,1.0,1,\"ol\",true,100.0],[null,null,8,13,1.0,0.50844,1.08152,0.0,0.0,285.788383248864761,1.0,1,\"ol\",true,100.0],[null,null,9,10,1.0,0.3282,0.76828,0.0,0.0,285.788383248864761,1.0,1,\"ol\",true,100.0],[null,null,11,12,1.0,0.88368,0.79952,0.0,0.0,285.788383248864761,1.0,1,\"ol\",true,100.0],[null,null,12,13,1.0,0.68372,1.39208,0.0,0.0,285.788383248864761,1.0,1,\"ol\",true,100.0]]}", + "orient": "split", + "dtype": { + "name": "object", + "std_type": "object", + "from_bus": "uint32", + "to_bus": "uint32", + "length_km": "float64", + "r_ohm_per_km": "float64", + "x_ohm_per_km": "float64", + "c_nf_per_km": "float64", + "g_us_per_km": "float64", + "max_i_ka": "float64", + "df": "float64", + "parallel": "uint32", + "type": "object", + "in_service": "bool", + "max_loading_percent": "float64" + } + }, + "trafo": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"std_type\",\"hv_bus\",\"lv_bus\",\"sn_mva\",\"vn_hv_kv\",\"vn_lv_kv\",\"vk_percent\",\"vkr_percent\",\"pfe_kw\",\"i0_percent\",\"shift_degree\",\"tap_side\",\"tap_neutral\",\"tap_min\",\"tap_max\",\"tap_step_percent\",\"tap_step_degree\",\"tap_pos\",\"tap_phase_shifter\",\"parallel\",\"df\",\"in_service\",\"max_loading_percent\"],\"index\":[0,1,2,3,4],\"data\":[[null,null,3,6,9900.0,138.0,14.0,2070.288000000000011,0.0,0.0,0.0,0.0,\"hv\",0,null,null,2.200000000000002,0.0,-1,false,1,1.0,true,100.0],[null,null,3,8,9900.0,138.0,20.0,5506.181999999999789,0.0,0.0,0.0,0.0,\"hv\",0,null,null,3.100000000000003,0.0,-1,false,1,1.0,true,100.0],[null,null,4,5,9900.0,138.0,20.0,2494.998000000000047,0.0,0.0,0.0,0.0,\"hv\",0,null,null,6.799999999999995,0.0,-1,false,1,1.0,true,100.0],[null,null,6,7,9900.0,14.0,12.0,1743.884999999999991,0.0,0.0,0.0,0.0,false,0,null,null,0.0,0.0,0,false,1,1.0,true,100.0],[null,null,8,6,9900.0,20.0,14.0,1089.098999999999933,0.0,0.0,0.0,0.0,false,0,null,null,0.0,0.0,0,false,1,1.0,true,100.0]]}", + "orient": "split", + "dtype": { + "name": "object", + "std_type": "object", + "hv_bus": "uint32", + "lv_bus": "uint32", + "sn_mva": "float64", + "vn_hv_kv": "float64", + "vn_lv_kv": "float64", + "vk_percent": "float64", + "vkr_percent": "float64", + "pfe_kw": "float64", + "i0_percent": "float64", + "shift_degree": "float64", + "tap_side": "object", + "tap_neutral": "int32", + "tap_min": "float64", + "tap_max": "float64", + "tap_step_percent": "float64", + "tap_step_degree": "float64", + "tap_pos": "int32", + "tap_phase_shifter": "bool", + "parallel": "uint32", + "df": "float64", + "in_service": "bool", + "max_loading_percent": "float64" + } + }, + "trafo3w": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"std_type\",\"hv_bus\",\"mv_bus\",\"lv_bus\",\"sn_hv_mva\",\"sn_mv_mva\",\"sn_lv_mva\",\"vn_hv_kv\",\"vn_mv_kv\",\"vn_lv_kv\",\"vk_hv_percent\",\"vk_mv_percent\",\"vk_lv_percent\",\"vkr_hv_percent\",\"vkr_mv_percent\",\"vkr_lv_percent\",\"pfe_kw\",\"i0_percent\",\"shift_mv_degree\",\"shift_lv_degree\",\"tap_side\",\"tap_neutral\",\"tap_min\",\"tap_max\",\"tap_step_percent\",\"tap_step_degree\",\"tap_pos\",\"tap_at_star_point\",\"in_service\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "std_type": "object", + "hv_bus": "uint32", + "mv_bus": "uint32", + "lv_bus": "uint32", + "sn_hv_mva": "float64", + "sn_mv_mva": "float64", + "sn_lv_mva": "float64", + "vn_hv_kv": "float64", + "vn_mv_kv": "float64", + "vn_lv_kv": "float64", + "vk_hv_percent": "float64", + "vk_mv_percent": "float64", + "vk_lv_percent": "float64", + "vkr_hv_percent": "float64", + "vkr_mv_percent": "float64", + "vkr_lv_percent": "float64", + "pfe_kw": "float64", + "i0_percent": "float64", + "shift_mv_degree": "float64", + "shift_lv_degree": "float64", + "tap_side": "object", + "tap_neutral": "int32", + "tap_min": "int32", + "tap_max": "int32", + "tap_step_percent": "float64", + "tap_step_degree": "float64", + "tap_pos": "int32", + "tap_at_star_point": "bool", + "in_service": "bool" + } + }, + "impedance": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"from_bus\",\"to_bus\",\"rft_pu\",\"xft_pu\",\"rtf_pu\",\"xtf_pu\",\"sn_mva\",\"in_service\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "from_bus": "uint32", + "to_bus": "uint32", + "rft_pu": "float64", + "xft_pu": "float64", + "rtf_pu": "float64", + "xtf_pu": "float64", + "sn_mva": "float64", + "in_service": "bool" + } + }, + "dcline": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"from_bus\",\"to_bus\",\"p_mw\",\"loss_percent\",\"loss_mw\",\"vm_from_pu\",\"vm_to_pu\",\"max_p_mw\",\"min_q_from_mvar\",\"min_q_to_mvar\",\"max_q_from_mvar\",\"max_q_to_mvar\",\"in_service\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "from_bus": "uint32", + "to_bus": "uint32", + "p_mw": "float64", + "loss_percent": "float64", + "loss_mw": "float64", + "vm_from_pu": "float64", + "vm_to_pu": "float64", + "max_p_mw": "float64", + "min_q_from_mvar": "float64", + "min_q_to_mvar": "float64", + "max_q_from_mvar": "float64", + "max_q_to_mvar": "float64", + "in_service": "bool" + } + }, + "ward": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"bus\",\"ps_mw\",\"qs_mvar\",\"qz_mvar\",\"pz_mw\",\"in_service\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "bus": "uint32", + "ps_mw": "float64", + "qs_mvar": "float64", + "qz_mvar": "float64", + "pz_mw": "float64", + "in_service": "bool" + } + }, + "xward": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"bus\",\"ps_mw\",\"qs_mvar\",\"qz_mvar\",\"pz_mw\",\"r_ohm\",\"x_ohm\",\"vm_pu\",\"in_service\",\"slack_weight\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "bus": "uint32", + "ps_mw": "float64", + "qs_mvar": "float64", + "qz_mvar": "float64", + "pz_mw": "float64", + "r_ohm": "float64", + "x_ohm": "float64", + "vm_pu": "float64", + "in_service": "bool", + "slack_weight": "float64" + } + }, + "measurement": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"name\",\"measurement_type\",\"element_type\",\"element\",\"value\",\"std_dev\",\"side\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "name": "object", + "measurement_type": "object", + "element_type": "object", + "element": "uint32", + "value": "float64", + "std_dev": "float64", + "side": "object" + } + }, + "pwl_cost": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"power_type\",\"element\",\"et\",\"points\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "power_type": "object", + "element": "uint32", + "et": "object", + "points": "object" + } + }, + "poly_cost": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"element\",\"et\",\"cp0_eur\",\"cp1_eur_per_mw\",\"cp2_eur_per_mw2\",\"cq0_eur\",\"cq1_eur_per_mvar\",\"cq2_eur_per_mvar2\"],\"index\":[0,1,2,3,4],\"data\":[[0,\"ext_grid\",0.0,20.0,0.0430293,0.0,0.0,0.0],[0,\"gen\",0.0,20.0,0.25,0.0,0.0,0.0],[1,\"gen\",0.0,40.0,0.01,0.0,0.0,0.0],[2,\"gen\",0.0,40.0,0.01,0.0,0.0,0.0],[3,\"gen\",0.0,40.0,0.01,0.0,0.0,0.0]]}", + "orient": "split", + "dtype": { + "element": "uint32", + "et": "object", + "cp0_eur": "float64", + "cp1_eur_per_mw": "float64", + "cp2_eur_per_mw2": "float64", + "cq0_eur": "float64", + "cq1_eur_per_mvar": "float64", + "cq2_eur_per_mvar2": "float64" + } + }, + "characteristic": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"object\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "object": "object" + } + }, + "controller": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"object\",\"in_service\",\"order\",\"level\",\"initial_run\",\"recycle\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "object": "object", + "in_service": "bool", + "order": "float64", + "level": "object", + "initial_run": "bool", + "recycle": "object" + } + }, + "line_geodata": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"coords\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "coords": "object" + } + }, + "bus_geodata": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"x\",\"y\",\"coords\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "x": "float64", + "y": "float64", + "coords": "object" + } + }, + "version": "2.8.0", + "converged": false, + "name": "", + "f_hz": 50, + "sn_mva": 1.0, + "std_types": { + "line": { + "NAYY 4x50 SE": { + "c_nf_per_km": 210, + "r_ohm_per_km": 0.642, + "x_ohm_per_km": 0.083, + "max_i_ka": 0.142, + "type": "cs", + "q_mm2": 50, + "alpha": 0.00403 + }, + "NAYY 4x120 SE": { + "c_nf_per_km": 264, + "r_ohm_per_km": 0.225, + "x_ohm_per_km": 0.08, + "max_i_ka": 0.242, + "type": "cs", + "q_mm2": 120, + "alpha": 0.00403 + }, + "NAYY 4x150 SE": { + "c_nf_per_km": 261, + "r_ohm_per_km": 0.208, + "x_ohm_per_km": 0.08, + "max_i_ka": 0.27, + "type": "cs", + "q_mm2": 150, + "alpha": 0.00403 + }, + "NA2XS2Y 1x95 RM/25 12/20 kV": { + "c_nf_per_km": 216, + "r_ohm_per_km": 0.313, + "x_ohm_per_km": 0.132, + "max_i_ka": 0.252, + "type": "cs", + "q_mm2": 95, + "alpha": 0.00403 + }, + "NA2XS2Y 1x185 RM/25 12/20 kV": { + "c_nf_per_km": 273, + "r_ohm_per_km": 0.161, + "x_ohm_per_km": 0.117, + "max_i_ka": 0.362, + "type": "cs", + "q_mm2": 185, + "alpha": 0.00403 + }, + "NA2XS2Y 1x240 RM/25 12/20 kV": { + "c_nf_per_km": 304, + "r_ohm_per_km": 0.122, + "x_ohm_per_km": 0.112, + "max_i_ka": 0.421, + "type": "cs", + "q_mm2": 240, + "alpha": 0.00403 + }, + "NA2XS2Y 1x95 RM/25 6/10 kV": { + "c_nf_per_km": 315, + "r_ohm_per_km": 0.313, + "x_ohm_per_km": 0.123, + "max_i_ka": 0.249, + "type": "cs", + "q_mm2": 95, + "alpha": 0.00403 + }, + "NA2XS2Y 1x185 RM/25 6/10 kV": { + "c_nf_per_km": 406, + "r_ohm_per_km": 0.161, + "x_ohm_per_km": 0.11, + "max_i_ka": 0.358, + "type": "cs", + "q_mm2": 185, + "alpha": 0.00403 + }, + "NA2XS2Y 1x240 RM/25 6/10 kV": { + "c_nf_per_km": 456, + "r_ohm_per_km": 0.122, + "x_ohm_per_km": 0.105, + "max_i_ka": 0.416, + "type": "cs", + "q_mm2": 240, + "alpha": 0.00403 + }, + "NA2XS2Y 1x150 RM/25 12/20 kV": { + "c_nf_per_km": 250, + "r_ohm_per_km": 0.206, + "x_ohm_per_km": 0.116, + "max_i_ka": 0.319, + "type": "cs", + "q_mm2": 150, + "alpha": 0.00403 + }, + "NA2XS2Y 1x120 RM/25 12/20 kV": { + "c_nf_per_km": 230, + "r_ohm_per_km": 0.253, + "x_ohm_per_km": 0.119, + "max_i_ka": 0.283, + "type": "cs", + "q_mm2": 120, + "alpha": 0.00403 + }, + "NA2XS2Y 1x70 RM/25 12/20 kV": { + "c_nf_per_km": 190, + "r_ohm_per_km": 0.443, + "x_ohm_per_km": 0.132, + "max_i_ka": 0.22, + "type": "cs", + "q_mm2": 70, + "alpha": 0.00403 + }, + "NA2XS2Y 1x150 RM/25 6/10 kV": { + "c_nf_per_km": 360, + "r_ohm_per_km": 0.206, + "x_ohm_per_km": 0.11, + "max_i_ka": 0.315, + "type": "cs", + "q_mm2": 150, + "alpha": 0.00403 + }, + "NA2XS2Y 1x120 RM/25 6/10 kV": { + "c_nf_per_km": 340, + "r_ohm_per_km": 0.253, + "x_ohm_per_km": 0.113, + "max_i_ka": 0.28, + "type": "cs", + "q_mm2": 120, + "alpha": 0.00403 + }, + "NA2XS2Y 1x70 RM/25 6/10 kV": { + "c_nf_per_km": 280, + "r_ohm_per_km": 0.443, + "x_ohm_per_km": 0.123, + "max_i_ka": 0.217, + "type": "cs", + "q_mm2": 70, + "alpha": 0.00403 + }, + "N2XS(FL)2Y 1x120 RM/35 64/110 kV": { + "c_nf_per_km": 112, + "r_ohm_per_km": 0.153, + "x_ohm_per_km": 0.166, + "max_i_ka": 0.366, + "type": "cs", + "q_mm2": 120, + "alpha": 0.00393 + }, + "N2XS(FL)2Y 1x185 RM/35 64/110 kV": { + "c_nf_per_km": 125, + "r_ohm_per_km": 0.099, + "x_ohm_per_km": 0.156, + "max_i_ka": 0.457, + "type": "cs", + "q_mm2": 185, + "alpha": 0.00393 + }, + "N2XS(FL)2Y 1x240 RM/35 64/110 kV": { + "c_nf_per_km": 135, + "r_ohm_per_km": 0.075, + "x_ohm_per_km": 0.149, + "max_i_ka": 0.526, + "type": "cs", + "q_mm2": 240, + "alpha": 0.00393 + }, + "N2XS(FL)2Y 1x300 RM/35 64/110 kV": { + "c_nf_per_km": 144, + "r_ohm_per_km": 0.06, + "x_ohm_per_km": 0.144, + "max_i_ka": 0.588, + "type": "cs", + "q_mm2": 300, + "alpha": 0.00393 + }, + "15-AL1/3-ST1A 0.4": { + "c_nf_per_km": 11, + "r_ohm_per_km": 1.8769, + "x_ohm_per_km": 0.35, + "max_i_ka": 0.105, + "type": "ol", + "q_mm2": 16, + "alpha": 0.00403 + }, + "24-AL1/4-ST1A 0.4": { + "c_nf_per_km": 11.25, + "r_ohm_per_km": 1.2012, + "x_ohm_per_km": 0.335, + "max_i_ka": 0.14, + "type": "ol", + "q_mm2": 24, + "alpha": 0.00403 + }, + "48-AL1/8-ST1A 0.4": { + "c_nf_per_km": 12.2, + "r_ohm_per_km": 0.5939, + "x_ohm_per_km": 0.3, + "max_i_ka": 0.21, + "type": "ol", + "q_mm2": 48, + "alpha": 0.00403 + }, + "94-AL1/15-ST1A 0.4": { + "c_nf_per_km": 13.2, + "r_ohm_per_km": 0.306, + "x_ohm_per_km": 0.29, + "max_i_ka": 0.35, + "type": "ol", + "q_mm2": 94, + "alpha": 0.00403 + }, + "34-AL1/6-ST1A 10.0": { + "c_nf_per_km": 9.7, + "r_ohm_per_km": 0.8342, + "x_ohm_per_km": 0.36, + "max_i_ka": 0.17, + "type": "ol", + "q_mm2": 34, + "alpha": 0.00403 + }, + "48-AL1/8-ST1A 10.0": { + "c_nf_per_km": 10.1, + "r_ohm_per_km": 0.5939, + "x_ohm_per_km": 0.35, + "max_i_ka": 0.21, + "type": "ol", + "q_mm2": 48, + "alpha": 0.00403 + }, + "70-AL1/11-ST1A 10.0": { + "c_nf_per_km": 10.4, + "r_ohm_per_km": 0.4132, + "x_ohm_per_km": 0.339, + "max_i_ka": 0.29, + "type": "ol", + "q_mm2": 70, + "alpha": 0.00403 + }, + "94-AL1/15-ST1A 10.0": { + "c_nf_per_km": 10.75, + "r_ohm_per_km": 0.306, + "x_ohm_per_km": 0.33, + "max_i_ka": 0.35, + "type": "ol", + "q_mm2": 94, + "alpha": 0.00403 + }, + "122-AL1/20-ST1A 10.0": { + "c_nf_per_km": 11.1, + "r_ohm_per_km": 0.2376, + "x_ohm_per_km": 0.323, + "max_i_ka": 0.41, + "type": "ol", + "q_mm2": 122, + "alpha": 0.00403 + }, + "149-AL1/24-ST1A 10.0": { + "c_nf_per_km": 11.25, + "r_ohm_per_km": 0.194, + "x_ohm_per_km": 0.315, + "max_i_ka": 0.47, + "type": "ol", + "q_mm2": 149, + "alpha": 0.00403 + }, + "34-AL1/6-ST1A 20.0": { + "c_nf_per_km": 9.15, + "r_ohm_per_km": 0.8342, + "x_ohm_per_km": 0.382, + "max_i_ka": 0.17, + "type": "ol", + "q_mm2": 34, + "alpha": 0.00403 + }, + "48-AL1/8-ST1A 20.0": { + "c_nf_per_km": 9.5, + "r_ohm_per_km": 0.5939, + "x_ohm_per_km": 0.372, + "max_i_ka": 0.21, + "type": "ol", + "q_mm2": 48, + "alpha": 0.00403 + }, + "70-AL1/11-ST1A 20.0": { + "c_nf_per_km": 9.7, + "r_ohm_per_km": 0.4132, + "x_ohm_per_km": 0.36, + "max_i_ka": 0.29, + "type": "ol", + "q_mm2": 70, + "alpha": 0.00403 + }, + "94-AL1/15-ST1A 20.0": { + "c_nf_per_km": 10, + "r_ohm_per_km": 0.306, + "x_ohm_per_km": 0.35, + "max_i_ka": 0.35, + "type": "ol", + "q_mm2": 94, + "alpha": 0.00403 + }, + "122-AL1/20-ST1A 20.0": { + "c_nf_per_km": 10.3, + "r_ohm_per_km": 0.2376, + "x_ohm_per_km": 0.344, + "max_i_ka": 0.41, + "type": "ol", + "q_mm2": 122, + "alpha": 0.00403 + }, + "149-AL1/24-ST1A 20.0": { + "c_nf_per_km": 10.5, + "r_ohm_per_km": 0.194, + "x_ohm_per_km": 0.337, + "max_i_ka": 0.47, + "type": "ol", + "q_mm2": 149, + "alpha": 0.00403 + }, + "184-AL1/30-ST1A 20.0": { + "c_nf_per_km": 10.75, + "r_ohm_per_km": 0.1571, + "x_ohm_per_km": 0.33, + "max_i_ka": 0.535, + "type": "ol", + "q_mm2": 184, + "alpha": 0.00403 + }, + "243-AL1/39-ST1A 20.0": { + "c_nf_per_km": 11, + "r_ohm_per_km": 0.1188, + "x_ohm_per_km": 0.32, + "max_i_ka": 0.645, + "type": "ol", + "q_mm2": 243, + "alpha": 0.00403 + }, + "48-AL1/8-ST1A 110.0": { + "c_nf_per_km": 8, + "r_ohm_per_km": 0.5939, + "x_ohm_per_km": 0.46, + "max_i_ka": 0.21, + "type": "ol", + "q_mm2": 48, + "alpha": 0.00403 + }, + "70-AL1/11-ST1A 110.0": { + "c_nf_per_km": 8.4, + "r_ohm_per_km": 0.4132, + "x_ohm_per_km": 0.45, + "max_i_ka": 0.29, + "type": "ol", + "q_mm2": 70, + "alpha": 0.00403 + }, + "94-AL1/15-ST1A 110.0": { + "c_nf_per_km": 8.65, + "r_ohm_per_km": 0.306, + "x_ohm_per_km": 0.44, + "max_i_ka": 0.35, + "type": "ol", + "q_mm2": 94, + "alpha": 0.00403 + }, + "122-AL1/20-ST1A 110.0": { + "c_nf_per_km": 8.5, + "r_ohm_per_km": 0.2376, + "x_ohm_per_km": 0.43, + "max_i_ka": 0.41, + "type": "ol", + "q_mm2": 122, + "alpha": 0.00403 + }, + "149-AL1/24-ST1A 110.0": { + "c_nf_per_km": 8.75, + "r_ohm_per_km": 0.194, + "x_ohm_per_km": 0.41, + "max_i_ka": 0.47, + "type": "ol", + "q_mm2": 149, + "alpha": 0.00403 + }, + "184-AL1/30-ST1A 110.0": { + "c_nf_per_km": 8.8, + "r_ohm_per_km": 0.1571, + "x_ohm_per_km": 0.4, + "max_i_ka": 0.535, + "type": "ol", + "q_mm2": 184, + "alpha": 0.00403 + }, + "243-AL1/39-ST1A 110.0": { + "c_nf_per_km": 9, + "r_ohm_per_km": 0.1188, + "x_ohm_per_km": 0.39, + "max_i_ka": 0.645, + "type": "ol", + "q_mm2": 243, + "alpha": 0.00403 + }, + "305-AL1/39-ST1A 110.0": { + "c_nf_per_km": 9.2, + "r_ohm_per_km": 0.0949, + "x_ohm_per_km": 0.38, + "max_i_ka": 0.74, + "type": "ol", + "q_mm2": 305, + "alpha": 0.00403 + }, + "490-AL1/64-ST1A 110.0": { + "c_nf_per_km": 9.75, + "r_ohm_per_km": 0.059, + "x_ohm_per_km": 0.37, + "max_i_ka": 0.96, + "type": "ol", + "q_mm2": 490, + "alpha": 0.00403 + }, + "679-AL1/86-ST1A 110.0": { + "c_nf_per_km": 9.95, + "r_ohm_per_km": 0.042, + "x_ohm_per_km": 0.36, + "max_i_ka": 1.15, + "type": "ol", + "q_mm2": 679, + "alpha": 0.00403 + }, + "490-AL1/64-ST1A 220.0": { + "c_nf_per_km": 10, + "r_ohm_per_km": 0.059, + "x_ohm_per_km": 0.285, + "max_i_ka": 0.96, + "type": "ol", + "q_mm2": 490, + "alpha": 0.00403 + }, + "679-AL1/86-ST1A 220.0": { + "c_nf_per_km": 11.7, + "r_ohm_per_km": 0.042, + "x_ohm_per_km": 0.275, + "max_i_ka": 1.15, + "type": "ol", + "q_mm2": 679, + "alpha": 0.00403 + }, + "490-AL1/64-ST1A 380.0": { + "c_nf_per_km": 11, + "r_ohm_per_km": 0.059, + "x_ohm_per_km": 0.253, + "max_i_ka": 0.96, + "type": "ol", + "q_mm2": 490, + "alpha": 0.00403 + }, + "679-AL1/86-ST1A 380.0": { + "c_nf_per_km": 14.6, + "r_ohm_per_km": 0.042, + "x_ohm_per_km": 0.25, + "max_i_ka": 1.15, + "type": "ol", + "q_mm2": 679, + "alpha": 0.00403 + } + }, + "trafo": { + "160 MVA 380/110 kV": { + "i0_percent": 0.06, + "pfe_kw": 60, + "vkr_percent": 0.25, + "sn_mva": 160, + "vn_lv_kv": 110.0, + "vn_hv_kv": 380.0, + "vk_percent": 12.2, + "shift_degree": 0, + "vector_group": "Yy0", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -9, + "tap_max": 9, + "tap_step_degree": 0, + "tap_step_percent": 1.5, + "tap_phase_shifter": false + }, + "100 MVA 220/110 kV": { + "i0_percent": 0.06, + "pfe_kw": 55, + "vkr_percent": 0.26, + "sn_mva": 100, + "vn_lv_kv": 110.0, + "vn_hv_kv": 220.0, + "vk_percent": 12.0, + "shift_degree": 0, + "vector_group": "Yy0", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -9, + "tap_max": 9, + "tap_step_degree": 0, + "tap_step_percent": 1.5, + "tap_phase_shifter": false + }, + "63 MVA 110/20 kV": { + "i0_percent": 0.04, + "pfe_kw": 22, + "vkr_percent": 0.32, + "sn_mva": 63, + "vn_lv_kv": 20.0, + "vn_hv_kv": 110.0, + "vk_percent": 18, + "shift_degree": 150, + "vector_group": "YNd5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -9, + "tap_max": 9, + "tap_step_degree": 0, + "tap_step_percent": 1.5, + "tap_phase_shifter": false + }, + "40 MVA 110/20 kV": { + "i0_percent": 0.05, + "pfe_kw": 18, + "vkr_percent": 0.34, + "sn_mva": 40, + "vn_lv_kv": 20.0, + "vn_hv_kv": 110.0, + "vk_percent": 16.2, + "shift_degree": 150, + "vector_group": "YNd5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -9, + "tap_max": 9, + "tap_step_degree": 0, + "tap_step_percent": 1.5, + "tap_phase_shifter": false + }, + "25 MVA 110/20 kV": { + "i0_percent": 0.07, + "pfe_kw": 14, + "vkr_percent": 0.41, + "sn_mva": 25, + "vn_lv_kv": 20.0, + "vn_hv_kv": 110.0, + "vk_percent": 12, + "shift_degree": 150, + "vector_group": "YNd5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -9, + "tap_max": 9, + "tap_step_degree": 0, + "tap_step_percent": 1.5, + "tap_phase_shifter": false + }, + "63 MVA 110/10 kV": { + "sn_mva": 63, + "vn_hv_kv": 110, + "vn_lv_kv": 10, + "vk_percent": 18, + "vkr_percent": 0.32, + "pfe_kw": 22, + "i0_percent": 0.04, + "shift_degree": 150, + "vector_group": "YNd5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -9, + "tap_max": 9, + "tap_step_degree": 0, + "tap_step_percent": 1.5, + "tap_phase_shifter": false + }, + "40 MVA 110/10 kV": { + "sn_mva": 40, + "vn_hv_kv": 110, + "vn_lv_kv": 10, + "vk_percent": 16.2, + "vkr_percent": 0.34, + "pfe_kw": 18, + "i0_percent": 0.05, + "shift_degree": 150, + "vector_group": "YNd5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -9, + "tap_max": 9, + "tap_step_degree": 0, + "tap_step_percent": 1.5, + "tap_phase_shifter": false + }, + "25 MVA 110/10 kV": { + "sn_mva": 25, + "vn_hv_kv": 110, + "vn_lv_kv": 10, + "vk_percent": 12, + "vkr_percent": 0.41, + "pfe_kw": 14, + "i0_percent": 0.07, + "shift_degree": 150, + "vector_group": "YNd5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -9, + "tap_max": 9, + "tap_step_degree": 0, + "tap_step_percent": 1.5, + "tap_phase_shifter": false + }, + "0.25 MVA 20/0.4 kV": { + "sn_mva": 0.25, + "vn_hv_kv": 20, + "vn_lv_kv": 0.4, + "vk_percent": 6, + "vkr_percent": 1.44, + "pfe_kw": 0.8, + "i0_percent": 0.32, + "shift_degree": 150, + "vector_group": "Yzn5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -2, + "tap_max": 2, + "tap_step_degree": 0, + "tap_step_percent": 2.5, + "tap_phase_shifter": false + }, + "0.4 MVA 20/0.4 kV": { + "sn_mva": 0.4, + "vn_hv_kv": 20, + "vn_lv_kv": 0.4, + "vk_percent": 6, + "vkr_percent": 1.425, + "pfe_kw": 1.35, + "i0_percent": 0.3375, + "shift_degree": 150, + "vector_group": "Dyn5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -2, + "tap_max": 2, + "tap_step_degree": 0, + "tap_step_percent": 2.5, + "tap_phase_shifter": false + }, + "0.63 MVA 20/0.4 kV": { + "sn_mva": 0.63, + "vn_hv_kv": 20, + "vn_lv_kv": 0.4, + "vk_percent": 6, + "vkr_percent": 1.206, + "pfe_kw": 1.65, + "i0_percent": 0.2619, + "shift_degree": 150, + "vector_group": "Dyn5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -2, + "tap_max": 2, + "tap_step_degree": 0, + "tap_step_percent": 2.5, + "tap_phase_shifter": false + }, + "0.25 MVA 10/0.4 kV": { + "sn_mva": 0.25, + "vn_hv_kv": 10, + "vn_lv_kv": 0.4, + "vk_percent": 4, + "vkr_percent": 1.2, + "pfe_kw": 0.6, + "i0_percent": 0.24, + "shift_degree": 150, + "vector_group": "Dyn5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -2, + "tap_max": 2, + "tap_step_degree": 0, + "tap_step_percent": 2.5, + "tap_phase_shifter": false + }, + "0.4 MVA 10/0.4 kV": { + "sn_mva": 0.4, + "vn_hv_kv": 10, + "vn_lv_kv": 0.4, + "vk_percent": 4, + "vkr_percent": 1.325, + "pfe_kw": 0.95, + "i0_percent": 0.2375, + "shift_degree": 150, + "vector_group": "Dyn5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -2, + "tap_max": 2, + "tap_step_degree": 0, + "tap_step_percent": 2.5, + "tap_phase_shifter": false + }, + "0.63 MVA 10/0.4 kV": { + "sn_mva": 0.63, + "vn_hv_kv": 10, + "vn_lv_kv": 0.4, + "vk_percent": 4, + "vkr_percent": 1.0794, + "pfe_kw": 1.18, + "i0_percent": 0.1873, + "shift_degree": 150, + "vector_group": "Dyn5", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -2, + "tap_max": 2, + "tap_step_degree": 0, + "tap_step_percent": 2.5, + "tap_phase_shifter": false + } + }, + "trafo3w": { + "63/25/38 MVA 110/20/10 kV": { + "sn_hv_mva": 63, + "sn_mv_mva": 25, + "sn_lv_mva": 38, + "vn_hv_kv": 110, + "vn_mv_kv": 20, + "vn_lv_kv": 10, + "vk_hv_percent": 10.4, + "vk_mv_percent": 10.4, + "vk_lv_percent": 10.4, + "vkr_hv_percent": 0.28, + "vkr_mv_percent": 0.32, + "vkr_lv_percent": 0.35, + "pfe_kw": 35, + "i0_percent": 0.89, + "shift_mv_degree": 0, + "shift_lv_degree": 0, + "vector_group": "YN0yn0yn0", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -10, + "tap_max": 10, + "tap_step_percent": 1.2 + }, + "63/25/38 MVA 110/10/10 kV": { + "sn_hv_mva": 63, + "sn_mv_mva": 25, + "sn_lv_mva": 38, + "vn_hv_kv": 110, + "vn_mv_kv": 10, + "vn_lv_kv": 10, + "vk_hv_percent": 10.4, + "vk_mv_percent": 10.4, + "vk_lv_percent": 10.4, + "vkr_hv_percent": 0.28, + "vkr_mv_percent": 0.32, + "vkr_lv_percent": 0.35, + "pfe_kw": 35, + "i0_percent": 0.89, + "shift_mv_degree": 0, + "shift_lv_degree": 0, + "vector_group": "YN0yn0yn0", + "tap_side": "hv", + "tap_neutral": 0, + "tap_min": -10, + "tap_max": 10, + "tap_step_percent": 1.2 + } + } + }, + "res_bus": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"vm_pu\",\"va_degree\",\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "vm_pu": "float64", + "va_degree": "float64", + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_line": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_from_mw\",\"q_from_mvar\",\"p_to_mw\",\"q_to_mvar\",\"pl_mw\",\"ql_mvar\",\"i_from_ka\",\"i_to_ka\",\"i_ka\",\"vm_from_pu\",\"va_from_degree\",\"vm_to_pu\",\"va_to_degree\",\"loading_percent\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_from_mw": "float64", + "q_from_mvar": "float64", + "p_to_mw": "float64", + "q_to_mvar": "float64", + "pl_mw": "float64", + "ql_mvar": "float64", + "i_from_ka": "float64", + "i_to_ka": "float64", + "i_ka": "float64", + "vm_from_pu": "float64", + "va_from_degree": "float64", + "vm_to_pu": "float64", + "va_to_degree": "float64", + "loading_percent": "float64" + } + }, + "res_trafo": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_hv_mw\",\"q_hv_mvar\",\"p_lv_mw\",\"q_lv_mvar\",\"pl_mw\",\"ql_mvar\",\"i_hv_ka\",\"i_lv_ka\",\"vm_hv_pu\",\"va_hv_degree\",\"vm_lv_pu\",\"va_lv_degree\",\"loading_percent\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_hv_mw": "float64", + "q_hv_mvar": "float64", + "p_lv_mw": "float64", + "q_lv_mvar": "float64", + "pl_mw": "float64", + "ql_mvar": "float64", + "i_hv_ka": "float64", + "i_lv_ka": "float64", + "vm_hv_pu": "float64", + "va_hv_degree": "float64", + "vm_lv_pu": "float64", + "va_lv_degree": "float64", + "loading_percent": "float64" + } + }, + "res_trafo3w": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_hv_mw\",\"q_hv_mvar\",\"p_mv_mw\",\"q_mv_mvar\",\"p_lv_mw\",\"q_lv_mvar\",\"pl_mw\",\"ql_mvar\",\"i_hv_ka\",\"i_mv_ka\",\"i_lv_ka\",\"vm_hv_pu\",\"va_hv_degree\",\"vm_mv_pu\",\"va_mv_degree\",\"vm_lv_pu\",\"va_lv_degree\",\"va_internal_degree\",\"vm_internal_pu\",\"loading_percent\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_hv_mw": "float64", + "q_hv_mvar": "float64", + "p_mv_mw": "float64", + "q_mv_mvar": "float64", + "p_lv_mw": "float64", + "q_lv_mvar": "float64", + "pl_mw": "float64", + "ql_mvar": "float64", + "i_hv_ka": "float64", + "i_mv_ka": "float64", + "i_lv_ka": "float64", + "vm_hv_pu": "float64", + "va_hv_degree": "float64", + "vm_mv_pu": "float64", + "va_mv_degree": "float64", + "vm_lv_pu": "float64", + "va_lv_degree": "float64", + "va_internal_degree": "float64", + "vm_internal_pu": "float64", + "loading_percent": "float64" + } + }, + "res_impedance": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_from_mw\",\"q_from_mvar\",\"p_to_mw\",\"q_to_mvar\",\"pl_mw\",\"ql_mvar\",\"i_from_ka\",\"i_to_ka\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_from_mw": "float64", + "q_from_mvar": "float64", + "p_to_mw": "float64", + "q_to_mvar": "float64", + "pl_mw": "float64", + "ql_mvar": "float64", + "i_from_ka": "float64", + "i_to_ka": "float64" + } + }, + "res_ext_grid": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_load": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_motor": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_sgen": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_storage": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_shunt": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\",\"vm_pu\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64", + "vm_pu": "float64" + } + }, + "res_gen": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\",\"va_degree\",\"vm_pu\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64", + "va_degree": "float64", + "vm_pu": "float64" + } + }, + "res_ward": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\",\"vm_pu\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64", + "vm_pu": "float64" + } + }, + "res_xward": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\",\"vm_pu\",\"va_internal_degree\",\"vm_internal_pu\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64", + "vm_pu": "float64", + "va_internal_degree": "float64", + "vm_internal_pu": "float64" + } + }, + "res_dcline": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_from_mw\",\"q_from_mvar\",\"p_to_mw\",\"q_to_mvar\",\"pl_mw\",\"vm_from_pu\",\"va_from_degree\",\"vm_to_pu\",\"va_to_degree\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_from_mw": "float64", + "q_from_mvar": "float64", + "p_to_mw": "float64", + "q_to_mvar": "float64", + "pl_mw": "float64", + "vm_from_pu": "float64", + "va_from_degree": "float64", + "vm_to_pu": "float64", + "va_to_degree": "float64" + } + }, + "res_asymmetric_load": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_asymmetric_sgen": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_bus_est": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"vm_pu\",\"va_degree\",\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "vm_pu": "float64", + "va_degree": "float64", + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_line_est": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_from_mw\",\"q_from_mvar\",\"p_to_mw\",\"q_to_mvar\",\"pl_mw\",\"ql_mvar\",\"i_from_ka\",\"i_to_ka\",\"i_ka\",\"vm_from_pu\",\"va_from_degree\",\"vm_to_pu\",\"va_to_degree\",\"loading_percent\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_from_mw": "float64", + "q_from_mvar": "float64", + "p_to_mw": "float64", + "q_to_mvar": "float64", + "pl_mw": "float64", + "ql_mvar": "float64", + "i_from_ka": "float64", + "i_to_ka": "float64", + "i_ka": "float64", + "vm_from_pu": "float64", + "va_from_degree": "float64", + "vm_to_pu": "float64", + "va_to_degree": "float64", + "loading_percent": "float64" + } + }, + "res_trafo_est": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_hv_mw\",\"q_hv_mvar\",\"p_lv_mw\",\"q_lv_mvar\",\"pl_mw\",\"ql_mvar\",\"i_hv_ka\",\"i_lv_ka\",\"vm_hv_pu\",\"va_hv_degree\",\"vm_lv_pu\",\"va_lv_degree\",\"loading_percent\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_hv_mw": "float64", + "q_hv_mvar": "float64", + "p_lv_mw": "float64", + "q_lv_mvar": "float64", + "pl_mw": "float64", + "ql_mvar": "float64", + "i_hv_ka": "float64", + "i_lv_ka": "float64", + "vm_hv_pu": "float64", + "va_hv_degree": "float64", + "vm_lv_pu": "float64", + "va_lv_degree": "float64", + "loading_percent": "float64" + } + }, + "res_trafo3w_est": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_hv_mw\",\"q_hv_mvar\",\"p_mv_mw\",\"q_mv_mvar\",\"p_lv_mw\",\"q_lv_mvar\",\"pl_mw\",\"ql_mvar\",\"i_hv_ka\",\"i_mv_ka\",\"i_lv_ka\",\"vm_hv_pu\",\"va_hv_degree\",\"vm_mv_pu\",\"va_mv_degree\",\"vm_lv_pu\",\"va_lv_degree\",\"va_internal_degree\",\"vm_internal_pu\",\"loading_percent\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_hv_mw": "float64", + "q_hv_mvar": "float64", + "p_mv_mw": "float64", + "q_mv_mvar": "float64", + "p_lv_mw": "float64", + "q_lv_mvar": "float64", + "pl_mw": "float64", + "ql_mvar": "float64", + "i_hv_ka": "float64", + "i_mv_ka": "float64", + "i_lv_ka": "float64", + "vm_hv_pu": "float64", + "va_hv_degree": "float64", + "vm_mv_pu": "float64", + "va_mv_degree": "float64", + "vm_lv_pu": "float64", + "va_lv_degree": "float64", + "va_internal_degree": "float64", + "vm_internal_pu": "float64", + "loading_percent": "float64" + } + }, + "res_impedance_est": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_from_mw\",\"q_from_mvar\",\"p_to_mw\",\"q_to_mvar\",\"pl_mw\",\"ql_mvar\",\"i_from_ka\",\"i_to_ka\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_from_mw": "float64", + "q_from_mvar": "float64", + "p_to_mw": "float64", + "q_to_mvar": "float64", + "pl_mw": "float64", + "ql_mvar": "float64", + "i_from_ka": "float64", + "i_to_ka": "float64" + } + }, + "res_bus_sc": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[],\"index\":[],\"data\":[]}", + "orient": "split" + }, + "res_line_sc": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[],\"index\":[],\"data\":[]}", + "orient": "split" + }, + "res_trafo_sc": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[],\"index\":[],\"data\":[]}", + "orient": "split" + }, + "res_trafo3w_sc": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[],\"index\":[],\"data\":[]}", + "orient": "split" + }, + "res_ext_grid_sc": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[],\"index\":[],\"data\":[]}", + "orient": "split" + }, + "res_gen_sc": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[],\"index\":[],\"data\":[]}", + "orient": "split" + }, + "res_sgen_sc": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[],\"index\":[],\"data\":[]}", + "orient": "split" + }, + "res_bus_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"vm_a_pu\",\"va_a_degree\",\"vm_b_pu\",\"va_b_degree\",\"vm_c_pu\",\"va_c_degree\",\"p_a_mw\",\"q_a_mvar\",\"p_b_mw\",\"q_b_mvar\",\"p_c_mw\",\"q_c_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "vm_a_pu": "float64", + "va_a_degree": "float64", + "vm_b_pu": "float64", + "va_b_degree": "float64", + "vm_c_pu": "float64", + "va_c_degree": "float64", + "p_a_mw": "float64", + "q_a_mvar": "float64", + "p_b_mw": "float64", + "q_b_mvar": "float64", + "p_c_mw": "float64", + "q_c_mvar": "float64" + } + }, + "res_line_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_a_from_mw\",\"q_a_from_mvar\",\"p_b_from_mw\",\"q_b_from_mvar\",\"q_c_from_mvar\",\"p_a_to_mw\",\"q_a_to_mvar\",\"p_b_to_mw\",\"q_b_to_mvar\",\"p_c_to_mw\",\"q_c_to_mvar\",\"p_a_l_mw\",\"q_a_l_mvar\",\"p_b_l_mw\",\"q_b_l_mvar\",\"p_c_l_mw\",\"q_c_l_mvar\",\"i_a_from_ka\",\"i_a_to_ka\",\"i_b_from_ka\",\"i_b_to_ka\",\"i_c_from_ka\",\"i_c_to_ka\",\"i_a_ka\",\"i_b_ka\",\"i_c_ka\",\"i_n_from_ka\",\"i_n_to_ka\",\"i_n_ka\",\"loading_a_percent\",\"loading_b_percent\",\"loading_c_percent\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_a_from_mw": "float64", + "q_a_from_mvar": "float64", + "p_b_from_mw": "float64", + "q_b_from_mvar": "float64", + "q_c_from_mvar": "float64", + "p_a_to_mw": "float64", + "q_a_to_mvar": "float64", + "p_b_to_mw": "float64", + "q_b_to_mvar": "float64", + "p_c_to_mw": "float64", + "q_c_to_mvar": "float64", + "p_a_l_mw": "float64", + "q_a_l_mvar": "float64", + "p_b_l_mw": "float64", + "q_b_l_mvar": "float64", + "p_c_l_mw": "float64", + "q_c_l_mvar": "float64", + "i_a_from_ka": "float64", + "i_a_to_ka": "float64", + "i_b_from_ka": "float64", + "i_b_to_ka": "float64", + "i_c_from_ka": "float64", + "i_c_to_ka": "float64", + "i_a_ka": "float64", + "i_b_ka": "float64", + "i_c_ka": "float64", + "i_n_from_ka": "float64", + "i_n_to_ka": "float64", + "i_n_ka": "float64", + "loading_a_percent": "float64", + "loading_b_percent": "float64", + "loading_c_percent": "float64" + } + }, + "res_trafo_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_a_hv_mw\",\"q_a_hv_mvar\",\"p_b_hv_mw\",\"q_b_hv_mvar\",\"p_c_hv_mw\",\"q_c_hv_mvar\",\"p_a_lv_mw\",\"q_a_lv_mvar\",\"p_b_lv_mw\",\"q_b_lv_mvar\",\"p_c_lv_mw\",\"q_c_lv_mvar\",\"p_a_l_mw\",\"q_a_l_mvar\",\"p_b_l_mw\",\"q_b_l_mvar\",\"p_c_l_mw\",\"q_c_l_mvar\",\"i_a_hv_ka\",\"i_a_lv_ka\",\"i_b_hv_ka\",\"i_b_lv_ka\",\"i_c_hv_ka\",\"i_c_lv_ka\",\"loading_a_percent\",\"loading_b_percent\",\"loading_c_percent\",\"loading_percent\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_a_hv_mw": "float64", + "q_a_hv_mvar": "float64", + "p_b_hv_mw": "float64", + "q_b_hv_mvar": "float64", + "p_c_hv_mw": "float64", + "q_c_hv_mvar": "float64", + "p_a_lv_mw": "float64", + "q_a_lv_mvar": "float64", + "p_b_lv_mw": "float64", + "q_b_lv_mvar": "float64", + "p_c_lv_mw": "float64", + "q_c_lv_mvar": "float64", + "p_a_l_mw": "float64", + "q_a_l_mvar": "float64", + "p_b_l_mw": "float64", + "q_b_l_mvar": "float64", + "p_c_l_mw": "float64", + "q_c_l_mvar": "float64", + "i_a_hv_ka": "float64", + "i_a_lv_ka": "float64", + "i_b_hv_ka": "float64", + "i_b_lv_ka": "float64", + "i_c_hv_ka": "float64", + "i_c_lv_ka": "float64", + "loading_a_percent": "float64", + "loading_b_percent": "float64", + "loading_c_percent": "float64", + "loading_percent": "float64" + } + }, + "res_ext_grid_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_a_mw\",\"q_a_mvar\",\"p_b_mw\",\"q_b_mvar\",\"p_c_mw\",\"q_c_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_a_mw": "float64", + "q_a_mvar": "float64", + "p_b_mw": "float64", + "q_b_mvar": "float64", + "p_c_mw": "float64", + "q_c_mvar": "float64" + } + }, + "res_shunt_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[],\"index\":[],\"data\":[]}", + "orient": "split" + }, + "res_load_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_sgen_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_storage_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_mw\",\"q_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_mw": "float64", + "q_mvar": "float64" + } + }, + "res_asymmetric_load_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_a_mw\",\"q_a_mvar\",\"p_b_mw\",\"q_b_mvar\",\"p_c_mw\",\"q_c_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_a_mw": "float64", + "q_a_mvar": "float64", + "p_b_mw": "float64", + "q_b_mvar": "float64", + "p_c_mw": "float64", + "q_c_mvar": "float64" + } + }, + "res_asymmetric_sgen_3ph": { + "_module": "pandas.core.frame", + "_class": "DataFrame", + "_object": "{\"columns\":[\"p_a_mw\",\"q_a_mvar\",\"p_b_mw\",\"q_b_mvar\",\"p_c_mw\",\"q_c_mvar\"],\"index\":[],\"data\":[]}", + "orient": "split", + "dtype": { + "p_a_mw": "float64", + "q_a_mvar": "float64", + "p_b_mw": "float64", + "q_b_mvar": "float64", + "p_c_mw": "float64", + "q_c_mvar": "float64" + } + }, + "user_pf_options": {} + } +} \ No newline at end of file diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/grid_layout.json b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/grid_layout.json new file mode 100644 index 000000000..e1534647f --- /dev/null +++ b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/grid_layout.json @@ -0,0 +1,58 @@ +{ + "sub_0": [ + -280.0, + -81.0 + ], + "sub_1": [ + -100.0, + -270.0 + ], + "sub_2": [ + 366.0, + -270.0 + ], + "sub_3": [ + 366.0, + -54.0 + ], + "sub_4": [ + -64.0, + -54.0 + ], + "sub_5": [ + -64.0, + 54.0 + ], + "sub_6": [ + 450.0, + 0.0 + ], + "sub_7": [ + 550.0, + 0.0 + ], + "sub_8": [ + 326.0, + 54.0 + ], + "sub_9": [ + 222.0, + 108.0 + ], + "sub_10": [ + 79.0, + 162.0 + ], + "sub_11": [ + -170.0, + 270.0 + ], + "sub_12": [ + -64.0, + 270.0 + ], + "sub_13": [ + 222.0, + 216.0 + ] +} diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/prods_charac.csv b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/prods_charac.csv new file mode 100644 index 000000000..0c1159a06 --- /dev/null +++ b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/prods_charac.csv @@ -0,0 +1,7 @@ +Pmax,Pmin,name,type,bus,max_ramp_up,max_ramp_down,min_up_time,min_down_time,marginal_cost,shut_down_cost,start_cost,x,y,V +140,0.0,gen_1_0,nuclear,1,5,5,96,96,40,10,20,180,10,142.1 +120,0.0,gen_2_1,thermal,2,10,10,4,4,70,1,2,646,10,142.1 +70,0.0,gen_5_2,wind,5,0,0,0,0,0,0,0,216,334,22.0 +70,0.0,gen_5_3,solar,5,0,0,0,0,0,0,0,216,334,22.0 +40,0.0,gen_7_4,solar,7,0,0,0,0,0,0,0,718,280,13.2 +100,0.0,gen_0_5,hydro,0,15,15,4,4,70,1,2,0,199,142.1 diff --git a/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/storage_units_charac.csv b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/storage_units_charac.csv new file mode 100644 index 000000000..0bb5168fb --- /dev/null +++ b/grid2op/data_test/educ_case14_storage_diffgrid_diff_obs/storage_units_charac.csv @@ -0,0 +1,3 @@ +Emax,Emin,name,type,max_p_prod,max_p_absorb,marginal_cost,power_loss,charging_efficiency,discharging_efficiency +15,0,storage_5_0,battery,5,5,20,0.1,0.95,1 +7,0,storage_7_1,battery,10,10,20,0.1,1,0.9 diff --git a/grid2op/gym_compat/box_gym_obsspace.py b/grid2op/gym_compat/box_gym_obsspace.py index edb979383..d0aecf761 100644 --- a/grid2op/gym_compat/box_gym_obsspace.py +++ b/grid2op/gym_compat/box_gym_obsspace.py @@ -618,10 +618,10 @@ def __init__( if subtract is None: subtract = {} - self._subtract = subtract + self._subtract = subtract.copy() if divide is None: divide = {} - self._divide = divide + self._divide = divide.copy() # handle the "functional" part self._template_obs = ob_sp._template_obj.copy() diff --git a/grid2op/tests/test_act_as_serializable_dict.py b/grid2op/tests/test_act_as_serializable_dict.py index d36be3208..479f8e7f8 100644 --- a/grid2op/tests/test_act_as_serializable_dict.py +++ b/grid2op/tests/test_act_as_serializable_dict.py @@ -317,7 +317,7 @@ def test_all_at_once(self): ] } ) - act += self.helper_action({"change_line_status": [l_id for l_id in [2, 4, 5]]}) + act += self.helper_action({"change_line_status": [l_id for l_id in [6, 7, 8]]}) act += self.helper_action( { "set_bus": [ diff --git a/grid2op/tests/test_issue_446.py b/grid2op/tests/test_issue_446.py new file mode 100644 index 000000000..d9aad58f7 --- /dev/null +++ b/grid2op/tests/test_issue_446.py @@ -0,0 +1,45 @@ +# Copyright (c) 2023, RTE (https://www.rte-france.com) +# See AUTHORS.txt +# This Source Code Form is subject to the terms of the Mozilla Public License, version 2.0. +# If a copy of the Mozilla Public License, version 2.0 was not distributed with this file, +# you can obtain one at http://mozilla.org/MPL/2.0/. +# SPDX-License-Identifier: MPL-2.0 +# This file is part of Grid2Op, Grid2Op a testbed platform to model sequential decision making in power systems. + + +import grid2op +from grid2op.gym_compat import BoxGymActSpace, BoxGymObsSpace +import numpy as np +import unittest + + +class Issue446Tester(unittest.TestCase): + def test_box_action_space(self): + # We considers only redispatching actions + env = grid2op.make("l2rpn_case14_sandbox", test=True) + + divide = {"hour_of_day": np.ones(1)} + subtract = {"hour_of_day": np.zeros(1)} + + gym_observation_space_1 = BoxGymObsSpace(env.observation_space, + attr_to_keep=["curtailment_mw", "hour_of_day"], + divide = divide, + subtract = subtract + ) + + gym_observation_space_2 = BoxGymObsSpace(env.observation_space.copy(), + attr_to_keep=["curtailment_mw", "hour_of_day"], + divide = divide, + subtract = subtract + ) + + gym_observation_space_1.normalize_attr("curtailment_mw") + + assert "curtailment_mw" in gym_observation_space_1._divide + assert "curtailment_mw" not in gym_observation_space_2._divide + assert "curtailment_mw" in gym_observation_space_1._subtract + assert "curtailment_mw" not in gym_observation_space_2._subtract + + +if __name__ == "__main__": + unittest.main() \ No newline at end of file diff --git a/grid2op/tests/test_issue_511.py b/grid2op/tests/test_issue_511.py index 8499042a6..0303c32ac 100644 --- a/grid2op/tests/test_issue_511.py +++ b/grid2op/tests/test_issue_511.py @@ -21,6 +21,9 @@ def setUp(self) -> None: test=True ) return super().setUp() + + def tearDown(self): + self.env.close() def test_issue_set_bus(self): act = { diff --git a/grid2op/tests/test_issue_527.py b/grid2op/tests/test_issue_527.py new file mode 100644 index 000000000..3b7a6e381 --- /dev/null +++ b/grid2op/tests/test_issue_527.py @@ -0,0 +1,44 @@ + +# Copyright (c) 2023, RTE (https://www.rte-france.com) +# See AUTHORS.txt +# This Source Code Form is subject to the terms of the Mozilla Public License, version 2.0. +# If a copy of the Mozilla Public License, version 2.0 was not distributed with this file, +# you can obtain one at http://mozilla.org/MPL/2.0/. +# SPDX-License-Identifier: MPL-2.0 +# This file is part of Grid2Op, Grid2Op a testbed platform to model sequential decision making in power systems. + +import grid2op +import warnings +import unittest +import pdb + + +class Issue527Tester(unittest.TestCase): + def setUp(self) -> None: + with warnings.catch_warnings(): + warnings.filterwarnings("ignore") + self.env = grid2op.make( + "l2rpn_case14_sandbox", + test=True + ) + self.env.seed(0) + return super().setUp() + + def tearDown(self): + self.env.close() + + def test_action_space_sampling(self) -> None: + obs = self.env.reset() + for ind in range(1000): + act = self.env.action_space.sample() + act_dict = act.as_serializable_dict() + self.env.action_space(act_dict) + + def test_do_nothing_act_weird(self) -> None: + obs = self.env.reset() + self.env.action_space({"change_bus": {}}) + self.env.action_space({"set_bus": {}}) + + +if __name__ == '__main__': + unittest.main() diff --git a/grid2op/tests/test_issue_sim2real_storage.py b/grid2op/tests/test_issue_sim2real_storage.py index 4d32a1e5f..64d167cb1 100644 --- a/grid2op/tests/test_issue_sim2real_storage.py +++ b/grid2op/tests/test_issue_sim2real_storage.py @@ -15,12 +15,16 @@ from lightsim2grid import LightSimBackend -class _AuxTestSim2realStorage: +class _AuxTestSim2realStorage: + def get_name(self): + return "educ_case14_storage_diffgrid" + def setUp(self) -> None: - print(f"\n\n\nfor {type(self.get_backend())}") + # print(f"\n\n\nfor {type(self.get_backend())}") with warnings.catch_warnings(): warnings.filterwarnings("ignore") - self.env = grid2op.make(os.path.join(PATH_DATA_TEST, "educ_case14_storage_diffgrid"), + # self.env = grid2op.make(os.path.join(PATH_DATA_TEST, "educ_case14_storage_diffgrid"), + self.env = grid2op.make(os.path.join(PATH_DATA_TEST, self.get_name()), test=True, backend=self.get_backend()) self.env.seed(0) @@ -32,6 +36,15 @@ def tearDown(self) -> None: def test_reset(self): obs = self.env.reset() + assert obs.storage_Emax is not None + assert obs.storage_max_p_prod is not None + assert obs.n_storage == 2 + + def test_simulate(self): + obs = self.env.reset() + sim_obs, *_ = obs.simulate(self.env.action_space()) + assert sim_obs.storage_Emax is not None + assert sim_obs.storage_max_p_prod is not None assert obs.n_storage == 2 @@ -43,6 +56,24 @@ def get_backend(self): class TestSim2realStoragePP(_AuxTestSim2realStorage, unittest.TestCase): def get_backend(self): return PandaPowerBackend() + + +class TestSim2realStorageLSDiffObs(_AuxTestSim2realStorage, unittest.TestCase): + """add this test for https://github.com/rte-france/Grid2Op/issues/518""" + def get_backend(self): + return LightSimBackend() + + def get_name(self): + return "educ_case14_storage_diffgrid_diff_obs" + + +class TestSim2realStoragePPDiffObs(_AuxTestSim2realStorage, unittest.TestCase): + """add this test for https://github.com/rte-france/Grid2Op/issues/518""" + def get_backend(self): + return PandaPowerBackend() + + def get_name(self): + return "educ_case14_storage_diffgrid_diff_obs" if __name__ == '__main__': diff --git a/grid2op/tests/test_notebooks_getting_started.py b/grid2op/tests/test_notebooks_getting_started.py new file mode 100644 index 000000000..1441595c5 --- /dev/null +++ b/grid2op/tests/test_notebooks_getting_started.py @@ -0,0 +1,269 @@ +# Copyright (c) 2019-2023, RTE (https://www.rte-france.com) +# See AUTHORS.txt +# This Source Code Form is subject to the terms of the Mozilla Public License, version 2.0. +# If a copy of the Mozilla Public License, version 2.0 was not distributed with this file, +# you can obtain one at http://mozilla.org/MPL/2.0/. +# SPDX-License-Identifier: MPL-2.0 +# This file is part of Grid2Op, Grid2Op a testbed platform to model sequential decision making in power systems. + +import shutil +import copy +import os +import unittest +import time +import warnings +import pdb +import subprocess +import sys + +try: + # Import error : Jupyter is migrating its paths to use standard platformdirs + # given by the platformdirs library. To remove this warning and + # see the appropriate new directories, set the environment variable + # `JUPYTER_PLATFORM_DIRS=1` and then run `jupyter --paths`. + # The use of platformdirs will be the default in `jupyter_core` v6 + os.environ["JUPYTER_PLATFORM_DIRS"] = "1" + subprocess.run([f"{sys.executable}", "-m", "jupyter", "--paths"], capture_output=True, env=os.environ) + # the above 2 lines are to fix the above error + + import nbformat + from nbconvert.preprocessors import ExecutePreprocessor, CellExecutionError + CAN_COMPUTE = None +except Exception as exc_: + CAN_COMPUTE = exc_ + print(f"Import error : {exc_}") + +from grid2op.tests.helper_path_test import PATH_DATA_TEST + +NOTEBOOK_PATHS = os.path.abspath(os.path.join(PATH_DATA_TEST, "../../getting_started")) +VERBOSE_TIMER = True + + +def delete_all(folder): + """ + Delete all the files in a folder recursively. + + Parameters + ---------- + folder: ``str`` + The folder in which we delete everything + + Returns + ------- + None + """ + for filename in os.listdir(folder): + file_path = os.path.join(folder, filename) + try: + if os.path.isfile(file_path) or os.path.islink(file_path): + os.unlink(file_path) + elif os.path.isdir(file_path): + shutil.rmtree(file_path) + except Exception as e: + print("Failed to delete %s. Reason: %s" % (file_path, e)) + + +def export_all_notebook(folder_in): + """ + + Parameters + ---------- + folder_in: ``str`` + The folder in which we look for ipynb files + + folder_out: ``str`` + The folder in which we save the py file. + + Returns + ------- + res: ``list`` + Return the list of notebooks names + + """ + res = [] + for filename in os.listdir(folder_in): + if os.path.splitext(filename)[1] == ".ipynb": + notebook_filename = os.path.join(folder_in, filename) + res.append(notebook_filename) + return res + + +class RAII_tf_log: + def __init__(self): + self.previous = None + if "TF_CPP_MIN_LOG_LEVEL" in os.environ: + self.previous = copy.deepcopy(os.environ["TF_CPP_MIN_LOG_LEVEL"]) + os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3" + + def __del__(self): + if self.previous is not None: + os.environ["TF_CPP_MIN_LOG_LEVEL"] = self.previous + + +# notebook names are hard coded because if i change them, i need also to change the +# readme and the documentation + + +class RAII_Timer: + """ + class to have an approximation of the runtime of the notebook. + This is a rough approximation to reduce time spent in certain notebooks and should not be + used for another purpose. + """ + + def __init__(self, str_=""): + self._time = time.perf_counter() + self.str_ = str_ + + def __del__(self): + if VERBOSE_TIMER: + print( + f"Execution time for {self.str_}: {time.perf_counter() - self._time:.3f} s" + ) + + +class TestNotebooks(unittest.TestCase): + def _aux_funct_notebook(self, notebook_filename): + assert os.path.exists(notebook_filename), f"{notebook_filename} do not exists!" + with open(notebook_filename) as f: + nb = nbformat.read(f, as_version=4) + try: + ep = ExecutePreprocessor(timeout=60, store_widget_state=True) + try: + ep.preprocess(nb, {"metadata": {"path": NOTEBOOK_PATHS}}) + except CellExecutionError as exc_: + raise + except Exception as exc_: + # error with tqdm progress bar i believe + pass + except CellExecutionError as exc_: + raise + except Exception: + pass + + def _check_for_baselines(self): + try: + import l2rpn_baselines + except ImportError as exc_: + self.skipTest("l2rpn baseline is not available") + + def test_notebook0_1(self): + if CAN_COMPUTE is not None: + self.skipTest(f"{CAN_COMPUTE}") + timer = RAII_Timer("test_notebook0_1") + notebook_filename = os.path.join(NOTEBOOK_PATHS, "00_SmallExample.ipynb") + self._aux_funct_notebook(notebook_filename) + + def test_notebook1(self): + if CAN_COMPUTE is not None: + self.skipTest(f"{CAN_COMPUTE}") + return # takes 80s and is useless i think, as it tests only basics things + timer = RAII_Timer("test_notebook1") + notebook_filename = os.path.join(NOTEBOOK_PATHS, "01_Grid2opFramework.ipynb") + self._aux_funct_notebook(notebook_filename) + + def test_notebook2(self): + if CAN_COMPUTE is not None: + self.skipTest(f"{CAN_COMPUTE}") + timer = RAII_Timer("test_notebook2") + notebook_filename = os.path.join(NOTEBOOK_PATHS, "02_Observation.ipynb") + self._aux_funct_notebook(notebook_filename) + + def test_notebook3(self): + if CAN_COMPUTE is not None: + self.skipTest(f"{CAN_COMPUTE}") + timer = RAII_Timer("test_notebook3") + notebook_filename = os.path.join(NOTEBOOK_PATHS, "03_Action.ipynb") + self._aux_funct_notebook(notebook_filename) + + def test_notebook4(self): + if CAN_COMPUTE is not None: + self.skipTest(f"{CAN_COMPUTE}") + self._check_for_baselines() + raii_ = RAII_tf_log() + timer = RAII_Timer("test_notebook4") + notebook_filename = os.path.join(NOTEBOOK_PATHS, "04_TrainingAnAgent.ipynb") + self._aux_funct_notebook(notebook_filename) + + def test_notebook5(self): + if CAN_COMPUTE is not None: + self.skipTest(f"{CAN_COMPUTE}") + timer = RAII_Timer("test_notebook5") + notebook_filename = os.path.join(NOTEBOOK_PATHS, "05_StudyYourAgent.ipynb") + self._aux_funct_notebook(notebook_filename) + + def test_notebook6(self): + if CAN_COMPUTE is not None: + self.skipTest(f"{CAN_COMPUTE}") + timer = RAII_Timer("test_notebook6") + notebook_filename = os.path.join( + NOTEBOOK_PATHS, "06_Redispatching_Curtailment.ipynb" + ) + self._aux_funct_notebook(notebook_filename) + + def test_notebook7(self): + if CAN_COMPUTE is not None: + self.skipTest(f"{CAN_COMPUTE}") + self._check_for_baselines() + raii_ = RAII_tf_log() + timer = RAII_Timer("test_notebook7") + notebook_filename = os.path.join(NOTEBOOK_PATHS, "07_MultiEnv.ipynb") + self._aux_funct_notebook(notebook_filename) + + def test_notebook8(self): + if CAN_COMPUTE is not None: + self.skipTest(f"{CAN_COMPUTE}") + + # display notebook, might not be super useful to test it in the unit test (saves another 1-2 minutes) + return + timer = RAII_Timer("test_notebook8") + notebook_filename = os.path.join( + NOTEBOOK_PATHS, "08_PlottingCapabilities.ipynb" + ) + self._aux_funct_notebook(notebook_filename) + + def test_notebook9(self): + if CAN_COMPUTE is not None: + self.skipTest(f"{CAN_COMPUTE}") + return # test the opponent and the maintenance, not much there but takes 80s so... not a lot to do + timer = RAII_Timer("test_notebook9") + notebook_filename = os.path.join( + NOTEBOOK_PATHS, "09_EnvironmentModifications.ipynb" + ) + self._aux_funct_notebook(notebook_filename) + + def test_notebook10(self): + if CAN_COMPUTE is not None: + self.skipTest(f"{CAN_COMPUTE}") + timer = RAII_Timer("test_notebook10") + notebook_filename = os.path.join(NOTEBOOK_PATHS, "10_StorageUnits.ipynb") + self._aux_funct_notebook(notebook_filename) + + def test_notebook_aub(self): + if CAN_COMPUTE is not None: + self.skipTest(f"{CAN_COMPUTE}") + return + raii_ = RAII_tf_log() + timer = RAII_Timer("test_notebook_aub") + notebook_filename = os.path.join( + NOTEBOOK_PATHS, + "AUB_EECE699_20201103_ReinforcementLearningApplication.ipynb", + ) + self._aux_funct_notebook(notebook_filename) + + def test_notebook_ieeebda(self): + if CAN_COMPUTE is not None: + self.skipTest(f"{CAN_COMPUTE}") + + # this test takes 3 mins alone, for a really small benefit, so i skip it for sake of time + return + self._check_for_baselines() + timer = RAII_Timer("test_notebook_ieeebda") + notebook_filename = os.path.join( + NOTEBOOK_PATHS, "IEEE BDA Tutorial Series.ipynb" + ) + self._aux_funct_notebook(notebook_filename) + + +if __name__ == "__main__": + unittest.main() \ No newline at end of file diff --git a/setup.py b/setup.py index ca25c64d6..857e3e685 100644 --- a/setup.py +++ b/setup.py @@ -71,7 +71,10 @@ def my_test_suite(): "test": ["lightsim2grid", "numba", "gym>=0.26", - "gymnasium" + "gymnasium", + "stable-baselines3>=2.0", + "nbconvert", + "jinja2" ], "chronix2grid": [ "ChroniX2Grid>=1.2.0.post1"