diff --git a/docs/assets/notebook-reference-chain.png b/docs/assets/notebook-reference-chain.png new file mode 100644 index 0000000..4a03eeb Binary files /dev/null and b/docs/assets/notebook-reference-chain.png differ diff --git a/notebooks/test/test-crop.ipynb b/notebooks/test/test-crop.ipynb new file mode 100644 index 0000000..6212a87 --- /dev/null +++ b/notebooks/test/test-crop.ipynb @@ -0,0 +1,443 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "18dfbc54-b95c-4d21-9c0a-a829e43a339c", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "end of score.\t\t overall amps:\u001b[m 0.0\n", + "\t overall samples out of range:\u001b[m 0\u001b[m\n", + "0 errors in performance\n", + "\u001b[m" + ] + } + ], + "source": [ + "from maelzel.core import *\n", + "from maelzel.core.synthevent import SynthEvent" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d6d978eb-492a-406d-a12f-a65073fe74a0", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": { + "image/png": { + "width": 781.5 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "sc = Chain([Note(m, 0.25) for m in range(60, 72)], offset=0)\n", + "sc.append(Chain([Note(m, 0.5) for m in range(60, 72)]))\n", + "sc.show()\n", + "# sc.play()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "c0e642cc-6a10-478f-b773-33bd105d6b92", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": { + "image/png": { + "width": 597.75 + } + }, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Chain - beat: 2.25, offset: 2.25, dur: 2.85
location beat offset dur name gliss dyn playargs info
0:2.25 2.25 (0) 0.25 4A F None -
0:2.5 2.5 (0.25) 0.25 4A# F None -
0:2.75 2.75 (0.5) 0.25 4B F None -
Chain - beat: 3, offset: None, dur: 2.1
location beat offset dur name gliss dyn playargs info
0:3 3 (0) 0.5 4C F None -
0:3.5 3.5 (0.5) 0.5 4C# F None -
1:0 4 (1) 0.5 4D F None -
1:0.5 4.5 (1.5) 0.5 4D# F None -
1:1 5 (2) 0.1 4E F None -" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sc2 = sc.cropped((0, 2.25), (1, 1.1))\n", + "sc2.show()\n", + "sc2.dump()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "da6c9b0f-6724-4b06-8821-8ee363305722", + "metadata": {}, + "outputs": [], + "source": [ + "struct = ScoreStruct(r'''\n", + "2/4, 60\n", + "2/4, 120\n", + "3/4, 72\n", + "''')\n", + "# struct.activate()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "b893683f-9b91-4cbc-8bec-a61a3b247009", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": { + "image/png": { + "width": 829.5 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "sc = Chain([Note(m+0.25, 0.25) for m in range(60, 72)], offset=1)\n", + "sc.append(Chain([Note(m, 0.5) for m in range(60, 72)]))\n", + "sc.setScoreStruct(struct)\n", + "# print(sc.scorestruct())\n", + "# sc.synthEvents(skip=struct.beat((2, 0.)), end=struct.beat((2, 2)), delay=3)\n", + "# evs = sc.synthEvents(skip=1.1, end=3, delay=0)\n", + "sc.show()\n", + "# SynthEvent.plotEvents(evs, linewidth=2, notenames=True)\n", + "# SynthEvent.dumpEvents(evs)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "aac62a0c-f254-48ba-8894-ce5e265753e0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Chain([4D↑:0.25♩, 4D♯↑:0.25♩, 4E↑:0.25♩, 4F↑:0.25♩, 4G♭↑:0.25♩, 4G↑:0.25♩, 4G♯↑:0.25♩, 4A↑:0.25♩, 4B♭↑:0.25♩, 4B↑:0.25♩, …], dur=6.75, offset=1.5)
\n", + " " + ], + "text/plain": [ + "Chain([4D↑:0.25♩, 4D♯↑:0.25♩, 4E↑:0.25♩, 4F↑:0.25♩, 4G♭↑:0.25♩, 4G↑:0.25♩, 4G♯↑:0.25♩, 4A↑:0.25♩, 4B♭↑:0.25♩, 4B↑:0.25♩, …], offset=3/2)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sc2 = sc.cropped(1.5, (3, 1.25))\n", + "sc2" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "e161be6c-776a-4531-aa59-8d516a933fa7", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\n", + "--Csound version 6.19 (double samples) Oct 16 2024\n", + "[commit: 937aa495e250d758efaa28e9697a8b75237c80cd]\n", + "\u001b[mlibsndfile-1.2.0\n", + "\u001b[msr = 48000.0,\u001b[m kr = 750.000,\u001b[m ksmps = 64\n", + "\u001b[m0dBFS level = 1.0,\u001b[m A4 tuning = 442.0\n", + "\u001b[maudio buffered in 256 sample-frame blocks\n", + "\u001b[mreading 2048-byte blks of shorts from adc:Built-in Audio Analog Stereo: (RAW)\n", + "writing 512 sample blks of 64-bit floats to dac:Built-in Audio Analog Stereo:\n", + "SECTION 1:\n", + "\u001b[m" + ] + } + ], + "source": [ + "session = getSession()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "562f1abe-18be-4c65-8489-f49f1b02e629", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "session.dumpInstrs()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3929b90c-c944-44cd-bb91-a0c3c32af81a", + "metadata": {}, + "outputs": [], + "source": [ + "defPresetSoundfont('piano1', " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2f2dc844-145f-4961-9223-49e760478408", + "metadata": {}, + "outputs": [], + "source": [ + "session.defInstr('reverb1'), r'''\n", + "|kfeedback=0.85|\n", + "a1, a2 monitor\n", + "...\n", + "outch 1, -a1 + awet1, 2, -a2 + awet2\n", + "''')" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "a67f1315-bab2-4a92-b19f-2d365a3a3ab8", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "410e391491ea4be7ad15bd926196a21b", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Button(description='Stop', style=ButtonStyle())" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1187a79efd90428691c27e415f70ef10", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "SynthGroup(synths=19)\n", + "

Instr: preset:.piano - 19 synths

\n", + "
p1startdurp4kposkgainidataidx_inumbpsibplenichanifadeinifadeoutipchintrp_ifadekindktranspipitchlagivel181920...
501.0064 𝍪1.5430.25000.51182310.020.020100.1-1062.25...
501.0065 𝍪1.7930.25000.51182310.020.020100.1-1063.25...
501.0066 𝍪2.0430.12500.51182310.020.020100.1-1064.25...
501.0067 𝍪2.1680.12500.51182310.020.020100.1-1065.25...
...
" + ], + "text/plain": [ + "SynthGroup(n=19)\n", + " Synth(𝍪 preset:.piano=501.0064 start=72.853 dur=0.250 p4=0.5 kpos=1 kgain=18 idataidx_=2 inumbps=3 ibplen=1 ichan=0.02 ifadein=0.02 ifadeout=0 ipchintrp_=1 ifadekind=0 ktransp=0.1 ipitchlag=-1 ivel=0 p18=62.25 p19=0.515178 …)\n", + " Synth(𝍪 preset:.piano=501.0065 start=73.103 dur=0.250 p4=0.5 kpos=1 kgain=18 idataidx_=2 inumbps=3 ibplen=1 ichan=0.02 ifadein=0.02 ifadeout=0 ipchintrp_=1 ifadekind=0 ktransp=0.1 ipitchlag=-1 ivel=0 p18=63.25 p19=0.515178 …)\n", + " Synth(𝍪 preset:.piano=501.0066 start=73.353 dur=0.125 p4=0.5 kpos=1 kgain=18 idataidx_=2 inumbps=3 ibplen=1 ichan=0.02 ifadein=0.02 ifadeout=0 ipchintrp_=1 ifadekind=0 ktransp=0.1 ipitchlag=-1 ivel=0 p18=64.25 p19=0.515178 …)\n", + " Synth(𝍪 preset:.piano=501.0067 start=73.478 dur=0.125 p4=0.5 kpos=1 kgain=18 idataidx_=2 inumbps=3 ibplen=1 ichan=0.02 ifadein=0.02 ifadeout=0 ipchintrp_=1 ifadekind=0 ktransp=0.1 ipitchlag=-1 ivel=0 p18=65.25 p19=0.515178 …)\n", + " Synth(𝍪 preset:.piano=501.0068 start=73.603 dur=0.125 p4=0.5 kpos=1 kgain=18 idataidx_=2 inumbps=3 ibplen=1 ichan=0.02 ifadein=0.02 ifadeout=0 ipchintrp_=1 ifadekind=0 ktransp=0.1 ipitchlag=-1 ivel=0 p18=66.25 p19=0.515178 …)\n", + " Synth(𝍪 preset:.piano=501.0069 start=73.728 dur=0.125 p4=0.5 kpos=1 kgain=18 idataidx_=2 inumbps=3 ibplen=1 ichan=0.02 ifadein=0.02 ifadeout=0 ipchintrp_=1 ifadekind=0 ktransp=0.1 ipitchlag=-1 ivel=0 p18=67.25 p19=0.515178 …)\n", + " Synth(𝍪 preset:.piano=501.007 start=73.853 dur=0.125 p4=0.5 kpos=1 kgain=18 idataidx_=2 inumbps=3 ibplen=1 ichan=0.02 ifadein=0.02 ifadeout=0 ipchintrp_=1 ifadekind=0 ktransp=0.1 ipitchlag=-1 ivel=0 p18=68.25 p19=0.515178 …)\n", + " Synth(𝍪 preset:.piano=501.0071 start=73.978 dur=0.125 p4=0.5 kpos=1 kgain=18 idataidx_=2 inumbps=3 ibplen=1 ichan=0.02 ifadein=0.02 ifadeout=0 ipchintrp_=1 ifadekind=0 ktransp=0.1 ipitchlag=-1 ivel=0 p18=69.25 p19=0.515178 …)\n", + " Synth(𝍪 preset:.piano=501.0072 start=74.103 dur=0.125 p4=0.5 kpos=1 kgain=18 idataidx_=2 inumbps=3 ibplen=1 ichan=0.02 ifadein=0.02 ifadeout=0 ipchintrp_=1 ifadekind=0 ktransp=0.1 ipitchlag=-1 ivel=0 p18=70.25 p19=0.515178 …)\n", + " Synth(𝍪 preset:.piano=501.0073 start=74.228 dur=0.125 p4=0.5 kpos=1 kgain=18 idataidx_=2 inumbps=3 ibplen=1 ichan=0.02 ifadein=0.02 ifadeout=0 ipchintrp_=1 ifadekind=0 ktransp=0.1 ipitchlag=-1 ivel=0 p18=71.25 p19=0.515178 …)\n", + " Synth(𝍪 preset:.piano=501.0074 start=74.353 dur=0.417 p4=0.5 kpos=1 kgain=18 idataidx_=2 inumbps=3 ibplen=1 ichan=0.02 ifadein=0.02 ifadeout=0 ipchintrp_=1 ifadekind=0 ktransp=0.1 ipitchlag=-1 ivel=0 p18=60 p19=0.515178 …)\n", + " Synth(𝍪 preset:.piano=501.0075 start=74.769 dur=0.417 p4=0.5 kpos=1 kgain=18 idataidx_=2 inumbps=3 ibplen=1 ichan=0.02 ifadein=0.02 ifadeout=0 ipchintrp_=1 ifadekind=0 ktransp=0.1 ipitchlag=-1 ivel=0 p18=61 p19=0.515178 …)\n", + " Synth(𝍪 preset:.piano=501.0076 start=75.186 dur=0.417 p4=0.5 kpos=1 kgain=18 idataidx_=2 inumbps=3 ibplen=1 ichan=0.02 ifadein=0.02 ifadeout=0 ipchintrp_=1 ifadekind=0 ktransp=0.1 ipitchlag=-1 ivel=0 p18=62 p19=0.515178 …)\n", + " Synth(𝍪 preset:.piano=501.0077 start=75.603 dur=0.417 p4=0.5 kpos=1 kgain=18 idataidx_=2 inumbps=3 ibplen=1 ichan=0.02 ifadein=0.02 ifadeout=0 ipchintrp_=1 ifadekind=0 ktransp=0.1 ipitchlag=-1 ivel=0 p18=63 p19=0.515178 …)\n", + " Synth(𝍪 preset:.piano=501.0078 start=76.019 dur=0.417 p4=0.5 kpos=1 kgain=18 idataidx_=2 inumbps=3 ibplen=1 ichan=0.02 ifadein=0.02 ifadeout=0 ipchintrp_=1 ifadekind=0 ktransp=0.1 ipitchlag=-1 ivel=0 p18=64 p19=0.515178 …)\n", + " Synth(𝍪 preset:.piano=501.0079 start=76.436 dur=0.417 p4=0.5 kpos=1 kgain=18 idataidx_=2 inumbps=3 ibplen=1 ichan=0.02 ifadein=0.02 ifadeout=0 ipchintrp_=1 ifadekind=0 ktransp=0.1 ipitchlag=-1 ivel=0 p18=65 p19=0.515178 …)\n", + " Synth(𝍪 preset:.piano=501.008 start=76.853 dur=0.417 p4=0.5 kpos=1 kgain=18 idataidx_=2 inumbps=3 ibplen=1 ichan=0.02 ifadein=0.02 ifadeout=0 ipchintrp_=1 ifadekind=0 ktransp=0.1 ipitchlag=-1 ivel=0 p18=66 p19=0.515178 …)\n", + " Synth(𝍪 preset:.piano=501.0081 start=77.269 dur=0.417 p4=0.5 kpos=1 kgain=18 idataidx_=2 inumbps=3 ibplen=1 ichan=0.02 ifadein=0.02 ifadeout=0 ipchintrp_=1 ifadekind=0 ktransp=0.1 ipitchlag=-1 ivel=0 p18=67 p19=0.515178 …)\n", + " Synth(𝍪 preset:.piano=501.0082 start=77.686 dur=0.208 p4=0.5 kpos=1 kgain=18 idataidx_=2 inumbps=3 ibplen=1 ichan=0.02 ifadein=0.02 ifadeout=0 ipchintrp_=1 ifadekind=0 ktransp=0.1 ipitchlag=-1 ivel=0 p18=68 p19=0.515178 …)" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sc2.play()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "d4dbe28e-d3f4-4391-b573-3e8e95948240", + "metadata": {}, + "outputs": [], + "source": [ + "chain = Chain([\n", + " \"4C:0.5\",\n", + " \"4D\",\n", + " Chain([\"4E:0.5\"], offset=2)\n", + " ], offset=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "26111a23-a3dc-4b17-84ca-25659a552eaf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(4C:0.5♩, Fraction(1, 1)), (4D:1♩, Fraction(3, 2)), (4E:0.5♩, Fraction(3, 1))]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chain.eventsWithOffset()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "5e55c3be-bf08-46e0-b500-7a2759eb146a", + "metadata": {}, + "outputs": [], + "source": [ + "chain = Chain([\n", + " Chain(\"4E:0.5\", offset=2), \n", + " \"4C:0.5\",\n", + " \"4D\"])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "8f9e3679-6caa-45b3-835a-98ad1ddbc657", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4E:0.5♩\n" + ] + }, + { + "data": { + "text/html": [ + "4E:0.5♩
\n", + " " + ], + "text/plain": [ + "4E:0.5♩" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "note = chain.firstEvent()\n", + "note.dump()\n", + "note" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "e3822a01-4cb6-406d-91fa-081a6ed710d6", + "metadata": {}, + "outputs": [], + "source": [ + "note.offset" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d19244bb-b846-4855-9581-a9bd1e888062", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "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.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/test/test-root.ipynb b/notebooks/test/test-root.ipynb new file mode 100644 index 0000000..0a9a0a3 --- /dev/null +++ b/notebooks/test/test-root.ipynb @@ -0,0 +1,253 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "b12fc76e-b8fe-4aa8-a93c-4dfc0778b45a", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "end of score.\t\t overall amps:\u001b[m 0.0\n", + "\t overall samples out of range:\u001b[m 0\u001b[m\n", + "0 errors in performance\n", + "\u001b[m" + ] + } + ], + "source": [ + "from maelzel.core import *" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "b0084107-46e5-4af8-8f13-1c5b18565823", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Voice([4C:1♩, Chain([4D:1♩, 4E:1♩, 4F:1♩])], dur=4)
\n", + " " + ], + "text/plain": [ + "Voice([4C:1♩, Chain([4D:1♩, 4E:1♩, 4F:1♩])])" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v = Voice([\n", + " \"4C:1\",\n", + " Chain(\"4D 4E 4F\")\n", + "])\n", + "v" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "bc2f88d4-c3d0-49fe-9e6d-78911c34ea82", + "metadata": {}, + "outputs": [], + "source": [ + "s = Score([v])" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "446eff9d-de94-4b6b-82dc-26280d0ae995", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Chain([4D:1♩, 4E:1♩, 4F:1♩], dur=3)
\n", + " " + ], + "text/plain": [ + "Chain([4D:1♩, 4E:1♩, 4F:1♩])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s[0][1][0].parent" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "1bc1c9d9-b5b9-468b-a24b-5e9e42543524", + "metadata": {}, + "outputs": [], + "source": [ + "v2 = v.copy()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "462cc3b7-87ce-4fa5-997e-72cdf952d199", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v2.parent is None" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "fbbca1c6-7876-46d4-a874-6cfabda0533e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v2.root() is v2" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "060773a4-d6df-4bbd-8673-322bcf23f77c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Score(1 voices)
\n", + " " + ], + "text/plain": [ + "Score(1 voices)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s[0].firstEvent().root()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "0d110f6c-10ca-4a07-abd2-eddd94cc9b4f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Score(1 voices)
\n", + " " + ], + "text/plain": [ + "Score(1 voices)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s[0][1][0].root()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "4285f73a-8352-4b6a-8eb9-48e46519601b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Note(60).root() is None\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "47ee3599-294e-4347-8e60-a0861d388c6a", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "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.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}