{ "cells": [ { "cell_type": "markdown", "id": "ade46dee-230f-43f9-a760-e39bf2996a4f", "metadata": {}, "source": [ "# John 1:1 syntaxtrees using the various viewtypes" ] }, { "cell_type": "markdown", "id": "558528dd-db55-4d8a-9456-4111a7e73528", "metadata": {}, "source": [ "## Table of content (TOC)\n", "\n", "* 1 - Introduction\n", "* 2 - Load Text-Fabric app and data\n", "* 3 - Performing the query\n", "* 4 - The syntax tree presentations \n", " * 4.1 - The 'syntax-view' (default viewtype) \n", " * 4.2 - The 'wg-view'\n", " * 4.3 - All nodes displayed" ] }, { "cell_type": "markdown", "id": "9c53b8ad-c1f0-4e97-bcb1-8df75190921c", "metadata": {}, "source": [ "# 1 - Introduction \n", "##### [Back to TOC](#TOC)" ] }, { "cell_type": "markdown", "id": "26579597-855b-41ce-8f55-4cd60faad6c8", "metadata": {}, "source": [ "This Text-Fabric database offers its users two distinct view types to display the syntaxtrees. This is possible due to a partial data duplication using dedicated node types that are associated with each of these view types. While most features are associated with both view types, some features are specifically tuned to a particular view type, for example, by using matching or dedicated nomenclature.\n", "\n", "This Jupyter Notebook demonstrates the impact of the [viewtypes](https://github.com/saulocantanhede/tfgreek2/blob/main/docs/viewtypes.md#start) on the display of the syntaxtree of John 1 verse 1.\n", "\n", "In order to activat a specific viewtype, this dataset contains an additional command `A.viewtype()` which enables the user to switch between these viewtypes. " ] }, { "cell_type": "markdown", "id": "7b536b93-0396-4af3-9fee-408267a1c80c", "metadata": {}, "source": [ "# 2 - Load Text-Fabric app and data \n", "##### [Back to TOC](#TOC)" ] }, { "cell_type": "code", "execution_count": 1, "id": "d45a2f25-51ec-4826-82b4-8eb4f409fd30", "metadata": { "tags": [] }, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 3, "id": "f88147bc-7d18-496d-a8a1-280500b940e5", "metadata": {}, "outputs": [], "source": [ "# Loading the Text-Fabric code\n", "# Note: it is assumed Text-Fabric is installed in your environment.\n", "from tf.fabric import Fabric\n", "from tf.app import use" ] }, { "cell_type": "code", "execution_count": 5, "id": "a98758d0-9ca9-45bf-9bce-bf37f1ea4b0f", "metadata": { "scrolled": true, "tags": [] }, "outputs": [ { "data": { "text/markdown": [ "**Locating corpus resources ...**" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "app: ~/text-fabric-data/github/saulocantanhede/tfgreek2/app" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "data: ~/text-fabric-data/github/saulocantanhede/tfgreek2/tf/0.5.7" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", " TF: TF API 12.4.4, saulocantanhede/tfgreek2/app v3, Search Reference
\n", " Data: saulocantanhede - tfgreek2 0.5.7, Character table, Feature docs
\n", "
Node types\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "
Name# of nodes# slots / node% coverage
book275102.93100
chapter260529.92100
verse794417.34100
sentence1970313.82198
group89457.0146
clause308147.17160
wg1068686.88533
phrase690071.9095
subphrase1161781.60135
word1377791.00100
\n", " Sets: no custom sets
\n", " Features:
\n", "
Nestle 1904 Greek New Testament\n", "
\n", "\n", "
\n", "
\n", "after\n", "
\n", "
str
\n", "\n", " material after the end of the word\n", "\n", "
\n", "\n", "
\n", " \n", "
int
\n", "\n", " 1 if it is an apposition container\n", "\n", "
\n", "\n", "
\n", "
\n", "articular\n", "
\n", "
int
\n", "\n", " 1 if the sentence, group, clause, phrase or wg has an article\n", "\n", "
\n", "\n", "
\n", "
\n", "before\n", "
\n", "
str
\n", "\n", " this is XML attribute before\n", "\n", "
\n", "\n", "
\n", "
\n", "book\n", "
\n", "
str
\n", "\n", " book name (full name)\n", "\n", "
\n", "\n", "
\n", "
\n", "bookshort\n", "
\n", "
str
\n", "\n", " book name (abbreviated) from ref attribute in xml\n", "\n", "
\n", "\n", "
\n", "
\n", "case\n", "
\n", "
str
\n", "\n", " grammatical case\n", "\n", "
\n", "\n", "
\n", "
\n", "chapter\n", "
\n", "
int
\n", "\n", " chapter number, from ref attribute in xml\n", "\n", "
\n", "\n", "
\n", "
\n", "clausetype\n", "
\n", "
str
\n", "\n", " clause type\n", "\n", "
\n", "\n", "
\n", "
\n", "cls\n", "
\n", "
str
\n", "\n", " this is XML attribute cls\n", "\n", "
\n", "\n", "
\n", "
\n", "cltype\n", "
\n", "
str
\n", "\n", " clause type\n", "\n", "
\n", "\n", "
\n", "
\n", "criticalsign\n", "
\n", "
str
\n", "\n", " this is XML attribute criticalsign\n", "\n", "
\n", "\n", "
\n", "
\n", "crule\n", "
\n", "
str
\n", "\n", " clause rule (from xml attribute Rule)\n", "\n", "
\n", "\n", "
\n", "
\n", "degree\n", "
\n", "
str
\n", "\n", " grammatical degree\n", "\n", "
\n", "\n", "
\n", "
\n", "discontinuous\n", "
\n", "
int
\n", "\n", " 1 if the word is out of sequence in the xml\n", "\n", "
\n", "\n", "
\n", "
\n", "domain\n", "
\n", "
str
\n", "\n", " domain\n", "\n", "
\n", "\n", "
\n", "
\n", "framespec\n", "
\n", "
str
\n", "\n", " this is XML attribute framespec\n", "\n", "
\n", "\n", "
\n", "
\n", "function\n", "
\n", "
str
\n", "\n", " this is XML attribute function\n", "\n", "
\n", "\n", "
\n", "
\n", "gender\n", "
\n", "
str
\n", "\n", " grammatical gender\n", "\n", "
\n", "\n", "
\n", "
\n", "gloss\n", "
\n", "
str
\n", "\n", " short translation\n", "\n", "
\n", "\n", "
\n", "
\n", "id\n", "
\n", "
str
\n", "\n", " xml id\n", "\n", "
\n", "\n", "
\n", "
\n", "junction\n", "
\n", "
str
\n", "\n", " type of junction\n", "\n", "
\n", "\n", "
\n", "
\n", "lang\n", "
\n", "
str
\n", "\n", " language the text is in\n", "\n", "
\n", "\n", "
\n", "
\n", "lemma\n", "
\n", "
str
\n", "\n", " lexical lemma\n", "\n", "
\n", "\n", "
\n", "
\n", "lemmatranslit\n", "
\n", "
str
\n", "\n", " transliteration of the word lemma\n", "\n", "
\n", "\n", "
\n", "
\n", "ln\n", "
\n", "
str
\n", "\n", " ln\n", "\n", "
\n", "\n", "
\n", "
\n", "mood\n", "
\n", "
str
\n", "\n", " verbal mood\n", "\n", "
\n", "\n", "
\n", "
\n", "morph\n", "
\n", "
str
\n", "\n", " morphological code\n", "\n", "
\n", "\n", "
\n", "
\n", "nodeid\n", "
\n", "
int
\n", "\n", " node id (as in the XML source data\n", "\n", "
\n", "\n", "
\n", "
\n", "normalized\n", "
\n", "
str
\n", "\n", " lemma normalized\n", "\n", "
\n", "\n", "
\n", "
\n", "note\n", "
\n", "
str
\n", "\n", " annotation of linguistic nature\n", "\n", "
\n", "\n", "
\n", "
\n", "num\n", "
\n", "
int
\n", "\n", " generated number (not in xml): book: (Matthew=1, Mark=2, ..., Revelation=27); sentence: numbered per chapter; word: numbered per verse.\n", "\n", "
\n", "\n", "
\n", "
\n", "number\n", "
\n", "
str
\n", "\n", " grammatical number\n", "\n", "
\n", "\n", "
\n", "
\n", "otype\n", "
\n", "
str
\n", "\n", " \n", "\n", "
\n", "\n", "
\n", "
\n", "person\n", "
\n", "
str
\n", "\n", " grammatical person\n", "\n", "
\n", "\n", "
\n", "
\n", "punctuation\n", "
\n", "
str
\n", "\n", " this is XML attribute punctuation\n", "\n", "
\n", "\n", "
\n", "
\n", "ref\n", "
\n", "
str
\n", "\n", " biblical reference with word counting\n", "\n", "
\n", "\n", "
\n", "
\n", "referent\n", "
\n", "
str
\n", "\n", " number of referent\n", "\n", "
\n", "\n", "
\n", "
\n", "rela\n", "
\n", "
str
\n", "\n", " this is XML attribute rela\n", "\n", "
\n", "\n", "
\n", "
\n", "role\n", "
\n", "
str
\n", "\n", " role\n", "\n", "
\n", "\n", "
\n", "
\n", "rule\n", "
\n", "
str
\n", "\n", " syntactical rule\n", "\n", "
\n", "\n", "
\n", "
\n", "sp\n", "
\n", "
str
\n", "\n", " part-of-speach\n", "\n", "
\n", "\n", "
\n", "
\n", "strong\n", "
\n", "
int
\n", "\n", " strong number\n", "\n", "
\n", "\n", "
\n", "
\n", "subjrefspec\n", "
\n", "
str
\n", "\n", " this is XML attribute subjrefspec\n", "\n", "
\n", "\n", "
\n", "
\n", "tense\n", "
\n", "
str
\n", "\n", " verbal tense\n", "\n", "
\n", "\n", "
\n", "
\n", "text\n", "
\n", "
str
\n", "\n", " the text of a word\n", "\n", "
\n", "\n", "
\n", "
\n", "trans\n", "
\n", "
str
\n", "\n", " translation of the word surface text according to the Berean Interlinear Bible\n", "\n", "
\n", "\n", "
\n", "
\n", "translit\n", "
\n", "
str
\n", "\n", " transliteration of the word surface text\n", "\n", "
\n", "\n", "
\n", "
\n", "typ\n", "
\n", "
str
\n", "\n", " this is XML attribute typ\n", "\n", "
\n", "\n", "
\n", "
\n", "type\n", "
\n", "
str
\n", "\n", " morphological type (on word), syntactical type (on sentence, group, clause, phrase or wg)\n", "\n", "
\n", "\n", "
\n", "
\n", "unaccent\n", "
\n", "
str
\n", "\n", " word in unicode characters without accents and diacritical markers\n", "\n", "
\n", "\n", "
\n", "
\n", "unicode\n", "
\n", "
str
\n", "\n", " word in unicode characters plus material after it\n", "\n", "
\n", "\n", "
\n", "
\n", "variant\n", "
\n", "
str
\n", "\n", " this is XML attribute variant\n", "\n", "
\n", "\n", "
\n", "
\n", "verse\n", "
\n", "
int
\n", "\n", " verse number, from ref attribute in xml\n", "\n", "
\n", "\n", "
\n", "
\n", "voice\n", "
\n", "
str
\n", "\n", " verbal voice\n", "\n", "
\n", "\n", "
\n", "
\n", "frame\n", "
\n", "
str
\n", "\n", " frame\n", "\n", "
\n", "\n", "
\n", "
\n", "oslots\n", "
\n", "
none
\n", "\n", " \n", "\n", "
\n", "\n", "
\n", "
\n", "parent\n", "
\n", "
none
\n", "\n", " parent relationship between words\n", "\n", "
\n", "\n", "
\n", "
\n", "sibling\n", "
\n", "
int
\n", "\n", " this is XML attribute sibling\n", "\n", "
\n", "\n", "
\n", "
\n", "subjref\n", "
\n", "
none
\n", "\n", " number of subject referent\n", "\n", "
\n", "\n", "
\n", "
\n", "\n", " Settings:
specified
  1. apiVersion: 3
  2. appName: saulocantanhede/tfgreek2
  3. appPath:C:/Users/tonyj/text-fabric-data/github/saulocantanhede/tfgreek2/app
  4. commit: 352af50c8ce86edd8a0e2d58519453a8f53ee084
  5. css: ''
  6. dataDisplay:
    • excludedFeatures: []
    • noneValues:
      • none
      • unknown
      • no value
      • NA
    • sectionSep1:
    • sectionSep2: :
    • textFormat: text-orig-full
  7. docs:
    • docBase: https://github.com/saulocantanhede/tfgreek2/tree/main/docs
    • docPage: about
    • docRoot: https://github.com/saulocantanhede/tfgreek2
    • featureBase:https://github.com/saulocantanhede/tfgreek2/tree/main/docs/features/<feature>.md
    • featurePage: README
  8. interfaceDefaults: {fmt: text-orig-full}
  9. isCompatible: True
  10. local: local
  11. localDir:C:/Users/tonyj/text-fabric-data/github/saulocantanhede/tfgreek2/_temp
  12. provenanceSpec:
    • branch: main
    • corpus: Nestle 1904 Greek New Testament
    • doi: 10.5281/zenodo.notyet
    • moduleSpecs: []
    • org: saulocantanhede
    • relative: /tf
    • repo: tfgreek2
    • repro: tfgreek2
    • version: 0.5.7
    • webBase: https://learner.bible/text/show_text/nestle1904/
    • webHint: Show this on the website
    • webLang: en
    • webUrl:https://learner.bible/text/show_text/nestle1904/<1>/<2>/<3>
    • webUrlLex: {webBase}/word?version={version}&id=<lid>
  13. release: 0.5.7
  14. typeDisplay:
    • clause:
      • condense: True
      • label: {typ} {function} {rela} \\\\ {cls} {role} {junction}
      • style: ''
    • group:
      • label: {typ} {function} {rela} \\\\ {type} {role} {rule}
      • style: ''
    • phrase:
      • condense: True
      • label: {typ} {function} {rela} \\\\ {type} {role} {rule}
      • style: ''
    • sentence:
      • label: {typ} {function} {rela} \\\\ {role} {rule}
      • style: ''
    • subphrase:
      • label: {typ} {function} {rela} \\\\ {type} {role} {rule}
      • style: ''
    • verse:
      • condense: True
      • label: {book} {chapter}:{verse}
      • style: ''
    • wg:
      • condense: True
      • label: {type} {role} {rule} {junction}
      • style: ''
    • word:
      • features:
        • lemma
        • sp
      • featuresBare: [gloss]
  15. writing: grc
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
TF API: names N F E L T S C TF Fs Fall Es Eall Cs Call directly usable

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "Display is setup for viewtype [syntax-view](https://github.com/saulocantanhede/tfgreek2/blob/main/docs/syntax-view.md#start)" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "See [here](https://github.com/saulocantanhede/tfgreek2/blob/main/docs/viewtypes.md#start) for more information on viewtypes" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# load the N1904 app and data\n", "A = use (\"saulocantanhede/tfgreek2\",version=\"0.5.7\",hoist=globals())" ] }, { "cell_type": "markdown", "id": "3e383881-2356-4704-97fd-c8a676abf6e9", "metadata": {}, "source": [ "Note: to access detailed descriptions for all TF features in this dataset, click here." ] }, { "cell_type": "code", "execution_count": 7, "id": "8a387dd9-50a2-47ce-867b-1e948b31f636", "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# The following will push the Text-Fabric stylesheet to this notebook (to facilitate proper display with notebook viewer)\n", "A.dh(A.getCss())" ] }, { "cell_type": "markdown", "id": "38ba1e92-4459-4e4c-bb07-3b002d1a60a3", "metadata": {}, "source": [ "# 3 - Performing the query \n", "##### [Back to TOC](#TOC)" ] }, { "cell_type": "markdown", "id": "e0204b00-a2dc-43f2-9968-86b57d29e8f9", "metadata": {}, "source": [ "First we will define a query template selecting the verse John 1:1 and run a query using the template. " ] }, { "cell_type": "code", "execution_count": 60, "id": "12aed999-b3fb-4d0a-95ad-1b2e2a62debc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.01s 1 result\n" ] } ], "source": [ "VerseQuery = '''\n", "verse book=John chapter=1 verse=1\n", "'''\n", "\n", "VerseResults = A.search(VerseQuery)" ] }, { "cell_type": "markdown", "id": "0a4b37f0-98af-4e78-8b89-5b901770d1a9", "metadata": { "tags": [] }, "source": [ "The result of running this query is that the variable `VerseResults` becomes a list of tuples containing all the results. In this case, the list contains only one tuple, with the node number of the verse John 1:1. The content of the variable `VerseResults` can easily be displayed by entering its name in a Notebook cell (of type `code`) and running it." ] }, { "cell_type": "code", "execution_count": 62, "id": "e6679a21-57f6-4b07-80bb-a5ef331b5387", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "[(385605,)]" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "VerseResults" ] }, { "cell_type": "markdown", "id": "a429cfff-e434-44be-a6fe-7c234e4e63a9", "metadata": { "tags": [] }, "source": [ "# 4 - The syntax tree presentations\n", "##### [Back to TOC](#TOC)\n", "\n", "The concept of viewtypes is important to this dataset. This database offers the users two distinct viewtypes that can be invoked for representing syntax trees:\n", "\n", "syntax-view (default): present syntax trees in linguistic terms like phrases and clauses.\n", "wg-view: present syntax trees in agnostic terms like word groups." ] }, { "cell_type": "markdown", "id": "2ddf7f23-8d7e-4bcd-a495-ac89894d3468", "metadata": {}, "source": [ "## 4.1 - The 'syntax-view' (default viewtype)\n", "##### [Back to TOC](#TOC)\n", "\n", "The syntax viewtype displays the syntax tree using separate node types for clauses, phrases, and subphrases while annotating them with terms common in linguistic research. This is the default viewtype, so it is automatically set upon invocation of the TF dataset (note the response 'Display is set up for viewtype syntax-view' on the `use` command issued earlier in this Notebook)." ] }, { "cell_type": "markdown", "id": "bb3a934a-29a8-4d9b-9d9d-60e35e9736b4", "metadata": { "tags": [] }, "source": [ "Although in this case te viewtype is already set to 'syntax', for demonstration purposes the command to set this explicitly is invoked in the next Notebook cell." ] }, { "cell_type": "code", "execution_count": 64, "id": "dd512672-cb4f-4098-9493-c8669fb2933b", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/markdown": [ "Display is setup for viewtype [syntax-view](https://github.com/saulocantanhede/tfgreek2/blob/main/docs/syntax-view.md#start)" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "A.viewtype('syntax')" ] }, { "cell_type": "markdown", "id": "0102088d-a072-456b-9838-28286cd328d7", "metadata": {}, "source": [ "The following `show` command will present the resulting tuple and its children in a nicely formatted manner. This effectively presents a syntax tree presentation of John 1:1. Note that since the list `VerseResults` contains only one tuple the `show` command will only present one result." ] }, { "cell_type": "code", "execution_count": 66, "id": "0a51ca20-ca23-4e81-a381-6131be641caa", "metadata": {}, "outputs": [], "source": [ "A.show(VerseResults, queryFeatures=True, full=True)" ] }, { "cell_type": "markdown", "id": "6fe4843b-e69c-4c3d-8469-7770f456d084", "metadata": {}, "source": [ "## 4.2 - View 2: the 'wg-view'\n", "##### [Back to TOC](#TOC)\n", "\n", "The 'wg-view ' (wordgroup viewtype) is a syntactically agnostic presentation in where clauses, phrases and subprases are not respresented by distinct nodestypes. They all map to the same node type, namely wordgroup, while their syntactic function and properties are reflected by their respective feature values.\n", "\n", "The following command will set the viewtype to `wg`." ] }, { "cell_type": "code", "execution_count": 43, "id": "663bfc21-9ff4-4da8-b59e-edd701ce6503", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/markdown": [ "Display is setup for viewtype [wg-view](https://github.com/saulocantanhede/tfgreek2/blob/main/docs/wg-view.md#start)" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "A.viewtype('wg')" ] }, { "cell_type": "markdown", "id": "59aa17c5-b637-417d-821a-4f6b207d23f3", "metadata": {}, "source": [ "Since we switched to a different viewtype, the command entered before will now show a different version of the tree." ] }, { "cell_type": "code", "execution_count": 47, "id": "42203fe4-dc23-4fb5-8aeb-e227c988f2b2", "metadata": {}, "outputs": [], "source": [ "A.show(VerseResults, queryFeatures=False, full=True)" ] }, { "cell_type": "markdown", "id": "b1936f5e-cbfd-412c-bfa8-1c5ddfc48d7a", "metadata": {}, "source": [ "## 4.3 - All nodes displayed\n", "##### [Back to TOC](#TOC)\n", "\n", "If for some reason it is necessary to display all nodes, there are two options. First the command A.displayReset() can be issued. This also resets all node labels to their definitions found in the [config.yaml](https://github.com/saulocantanhede/tfgreek2/blob/main/app/config.yaml) file. Note that this view is a combination of both previous views, therefore rather cluttered and not practical for normal use." ] }, { "cell_type": "code", "execution_count": 49, "id": "3b1ecf03-4725-4a88-9383-87a76e88e3b1", "metadata": { "tags": [] }, "outputs": [], "source": [ "A.displayReset()" ] }, { "cell_type": "code", "execution_count": 51, "id": "8afa10de-6fff-403b-84d2-fc834a96665d", "metadata": {}, "outputs": [ { "data": { "text/html": [ "

result 1" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse John 1:1
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "A.show(VerseResults, queryFeatures=False)" ] }, { "cell_type": "markdown", "id": "a62159d7-60fc-4141-bf5e-967b722ca0af", "metadata": {}, "source": [ "Another option is to use the command `A.viewtype('reset')` which delivers a comparable result." ] }, { "cell_type": "code", "execution_count": null, "id": "a83c727d-4867-4461-9933-e8223d1eb43e", "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.11.5" } }, "nbformat": 4, "nbformat_minor": 5 }