diff --git a/site/en/gemma/docs/agile_classifiers.ipynb b/site/en/gemma/docs/agile_classifiers.ipynb index 991552fca..07963dbfe 100644 --- a/site/en/gemma/docs/agile_classifiers.ipynb +++ b/site/en/gemma/docs/agile_classifiers.ipynb @@ -1,5 +1,15 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "G3MMAcssHTML" + }, + "source": [ + "\n", + "" + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/site/en/gemma/docs/codegemma/code_assist_keras.ipynb b/site/en/gemma/docs/codegemma/code_assist_keras.ipynb index 7ef3444e0..65119e45a 100644 --- a/site/en/gemma/docs/codegemma/code_assist_keras.ipynb +++ b/site/en/gemma/docs/codegemma/code_assist_keras.ipynb @@ -1,5 +1,15 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "G3MMAcssHTML" + }, + "source": [ + "\n", + "" + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/site/en/gemma/docs/codegemma/codegemma_flax_inference.ipynb b/site/en/gemma/docs/codegemma/codegemma_flax_inference.ipynb index 85dc0f08e..f39fc0538 100644 --- a/site/en/gemma/docs/codegemma/codegemma_flax_inference.ipynb +++ b/site/en/gemma/docs/codegemma/codegemma_flax_inference.ipynb @@ -1,5 +1,15 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "G3MMAcssHTML" + }, + "source": [ + "\n", + "" + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/site/en/gemma/docs/codegemma/keras_quickstart.ipynb b/site/en/gemma/docs/codegemma/keras_quickstart.ipynb index eba18f483..e220465a3 100644 --- a/site/en/gemma/docs/codegemma/keras_quickstart.ipynb +++ b/site/en/gemma/docs/codegemma/keras_quickstart.ipynb @@ -1,5 +1,15 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "G3MMAcssHTML" + }, + "source": [ + "\n", + "" + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/site/en/gemma/docs/distributed_tuning.ipynb b/site/en/gemma/docs/distributed_tuning.ipynb index ea5a355e1..6d66e547f 100644 --- a/site/en/gemma/docs/distributed_tuning.ipynb +++ b/site/en/gemma/docs/distributed_tuning.ipynb @@ -1,5 +1,15 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "G3MMAcssHTML" + }, + "source": [ + "\n", + "" + ] + }, { "cell_type": "markdown", "metadata": { @@ -42,7 +52,7 @@ " View on ai.google.dev\n", " \n", " \n", - " Run in Google Colab\n", + " Run in Google Colab\n", " \n", " \n", " Run in Kaggle\n", diff --git a/site/en/gemma/docs/gemma_chat.ipynb b/site/en/gemma/docs/gemma_chat.ipynb index 696c3233f..843d5c5c5 100644 --- a/site/en/gemma/docs/gemma_chat.ipynb +++ b/site/en/gemma/docs/gemma_chat.ipynb @@ -3,15 +3,11 @@ { "cell_type": "markdown", "metadata": { - "id": "JLOS92ZAhfFj" + "id": "G3MMAcssHTML" }, "source": [ - "Project: /gemma/_project.yaml\n", - "Book: /gemma/_book.yaml\n", - "\n", - "\n", - "\n", - "" + "\n", + "" ] }, { @@ -569,7 +565,13 @@ "outputs": [ { "data": { - "text/markdown": "🙋‍♂️
Tell me, in a few words, how to compute all prime numbers up to 1000?
🤖\n\n> **Sieve of Eratosthenes.** \n> \n", + "text/markdown": [ + "🙋‍♂️
Tell me, in a few words, how to compute all prime numbers up to 1000?
🤖\n", + "\n", + "> **Sieve of Eratosthenes.** \n", + "> \n", + "" + ], "text/plain": [ "" ] @@ -603,7 +605,43 @@ "outputs": [ { "data": { - "text/markdown": "🙋‍♂️
Now in Python! No numpy, please!
🤖\n\n> ```python\n> def sieve_of_eratosthenes(n):\n> \"\"\"Returns a list of prime numbers up to n.\"\"\"\n> primes = [True] * (n + 1)\n> primes[0] = primes[1] = False\n> for i in range(2, int(n**0.5) + 1):\n> if primes[i]:\n> for j in range(i * i, n + 1, i):\n> primes[j] = False\n> return [i for i, is_prime in enumerate(primes) if is_prime]\n> \n> primes = sieve_of_eratosthenes(1000)\n> print(primes)\n> ```\n> \n> **Explanation:**\n> \n> 1. **Initialization:**\n> - `primes = [True] * (n + 1)`: Creates a list `primes` of boolean values, initially assuming all numbers are prime.\n> - `primes[0] = primes[1] = False`: Sets 0 and 1 as non-prime.\n> \n> 2. **Iteration:**\n> - `for i in range(2, int(n**0.5) + 1):`: Iterates from 2 to the square root of `n`. We only need to check up to the square root because any composite number must have a prime factor less than or equal to its square root.\n> - `if primes[i]:`: If `i` is marked as prime:\n> - `for j in range(i * i, n + 1, i):`: Marks all multiples of `i` as non-prime.\n> \n> 3. **Result:**\n> - `return [i for i, is_prime in enumerate(primes) if is_prime]`: Creates a list of indices where `primes[i]` is True, representing the prime numbers.\n> \n> \n> Let me know if you'd like a more detailed explanation of any part! \n> \n", + "text/markdown": [ + "🙋‍♂️
Now in Python! No numpy, please!
🤖\n", + "\n", + "> ```python\n", + "> def sieve_of_eratosthenes(n):\n", + "> \"\"\"Returns a list of prime numbers up to n.\"\"\"\n", + "> primes = [True] * (n + 1)\n", + "> primes[0] = primes[1] = False\n", + "> for i in range(2, int(n**0.5) + 1):\n", + "> if primes[i]:\n", + "> for j in range(i * i, n + 1, i):\n", + "> primes[j] = False\n", + "> return [i for i, is_prime in enumerate(primes) if is_prime]\n", + "> \n", + "> primes = sieve_of_eratosthenes(1000)\n", + "> print(primes)\n", + "> ```\n", + "> \n", + "> **Explanation:**\n", + "> \n", + "> 1. **Initialization:**\n", + "> - `primes = [True] * (n + 1)`: Creates a list `primes` of boolean values, initially assuming all numbers are prime.\n", + "> - `primes[0] = primes[1] = False`: Sets 0 and 1 as non-prime.\n", + "> \n", + "> 2. **Iteration:**\n", + "> - `for i in range(2, int(n**0.5) + 1):`: Iterates from 2 to the square root of `n`. We only need to check up to the square root because any composite number must have a prime factor less than or equal to its square root.\n", + "> - `if primes[i]:`: If `i` is marked as prime:\n", + "> - `for j in range(i * i, n + 1, i):`: Marks all multiples of `i` as non-prime.\n", + "> \n", + "> 3. **Result:**\n", + "> - `return [i for i, is_prime in enumerate(primes) if is_prime]`: Creates a list of indices where `primes[i]` is True, representing the prime numbers.\n", + "> \n", + "> \n", + "> Let me know if you'd like a more detailed explanation of any part! \n", + "> \n", + "" + ], "text/plain": [ "" ] @@ -627,7 +665,45 @@ "outputs": [ { "data": { - "text/markdown": "🙋‍♂️
Thank you, it works! Can you explain the code in French?
🤖\n\n> Bien sûr ! Voici une explication du code en français :\n> \n> ```python\n> def sieve_of_eratosthenes(n):\n> \"\"\"Retourne une liste de nombres premiers jusqu'à n.\"\"\"\n> primes = [True] * (n + 1)\n> primes[0] = primes[1] = False\n> for i in range(2, int(n**0.5) + 1):\n> if primes[i]:\n> for j in range(i * i, n + 1, i):\n> primes[j] = False\n> return [i for i, is_prime in enumerate(primes) if is_prime]\n> \n> primes = sieve_of_eratosthenes(1000)\n> print(primes)\n> ```\n> \n> **Explication:**\n> \n> 1. **Initialisation:**\n> - `primes = [True] * (n + 1)`: Crée une liste `primes` de valeurs booléennes, initialement supposant que tous les nombres sont premiers.\n> - `primes[0] = primes[1] = False`: Définit 0 et 1 comme non-premiers.\n> \n> 2. **Itération:**\n> - `for i in range(2, int(n**0.5) + 1):`: Itère de 2 jusqu'à la racine carrée de `n`. Nous ne devons vérifier que jusqu'à la racine carrée car tout nombre composite doit avoir un facteur premier inférieur ou égal à sa racine carrée.\n> - `if primes[i]:`: Si `i` est considéré comme premier:\n> - `for j in range(i * i, n + 1, i):`: Marquer tous les multiples de `i` comme non-premiers.\n> \n> 3. **Resultat:**\n> - `return [i for i, is_prime in enumerate(primes) if is_prime]`: Crée une liste des indices où `primes[i]` est vrai, représentant les nombres premiers.\n> \n> \n> N'hésitez pas à me demander si vous avez besoin d'une explication plus détaillée de quelque chose! \n> \n", + "text/markdown": [ + "🙋‍♂️
Thank you, it works! Can you explain the code in French?
🤖\n", + "\n", + "> Bien sûr ! Voici une explication du code en français :\n", + "> \n", + "> ```python\n", + "> def sieve_of_eratosthenes(n):\n", + "> \"\"\"Retourne une liste de nombres premiers jusqu'à n.\"\"\"\n", + "> primes = [True] * (n + 1)\n", + "> primes[0] = primes[1] = False\n", + "> for i in range(2, int(n**0.5) + 1):\n", + "> if primes[i]:\n", + "> for j in range(i * i, n + 1, i):\n", + "> primes[j] = False\n", + "> return [i for i, is_prime in enumerate(primes) if is_prime]\n", + "> \n", + "> primes = sieve_of_eratosthenes(1000)\n", + "> print(primes)\n", + "> ```\n", + "> \n", + "> **Explication:**\n", + "> \n", + "> 1. **Initialisation:**\n", + "> - `primes = [True] * (n + 1)`: Crée une liste `primes` de valeurs booléennes, initialement supposant que tous les nombres sont premiers.\n", + "> - `primes[0] = primes[1] = False`: Définit 0 et 1 comme non-premiers.\n", + "> \n", + "> 2. **Itération:**\n", + "> - `for i in range(2, int(n**0.5) + 1):`: Itère de 2 jusqu'à la racine carrée de `n`. Nous ne devons vérifier que jusqu'à la racine carrée car tout nombre composite doit avoir un facteur premier inférieur ou égal à sa racine carrée.\n", + "> - `if primes[i]:`: Si `i` est considéré comme premier:\n", + "> - `for j in range(i * i, n + 1, i):`: Marquer tous les multiples de `i` comme non-premiers.\n", + "> \n", + "> 3. **Resultat:**\n", + "> - `return [i for i, is_prime in enumerate(primes) if is_prime]`: Crée une liste des indices où `primes[i]` est vrai, représentant les nombres premiers.\n", + "> \n", + "> \n", + "> N'hésitez pas à me demander si vous avez besoin d'une explication plus détaillée de quelque chose! \n", + "> \n", + "" + ], "text/plain": [ "" ] @@ -651,7 +727,48 @@ "outputs": [ { "data": { - "text/markdown": "🙋‍♂️
Great! Now add those explanations as comments in the code.
🤖\n\n> ```python\n> def sieve_of_eratosthenes(n):\n> \"\"\"Retourne une liste de nombres premiers jusqu'à n.\"\"\"\n> # Initialise une liste de boolean avec True pour tous les nombres de 0 à n\n> primes = [True] * (n + 1)\n> # Définit 0 et 1 comme non-premiers\n> primes[0] = primes[1] = False\n> # Itère de 2 à la racine carrée de n\n> for i in range(2, int(n**0.5) + 1):\n> # Si i est considéré comme premier\n> if primes[i]:\n> # Itère sur tous les multiples de i\n> for j in range(i * i, n + 1, i):\n> # Définit les multiples de i comme non-premiers\n> primes[j] = False\n> # Retourne la liste des indices des nombres premiers\n> return [i for i, is_prime in enumerate(primes) if is_prime]\n> \n> primes = sieve_of_eratosthenes(1000)\n> print(primes)\n> ```\n> \n> **Explication:**\n> \n> * **Initialisation:**\n> * `primes = [True] * (n + 1)`: Crée une liste `primes` de valeurs booléennes, initialement supposant que tous les nombres sont premiers.\n> * `primes[0] = primes[1] = False`: Définit 0 et 1 comme non-premiers.\n> * **Itération:**\n> * `for i in range(2, int(n**0.5) + 1):`: Itère de 2 jusqu'à la racine carrée de `n`. Nous ne devons vérifier que jusqu'à la racine carrée car tout nombre composite doit avoir un facteur premier inférieur ou égal à sa racine carrée.\n> * `if primes[i]:`: Si `i` est considéré comme premier:\n> * `for j in range(i * i, n + 1, i):`: Marquer tous les multiples de `i` comme non-premiers.\n> * **Resultat:**\n> * `return [i for i, is_prime in enumerate(primes) if is_prime]`: Crée une liste des indices où `primes[i]` est vrai, représentant les nombres premiers. \n> \n> \n> \n> \n", + "text/markdown": [ + "🙋‍♂️
Great! Now add those explanations as comments in the code.
🤖\n", + "\n", + "> ```python\n", + "> def sieve_of_eratosthenes(n):\n", + "> \"\"\"Retourne une liste de nombres premiers jusqu'à n.\"\"\"\n", + "> # Initialise une liste de boolean avec True pour tous les nombres de 0 à n\n", + "> primes = [True] * (n + 1)\n", + "> # Définit 0 et 1 comme non-premiers\n", + "> primes[0] = primes[1] = False\n", + "> # Itère de 2 à la racine carrée de n\n", + "> for i in range(2, int(n**0.5) + 1):\n", + "> # Si i est considéré comme premier\n", + "> if primes[i]:\n", + "> # Itère sur tous les multiples de i\n", + "> for j in range(i * i, n + 1, i):\n", + "> # Définit les multiples de i comme non-premiers\n", + "> primes[j] = False\n", + "> # Retourne la liste des indices des nombres premiers\n", + "> return [i for i, is_prime in enumerate(primes) if is_prime]\n", + "> \n", + "> primes = sieve_of_eratosthenes(1000)\n", + "> print(primes)\n", + "> ```\n", + "> \n", + "> **Explication:**\n", + "> \n", + "> * **Initialisation:**\n", + "> * `primes = [True] * (n + 1)`: Crée une liste `primes` de valeurs booléennes, initialement supposant que tous les nombres sont premiers.\n", + "> * `primes[0] = primes[1] = False`: Définit 0 et 1 comme non-premiers.\n", + "> * **Itération:**\n", + "> * `for i in range(2, int(n**0.5) + 1):`: Itère de 2 jusqu'à la racine carrée de `n`. Nous ne devons vérifier que jusqu'à la racine carrée car tout nombre composite doit avoir un facteur premier inférieur ou égal à sa racine carrée.\n", + "> * `if primes[i]:`: Si `i` est considéré comme premier:\n", + "> * `for j in range(i * i, n + 1, i):`: Marquer tous les multiples de `i` comme non-premiers.\n", + "> * **Resultat:**\n", + "> * `return [i for i, is_prime in enumerate(primes) if is_prime]`: Crée une liste des indices où `primes[i]` est vrai, représentant les nombres premiers. \n", + "> \n", + "> \n", + "> \n", + "> \n", + "" + ], "text/plain": [ "" ] diff --git a/site/en/gemma/docs/integrations/langchain.ipynb b/site/en/gemma/docs/integrations/langchain.ipynb index 1c7a23596..d4b1599b5 100644 --- a/site/en/gemma/docs/integrations/langchain.ipynb +++ b/site/en/gemma/docs/integrations/langchain.ipynb @@ -1,5 +1,15 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "G3MMAcssHTML" + }, + "source": [ + "\n", + "" + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/site/en/gemma/docs/jax_finetune.ipynb b/site/en/gemma/docs/jax_finetune.ipynb index f241190ca..7d3aaa230 100644 --- a/site/en/gemma/docs/jax_finetune.ipynb +++ b/site/en/gemma/docs/jax_finetune.ipynb @@ -1,5 +1,15 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "G3MMAcssHTML" + }, + "source": [ + "\n", + "" + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/site/en/gemma/docs/jax_inference.ipynb b/site/en/gemma/docs/jax_inference.ipynb index 1db76d2b5..67349596c 100644 --- a/site/en/gemma/docs/jax_inference.ipynb +++ b/site/en/gemma/docs/jax_inference.ipynb @@ -1,5 +1,15 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "G3MMAcssHTML" + }, + "source": [ + "\n", + "" + ] + }, { "cell_type": "markdown", "metadata": { @@ -387,7 +397,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "\r100%|██████████| 22.5k/22.5k [00:00<00:00, 24.7MB/s]\n", + "\r", + "100%|██████████| 22.5k/22.5k [00:00<00:00, 24.7MB/s]\n", "\n", "\n", " 1%| | 17.0M/1.70G [00:00<00:36, 49.5MB/s]\u001b[A\u001b[A\n", diff --git a/site/en/gemma/docs/keras_inference.ipynb b/site/en/gemma/docs/keras_inference.ipynb index 5fcb80465..bacf75f4c 100644 --- a/site/en/gemma/docs/keras_inference.ipynb +++ b/site/en/gemma/docs/keras_inference.ipynb @@ -1,5 +1,15 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "G3MMAcssHTML" + }, + "source": [ + "\n", + "" + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/site/en/gemma/docs/lit_gemma.ipynb b/site/en/gemma/docs/lit_gemma.ipynb index 3b7418878..ab8a4812d 100644 --- a/site/en/gemma/docs/lit_gemma.ipynb +++ b/site/en/gemma/docs/lit_gemma.ipynb @@ -1,5 +1,15 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "G3MMAcssHTML" + }, + "source": [ + "\n", + "" + ] + }, { "cell_type": "markdown", "metadata": { @@ -263,7 +273,34 @@ "outputs": [ { "data": { - "application/javascript": "(async (port, path, width, height, cache, element) => {\n if (!google.colab.kernel.accessAllowed && !cache) {\n return;\n }\n element.appendChild(document.createTextNode(''));\n const url = await google.colab.kernel.proxyPort(port, {cache});\n const iframe = document.createElement('iframe');\n iframe.src = new URL(path, url).toString();\n iframe.height = height;\n iframe.width = width;\n iframe.style.border = 0;\n iframe.allow = [\n 'accelerometer',\n 'autoplay',\n 'camera',\n 'clipboard-read',\n 'clipboard-write',\n 'gyroscope',\n 'magnetometer',\n 'microphone',\n 'serial',\n 'usb',\n 'xr-spatial-tracking',\n ].join('; ');\n element.appendChild(iframe);\n })(36717, \"/?\", \"100%\", \"800\", false, window.element)", + "application/javascript": [ + "(async (port, path, width, height, cache, element) => {\n", + " if (!google.colab.kernel.accessAllowed && !cache) {\n", + " return;\n", + " }\n", + " element.appendChild(document.createTextNode(''));\n", + " const url = await google.colab.kernel.proxyPort(port, {cache});\n", + " const iframe = document.createElement('iframe');\n", + " iframe.src = new URL(path, url).toString();\n", + " iframe.height = height;\n", + " iframe.width = width;\n", + " iframe.style.border = 0;\n", + " iframe.allow = [\n", + " 'accelerometer',\n", + " 'autoplay',\n", + " 'camera',\n", + " 'clipboard-read',\n", + " 'clipboard-write',\n", + " 'gyroscope',\n", + " 'magnetometer',\n", + " 'microphone',\n", + " 'serial',\n", + " 'usb',\n", + " 'xr-spatial-tracking',\n", + " ].join('; ');\n", + " element.appendChild(iframe);\n", + " })(36717, \"/?\", \"100%\", \"800\", false, window.element)" + ], "text/plain": [ "" ] diff --git a/site/en/gemma/docs/lora_tuning.ipynb b/site/en/gemma/docs/lora_tuning.ipynb index 7eac268c6..540263fef 100644 --- a/site/en/gemma/docs/lora_tuning.ipynb +++ b/site/en/gemma/docs/lora_tuning.ipynb @@ -1,5 +1,15 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "G3MMAcssHTML" + }, + "source": [ + "\n", + "" + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/site/en/gemma/docs/paligemma/fine-tuning-paligemma.ipynb b/site/en/gemma/docs/paligemma/fine-tuning-paligemma.ipynb index dbb09ed6a..b2cb645f0 100644 --- a/site/en/gemma/docs/paligemma/fine-tuning-paligemma.ipynb +++ b/site/en/gemma/docs/paligemma/fine-tuning-paligemma.ipynb @@ -1,5 +1,15 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "G3MMAcssHTML" + }, + "source": [ + "\n", + "" + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/site/en/gemma/docs/paligemma/inference-with-keras.ipynb b/site/en/gemma/docs/paligemma/inference-with-keras.ipynb index 8b44ed6d1..32581fb4b 100644 --- a/site/en/gemma/docs/paligemma/inference-with-keras.ipynb +++ b/site/en/gemma/docs/paligemma/inference-with-keras.ipynb @@ -1,5 +1,15 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "G3MMAcssHTML" + }, + "source": [ + "\n", + "" + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/site/en/gemma/docs/pytorch_gemma.ipynb b/site/en/gemma/docs/pytorch_gemma.ipynb index cdfa654d2..6f1cbdfe2 100644 --- a/site/en/gemma/docs/pytorch_gemma.ipynb +++ b/site/en/gemma/docs/pytorch_gemma.ipynb @@ -1,5 +1,15 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "G3MMAcssHTML" + }, + "source": [ + "\n", + "" + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/site/en/gemma/docs/recurrentgemma/recurrentgemma_jax_finetune.ipynb b/site/en/gemma/docs/recurrentgemma/recurrentgemma_jax_finetune.ipynb index a9d2b639c..06e632300 100644 --- a/site/en/gemma/docs/recurrentgemma/recurrentgemma_jax_finetune.ipynb +++ b/site/en/gemma/docs/recurrentgemma/recurrentgemma_jax_finetune.ipynb @@ -1,5 +1,15 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "G3MMAcssHTML" + }, + "source": [ + "\n", + "" + ] + }, { "cell_type": "markdown", "metadata": { diff --git a/site/en/gemma/docs/recurrentgemma/recurrentgemma_jax_inference.ipynb b/site/en/gemma/docs/recurrentgemma/recurrentgemma_jax_inference.ipynb index 58647b05c..08d414844 100644 --- a/site/en/gemma/docs/recurrentgemma/recurrentgemma_jax_inference.ipynb +++ b/site/en/gemma/docs/recurrentgemma/recurrentgemma_jax_inference.ipynb @@ -1,5 +1,15 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "G3MMAcssHTML" + }, + "source": [ + "\n", + "" + ] + }, { "cell_type": "markdown", "metadata": {