|
6 | 6 | "metadata": { |
7 | 7 | "collapsed": true, |
8 | 8 | "ExecuteTime": { |
9 | | - "end_time": "2025-10-23T13:08:02.617292Z", |
10 | | - "start_time": "2025-10-23T13:08:02.205177Z" |
| 9 | + "end_time": "2025-10-23T13:36:38.417376Z", |
| 10 | + "start_time": "2025-10-23T13:36:38.034604Z" |
11 | 11 | } |
12 | 12 | }, |
13 | 13 | "source": "from python_workflow_definition.jobflow import load_workflow_json", |
|
26 | 26 | { |
27 | 27 | "metadata": { |
28 | 28 | "ExecuteTime": { |
29 | | - "end_time": "2025-10-23T13:08:03.884311Z", |
30 | | - "start_time": "2025-10-23T13:08:03.635773Z" |
| 29 | + "end_time": "2025-10-23T13:36:38.677677Z", |
| 30 | + "start_time": "2025-10-23T13:36:38.425149Z" |
31 | 31 | } |
32 | 32 | }, |
33 | 33 | "cell_type": "code", |
34 | | - "source": "load_workflow_json(\"main.pwd.json\")", |
| 34 | + "source": [ |
| 35 | + "flow=load_workflow_json(\"main.pwd.json\")\n", |
| 36 | + "flow.as_dict()" |
| 37 | + ], |
35 | 38 | "id": "7e1707c47e14fbcc", |
36 | 39 | "outputs": [ |
37 | 40 | { |
38 | | - "ename": "ModuleNotFoundError", |
39 | | - "evalue": "No module named 'prod_div'", |
| 41 | + "name": "stdout", |
| 42 | + "output_type": "stream", |
| 43 | + "text": [ |
| 44 | + "{0: <function get_prod_and_div at 0x71ffcc1d22a0>, 1: <function get_sum at 0x71ffcc1d2340>, 2: <function get_square at 0x71ffcc1d23e0>, 3: 1, 4: 2}\n" |
| 45 | + ] |
| 46 | + }, |
| 47 | + { |
| 48 | + "ename": "UnboundLocalError", |
| 49 | + "evalue": "cannot access local variable 'sources_handles_dict' where it is not associated with a value", |
40 | 50 | "output_type": "error", |
41 | 51 | "traceback": [ |
42 | 52 | "\u001B[31m---------------------------------------------------------------------------\u001B[39m", |
43 | | - "\u001B[31mModuleNotFoundError\u001B[39m Traceback (most recent call last)", |
44 | | - "\u001B[36mCell\u001B[39m\u001B[36m \u001B[39m\u001B[32mIn[2]\u001B[39m\u001B[32m, line 1\u001B[39m\n\u001B[32m----> \u001B[39m\u001B[32m1\u001B[39m \u001B[43mload_workflow_json\u001B[49m\u001B[43m(\u001B[49m\u001B[33;43m\"\u001B[39;49m\u001B[33;43mmain.pwd.json\u001B[39;49m\u001B[33;43m\"\u001B[39;49m\u001B[43m)\u001B[49m\n", |
45 | | - "\u001B[36mFile \u001B[39m\u001B[32m/smb/jgeorge/hpc-user/PycharmProjects/2025_PWD_Extension_nested_flows/python-workflow-definition/src/python_workflow_definition/jobflow.py:301\u001B[39m, in \u001B[36mload_workflow_json\u001B[39m\u001B[34m(file_name)\u001B[39m\n\u001B[32m 299\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(v, \u001B[38;5;28mstr\u001B[39m) \u001B[38;5;129;01mand\u001B[39;00m \u001B[33m\"\u001B[39m\u001B[33m.\u001B[39m\u001B[33m\"\u001B[39m \u001B[38;5;129;01min\u001B[39;00m v:\n\u001B[32m 300\u001B[39m p, m = v.rsplit(\u001B[33m\"\u001B[39m\u001B[33m.\u001B[39m\u001B[33m\"\u001B[39m, \u001B[32m1\u001B[39m)\n\u001B[32m--> \u001B[39m\u001B[32m301\u001B[39m mod = \u001B[43mimport_module\u001B[49m\u001B[43m(\u001B[49m\u001B[43mp\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 302\u001B[39m nodes_new_dict[\u001B[38;5;28mint\u001B[39m(k)] = \u001B[38;5;28mgetattr\u001B[39m(mod, m)\n\u001B[32m 303\u001B[39m \u001B[38;5;28;01melse\u001B[39;00m:\n", |
46 | | - "\u001B[36mFile \u001B[39m\u001B[32m~/miniconda3/envs/2025_PWD_Extension_nested_flows/lib/python3.11/importlib/__init__.py:126\u001B[39m, in \u001B[36mimport_module\u001B[39m\u001B[34m(name, package)\u001B[39m\n\u001B[32m 124\u001B[39m \u001B[38;5;28;01mbreak\u001B[39;00m\n\u001B[32m 125\u001B[39m level += \u001B[32m1\u001B[39m\n\u001B[32m--> \u001B[39m\u001B[32m126\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43m_bootstrap\u001B[49m\u001B[43m.\u001B[49m\u001B[43m_gcd_import\u001B[49m\u001B[43m(\u001B[49m\u001B[43mname\u001B[49m\u001B[43m[\u001B[49m\u001B[43mlevel\u001B[49m\u001B[43m:\u001B[49m\u001B[43m]\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mpackage\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mlevel\u001B[49m\u001B[43m)\u001B[49m\n", |
47 | | - "\u001B[36mFile \u001B[39m\u001B[32m<frozen importlib._bootstrap>:1204\u001B[39m, in \u001B[36m_gcd_import\u001B[39m\u001B[34m(name, package, level)\u001B[39m\n", |
48 | | - "\u001B[36mFile \u001B[39m\u001B[32m<frozen importlib._bootstrap>:1176\u001B[39m, in \u001B[36m_find_and_load\u001B[39m\u001B[34m(name, import_)\u001B[39m\n", |
49 | | - "\u001B[36mFile \u001B[39m\u001B[32m<frozen importlib._bootstrap>:1140\u001B[39m, in \u001B[36m_find_and_load_unlocked\u001B[39m\u001B[34m(name, import_)\u001B[39m\n", |
50 | | - "\u001B[31mModuleNotFoundError\u001B[39m: No module named 'prod_div'" |
| 53 | + "\u001B[31mUnboundLocalError\u001B[39m Traceback (most recent call last)", |
| 54 | + "\u001B[36mCell\u001B[39m\u001B[36m \u001B[39m\u001B[32mIn[2]\u001B[39m\u001B[32m, line 1\u001B[39m\n\u001B[32m----> \u001B[39m\u001B[32m1\u001B[39m flow=\u001B[43mload_workflow_json\u001B[49m\u001B[43m(\u001B[49m\u001B[33;43m\"\u001B[39;49m\u001B[33;43mmain.pwd.json\u001B[39;49m\u001B[33;43m\"\u001B[39;49m\u001B[43m)\u001B[49m\n\u001B[32m 2\u001B[39m flow.as_dict()\n", |
| 55 | + "\u001B[36mFile \u001B[39m\u001B[32m/smb/jgeorge/hpc-user/PycharmProjects/2025_PWD_Extension_nested_flows/python-workflow-definition/src/python_workflow_definition/jobflow.py:279\u001B[39m, in \u001B[36mload_workflow_json\u001B[39m\u001B[34m(file_name)\u001B[39m\n\u001B[32m 278\u001B[39m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34mload_workflow_json\u001B[39m(file_name: \u001B[38;5;28mstr\u001B[39m) -> Flow:\n\u001B[32m--> \u001B[39m\u001B[32m279\u001B[39m nodes_new_dict, input_dict, new_total_dict, sources_handles_dict = \u001B[43mrecursive_load_workflow_json\u001B[49m\u001B[43m(\u001B[49m\u001B[43mfile_name\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 280\u001B[39m task_lst = _get_workflow(\n\u001B[32m 281\u001B[39m nodes_dict=nodes_new_dict,\n\u001B[32m 282\u001B[39m input_dict=input_dict,\n\u001B[32m 283\u001B[39m total_dict=new_total_dict,\n\u001B[32m 284\u001B[39m source_handles_dict=source_handles_dict,\n\u001B[32m 285\u001B[39m )\n\u001B[32m 286\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m Flow(task_lst)\n", |
| 56 | + "\u001B[36mFile \u001B[39m\u001B[32m/smb/jgeorge/hpc-user/PycharmProjects/2025_PWD_Extension_nested_flows/python-workflow-definition/src/python_workflow_definition/jobflow.py:313\u001B[39m, in \u001B[36mrecursive_load_workflow_json\u001B[39m\u001B[34m(file_name)\u001B[39m\n\u001B[32m 311\u001B[39m \u001B[38;5;28;01mfor\u001B[39;00m k, v \u001B[38;5;129;01min\u001B[39;00m convert_nodes_list_to_dict(nodes_list=content[NODES_LABEL]).items():\n\u001B[32m 312\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(v, \u001B[38;5;28mstr\u001B[39m) \u001B[38;5;129;01mand\u001B[39;00m \u001B[33m\"\u001B[39m\u001B[33m.json\u001B[39m\u001B[33m\"\u001B[39m \u001B[38;5;129;01min\u001B[39;00m v:\n\u001B[32m--> \u001B[39m\u001B[32m313\u001B[39m nodes_new_dict, input_dict, new_total_dict, sources_handles_dict = \u001B[43mrecursive_load_workflow_json\u001B[49m\u001B[43m(\u001B[49m\u001B[43mfile_name\u001B[49m\u001B[43m=\u001B[49m\u001B[43mv\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 314\u001B[39m nodes_new_dict[\u001B[38;5;28mint\u001B[39m(k)] = _get_workflow(nodes_new_dict, input_dict, new_total_dict, sources_handles_dict)\n\u001B[32m 315\u001B[39m \u001B[38;5;28;01melif\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(v, \u001B[38;5;28mstr\u001B[39m) \u001B[38;5;129;01mand\u001B[39;00m \u001B[33m\"\u001B[39m\u001B[33m.\u001B[39m\u001B[33m\"\u001B[39m \u001B[38;5;129;01min\u001B[39;00m v:\n", |
| 57 | + "\u001B[36mFile \u001B[39m\u001B[32m/smb/jgeorge/hpc-user/PycharmProjects/2025_PWD_Extension_nested_flows/python-workflow-definition/src/python_workflow_definition/jobflow.py:331\u001B[39m, in \u001B[36mrecursive_load_workflow_json\u001B[39m\u001B[34m(file_name)\u001B[39m\n\u001B[32m 328\u001B[39m input_dict = _get_input_dict(nodes_dict=nodes_new_dict)\n\u001B[32m 329\u001B[39m new_total_dict = _resort_total_lst(total_dict=total_dict, nodes_dict=nodes_new_dict)\n\u001B[32m--> \u001B[39m\u001B[32m331\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m nodes_new_dict, input_dict, new_total_dict, \u001B[43msources_handles_dict\u001B[49m\n", |
| 58 | + "\u001B[31mUnboundLocalError\u001B[39m: cannot access local variable 'sources_handles_dict' where it is not associated with a value" |
51 | 59 | ] |
52 | 60 | } |
53 | 61 | ], |
54 | 62 | "execution_count": 2 |
55 | 63 | }, |
56 | 64 | { |
57 | | - "metadata": {}, |
| 65 | + "metadata": { |
| 66 | + "ExecuteTime": { |
| 67 | + "end_time": "2025-10-23T13:36:38.681890549Z", |
| 68 | + "start_time": "2025-10-23T13:23:37.712387Z" |
| 69 | + } |
| 70 | + }, |
58 | 71 | "cell_type": "code", |
59 | | - "outputs": [], |
60 | | - "execution_count": null, |
61 | | - "source": "", |
62 | | - "id": "ae57f67080d3a26c" |
| 72 | + "source": [ |
| 73 | + "from jobflow import run_locally\n", |
| 74 | + "run_locally(flow)" |
| 75 | + ], |
| 76 | + "id": "ae57f67080d3a26c", |
| 77 | + "outputs": [ |
| 78 | + { |
| 79 | + "name": "stdout", |
| 80 | + "output_type": "stream", |
| 81 | + "text": [ |
| 82 | + "2025-10-23 15:23:37,721 INFO Started executing jobs locally\n" |
| 83 | + ] |
| 84 | + }, |
| 85 | + { |
| 86 | + "ename": "ValueError", |
| 87 | + "evalue": "cannot apply compose_all to an empty list", |
| 88 | + "output_type": "error", |
| 89 | + "traceback": [ |
| 90 | + "\u001B[31m---------------------------------------------------------------------------\u001B[39m", |
| 91 | + "\u001B[31mValueError\u001B[39m Traceback (most recent call last)", |
| 92 | + "\u001B[36mCell\u001B[39m\u001B[36m \u001B[39m\u001B[32mIn[4]\u001B[39m\u001B[32m, line 2\u001B[39m\n\u001B[32m 1\u001B[39m \u001B[38;5;28;01mfrom\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34;01mjobflow\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;28;01mimport\u001B[39;00m run_locally\n\u001B[32m----> \u001B[39m\u001B[32m2\u001B[39m \u001B[43mrun_locally\u001B[49m\u001B[43m(\u001B[49m\u001B[43mflow\u001B[49m\u001B[43m)\u001B[49m\n", |
| 93 | + "\u001B[36mFile \u001B[39m\u001B[32m~/miniconda3/envs/2025_PWD_Extension_nested_flows/lib/python3.11/site-packages/jobflow/managers/local.py:180\u001B[39m, in \u001B[36mrun_locally\u001B[39m\u001B[34m(flow, log, store, create_folders, root_dir, ensure_success, allow_external_references, raise_immediately)\u001B[39m\n\u001B[32m 177\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m encountered_bad_response\n\u001B[32m 179\u001B[39m logger.info(\u001B[33m\"\u001B[39m\u001B[33mStarted executing jobs locally\u001B[39m\u001B[33m\"\u001B[39m)\n\u001B[32m--> \u001B[39m\u001B[32m180\u001B[39m finished_successfully = \u001B[43m_run\u001B[49m\u001B[43m(\u001B[49m\u001B[43mflow\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 181\u001B[39m logger.info(\u001B[33m\"\u001B[39m\u001B[33mFinished executing jobs locally\u001B[39m\u001B[33m\"\u001B[39m)\n\u001B[32m 183\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m ensure_success \u001B[38;5;129;01mand\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m finished_successfully:\n", |
| 94 | + "\u001B[36mFile \u001B[39m\u001B[32m~/miniconda3/envs/2025_PWD_Extension_nested_flows/lib/python3.11/site-packages/jobflow/managers/local.py:166\u001B[39m, in \u001B[36mrun_locally.<locals>._run\u001B[39m\u001B[34m(root_flow)\u001B[39m\n\u001B[32m 164\u001B[39m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34m_run\u001B[39m(root_flow):\n\u001B[32m 165\u001B[39m encountered_bad_response = \u001B[38;5;28;01mFalse\u001B[39;00m\n\u001B[32m--> \u001B[39m\u001B[32m166\u001B[39m \u001B[43m \u001B[49m\u001B[38;5;28;43;01mfor\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mjob\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mparents\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;129;43;01min\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mroot_flow\u001B[49m\u001B[43m.\u001B[49m\u001B[43miterflow\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\u001B[43m:\u001B[49m\n\u001B[32m 167\u001B[39m \u001B[43m \u001B[49m\u001B[43mjob_dir\u001B[49m\u001B[43m \u001B[49m\u001B[43m=\u001B[49m\u001B[43m \u001B[49m\u001B[43m_get_job_dir\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 168\u001B[39m \u001B[43m \u001B[49m\u001B[38;5;28;43;01mwith\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mcd\u001B[49m\u001B[43m(\u001B[49m\u001B[43mjob_dir\u001B[49m\u001B[43m)\u001B[49m\u001B[43m:\u001B[49m\n", |
| 95 | + "\u001B[36mFile \u001B[39m\u001B[32m~/miniconda3/envs/2025_PWD_Extension_nested_flows/lib/python3.11/site-packages/jobflow/core/flow.py:423\u001B[39m, in \u001B[36mFlow.iterflow\u001B[39m\u001B[34m(self)\u001B[39m\n\u001B[32m 419\u001B[39m \u001B[38;5;28;01mfrom\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34;01mnetworkx\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;28;01mimport\u001B[39;00m is_directed_acyclic_graph\n\u001B[32m 421\u001B[39m \u001B[38;5;28;01mfrom\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34;01mjobflow\u001B[39;00m\u001B[34;01m.\u001B[39;00m\u001B[34;01mutils\u001B[39;00m\u001B[34;01m.\u001B[39;00m\u001B[34;01mgraph\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;28;01mimport\u001B[39;00m itergraph\n\u001B[32m--> \u001B[39m\u001B[32m423\u001B[39m graph = \u001B[38;5;28;43mself\u001B[39;49m\u001B[43m.\u001B[49m\u001B[43mgraph\u001B[49m\n\u001B[32m 425\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m is_directed_acyclic_graph(graph):\n\u001B[32m 426\u001B[39m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\n\u001B[32m 427\u001B[39m \u001B[33m\"\u001B[39m\u001B[33mJob connectivity contains cycles therefore job execution order \u001B[39m\u001B[33m\"\u001B[39m\n\u001B[32m 428\u001B[39m \u001B[33m\"\u001B[39m\u001B[33mcannot be determined.\u001B[39m\u001B[33m\"\u001B[39m\n\u001B[32m 429\u001B[39m )\n", |
| 96 | + "\u001B[36mFile \u001B[39m\u001B[32m~/miniconda3/envs/2025_PWD_Extension_nested_flows/lib/python3.11/site-packages/jobflow/core/flow.py:348\u001B[39m, in \u001B[36mFlow.graph\u001B[39m\u001B[34m(self)\u001B[39m\n\u001B[32m 344\u001B[39m \u001B[38;5;28;01mfrom\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34;01mitertools\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;28;01mimport\u001B[39;00m product\n\u001B[32m 346\u001B[39m \u001B[38;5;28;01mimport\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34;01mnetworkx\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;28;01mas\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34;01mnx\u001B[39;00m\n\u001B[32m--> \u001B[39m\u001B[32m348\u001B[39m graph = \u001B[43mnx\u001B[49m\u001B[43m.\u001B[49m\u001B[43mcompose_all\u001B[49m\u001B[43m(\u001B[49m\u001B[43m[\u001B[49m\u001B[43mjob\u001B[49m\u001B[43m.\u001B[49m\u001B[43mgraph\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;28;43;01mfor\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mjob\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;129;43;01min\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[43m]\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 350\u001B[39m \u001B[38;5;28;01mfor\u001B[39;00m node \u001B[38;5;129;01min\u001B[39;00m graph:\n\u001B[32m 351\u001B[39m node_props = graph.nodes[node]\n", |
| 97 | + "\u001B[36mFile \u001B[39m\u001B[32m~/miniconda3/envs/2025_PWD_Extension_nested_flows/lib/python3.11/site-packages/networkx/utils/decorators.py:784\u001B[39m, in \u001B[36margmap.__call__.<locals>.func\u001B[39m\u001B[34m(_argmap__wrapper, *args, **kwargs)\u001B[39m\n\u001B[32m 783\u001B[39m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34mfunc\u001B[39m(*args, __wrapper=\u001B[38;5;28;01mNone\u001B[39;00m, **kwargs):\n\u001B[32m--> \u001B[39m\u001B[32m784\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43margmap\u001B[49m\u001B[43m.\u001B[49m\u001B[43m_lazy_compile\u001B[49m\u001B[43m(\u001B[49m\u001B[43m__wrapper\u001B[49m\u001B[43m)\u001B[49m\u001B[43m(\u001B[49m\u001B[43m*\u001B[49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m*\u001B[49m\u001B[43m*\u001B[49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n", |
| 98 | + "\u001B[36mFile \u001B[39m\u001B[32m<class 'networkx.utils.decorators.argmap'> compilation 4:3\u001B[39m, in \u001B[36margmap_compose_all_1\u001B[39m\u001B[34m(graphs, backend, **backend_kwargs)\u001B[39m\n\u001B[32m 1\u001B[39m \u001B[38;5;28;01mimport\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34;01mbz2\u001B[39;00m\n\u001B[32m 2\u001B[39m \u001B[38;5;28;01mimport\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34;01mcollections\u001B[39;00m\n\u001B[32m----> \u001B[39m\u001B[32m3\u001B[39m \u001B[38;5;28;01mimport\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34;01mgzip\u001B[39;00m\n\u001B[32m 4\u001B[39m \u001B[38;5;28;01mimport\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34;01minspect\u001B[39;00m\n\u001B[32m 5\u001B[39m \u001B[38;5;28;01mimport\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34;01mitertools\u001B[39;00m\n", |
| 99 | + "\u001B[36mFile \u001B[39m\u001B[32m~/miniconda3/envs/2025_PWD_Extension_nested_flows/lib/python3.11/site-packages/networkx/utils/backends.py:535\u001B[39m, in \u001B[36m_dispatchable._call_if_no_backends_installed\u001B[39m\u001B[34m(self, backend, *args, **kwargs)\u001B[39m\n\u001B[32m 529\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m \u001B[33m\"\u001B[39m\u001B[33mnetworkx\u001B[39m\u001B[33m\"\u001B[39m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mself\u001B[39m.backends:\n\u001B[32m 530\u001B[39m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mNotImplementedError\u001B[39;00m(\n\u001B[32m 531\u001B[39m \u001B[33mf\u001B[39m\u001B[33m\"\u001B[39m\u001B[33m'\u001B[39m\u001B[38;5;132;01m{\u001B[39;00m\u001B[38;5;28mself\u001B[39m.name\u001B[38;5;132;01m}\u001B[39;00m\u001B[33m'\u001B[39m\u001B[33m is not implemented by \u001B[39m\u001B[33m'\u001B[39m\u001B[33mnetworkx\u001B[39m\u001B[33m'\u001B[39m\u001B[33m backend. \u001B[39m\u001B[33m\"\u001B[39m\n\u001B[32m 532\u001B[39m \u001B[33m\"\u001B[39m\u001B[33mThis function is included in NetworkX as an API to dispatch to \u001B[39m\u001B[33m\"\u001B[39m\n\u001B[32m 533\u001B[39m \u001B[33m\"\u001B[39m\u001B[33mother backends.\u001B[39m\u001B[33m\"\u001B[39m\n\u001B[32m 534\u001B[39m )\n\u001B[32m--> \u001B[39m\u001B[32m535\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28;43mself\u001B[39;49m\u001B[43m.\u001B[49m\u001B[43morig_func\u001B[49m\u001B[43m(\u001B[49m\u001B[43m*\u001B[49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m*\u001B[49m\u001B[43m*\u001B[49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n", |
| 100 | + "\u001B[36mFile \u001B[39m\u001B[32m~/miniconda3/envs/2025_PWD_Extension_nested_flows/lib/python3.11/site-packages/networkx/algorithms/operators/all.py:228\u001B[39m, in \u001B[36mcompose_all\u001B[39m\u001B[34m(graphs)\u001B[39m\n\u001B[32m 223\u001B[39m R.add_edges_from(\n\u001B[32m 224\u001B[39m G.edges(keys=\u001B[38;5;28;01mTrue\u001B[39;00m, data=\u001B[38;5;28;01mTrue\u001B[39;00m) \u001B[38;5;28;01mif\u001B[39;00m G.is_multigraph() \u001B[38;5;28;01melse\u001B[39;00m G.edges(data=\u001B[38;5;28;01mTrue\u001B[39;00m)\n\u001B[32m 225\u001B[39m )\n\u001B[32m 227\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m R \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m:\n\u001B[32m--> \u001B[39m\u001B[32m228\u001B[39m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\u001B[33m\"\u001B[39m\u001B[33mcannot apply compose_all to an empty list\u001B[39m\u001B[33m\"\u001B[39m)\n\u001B[32m 230\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m R\n", |
| 101 | + "\u001B[31mValueError\u001B[39m: cannot apply compose_all to an empty list" |
| 102 | + ] |
| 103 | + } |
| 104 | + ], |
| 105 | + "execution_count": 4 |
63 | 106 | } |
64 | 107 | ], |
65 | 108 | "metadata": { |
|
0 commit comments