diff --git a/jupyter_mentor/educator_course_overview.py b/jupyter_mentor/educator_course_overview.py index 0e50c21..2ea7b8d 100644 --- a/jupyter_mentor/educator_course_overview.py +++ b/jupyter_mentor/educator_course_overview.py @@ -19,14 +19,12 @@ def __init__(self, file_viewer): # File Upload button self.file_upload = FileUpload(accept='', multiple=False) - self.file_upload_button = Button(description='Upload') # global file viewer (that has model) self.file_viewer = file_viewer # Course overview text - self.course_overview_label = Label('Course Overview:') - self.course_overview_text = Textarea(placeholder='Enter course overview') + self.course_overview_text = v.TextField(label='Course Overview:', placeholder='Enter course overview') # AI Guidelines text self.ai_guidelines_label = Label('AI Guidelines:') @@ -40,21 +38,30 @@ def __init__(self, file_viewer): # Open-ended response textbox - self.open_ended_label = Label('Open-ended Response:') - self.open_ended_text = Textarea(placeholder='Enter open-ended response') + self.open_ended_text = v.TextField(label='Open-ended Response:', placeholder='Enter open-ended query') # Next button self.next_button = Button(description='Next') + + #Header + self.header = v.Container(children=[ + v.Html( + tag='h1', + attributes={'title': 'a title'}, + children=['Educator Course Overview'] + ) + ]) + # Arrange widgets vertically self.children = [ - HTML('

Course Overview

'), # Heading - HBox([self.file_upload, self.file_upload_button]), # File upload button + self.header, # Heading + HBox([self.file_upload]), # File upload button self.file_viewer, - self.course_overview_label, self.course_overview_text, # Course overview + self.course_overview_text, # Course overview self.ai_guidelines_label, # AI Guidelines VBox([self.step_by_step_checkbox, self.metaphor_checkbox, self.hints_checkbox, self.ai_guided_questions_checkbox]), # Binary features checkboxes - self.open_ended_label, self.open_ended_text, # Open-ended response + self.open_ended_text, # Open-ended response HBox([self.next_button], layout={'justify_content': 'flex-end'}), ] diff --git a/jupyter_mentor/educator_profile.py b/jupyter_mentor/educator_profile.py index 30a1df5..442043c 100644 --- a/jupyter_mentor/educator_profile.py +++ b/jupyter_mentor/educator_profile.py @@ -5,6 +5,7 @@ # %% ../nbs/04_educator_profile.ipynb 1 from ipywidgets import VBox, HBox, HTML, Text, Button, Label +import ipyvuetify as v # %% ../nbs/04_educator_profile.ipynb 2 class EducatorProfileView(VBox): @@ -13,24 +14,31 @@ def __init__(self): super().__init__() # Username input - self.username_label = Label('Name:') - self.username_input = Text(placeholder='Enter your name') + + self.username_input = v.TextField(label='Name:', placeholder='Enter your first and last name') - # Password input - self.key_label = Label('Educator:') - self.key_input = Text(placeholder='Enter Your Level', password=True) + # Eductor Level input + self.key_input = v.Select( + label='Educator Level', + items=['Elementary School', 'Middle School', 'High School', 'College']) - # Next button + # Next button self.next_button = Button(description='Next') - # Arrange labels and inputs horizontally - self.username_box = HBox([self.username_label, self.username_input]) - self.key_box = HBox([self.key_label, self.key_input]) + #Header + self.header = v.Container(children=[ + v.Html( + tag='h1', + attributes={'title': 'a title'}, + children=['Educator User Profile'] + ) + ]) + # Arrange widgets vertically self.children = [ - HTML('

User Profile

'), # Heading - self.username_box, # Username label and input box - self.key_box, # Password label and input box + self.header, # Heading + self.username_input, # Username label and input box + self.key_input, # Password label and input box HBox([self.next_button], layout={'justify_content': 'flex-end'}), # Login button aligned to the right ] diff --git a/jupyter_mentor/login.py b/jupyter_mentor/login.py index 115d5ab..e0f869d 100644 --- a/jupyter_mentor/login.py +++ b/jupyter_mentor/login.py @@ -16,24 +16,28 @@ def __init__(self): super().__init__() # Username input - self.username_label = Label('Username:') - self.username_input = Text(placeholder='Enter username') + self.username_input = v.TextField(label='Username:', placeholder='Enter username') - # Password input - self.key_label = Label('API Key:') - self.key_input = Text(placeholder='Enter API key', password=True) + # Password input + self.key_input = v.TextField(label='API Key:', placeholder='Enter API key') # Login button self.login_button = Button(description='Login') - - # Arrange labels and inputs horizontally - self.username_box = HBox([self.username_label, self.username_input]) - self.key_box = HBox([self.key_label, self.key_input]) + + #Header + self.header = v.Container(children=[ + v.Html( + tag='h1', + attributes={'title': 'a title'}, + children=['Log In'] + ) + ]) + # Arrange widgets vertically self.children = [ - HTML('

