From d775a153457e2de36fbdab55ff715f0a6d268210 Mon Sep 17 00:00:00 2001 From: muelleram Date: Thu, 5 Mar 2026 09:26:26 +0100 Subject: [PATCH 1/5] case study excel file --- .../example_electric_vehicle_standalone.xlsx | Bin 0 -> 10009 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 notebooks/data/example_electric_vehicle_standalone.xlsx diff --git a/notebooks/data/example_electric_vehicle_standalone.xlsx b/notebooks/data/example_electric_vehicle_standalone.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..bf40a05f991c9f517d34cf013876e5de54f79e45 GIT binary patch literal 10009 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 F{{s}Fa+Ux9 literal 0 HcmV?d00001 From 9cb6aaf65f6168e9ff95ac6530b99ec960022179 Mon Sep 17 00:00:00 2001 From: muelleram Date: Thu, 5 Mar 2026 09:26:57 +0100 Subject: [PATCH 2/5] excel import --- .../example_electric_vehicle_standalone.ipynb | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/notebooks/example_electric_vehicle_standalone.ipynb b/notebooks/example_electric_vehicle_standalone.ipynb index 36112d8..0fafe23 100644 --- a/notebooks/example_electric_vehicle_standalone.ipynb +++ b/notebooks/example_electric_vehicle_standalone.ipynb @@ -495,6 +495,61 @@ " bd.Database(db).process()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Importing from Excel\n", + "\n", + "As an alternative to generating your temporal foreground system in code as above, you can also import the case study processes from a BW25-excel file.\n", + "You need `bw2io > 0.9.14`, which supports the import of `TemporalDistributions` in the ExcelImporter or CSVImporter. You can consult the sample excel file under notebooks/data for valid input formats for the TDs.\n", + "\n", + "Please make sure you created and processed the biosphere and the background databases for 2020, 2030 and 2040 using the code above." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# if \"foreground\" in bd.databases:\n", + "# del bd.databases[\"foreground\"] # to make sure we import the foreground from scratch from the excel file\n", + "\n", + "# import bw2io as bi\n", + "\n", + "# ei = bi.ExcelImporter(\"data/example_electric_vehicle_standalone.xlsx\") \n", + "# ei.apply_strategies()\n", + "# ei.match_database(\"background_2020\", fields=[\"name\", \"reference product\"])\n", + "# ei.match_database(\"biosphere\", fields=[\"name\", \"categories\"])\n", + "\n", + "# ei.statistics() #0 unique unlinked edges means that all foreground exchanges are linked and we can successfully import the database.\n", + "\n", + "# ei.write_database()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "let's check if the ExcelImporter imported the `TemporalDistributions` correctly:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# driving = bd.get_node(database=\"foreground\", name=\"driving an electric vehicle\")\n", + "# ev_to_driving = next(exc for exc in driving.technosphere() if exc.input[\"name\"] == \"production of an electric vehicle\")\n", + "\n", + "# print(ev_to_driving[\"temporal_distribution\"].date) # original resolution was timedelta64[M], which gets converted to seconds\n", + "# print(ev_to_driving[\"temporal_distribution\"].amount)\n", + "\n", + "# ev_to_driving[\"temporal_distribution\"].graph(resolution=\"M\")" + ] + }, { "cell_type": "markdown", "metadata": {}, From de890ef9a595566ecb6eb81bd0217909881bc26d Mon Sep 17 00:00:00 2001 From: Arthur Jakobs Date: Fri, 13 Mar 2026 22:02:18 +0100 Subject: [PATCH 3/5] add new format to pass temporal distributions in an excel file --- .../example_electric_vehicle_standalone.xlsx | Bin 10009 -> 12259 bytes .../example_electric_vehicle_standalone.ipynb | 138 ++++++++++++++++-- 2 files changed, 126 insertions(+), 12 deletions(-) diff --git a/notebooks/data/example_electric_vehicle_standalone.xlsx b/notebooks/data/example_electric_vehicle_standalone.xlsx index bf40a05f991c9f517d34cf013876e5de54f79e45..b2e40bf6cb5b97b34123fa514d0c2ff4cfba03fc 100644 GIT binary patch delta 7791 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 a{{JzMWP=|wQ{VytK)}G$Y7EZ5wEqQj1wrWm delta 5607 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 diff --git a/notebooks/example_electric_vehicle_standalone.ipynb b/notebooks/example_electric_vehicle_standalone.ipynb index 0fafe23..1b87add 100644 --- a/notebooks/example_electric_vehicle_standalone.ipynb +++ b/notebooks/example_electric_vehicle_standalone.ipynb @@ -27,7 +27,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -38,7 +38,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -48,9 +48,31 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1/1 [00:00<00:00, 2241.74it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[2m22:00:42+0100\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mVacuuming database \u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], "source": [ "biosphere = bd.Database(\"biosphere\")\n", "biosphere.register()\n", @@ -92,7 +114,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -487,7 +509,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -511,14 +533,77 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Extracted 1 worksheets in 0.00 seconds\n", + "Applying strategy: csv_restore_tuples\n", + "Applying strategy: csv_restore_booleans\n", + "Applying strategy: csv_numerize\n", + "Applying strategy: csv_drop_unknown\n", + "Applying strategy: csv_restore_temporal_distributions\n", + "Couldn't apply strategy csv_restore_temporal_distributions:\n", + "\tInvalid timedelta resolution 'y' in exchange used electric vehicle\n", + "Applying strategy: csv_add_missing_exchanges_section\n", + "Applying strategy: normalize_units\n", + "Applying strategy: strip_biosphere_exc_locations\n", + "Applying strategy: set_code_by_activity_hash\n", + "Applying strategy: link_iterable_by_fields\n", + "Applying strategy: assign_only_product_as_production\n", + "Applying strategy: link_technosphere_by_activity_hash\n", + "Applying strategy: drop_falsey_uncertainty_fields_but_keep_zeros\n", + "Applying strategy: convert_uncertainty_types_to_integers\n", + "Applying strategy: convert_activity_parameters_to_list\n", + "Applied 15 strategies in 0.01 seconds\n", + "Applying strategy: link_iterable_by_fields\n", + "Applying strategy: link_iterable_by_fields\n", + "Graph statistics for `foreground` importer:\n", + "3 graph nodes:\n", + "\tNone: 3\n", + "12 graph edges:\n", + "\ttechnosphere: 9\n", + "\tproduction: 3\n", + "12 edges to the following databases:\n", + "\tbackground_2020: 7\n", + "\tforeground: 5\n", + "0 unique unlinked edges (0 total):\n", + "\n", + "\n", + "\u001b[2m22:00:52+0100\u001b[0m [\u001b[33m\u001b[1mwarning \u001b[0m] \u001b[1mNot able to determine geocollections for all datasets. This database is not ready for regionalization.\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 3/3 [00:00<00:00, 4784.38it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[2m22:00:52+0100\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mVacuuming database \u001b[0m\n", + "Created database: foreground\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], "source": [ "# if \"foreground\" in bd.databases:\n", "# del bd.databases[\"foreground\"] # to make sure we import the foreground from scratch from the excel file\n", "\n", "# import bw2io as bi\n", "\n", - "# ei = bi.ExcelImporter(\"data/example_electric_vehicle_standalone.xlsx\") \n", + "# ei = bi.ExcelImporter(\"data/example_electric_vehicle_standalone.xlsx\", sheet_name=\"new format\") \n", "# ei.apply_strategies()\n", "# ei.match_database(\"background_2020\", fields=[\"name\", \"reference product\"])\n", "# ei.match_database(\"biosphere\", fields=[\"name\", \"categories\"])\n", @@ -539,7 +624,36 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[-180 -120]\n", + "[0.2 0.8]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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1ocDAABIOjEHtUMOOcSFLwAAAHgW1L766qv4PhMAAADEZzJBQSxYsMBuvPHGwngoAACAYiNhQW3Dhg02cuRIO/HEE61jx4728ssvJ+qhAAAAiqV92pQ9qz179tj7779vo0ePtunTp9vu3bvdZANp3rx5PB8KAACg2ItLUFu6dKmNGTPGXnvtNfv111/deQpoBxxwgJ1//vlu6Y4jjjgiHg8FAACQNGIOalu3brUJEya46pnGoAXhrHTp0rZr1y6rXr26fffdd2zWDgAAUFhBbe7cuS6cvfPOO7Z9+/aMrs2jjz7aLrroIuvevbs1bNjQBTT9AAAAIMFB7dFHH7WxY8faypUrM8KZujZ79OjhAlrjxo1jfAoAAADYp6B23333uQVuy5QpY506dbKePXvaaaedRtUMAADAl+U5SpUqZWXLlrX999+fkAYAAOBDULv11lvdtlHbtm2z119/3c477zw76qijXKVt+fLliXyOAAAASSnqoHbnnXfal19+aRMnTnQhbb/99rOff/7Zhg8fbscdd5xb1Pall16yTZs2JfYZAwAAJIkCdX1qjNopp5xiL7zwglt64+GHH7YmTZq4yQXz58+3AQMG2OGHH+6um56e7hbABQAAQCFvIVWlShXr3bu3zZo1y+bMmWPXXHONVa1a1f766y93+e+//+5C26BBg+zbb7+N9WEAAACSVlz2+tTSHA8++KCrsqn7U7NBU1JS3H6fTz/9tLVu3drat28fj4cCAABIGnHdlF27EnTp0sVNNvjqq6/srrvustTUVNc1umjRong+FAAAQLEX16AWqWbNmnbzzTe77aUmT55sF154YaIeCgAAoFiKy6bs+WnVqpX7AQAAgAcVNQAAAOwbghoAAICnCGoAAACeIqgBAAB4qsgEtYULF1qPHj2sTp06VqtWLevQoYPbzipWaWlpduSRR7qFe7t16xbX5woAAFBkZn3uq9mzZ7swVbZsWevatatVqFDBJk2aZL169bI1a9ZYv379Cnyf2mR+8+bNCXm+AAAASVFR2717t/Xv39/tdDBlyhR74okn7P7773fbVjVo0MCGDh1qq1atKtB9vv322/bGG2/YPffck7DnDQAAUOyDmqppK1eutO7du7sN4AOVK1d2m8Dv3LnTxo0bF/X9aVsrLcR7wQUXWMeOHRP0rAEAAJIgqKlyJu3atct2WbB/6Ny5c6O+v5tuuslKlixpDz30UByfJQAAQBKOUVu+fLk7rV+/frbLatSo4carrVixIqr7eu211+ydd96xMWPGuEkEmzZtKvDz2bFjR4FvkwxU2Yw8BW2QjHgdhI82CB9tkDeNty9WQS0Y8F+pUqUcL69YsWJUkwJ++eUXu+2221wXaufOnWN+PmvXrrX09PSYb1/crV+/PuynkPRog/DRBuGjDcJHG2SnHr3U1FQrVkEtXm644QYrXbr0Pnd5amkQ5PwNSi9KVTnLlCnDIQoBbRA+2iB8tEH4aIP48j6oBZW03KpmW7Zscd2YeRk7dqxNnz7d/vOf/1i1atUKtWSZbBTSOEa0QbLjdRA+2iB8tEGSTCYIxqYFY9UiqYKzdevWfMuIixcvdqeXXXaZC3XBzzHHHOPOnzFjhvt/69atE/I7AAAAFMuKWqtWrWz48OE2c+bMbDsIKGAF18lLy5Ytbdu2bdnO13kTJkywgw8+2M0qPeSQQ+L87AEAAIpxUGvbtq3Vq1fPxo8fb9dcc03GWmqasakAp9Jqz549M66/bt06102qsVJaa020m4F+svrpp59cUDviiCNs5MiRhfhbAQAAFIOuz1KlStmIESNsz549bramdikYNGiQ66ZctmyZDR482OrWrZtx/SFDhrgK2uTJk0N93gAAAMW+oiZt2rSxqVOn2rBhw9xG7Lt27bJGjRq5UJZTpQwAAKA4KJGWlrY37CeBok8LAa9evdpq167NrE/aIGnxOggfbRA+2iDJuj4BAACSFUENAADAUwQ1AAAATxHUAAAAPEVQAwAA8BRBDQAAwFMENQAAAE8R1AAAADxFUAMAAPAUQQ0AAMBTBDUAAABPEdQAAAA8RVADAADwFEENAADAUwQ1AAAATxHUAAAAPEVQAwAA8BRBDQAAwFMENQAAAE8R1AAAADxFUAMAAPAUQQ0AAMBTBDUAAABPEdQAAAA8RVADAADwFEENAADAUwQ1AAAATxHUAAAAPEVQAwAA8BRBDQAAwFMENQAAAE8R1AAAADxFUAMAAPAUQQ0AAMBTBDUAAABPEdQAAAA8RVADAADwFEENAADAUwQ1AAAATxHUAAAAPEVQAwAA8BRBDQAAwFMENQAAAE8VmaC2cOFC69Gjh9WpU8dq1aplHTp0sIkTJ0Z9++nTp9sVV1xhxx13nLuPmjVrun9ff/31tmzZsoQ+dwAAgFiUsiJg9uzZ1q1bNytbtqx17drVKlSoYJMmTbJevXrZmjVrrF+/fvnex7Rp02z+/PnWokULF/JKly5tS5YssXHjxtkbb7xhr7/+urVt27ZQfh8AAIBolEhLS9trHtu9e7erfK1du9ZVxZo0aeLO37Rpk7Vv395WrVplCxYscFWyvOzYscMFvaw++ugj69Klix177LH24YcfJuz3KO50fFevXm21a9fO8TiDNkgGvA7CRxuEjzZIsq5PVdNWrlxp3bt3zwhpUrlyZRswYIDt3LnTVcXyk1t4UBWtSpUqtmLFirg+bwAAgGIf1ObMmeNO27Vrl+0yVdRk7ty5Md//559/bmlpadaoUaN9eJYAAABJOEZt+fLl7rR+/frZLqtRo4Ybr1aQatjMmTNt3rx5rhKn+37//fetWrVq9sADD0Rd0kV2Op6Rpyh8tEH4aIPw0Qbhow3yVtDhQd4Htc2bN7vTSpUq5Xh5xYoVM64TbVB78sknM/6fmppq//73v61p06ZR3V5j5dLT06N+vGSzfv36sJ9C0qMNwkcbhI82CB9tkF3JkiVd7ihWQS3e7rvvPvezdetWN+vz4YcfttNPP92FNy3/kR8tDYKcv0HpRakqZ5kyZThEIaANwkcbhI82CB9tEF/eB7WgkpZb1WzLli1uMkBBqcu0efPmNmbMGDvllFPsxhtvtFNPPdWqV6+e5+2Y0Zg3hTSOUbhog/DRBuGjDcJHGyTJZIJgbFowVi2SKjiqjBW0jBipVKlSdvLJJ9u2bdts0aJF+/RcAQAAkiqotWrVKmNsWVYzZszIdJ1YrVu3zp1qEVwAAABfeB/UtM5ZvXr1bPz48bZ48eKM87Xg7fDhw11ptWfPnplC19KlS93lkXKrlinsTZ482a3LpoV1AQAAfOH9GDV1TY4YMcJtIdW5c+dMW0hpJfyhQ4da3bp1M64/ZMgQtwDuqFGj7OKLL844X+PPtFZa48aN3YSA7du329dff22ffvqpq6RpMkH58uVD+i0BAACKYFCTNm3a2NSpU23YsGFuI/Zdu3a50KVQpuAWjX/84x/28ccfu8VxN2zYYCkpKXbIIYfY5Zdfbn369LHDDz884b8HAABAsdrrE0UDe7uFjzYIH20QPtogfLRBko1RAwAASFYENQAAAE8R1AAAADxFUAMAAPAUQQ0AAMBTBDUAAABPEdQAAAA8RVADAADwFEENAADAUwQ1AAAATxHUAAAAPEVQAwAA8BRBDQAAwFMENQAAAE8R1AAAADxFUAMAAPAUQQ0AAMBTBDUAAABPEdQAAAA8RVADAADwFEENAADAUwQ1AAAATxHUAAAAPEVQAwAA8BRBDQAAwFMENQAAAE8R1AAAADxFUAMAAPAUQQ0AAMBTBDUAAABPEdQAAAA8RVADAADwFEENAADAUwQ1AAAATxHUAAAAPEVQAwAA8BRBDQAAwFMENQAAAE8R1AAAADxFUAMAAPAUQQ0AAMBTBDUAAABPEdQAAAA8RVADAADwVJEJagsXLrQePXpYnTp1rFatWtahQwebOHFiVLfdu3evTZ8+3QYMGGAnnXSSu4+aNWtaq1at7NFHH7UdO3Yk/PkDAAAUVCkrAmbPnm3dunWzsmXLWteuXa1ChQo2adIk69Wrl61Zs8b69euX5+3/+usvF/L2228/a926tbVv396Fs5kzZ9rQoUNtypQpNnnyZCtXrlyh/U4AAABFPqjt3r3b+vfvbykpKS5QNWnSxJ0/cOBAF7gUtLp06eKqZLkpWbKk3XXXXXbVVVdZlSpVMs7ftWuXXXrppTZ16lR7/vnn7YYbbiiU3wkAAKBYdH2qmrZy5Urr3r17RkiTypUru67MnTt32rhx4/K8j9KlS9stt9ySKaQF5+s+ZO7cuQn6DQAki7Xb021BWoo7BYCkqKjNmTPHnbZr1y7bZaqo7WvIUlgLqm4AEKuXl26zG+em2R4raylfp9njrcz+flh5DiiA4h3Uli9f7k7r16+f7bIaNWq48WorVqyI+f5Hjx6daxDMCRMPcqbKZuQpCh9tEB5V0P4X0v5Hpzd9kmatq5vVKseXwMLE6yB8tEHeNN6+WAW1zZs3u9NKlSrleHnFihUzrlNQmgn64osv2uGHH+7GqkVj7dq1lp5Ot0Zu1q9fH1NbIH5og8Kn7k5V0iKl7zX7fPk6a14liG8oTLwOwkcbZKfeu9TUVCtWQS2Ry31cccUVLgC+9NJLbkZoNLQ0CHL+BqUXpaqcZcqU4RCFgDYIT8lq6a67MzKSlSxh1rL+QVTUChmvg/DRBvHlfVALKmm5Vc22bNmSbZJAfhYtWmTnnXeelShRwiZMmGBHHnlkwkqWyUYhjWNEGySb1LLmxqSpu1OVNIW0x06qYqlVGaMWFt6LwkcbJElQC8amaaxa06ZNM12mCs7WrVutWbNmBQpp5557rlsEVyGtILcFgNxo4oDGpKm7U5U0QhqApFieQ7sHiBanzWrGjBmZrhNtSNuzZ4+NHz/eWrRoEednCyCZaeKAxqQxgQBA0gS1tm3bWr169VywWrx4ccb5mzZtsuHDh7vSas+ePTPOX7dunS1dutRdHumLL75wIU0TAd544w1r2bJlof4eAAAAxa7rs1SpUjZixAi3hVTnzp0zbSG1evVqtzNB3bp1M64/ZMgQtwDuqFGj7OKLL3bnbdy40YU0hTftEfrhhx+6n0haQLdv376F/vsBAAAU2aAmbdq0cds8DRs2zG3Erq2fGjVq5EKZglt+NBEhLS3N/fuDDz5wP1nVrl2boAYAALxSIi0tbW/YTwJFnxYCVoVTgZdZn7RBsuJ1ED7aIHy0QZKNUQMAAEhWBDUAAABPEdQAAAA8RVADAADwFEENAADAUwQ1xE3JkiU5miGjDcJHG4SPNggfbRA/LM8BAADgKSpqAAAAniKoAQAAeIqgBgAA4CmCGgAAgKcIagAAAJ4iqAEAAHiKoAYAAOApghoAAICnCGoAAACeIqgByGTv3r0ckZDRBsD/7Nq1K+P1kKyvi1JhPwEg8Ndff9lrr71mTZo0saZNm3JgQqA3whIlSuT6fyTenj173E+pUv97e6YNCt/u3bttxYoVVqFCBStfvrxVrlw5hGeR3PR58Pzzz9tvv/1mp556qrVt2zZp34sIavDCsmXL7LjjjnP/vu222+ywww6zcuXK8SFViMaPH28ff/yxpaSkWMWKFe3SSy+1hg0bussIC4Xj5ZdftrffftttaK026NOnjx111FFWtmxZF97UNkis//znP+5n9erVtnXrVmvVqpUNGjTIjj32WBfgggCNxL4O7r33XktPT7fq1avbEUcckdR///zFwQv69ir65jphwgQ76aSTrE2bNkn7DaowLViwwG666Sb77rvvbL/99nNvjvo2O23aNBs6dKiddtpptEOC/fjjj9a/f3+bO3euNWjQwAXjH374wWbOnGlXXXWVCwrJ+iFVmF8W77jjDps1a5Z7/2nfvr1t3LjRvQ42bNjgziekJZb+7h999FEbMWKEa4Pu3bvb8ccfb7Vr17ZkxisfoQrGHPz666+2//77280332zLly+3iRMnujfHyOsgvvQNVce5d+/e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D7clS5bYuHHjbODAgTleJ6g6BtdF7i655BJ76KGH7Nlnn7V+/fpZqVJ8PAFC1ycA/J8ff/zRZsyY4SqIp512Wp7HpWfPnlaiRAkX1NTFmdXmzZtt8uTJLvCeeeaZHON8HHzwwdamTRv75ZdfbMqUKRwv4P8Q1AAkZDJB5GB0hZa77rrLjjnmGDvooINcd9t9991nf/31l7uugs6LL75obdu2dR/Y9erVs169euXbbThp0iS74IILXPerwpVOL7roItetF4vx48fbnj17XEjLr6KjbsPWrVvbypUr7ZNPPsl2+cSJE2379u3Wo0cPK1OmTJ73tW3bNnvsscfslFNOcd2oNWvWtOOOO87uvPNOW7duXY63iTy+f/75pz3wwAPWokULq1Gjhuuu1vFbvnx5tq5a3SY4PhobFjnusHPnzjk+VrT3H1C7Pvnkk9a+fXt3nKpXr24NGjSwk046yW655Rb74osvcrxd8Pivv/56nscLSCYENQAJpZCm4KOxRxUrVnRBTeO6HnnkEde9qJB21VVXuXFJW7Zssbp167rgoqBzxhln2MaNG3MMAn//+9/dj8aT6T6OPPJI2717t7377rt21lln2ciRIwv8XBVkRCEpGkGXcE4TK4Lz8uo2FlWQFGiGDBliX375pdWqVcsFTlX3nnrqKRduFixYkOvtdcx0fP/5z39ayZIlLTU11TZt2uSOn86PDLuVKlVyYxJ1Kgpc+n/w06hRo326f0lPT3ezZRXM//vf/7oAqGCutl+xYoU9//zzrtKYk+C4K0gqMAMgqAFIMH0w68NaMwznzJnjqimqXKlipfFxCms6X4Fr4cKFrjr1+eef2yGHHGI///xzxpixSKo0qZqmcKb70HIaGriv6pbGOO2///72j3/8w91vtBTygvF2+U0iCJxzzjkugLz99tu2devWjPN/+OEH9zso+DRt2jTP++jdu7d9//33LjQpoMybN8/9Lt98843rCvzjjz9cIFU4yslzzz3nApRCkW776aefumCnsKfbqhIWUEVTx0szV4Pxh/p/8KMwti/3L++99577PRQ4dfzV7jNnzrRFixbZmjVr7I033sh1AstRRx1lZcuWtbS0NPv666/zOfpAcqCiBiCh9CH/wgsvuC7NgCpIqnqJApcGkR9//PEZlx966KHWv39/928FuEgKQeomVVXotddey/ahf/7557sgpyrbE088EfXz/PXXX11XpShkRKNcuXJ23nnnuQrgW2+9VeBqmkJpECYViCIrWppV+/LLL7vfc+3ate7fOUlJSbGXXnrJVboC6joOlhbJbbJItAp6/2of0dIlCl6RFM5VhevQoUOOj6XL1U0adKsDIKgBSDCFMlXHsgoqTaq2nXvuudkuD6paqpJFUvVK3WL6sNf4p9wqXaIQpK64aGzYsCHj33/7298sWhoTFyx5IXo8BUgtXaLxc3mZNm2aOz3xxBOtWbNm2S7XsdFsyMjrZtWuXTsXbLNq2bKlO1V1Kqfu42gV9P6DpUq0zEnkMY1W1apV3WkstwWKI+Y/A0ioyEpMpKByklMIiLw8sktRgi4xdS1qrbOcBLMwNQhe3XM5rQOXVbDQqiqAClnRUkVP3ZbqElSoVEVJ485UMQx+h9wE1Sd14eYmqLIF181Kg/Rzoopc5DizgoTPfbl/TQhQt+h3331njRs3tpNPPtkFUQU7/ey33355Pp66PoO2A0BQA5Bg6h7MiZa2iObyrFTBEY130k9+gu7M/FSrVi2jIqbxYFopP1rq4rz33ntdl2cQqPLr9owMoZGhJytNvoi8bla5HT91WQZyWj4kWgW9f40P1Dg1dWdPmDDBPvjgA/cj6sbVeDt1Ted2v0F1LmgPINkxRg1AkVK+fHl3qkVmFdry+9Es0mhEVr8K2lWoNdUUXEaPHu1CioJXfuuwSYUKFTLGx+UmWJ4juG5RoGOpiQma5KFK4+OPP25nn322C81atkPLguQmOPZ5hVcgmRDUABQpQVegZkXGkypoQTfst99+W6DbavLBqaee6kLVzp073di0aFbWP+yww9ypuglzEzyX4LrxkFu1Mt70OOrWvfzyy+2VV17JmGShpT3UJZ2VAqvGpul2mqEKgKAGoIjRxAN9kGtwvZa1iCctYCt5rVuWm2uvvdYt2KufSy+9NKrbdOzY0Z2q6qSlSbJSRVBVusjrxkPQ7VjY48AiZ/ZqJmtWwfIoGtsWTCoAkh0VNQBFij7ENc5p165dbmFVLQ+RdQyWBvNr/Tat9l8QQXdlLDsb6LaakaqfaKtfGmQfhEOtpxZZWfvtt9/c6v9aMFgVu2jDXzSCyqEW+I33wrLq2tSyKFkXwlW354MPPpgxVk0TMLIKdniIZygFijpmfQIocjT+SdUgbTWk8WFaxiIIH+p+VFCTCy+8sED3qz05tX2TZpRqZwCtF5ZoWj9Na7GpOqhdCLSBu7acUmhTGNVsSq2hVpDJDfnRWnN6XIVKrXWmZU4021UL4QZhKlaa4PHMM8/Y3Xff7SZC6HiqO1jHU+vNqUtYY9Y06SCSJnG8+eabbqyfFkEG8D9U1AAUOQoy2oFAi8yqqqaB9hrLpR8FAS0RoS2ktJ9oQei2Gk+lCt2rr75qhUFBRhvBaycFbbWkoLN06VI3CUL7earKpD0246l58+ZuvJiqeQpPCqaqIn711Vf7fN9XXnml2z5KXcBa5kQBVJMKNDlAM2G1vpraLCudr5CtymS0E0CAZFAiLS0t9nnbAFDMaFyYgoxCm7Y9ym0ZCcR/7OFHH33ktpuKdgsvIBlQUQOACOpGveOOO2z9+vWuaofE0w4SqqhptiwhDciMMWoAkIUG8WvR26zjqJAYWjvttttuc93OADKj6xMAAMBTdH0CAAB4iqAGAADgKYIaAACApwhqAAAAniKoAQAAeIqgBgAA4CmCGgAAgKcIagAAAJ4iqAEAAHiKoAYAAGB++n+5+SY18BqAzwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# driving = bd.get_node(database=\"foreground\", name=\"driving an electric vehicle\")\n", "# ev_to_driving = next(exc for exc in driving.technosphere() if exc.input[\"name\"] == \"production of an electric vehicle\")\n", @@ -1223,7 +1337,7 @@ ], "metadata": { "kernelspec": { - "display_name": "timex", + "display_name": "timex_dev", "language": "python", "name": "python3" }, @@ -1237,7 +1351,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.14.2" + "version": "3.13.0" } }, "nbformat": 4, From c8cad70a2f97ad22aeb21cc0268e94ffd4b6b419 Mon Sep 17 00:00:00 2001 From: Arthur Jakobs Date: Tue, 24 Mar 2026 10:13:23 +0100 Subject: [PATCH 4/5] add easytimedelta and easy datetime options in excel reader --- .../example_electric_vehicle_standalone.xlsx | Bin 12259 -> 14618 bytes .../example_electric_vehicle_standalone.ipynb | 404 ++++++++++-------- 2 files changed, 233 insertions(+), 171 deletions(-) diff --git a/notebooks/data/example_electric_vehicle_standalone.xlsx b/notebooks/data/example_electric_vehicle_standalone.xlsx index b2e40bf6cb5b97b34123fa514d0c2ff4cfba03fc..d83520b3213bed7db742b67446f640470da87934 100644 GIT binary patch delta 8112 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 diff --git a/notebooks/example_electric_vehicle_standalone.ipynb b/notebooks/example_electric_vehicle_standalone.ipynb index 1b87add..31817d5 100644 --- a/notebooks/example_electric_vehicle_standalone.ipynb +++ b/notebooks/example_electric_vehicle_standalone.ipynb @@ -27,7 +27,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -38,7 +38,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -48,21 +48,21 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 1/1 [00:00<00:00, 2241.74it/s]" + "100%|██████████| 1/1 [00:00<00:00, 22671.91it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\u001b[2m22:00:42+0100\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mVacuuming database \u001b[0m\n" + "\u001b[2m09:57:14+0100\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mVacuuming database \u001b[0m\n" ] }, { @@ -114,7 +114,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -190,18 +190,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ - "ELECTRICITY_CONSUMPTION = 0.2 # kWh/km\n", - "MILEAGE = 150_000 # km\n", - "LIFETIME = 15 # years\n", + "# ELECTRICITY_CONSUMPTION = 0.2 # kWh/km\n", + "# MILEAGE = 150_000 # km\n", + "# LIFETIME = 15 # years\n", "\n", - "# Overall mass: 1200 kg\n", - "MASS_GLIDER = 840 # kg\n", - "MASS_POWERTRAIN = 80 # kg\n", - "MASS_BATTERY = 280 # kg" + "# # Overall mass: 1200 kg\n", + "# MASS_GLIDER = 840 # kg\n", + "# MASS_POWERTRAIN = 80 # kg\n", + "# MASS_BATTERY = 280 # kg" ] }, { @@ -213,14 +213,14 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ - "if \"foreground\" in bd.databases:\n", - " del bd.databases[\"foreground\"] # to make sure we create the foreground from scratch\n", - "foreground = bd.Database(\"foreground\")\n", - "foreground.register()" + "# if \"foreground\" in bd.databases:\n", + "# del bd.databases[\"foreground\"] # to make sure we create the foreground from scratch\n", + "# foreground = bd.Database(\"foreground\")\n", + "# foreground.register()" ] }, { @@ -232,21 +232,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ - "ev_production = foreground.new_node(\"ev_production\", name=\"production of an electric vehicle\", unit=\"unit\")\n", - "ev_production['reference product'] = \"electric vehicle\"\n", - "ev_production.save()\n", + "# ev_production = foreground.new_node(\"ev_production\", name=\"production of an electric vehicle\", unit=\"unit\")\n", + "# ev_production['reference product'] = \"electric vehicle\"\n", + "# ev_production.save()\n", "\n", - "driving = foreground.new_node(\"driving\", name=\"driving an electric vehicle\", unit=\"transport over an ev lifetime\")\n", - "driving['reference product'] = \"transport\"\n", - "driving.save()\n", + "# driving = foreground.new_node(\"driving\", name=\"driving an electric vehicle\", unit=\"transport over an ev lifetime\")\n", + "# driving['reference product'] = \"transport\"\n", + "# driving.save()\n", "\n", - "used_ev = foreground.new_node(\"used_ev\", name=\"used electric vehicle\", unit=\"unit\")\n", - "used_ev['reference product'] = \"used electric vehicle\"\n", - "used_ev.save()" + "# used_ev = foreground.new_node(\"used_ev\", name=\"used electric vehicle\", unit=\"unit\")\n", + "# used_ev['reference product'] = \"used electric vehicle\"\n", + "# used_ev.save()" ] }, { @@ -258,31 +258,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ - "glider_production = background_2020.get(code=\"glider\")\n", - "powertrain_production = background_2020.get(code=\"powertrain\")\n", - "battery_production = background_2020.get(code=\"battery\")\n", + "# glider_production = background_2020.get(code=\"glider\")\n", + "# powertrain_production = background_2020.get(code=\"powertrain\")\n", + "# battery_production = background_2020.get(code=\"battery\")\n", "\n", - "ev_production.new_edge(input=ev_production, amount=1, type=\"production\").save()\n", + "# ev_production.new_edge(input=ev_production, amount=1, type=\"production\").save()\n", "\n", - "glider_to_ev = ev_production.new_edge(\n", - " input=glider_production,\n", - " amount=MASS_GLIDER, \n", - " type=\"technosphere\"\n", - ")\n", - "powertrain_to_ev = ev_production.new_edge(\n", - " input=powertrain_production, \n", - " amount=MASS_POWERTRAIN, \n", - " type=\"technosphere\"\n", - ")\n", - "battery_to_ev = ev_production.new_edge(\n", - " input=battery_production, \n", - " amount=MASS_BATTERY, \n", - " type=\"technosphere\"\n", - ")" + "# glider_to_ev = ev_production.new_edge(\n", + "# input=glider_production,\n", + "# amount=MASS_GLIDER, \n", + "# type=\"technosphere\"\n", + "# )\n", + "# powertrain_to_ev = ev_production.new_edge(\n", + "# input=powertrain_production, \n", + "# amount=MASS_POWERTRAIN, \n", + "# type=\"technosphere\"\n", + "# )\n", + "# battery_to_ev = ev_production.new_edge(\n", + "# input=battery_production, \n", + "# amount=MASS_BATTERY, \n", + "# type=\"technosphere\"\n", + "# )" ] }, { @@ -294,31 +294,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ - "glider_eol = background_2020.get(name=\"glider_eol\")\n", - "powertrain_eol = background_2020.get(name=\"powertrain_eol\")\n", - "battery_eol = background_2020.get(name=\"battery_eol\")\n", + "# glider_eol = background_2020.get(name=\"glider_eol\")\n", + "# powertrain_eol = background_2020.get(name=\"powertrain_eol\")\n", + "# battery_eol = background_2020.get(name=\"battery_eol\")\n", "\n", - "used_ev.new_edge(input=used_ev, amount=-1, type=\"production\").save() # -1 as this gets rid of a used car\n", + "# used_ev.new_edge(input=used_ev, amount=-1, type=\"production\").save() # -1 as this gets rid of a used car\n", "\n", - "used_ev_to_glider_eol = used_ev.new_edge(\n", - " input=glider_eol,\n", - " amount=-MASS_GLIDER,\n", - " type=\"technosphere\",\n", - ")\n", - "used_ev_to_powertrain_eol = used_ev.new_edge(\n", - " input=powertrain_eol,\n", - " amount=-MASS_POWERTRAIN,\n", - " type=\"technosphere\",\n", - ")\n", - "used_ev_to_battery_eol = used_ev.new_edge(\n", - " input=battery_eol,\n", - " amount=-MASS_BATTERY,\n", - " type=\"technosphere\",\n", - ")" + "# used_ev_to_glider_eol = used_ev.new_edge(\n", + "# input=glider_eol,\n", + "# amount=-MASS_GLIDER,\n", + "# type=\"technosphere\",\n", + "# )\n", + "# used_ev_to_powertrain_eol = used_ev.new_edge(\n", + "# input=powertrain_eol,\n", + "# amount=-MASS_POWERTRAIN,\n", + "# type=\"technosphere\",\n", + "# )\n", + "# used_ev_to_battery_eol = used_ev.new_edge(\n", + "# input=battery_eol,\n", + "# amount=-MASS_BATTERY,\n", + "# type=\"technosphere\",\n", + "# )" ] }, { @@ -330,25 +330,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ - "electricity_production = background_2020.get(name=\"electricity\")\n", + "# electricity_production = background_2020.get(name=\"electricity\")\n", "\n", - "driving.new_edge(input=driving, amount=1, type=\"production\").save()\n", + "# driving.new_edge(input=driving, amount=1, type=\"production\").save()\n", "\n", - "driving_to_used_ev = driving.new_edge(input=used_ev, amount=-1, type=\"technosphere\")\n", - "ev_to_driving = driving.new_edge(\n", - " input=ev_production, \n", - " amount=1, \n", - " type=\"technosphere\"\n", - ")\n", - "electricity_to_driving = driving.new_edge(\n", - " input=electricity_production,\n", - " amount=ELECTRICITY_CONSUMPTION * MILEAGE,\n", - " type=\"technosphere\",\n", - ")" + "# driving_to_used_ev = driving.new_edge(input=used_ev, amount=-1, type=\"technosphere\")\n", + "# ev_to_driving = driving.new_edge(\n", + "# input=ev_production, \n", + "# amount=1, \n", + "# type=\"technosphere\"\n", + "# )\n", + "# electricity_to_driving = driving.new_edge(\n", + "# input=electricity_production,\n", + "# amount=ELECTRICITY_CONSUMPTION * MILEAGE,\n", + "# type=\"technosphere\",\n", + "# )" ] }, { @@ -382,40 +382,40 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ - "from bw_temporalis import TemporalDistribution, easy_timedelta_distribution\n", - "import numpy as np\n", + "# from bw_temporalis import TemporalDistribution, easy_timedelta_distribution\n", + "# import numpy as np\n", "\n", - "td_assembly_and_delivery = TemporalDistribution(\n", - " date=np.array([-3, -2], dtype=\"timedelta64[M]\"), amount=np.array([0.2, 0.8])\n", - ")\n", + "# td_assembly_and_delivery = TemporalDistribution(\n", + "# date=np.array([-3, -2], dtype=\"timedelta64[M]\"), amount=np.array([0.2, 0.8])\n", + "# )\n", "\n", - "td_glider_production = TemporalDistribution(\n", - " date=np.array([-2, -1, 0], dtype=\"timedelta64[Y]\"), amount=np.array([0.7, 0.1, 0.2])\n", - ")\n", + "# td_glider_production = TemporalDistribution(\n", + "# date=np.array([-2, -1, 0], dtype=\"timedelta64[Y]\"), amount=np.array([0.7, 0.1, 0.2])\n", + "# )\n", "\n", - "td_produce_powertrain_and_battery = TemporalDistribution(\n", - " date=np.array([-1], dtype=\"timedelta64[Y]\"), amount=np.array([1])\n", - ")\n", + "# td_produce_powertrain_and_battery = TemporalDistribution(\n", + "# date=np.array([-1], dtype=\"timedelta64[Y]\"), amount=np.array([1])\n", + "# )\n", "\n", - "td_use_phase = easy_timedelta_distribution(\n", - " start=0,\n", - " end=LIFETIME,\n", - " resolution=\"Y\",\n", - " steps=(LIFETIME + 1),\n", - " kind=\"uniform\", # you can also do \"normal\" or \"triangular\" distributions\n", - ")\n", + "# td_use_phase = easy_timedelta_distribution(\n", + "# start=0,\n", + "# end=LIFETIME,\n", + "# resolution=\"Y\",\n", + "# steps=(LIFETIME + 1),\n", + "# kind=\"uniform\", # you can also do \"normal\" or \"triangular\" distributions\n", + "# )\n", "\n", - "td_disassemble_used_ev = TemporalDistribution(\n", - " date=np.array([LIFETIME + 1], dtype=\"timedelta64[Y]\"), amount=np.array([1])\n", - ")\n", + "# td_disassemble_used_ev = TemporalDistribution(\n", + "# date=np.array([LIFETIME + 1], dtype=\"timedelta64[Y]\"), amount=np.array([1])\n", + "# )\n", "\n", - "td_treating_waste = TemporalDistribution(\n", - " date=np.array([3], dtype=\"timedelta64[M]\"), amount=np.array([1])\n", - ")" + "# td_treating_waste = TemporalDistribution(\n", + "# date=np.array([3], dtype=\"timedelta64[M]\"), amount=np.array([1])\n", + "# )" ] }, { @@ -427,20 +427,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ - "td_assembly_and_delivery.graph(resolution=\"M\")" + "# td_assembly_and_delivery.graph(resolution=\"M\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ - "td_glider_production.graph(resolution=\"M\")" + "# td_glider_production.graph(resolution=\"M\")" ] }, { @@ -452,11 +452,11 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ - "(td_assembly_and_delivery * td_glider_production).graph(resolution=\"M\")" + "# (td_assembly_and_delivery * td_glider_production).graph(resolution=\"M\")" ] }, { @@ -468,36 +468,36 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "metadata": {}, "outputs": [], "source": [ - "glider_to_ev[\"temporal_distribution\"] = td_glider_production\n", - "glider_to_ev.save()\n", + "# glider_to_ev[\"temporal_distribution\"] = td_glider_production\n", + "# glider_to_ev.save()\n", "\n", - "powertrain_to_ev[\"temporal_distribution\"] = td_produce_powertrain_and_battery\n", - "powertrain_to_ev.save()\n", + "# powertrain_to_ev[\"temporal_distribution\"] = td_produce_powertrain_and_battery\n", + "# powertrain_to_ev.save()\n", "\n", - "battery_to_ev[\"temporal_distribution\"] = td_produce_powertrain_and_battery\n", - "battery_to_ev.save()\n", + "# battery_to_ev[\"temporal_distribution\"] = td_produce_powertrain_and_battery\n", + "# battery_to_ev.save()\n", "\n", - "ev_to_driving[\"temporal_distribution\"] = td_assembly_and_delivery\n", - "ev_to_driving.save()\n", + "# ev_to_driving[\"temporal_distribution\"] = td_assembly_and_delivery\n", + "# ev_to_driving.save()\n", "\n", - "electricity_to_driving[\"temporal_distribution\"] = td_use_phase\n", - "electricity_to_driving.save()\n", + "# electricity_to_driving[\"temporal_distribution\"] = td_use_phase\n", + "# electricity_to_driving.save()\n", "\n", - "driving_to_used_ev[\"temporal_distribution\"] = td_disassemble_used_ev\n", - "driving_to_used_ev.save()\n", + "# driving_to_used_ev[\"temporal_distribution\"] = td_disassemble_used_ev\n", + "# driving_to_used_ev.save()\n", "\n", - "used_ev_to_glider_eol[\"temporal_distribution\"] = td_treating_waste\n", - "used_ev_to_glider_eol.save()\n", + "# used_ev_to_glider_eol[\"temporal_distribution\"] = td_treating_waste\n", + "# used_ev_to_glider_eol.save()\n", "\n", - "used_ev_to_powertrain_eol[\"temporal_distribution\"] = td_treating_waste\n", - "used_ev_to_powertrain_eol.save()\n", + "# used_ev_to_powertrain_eol[\"temporal_distribution\"] = td_treating_waste\n", + "# used_ev_to_powertrain_eol.save()\n", "\n", - "used_ev_to_battery_eol[\"temporal_distribution\"] = td_treating_waste\n", - "used_ev_to_battery_eol.save()" + "# used_ev_to_battery_eol[\"temporal_distribution\"] = td_treating_waste\n", + "# used_ev_to_battery_eol.save()" ] }, { @@ -509,7 +509,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 37, "metadata": {}, "outputs": [], "source": [ @@ -531,21 +531,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Extracted 1 worksheets in 0.00 seconds\n", + "Extracted 1 worksheets in 0.01 seconds\n", "Applying strategy: csv_restore_tuples\n", "Applying strategy: csv_restore_booleans\n", "Applying strategy: csv_numerize\n", "Applying strategy: csv_drop_unknown\n", "Applying strategy: csv_restore_temporal_distributions\n", - "Couldn't apply strategy csv_restore_temporal_distributions:\n", - "\tInvalid timedelta resolution 'y' in exchange used electric vehicle\n", "Applying strategy: csv_add_missing_exchanges_section\n", "Applying strategy: normalize_units\n", "Applying strategy: strip_biosphere_exc_locations\n", @@ -556,7 +554,7 @@ "Applying strategy: drop_falsey_uncertainty_fields_but_keep_zeros\n", "Applying strategy: convert_uncertainty_types_to_integers\n", "Applying strategy: convert_activity_parameters_to_list\n", - "Applied 15 strategies in 0.01 seconds\n", + "Applied 15 strategies in 0.00 seconds\n", "Applying strategy: link_iterable_by_fields\n", "Applying strategy: link_iterable_by_fields\n", "Graph statistics for `foreground` importer:\n", @@ -571,21 +569,21 @@ "0 unique unlinked edges (0 total):\n", "\n", "\n", - "\u001b[2m22:00:52+0100\u001b[0m [\u001b[33m\u001b[1mwarning \u001b[0m] \u001b[1mNot able to determine geocollections for all datasets. This database is not ready for regionalization.\u001b[0m\n" + "\u001b[2m09:57:15+0100\u001b[0m [\u001b[33m\u001b[1mwarning \u001b[0m] \u001b[1mNot able to determine geocollections for all datasets. This database is not ready for regionalization.\u001b[0m\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 3/3 [00:00<00:00, 4784.38it/s]" + "100%|██████████| 3/3 [00:00<00:00, 5575.06it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\u001b[2m22:00:52+0100\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mVacuuming database \u001b[0m\n", + "\u001b[2m09:57:15+0100\u001b[0m [\u001b[32m\u001b[1minfo \u001b[0m] \u001b[1mVacuuming database \u001b[0m\n", "Created database: foreground\n" ] }, @@ -598,19 +596,19 @@ } ], "source": [ - "# if \"foreground\" in bd.databases:\n", - "# del bd.databases[\"foreground\"] # to make sure we import the foreground from scratch from the excel file\n", + "if \"foreground\" in bd.databases:\n", + " del bd.databases[\"foreground\"] # to make sure we import the foreground from scratch from the excel file\n", "\n", - "# import bw2io as bi\n", + "import bw2io as bi\n", "\n", - "# ei = bi.ExcelImporter(\"data/example_electric_vehicle_standalone.xlsx\", sheet_name=\"new format\") \n", - "# ei.apply_strategies()\n", - "# ei.match_database(\"background_2020\", fields=[\"name\", \"reference product\"])\n", - "# ei.match_database(\"biosphere\", fields=[\"name\", \"categories\"])\n", + "ei = bi.ExcelImporter(\"data/example_electric_vehicle_standalone.xlsx\", sheet_name=\"easy_tds\") \n", + "ei.apply_strategies()\n", + "ei.match_database(\"background_2020\", fields=[\"name\", \"reference product\"])\n", + "ei.match_database(\"biosphere\", fields=[\"name\", \"categories\"])\n", "\n", - "# ei.statistics() #0 unique unlinked edges means that all foreground exchanges are linked and we can successfully import the database.\n", + "ei.statistics() #0 unique unlinked edges means that all foreground exchanges are linked and we can successfully import the database.\n", "\n", - "# ei.write_database()" + "ei.write_database()" ] }, { @@ -622,30 +620,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[-180 -120]\n", - "[0.2 0.8]\n" + "['2023-05-23T00:00:00' '2024-02-21T00:00:00' '2024-11-21T00:00:00'\n", + " '2025-08-22T00:00:00' '2026-05-23T00:00:00']\n", + "[0.2 0.2 0.2 0.2 0.2]\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 7, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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1ocDAABIOjEHtUMOOcSFLwAAAHgW1L766qv4PhMAAADEZzJBQSxYsMBuvPHGwngoAACAYiNhQW3Dhg02cuRIO/HEE61jx4728ssvJ+qhAAAAiqV92pQ9qz179tj7779vo0ePtunTp9vu3bvdZANp3rx5PB8KAACg2ItLUFu6dKmNGTPGXnvtNfv111/deQpoBxxwgJ1//vlu6Y4jjjgiHg8FAACQNGIOalu3brUJEya46pnGoAXhrHTp0rZr1y6rXr26fffdd2zWDgAAUFhBbe7cuS6cvfPOO7Z9+/aMrs2jjz7aLrroIuvevbs1bNjQBTT9AAAAIMFB7dFHH7WxY8faypUrM8KZujZ79OjhAlrjxo1jfAoAAADYp6B23333uQVuy5QpY506dbKePXvaaaedRtUMAADAl+U5SpUqZWXLlrX999+fkAYAAOBDULv11lvdtlHbtm2z119/3c477zw76qijXKVt+fLliXyOAAAASSnqoHbnnXfal19+aRMnTnQhbb/99rOff/7Zhg8fbscdd5xb1Pall16yTZs2JfYZAwAAJIkCdX1qjNopp5xiL7zwglt64+GHH7YmTZq4yQXz58+3AQMG2OGHH+6um56e7hbABQAAQCFvIVWlShXr3bu3zZo1y+bMmWPXXHONVa1a1f766y93+e+//+5C26BBg+zbb7+N9WEAAACSVlz2+tTSHA8++KCrsqn7U7NBU1JS3H6fTz/9tLVu3drat28fj4cCAABIGnHdlF27EnTp0sVNNvjqq6/srrvustTUVNc1umjRong+FAAAQLEX16AWqWbNmnbzzTe77aUmT55sF154YaIeCgAAoFiKy6bs+WnVqpX7AQAAgAcVNQAAAOwbghoAAICnCGoAAACeIqgBAAB4qsgEtYULF1qPHj2sTp06VqtWLevQoYPbzipWaWlpduSRR7qFe7t16xbX5woAAFBkZn3uq9mzZ7swVbZsWevatatVqFDBJk2aZL169bI1a9ZYv379Cnyf2mR+8+bNCXm+AAAASVFR2717t/Xv39/tdDBlyhR74okn7P7773fbVjVo0MCGDh1qq1atKtB9vv322/bGG2/YPffck7DnDQAAUOyDmqppK1eutO7du7sN4AOVK1d2m8Dv3LnTxo0bF/X9aVsrLcR7wQUXWMeOHRP0rAEAAJIgqKlyJu3atct2WbB/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JElQC8amaaxa06ZNM12mCs7WrVutWbNmBQpp5557rlsEVyGtILcFgNxo4oDGpKm7U5U0QhqApFieQ7sHiBanzWrGjBmZrhNtSNuzZ4+NHz/eWrRoEednCyCZaeKAxqQxgQBA0gS1tm3bWr169VywWrx4ccb5mzZtsuHDh7vSas+ePTPOX7dunS1dutRdHumLL75wIU0TAd544w1r2bJlof4eAAAAxa7rs1SpUjZixAi3hVTnzp0zbSG1evVqtzNB3bp1M64/ZMgQtwDuqFGj7OKLL3bnbdy40YU0hTftEfrhhx+6n0haQLdv376F/vsBAAAU2aAmbdq0cds8DRs2zG3Erq2fGjVq5EKZglt+NBEhLS3N/fuDDz5wP1nVrl2boAYAALxSIi0tbW/YTwJFnxYCVoVTgZdZn7RBsuJ1ED7aIHy0QZKNUQMAAEhWBDUAAABPEdQAAAA8RVADAADwFEENAADAUwQ1xE3JkiU5miGjDcJHG4SPNggfbRA/LM8BAADgKSpqAAAAniKoAQAAeIqgBgAA4CmCGgAAgKcIagAAAJ4iqAEAAHiKoAYAAOApghoAAICnCGoAAACeIqgByGTv3r0ckZDRBsD/7Nq1K+P1kKyvi1JhPwEg8Ndff9lrr71mTZo0saZNm3JgQqA3whIlSuT6fyTenj173E+pUv97e6YNCt/u3bttxYoVVqFCBStfvrxVrlw5hGeR3PR58Pzzz9tvv/1mp556qrVt2zZp34sIavDCsmXL7LjjjnP/vu222+ywww6zcuXK8SFViMaPH28ff/yxpaSkWMWKFe3SSy+1hg0bussIC4Xj5ZdftrffftttaK026NOnjx111FFWtmxZF97UNkis//znP+5n9erVtnXrVmvVqpUNGjTIjj32WBfgggCNxL4O7r33XktPT7fq1avbEUcckdR///zFwQv69ir65jphwgQ76aSTrE2bNkn7DaowLViwwG666Sb77rvvbL/99nNvjvo2O23aNBs6dKiddtpptEOC/fjjj9a/f3+bO3euNWjQwAXjH374wWbOnGlXXXWVCwrJ+iFVmF8W77jjDps1a5Z7/2nfvr1t3LjRvQ42bNjgziekJZb+7h999FEbMWKEa4Pu3bvb8ccfb7Vr17ZkxisfoQrGHPz666+2//77280332zLly+3iRMnujfHyOsgvvQNVce5d+/e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D7clS5bYuHHjbODAgTleJ6g6BtdF7i655BJ76KGH7Nlnn7V+/fpZqVJ8PAFC1ycA/J8ff/zRZsyY4SqIp512Wp7HpWfPnlaiRAkX1NTFmdXmzZtt8uTJLvCeeeaZHON8HHzwwdamTRv75ZdfbMqUKRwv4P8Q1AAkZDJB5GB0hZa77rrLjjnmGDvooINcd9t9991nf/31l7uugs6LL75obdu2dR/Y9erVs169euXbbThp0iS74IILXPerwpVOL7roItetF4vx48fbnj17XEjLr6KjbsPWrVvbypUr7ZNPPsl2+cSJE2379u3Wo0cPK1OmTJ73tW3bNnvsscfslFNOcd2oNWvWtOOOO87uvPNOW7duXY63iTy+f/75pz3wwAPWokULq1Gjhuuu1vFbvnx5tq5a3SY4PhobFjnusHPnzjk+VrT3H1C7Pvnkk9a+fXt3nKpXr24NGjSwk046yW655Rb74osvcrxd8Pivv/56nscLSCYENQAJpZCm4KOxRxUrVnRBTeO6HnnkEde9qJB21VVXuXFJW7Zssbp167rgoqBzxhln2MaNG3MMAn//+9/dj8aT6T6OPPJI2717t7377rt21lln2ciRIwv8XBVkRCEpGkGXcE4TK4Lz8uo2FlWQFGiGDBliX375pdWqVcsFTlX3nnrqKRduFixYkOvtdcx0fP/5z39ayZIlLTU11TZt2uSOn86PDLuVKlVyYxJ1Kgpc+n/w06hRo326f0lPT3ezZRXM//vf/7oAqGCutl+xYoU9//zzrtKYk+C4K0gqMAMgqAFIMH0w68NaMwznzJnjqimqXKlipfFxCms6X4Fr4cKFrjr1+eef2yGHHGI///xzxpixSKo0qZqmcKb70HIaGriv6pbGOO2///72j3/8w91vtBTygvF2+U0iCJxzzjkugLz99tu2devWjPN/+OEH9zso+DRt2jTP++jdu7d9//33LjQpoMybN8/9Lt98843rCvzjjz9cIFU4yslzzz3nApRCkW776aefumCnsKfbqhIWUEVTx0szV4Pxh/p/8KMwti/3L++99577PRQ4dfzV7jNnzrRFixbZmjVr7I033sh1AstRRx1lZcuWtbS0NPv666/zOfpAcqCiBiCh9CH/wgsvuC7NgCpIqnqJApcGkR9//PEZlx966KHWv39/928FuEgKQeomVVXotddey/ahf/7557sgpyrbE088EfXz/PXXX11XpShkRKNcuXJ23nnnuQrgW2+9VeBqmkJpECYViCIrWppV+/LLL7vfc+3ate7fOUlJSbGXXnrJVboC6joOlhbJbbJItAp6/2of0dIlCl6RFM5VhevQoUOOj6XL1U0adKsDIKgBSDCFMlXHsgoqTaq2nXvuudkuD6paqpJFUvVK3WL6sNf4p9wqXaIQpK64aGzYsCHj33/7298sWhoTFyx5IXo8BUgtXaLxc3mZNm2aOz3xxBOtWbNm2S7XsdFsyMjrZtWuXTsXbLNq2bKlO1V1Kqfu42gV9P6DpUq0zEnkMY1W1apV3WkstwWKI+Y/A0ioyEpMpKByklMIiLw8sktRgi4xdS1qrbOcBLMwNQhe3XM5rQOXVbDQqiqAClnRUkVP3ZbqElSoVEVJ485UMQx+h9wE1Sd14eYmqLIF181Kg/Rzoopc5DizgoTPfbl/TQhQt+h3331njRs3tpNPPtkFUQU7/ey33355Pp66PoO2A0BQA5Bg6h7MiZa2iObyrFTBEY130k9+gu7M/FSrVi2jIqbxYFopP1rq4rz33ntdl2cQqPLr9owMoZGhJytNvoi8bla5HT91WQZyWj4kWgW9f40P1Dg1dWdPmDDBPvjgA/cj6sbVeDt1Ted2v0F1LmgPINkxRg1AkVK+fHl3qkVmFdry+9Es0mhEVr8K2lWoNdUUXEaPHu1CioJXfuuwSYUKFTLGx+UmWJ4juG5RoGOpiQma5KFK4+OPP25nn322C81atkPLguQmOPZ5hVcgmRDUABQpQVegZkXGkypoQTfst99+W6DbavLBqaee6kLVzp073di0aFbWP+yww9ypuglzEzyX4LrxkFu1Mt70OOrWvfzyy+2VV17JmGShpT3UJZ2VAqvGpul2mqEKgKAGoIjRxAN9kGtwvZa1iCctYCt5rVuWm2uvvdYt2KufSy+9NKrbdOzY0Z2q6qSlSbJSRVBVusjrxkPQ7VjY48AiZ/ZqJmtWwfIoGtsWTCoAkh0VNQBFij7ENc5p165dbmFVLQ+RdQyWBvNr/Tat9l8QQXdlLDsb6LaakaqfaKtfGmQfhEOtpxZZWfvtt9/c6v9aMFgVu2jDXzSCyqEW+I33wrLq2tSyKFkXwlW354MPPpgxVk0TMLIKdniIZygFijpmfQIocjT+SdUgbTWk8WFaxiIIH+p+VFCTCy+8sED3qz05tX2TZpRqZwCtF5ZoWj9Na7GpOqhdCLSBu7acUmhTGNVsSq2hVpDJDfnRWnN6XIVKrXWmZU4021UL4QZhKlaa4PHMM8/Y3Xff7SZC6HiqO1jHU+vNqUtYY9Y06SCSJnG8+eabbqyfFkEG8D9U1AAUOQoy2oFAi8yqqqaB9hrLpR8FAS0RoS2ktJ9oQei2Gk+lCt2rr75qhUFBRhvBaycFbbWkoLN06VI3CUL7earKpD0246l58+ZuvJiqeQpPCqaqIn711Vf7fN9XXnml2z5KXcBa5kQBVJMKNDlAM2G1vpraLCudr5CtymS0E0CAZFAiLS0t9nnbAFDMaFyYgoxCm7Y9ym0ZCcR/7OFHH33ktpuKdgsvIBlQUQOACOpGveOOO2z9+vWuaofE0w4SqqhptiwhDciMMWoAkIUG8WvR26zjqJAYWjvttttuc93OADKj6xMAAMBTdH0CAAB4iqAGAADgKYIaAACApwhqAAAAniKoAQAAeIqgBgAA4CmCGgAAgKcIagAAAJ4iqAEAAHiKoAYAAGB++n+5+SY18BqAzwAAAABJRU5ErkJggg==", + "image/png": "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uiBHy0/Vrl3bBWgK4tKjTv2JiYnud63nqZ+UKlWqdEzQpuelnLjXa5IVTYobGbRpjVK9RstPffzxx26f9b7333+/W4or5aS76tOmAFDBoZbMev755+3EE090048oYGPdUQAA4MmTmJiYvAMWQk2T8CpDqWAyyCNoKId/UBf+Eob6CEMZhHL4x/6QHFO+79MGAAAAgjYAAIBAINMGAAAQAARtAAAAAUDQBgAAEAAEbQAAAAFA0AYAABAABG0AAAABQNAGAAAQAARtAAAAAUDQBgAAEAAEbQAAAAFA0AYAABAABG0AAAABQNAGAAAQAARtAAAAAUDQBgAAEAAEbQAAAAFA0AYAABAABG0AAAABQNAGAAAQAARtAAAAAUDQBgAAEAAEbQAAAAFA0AYAABAABG0AAAABQNAGAAAQAARtAAAAAUDQBgAAEACBCdpWrFhhXbp0scqVK1v58uWtZcuWNnXq1Jhee/ToUZs9e7YNHDjQGjVq5N6jXLly1rhxY3vqqads//79qb527ty51rp1a6tYsaJVqlTJ2rZta5988skxz1u0aJGVLFkyzZ+zzz472WveeuutNJ+v9wQAAJB8Qfg3LFy40Dp16mSFChWyjh07WtGiRW3atGnWq1cv27hxo/Xv3z/N1//9998u4CtYsKA1adLEWrRo4QK1efPm2fDhw23mzJk2Y8YMK1KkSLLXvfPOO3bjjTda6dKlrXv37u4+BYrt27e31157zdq1a5f0XAWCd999d9TtK8j77LPP3HajUVBYp06dY+7XewIAAAQiaDt06JANGDDA8ubN64KrunXruvsHDx7sgiAFXQqe0gpwEhISbMiQIda3b1+XwfIcPHjQevbsabNmzbKXX37ZbrvttqTHEhMT3TZKlSrlgq4KFSq4+2+//XZr2rSpy9o1b97cihUr5u6vUqWK3XvvvVG3P336dHerbUXTpk0b69GjR6b+PwAAIHfIG4Qs2/r1661z585JAZuUKFHCBU4HDhywiRMnpvke+fPnt7vuuitZwObdr/eQJUuWJHvs/ffft507d9oNN9yQFLCJfr/++utt+/btLjuXni+//NK+++47l0lL2TwKAAAQmqBt8eLF7lZZrZS85saUAVdGKHDzsnFZsd3x48e722uvvTbV56xevdqeffZZe+aZZ2zKlCm2Y8eODJYCAACEne+bR9euXetua9SoccxjZcqUcf3b1q1bl+n3f/PNN6MGZ2lt17vPe05q9u7d64KwwoULuz51qXnxxReT/a3nq3+cmmJjldZgikjKTEbeBhXl8A/qwl/CUB9hKINQDv84kEPHlPri56qgbdeuXe62ePHiUR9XnzLvORmlEaXjxo2zmjVrHtPfLK3tev3Y0tuumlh3795tV1999TFNs14/uMcff9xl7jQi9s8//3TNwQ899JANHTrUBW8aCBGLzZs32+HDhy1WW7dutTCgHP5BXfhLGOojDGUQypE76yIhIcGqV6+eu4K2rJxCpHfv3i4o00hQjSyNNy+Ll9oABI1k1Y9HQVq3bt2sXr16dskll9ijjz5qffr0sXz50q8mBX2x0FWGDlplKQsUKGBBRTn8g7rwlzDURxjKIJTDPw6E5JjyfdDmZbpSy2opkxUti5WWlStXWocOHSxPnjyu+bJWrVppbvekk046ZpuRz4nmp59+sk8//dRF2RdddFGG9k/7c8EFF9iCBQvsxx9/tDPPPDPuKVgdtPFO2+YEyuEf1IW/hKE+wlAGoRz+USDgx5TvByKk1X9MUfOePXsylH5UwKZ51jThrgK2Bg0aZHi7afV387zxxhtpZtnSo6lGZN++fZl6PQAACBffB21atUA0EW601QoinxNrwHbkyBGbPHmynXvuuVmyXc0t9/bbb7tmzWuuucYySn3TtK+iVRgAAAB8H7Q1a9bMqlat6oIsTY3h0Rxqo0aNcqlO9QPzbNmyxdasWeMej7Rq1SoXsCkgmjRpkjVs2DDN7ar5VM2fL730km3atCnpfv0+duxYlwnTklbRaLLe33//3S699FLXfp4a7VNK2j8NQtCIWDWrli1bNs39BAAAuYPv+7QpWzV69Gi3jJVWDohcxmrDhg1uRQSNwvQMGzbMTbY7ZsyYpFUGNCpTAZsCOa1ZOn/+fPcTSZP13nLLLUl/q5/cE0884UZvKnBUEOctY6V51DTq1BtFmlrTaFpzs8nFF1/s+qvpxxs9qrnf/ve//7lJfDV3GwAAgIuJgvBv0LJRyl6NHDnSBU1afqp27douQFMQlx4NJtCyVDJnzhz3k5KaISODNunatavLqGlR+QkTJriBCxrZOWjQIBdwRfPbb7+599eC9Jdddlma+9WvXz9bvny5G3CggE1Zw2rVqrnVG/RYRgdYAACA8ApE0CbnnHOOayJNzwsvvOB+IikT5wVtGaXMnH5ipWBNS1zFYsSIEZnaJwAAkPv4vk8bAAAACNoAAAACgUwbAABAABC0AQAABABBGwAAQAAQtAEAAAQAQRsAAEAAELQBAAAEAEEbAABAABC0AQAABABBGwAAQAAQtAEAAAQAQRsAAEAAELQBAAAEAEEbAABAABC0AQAABABBGwAAQAAQtAEAAAQAQRsAAEAAELQBAAAEAEEbAABAABC0AQAABABBGwAAQAAQtAEAAAQAQRsAAEAAELQBAAAEAEEbAABAABC0AQAABABBGwAAQAAEJmhbsWKFdenSxSpXrmzly5e3li1b2tSpU2N67dGjR2327Nk2cOBAa9SokXuPcuXKWePGje2pp56y/fv3p/rauXPnWuvWra1ixYpWqVIla9u2rX3yySdRn9umTRsrWbJk1J86depEfc2RI0fsxRdfdPtVtmxZq1GjhvXp08d+/vnnGP8zAAAgN8hnAbBw4ULr1KmTFSpUyDp27GhFixa1adOmWa9evWzjxo3Wv3//NF//999/u4CvYMGC1qRJE2vRooUL1ObNm2fDhw+3mTNn2owZM6xIkSLJXvfOO+/YjTfeaKVLl7bu3bu7+xQotm/f3l577TVr165d1O3dfffdx9xXokSJqM+9/fbbbfz48VarVi23rd9++83ef/99t29z5sxxQRwAAIDvg7ZDhw7ZgAEDLG/evC64qlu3rrt/8ODBLvhS0KXgSdmz1CQkJNiQIUOsb9++LuvlOXjwoPXs2dNmzZplL7/8st12221JjyUmJrptlCpVymXWKlSokBRkNW3a1GXtmjdvbsWKFTtme/fee2/MwagCNmXZFKgVKFDA3a8AUz+DBg2yKVOmZOC/BQAAwsr3zaMKbNavX2+dO3dOCti8zJUCpwMHDtjEiRPTfI/8+fPbXXfdlSxg8+7Xe8iSJUuSPaYgaufOnXbDDTckBWyi36+//nrbvn27y84dDwVscv/99ycFbHLppZe6jKCybRs2bDiubQAAgHDwfdC2ePFid6usVkrKtEULuDJCgZuXjYvXdidNmuT6yj3//PO2aNEi128tGm3jhBNOsAsuuCDD2wAAALmL75tH165d626j9e0qU6aM69+2bt26TL//m2++GTU4S2u73n3ec1JSJi7SqaeeamPHjrX69esn3bd3717bsmWL1a5d+5iAUapXr57mNlJKazBFJGUmI2+DinL4B3XhL2GojzCUQSiHfxzIoWNKffFzVdC2a9cud1u8ePGoj6tPmfecjNKI0nHjxlnNmjVd37ZYt+v1Y0u5XY0yVb84NeOqKfbXX39176+ATYMXlFnTCNRYyuXdH2vZNm/ebIcPH7ZYbd261cKAcvgHdeEvYaiPMJRBKEfurIuEhISkBEyuCdqycgqR3r17u+BII0E1svR43Xrrrcn+VjD46KOPuiDviSeesGeffdYef/xxywqaBiUWusrQQassZWQ/uqChHP5BXfhLGOojDGUQyuEfB0JyTPk+aEsv47R79+5jBhikZ+XKldahQwfLkyePG52p6TbS2u5JJ510zDYjn5MeTU2ioG3ZsmVR3z+a9DJxx5uC1UEb77RtTqAc/kFd+EsY6iMMZRDK4R8FAn5M+X4gQlr9xxQ179mzJ0PpRwVsaqrUhLsK2Bo0aJDh7abV3y0aBX0KEPft25d0nwYgaDLdX375JWqzptdPj3naAABAIII2rVogmv4i2moFkc+JNWDTaM7Jkyfbueeemy3b/fLLL12QmHIuOb1eAxI+++yzVLehOdwAAAB8H7Q1a9bMqlat6oKs1atXJ92vOdRGjRrlUp3dunVLul8jMtesWeMej7Rq1SoXsCmrpSk5GjZsmOZ21XyqpsmXXnrJNm3alHS/ftfAAk26qyWtPFp26s8//4w6QEBzxInmmot03XXXuduHH3442YgWDZDQoAWNaE1r0mAAAJB7+L5PW758+Wz06NFuGSut7Rm5jJUmntWKCFWqVEl6/rBhw9xku2PGjLEePXq4+xRMKWBTIKc1S+fPn+9+Immy3ltuuSXpb/WTUz80LS2lwFFBnLeM1Y4dO9yo0MjVEDSf2p133mkXXnih2x+9Xk2fH3/8scumXX311cmCS9HKCtdee62bZFfbuOyyy1zQqW2ceOKJWTZoAQAABI/vgzYvuNFSUyNHjnQBjZaf0vxmCtAUxKVHnfq1LJVoPU/9pKSpOCKDNunatavLqGmi3AkTJrh+afXq1XPLS1188cXJnqv7tZzWV1995UamKlBTIHj++efbP/7xj1T385lnnnFlef311+0///mP6+umDN4DDzxg1apVy+B/CgAAhFWexMTEozm9E8g+moRXGUoFqUEeQUM5/IO68Jcw1EcYyiCUwz/2h+SY8n2fNgAAABC0AQAABAKZNgAAgAAgaAMAAAgAgjYAAIAAIGgDAAAIAII2AACAACBoAwAACACCNgAAgAAgaAMAAAgAgjYAAIAAIGgDAAAIAII2AACAACBoAwAACACCNgAAgAAgaAMAAAgAgjYAAIAAIGgDAAAIAII2AACAACBoAwAACACCNgAAgAAgaAMAAAgAgjYAAIAAIGgDAAAIAII2AACAACBoAwAACACCNgAAgAAgaAMAAAiAwARtK1assC5duljlypWtfPny1rJlS5s6dWpMrz169KjNnj3bBg4caI0aNXLvUa5cOWvcuLE99dRTtn///lRfO3fuXGvdurVVrFjRKlWqZG3btrVPPvnkmOft2LHDXnvtNevWrZvVq1fPTjnlFKtevbp17tzZvUc0b731lpUsWTLVn0WLFmXgPwQAAMIsnwXAwoULrVOnTlaoUCHr2LGjFS1a1KZNm2a9evWyjRs3Wv/+/dN8/d9//+0CvoIFC1qTJk2sRYsWLlCbN2+eDR8+3GbOnGkzZsywIkWKJHvdO++8YzfeeKOVLl3aunfv7u5ToNi+fXsXoLVr1y7pue+//74LChUMNm3a1AWWmzZtsunTp9ucOXPsoYcesttuuy3q/ikorFOnzjH3K7gEAAAIRNB26NAhGzBggOXNm9cFV3Xr1nX3Dx482AVfCroUPKUV4CQkJNiQIUOsb9++LoPlOXjwoPXs2dNmzZplL7/8crKgKjEx0W2jVKlSLrNWoUIFd//tt9/ugjIFaM2bN7dixYq5+2vUqGETJ060Vq1auX31/PTTT0n7qcBRQV1Kbdq0sR49esTpPwYAAMIobxCybOvXr3fNjF7AJiVKlHCB04EDB1ywlJb8+fPbXXfdlSxg8+7Xe8iSJUuSPabM2c6dO+2GG25ICthEv19//fW2fft2l53zNGvWzK644opkAZucdtppLjuoAPHzzz/P5H8BAADkdr4P2hYvXuxuldVKSRmsaAFXRihw87JxWbXd1LbhWb16tT377LP2zDPP2JQpU1z/OAAAgEA1j65duzap+TGlMmXKuP5t69aty/T7v/nmm1GDs7S2693nPSctu3btsg8++MD1x9MgiGhefPHFZH8XLlzY7r77btcUCwAAEIigTUGPFC9ePOrj6lPmPSejNKJ03LhxVrNmTde3Ldbtev3YYtmuml9///13u+++++yk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bcaMGVakSJFkr3vnnXfsxhtvtNKlS1v37t3dfQoU27dv7yYMbteuXbLn//DDD3bZZZe599ZzFBh+/PHHduedd7rHnnjiiWTP37t3r7Vp08a+/vpra968uXXu3NlWr17t+gEuWbLETZOiMgMAAPg+aDt06JANGDDA8ubN64KrunXruvsHDx7sgi8FXQqelD1LTUJCgg0ZMsStzlCyZMmk+w8ePGg9e/a0WbNm2csvv2y33XZb0mOJiYluGxr1qsxahQoV3P233367NW3a1GXtFGgVK1Ys6TW6T5mzSZMm2aWXXuruu//++93+jR071gWODRs2THr+v//9bxew6T2HDh2adL9+f+aZZ+z555937wkAABCXKT+++uorl0W64YYbXEZKt08++aS7Px5ZtvXr17sslBeweastKKA5cOCATZw4Mc33yJ8/v911113JAjbvfi8oUmYr0vvvv287d+50ZfECNtHv119/vW3fvt1l5yKbRZcuXWoXXXRRUsAmBQoUcIGbvP7660n3q7n0jTfecFnDQYMGJdu2/tb948ePj/n/BAAAwu24Mm07duywW265xTUBSmS/rTx58tgjjzxil19+uVvK6qSTTsrUNhYvXuxuldVKSZm2aAFXRihw87JxGdnuo48+6rbrNZum9fwLL7zQDcyI3E/NXaflvfReeiyS/j7//PNdfzo1/6o/XXbatPewrd11yGoUz2cVTkj+f4H/UX/BRd0FG/UXbJsC8N2X6aBN/cQ6dOjgmvcUrCkLVrt2bdf5fsuWLfbdd9+5/llqelQ/tP/+97+uT1lGKbiRGjVqRF0iSxmpdevWZbYY9uabb0YNttLarnef95zI3zUAISUFhFWqVHH92tTcmy9fvjSf792voE3Py86gbfyavXb70kQ7ctQsbx6zZxqVtGtPTx5Uwr+ov+Ci7sJXf1dX9ucXP4L7+ct00KY+WgrK1Fw4ZswYa9asWdSmTU33oeepz5h+zyj1EZPURqCqT5n3nIzSiNJx48ZZzZo1Xd+2WLfr9WOL3K73u5ptU9vPI0eOuFGhaqZN7/nedmMtW1ojYCOpOTnyNtLmfYft9iWJduT//a2D946lidaktFn5Iv46+aRVjiCJZzlyqv6oC/NV3YWhPoJWhtTq7/ziJ7g+SEEpR1jqw0/fffEeTJjpoE2jKNUEOmHChGR9zSKpw/5bb73l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AwAACACCNgAAgAAgaAMAAAgAgjYAAIAAIGgDAAAIAII2AACAACBoAwAACACCNgAAgAAgaAMAAAgAgjYAAIAAIGgDAAAIAII2AACAACBoAwAACIDABG0rVqywLl26WOXKla18+fLWsmVLmzp1asyvX79+vY0cOdK6detmtWrVspIlS1qdOnXSfM3+/fvt8ccft/PPP9/KlCljVapUsc6dO9tnn30W9fk333yze9/UflLz7rvvWvPmzV25tI2uXbvaqlWrYi4bAAAIv3wWAAsXLrROnTpZoUKFrGPHjla0aFGbNm2a9erVyzZu3Gj9+/dP9z2WLl1qjz32mCUkJFjNmjVt69at6QZs7dq1s2XLltmZZ55pvXv3tp07d9r06dOtTZs2Nn78eHcbzU033WQlSpSIqWxPPvmkjRgxwipVquTKs2fPHpsyZYq1atXKPvjgA7vgggtieh8AABBuvg/aDh06ZAMGDLC8efPazJkzrW7duu7+wYMHW4sWLWz48OEuuFIGLi2NGze22bNn21lnnWWFCxd2mbO0jB071gVs7du3t1deecUFezJo0CBr1qyZ26emTZtasWLFombclDFLz9q1a+3RRx+1U0891ebOnZsU6PXp08cuvfRSt41PP/3UlR0AAORueYOQZVPTppolvYBNFOAMHDjQDhw4YBMnTkz3fapWrWrnnXeeC9hi8eGHH7rbe+65Jylgk2rVqlmPHj3sjz/+cJmw4/HWW2+5oPTOO+9MlplTOZVZ/PHHH13QBgAA4PugbfHixe5Wfb5SUqZNlixZEvftes2n0TJm3n0KKKP573//a6NGjbLnnnvOZfcUWPqpbAAAIHh83zyqJkSpUaPGMY+piVP929atWxf37ZYqVcq97y+//GJnnHFGssd0X+S+paSm20hly5a1MWPGJAViHr1e+x+tqdYrb2rbiNYHLxZeAJlaIBkUlMM/qAt/CUN9hKEMQjn840AOHVPqix9Pvg/adu3a5W6LFy8e9XH1KfOeE08anfrFF1+40aPq3+Y1kf7888+uWVM0MCFSo0aN3ACCc88910qXLm2bN2+2yZMn29NPP23du3d3Gbj69esnK9vJJ5+carm858RC2zp8+HDM5UtvIEZQUA7/oC78JQz1EYYyCOXInXWRkJBg1atXz11BW0655ZZb3JQiGsm5Zs0aN+jAGz2qkZ7ffvvtMQMEevbsmexvVZaybuXKlXMjXDV69e23386S/dV0IbHQVYYOWmX3ChQoYEFFOfyDuvCXMNRHGMoglMM/DoTkmPJ90OZl2FLLOO3evTvNOdAyS5muWbNmuUzbjBkzXLZNWTFNy6FsWuvWrV02LRbXXHONG3Wq0agpy5ZWubznZEUKVgdtvNO2OYFy+Ad14S9hqI8wlEEoh38UCPgx5fuBCGn17VLUrHnN4p1+9CgYfOSRR2z16tW2bds2++6772zYsGFuNKtENnWmlyLV6NB9+/YdUzbtf7R0bVp9+QAAQO7j+6BN86vJvHnzjnlMc5tFPie7TJo0yd1qWo5YbNiwwQVmKeeS82PZAACAP/k+aNNEtppjTR36lfHyqH+ZptVQqlNLU3m2bNni+qClHCSQGdGaLjUKdMGCBda2bVtr0KBB0v0KyjQYIKXExETXP04011wkzfeWL18+e+qpp5Ltr8r53nvvuZUbLrzwwuMuBwAACD7f92lTUDN69GiX1dKyUZHLWCmDpRURIudSU/OlJttVcKWgyLN9+3YbMmRI0t8HDx60HTt2uNULPFpOSlN9eGrXrm1NmjRxTZR58uRx86ppTVA1i2oOtkgKFDt06GANGzZ0z1d/t02bNtmcOXPcdjSQQSscRNJKCJq8V9vVdq666qqkZazk3//+N6shAACAYARtooBHgwK04LtGdCrgUkClAE1BXCwUDKVcOWHv3r3J7lMAFRm0XX311bZo0SI3ia6CNgVjChJvuOEGK1iwYLL30koJGnCghe213JaydCeccIJbt1QL3V977bXJVlbw3HXXXa7Z9IUXXrBXX33V8ufP77Jr9913n5199tmZ+G8BAIAwypOYmHg0p3cC2UeT8CpDqWlLgjyChnL4B3XhL2GojzCUQSiHf+wPyTHl+z5tAAAAIGgDAAAIBDJtAAAAAUDQBgAAEAAEbQAAAAFA0AYAABAABG0AAAABQNAGAAAQAARtAAAAAUDQBgAAEAAEbQAAAAFA0AYAABAABG0AAAABQNAGAAAQAARtAAAAAUDQBgAAEAAEbQAAAAFA0AYAABAABG0AAAABQNAGAAAQAARtAAAAAUDQBgAAEAAEbQAAAAFA0AYAABAABG0AAAABQNAGAAAQAARtAAAAAUDQBgAAEAAEbQAAAAEQmKBtxYoV1qVLF6tcubKVL1/eWrZsaVOnTo359evXr7eRI0dat27drFatWlayZEmrU6dOmq/Zv3+/Pf7443b++edbmTJlrEqVKta5c2f77LPPjnnu3r177Z133rF//vOfds4551jZsmXdvrZu3domT54c9f0XLVrk9iO1n7feeivm8gEAgHDLZwGwcOFC69SpkxUqVMg6duxoRYsWtWnTplmvXr1s48aN1r9//3TfY+nSpfbYY49ZQkKC1axZ07Zu3ZpuwNauXTtbtmyZnXnmmda7d2/buXOnTZ8+3dq0aWPjx493t55PP/3UbrzxRjvppJOsWbNmdtVVV9m2bdvc8/v27eve54knnoi6rcaNG1uTJk2OuT+9oBIAAOQevg/aDh06ZAMGDLC8efPazJkzrW7duu7+wYMHW4sWLWz48OEuuFJWKy0KjGbPnm1nnXWWFS5c2GXO0jJ27FgXaLVv395eeeUVF+zJoEGDXFCmfWratKkVK1bM3X/KKafYiy++aB06dLACBQokvc+DDz7o9lPvpyyfsnApKWC79957M/X/AQAAuUPeIGTZ1LSpZkkvYJMSJUrYwIED7cCBAzZx4sR036dq1ap23nnnuYAtFh9++KG7veeee5ICNqlWrZr16NHD/vjjD/vggw+S7te+de3aNVnA5gVzygh62T4AAIBQZtoWL17sbps3b37MY8pgyZIlS+K+Xa/5VP3YUvLuU0D5j3/8I933yp8/v7uNDP4irVu3zp5//nnXJKv+esrg6RYAACAwQdvatWvdbY0aNY55TE2c6t+moCfeSpUq5d73l19+sTPOOCPZY7ovct/ScvjwYZcJzJMnj1188cVRnzNp0iT348mXL5/dcMMNruk3tUAvJQV8sVBmMvI2qCiHf1AX/hKG+ghDGYRy+MeBHDqm1Bc/VwVtu3btcrfFixeP+rj6lHnPiSeNTv3iiy/c6FH1R/OCp59//jlpVKcGJqTn4Ycftu+++85l5GrXrp3ssdKlS9vQoUOtVatWrk/evn377PPPP7dhw4a5zJsCPb0+Fps3b3YBYqzSG4gRFJTDP6gLfwlDfYShDEI5cmddJCQkWPXq1eP6nnkSExOPmo+pY//8+fPdlB/RCq/pOzTdxq+//pqh91WWTv3Nvv7666iP79692y699FL74Ycf3OAFNVl6o0crVapk3377rZ1++ukuyErNq6++6vrdqb+b+sgpKxjrQaWBE4mJ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AUAGVaxY0f3IoUOHbNeuXbZ27Vr79ttvbeLEiXbPPffY0KFDrXfv3nH7306YMMEFjJUrVyZoA3IpgjYAyKAePXrYvffem+y+gwcP2ueff27PPfecffTRRzZw4EBbs2aNPfroo/x/AcQFfdoAIA7y589vjRs3dpm2Bx980N33n//8x6ZPn87/F0BcELQBQJwpy3bxxRe73x977LFkj3311Vf28MMPW6tWrax27dp28sknW7Vq1ezKK690Ad/Ro0eTPX/RokVWsmTJpL50t956q/vb+1Eft5RWrVplN910k9WpU8fKlCnjmlSvuOIK1y/uyJEj1DcQUDSPAkAWuPHGG23BggX2zTff2IYNG6xSpUru/gEDBrigSoMXypYt64KqLVu2uOBMP3PnzrWXX3456X30vAsuuMC+++4713euRo0aLtDzKPCLNHr0aPvXv/7lgr9ixYrZaaedZn/++ad9+umn7ufDDz+08ePHW0JCAvUOBAxBGwBkgQsvvNDy5MnjgqcvvvgiKWhTpuzMM888JthasWKFXX/99TZ58mSXFevUqZO7v169ejZr1qykkavK4qlPXTRTpkxxTbMlSpRwfem6du1qefPmTXr/vn372syZM+2pp56ywYMHU+9AwNA8CgBZQE2XynTJ77//nnR/ly5djgnYpEGDBi6YEjWTZpRGsSrDJhoM0b1796SAzXv/V1991QWSY8aMsQMHDmSqXAByDpk2AMgiRYsWdU2ae/bsSXa/5ltTVkz927Zv354UQP3999/udvXq1Rne1vLly10zrJpb1T8umrPPPttl/LR9NdE2bNgwU+UCkDMI2gAgi3jBmvqleTSiVE2YaWW6duzYkeFtqe+c/PXXX3b55Zen+jz1b5NNmzZleBsAchZBGwBkAQVHyrKJVksQzeOmiXdF/dfUhFm9enXXjKqBAT///LPLhqmpM6MSExPdrbb52Wefpfv8ffv2ZXgbAHIWQRsAZIGlS5cm/X7eeecl66vWrl07e+KJJ+KSYfOccMIJ7rZRo0ZuhCiA8GEgAgBkgRdffDFp9GeFChXc77/88ktSYBWNRpmmRgMI0uINbvjhhx+Yiw0IKYI2AIizUaNG2cKFC93vd999d9L9hQsXdrdbt2495jX79++3l156KdX39BagV5+11KYYKVeunMvWvfHGG8ddBgD+Q9AGAHGgfmhqElU/tYceesjd169fP2vdunXSc7TMlWjyXM2b5tm2bZtdd911aQ4O0KoJogl4o61qUKBAgaTtag62559//pgATwMjPvjgA+vfv/9xlxdA9suTmJiYfM0UAEBU3gS3FStWdD9y+PBh1/lf02h4QZImt1UApUAs0t69e6158+b2448/uuZOrW6gDNr333/v5lRTP7fbbrst2cACz5dffmmXXnqpC9jKly/vlqbS4AUtVRW5KP0LL7xgDzzwgAsiCxUqZKeeeqq71dQiap7V6zXtx9dff00tAwFD0AYAGQzaUma4NKWH5kerW7euNW3a1Nq3b5/UFJqSmi+19qgGC/zxxx920kknuT5ud955pxtFqj5w0YI2+eijj9zEuAq4du/e7QIwZe+0ykGkNWvW2NixY10T7caNG938b9rO6aef7gK/tm3buoARQLAQtAEAAAQAfdoAAAACgKANAAAgAAjaAAAAAoCgDQAAIAAI2gAAAAKAoA0AACAACNoAAAACgKANAAAgAAjaAAAAAoCgDQAAIAAI2gAAAAKAoA0AACAACNoAAAACgKANAADA/O//A52kiNOH6tUZAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -655,13 +654,33 @@ } ], "source": [ - "# driving = bd.get_node(database=\"foreground\", name=\"driving an electric vehicle\")\n", - "# ev_to_driving = next(exc for exc in driving.technosphere() if exc.input[\"name\"] == \"production of an electric vehicle\")\n", + "driving = bd.get_node(database=\"foreground\", name=\"driving an electric vehicle\")\n", + "ev_to_driving = next(exc for exc in driving.technosphere() if exc.input[\"name\"] == \"electricity\")\n", "\n", - "# print(ev_to_driving[\"temporal_distribution\"].date) # original resolution was timedelta64[M], which gets converted to seconds\n", - "# print(ev_to_driving[\"temporal_distribution\"].amount)\n", + "print(ev_to_driving[\"temporal_distribution\"].date) # original resolution was timedelta64[M], which gets converted to seconds\n", + "print(ev_to_driving[\"temporal_distribution\"].amount)\n", "\n", - "# ev_to_driving[\"temporal_distribution\"].graph(resolution=\"M\")" + "ev_to_driving[\"temporal_distribution\"].graph(resolution=\"M\")" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "TemporalDistribution instance with 3 values and total: 1" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ev_to_driving[\"temporal_distribution\"]" ] }, { @@ -680,7 +699,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, "metadata": {}, "outputs": [], "source": [ @@ -707,7 +726,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 41, "metadata": {}, "outputs": [], "source": [ @@ -723,7 +742,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 42, "metadata": {}, "outputs": [], "source": [ @@ -748,7 +767,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, "metadata": {}, "outputs": [], "source": [ @@ -764,7 +783,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 44, "metadata": {}, "outputs": [], "source": [ @@ -773,9 +792,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 45, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[32m2026-03-24 09:57:42.759\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mbw_timex.timex_lca\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m115\u001b[0m - \u001b[1mInitializing TimexLCA object...\u001b[0m\n", + "\u001b[32m2026-03-24 09:57:42.760\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mbw_timex.timex_lca\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m131\u001b[0m - \u001b[1mCalculating base LCA...\u001b[0m\n", + "\u001b[32m2026-03-24 09:57:42.778\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mbw_timex.timex_lca\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m148\u001b[0m - \u001b[1mCollecting node infos...\u001b[0m\n" + ] + } + ], "source": [ "tlca = TimexLCA({driving: 1}, method, database_dates)" ] @@ -798,9 +827,42 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 46, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[32m2026-03-24 09:57:46.112\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mbw_timex.timex_lca\u001b[0m:\u001b[36mbuild_timeline\u001b[0m:\u001b[36m233\u001b[0m - \u001b[1mNo edge filter function provided. Skipping all edges in background databases.\u001b[0m\n", + "\u001b[32m2026-03-24 09:57:46.115\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mbw_timex.timex_lca\u001b[0m:\u001b[36mbuild_timeline\u001b[0m:\u001b[36m249\u001b[0m - \u001b[1mCreating activity time mapping...\u001b[0m\n", + "\u001b[32m2026-03-24 09:57:46.116\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mbw_timex.timeline_builder\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m100\u001b[0m - \u001b[1mTraversing supply chain graph...\u001b[0m\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Starting graph traversal\n", + "Calculation count: 9\n" + ] + }, + { + "ename": "ValueError", + "evalue": "`td_producer.date` must have dtype `timedelta64[s]`, but got `datetime64[s]`", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mValueError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[46]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m \u001b[43mtlca\u001b[49m\u001b[43m.\u001b[49m\u001b[43mbuild_timeline\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtemporal_grouping\u001b[49m\u001b[43m=\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mmonth\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/Documents/prospective_dynamic_lca/bw_timex/bw_timex/timex_lca.py:263\u001b[39m, in \u001b[36mTimexLCA.build_timeline\u001b[39m\u001b[34m(self, starting_datetime, temporal_grouping, interpolation_type, edge_filter_function, cutoff, max_calc, graph_traversal, *args, **kwargs)\u001b[39m\n\u001b[32m 258\u001b[39m \u001b[38;5;28mself\u001b[39m.add_static_activities_to_activity_time_mapping()\n\u001b[32m 260\u001b[39m \u001b[38;5;66;03m# Create timeline builder that does the graph traversal (similar to bw_temporalis) and\u001b[39;00m\n\u001b[32m 261\u001b[39m \u001b[38;5;66;03m# extracts all edges with their temporal information. Can later be used to build a timeline\u001b[39;00m\n\u001b[32m 262\u001b[39m \u001b[38;5;66;03m# with the TimelineBuilder.build_timeline() method.\u001b[39;00m\n\u001b[32m--> \u001b[39m\u001b[32m263\u001b[39m \u001b[38;5;28mself\u001b[39m.timeline_builder = \u001b[43mTimelineBuilder\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 264\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mbase_lca\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 265\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mstarting_datetime\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 266\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43medge_filter_function\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 267\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mdatabase_dates\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 268\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mdatabase_dates_static\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 269\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mactivity_time_mapping\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 270\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mnode_collections\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 271\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mnodes\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 272\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mtemporal_grouping\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 273\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43minterpolation_type\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 274\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mcutoff\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 275\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mmax_calc\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 276\u001b[39m \u001b[43m \u001b[49m\u001b[43mgraph_traversal\u001b[49m\u001b[43m=\u001b[49m\u001b[43mgraph_traversal\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 277\u001b[39m \u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 278\u001b[39m \u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 279\u001b[39m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 281\u001b[39m \u001b[38;5;28mself\u001b[39m.timeline = \u001b[38;5;28mself\u001b[39m.timeline_builder.build_timeline()\n\u001b[32m 283\u001b[39m \u001b[38;5;28mself\u001b[39m.add_interdatabase_activity_mapping_from_timeline()\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/Documents/prospective_dynamic_lca/bw_timex/bw_timex/timeline_builder.py:124\u001b[39m, in \u001b[36mTimelineBuilder.__init__\u001b[39m\u001b[34m(self, base_lca, starting_datetime, edge_filter_function, database_dates, database_dates_static, activity_time_mapping, node_collections, nodes, temporal_grouping, interpolation_type, cutoff, max_calc, graph_traversal, *args, **kwargs)\u001b[39m\n\u001b[32m 120\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m 121\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[32m 122\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mUnknown graph_traversal \u001b[39m\u001b[33m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mgraph_traversal\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m'\u001b[39m\u001b[33m. Use \u001b[39m\u001b[33m'\u001b[39m\u001b[33mpriority\u001b[39m\u001b[33m'\u001b[39m\u001b[33m or \u001b[39m\u001b[33m'\u001b[39m\u001b[33mbfs\u001b[39m\u001b[33m'\u001b[39m\u001b[33m.\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 123\u001b[39m )\n\u001b[32m--> \u001b[39m\u001b[32m124\u001b[39m \u001b[38;5;28mself\u001b[39m.edge_timeline = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43medge_extractor\u001b[49m\u001b[43m.\u001b[49m\u001b[43mbuild_edge_timeline\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/Documents/prospective_dynamic_lca/bw_timex/bw_timex/edge_extractor.py:199\u001b[39m, in \u001b[36mEdgeExtractor.build_edge_timeline\u001b[39m\u001b[34m(self)\u001b[39m\n\u001b[32m 181\u001b[39m td_producer = TemporalDistribution(\n\u001b[32m 182\u001b[39m date=np.array([\u001b[32m0\u001b[39m], dtype=\u001b[33m\"\u001b[39m\u001b[33mtimedelta64[Y]\u001b[39m\u001b[33m\"\u001b[39m),\n\u001b[32m 183\u001b[39m amount=np.array([td_producer]),\n\u001b[32m 184\u001b[39m )\n\u001b[32m 186\u001b[39m distribution = (\n\u001b[32m 187\u001b[39m td * td_producer\n\u001b[32m 188\u001b[39m ).simplify() \u001b[38;5;66;03m# convolution-multiplication of TemporalDistribution of consuming node (td) and consumed edge (edge) gives TD of producing node\u001b[39;00m\n\u001b[32m 190\u001b[39m timeline.append(\n\u001b[32m 191\u001b[39m Edge(\n\u001b[32m 192\u001b[39m edge_type=edge_type,\n\u001b[32m 193\u001b[39m distribution=distribution,\n\u001b[32m 194\u001b[39m leaf=leaf,\n\u001b[32m 195\u001b[39m consumer=node.activity_datapackage_id,\n\u001b[32m 196\u001b[39m producer=producer.activity_datapackage_id,\n\u001b[32m 197\u001b[39m td_producer=td_producer,\n\u001b[32m 198\u001b[39m td_consumer=td_parent,\n\u001b[32m--> \u001b[39m\u001b[32m199\u001b[39m abs_td_producer=\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mjoin_datetime_and_timedelta_distributions\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 200\u001b[39m \u001b[43m \u001b[49m\u001b[43mtd_producer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mabs_td\u001b[49m\n\u001b[32m 201\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m,\n\u001b[32m 202\u001b[39m abs_td_consumer=abs_td,\n\u001b[32m 203\u001b[39m temporal_evolution=temporal_evolution,\n\u001b[32m 204\u001b[39m )\n\u001b[32m 205\u001b[39m )\n\u001b[32m 206\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m leaf:\n\u001b[32m 207\u001b[39m heappush(\n\u001b[32m 208\u001b[39m heap,\n\u001b[32m 209\u001b[39m (\n\u001b[32m (...)\u001b[39m\u001b[32m 217\u001b[39m ),\n\u001b[32m 218\u001b[39m )\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/Documents/prospective_dynamic_lca/bw_timex/bw_timex/edge_extractor.py:267\u001b[39m, in \u001b[36mEdgeExtractor.join_datetime_and_timedelta_distributions\u001b[39m\u001b[34m(self, td_producer, td_consumer)\u001b[39m\n\u001b[32m 263\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[32m 264\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33m`td_consumer.date` must have dtype `datetime64[s]`, but got `\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtd_consumer.date.dtype\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m`\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 265\u001b[39m )\n\u001b[32m 266\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (td_producer.date.dtype == timedelta_type):\n\u001b[32m--> \u001b[39m\u001b[32m267\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[32m 268\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33m`td_producer.date` must have dtype `timedelta64[s]`, but got `\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtd_producer.date.dtype\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m`\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 269\u001b[39m )\n\u001b[32m 270\u001b[39m date = (\n\u001b[32m 271\u001b[39m td_consumer.date.reshape((-\u001b[32m1\u001b[39m, \u001b[32m1\u001b[39m)) + td_producer.date.reshape((\u001b[32m1\u001b[39m, -\u001b[32m1\u001b[39m))\n\u001b[32m 272\u001b[39m ).ravel()\n\u001b[32m 273\u001b[39m amount = np.array(\u001b[38;5;28mlen\u001b[39m(td_consumer) * [td_producer.amount]).ravel()\n", + "\u001b[31mValueError\u001b[39m: `td_producer.date` must have dtype `timedelta64[s]`, but got `datetime64[s]`" + ] + } + ], "source": [ "tlca.build_timeline(temporal_grouping=\"month\")" ] From eca5bed6227f562b44bb645c0f86db350c55c040 Mon Sep 17 00:00:00 2001 From: Arthur Jakobs Date: Tue, 24 Mar 2026 11:52:40 +0100 Subject: [PATCH 5/5] remove datetime distributions --- .../example_electric_vehicle_standalone.xlsx | Bin 14618 -> 14661 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/notebooks/data/example_electric_vehicle_standalone.xlsx b/notebooks/data/example_electric_vehicle_standalone.xlsx index d83520b3213bed7db742b67446f640470da87934..ecbfbd138199a29b6a16a0b4b12d6c3a84f933e4 100644 GIT binary patch delta 4819 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 E51