|
235 | 235 | "print(pgm_combined_schema(DatasetType.input, ComponentType.asym_load))" |
236 | 236 | ] |
237 | 237 | }, |
| 238 | + { |
| 239 | + "cell_type": "code", |
| 240 | + "execution_count": 26, |
| 241 | + "metadata": {}, |
| 242 | + "outputs": [ |
| 243 | + { |
| 244 | + "data": { |
| 245 | + "text/plain": [ |
| 246 | + "pyarrow.RecordBatch\n", |
| 247 | + "id: int32\n", |
| 248 | + "u_rated: double\n", |
| 249 | + "----\n", |
| 250 | + "id: [1,2,3]\n", |
| 251 | + "u_rated: [10500,10500,10500]" |
| 252 | + ] |
| 253 | + }, |
| 254 | + "execution_count": 26, |
| 255 | + "metadata": {}, |
| 256 | + "output_type": "execute_result" |
| 257 | + } |
| 258 | + ], |
| 259 | + "source": [ |
| 260 | + "#TODO Decisions: Create from schema\n", |
| 261 | + "pa.record_batch(\n", |
| 262 | + " {\n", |
| 263 | + " \"id\": [1, 2, 3],\n", |
| 264 | + " \"u_rated\": [10500.0, 10500.0, 10500.0],\n", |
| 265 | + " },\n", |
| 266 | + " schema=pgm_schema(DatasetType.input, ComponentType.node),\n", |
| 267 | + ")" |
| 268 | + ] |
| 269 | + }, |
238 | 270 | { |
239 | 271 | "cell_type": "markdown", |
240 | 272 | "metadata": {}, |
|
248 | 280 | }, |
249 | 281 | { |
250 | 282 | "cell_type": "code", |
251 | | - "execution_count": 5, |
| 283 | + "execution_count": 6, |
252 | 284 | "metadata": {}, |
253 | 285 | "outputs": [ |
254 | 286 | { |
|
262 | 294 | "u_rated: [10500,10500,10500]" |
263 | 295 | ] |
264 | 296 | }, |
265 | | - "execution_count": 5, |
| 297 | + "execution_count": 6, |
266 | 298 | "metadata": {}, |
267 | 299 | "output_type": "execute_result" |
268 | 300 | } |
|
354 | 386 | }, |
355 | 387 | { |
356 | 388 | "cell_type": "code", |
357 | | - "execution_count": 6, |
| 389 | + "execution_count": 7, |
358 | 390 | "metadata": {}, |
359 | 391 | "outputs": [ |
360 | 392 | { |
|
364 | 396 | " dtype={'names': ['id', 'u_rated'], 'formats': ['<i4', '<f8'], 'offsets': [0, 8], 'itemsize': 16, 'aligned': True})" |
365 | 397 | ] |
366 | 398 | }, |
367 | | - "execution_count": 6, |
| 399 | + "execution_count": 7, |
368 | 400 | "metadata": {}, |
369 | 401 | "output_type": "execute_result" |
370 | 402 | } |
|
396 | 428 | }, |
397 | 429 | { |
398 | 430 | "cell_type": "code", |
399 | | - "execution_count": 7, |
| 431 | + "execution_count": 8, |
400 | 432 | "metadata": {}, |
401 | 433 | "outputs": [ |
402 | 434 | { |
|
405 | 437 | "{'id': array([1, 2, 3]), 'u_rated': array([10500., 10500., 10500.])}" |
406 | 438 | ] |
407 | 439 | }, |
408 | | - "execution_count": 7, |
| 440 | + "execution_count": 8, |
409 | 441 | "metadata": {}, |
410 | 442 | "output_type": "execute_result" |
411 | 443 | } |
|
442 | 474 | }, |
443 | 475 | { |
444 | 476 | "cell_type": "code", |
445 | | - "execution_count": 8, |
| 477 | + "execution_count": 9, |
446 | 478 | "metadata": {}, |
447 | 479 | "outputs": [ |
448 | 480 | { |
|
474 | 506 | " 'q_specified': array([0.5, 1.5])}}" |
475 | 507 | ] |
476 | 508 | }, |
477 | | - "execution_count": 8, |
| 509 | + "execution_count": 9, |
478 | 510 | "metadata": {}, |
479 | 511 | "output_type": "execute_result" |
480 | 512 | } |
|
492 | 524 | }, |
493 | 525 | { |
494 | 526 | "cell_type": "code", |
495 | | - "execution_count": 9, |
| 527 | + "execution_count": 10, |
496 | 528 | "metadata": {}, |
497 | 529 | "outputs": [], |
498 | 530 | "source": [ |
|
513 | 545 | }, |
514 | 546 | { |
515 | 547 | "cell_type": "code", |
516 | | - "execution_count": 10, |
| 548 | + "execution_count": 11, |
517 | 549 | "metadata": {}, |
518 | 550 | "outputs": [ |
519 | 551 | { |
|
620 | 652 | }, |
621 | 653 | { |
622 | 654 | "cell_type": "code", |
623 | | - "execution_count": 11, |
| 655 | + "execution_count": 12, |
624 | 656 | "metadata": {}, |
625 | 657 | "outputs": [ |
626 | 658 | { |
|
644 | 676 | "q: [-3299418.661306348,-0.5000000701801947,-1.4999998507078594]" |
645 | 677 | ] |
646 | 678 | }, |
647 | | - "execution_count": 11, |
| 679 | + "execution_count": 12, |
648 | 680 | "metadata": {}, |
649 | 681 | "output_type": "execute_result" |
650 | 682 | } |
|
679 | 711 | }, |
680 | 712 | { |
681 | 713 | "cell_type": "code", |
682 | | - "execution_count": 12, |
| 714 | + "execution_count": 13, |
683 | 715 | "metadata": {}, |
684 | 716 | "outputs": [ |
685 | 717 | { |
|
716 | 748 | "q_specified_c: [0.1,1500]" |
717 | 749 | ] |
718 | 750 | }, |
719 | | - "execution_count": 12, |
| 751 | + "execution_count": 13, |
720 | 752 | "metadata": {}, |
721 | 753 | "output_type": "execute_result" |
722 | 754 | } |
|
766 | 798 | }, |
767 | 799 | { |
768 | 800 | "cell_type": "code", |
769 | | - "execution_count": 13, |
| 801 | + "execution_count": 14, |
770 | 802 | "metadata": {}, |
771 | 803 | "outputs": [ |
772 | 804 | { |
|
777 | 809 | " dtype={'names': ['id', 'node', 'status', 'type', 'p_specified', 'q_specified'], 'formats': ['<i4', '<i4', 'i1', 'i1', ('<f8', (3,)), ('<f8', (3,))], 'offsets': [0, 4, 8, 9, 16, 40], 'itemsize': 64, 'aligned': True})" |
778 | 810 | ] |
779 | 811 | }, |
780 | | - "execution_count": 13, |
| 812 | + "execution_count": 14, |
781 | 813 | "metadata": {}, |
782 | 814 | "output_type": "execute_result" |
783 | 815 | } |
|
826 | 858 | }, |
827 | 859 | { |
828 | 860 | "cell_type": "code", |
829 | | - "execution_count": 14, |
| 861 | + "execution_count": 15, |
830 | 862 | "metadata": {}, |
831 | 863 | "outputs": [ |
832 | 864 | { |
|
842 | 874 | " [1.5e+00, 2.5e+00, 1.5e+03]])}" |
843 | 875 | ] |
844 | 876 | }, |
845 | | - "execution_count": 14, |
| 877 | + "execution_count": 15, |
846 | 878 | "metadata": {}, |
847 | 879 | "output_type": "execute_result" |
848 | 880 | } |
|
897 | 929 | }, |
898 | 930 | { |
899 | 931 | "cell_type": "code", |
900 | | - "execution_count": 15, |
| 932 | + "execution_count": 27, |
901 | 933 | "metadata": {}, |
902 | 934 | "outputs": [ |
903 | 935 | { |
|
928 | 960 | "q_specified: [[0.5,1500,0.1],[1.5,2.5,1500]]" |
929 | 961 | ] |
930 | 962 | }, |
931 | | - "execution_count": 15, |
| 963 | + "execution_count": 27, |
932 | 964 | "metadata": {}, |
933 | 965 | "output_type": "execute_result" |
934 | 966 | } |
935 | 967 | ], |
936 | 968 | "source": [ |
| 969 | + "# TODO Decisions: Asymmetric attributes should be fixed list array or individual phases or both?\n", |
| 970 | + "\n", |
| 971 | + "\n", |
937 | 972 | "asym_load_input_dtype = initialize_array(\"input\", \"asym_load\", 0).dtype\n", |
938 | 973 | "print(\"asym_load:\", asym_load_input_dtype)\n", |
939 | 974 | "# asym_float_type = pa.struct([(\"a\", pa.float64()), (\"b\", pa.float64()), (\"c\", pa.float64())])\n", |
|
955 | 990 | }, |
956 | 991 | { |
957 | 992 | "cell_type": "code", |
958 | | - "execution_count": 16, |
| 993 | + "execution_count": 17, |
959 | 994 | "metadata": {}, |
960 | 995 | "outputs": [], |
961 | 996 | "source": [ |
|
972 | 1007 | }, |
973 | 1008 | { |
974 | 1009 | "cell_type": "code", |
975 | | - "execution_count": 17, |
| 1010 | + "execution_count": 18, |
976 | 1011 | "metadata": {}, |
977 | 1012 | "outputs": [ |
978 | 1013 | { |
|
988 | 1023 | " [1.5e+00, 2.5e+00, 1.5e+03]])}" |
989 | 1024 | ] |
990 | 1025 | }, |
991 | | - "execution_count": 17, |
| 1026 | + "execution_count": 18, |
992 | 1027 | "metadata": {}, |
993 | 1028 | "output_type": "execute_result" |
994 | 1029 | } |
|
1036 | 1071 | }, |
1037 | 1072 | { |
1038 | 1073 | "cell_type": "code", |
1039 | | - "execution_count": 18, |
| 1074 | + "execution_count": 19, |
1040 | 1075 | "metadata": {}, |
1041 | 1076 | "outputs": [ |
1042 | 1077 | { |
|
1095 | 1130 | "2 -0.004338 -2.098733 2.090057" |
1096 | 1131 | ] |
1097 | 1132 | }, |
1098 | | - "execution_count": 18, |
| 1133 | + "execution_count": 19, |
1099 | 1134 | "metadata": {}, |
1100 | 1135 | "output_type": "execute_result" |
1101 | 1136 | } |
|
1129 | 1164 | }, |
1130 | 1165 | { |
1131 | 1166 | "cell_type": "code", |
1132 | | - "execution_count": 19, |
| 1167 | + "execution_count": 20, |
1133 | 1168 | "metadata": {}, |
1134 | 1169 | "outputs": [ |
1135 | 1170 | { |
|
1167 | 1202 | "..." |
1168 | 1203 | ] |
1169 | 1204 | }, |
1170 | | - "execution_count": 19, |
| 1205 | + "execution_count": 20, |
1171 | 1206 | "metadata": {}, |
1172 | 1207 | "output_type": "execute_result" |
1173 | 1208 | } |
|
1206 | 1241 | }, |
1207 | 1242 | { |
1208 | 1243 | "cell_type": "code", |
1209 | | - "execution_count": 20, |
| 1244 | + "execution_count": 21, |
| 1245 | + "metadata": {}, |
| 1246 | + "outputs": [ |
| 1247 | + { |
| 1248 | + "data": { |
| 1249 | + "text/plain": [ |
| 1250 | + "pyarrow.Table\n", |
| 1251 | + "id: int32\n", |
| 1252 | + "energized: int8\n", |
| 1253 | + "u_pu_a: double\n", |
| 1254 | + "u_pu_b: double\n", |
| 1255 | + "u_pu_c: double\n", |
| 1256 | + "u_a: double\n", |
| 1257 | + "u_b: double\n", |
| 1258 | + "u_c: double\n", |
| 1259 | + "u_angle_a: double\n", |
| 1260 | + "u_angle_b: double\n", |
| 1261 | + "u_angle_c: double\n", |
| 1262 | + "p_a: double\n", |
| 1263 | + "p_b: double\n", |
| 1264 | + "p_c: double\n", |
| 1265 | + "q_a: double\n", |
| 1266 | + "q_b: double\n", |
| 1267 | + "q_c: double\n", |
| 1268 | + "----\n", |
| 1269 | + "id: [[1,2,3]]\n", |
| 1270 | + "energized: [[1,1,1]]\n", |
| 1271 | + "u_pu_a: [[1.0003248257977395,1.0028803762176164,1.0041143008174032]]\n", |
| 1272 | + "u_pu_b: [[1.0003243769486854,1.0028710993140406,1.0041033583077175]]\n", |
| 1273 | + "u_pu_c: [[1.00032436416241,1.0028730789021523,1.0041004935738533]]\n", |
| 1274 | + "u_a: [[6064.146978239599,6079.639179329456,6087.119449677845]]\n", |
| 1275 | + "u_b: [[6064.144257236815,6079.582941090301,6087.053114238262]]\n", |
| 1276 | + "u_c: [[6064.1441797241405,6079.594941705457,6087.035747712152]]\n", |
| 1277 | + "u_angle_a: [[-0.00006651848125694397,-0.0029298831864832267,-0.004337685507209373]]\n", |
| 1278 | + "u_angle_b: [[-2.094461573665813,-2.0973219974462594,-2.098732840554144]]\n", |
| 1279 | + "..." |
| 1280 | + ] |
| 1281 | + }, |
| 1282 | + "execution_count": 21, |
| 1283 | + "metadata": {}, |
| 1284 | + "output_type": "execute_result" |
| 1285 | + } |
| 1286 | + ], |
| 1287 | + "source": [ |
| 1288 | + "def numpy_columnar_to_arrow_combined(data: np.ndarray) -> pa.lib.table:\n", |
| 1289 | + " \"\"\"Convert NumPy data to Arrow data.\"\"\"\n", |
| 1290 | + " simple_data_types = []\n", |
| 1291 | + " multi_value_data_types = []\n", |
| 1292 | + "\n", |
| 1293 | + " for name, (dtype, _) in data.dtype.fields.items():\n", |
| 1294 | + " if len(dtype.shape) == 0:\n", |
| 1295 | + " simple_data_types.append(name)\n", |
| 1296 | + " else:\n", |
| 1297 | + " multi_value_data_types.append(name)\n", |
| 1298 | + "\n", |
| 1299 | + " result = pa.table(pd.DataFrame(data[simple_data_types]))\n", |
| 1300 | + "\n", |
| 1301 | + " phases = (\"a\", \"b\", \"c\")\n", |
| 1302 | + " for name in multi_value_data_types:\n", |
| 1303 | + " column = data[name]\n", |
| 1304 | + "\n", |
| 1305 | + " assert column.shape[1] == len(phases), \"Asymmetric data has 3 phase output\"\n", |
| 1306 | + "\n", |
| 1307 | + " for phase_index, phase in enumerate(phases):\n", |
| 1308 | + " sub_column = column[:, phase_index]\n", |
| 1309 | + " result = result.append_column(f\"{name}_{phase}\", [pd.Series(sub_column)])\n", |
| 1310 | + "\n", |
| 1311 | + " return result\n", |
| 1312 | + "\n", |
| 1313 | + "\n", |
| 1314 | + "pa_asym_node_result = numpy_to_arrow(asym_result[\"node\"])\n", |
| 1315 | + "\n", |
| 1316 | + "pa_asym_node_result" |
| 1317 | + ] |
| 1318 | + }, |
| 1319 | + { |
| 1320 | + "cell_type": "code", |
| 1321 | + "execution_count": 22, |
1210 | 1322 | "metadata": {}, |
1211 | 1323 | "outputs": [], |
1212 | 1324 | "source": [ |
|
0 commit comments