Login

'), # Heading - self.username_box, # Username label and input box - self.key_box, # Password label and input box + self.header, # Heading + self.username_input, # Username label and input box + self.key_input, # Password label and input box HBox([self.login_button], layout={'justify_content': 'flex-end'}), # Login button aligned to the right ] diff --git a/jupyter_mentor/student_profile.py b/jupyter_mentor/student_profile.py index 2142027..fa12833 100644 --- a/jupyter_mentor/student_profile.py +++ b/jupyter_mentor/student_profile.py @@ -17,49 +17,51 @@ def __init__(self): # Username input - self.username_label = Label('Name/ID:') - self.username_input = Text(placeholder='Enter your name') + self.username_input = v.TextField(label='Name:', placeholder='Enter username') + # School input - self.school_label = Label('School/College:') - self.school_input = Text(placeholder='Enter Your School', password=True) + self.school_input = v.TextField(label='School:', placeholder='Enter your school') # Year input - self.year_label = Label('Enter your Grade Level:') self.year_input = v.Select(clearable=True, label='Grade Level', items=['Freshman', 'Sophomore', 'Junior', 'Senior'], value='') # Major input - self.major_label = Label('Major:') - self.major_input = Text(placeholder='Enter Your Major', password=True) + self.major_input = v.TextField(label='Major:', placeholder='Enter your major') # Minors/Certificates input - self.minor_label = Label('Minors/Certificates:') - self.minor_input = Text(placeholder='Enter Your Minors and/or Certificates', password=True) + self.minor_input = v.TextField(label='Minors/Certificates:', placeholder='Enter your minors and/or certificates') # Interests input - self.interests_label = Label('List your outside interests:') - self.interests_input = Textarea(placeholder='Enter your outside interests', password=True) + self.interests_input = v.TextField(label='Outside Interests:', placeholder='Enter your outside interests') + # Next button self.next_button = Button(description='Next') - - # Arrange labels and inputs horizontally - self.username_box = HBox([self.username_label, self.username_input]) - self.school_box = HBox([self.school_label, self.school_input]) - self.year_box = HBox([self.year_label, self.year_input]) - self.major_box = HBox([self.major_label, self.major_input]) - self.minor_box = HBox([self.minor_label, self.minor_input]) - self.interests_box = HBox([self.interests_label, self.interests_input]) - - # Arrange widgets vertically + + + #Header + self.header = v.Container(children=[ + v.Html( + tag='h1', + attributes={'title': 'a title'}, + children=['Student Profile'] + ), + + v.Icon(children=['mdi-account']) + + + ]) + + # Arrange widgets vertically self.children = [ - HTML('

Student User Profile

'), # Heading - self.username_box, # Username label and input box - self.school_box, # Password label and input box - self.year_box, - self.major_box, - self.minor_box, - self.interests_box, + self.header, # Heading + self.username_input, # Username label and input box + self.school_input, # Password label and input box + self.year_input, + self.major_input, + self.minor_input, + self.interests_input, HBox([self.next_button], layout={'justify_content': 'flex-end'}), # Login button aligned to the right ] diff --git a/nbs/01_login.ipynb b/nbs/01_login.ipynb index 32266b9..25c88e5 100644 --- a/nbs/01_login.ipynb +++ b/nbs/01_login.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "id": "f561c615-c749-46ad-be05-1c23b4895b1c", "metadata": {}, "outputs": [], @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "id": "543f060f-5d9b-4b76-9354-f8483575b468", "metadata": {}, "outputs": [], @@ -22,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, "id": "112bc93b-c8cb-4576-87e9-045e953979d0", "metadata": {}, "outputs": [], @@ -36,7 +36,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 57, "id": "7a9ea954-5bcd-4871-87a6-fe01fc3590f3", "metadata": {}, "outputs": [], @@ -48,35 +48,55 @@ " super().__init__()\n", " \n", " # Username input\n", - " self.username_label = Label('Username:')\n", - " self.username_input = Text(placeholder='Enter username')\n", + " self.username_input = v.TextField(label='Username:', placeholder='Enter username')\n", " \n", - " # Password input\n", - " self.key_label = Label('API Key:')\n", - " self.key_input = Text(placeholder='Enter API key', password=True)\n", + " # Password input \n", + " self.key_input = v.TextField(label='API Key:', placeholder='Enter API key')\n", " \n", " # Login button\n", " self.login_button = Button(description='Login')\n", - " \n", - " # Arrange labels and inputs horizontally\n", - " self.username_box = HBox([self.username_label, self.username_input])\n", - " self.key_box = HBox([self.key_label, self.key_input])\n", + "\n", + " #Header\n", + " self.header = v.Container(children=[\n", + " v.Html(\n", + " tag='h1',\n", + " attributes={'title': 'a title'},\n", + " children=['Log In']\n", + " )\n", + " ])\n", + "\n", " \n", " # Arrange widgets vertically\n", " self.children = [\n", - " HTML('

