From 8ab718162ce82f269913bcbfca620bf47b4284e0 Mon Sep 17 00:00:00 2001
From: Rivera Andres <andres.rivera@stud.tu-darmstadt.de>
Date: Tue, 29 Oct 2024 22:45:35 +0000
Subject: [PATCH] Ich habe alle Datasheets geoffnet

---
 ausarbeitung.ipynb | 171 ++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 152 insertions(+), 19 deletions(-)

diff --git a/ausarbeitung.ipynb b/ausarbeitung.ipynb
index 690244d..7a74ab8 100644
--- a/ausarbeitung.ipynb
+++ b/ausarbeitung.ipynb
@@ -23,7 +23,9 @@
    "cell_type": "markdown",
    "id": "14e306b5",
    "metadata": {},
-   "source": []
+   "source": [
+    "Mit welchen Konfigurationen lässt sich die Qualität eines Elektrofahrzeugs in Bezug auf Aufwand, Verfügbarkeit und Akzeptanz optimieren?"
+   ]
   },
   {
    "cell_type": "markdown",
@@ -46,7 +48,9 @@
    "cell_type": "markdown",
    "id": "30ddd8dc",
    "metadata": {},
-   "source": []
+   "source": [
+    "Bestimmen Sie, wie sich verschiedene Elemente des Fahrzeugs (z. B. das Antriebssystem und die Art der Teile) auf die Qualitäts-KPIs auswirken, um das Design in zukünftigen Iterationen zu optimieren."
+   ]
   },
   {
    "cell_type": "markdown",
@@ -126,7 +130,60 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "# initialize components"
+    "# initialize components\n",
+    "\n",
+    "with open(\"datasheets/axles.json\") as json_file:\n",
+    "    axles_data = json.load(json_file)\n",
+    "with open(\"datasheets/motors.json\") as json_file:\n",
+    "    motors_data = json.load(json_file)\n",
+    "with open(\"datasheets/gears.json\") as json_file:\n",
+    "    gears_data = json.load(json_file)\n",
+    "with open(\"datasheets/batteries.json\") as json_file:\n",
+    "    batteries_data = json.load(json_file)\n",
+    "with open(\"datasheets/frame.json\") as json_file:\n",
+    "    frame_data = json.load(json_file)\n",
+    "with open(\"datasheets/tires.json\") as json_file:\n",
+    "    tires_data = json.load(json_file)\n",
+    "with open(\"datasheets/rims.json\") as json_file:\n",
+    "    rims_data = json.load(json_file)\n",
+    "\n",
+    "battery = LegoComponent(\"battery\", batteries_data[\"8881-1\"])\n",
+    "\n",
+    "green_base = LegoComponent(\"green base\", frame_data[\"39790\"])\n",
+    "\n",
+    "motor = LegoComponent(\"Motor\", motors_data[\"8883-1\"])\n",
+    "\n",
+    "axle_input = LegoComponent(\"axle input\", axles_data[\"32073\"])\n",
+    "\n",
+    "gear_1 = LegoComponent(\"gear 1\", gears_data[\"6589\"])\n",
+    "gear_2 = gear_1.clone(\"gear 2\")\n",
+    "\n",
+    "axle_side_1 = LegoComponent(\"axle side 1\", axles_data[\"50451\"])\n",
+    "axles=[axle_side_1]\n",
+    "for i in range (2,4):\n",
+    "       cloned_axle=axle_side_1.clone(f\"axle_side_{i}\")\n",
+    "       axles.append(cloned_axle)\n",
+    "\n",
+    "tire_1 = LegoComponent(\"tire 1\", tires_data[\"30699\"])\n",
+    "tires=[tire_1]\n",
+    "for i in range (2,5):\n",
+    "       cloned_tire=tire_1.clone(f\"tire_{i}\")\n",
+    "       tires.append(cloned_tire)\n",
+    "\n",
+    "rim_1 = LegoComponent(\"rim 1\", rims_data[\"56904\"])\n",
+    "rims=[rim_1]\n",
+    "for i in range (2,5):\n",
+    "       cloned_rim=rim_1.clone(f\"rim_{i}\")\n",
+    "       rims.append(cloned_rim)\n",
+    "\n",
+    "technic_bush_1 = LegoComponent(\"technic bush 1\", frame_data[\"32123\"])\n",
+    "technich_bushes=[technic_bush_1]\n",
+    "for i in range (2,7):\n",
+    "       cloned_technich_bush=technic_bush_1.clone(f\"technic_bush_{i}\")\n",
+    "       technich_bushes.append(cloned_technich_bush)\n",
+    "\n",
+    "\n",
+    "\n"
    ]
   },
   {
@@ -144,9 +201,50 @@
    "execution_count": 4,
    "id": "da2d141c",
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[LegoComponent(label='green base', **{'item number': 39790, 'item description': 'Technic, Liftarm, Modified Frame Thick 11 x 15 Open Center', 'category': 'frame', 'price [Euro]': 2.19, 'mass [g]': 12.96, 'environmental impact [kg CO2e /kg]': 11.93, 'delivery time [days]': 3, 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=39790', 'dimension [studs]': '11 x 15 x 1'})]\n",
+      "[LegoComponent(label='green base', **{'item number': 39790, 'item description': 'Technic, Liftarm, Modified Frame Thick 11 x 15 Open Center', 'category': 'frame', 'price [Euro]': 2.19, 'mass [g]': 12.96, 'environmental impact [kg CO2e /kg]': 11.93, 'delivery time [days]': 3, 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=39790', 'dimension [studs]': '11 x 15 x 1'}), LegoComponent(label='axle side 1', **{'item number': 50451, 'item description': 'Axle 16 studs', 'category': 'axle', 'price [Euro]': 0.75, 'mass [g]': 2.37, 'environmental impact [kg CO2e /kg]': 11.03, 'delivery time [days]': 3, 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=50451', 'dimension [studs]': 16}), LegoComponent(label='rim 1', **{'item number': 56904, 'item description': 'Wheel 30mm D. x 14mm', 'category': 'rim', 'related items': 30699, 'diameter [mm]': 30.0, 'price [Euro]': 0.01, 'mass [g]': 4.1, 'environmental impact [kg CO2e /kg]': 32.06, 'delivery time [days]': 5, 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=56904'}), LegoComponent(label='tire 1', **{'item number': 30699, 'item description': 'Tire 43.2 x 14 Solid', 'category': 'tire', 'related items': 56904, 'inner diameter [mm]': 30, 'outer diameter [mm]': 43.2, 'price [Euro]': 0.06, 'mass [g]': 8.25, 'environmental impact [kg CO2e /kg]': 8.97, 'delivery time [days]': 5, 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=30699'}), LegoComponent(label='rim_2', **{'item number': 56904, 'item description': 'Wheel 30mm D. x 14mm', 'category': 'rim', 'related items': 30699, 'diameter [mm]': 30.0, 'price [Euro]': 0.01, 'mass [g]': 4.1, 'environmental impact [kg CO2e /kg]': 32.06, 'delivery time [days]': 5, 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=56904'}), LegoComponent(label='tire_2', **{'item number': 30699, 'item description': 'Tire 43.2 x 14 Solid', 'category': 'tire', 'related items': 56904, 'inner diameter [mm]': 30, 'outer diameter [mm]': 43.2, 'price [Euro]': 0.06, 'mass [g]': 8.25, 'environmental impact [kg CO2e /kg]': 8.97, 'delivery time [days]': 5, 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=30699'}), LegoComponent(label='technic bush 1', **{'item number': 32123, 'item description': 'Technic Bush 1/2 Smooth', 'category': 'frame', 'price [Euro]': 0.01, 'mass [g]': 0.01, 'environmental impact [kg CO2e /kg]': 11.93, 'delivery time [days]': 3, 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=4265c', 'dimension [studs]': 1}), LegoComponent(label='axle_side_3', **{'item number': 50451, 'item description': 'Axle 16 studs', 'category': 'axle', 'price [Euro]': 0.75, 'mass [g]': 2.37, 'environmental impact [kg CO2e /kg]': 11.03, 'delivery time [days]': 3, 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=50451', 'dimension [studs]': 16}), LegoComponent(label='technic_bush_2', **{'item number': 32123, 'item description': 'Technic Bush 1/2 Smooth', 'category': 'frame', 'price [Euro]': 0.01, 'mass [g]': 0.01, 'environmental impact [kg CO2e /kg]': 11.93, 'delivery time [days]': 3, 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=4265c', 'dimension [studs]': 1}), LegoComponent(label='axle_side_2', **{'item number': 50451, 'item description': 'Axle 16 studs', 'category': 'axle', 'price [Euro]': 0.75, 'mass [g]': 2.37, 'environmental impact [kg CO2e /kg]': 11.03, 'delivery time [days]': 3, 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=50451', 'dimension [studs]': 16}), LegoComponent(label='rim_3', **{'item number': 56904, 'item description': 'Wheel 30mm D. x 14mm', 'category': 'rim', 'related items': 30699, 'diameter [mm]': 30.0, 'price [Euro]': 0.01, 'mass [g]': 4.1, 'environmental impact [kg CO2e /kg]': 32.06, 'delivery time [days]': 5, 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=56904'}), LegoComponent(label='tire_3', **{'item number': 30699, 'item description': 'Tire 43.2 x 14 Solid', 'category': 'tire', 'related items': 56904, 'inner diameter [mm]': 30, 'outer diameter [mm]': 43.2, 'price [Euro]': 0.06, 'mass [g]': 8.25, 'environmental impact [kg CO2e /kg]': 8.97, 'delivery time [days]': 5, 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=30699'}), LegoComponent(label='rim_4', **{'item number': 56904, 'item description': 'Wheel 30mm D. x 14mm', 'category': 'rim', 'related items': 30699, 'diameter [mm]': 30.0, 'price [Euro]': 0.01, 'mass [g]': 4.1, 'environmental impact [kg CO2e /kg]': 32.06, 'delivery time [days]': 5, 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=56904'}), LegoComponent(label='tire_4', **{'item number': 30699, 'item description': 'Tire 43.2 x 14 Solid', 'category': 'tire', 'related items': 56904, 'inner diameter [mm]': 30, 'outer diameter [mm]': 43.2, 'price [Euro]': 0.06, 'mass [g]': 8.25, 'environmental impact [kg CO2e /kg]': 8.97, 'delivery time [days]': 5, 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=30699'}), LegoComponent(label='axle input', **{'item number': 32073, 'item description': 'Axle 5 studs', 'category': 'axle', 'price [Euro]': 0.001, 'mass [g]': 0.66, 'environmental impact [kg CO2e /kg]': 11.03, 'delivery time [days]': 3, 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P=32073', 'dimension [studs]': 5}), LegoComponent(label='Motor', **{'item number': '8883-1', 'item description': 'Power Functions M-Motor', 'category': 'motor', 'related items': '8881-1', 'idle current [mA]': 65, 'idle speed [rev per min]': 405, 'locking torque [Ncm]': 11, 'price [Euro]': 20, 'mass [g]': 35.0, 'environmental impact [kg CO2e /kg]': 15.84, 'delivery time [days]': 5, 'data source': 'https://www.bricklink.com/v2/catalog/catalogitem.page?S=8883-1', 'input voltage [V]': 9, 'dimensions [cm]': '13.8 x 11.9 x 2.3'})]\n"
+     ]
+    }
+   ],
    "source": [
-    "# aggregate components"
+    "# aggregate components\n",
+    "\n",
+    "#wheel_1=LegoAssembly(AggregationLayer.SUBASSEMBLY, \"wheel 1\", assembly_method=\"join lego blocks\")\n",
+    "#wheel_1.add([rim_1,tire_1])\n",
+    "\n",
+    "wheels = []\n",
+    "\n",
+    "for i in range(4):\n",
+    "    wheel = LegoAssembly(AggregationLayer.SUBASSEMBLY, f\"wheel_{i+1}\", assembly_method=\"join lego blocks\")\n",
+    "    wheel.add([rims[i], tires[i]])\n",
+    "    wheels.append(wheel)\n",
+    "\n",
+    "forefront_axle= LegoAssembly(AggregationLayer.ASSEMBLY, \"forefront axle\")\n",
+    "forefront_axle.add([wheels[0], axle_side_1, wheels[1]])\n",
+    "\n",
+    "mid_axle=LegoAssembly(AggregationLayer.ASSEMBLY, \"mid axle\")\n",
+    "mid_axle.add([technich_bushes[0], axles[2], technich_bushes[1]])\n",
+    "\n",
+    "tail_axle= LegoAssembly(AggregationLayer.ASSEMBLY, \"tail axle\")\n",
+    "tail_axle.add([wheels[2], axles[1], wheels[3]])\n",
+    "\n",
+    "drive_shaft=LegoAssembly(AggregationLayer.SUBASSEMBLY, \"driven shaft\")\n",
+    "drive_shaft.add([axle_input,motor])\n",
+    "\n",
+    "\n",
+    "\n",
+    "\n",
+    "auto=LegoAssembly(AggregationLayer.SYSTEM,\"auto\", manufacturer=\"LEGO\", comment=\"Speed of light\",)\n",
+    "auto.add([green_base,forefront_axle,mid_axle,tail_axle,drive_shaft])\n",
+    "\n",
+    "print(auto.get_component_list(max_depth=0))\n",
+    "# If it is set to -1 (default), all LegoComponents are listed:\n",
+    "print(auto.get_component_list())"
    ]
   },
   {
@@ -203,19 +301,54 @@
    "execution_count": 5,
    "id": "59eabafc",
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "You called the test function.\n"
+     ]
+    },
+    {
+     "ename": "TypeError",
+     "evalue": "unsupported operand type(s) for /: 'str' and 'float'",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[5], line 7\u001b[0m\n\u001b[1;32m      5\u001b[0m effort \u001b[38;5;241m=\u001b[39m calculation_rules\u001b[38;5;241m.\u001b[39mkpi_effort(auto)\n\u001b[1;32m      6\u001b[0m availability \u001b[38;5;241m=\u001b[39m calculation_rules\u001b[38;5;241m.\u001b[39mkpi_availability(auto)\n\u001b[0;32m----> 7\u001b[0m acceptance \u001b[38;5;241m=\u001b[39m \u001b[43mcalculation_rules\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkpi_acceptance\u001b[49m\u001b[43m(\u001b[49m\u001b[43mauto\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m      9\u001b[0m effort \u001b[38;5;241m=\u001b[39m kpi_effort(auto)\n\u001b[1;32m     10\u001b[0m availability \u001b[38;5;241m=\u001b[39m kpi_availability(auto)\n",
+      "File \u001b[0;32m~/work/quality-kpi/functions/calculation_rules.py:66\u001b[0m, in \u001b[0;36mkpi_acceptance\u001b[0;34m(system)\u001b[0m\n\u001b[1;32m     63\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(system, LegoAssembly):\n\u001b[1;32m     64\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mTipo no compatible \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mtype\u001b[39m(system)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m pasado a kpi_acceptance()\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 66\u001b[0m total_acceptance \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43msum\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[43mc\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mproperties\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mdimension [studs]\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mc\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mproperties\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mprice [Euro]\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mc\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43msystem\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_component_list\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m     67\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m total_acceptance\n",
+      "File \u001b[0;32m~/work/quality-kpi/functions/calculation_rules.py:66\u001b[0m, in \u001b[0;36m<genexpr>\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m     63\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(system, LegoAssembly):\n\u001b[1;32m     64\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mTipo no compatible \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mtype\u001b[39m(system)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m pasado a kpi_acceptance()\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 66\u001b[0m total_acceptance \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msum\u001b[39m((\u001b[43mc\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mproperties\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mdimension [studs]\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mc\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mproperties\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mprice [Euro]\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m) \u001b[38;5;28;01mfor\u001b[39;00m c \u001b[38;5;129;01min\u001b[39;00m system\u001b[38;5;241m.\u001b[39mget_component_list(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m))\n\u001b[1;32m     67\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m total_acceptance\n",
+      "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for /: 'str' and 'float'"
+     ]
+    }
+   ],
    "source": [
-    "# calculate the KPIs for your car"
+    "# calculate the KPIs for your car\n",
+    "\n",
+    "calculation_rules.test_function()\n",
+    "\n",
+    "effort = calculation_rules.kpi_effort(auto)\n",
+    "availability = calculation_rules.kpi_availability(auto)\n",
+    "acceptance = calculation_rules.kpi_acceptance(auto)\n",
+    "\n",
+    "effort = kpi_effort(auto)\n",
+    "availability = kpi_availability(auto)\n",
+    "acceptance = kpi_acceptance(auto)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": null,
    "id": "c774b381",
    "metadata": {},
    "outputs": [],
    "source": [
-    "# print your KPIs"
+    "# print your KPIs\n",
+    "\n",
+    "print(\"Total effort:\", effort)\n",
+    "print(\"Total availability:\", availability)\n",
+    "print(\"Total acceptance\", acceptance)"
    ]
   },
   {
@@ -228,7 +361,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": null,
    "id": "d518275f",
    "metadata": {},
    "outputs": [],
@@ -322,7 +455,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": null,
    "id": "c35de753",
    "metadata": {},
    "outputs": [],
@@ -332,7 +465,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": null,
    "id": "0b7336fb",
    "metadata": {},
    "outputs": [],
@@ -342,7 +475,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": null,
    "id": "fb445ea0",
    "metadata": {},
    "outputs": [],
@@ -361,7 +494,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": null,
    "id": "762a1e93",
    "metadata": {},
    "outputs": [],
@@ -371,7 +504,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 12,
+   "execution_count": null,
    "id": "1ed67328",
    "metadata": {},
    "outputs": [],
@@ -389,7 +522,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
+   "execution_count": null,
    "id": "05d9d6f7",
    "metadata": {},
    "outputs": [],
@@ -411,7 +544,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
+   "execution_count": null,
    "id": "b0f93e22",
    "metadata": {},
    "outputs": [],
@@ -474,7 +607,7 @@
  "metadata": {
   "hide_input": false,
   "kernelspec": {
-   "display_name": ".venv",
+   "display_name": "Python 3 (ipykernel)",
    "language": "python",
    "name": "python3"
   },
@@ -488,7 +621,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.9.13"
+   "version": "3.11.9"
   },
   "varInspector": {
    "cols": {
-- 
GitLab