Login

'), # Heading\n", - " self.username_box, # Username label and input box\n", - " self.key_box, # Password label and input box\n", + " self.header, # Heading\n", + " self.username_input, # Username label and input box\n", + " self.key_input, # Password label and input box\n", " HBox([self.login_button], layout={'justify_content': 'flex-end'}), # Login button aligned to the right\n", - " ]\n" + " ]" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 58, "id": "6e8d6319-0a74-4021-b604-cf66c4656cf9", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "9094a779ce6a4c4588a978fb5d47e717", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Login(children=(Container(children=[Html(attributes={'title': 'a title'}, children=['Log In'], layout=None, ta…" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "main = Login()\n", "main" @@ -84,7 +104,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 59, "id": "94fce144-391e-4917-86ea-d8e8fde8c3ca", "metadata": {}, "outputs": [], @@ -92,13 +112,41 @@ "#| hide\n", "import nbdev; nbdev.nbdev_export()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ebb79ca1-824c-4eba-970b-83fa04b4af7a", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3f26512b-9376-45c0-aa0a-51fd82356acb", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "python3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.19" } }, "nbformat": 4, diff --git a/nbs/04_educator_course_overview.ipynb b/nbs/04_educator_course_overview.ipynb index c2463c6..953892c 100644 --- a/nbs/04_educator_course_overview.ipynb +++ b/nbs/04_educator_course_overview.ipynb @@ -41,14 +41,12 @@ "\n", " # File Upload button\n", " self.file_upload = FileUpload(accept='', multiple=False)\n", - " self.file_upload_button = Button(description='Upload')\n", "\n", " # global file viewer (that has model)\n", " self.file_viewer = file_viewer\n", " \n", " # Course overview text\n", - " self.course_overview_label = Label('Course Overview:')\n", - " self.course_overview_text = Textarea(placeholder='Enter course overview')\n", + " self.course_overview_text = v.TextField(label='Course Overview:', placeholder='Enter course overview')\n", " \n", " # AI Guidelines text\n", " self.ai_guidelines_label = Label('AI Guidelines:')\n", @@ -62,22 +60,31 @@ " \n", " \n", " # Open-ended response textbox\n", - " self.open_ended_label = Label('Open-ended Response:')\n", - " self.open_ended_text = Textarea(placeholder='Enter open-ended response')\n", + " self.open_ended_text = v.TextField(label='Open-ended Response:', placeholder='Enter open-ended query')\n", "\n", " # Next button\n", " self.next_button = Button(description='Next')\n", + "\n", + " #Header\n", + " self.header = v.Container(children=[\n", + " v.Html(\n", + " tag='h1',\n", + " attributes={'title': 'a title'},\n", + " children=['Educator Course Overview']\n", + " )\n", + " ])\n", + "\n", " \n", " # Arrange widgets vertically\n", " self.children = [\n", - " HTML('

Course Overview

'), # Heading\n", - " HBox([self.file_upload, self.file_upload_button]), # File upload button\n", + " self.header, # Heading\n", + " HBox([self.file_upload]), # File upload button\n", " self.file_viewer,\n", - " self.course_overview_label, self.course_overview_text, # Course overview\n", + " self.course_overview_text, # Course overview\n", " self.ai_guidelines_label, # AI Guidelines\n", " VBox([self.step_by_step_checkbox, self.metaphor_checkbox,\n", " self.hints_checkbox, self.ai_guided_questions_checkbox]), # Binary features checkboxes\n", - " self.open_ended_label, self.open_ended_text, # Open-ended response\n", + " self.open_ended_text, # Open-ended response\n", " HBox([self.next_button], layout={'justify_content': 'flex-end'}), \n", " ]" ] @@ -91,12 +98,12 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7d253ac8e62941d3abb3524b47d6ba5f", + "model_id": "bc686214fda847ccabdeac24bd13a0b9", "version_major": 2, "version_minor": 0 }, "text/plain": [ - "EducatorCourseOverview(children=(HTML(value='

Course Overview

'), HBox(children=(FileUpload(value=(), d…" + "EducatorCourseOverview(children=(Container(children=[Html(attributes={'title': 'a title'}, children=['Educator…" ] }, "execution_count": null, @@ -112,23 +119,7 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "55ed3ffc-d154-4b77-9117-6f580fbeb0fe", - "metadata": {}, - "outputs": [], - "source": [ - "v.Container(children=[\n", - " v.Html(\n", - " tag='h1',\n", - " attributes={'title': 'a title'},\n", - " children=['My heading']\n", - " )\n", - "])" - ] - }, - { - "cell_type": "code", - "execution_count": null, + "execution_count": 53, "id": "11872b33-a907-4acb-9537-0a2f4237d791", "metadata": {}, "outputs": [], diff --git a/nbs/04_educator_profile.ipynb b/nbs/04_educator_profile.ipynb index 3a42d09..cad684b 100644 --- a/nbs/04_educator_profile.ipynb +++ b/nbs/04_educator_profile.ipynb @@ -12,18 +12,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "id": "320f72d0-07c6-4e93-822b-e9796773b618", "metadata": {}, "outputs": [], "source": [ "#|export\n", - "from ipywidgets import VBox, HBox, HTML, Text, Button, Label" + "from ipywidgets import VBox, HBox, HTML, Text, Button, Label\n", + "import ipyvuetify as v" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "id": "bb1baa21-526c-4f9e-abf3-1c02234ad9d4", "metadata": {}, "outputs": [], @@ -35,47 +36,54 @@ " super().__init__()\n", "\n", " # Username input\n", - " self.username_label = Label('Name:')\n", - " self.username_input = Text(placeholder='Enter your name')\n", + " \n", + " self.username_input = v.TextField(label='Name:', placeholder='Enter your first and last name')\n", "\n", - " # Password input\n", - " self.key_label = Label('Educator:')\n", - " self.key_input = Text(placeholder='Enter Your Level', password=True)\n", + " # Eductor Level input\n", + " self.key_input = v.Select(\n", + " label='Educator Level',\n", + " items=['Elementary School', 'Middle School', 'High School', 'College'])\n", "\n", - " # Next button\n", + " # Next button\n", " self.next_button = Button(description='Next')\n", "\n", - " # Arrange labels and inputs horizontally\n", - " self.username_box = HBox([self.username_label, self.username_input])\n", - " self.key_box = HBox([self.key_label, self.key_input])\n", + " #Header\n", + " self.header = v.Container(children=[\n", + " v.Html(\n", + " tag='h1',\n", + " attributes={'title': 'a title'},\n", + " children=['Educator User Profile']\n", + " )\n", + " ])\n", + "\n", "\n", " # Arrange widgets vertically\n", " self.children = [\n", - " HTML('

User Profile

'), # Heading\n", - " self.username_box, # Username label and input box\n", - " self.key_box, # Password label and input box\n", + " self.header, # Heading\n", + " self.username_input, # Username label and input box\n", + " self.key_input, # Password label and input box\n", " HBox([self.next_button], layout={'justify_content': 'flex-end'}), # Login button aligned to the right\n", " ]" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "id": "0c047b0f-9b36-4d23-9328-db910776c52e", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2f1d33409b214c1cadd80ba4bca7340a", + "model_id": "78d39a1242d44a65a660cc0ba5507787", "version_major": 2, "version_minor": 0 }, "text/plain": [ - "EducatorProfileView(children=(HTML(value='

User Profile

'), HBox(children=(Label(value='Name:'), Text(v…" + "EducatorProfileView(children=(Container(children=[Html(attributes={'title': 'a title'}, children=['Educator Us…" ] }, - "execution_count": null, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -87,7 +95,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "id": "9affc3ac-57b5-40e7-a8e4-9c53424d3c84", "metadata": {}, "outputs": [], @@ -107,9 +115,21 @@ ], "metadata": { "kernelspec": { - "display_name": "python3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.19" } }, "nbformat": 4, diff --git a/nbs/12_student_profile.ipynb b/nbs/12_student_profile.ipynb index e16d4b9..f6b5f3a 100644 --- a/nbs/12_student_profile.ipynb +++ b/nbs/12_student_profile.ipynb @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 49, "id": "04513d03-ca81-4315-bd67-4a6e10cec378", "metadata": {}, "outputs": [], @@ -26,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 50, "id": "0c3f213a-6037-4df2-a402-b10e146f1794", "metadata": {}, "outputs": [], @@ -39,60 +39,78 @@ "\n", " \n", " # Username input\n", - " self.username_label = Label('Name/ID:')\n", - " self.username_input = Text(placeholder='Enter your name')\n", + " self.username_input = v.TextField(label='Name:', placeholder='Enter username')\n", + "\n", " \n", " # School input\n", - " self.school_label = Label('School/College:')\n", - " self.school_input = Text(placeholder='Enter Your School', password=True)\n", + " self.school_input = v.TextField(label='School:', placeholder='Enter your school')\n", "\n", " # Year input\n", - " self.year_label = Label('Enter your Grade Level:')\n", " self.year_input = v.Select(clearable=True, label='Grade Level', items=['Freshman', 'Sophomore', 'Junior', 'Senior'], value='')\n", "\n", " # Major input\n", - " self.major_label = Label('Major:')\n", - " self.major_input = Text(placeholder='Enter Your Major', password=True)\n", + " self.major_input = v.TextField(label='Major:', placeholder='Enter your major')\n", "\n", " # Minors/Certificates input\n", - " self.minor_label = Label('Minors/Certificates:')\n", - " self.minor_input = Text(placeholder='Enter Your Minors and/or Certificates', password=True)\n", + " self.minor_input = v.TextField(label='Minors/Certificates:', placeholder='Enter your minors and/or certificates')\n", "\n", " # Interests input\n", - " self.interests_label = Label('List your outside interests:')\n", - " self.interests_input = Textarea(placeholder='Enter your outside interests', password=True)\n", + " self.interests_input = v.TextField(label='Outside Interests:', placeholder='Enter your outside interests')\n", "\n", " \n", + " \n", " # Next button\n", " self.next_button = Button(description='Next')\n", - " \n", - " # Arrange labels and inputs horizontally\n", - " self.username_box = HBox([self.username_label, self.username_input])\n", - " self.school_box = HBox([self.school_label, self.school_input])\n", - " self.year_box = HBox([self.year_label, self.year_input])\n", - " self.major_box = HBox([self.major_label, self.major_input])\n", - " self.minor_box = HBox([self.minor_label, self.minor_input])\n", - " self.interests_box = HBox([self.interests_label, self.interests_input])\n", - " \n", - " # Arrange widgets vertically\n", + "\n", + "\n", + " #Header\n", + " self.header = v.Container(children=[\n", + " v.Html(\n", + " tag='h1',\n", + " attributes={'title': 'a title'},\n", + " children=['Student Profile']\n", + " ),\n", + "\n", + " v.Icon(children=['mdi-account'])\n", + "\n", + "\n", + " ])\n", + "\n", + " # Arrange widgets vertically\n", " self.children = [\n", - " HTML('

Student User Profile

'), # Heading\n", - " self.username_box, # Username label and input box\n", - " self.school_box, # Password label and input box\n", - " self.year_box,\n", - " self.major_box,\n", - " self.minor_box,\n", - " self.interests_box,\n", + " self.header, # Heading \n", + " self.username_input, # Username label and input box\n", + " self.school_input, # Password label and input box\n", + " self.year_input,\n", + " self.major_input,\n", + " self.minor_input,\n", + " self.interests_input,\n", " HBox([self.next_button], layout={'justify_content': 'flex-end'}), # Login button aligned to the right\n", " ]" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 51, "id": "11eb898f-c1c0-4651-ae5d-64270f663d2f", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "205463f0f2d3439f9845a542317c6d93", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "StudentProfile(children=(Container(children=[Html(attributes={'title': 'a title'}, children=['Student Profile'…" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "profile = StudentProfile()\n", "profile" @@ -100,7 +118,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 52, "id": "aaa187b8-594b-4ee4-9c35-c9c2faee67e8", "metadata": {}, "outputs": [], @@ -120,9 +138,21 @@ ], "metadata": { "kernelspec": { - "display_name": "python3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.19" } }, "nbformat": 4,