├── .gitignore ├── requirements.txt ├── logo.png ├── _build ├── html │ ├── index.html │ ├── objects.inv │ ├── _static │ │ ├── file.png │ │ ├── logo.png │ │ ├── minus.png │ │ ├── plus.png │ │ ├── styles │ │ │ └── theme.css │ │ ├── vendor │ │ │ └── fontawesome │ │ │ │ └── 6.5.2 │ │ │ │ ├── webfonts │ │ │ │ ├── fa-brands-400.ttf │ │ │ │ ├── fa-regular-400.ttf │ │ │ │ ├── fa-solid-900.ttf │ │ │ │ ├── fa-solid-900.woff2 │ │ │ │ ├── fa-brands-400.woff2 │ │ │ │ ├── fa-regular-400.woff2 │ │ │ │ ├── fa-v4compatibility.ttf │ │ │ │ └── fa-v4compatibility.woff2 │ │ │ │ ├── js │ │ │ │ └── all.min.js.LICENSE.txt │ │ │ │ └── LICENSE.txt │ │ ├── scripts │ │ │ ├── bootstrap.js.LICENSE.txt │ │ │ ├── quantecon-book-theme.js │ │ │ └── pydata-sphinx-theme.js │ │ ├── check-solid.svg │ │ ├── play-solid.svg │ │ ├── copy-button.svg │ │ ├── documentation_options.js │ │ ├── webpack-macros.html │ │ ├── copybutton.css │ │ ├── sphinx-thebe.css │ │ ├── copybutton_funcs.js │ │ ├── design-tabs.js │ │ ├── togglebutton.css │ │ ├── sphinx-thebe.js │ │ ├── _sphinx_javascript_frameworks_compat.js │ │ ├── doctools.js │ │ ├── sphinx_highlight.js │ │ ├── language_data.js │ │ ├── togglebutton.js │ │ ├── clipboard.min.js │ │ ├── copybutton.js │ │ └── pygments.css │ ├── _sources │ │ ├── mymarkdownfile.md │ │ ├── intro.md │ │ ├── markdown-notebooks.md │ │ ├── markdown.md │ │ ├── markdown-notebooks.ipynb │ │ └── notebooks.ipynb │ ├── .buildinfo │ ├── reports │ │ └── notebooks.err.log │ ├── _sphinx_design_static │ │ └── design-tabs.js │ ├── searchindex.js │ ├── genindex.html │ ├── search.html │ └── mymarkdownfile.html ├── .doctrees │ ├── intro.doctree │ ├── markdown.doctree │ ├── notebooks.doctree │ ├── environment.pickle │ ├── mymarkdownfile.doctree │ └── markdown-notebooks.doctree └── jupyter_execute │ ├── markdown-notebooks.ipynb │ └── notebooks.ipynb ├── mymarkdownfile.md ├── _toc.yml ├── intro.md ├── _config.yml ├── markdown-notebooks.md ├── markdown.md ├── notebooks.ipynb └── references.bib /.gitignore: -------------------------------------------------------------------------------- 1 | _build/ -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | jupyter-book 2 | matplotlib 3 | numpy 4 | -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/logo.png -------------------------------------------------------------------------------- /_build/html/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /_build/html/objects.inv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/_build/html/objects.inv -------------------------------------------------------------------------------- /_build/html/_static/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/_build/html/_static/file.png -------------------------------------------------------------------------------- /_build/html/_static/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/_build/html/_static/logo.png -------------------------------------------------------------------------------- /_build/html/_static/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/_build/html/_static/minus.png -------------------------------------------------------------------------------- /_build/html/_static/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/_build/html/_static/plus.png -------------------------------------------------------------------------------- /_build/.doctrees/intro.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/_build/.doctrees/intro.doctree -------------------------------------------------------------------------------- /_build/.doctrees/markdown.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/_build/.doctrees/markdown.doctree -------------------------------------------------------------------------------- /_build/.doctrees/notebooks.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/_build/.doctrees/notebooks.doctree -------------------------------------------------------------------------------- /_build/.doctrees/environment.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/_build/.doctrees/environment.pickle -------------------------------------------------------------------------------- /_build/.doctrees/mymarkdownfile.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/_build/.doctrees/mymarkdownfile.doctree -------------------------------------------------------------------------------- /_build/.doctrees/markdown-notebooks.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/_build/.doctrees/markdown-notebooks.doctree -------------------------------------------------------------------------------- /_build/html/_static/styles/theme.css: -------------------------------------------------------------------------------- 1 | /* Provided by Sphinx's 'basic' theme, and included in the final set of assets */ 2 | @import "../basic.css"; 3 | -------------------------------------------------------------------------------- /_build/html/_static/vendor/fontawesome/6.5.2/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/_build/html/_static/vendor/fontawesome/6.5.2/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /_build/html/_static/vendor/fontawesome/6.5.2/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/_build/html/_static/vendor/fontawesome/6.5.2/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /_build/html/_static/vendor/fontawesome/6.5.2/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/_build/html/_static/vendor/fontawesome/6.5.2/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /_build/html/_static/vendor/fontawesome/6.5.2/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/_build/html/_static/vendor/fontawesome/6.5.2/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /_build/html/_static/vendor/fontawesome/6.5.2/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/_build/html/_static/vendor/fontawesome/6.5.2/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /_build/html/_static/vendor/fontawesome/6.5.2/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/_build/html/_static/vendor/fontawesome/6.5.2/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /_build/html/_static/vendor/fontawesome/6.5.2/webfonts/fa-v4compatibility.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/_build/html/_static/vendor/fontawesome/6.5.2/webfonts/fa-v4compatibility.ttf -------------------------------------------------------------------------------- /_build/html/_static/vendor/fontawesome/6.5.2/webfonts/fa-v4compatibility.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/helloworld_book/main/_build/html/_static/vendor/fontawesome/6.5.2/webfonts/fa-v4compatibility.woff2 -------------------------------------------------------------------------------- /mymarkdownfile.md: -------------------------------------------------------------------------------- 1 | # Here's my sample title 2 | 3 | This is some sample text. 4 | 5 | (section-label)= 6 | ## Here's my first section 7 | 8 | Here is a [reference to the intro](intro.md). Here is a reference to [](section-label). -------------------------------------------------------------------------------- /_build/html/_sources/mymarkdownfile.md: -------------------------------------------------------------------------------- 1 | # Here's my sample title 2 | 3 | This is some sample text. 4 | 5 | (section-label)= 6 | ## Here's my first section 7 | 8 | Here is a [reference to the intro](intro.md). Here is a reference to [](section-label). -------------------------------------------------------------------------------- /_toc.yml: -------------------------------------------------------------------------------- 1 | # Table of contents 2 | # Learn more at https://jupyterbook.org/customize/toc.html 3 | 4 | format: jb-book 5 | root: intro 6 | chapters: 7 | - file: markdown 8 | - file: notebooks 9 | - file: markdown-notebooks 10 | - file: mymarkdownfile 11 | -------------------------------------------------------------------------------- /_build/html/.buildinfo: -------------------------------------------------------------------------------- 1 | # Sphinx build info version 1 2 | # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. 3 | config: 1cc4948f5784523fccc176c0398ee50a 4 | tags: 645f666f9bcd5a90fca523b33c5a78b7 5 | -------------------------------------------------------------------------------- /_build/html/_static/scripts/bootstrap.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v5.3.3 (https://getbootstrap.com/) 3 | * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5 | */ 6 | -------------------------------------------------------------------------------- /_build/html/_static/vendor/fontawesome/6.5.2/js/all.min.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | * Copyright 2024 Fonticons, Inc. 5 | */ 6 | -------------------------------------------------------------------------------- /_build/html/_static/check-solid.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /_build/html/_static/play-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_build/html/_static/copy-button.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /_build/html/_static/documentation_options.js: -------------------------------------------------------------------------------- 1 | var DOCUMENTATION_OPTIONS = { 2 | URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), 3 | VERSION: '', 4 | LANGUAGE: 'en', 5 | COLLAPSE_INDEX: false, 6 | BUILDER: 'html', 7 | FILE_SUFFIX: '.html', 8 | LINK_SUFFIX: '.html', 9 | HAS_SOURCE: true, 10 | SOURCELINK_SUFFIX: '', 11 | NAVIGATION_WITH_KEYS: false, 12 | SHOW_SEARCH_SUMMARY: true, 13 | ENABLE_SEARCH_SHORTCUTS: true, 14 | }; -------------------------------------------------------------------------------- /intro.md: -------------------------------------------------------------------------------- 1 | # Welcome to your Jupyter Book 2 | 3 | This is a small sample book to give you a feel for how book content is 4 | structured. 5 | It shows off a few of the major file types, as well as some sample content. 6 | It does not go in-depth into any particular topic - check out [the Jupyter Book documentation](https://jupyterbook.org) for more information. 7 | 8 | Check out the content pages bundled with this sample book to see more. 9 | 10 | ```{tableofcontents} 11 | ``` 12 | 13 | # This is a heading 14 | 15 | This is a `Hello World` Book. It is meant to test the capability of Jupyter Notebook. 16 | 17 | 18 | :::{note} 19 | Here is a note! 20 | ::: 21 | 22 | And here is a code block: 23 | 24 | ``` 25 | e = mc^2 26 | ``` -------------------------------------------------------------------------------- /_build/html/_sources/intro.md: -------------------------------------------------------------------------------- 1 | # Welcome to your Jupyter Book 2 | 3 | This is a small sample book to give you a feel for how book content is 4 | structured. 5 | It shows off a few of the major file types, as well as some sample content. 6 | It does not go in-depth into any particular topic - check out [the Jupyter Book documentation](https://jupyterbook.org) for more information. 7 | 8 | Check out the content pages bundled with this sample book to see more. 9 | 10 | ```{tableofcontents} 11 | ``` 12 | 13 | # This is a heading 14 | 15 | This is a `Hello World` Book. It is meant to test the capability of Jupyter Notebook. 16 | 17 | 18 | :::{note} 19 | Here is a note! 20 | ::: 21 | 22 | And here is a code block: 23 | 24 | ``` 25 | e = mc^2 26 | ``` -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # Book settings 2 | # Learn more at https://jupyterbook.org/customize/config.html 3 | 4 | title: Hello World 5 | author: Hello World Book ! 6 | logo: logo.png 7 | 8 | # Force re-execution of notebooks on each build. 9 | # See https://jupyterbook.org/content/execute.html 10 | execute: 11 | execute_notebooks: force 12 | 13 | # Define the name of the latex output file for PDF builds 14 | latex: 15 | latex_documents: 16 | targetname: book.tex 17 | 18 | # Add a bibtex file so that we can create citations 19 | bibtex_bibfiles: 20 | - references.bib 21 | 22 | # Information about where the book exists on the web 23 | repository: 24 | url: https://github.com/abhimishra91/helloworld_book # Online location of your book 25 | path_to_book: docs # Optional path to your book, relative to the repository root 26 | branch: master # Which branch of the repository should be used when creating links (optional) 27 | 28 | # Add GitHub buttons to your book 29 | # See https://jupyterbook.org/customize/config.html#add-a-link-to-your-repository 30 | html: 31 | use_issues_button: true 32 | use_repository_button: true 33 | 34 | # Theme for the website 35 | # sphinx: 36 | # config: 37 | # html_theme: quantecon_book_theme 38 | -------------------------------------------------------------------------------- /markdown-notebooks.md: -------------------------------------------------------------------------------- 1 | --- 2 | jupytext: 3 | formats: md:myst 4 | text_representation: 5 | extension: .md 6 | format_name: myst 7 | format_version: 0.13 8 | jupytext_version: 1.11.5 9 | kernelspec: 10 | display_name: Python 3 11 | language: python 12 | name: python3 13 | --- 14 | 15 | # Notebooks with MyST Markdown 16 | 17 | Jupyter Book also lets you write text-based notebooks using MyST Markdown. 18 | See [the Notebooks with MyST Markdown documentation](https://jupyterbook.org/file-types/myst-notebooks.html) for more detailed instructions. 19 | This page shows off a notebook written in MyST Markdown. 20 | 21 | ## An example cell 22 | 23 | With MyST Markdown, you can define code cells with a directive like so: 24 | 25 | ```{code-cell} 26 | print(2 + 2) 27 | ``` 28 | 29 | When your book is built, the contents of any `{code-cell}` blocks will be 30 | executed with your default Jupyter kernel, and their outputs will be displayed 31 | in-line with the rest of your content. 32 | 33 | ```{seealso} 34 | Jupyter Book uses [Jupytext](https://jupytext.readthedocs.io/en/latest/) to convert text-based files to notebooks, and can support [many other text-based notebook files](https://jupyterbook.org/file-types/jupytext.html). 35 | ``` 36 | 37 | ## Create a notebook with MyST Markdown 38 | 39 | MyST Markdown notebooks are defined by two things: 40 | 41 | 1. YAML metadata that is needed to understand if / how it should convert text files to notebooks (including information about the kernel needed). 42 | See the YAML at the top of this page for example. 43 | 2. The presence of `{code-cell}` directives, which will be executed with your book. 44 | 45 | That's all that is needed to get started! 46 | 47 | ## Quickly add YAML metadata for MyST Notebooks 48 | 49 | If you have a markdown file and you'd like to quickly add YAML metadata to it, so that Jupyter Book will treat it as a MyST Markdown Notebook, run the following command: 50 | 51 | ``` 52 | jupyter-book myst init path/to/markdownfile.md 53 | ``` 54 | -------------------------------------------------------------------------------- /_build/html/_sources/markdown-notebooks.md: -------------------------------------------------------------------------------- 1 | --- 2 | jupytext: 3 | formats: md:myst 4 | text_representation: 5 | extension: .md 6 | format_name: myst 7 | format_version: 0.13 8 | jupytext_version: 1.11.5 9 | kernelspec: 10 | display_name: Python 3 11 | language: python 12 | name: python3 13 | --- 14 | 15 | # Notebooks with MyST Markdown 16 | 17 | Jupyter Book also lets you write text-based notebooks using MyST Markdown. 18 | See [the Notebooks with MyST Markdown documentation](https://jupyterbook.org/file-types/myst-notebooks.html) for more detailed instructions. 19 | This page shows off a notebook written in MyST Markdown. 20 | 21 | ## An example cell 22 | 23 | With MyST Markdown, you can define code cells with a directive like so: 24 | 25 | ```{code-cell} 26 | print(2 + 2) 27 | ``` 28 | 29 | When your book is built, the contents of any `{code-cell}` blocks will be 30 | executed with your default Jupyter kernel, and their outputs will be displayed 31 | in-line with the rest of your content. 32 | 33 | ```{seealso} 34 | Jupyter Book uses [Jupytext](https://jupytext.readthedocs.io/en/latest/) to convert text-based files to notebooks, and can support [many other text-based notebook files](https://jupyterbook.org/file-types/jupytext.html). 35 | ``` 36 | 37 | ## Create a notebook with MyST Markdown 38 | 39 | MyST Markdown notebooks are defined by two things: 40 | 41 | 1. YAML metadata that is needed to understand if / how it should convert text files to notebooks (including information about the kernel needed). 42 | See the YAML at the top of this page for example. 43 | 2. The presence of `{code-cell}` directives, which will be executed with your book. 44 | 45 | That's all that is needed to get started! 46 | 47 | ## Quickly add YAML metadata for MyST Notebooks 48 | 49 | If you have a markdown file and you'd like to quickly add YAML metadata to it, so that Jupyter Book will treat it as a MyST Markdown Notebook, run the following command: 50 | 51 | ``` 52 | jupyter-book myst init path/to/markdownfile.md 53 | ``` 54 | -------------------------------------------------------------------------------- /_build/html/_static/webpack-macros.html: -------------------------------------------------------------------------------- 1 | 5 | {# Load FontAwesome icons #} 6 | {% macro head_pre_icons() %} 7 | 8 | 9 | 10 | 11 | {% endmacro %} 12 | 13 | {% macro head_pre_assets() %} 14 | 15 | 16 | 17 | 18 | {% endmacro %} 19 | 20 | {% macro head_js_preload() %} 21 | 22 | 23 | 24 | 25 | {% endmacro %} 26 | 27 | {% macro body_post() %} 28 | 29 | 30 | 31 | {% endmacro %} -------------------------------------------------------------------------------- /markdown.md: -------------------------------------------------------------------------------- 1 | # Markdown Files 2 | 3 | Whether you write your book's content in Jupyter Notebooks (`.ipynb`) or 4 | in regular markdown files (`.md`), you'll write in the same flavor of markdown 5 | called **MyST Markdown**. 6 | This is a simple file to help you get started and show off some syntax. 7 | 8 | ## What is MyST? 9 | 10 | MyST stands for "Markedly Structured Text". It 11 | is a slight variation on a flavor of markdown called "CommonMark" markdown, 12 | with small syntax extensions to allow you to write **roles** and **directives** 13 | in the Sphinx ecosystem. 14 | 15 | For more about MyST, see [the MyST Markdown Overview](https://jupyterbook.org/content/myst.html). 16 | 17 | ## Sample Roles and Directives 18 | 19 | Roles and directives are two of the most powerful tools in Jupyter Book. They 20 | are like functions, but written in a markup language. They both 21 | serve a similar purpose, but **roles are written in one line**, whereas 22 | **directives span many lines**. They both accept different kinds of inputs, 23 | and what they do with those inputs depends on the specific role or directive 24 | that is being called. 25 | 26 | Here is a "note" directive: 27 | 28 | ```{note} 29 | Here is a note 30 | ``` 31 | 32 | It will be rendered in a special box when you build your book. 33 | 34 | Here is an inline directive to refer to a document: {doc}`markdown-notebooks`. 35 | 36 | 37 | ## Citations 38 | 39 | You can also cite references that are stored in a `bibtex` file. For example, 40 | the following syntax: `` {cite}`holdgraf_evidence_2014` `` will render like 41 | this: {cite}`holdgraf_evidence_2014`. 42 | 43 | Moreover, you can insert a bibliography into your page with this syntax: 44 | The `{bibliography}` directive must be used for all the `{cite}` roles to 45 | render properly. 46 | For example, if the references for your book are stored in `references.bib`, 47 | then the bibliography is inserted with: 48 | 49 | ```{bibliography} 50 | ``` 51 | 52 | ## Learn more 53 | 54 | This is just a simple starter to get you started. 55 | You can learn a lot more at [jupyterbook.org](https://jupyterbook.org). 56 | -------------------------------------------------------------------------------- /_build/html/_sources/markdown.md: -------------------------------------------------------------------------------- 1 | # Markdown Files 2 | 3 | Whether you write your book's content in Jupyter Notebooks (`.ipynb`) or 4 | in regular markdown files (`.md`), you'll write in the same flavor of markdown 5 | called **MyST Markdown**. 6 | This is a simple file to help you get started and show off some syntax. 7 | 8 | ## What is MyST? 9 | 10 | MyST stands for "Markedly Structured Text". It 11 | is a slight variation on a flavor of markdown called "CommonMark" markdown, 12 | with small syntax extensions to allow you to write **roles** and **directives** 13 | in the Sphinx ecosystem. 14 | 15 | For more about MyST, see [the MyST Markdown Overview](https://jupyterbook.org/content/myst.html). 16 | 17 | ## Sample Roles and Directives 18 | 19 | Roles and directives are two of the most powerful tools in Jupyter Book. They 20 | are like functions, but written in a markup language. They both 21 | serve a similar purpose, but **roles are written in one line**, whereas 22 | **directives span many lines**. They both accept different kinds of inputs, 23 | and what they do with those inputs depends on the specific role or directive 24 | that is being called. 25 | 26 | Here is a "note" directive: 27 | 28 | ```{note} 29 | Here is a note 30 | ``` 31 | 32 | It will be rendered in a special box when you build your book. 33 | 34 | Here is an inline directive to refer to a document: {doc}`markdown-notebooks`. 35 | 36 | 37 | ## Citations 38 | 39 | You can also cite references that are stored in a `bibtex` file. For example, 40 | the following syntax: `` {cite}`holdgraf_evidence_2014` `` will render like 41 | this: {cite}`holdgraf_evidence_2014`. 42 | 43 | Moreover, you can insert a bibliography into your page with this syntax: 44 | The `{bibliography}` directive must be used for all the `{cite}` roles to 45 | render properly. 46 | For example, if the references for your book are stored in `references.bib`, 47 | then the bibliography is inserted with: 48 | 49 | ```{bibliography} 50 | ``` 51 | 52 | ## Learn more 53 | 54 | This is just a simple starter to get you started. 55 | You can learn a lot more at [jupyterbook.org](https://jupyterbook.org). 56 | -------------------------------------------------------------------------------- /_build/html/reports/notebooks.err.log: -------------------------------------------------------------------------------- 1 | Traceback (most recent call last): 2 | File "C:\Users\abhis\anaconda3\envs\app\lib\site-packages\jupyter_cache\executors\utils.py", line 58, in single_nb_execution 3 | executenb( 4 | File "C:\Users\abhis\anaconda3\envs\app\lib\site-packages\nbclient\client.py", line 1314, in execute 5 | return NotebookClient(nb=nb, resources=resources, km=km, **kwargs).execute() 6 | File "C:\Users\abhis\anaconda3\envs\app\lib\site-packages\jupyter_core\utils\__init__.py", line 165, in wrapped 7 | return loop.run_until_complete(inner) 8 | File "C:\Users\abhis\anaconda3\envs\app\lib\asyncio\base_events.py", line 646, in run_until_complete 9 | return future.result() 10 | File "C:\Users\abhis\anaconda3\envs\app\lib\site-packages\nbclient\client.py", line 709, in async_execute 11 | await self.async_execute_cell( 12 | File "C:\Users\abhis\anaconda3\envs\app\lib\site-packages\nbclient\client.py", line 1062, in async_execute_cell 13 | await self._check_raise_for_error(cell, cell_index, exec_reply) 14 | File "C:\Users\abhis\anaconda3\envs\app\lib\site-packages\nbclient\client.py", line 918, in _check_raise_for_error 15 | raise CellExecutionError.from_cell_and_msg(cell, exec_reply_content) 16 | nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell: 17 | ------------------ 18 | from matplotlib import rcParams, cycler 19 | import matplotlib.pyplot as plt 20 | import numpy as np 21 | plt.ion() 22 | ------------------ 23 | 24 | 25 | --------------------------------------------------------------------------- 26 | ModuleNotFoundError Traceback (most recent call last) 27 | Cell In[1], line 1 28 | ----> 1 from matplotlib import rcParams, cycler 29 |  2 import matplotlib.pyplot as plt 30 |  3 import numpy as np 31 | 32 | ModuleNotFoundError: No module named 'matplotlib' 33 | 34 | -------------------------------------------------------------------------------- /_build/html/_static/copybutton.css: -------------------------------------------------------------------------------- 1 | /* Copy buttons */ 2 | button.copybtn { 3 | position: absolute; 4 | display: flex; 5 | top: .3em; 6 | right: .3em; 7 | width: 1.7em; 8 | height: 1.7em; 9 | opacity: 0; 10 | transition: opacity 0.3s, border .3s, background-color .3s; 11 | user-select: none; 12 | padding: 0; 13 | border: none; 14 | outline: none; 15 | border-radius: 0.4em; 16 | /* The colors that GitHub uses */ 17 | border: #1b1f2426 1px solid; 18 | background-color: #f6f8fa; 19 | color: #57606a; 20 | } 21 | 22 | button.copybtn.success { 23 | border-color: #22863a; 24 | color: #22863a; 25 | } 26 | 27 | button.copybtn svg { 28 | stroke: currentColor; 29 | width: 1.5em; 30 | height: 1.5em; 31 | padding: 0.1em; 32 | } 33 | 34 | div.highlight { 35 | position: relative; 36 | } 37 | 38 | /* Show the copybutton */ 39 | .highlight:hover button.copybtn, button.copybtn.success { 40 | opacity: 1; 41 | } 42 | 43 | .highlight button.copybtn:hover { 44 | background-color: rgb(235, 235, 235); 45 | } 46 | 47 | .highlight button.copybtn:active { 48 | background-color: rgb(187, 187, 187); 49 | } 50 | 51 | /** 52 | * A minimal CSS-only tooltip copied from: 53 | * https://codepen.io/mildrenben/pen/rVBrpK 54 | * 55 | * To use, write HTML like the following: 56 | * 57 | *

Short

58 | */ 59 | .o-tooltip--left { 60 | position: relative; 61 | } 62 | 63 | .o-tooltip--left:after { 64 | opacity: 0; 65 | visibility: hidden; 66 | position: absolute; 67 | content: attr(data-tooltip); 68 | padding: .2em; 69 | font-size: .8em; 70 | left: -.2em; 71 | background: grey; 72 | color: white; 73 | white-space: nowrap; 74 | z-index: 2; 75 | border-radius: 2px; 76 | transform: translateX(-102%) translateY(0); 77 | transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); 78 | } 79 | 80 | .o-tooltip--left:hover:after { 81 | display: block; 82 | opacity: 1; 83 | visibility: visible; 84 | transform: translateX(-100%) translateY(0); 85 | transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); 86 | transition-delay: .5s; 87 | } 88 | 89 | /* By default the copy button shouldn't show up when printing a page */ 90 | @media print { 91 | button.copybtn { 92 | display: none; 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /_build/html/_static/sphinx-thebe.css: -------------------------------------------------------------------------------- 1 | /* Thebelab Buttons */ 2 | .thebelab-button { 3 | z-index: 999; 4 | display: inline-block; 5 | padding: 0.35em 1.2em; 6 | margin: 0px 1px; 7 | border-radius: 0.12em; 8 | box-sizing: border-box; 9 | text-decoration: none; 10 | font-family: "Roboto", sans-serif; 11 | font-weight: 300; 12 | text-align: center; 13 | transition: all 0.2s; 14 | background-color: #dddddd; 15 | border: 0.05em solid white; 16 | color: #000000; 17 | } 18 | 19 | .thebelab-button:hover { 20 | border: 0.05em solid black; 21 | background-color: #fcfcfc; 22 | } 23 | 24 | .thebe-launch-button { 25 | height: 2.2em; 26 | font-size: 0.8em; 27 | border: 1px black solid; 28 | } 29 | 30 | /* Thebelab Cell */ 31 | .thebelab-cell pre { 32 | background: none; 33 | } 34 | 35 | .thebelab-cell .thebelab-input { 36 | padding-left: 1em; 37 | margin-bottom: 0.5em; 38 | margin-top: 0.5em; 39 | } 40 | 41 | .thebelab-cell .jp-OutputArea { 42 | margin-top: 0.5em; 43 | margin-left: 1em; 44 | } 45 | 46 | button.thebelab-button.thebelab-run-button { 47 | margin-left: 1.5em; 48 | margin-bottom: 0.5em; 49 | } 50 | 51 | /* Loading button */ 52 | button.thebe-launch-button div.spinner { 53 | float: left; 54 | margin-right: 1em; 55 | } 56 | 57 | /* Remove the spinner when thebelab is ready */ 58 | .thebe-launch-button.thebe-status-ready .spinner { 59 | display: none; 60 | } 61 | 62 | .thebe-launch-button span.status { 63 | font-family: monospace; 64 | font-weight: bold; 65 | } 66 | 67 | .thebe-launch-button.thebe-status-ready span.status { 68 | color: green; 69 | } 70 | 71 | .spinner { 72 | height: 2em; 73 | text-align: center; 74 | font-size: 0.7em; 75 | } 76 | 77 | .spinner > div { 78 | background-color: #f37726; 79 | height: 100%; 80 | width: 6px; 81 | display: inline-block; 82 | 83 | -webkit-animation: sk-stretchdelay 1.2s infinite ease-in-out; 84 | animation: sk-stretchdelay 1.2s infinite ease-in-out; 85 | } 86 | 87 | .spinner .rect2 { 88 | -webkit-animation-delay: -1.1s; 89 | animation-delay: -1.1s; 90 | } 91 | 92 | .spinner .rect3 { 93 | -webkit-animation-delay: -1s; 94 | animation-delay: -1s; 95 | } 96 | 97 | .spinner .rect4 { 98 | -webkit-animation-delay: -0.9s; 99 | animation-delay: -0.9s; 100 | } 101 | 102 | .spinner .rect5 { 103 | -webkit-animation-delay: -0.8s; 104 | animation-delay: -0.8s; 105 | } 106 | 107 | @-webkit-keyframes sk-stretchdelay { 108 | 0%, 109 | 40%, 110 | 100% { 111 | -webkit-transform: scaleY(0.4); 112 | } 113 | 20% { 114 | -webkit-transform: scaleY(1); 115 | } 116 | } 117 | 118 | @keyframes sk-stretchdelay { 119 | 0%, 120 | 40%, 121 | 100% { 122 | transform: scaleY(0.4); 123 | -webkit-transform: scaleY(0.4); 124 | } 125 | 20% { 126 | transform: scaleY(1); 127 | -webkit-transform: scaleY(1); 128 | } 129 | } 130 | -------------------------------------------------------------------------------- /_build/html/_static/copybutton_funcs.js: -------------------------------------------------------------------------------- 1 | function escapeRegExp(string) { 2 | return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string 3 | } 4 | 5 | /** 6 | * Removes excluded text from a Node. 7 | * 8 | * @param {Node} target Node to filter. 9 | * @param {string} exclude CSS selector of nodes to exclude. 10 | * @returns {DOMString} Text from `target` with text removed. 11 | */ 12 | export function filterText(target, exclude) { 13 | const clone = target.cloneNode(true); // clone as to not modify the live DOM 14 | if (exclude) { 15 | // remove excluded nodes 16 | clone.querySelectorAll(exclude).forEach(node => node.remove()); 17 | } 18 | return clone.innerText; 19 | } 20 | 21 | // Callback when a copy button is clicked. Will be passed the node that was clicked 22 | // should then grab the text and replace pieces of text that shouldn't be used in output 23 | export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { 24 | var regexp; 25 | var match; 26 | 27 | // Do we check for line continuation characters and "HERE-documents"? 28 | var useLineCont = !!lineContinuationChar 29 | var useHereDoc = !!hereDocDelim 30 | 31 | // create regexp to capture prompt and remaining line 32 | if (isRegexp) { 33 | regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') 34 | } else { 35 | regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') 36 | } 37 | 38 | const outputLines = []; 39 | var promptFound = false; 40 | var gotLineCont = false; 41 | var gotHereDoc = false; 42 | const lineGotPrompt = []; 43 | for (const line of textContent.split('\n')) { 44 | match = line.match(regexp) 45 | if (match || gotLineCont || gotHereDoc) { 46 | promptFound = regexp.test(line) 47 | lineGotPrompt.push(promptFound) 48 | if (removePrompts && promptFound) { 49 | outputLines.push(match[2]) 50 | } else { 51 | outputLines.push(line) 52 | } 53 | gotLineCont = line.endsWith(lineContinuationChar) & useLineCont 54 | if (line.includes(hereDocDelim) & useHereDoc) 55 | gotHereDoc = !gotHereDoc 56 | } else if (!onlyCopyPromptLines) { 57 | outputLines.push(line) 58 | } else if (copyEmptyLines && line.trim() === '') { 59 | outputLines.push(line) 60 | } 61 | } 62 | 63 | // If no lines with the prompt were found then just use original lines 64 | if (lineGotPrompt.some(v => v === true)) { 65 | textContent = outputLines.join('\n'); 66 | } 67 | 68 | // Remove a trailing newline to avoid auto-running when pasting 69 | if (textContent.endsWith("\n")) { 70 | textContent = textContent.slice(0, -1) 71 | } 72 | return textContent 73 | } 74 | -------------------------------------------------------------------------------- /_build/html/_static/design-tabs.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | 3 | // Extra JS capability for selected tabs to be synced 4 | // The selection is stored in local storage so that it persists across page loads. 5 | 6 | /** 7 | * @type {Record} 8 | */ 9 | let sd_id_to_elements = {}; 10 | const storageKeyPrefix = "sphinx-design-tab-id-"; 11 | 12 | /** 13 | * Create a key for a tab element. 14 | * @param {HTMLElement} el - The tab element. 15 | * @returns {[string, string, string] | null} - The key. 16 | * 17 | */ 18 | function create_key(el) { 19 | let syncId = el.getAttribute("data-sync-id"); 20 | let syncGroup = el.getAttribute("data-sync-group"); 21 | if (!syncId || !syncGroup) return null; 22 | return [syncGroup, syncId, syncGroup + "--" + syncId]; 23 | } 24 | 25 | /** 26 | * Initialize the tab selection. 27 | * 28 | */ 29 | function ready() { 30 | // Find all tabs with sync data 31 | 32 | /** @type {string[]} */ 33 | let groups = []; 34 | 35 | document.querySelectorAll(".sd-tab-label").forEach((label) => { 36 | if (label instanceof HTMLElement) { 37 | let data = create_key(label); 38 | if (data) { 39 | let [group, id, key] = data; 40 | 41 | // add click event listener 42 | // @ts-ignore 43 | label.onclick = onSDLabelClick; 44 | 45 | // store map of key to elements 46 | if (!sd_id_to_elements[key]) { 47 | sd_id_to_elements[key] = []; 48 | } 49 | sd_id_to_elements[key].push(label); 50 | 51 | if (groups.indexOf(group) === -1) { 52 | groups.push(group); 53 | // Check if a specific tab has been selected via URL parameter 54 | const tabParam = new URLSearchParams(window.location.search).get( 55 | group 56 | ); 57 | if (tabParam) { 58 | console.log( 59 | "sphinx-design: Selecting tab id for group '" + 60 | group + 61 | "' from URL parameter: " + 62 | tabParam 63 | ); 64 | window.sessionStorage.setItem(storageKeyPrefix + group, tabParam); 65 | } 66 | } 67 | 68 | // Check is a specific tab has been selected previously 69 | let previousId = window.sessionStorage.getItem( 70 | storageKeyPrefix + group 71 | ); 72 | if (previousId === id) { 73 | // console.log( 74 | // "sphinx-design: Selecting tab from session storage: " + id 75 | // ); 76 | // @ts-ignore 77 | label.previousElementSibling.checked = true; 78 | } 79 | } 80 | } 81 | }); 82 | } 83 | 84 | /** 85 | * Activate other tabs with the same sync id. 86 | * 87 | * @this {HTMLElement} - The element that was clicked. 88 | */ 89 | function onSDLabelClick() { 90 | let data = create_key(this); 91 | if (!data) return; 92 | let [group, id, key] = data; 93 | for (const label of sd_id_to_elements[key]) { 94 | if (label === this) continue; 95 | // @ts-ignore 96 | label.previousElementSibling.checked = true; 97 | } 98 | window.sessionStorage.setItem(storageKeyPrefix + group, id); 99 | } 100 | 101 | document.addEventListener("DOMContentLoaded", ready, false); 102 | -------------------------------------------------------------------------------- /_build/html/_sphinx_design_static/design-tabs.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | 3 | // Extra JS capability for selected tabs to be synced 4 | // The selection is stored in local storage so that it persists across page loads. 5 | 6 | /** 7 | * @type {Record} 8 | */ 9 | let sd_id_to_elements = {}; 10 | const storageKeyPrefix = "sphinx-design-tab-id-"; 11 | 12 | /** 13 | * Create a key for a tab element. 14 | * @param {HTMLElement} el - The tab element. 15 | * @returns {[string, string, string] | null} - The key. 16 | * 17 | */ 18 | function create_key(el) { 19 | let syncId = el.getAttribute("data-sync-id"); 20 | let syncGroup = el.getAttribute("data-sync-group"); 21 | if (!syncId || !syncGroup) return null; 22 | return [syncGroup, syncId, syncGroup + "--" + syncId]; 23 | } 24 | 25 | /** 26 | * Initialize the tab selection. 27 | * 28 | */ 29 | function ready() { 30 | // Find all tabs with sync data 31 | 32 | /** @type {string[]} */ 33 | let groups = []; 34 | 35 | document.querySelectorAll(".sd-tab-label").forEach((label) => { 36 | if (label instanceof HTMLElement) { 37 | let data = create_key(label); 38 | if (data) { 39 | let [group, id, key] = data; 40 | 41 | // add click event listener 42 | // @ts-ignore 43 | label.onclick = onSDLabelClick; 44 | 45 | // store map of key to elements 46 | if (!sd_id_to_elements[key]) { 47 | sd_id_to_elements[key] = []; 48 | } 49 | sd_id_to_elements[key].push(label); 50 | 51 | if (groups.indexOf(group) === -1) { 52 | groups.push(group); 53 | // Check if a specific tab has been selected via URL parameter 54 | const tabParam = new URLSearchParams(window.location.search).get( 55 | group 56 | ); 57 | if (tabParam) { 58 | console.log( 59 | "sphinx-design: Selecting tab id for group '" + 60 | group + 61 | "' from URL parameter: " + 62 | tabParam 63 | ); 64 | window.sessionStorage.setItem(storageKeyPrefix + group, tabParam); 65 | } 66 | } 67 | 68 | // Check is a specific tab has been selected previously 69 | let previousId = window.sessionStorage.getItem( 70 | storageKeyPrefix + group 71 | ); 72 | if (previousId === id) { 73 | // console.log( 74 | // "sphinx-design: Selecting tab from session storage: " + id 75 | // ); 76 | // @ts-ignore 77 | label.previousElementSibling.checked = true; 78 | } 79 | } 80 | } 81 | }); 82 | } 83 | 84 | /** 85 | * Activate other tabs with the same sync id. 86 | * 87 | * @this {HTMLElement} - The element that was clicked. 88 | */ 89 | function onSDLabelClick() { 90 | let data = create_key(this); 91 | if (!data) return; 92 | let [group, id, key] = data; 93 | for (const label of sd_id_to_elements[key]) { 94 | if (label === this) continue; 95 | // @ts-ignore 96 | label.previousElementSibling.checked = true; 97 | } 98 | window.sessionStorage.setItem(storageKeyPrefix + group, id); 99 | } 100 | 101 | document.addEventListener("DOMContentLoaded", ready, false); 102 | -------------------------------------------------------------------------------- /_build/html/_sources/markdown-notebooks.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "c5195d0b", 6 | "metadata": {}, 7 | "source": [ 8 | "# Notebooks with MyST Markdown\n", 9 | "\n", 10 | "Jupyter Book also lets you write text-based notebooks using MyST Markdown.\n", 11 | "See [the Notebooks with MyST Markdown documentation](https://jupyterbook.org/file-types/myst-notebooks.html) for more detailed instructions.\n", 12 | "This page shows off a notebook written in MyST Markdown.\n", 13 | "\n", 14 | "## An example cell\n", 15 | "\n", 16 | "With MyST Markdown, you can define code cells with a directive like so:" 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "execution_count": 1, 22 | "id": "c5072892", 23 | "metadata": {}, 24 | "outputs": [ 25 | { 26 | "name": "stdout", 27 | "output_type": "stream", 28 | "text": [ 29 | "4\n" 30 | ] 31 | } 32 | ], 33 | "source": [ 34 | "print(2 + 2)" 35 | ] 36 | }, 37 | { 38 | "cell_type": "markdown", 39 | "id": "7dad3340", 40 | "metadata": {}, 41 | "source": [ 42 | "When your book is built, the contents of any `{code-cell}` blocks will be\n", 43 | "executed with your default Jupyter kernel, and their outputs will be displayed\n", 44 | "in-line with the rest of your content.\n", 45 | "\n", 46 | "```{seealso}\n", 47 | "Jupyter Book uses [Jupytext](https://jupytext.readthedocs.io/en/latest/) to convert text-based files to notebooks, and can support [many other text-based notebook files](https://jupyterbook.org/file-types/jupytext.html).\n", 48 | "```\n", 49 | "\n", 50 | "## Create a notebook with MyST Markdown\n", 51 | "\n", 52 | "MyST Markdown notebooks are defined by two things:\n", 53 | "\n", 54 | "1. YAML metadata that is needed to understand if / how it should convert text files to notebooks (including information about the kernel needed).\n", 55 | " See the YAML at the top of this page for example.\n", 56 | "2. The presence of `{code-cell}` directives, which will be executed with your book.\n", 57 | "\n", 58 | "That's all that is needed to get started!\n", 59 | "\n", 60 | "## Quickly add YAML metadata for MyST Notebooks\n", 61 | "\n", 62 | "If you have a markdown file and you'd like to quickly add YAML metadata to it, so that Jupyter Book will treat it as a MyST Markdown Notebook, run the following command:\n", 63 | "\n", 64 | "```\n", 65 | "jupyter-book myst init path/to/markdownfile.md\n", 66 | "```" 67 | ] 68 | } 69 | ], 70 | "metadata": { 71 | "jupytext": { 72 | "formats": "md:myst", 73 | "text_representation": { 74 | "extension": ".md", 75 | "format_name": "myst", 76 | "format_version": 0.13, 77 | "jupytext_version": "1.11.5" 78 | } 79 | }, 80 | "kernelspec": { 81 | "display_name": "Python 3", 82 | "language": "python", 83 | "name": "python3" 84 | }, 85 | "language_info": { 86 | "codemirror_mode": { 87 | "name": "ipython", 88 | "version": 3 89 | }, 90 | "file_extension": ".py", 91 | "mimetype": "text/x-python", 92 | "name": "python", 93 | "nbconvert_exporter": "python", 94 | "pygments_lexer": "ipython3", 95 | "version": "3.10.6" 96 | }, 97 | "source_map": [ 98 | 13, 99 | 25, 100 | 27 101 | ] 102 | }, 103 | "nbformat": 4, 104 | "nbformat_minor": 5 105 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/markdown-notebooks.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "c5195d0b", 6 | "metadata": {}, 7 | "source": [ 8 | "# Notebooks with MyST Markdown\n", 9 | "\n", 10 | "Jupyter Book also lets you write text-based notebooks using MyST Markdown.\n", 11 | "See [the Notebooks with MyST Markdown documentation](https://jupyterbook.org/file-types/myst-notebooks.html) for more detailed instructions.\n", 12 | "This page shows off a notebook written in MyST Markdown.\n", 13 | "\n", 14 | "## An example cell\n", 15 | "\n", 16 | "With MyST Markdown, you can define code cells with a directive like so:" 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "execution_count": 1, 22 | "id": "c5072892", 23 | "metadata": {}, 24 | "outputs": [ 25 | { 26 | "name": "stdout", 27 | "output_type": "stream", 28 | "text": [ 29 | "4\n" 30 | ] 31 | } 32 | ], 33 | "source": [ 34 | "print(2 + 2)" 35 | ] 36 | }, 37 | { 38 | "cell_type": "markdown", 39 | "id": "7dad3340", 40 | "metadata": {}, 41 | "source": [ 42 | "When your book is built, the contents of any `{code-cell}` blocks will be\n", 43 | "executed with your default Jupyter kernel, and their outputs will be displayed\n", 44 | "in-line with the rest of your content.\n", 45 | "\n", 46 | "```{seealso}\n", 47 | "Jupyter Book uses [Jupytext](https://jupytext.readthedocs.io/en/latest/) to convert text-based files to notebooks, and can support [many other text-based notebook files](https://jupyterbook.org/file-types/jupytext.html).\n", 48 | "```\n", 49 | "\n", 50 | "## Create a notebook with MyST Markdown\n", 51 | "\n", 52 | "MyST Markdown notebooks are defined by two things:\n", 53 | "\n", 54 | "1. YAML metadata that is needed to understand if / how it should convert text files to notebooks (including information about the kernel needed).\n", 55 | " See the YAML at the top of this page for example.\n", 56 | "2. The presence of `{code-cell}` directives, which will be executed with your book.\n", 57 | "\n", 58 | "That's all that is needed to get started!\n", 59 | "\n", 60 | "## Quickly add YAML metadata for MyST Notebooks\n", 61 | "\n", 62 | "If you have a markdown file and you'd like to quickly add YAML metadata to it, so that Jupyter Book will treat it as a MyST Markdown Notebook, run the following command:\n", 63 | "\n", 64 | "```\n", 65 | "jupyter-book myst init path/to/markdownfile.md\n", 66 | "```" 67 | ] 68 | } 69 | ], 70 | "metadata": { 71 | "jupytext": { 72 | "formats": "md:myst", 73 | "text_representation": { 74 | "extension": ".md", 75 | "format_name": "myst", 76 | "format_version": 0.13, 77 | "jupytext_version": "1.11.5" 78 | } 79 | }, 80 | "kernelspec": { 81 | "display_name": "Python 3", 82 | "language": "python", 83 | "name": "python3" 84 | }, 85 | "language_info": { 86 | "codemirror_mode": { 87 | "name": "ipython", 88 | "version": 3 89 | }, 90 | "file_extension": ".py", 91 | "mimetype": "text/x-python", 92 | "name": "python", 93 | "nbconvert_exporter": "python", 94 | "pygments_lexer": "ipython3", 95 | "version": "3.10.6" 96 | }, 97 | "source_map": [ 98 | 13, 99 | 25, 100 | 27 101 | ] 102 | }, 103 | "nbformat": 4, 104 | "nbformat_minor": 5 105 | } -------------------------------------------------------------------------------- /notebooks.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Content with notebooks\n", 8 | "\n", 9 | "You can also create content with Jupyter Notebooks. This means that you can include\n", 10 | "code blocks and their outputs in your book.\n", 11 | "\n", 12 | "## Markdown + notebooks\n", 13 | "\n", 14 | "As it is markdown, you can embed images, HTML, etc into your posts!\n", 15 | "\n", 16 | "![](https://myst-parser.readthedocs.io/en/latest/_static/logo-wide.svg)\n", 17 | "\n", 18 | "You can also $add_{math}$ and\n", 19 | "\n", 20 | "$$\n", 21 | "math^{blocks}\n", 22 | "$$\n", 23 | "\n", 24 | "or\n", 25 | "\n", 26 | "$$\n", 27 | "\\begin{aligned}\n", 28 | "\\mbox{mean} la_{tex} \\\\ \\\\\n", 29 | "math blocks\n", 30 | "\\end{aligned}\n", 31 | "$$\n", 32 | "\n", 33 | "But make sure you \\$Escape \\$your \\$dollar signs \\$you want to keep!\n", 34 | "\n", 35 | "## MyST markdown\n", 36 | "\n", 37 | "MyST markdown works in Jupyter Notebooks as well. For more information about MyST markdown, check\n", 38 | "out [the MyST guide in Jupyter Book](https://jupyterbook.org/content/myst.html),\n", 39 | "or see [the MyST markdown documentation](https://myst-parser.readthedocs.io/en/latest/).\n", 40 | "\n", 41 | "## Code blocks and outputs\n", 42 | "\n", 43 | "Jupyter Book will also embed your code blocks and output in your book.\n", 44 | "For example, here's some sample Matplotlib code:" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": null, 50 | "metadata": {}, 51 | "outputs": [], 52 | "source": [ 53 | "from matplotlib import rcParams, cycler\n", 54 | "import matplotlib.pyplot as plt\n", 55 | "import numpy as np\n", 56 | "plt.ion()" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": null, 62 | "metadata": {}, 63 | "outputs": [], 64 | "source": [ 65 | "# Fixing random state for reproducibility\n", 66 | "np.random.seed(19680801)\n", 67 | "\n", 68 | "N = 10\n", 69 | "data = [np.logspace(0, 1, 100) + np.random.randn(100) + ii for ii in range(N)]\n", 70 | "data = np.array(data).T\n", 71 | "cmap = plt.cm.coolwarm\n", 72 | "rcParams['axes.prop_cycle'] = cycler(color=cmap(np.linspace(0, 1, N)))\n", 73 | "\n", 74 | "\n", 75 | "from matplotlib.lines import Line2D\n", 76 | "custom_lines = [Line2D([0], [0], color=cmap(0.), lw=4),\n", 77 | " Line2D([0], [0], color=cmap(.5), lw=4),\n", 78 | " Line2D([0], [0], color=cmap(1.), lw=4)]\n", 79 | "\n", 80 | "fig, ax = plt.subplots(figsize=(10, 5))\n", 81 | "lines = ax.plot(data)\n", 82 | "ax.legend(custom_lines, ['Cold', 'Medium', 'Hot']);" 83 | ] 84 | }, 85 | { 86 | "cell_type": "markdown", 87 | "metadata": {}, 88 | "source": [ 89 | "There is a lot more that you can do with outputs (such as including interactive outputs)\n", 90 | "with your book. For more information about this, see [the Jupyter Book documentation](https://jupyterbook.org)" 91 | ] 92 | } 93 | ], 94 | "metadata": { 95 | "kernelspec": { 96 | "display_name": "Python 3", 97 | "language": "python", 98 | "name": "python3" 99 | }, 100 | "language_info": { 101 | "codemirror_mode": { 102 | "name": "ipython", 103 | "version": 3 104 | }, 105 | "file_extension": ".py", 106 | "mimetype": "text/x-python", 107 | "name": "python", 108 | "nbconvert_exporter": "python", 109 | "pygments_lexer": "ipython3", 110 | "version": "3.8.0" 111 | }, 112 | "widgets": { 113 | "application/vnd.jupyter.widget-state+json": { 114 | "state": {}, 115 | "version_major": 2, 116 | "version_minor": 0 117 | } 118 | } 119 | }, 120 | "nbformat": 4, 121 | "nbformat_minor": 4 122 | } 123 | -------------------------------------------------------------------------------- /_build/html/_sources/notebooks.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Content with notebooks\n", 8 | "\n", 9 | "You can also create content with Jupyter Notebooks. This means that you can include\n", 10 | "code blocks and their outputs in your book.\n", 11 | "\n", 12 | "## Markdown + notebooks\n", 13 | "\n", 14 | "As it is markdown, you can embed images, HTML, etc into your posts!\n", 15 | "\n", 16 | "![](https://myst-parser.readthedocs.io/en/latest/_static/logo-wide.svg)\n", 17 | "\n", 18 | "You can also $add_{math}$ and\n", 19 | "\n", 20 | "$$\n", 21 | "math^{blocks}\n", 22 | "$$\n", 23 | "\n", 24 | "or\n", 25 | "\n", 26 | "$$\n", 27 | "\\begin{aligned}\n", 28 | "\\mbox{mean} la_{tex} \\\\ \\\\\n", 29 | "math blocks\n", 30 | "\\end{aligned}\n", 31 | "$$\n", 32 | "\n", 33 | "But make sure you \\$Escape \\$your \\$dollar signs \\$you want to keep!\n", 34 | "\n", 35 | "## MyST markdown\n", 36 | "\n", 37 | "MyST markdown works in Jupyter Notebooks as well. For more information about MyST markdown, check\n", 38 | "out [the MyST guide in Jupyter Book](https://jupyterbook.org/content/myst.html),\n", 39 | "or see [the MyST markdown documentation](https://myst-parser.readthedocs.io/en/latest/).\n", 40 | "\n", 41 | "## Code blocks and outputs\n", 42 | "\n", 43 | "Jupyter Book will also embed your code blocks and output in your book.\n", 44 | "For example, here's some sample Matplotlib code:" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": null, 50 | "metadata": {}, 51 | "outputs": [], 52 | "source": [ 53 | "from matplotlib import rcParams, cycler\n", 54 | "import matplotlib.pyplot as plt\n", 55 | "import numpy as np\n", 56 | "plt.ion()" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": null, 62 | "metadata": {}, 63 | "outputs": [], 64 | "source": [ 65 | "# Fixing random state for reproducibility\n", 66 | "np.random.seed(19680801)\n", 67 | "\n", 68 | "N = 10\n", 69 | "data = [np.logspace(0, 1, 100) + np.random.randn(100) + ii for ii in range(N)]\n", 70 | "data = np.array(data).T\n", 71 | "cmap = plt.cm.coolwarm\n", 72 | "rcParams['axes.prop_cycle'] = cycler(color=cmap(np.linspace(0, 1, N)))\n", 73 | "\n", 74 | "\n", 75 | "from matplotlib.lines import Line2D\n", 76 | "custom_lines = [Line2D([0], [0], color=cmap(0.), lw=4),\n", 77 | " Line2D([0], [0], color=cmap(.5), lw=4),\n", 78 | " Line2D([0], [0], color=cmap(1.), lw=4)]\n", 79 | "\n", 80 | "fig, ax = plt.subplots(figsize=(10, 5))\n", 81 | "lines = ax.plot(data)\n", 82 | "ax.legend(custom_lines, ['Cold', 'Medium', 'Hot']);" 83 | ] 84 | }, 85 | { 86 | "cell_type": "markdown", 87 | "metadata": {}, 88 | "source": [ 89 | "There is a lot more that you can do with outputs (such as including interactive outputs)\n", 90 | "with your book. For more information about this, see [the Jupyter Book documentation](https://jupyterbook.org)" 91 | ] 92 | } 93 | ], 94 | "metadata": { 95 | "kernelspec": { 96 | "display_name": "Python 3", 97 | "language": "python", 98 | "name": "python3" 99 | }, 100 | "language_info": { 101 | "codemirror_mode": { 102 | "name": "ipython", 103 | "version": 3 104 | }, 105 | "file_extension": ".py", 106 | "mimetype": "text/x-python", 107 | "name": "python", 108 | "nbconvert_exporter": "python", 109 | "pygments_lexer": "ipython3", 110 | "version": "3.8.0" 111 | }, 112 | "widgets": { 113 | "application/vnd.jupyter.widget-state+json": { 114 | "state": {}, 115 | "version_major": 2, 116 | "version_minor": 0 117 | } 118 | } 119 | }, 120 | "nbformat": 4, 121 | "nbformat_minor": 4 122 | } 123 | -------------------------------------------------------------------------------- /_build/html/_static/togglebutton.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Admonition-based toggles 3 | */ 4 | 5 | /* Visibility of the target */ 6 | .admonition.toggle .admonition-title ~ * { 7 | transition: opacity .3s, height .3s; 8 | } 9 | 10 | /* Toggle buttons inside admonitions so we see the title */ 11 | .admonition.toggle { 12 | position: relative; 13 | } 14 | 15 | /* Titles should cut off earlier to avoid overlapping w/ button */ 16 | .admonition.toggle .admonition-title { 17 | padding-right: 25%; 18 | cursor: pointer; 19 | } 20 | 21 | /* Hovering will cause a slight shift in color to make it feel interactive */ 22 | .admonition.toggle .admonition-title:hover { 23 | box-shadow: inset 0 0 0px 20px rgb(0 0 0 / 1%); 24 | } 25 | 26 | /* Hovering will cause a slight shift in color to make it feel interactive */ 27 | .admonition.toggle .admonition-title:active { 28 | box-shadow: inset 0 0 0px 20px rgb(0 0 0 / 3%); 29 | } 30 | 31 | /* Remove extra whitespace below the admonition title when hidden */ 32 | .admonition.toggle-hidden { 33 | padding-bottom: 0; 34 | } 35 | 36 | .admonition.toggle-hidden .admonition-title { 37 | margin-bottom: 0; 38 | } 39 | 40 | /* hides all the content of a page until de-toggled */ 41 | .admonition.toggle-hidden .admonition-title ~ * { 42 | height: 0; 43 | margin: 0; 44 | opacity: 0; 45 | visibility: hidden; 46 | } 47 | 48 | /* General button style and position*/ 49 | button.toggle-button { 50 | /** 51 | * Background and shape. By default there's no background 52 | * but users can style as they wish 53 | */ 54 | background: none; 55 | border: none; 56 | outline: none; 57 | 58 | /* Positioning just inside the admonition title */ 59 | position: absolute; 60 | right: 0.5em; 61 | padding: 0px; 62 | border: none; 63 | outline: none; 64 | } 65 | 66 | /* Display the toggle hint on wide screens */ 67 | @media (min-width: 768px) { 68 | button.toggle-button.toggle-button-hidden:before { 69 | content: attr(data-toggle-hint); /* This will be filled in by JS */ 70 | font-size: .8em; 71 | align-self: center; 72 | } 73 | } 74 | 75 | /* Icon behavior */ 76 | .tb-icon { 77 | transition: transform .2s ease-out; 78 | height: 1.5em; 79 | width: 1.5em; 80 | stroke: currentColor; /* So that we inherit the color of other text */ 81 | } 82 | 83 | /* The icon should point right when closed, down when open. */ 84 | /* Open */ 85 | .admonition.toggle button .tb-icon { 86 | transform: rotate(90deg); 87 | } 88 | 89 | /* Closed */ 90 | .admonition.toggle button.toggle-button-hidden .tb-icon { 91 | transform: rotate(0deg); 92 | } 93 | 94 | /* With details toggles, we don't rotate the icon so it points right */ 95 | details.toggle-details .tb-icon { 96 | height: 1.4em; 97 | width: 1.4em; 98 | margin-top: 0.1em; /* To center the button vertically */ 99 | } 100 | 101 | 102 | /** 103 | * Details-based toggles. 104 | * In this case, we wrap elements with `.toggle` in a details block. 105 | */ 106 | 107 | /* Details blocks */ 108 | details.toggle-details { 109 | margin: 1em 0; 110 | } 111 | 112 | 113 | details.toggle-details summary { 114 | display: flex; 115 | align-items: center; 116 | cursor: pointer; 117 | list-style: none; 118 | border-radius: .2em; 119 | border-left: 3px solid #1976d2; 120 | background-color: rgb(204 204 204 / 10%); 121 | padding: 0.2em 0.7em 0.3em 0.5em; /* Less padding on left because the SVG has left margin */ 122 | font-size: 0.9em; 123 | } 124 | 125 | details.toggle-details summary:hover { 126 | background-color: rgb(204 204 204 / 20%); 127 | } 128 | 129 | details.toggle-details summary:active { 130 | background: rgb(204 204 204 / 28%); 131 | } 132 | 133 | .toggle-details__summary-text { 134 | margin-left: 0.2em; 135 | } 136 | 137 | details.toggle-details[open] summary { 138 | margin-bottom: .5em; 139 | } 140 | 141 | details.toggle-details[open] summary .tb-icon { 142 | transform: rotate(90deg); 143 | } 144 | 145 | details.toggle-details[open] summary ~ * { 146 | animation: toggle-fade-in .3s ease-out; 147 | } 148 | 149 | @keyframes toggle-fade-in { 150 | from {opacity: 0%;} 151 | to {opacity: 100%;} 152 | } 153 | 154 | /* Print rules - we hide all toggle button elements at print */ 155 | @media print { 156 | /* Always hide the summary so the button doesn't show up */ 157 | details.toggle-details summary { 158 | display: none; 159 | } 160 | } -------------------------------------------------------------------------------- /_build/html/_static/sphinx-thebe.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Add attributes to Thebe blocks to initialize thebe properly 3 | */ 4 | var configureThebe = () => { 5 | // Load thebe config in case we want to update it as some point 6 | console.log("[sphinx-thebe]: Loading thebe config..."); 7 | thebe_config = document.querySelector("script[type=\"text/x-thebe-config\"]"); 8 | 9 | // If we already detect a Thebe cell, don't re-run 10 | if (document.querySelectorAll("div.thebe-cell").length > 0) { 11 | return; 12 | } 13 | 14 | // Update thebe buttons with loading message 15 | document.querySelectorAll(".thebe-launch-button").forEach((button) => { 16 | button.innerHTML = ` 17 |
18 |
19 |
20 |
21 |
22 |
23 | `; 24 | }); 25 | 26 | // Set thebe event hooks 27 | var thebeStatus; 28 | thebelab.on("status", function (evt, data) { 29 | console.log("Status changed:", data.status, data.message); 30 | 31 | const button = document.querySelector(".thebe-launch-button "); 32 | button.classList.replace( 33 | `thebe-status-${thebeStatus}`, 34 | `thebe-status-${data.status}` 35 | ) 36 | button.querySelector(".loading-text") 37 | .innerHTML = ( 38 | `Launching from mybinder.org: 39 | ${data.status}` 40 | ); 41 | 42 | // Now update our thebe status 43 | thebeStatus = data.status; 44 | 45 | // Find any cells with an initialization tag and ask thebe to run them when ready 46 | if (data.status === "ready") { 47 | var thebeInitCells = document.querySelectorAll( 48 | ".thebe-init, .tag_thebe-init" 49 | ); 50 | thebeInitCells.forEach((cell) => { 51 | console.log("Initializing Thebe with cell: " + cell.id); 52 | cell.querySelector(".thebelab-run-button").click(); 53 | }); 54 | } 55 | }); 56 | }; 57 | 58 | /** 59 | * Update the page DOM to use Thebe elements 60 | */ 61 | var modifyDOMForThebe = () => { 62 | // Find all code cells, replace with Thebe interactive code cells 63 | const codeCells = document.querySelectorAll(thebe_selector); 64 | codeCells.forEach((codeCell, index) => { 65 | const codeCellId = (index) => `codecell${index}`; 66 | codeCell.id = codeCellId(index); 67 | codeCellText = codeCell.querySelector(thebe_selector_input); 68 | codeCellOutput = codeCell.querySelector(thebe_selector_output); 69 | 70 | // Clean up the language to make it work w/ CodeMirror and add it to the cell 71 | dataLanguage = detectLanguage(kernelName); 72 | 73 | // Re-arrange the cell and add metadata 74 | if (codeCellText) { 75 | codeCellText.setAttribute("data-language", dataLanguage); 76 | codeCellText.setAttribute("data-executable", "true"); 77 | 78 | // If we had an output, insert it just after the `pre` cell 79 | if (codeCellOutput) { 80 | codeCellOutput.setAttribute("data-output", ""); 81 | codeCellText.insertAdjacentElement('afterend', codeCellOutput); 82 | } 83 | } 84 | 85 | // Remove sphinx-copybutton blocks, which are common in Sphinx 86 | codeCell.querySelectorAll("button.copybtn").forEach((el) => { 87 | el.remove(); 88 | }); 89 | }); 90 | }; 91 | 92 | var initThebe = () => { 93 | // Load thebe dynamically if it's not already loaded 94 | if (typeof thebelab === "undefined") { 95 | console.log("[sphinx-thebe]: Loading thebe from CDN..."); 96 | document.querySelector(".thebe-launch-button ").innerText = "Loading thebe from CDN..."; 97 | 98 | const script = document.createElement("script"); 99 | script.src = `${THEBE_JS_URL}`; 100 | document.head.appendChild(script); 101 | 102 | // Runs once the script has finished loading 103 | script.addEventListener("load", () => { 104 | console.log("[sphinx-thebe]: Finished loading thebe from CDN..."); 105 | configureThebe(); 106 | modifyDOMForThebe(); 107 | thebelab.bootstrap(); 108 | }); 109 | } else { 110 | console.log( 111 | "[sphinx-thebe]: thebe already loaded, not loading from CDN..." 112 | ); 113 | configureThebe(); 114 | modifyDOMForThebe(); 115 | thebelab.bootstrap(); 116 | } 117 | }; 118 | 119 | // Helper function to munge the language name 120 | var detectLanguage = (language) => { 121 | if (language.indexOf("python") > -1) { 122 | language = "python"; 123 | } else if (language === "ir") { 124 | language = "r"; 125 | } 126 | return language; 127 | }; 128 | -------------------------------------------------------------------------------- /_build/html/_static/_sphinx_javascript_frameworks_compat.js: -------------------------------------------------------------------------------- 1 | /* 2 | * _sphinx_javascript_frameworks_compat.js 3 | * ~~~~~~~~~~ 4 | * 5 | * Compatability shim for jQuery and underscores.js. 6 | * 7 | * WILL BE REMOVED IN Sphinx 6.0 8 | * xref RemovedInSphinx60Warning 9 | * 10 | */ 11 | 12 | /** 13 | * select a different prefix for underscore 14 | */ 15 | $u = _.noConflict(); 16 | 17 | 18 | /** 19 | * small helper function to urldecode strings 20 | * 21 | * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL 22 | */ 23 | jQuery.urldecode = function(x) { 24 | if (!x) { 25 | return x 26 | } 27 | return decodeURIComponent(x.replace(/\+/g, ' ')); 28 | }; 29 | 30 | /** 31 | * small helper function to urlencode strings 32 | */ 33 | jQuery.urlencode = encodeURIComponent; 34 | 35 | /** 36 | * This function returns the parsed url parameters of the 37 | * current request. Multiple values per key are supported, 38 | * it will always return arrays of strings for the value parts. 39 | */ 40 | jQuery.getQueryParameters = function(s) { 41 | if (typeof s === 'undefined') 42 | s = document.location.search; 43 | var parts = s.substr(s.indexOf('?') + 1).split('&'); 44 | var result = {}; 45 | for (var i = 0; i < parts.length; i++) { 46 | var tmp = parts[i].split('=', 2); 47 | var key = jQuery.urldecode(tmp[0]); 48 | var value = jQuery.urldecode(tmp[1]); 49 | if (key in result) 50 | result[key].push(value); 51 | else 52 | result[key] = [value]; 53 | } 54 | return result; 55 | }; 56 | 57 | /** 58 | * highlight a given string on a jquery object by wrapping it in 59 | * span elements with the given class name. 60 | */ 61 | jQuery.fn.highlightText = function(text, className) { 62 | function highlight(node, addItems) { 63 | if (node.nodeType === 3) { 64 | var val = node.nodeValue; 65 | var pos = val.toLowerCase().indexOf(text); 66 | if (pos >= 0 && 67 | !jQuery(node.parentNode).hasClass(className) && 68 | !jQuery(node.parentNode).hasClass("nohighlight")) { 69 | var span; 70 | var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); 71 | if (isInSVG) { 72 | span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); 73 | } else { 74 | span = document.createElement("span"); 75 | span.className = className; 76 | } 77 | span.appendChild(document.createTextNode(val.substr(pos, text.length))); 78 | node.parentNode.insertBefore(span, node.parentNode.insertBefore( 79 | document.createTextNode(val.substr(pos + text.length)), 80 | node.nextSibling)); 81 | node.nodeValue = val.substr(0, pos); 82 | if (isInSVG) { 83 | var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); 84 | var bbox = node.parentElement.getBBox(); 85 | rect.x.baseVal.value = bbox.x; 86 | rect.y.baseVal.value = bbox.y; 87 | rect.width.baseVal.value = bbox.width; 88 | rect.height.baseVal.value = bbox.height; 89 | rect.setAttribute('class', className); 90 | addItems.push({ 91 | "parent": node.parentNode, 92 | "target": rect}); 93 | } 94 | } 95 | } 96 | else if (!jQuery(node).is("button, select, textarea")) { 97 | jQuery.each(node.childNodes, function() { 98 | highlight(this, addItems); 99 | }); 100 | } 101 | } 102 | var addItems = []; 103 | var result = this.each(function() { 104 | highlight(this, addItems); 105 | }); 106 | for (var i = 0; i < addItems.length; ++i) { 107 | jQuery(addItems[i].parent).before(addItems[i].target); 108 | } 109 | return result; 110 | }; 111 | 112 | /* 113 | * backward compatibility for jQuery.browser 114 | * This will be supported until firefox bug is fixed. 115 | */ 116 | if (!jQuery.browser) { 117 | jQuery.uaMatch = function(ua) { 118 | ua = ua.toLowerCase(); 119 | 120 | var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || 121 | /(webkit)[ \/]([\w.]+)/.exec(ua) || 122 | /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || 123 | /(msie) ([\w.]+)/.exec(ua) || 124 | ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || 125 | []; 126 | 127 | return { 128 | browser: match[ 1 ] || "", 129 | version: match[ 2 ] || "0" 130 | }; 131 | }; 132 | jQuery.browser = {}; 133 | jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; 134 | } 135 | -------------------------------------------------------------------------------- /_build/jupyter_execute/notebooks.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Content with notebooks\n", 8 | "\n", 9 | "You can also create content with Jupyter Notebooks. This means that you can include\n", 10 | "code blocks and their outputs in your book.\n", 11 | "\n", 12 | "## Markdown + notebooks\n", 13 | "\n", 14 | "As it is markdown, you can embed images, HTML, etc into your posts!\n", 15 | "\n", 16 | "![](https://myst-parser.readthedocs.io/en/latest/_static/logo-wide.svg)\n", 17 | "\n", 18 | "You can also $add_{math}$ and\n", 19 | "\n", 20 | "$$\n", 21 | "math^{blocks}\n", 22 | "$$\n", 23 | "\n", 24 | "or\n", 25 | "\n", 26 | "$$\n", 27 | "\\begin{aligned}\n", 28 | "\\mbox{mean} la_{tex} \\\\ \\\\\n", 29 | "math blocks\n", 30 | "\\end{aligned}\n", 31 | "$$\n", 32 | "\n", 33 | "But make sure you \\$Escape \\$your \\$dollar signs \\$you want to keep!\n", 34 | "\n", 35 | "## MyST markdown\n", 36 | "\n", 37 | "MyST markdown works in Jupyter Notebooks as well. For more information about MyST markdown, check\n", 38 | "out [the MyST guide in Jupyter Book](https://jupyterbook.org/content/myst.html),\n", 39 | "or see [the MyST markdown documentation](https://myst-parser.readthedocs.io/en/latest/).\n", 40 | "\n", 41 | "## Code blocks and outputs\n", 42 | "\n", 43 | "Jupyter Book will also embed your code blocks and output in your book.\n", 44 | "For example, here's some sample Matplotlib code:" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 1, 50 | "metadata": {}, 51 | "outputs": [ 52 | { 53 | "ename": "ModuleNotFoundError", 54 | "evalue": "No module named 'matplotlib'", 55 | "output_type": "error", 56 | "traceback": [ 57 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 58 | "\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", 59 | "Cell \u001b[1;32mIn[1], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mmatplotlib\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m rcParams, cycler\n\u001b[0;32m 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mmatplotlib\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mpyplot\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mplt\u001b[39;00m\n\u001b[0;32m 3\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n", 60 | "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'matplotlib'" 61 | ] 62 | } 63 | ], 64 | "source": [ 65 | "from matplotlib import rcParams, cycler\n", 66 | "import matplotlib.pyplot as plt\n", 67 | "import numpy as np\n", 68 | "plt.ion()" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": null, 74 | "metadata": {}, 75 | "outputs": [], 76 | "source": [ 77 | "# Fixing random state for reproducibility\n", 78 | "np.random.seed(19680801)\n", 79 | "\n", 80 | "N = 10\n", 81 | "data = [np.logspace(0, 1, 100) + np.random.randn(100) + ii for ii in range(N)]\n", 82 | "data = np.array(data).T\n", 83 | "cmap = plt.cm.coolwarm\n", 84 | "rcParams['axes.prop_cycle'] = cycler(color=cmap(np.linspace(0, 1, N)))\n", 85 | "\n", 86 | "\n", 87 | "from matplotlib.lines import Line2D\n", 88 | "custom_lines = [Line2D([0], [0], color=cmap(0.), lw=4),\n", 89 | " Line2D([0], [0], color=cmap(.5), lw=4),\n", 90 | " Line2D([0], [0], color=cmap(1.), lw=4)]\n", 91 | "\n", 92 | "fig, ax = plt.subplots(figsize=(10, 5))\n", 93 | "lines = ax.plot(data)\n", 94 | "ax.legend(custom_lines, ['Cold', 'Medium', 'Hot']);" 95 | ] 96 | }, 97 | { 98 | "cell_type": "markdown", 99 | "metadata": {}, 100 | "source": [ 101 | "There is a lot more that you can do with outputs (such as including interactive outputs)\n", 102 | "with your book. For more information about this, see [the Jupyter Book documentation](https://jupyterbook.org)" 103 | ] 104 | } 105 | ], 106 | "metadata": { 107 | "kernelspec": { 108 | "display_name": "Python 3", 109 | "language": "python", 110 | "name": "python3" 111 | }, 112 | "language_info": { 113 | "codemirror_mode": { 114 | "name": "ipython", 115 | "version": 3 116 | }, 117 | "file_extension": ".py", 118 | "mimetype": "text/x-python", 119 | "name": "python", 120 | "nbconvert_exporter": "python", 121 | "pygments_lexer": "ipython3", 122 | "version": "3.10.6" 123 | }, 124 | "widgets": { 125 | "application/vnd.jupyter.widget-state+json": { 126 | "state": {}, 127 | "version_major": 2, 128 | "version_minor": 0 129 | } 130 | } 131 | }, 132 | "nbformat": 4, 133 | "nbformat_minor": 4 134 | } -------------------------------------------------------------------------------- /_build/html/_static/doctools.js: -------------------------------------------------------------------------------- 1 | /* 2 | * doctools.js 3 | * ~~~~~~~~~~~ 4 | * 5 | * Base JavaScript utilities for all Sphinx HTML documentation. 6 | * 7 | * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. 8 | * :license: BSD, see LICENSE for details. 9 | * 10 | */ 11 | "use strict"; 12 | 13 | const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ 14 | "TEXTAREA", 15 | "INPUT", 16 | "SELECT", 17 | "BUTTON", 18 | ]); 19 | 20 | const _ready = (callback) => { 21 | if (document.readyState !== "loading") { 22 | callback(); 23 | } else { 24 | document.addEventListener("DOMContentLoaded", callback); 25 | } 26 | }; 27 | 28 | /** 29 | * Small JavaScript module for the documentation. 30 | */ 31 | const Documentation = { 32 | init: () => { 33 | Documentation.initDomainIndexTable(); 34 | Documentation.initOnKeyListeners(); 35 | }, 36 | 37 | /** 38 | * i18n support 39 | */ 40 | TRANSLATIONS: {}, 41 | PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), 42 | LOCALE: "unknown", 43 | 44 | // gettext and ngettext don't access this so that the functions 45 | // can safely bound to a different name (_ = Documentation.gettext) 46 | gettext: (string) => { 47 | const translated = Documentation.TRANSLATIONS[string]; 48 | switch (typeof translated) { 49 | case "undefined": 50 | return string; // no translation 51 | case "string": 52 | return translated; // translation exists 53 | default: 54 | return translated[0]; // (singular, plural) translation tuple exists 55 | } 56 | }, 57 | 58 | ngettext: (singular, plural, n) => { 59 | const translated = Documentation.TRANSLATIONS[singular]; 60 | if (typeof translated !== "undefined") 61 | return translated[Documentation.PLURAL_EXPR(n)]; 62 | return n === 1 ? singular : plural; 63 | }, 64 | 65 | addTranslations: (catalog) => { 66 | Object.assign(Documentation.TRANSLATIONS, catalog.messages); 67 | Documentation.PLURAL_EXPR = new Function( 68 | "n", 69 | `return (${catalog.plural_expr})` 70 | ); 71 | Documentation.LOCALE = catalog.locale; 72 | }, 73 | 74 | /** 75 | * helper function to focus on search bar 76 | */ 77 | focusSearchBar: () => { 78 | document.querySelectorAll("input[name=q]")[0]?.focus(); 79 | }, 80 | 81 | /** 82 | * Initialise the domain index toggle buttons 83 | */ 84 | initDomainIndexTable: () => { 85 | const toggler = (el) => { 86 | const idNumber = el.id.substr(7); 87 | const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); 88 | if (el.src.substr(-9) === "minus.png") { 89 | el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; 90 | toggledRows.forEach((el) => (el.style.display = "none")); 91 | } else { 92 | el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; 93 | toggledRows.forEach((el) => (el.style.display = "")); 94 | } 95 | }; 96 | 97 | const togglerElements = document.querySelectorAll("img.toggler"); 98 | togglerElements.forEach((el) => 99 | el.addEventListener("click", (event) => toggler(event.currentTarget)) 100 | ); 101 | togglerElements.forEach((el) => (el.style.display = "")); 102 | if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); 103 | }, 104 | 105 | initOnKeyListeners: () => { 106 | // only install a listener if it is really needed 107 | if ( 108 | !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && 109 | !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS 110 | ) 111 | return; 112 | 113 | document.addEventListener("keydown", (event) => { 114 | // bail for input elements 115 | if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; 116 | // bail with special keys 117 | if (event.altKey || event.ctrlKey || event.metaKey) return; 118 | 119 | if (!event.shiftKey) { 120 | switch (event.key) { 121 | case "ArrowLeft": 122 | if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; 123 | 124 | const prevLink = document.querySelector('link[rel="prev"]'); 125 | if (prevLink && prevLink.href) { 126 | window.location.href = prevLink.href; 127 | event.preventDefault(); 128 | } 129 | break; 130 | case "ArrowRight": 131 | if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; 132 | 133 | const nextLink = document.querySelector('link[rel="next"]'); 134 | if (nextLink && nextLink.href) { 135 | window.location.href = nextLink.href; 136 | event.preventDefault(); 137 | } 138 | break; 139 | } 140 | } 141 | 142 | // some keyboard layouts may need Shift to get / 143 | switch (event.key) { 144 | case "/": 145 | if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; 146 | Documentation.focusSearchBar(); 147 | event.preventDefault(); 148 | } 149 | }); 150 | }, 151 | }; 152 | 153 | // quick alias for translations 154 | const _ = Documentation.gettext; 155 | 156 | _ready(Documentation.init); 157 | -------------------------------------------------------------------------------- /_build/html/_static/sphinx_highlight.js: -------------------------------------------------------------------------------- 1 | /* Highlighting utilities for Sphinx HTML documentation. */ 2 | "use strict"; 3 | 4 | const SPHINX_HIGHLIGHT_ENABLED = true 5 | 6 | /** 7 | * highlight a given string on a node by wrapping it in 8 | * span elements with the given class name. 9 | */ 10 | const _highlight = (node, addItems, text, className) => { 11 | if (node.nodeType === Node.TEXT_NODE) { 12 | const val = node.nodeValue; 13 | const parent = node.parentNode; 14 | const pos = val.toLowerCase().indexOf(text); 15 | if ( 16 | pos >= 0 && 17 | !parent.classList.contains(className) && 18 | !parent.classList.contains("nohighlight") 19 | ) { 20 | let span; 21 | 22 | const closestNode = parent.closest("body, svg, foreignObject"); 23 | const isInSVG = closestNode && closestNode.matches("svg"); 24 | if (isInSVG) { 25 | span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); 26 | } else { 27 | span = document.createElement("span"); 28 | span.classList.add(className); 29 | } 30 | 31 | span.appendChild(document.createTextNode(val.substr(pos, text.length))); 32 | parent.insertBefore( 33 | span, 34 | parent.insertBefore( 35 | document.createTextNode(val.substr(pos + text.length)), 36 | node.nextSibling 37 | ) 38 | ); 39 | node.nodeValue = val.substr(0, pos); 40 | 41 | if (isInSVG) { 42 | const rect = document.createElementNS( 43 | "http://www.w3.org/2000/svg", 44 | "rect" 45 | ); 46 | const bbox = parent.getBBox(); 47 | rect.x.baseVal.value = bbox.x; 48 | rect.y.baseVal.value = bbox.y; 49 | rect.width.baseVal.value = bbox.width; 50 | rect.height.baseVal.value = bbox.height; 51 | rect.setAttribute("class", className); 52 | addItems.push({ parent: parent, target: rect }); 53 | } 54 | } 55 | } else if (node.matches && !node.matches("button, select, textarea")) { 56 | node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); 57 | } 58 | }; 59 | const _highlightText = (thisNode, text, className) => { 60 | let addItems = []; 61 | _highlight(thisNode, addItems, text, className); 62 | addItems.forEach((obj) => 63 | obj.parent.insertAdjacentElement("beforebegin", obj.target) 64 | ); 65 | }; 66 | 67 | /** 68 | * Small JavaScript module for the documentation. 69 | */ 70 | const SphinxHighlight = { 71 | 72 | /** 73 | * highlight the search words provided in localstorage in the text 74 | */ 75 | highlightSearchWords: () => { 76 | if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight 77 | 78 | // get and clear terms from localstorage 79 | const url = new URL(window.location); 80 | const highlight = 81 | localStorage.getItem("sphinx_highlight_terms") 82 | || url.searchParams.get("highlight") 83 | || ""; 84 | localStorage.removeItem("sphinx_highlight_terms") 85 | url.searchParams.delete("highlight"); 86 | window.history.replaceState({}, "", url); 87 | 88 | // get individual terms from highlight string 89 | const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); 90 | if (terms.length === 0) return; // nothing to do 91 | 92 | // There should never be more than one element matching "div.body" 93 | const divBody = document.querySelectorAll("div.body"); 94 | const body = divBody.length ? divBody[0] : document.querySelector("body"); 95 | window.setTimeout(() => { 96 | terms.forEach((term) => _highlightText(body, term, "highlighted")); 97 | }, 10); 98 | 99 | const searchBox = document.getElementById("searchbox"); 100 | if (searchBox === null) return; 101 | searchBox.appendChild( 102 | document 103 | .createRange() 104 | .createContextualFragment( 105 | '" 109 | ) 110 | ); 111 | }, 112 | 113 | /** 114 | * helper function to hide the search marks again 115 | */ 116 | hideSearchWords: () => { 117 | document 118 | .querySelectorAll("#searchbox .highlight-link") 119 | .forEach((el) => el.remove()); 120 | document 121 | .querySelectorAll("span.highlighted") 122 | .forEach((el) => el.classList.remove("highlighted")); 123 | localStorage.removeItem("sphinx_highlight_terms") 124 | }, 125 | 126 | initEscapeListener: () => { 127 | // only install a listener if it is really needed 128 | if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; 129 | 130 | document.addEventListener("keydown", (event) => { 131 | // bail for input elements 132 | if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; 133 | // bail with special keys 134 | if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; 135 | if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { 136 | SphinxHighlight.hideSearchWords(); 137 | event.preventDefault(); 138 | } 139 | }); 140 | }, 141 | }; 142 | 143 | _ready(SphinxHighlight.highlightSearchWords); 144 | _ready(SphinxHighlight.initEscapeListener); 145 | -------------------------------------------------------------------------------- /references.bib: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | @inproceedings{holdgraf_evidence_2014, 5 | address = {Brisbane, Australia, Australia}, 6 | title = {Evidence for {Predictive} {Coding} in {Human} {Auditory} {Cortex}}, 7 | booktitle = {International {Conference} on {Cognitive} {Neuroscience}}, 8 | publisher = {Frontiers in Neuroscience}, 9 | author = {Holdgraf, Christopher Ramsay and de Heer, Wendy and Pasley, Brian N. and Knight, Robert T.}, 10 | year = {2014} 11 | } 12 | 13 | @article{holdgraf_rapid_2016, 14 | title = {Rapid tuning shifts in human auditory cortex enhance speech intelligibility}, 15 | volume = {7}, 16 | issn = {2041-1723}, 17 | url = {http://www.nature.com/doifinder/10.1038/ncomms13654}, 18 | doi = {10.1038/ncomms13654}, 19 | number = {May}, 20 | journal = {Nature Communications}, 21 | author = {Holdgraf, Christopher Ramsay and de Heer, Wendy and Pasley, Brian N. and Rieger, Jochem W. and Crone, Nathan and Lin, Jack J. and Knight, Robert T. and Theunissen, Frédéric E.}, 22 | year = {2016}, 23 | pages = {13654}, 24 | file = {Holdgraf et al. - 2016 - Rapid tuning shifts in human auditory cortex enhance speech intelligibility.pdf:C\:\\Users\\chold\\Zotero\\storage\\MDQP3JWE\\Holdgraf et al. - 2016 - Rapid tuning shifts in human auditory cortex enhance speech intelligibility.pdf:application/pdf} 25 | } 26 | 27 | @inproceedings{holdgraf_portable_2017, 28 | title = {Portable learning environments for hands-on computational instruction using container-and cloud-based technology to teach data science}, 29 | volume = {Part F1287}, 30 | isbn = {978-1-4503-5272-7}, 31 | doi = {10.1145/3093338.3093370}, 32 | abstract = {© 2017 ACM. There is an increasing interest in learning outside of the traditional classroom setting. This is especially true for topics covering computational tools and data science, as both are challenging to incorporate in the standard curriculum. These atypical learning environments offer new opportunities for teaching, particularly when it comes to combining conceptual knowledge with hands-on experience/expertise with methods and skills. Advances in cloud computing and containerized environments provide an attractive opportunity to improve the effciency and ease with which students can learn. This manuscript details recent advances towards using commonly-Available cloud computing services and advanced cyberinfrastructure support for improving the learning experience in bootcamp-style events. We cover the benets (and challenges) of using a server hosted remotely instead of relying on student laptops, discuss the technology that was used in order to make this possible, and give suggestions for how others could implement and improve upon this model for pedagogy and reproducibility.}, 33 | booktitle = {{ACM} {International} {Conference} {Proceeding} {Series}}, 34 | author = {Holdgraf, Christopher Ramsay and Culich, A. and Rokem, A. and Deniz, F. and Alegro, M. and Ushizima, D.}, 35 | year = {2017}, 36 | keywords = {Teaching, Bootcamps, Cloud computing, Data science, Docker, Pedagogy} 37 | } 38 | 39 | @article{holdgraf_encoding_2017, 40 | title = {Encoding and decoding models in cognitive electrophysiology}, 41 | volume = {11}, 42 | issn = {16625137}, 43 | doi = {10.3389/fnsys.2017.00061}, 44 | abstract = {© 2017 Holdgraf, Rieger, Micheli, Martin, Knight and Theunissen. Cognitive neuroscience has seen rapid growth in the size and complexity of data recorded from the human brain as well as in the computational tools available to analyze this data. This data explosion has resulted in an increased use of multivariate, model-based methods for asking neuroscience questions, allowing scientists to investigate multiple hypotheses with a single dataset, to use complex, time-varying stimuli, and to study the human brain under more naturalistic conditions. These tools come in the form of “Encoding” models, in which stimulus features are used to model brain activity, and “Decoding” models, in which neural features are used to generated a stimulus output. Here we review the current state of encoding and decoding models in cognitive electrophysiology and provide a practical guide toward conducting experiments and analyses in this emerging field. Our examples focus on using linear models in the study of human language and audition. We show how to calculate auditory receptive fields from natural sounds as well as how to decode neural recordings to predict speech. The paper aims to be a useful tutorial to these approaches, and a practical introduction to using machine learning and applied statistics to build models of neural activity. The data analytic approaches we discuss may also be applied to other sensory modalities, motor systems, and cognitive systems, and we cover some examples in these areas. In addition, a collection of Jupyter notebooks is publicly available as a complement to the material covered in this paper, providing code examples and tutorials for predictive modeling in python. The aimis to provide a practical understanding of predictivemodeling of human brain data and to propose best-practices in conducting these analyses.}, 45 | journal = {Frontiers in Systems Neuroscience}, 46 | author = {Holdgraf, Christopher Ramsay and Rieger, J.W. and Micheli, C. and Martin, S. and Knight, R.T. and Theunissen, F.E.}, 47 | year = {2017}, 48 | keywords = {Decoding models, Encoding models, Electrocorticography (ECoG), Electrophysiology/evoked potentials, Machine learning applied to neuroscience, Natural stimuli, Predictive modeling, Tutorials} 49 | } 50 | 51 | @book{ruby, 52 | title = {The Ruby Programming Language}, 53 | author = {Flanagan, David and Matsumoto, Yukihiro}, 54 | year = {2008}, 55 | publisher = {O'Reilly Media} 56 | } 57 | -------------------------------------------------------------------------------- /_build/html/_static/language_data.js: -------------------------------------------------------------------------------- 1 | /* 2 | * language_data.js 3 | * ~~~~~~~~~~~~~~~~ 4 | * 5 | * This script contains the language-specific data used by searchtools.js, 6 | * namely the list of stopwords, stemmer, scorer and splitter. 7 | * 8 | * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. 9 | * :license: BSD, see LICENSE for details. 10 | * 11 | */ 12 | 13 | var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; 14 | 15 | 16 | /* Non-minified version is copied as a separate JS file, is available */ 17 | 18 | /** 19 | * Porter Stemmer 20 | */ 21 | var Stemmer = function() { 22 | 23 | var step2list = { 24 | ational: 'ate', 25 | tional: 'tion', 26 | enci: 'ence', 27 | anci: 'ance', 28 | izer: 'ize', 29 | bli: 'ble', 30 | alli: 'al', 31 | entli: 'ent', 32 | eli: 'e', 33 | ousli: 'ous', 34 | ization: 'ize', 35 | ation: 'ate', 36 | ator: 'ate', 37 | alism: 'al', 38 | iveness: 'ive', 39 | fulness: 'ful', 40 | ousness: 'ous', 41 | aliti: 'al', 42 | iviti: 'ive', 43 | biliti: 'ble', 44 | logi: 'log' 45 | }; 46 | 47 | var step3list = { 48 | icate: 'ic', 49 | ative: '', 50 | alize: 'al', 51 | iciti: 'ic', 52 | ical: 'ic', 53 | ful: '', 54 | ness: '' 55 | }; 56 | 57 | var c = "[^aeiou]"; // consonant 58 | var v = "[aeiouy]"; // vowel 59 | var C = c + "[^aeiouy]*"; // consonant sequence 60 | var V = v + "[aeiou]*"; // vowel sequence 61 | 62 | var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 63 | var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 64 | var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 65 | var s_v = "^(" + C + ")?" + v; // vowel in stem 66 | 67 | this.stemWord = function (w) { 68 | var stem; 69 | var suffix; 70 | var firstch; 71 | var origword = w; 72 | 73 | if (w.length < 3) 74 | return w; 75 | 76 | var re; 77 | var re2; 78 | var re3; 79 | var re4; 80 | 81 | firstch = w.substr(0,1); 82 | if (firstch == "y") 83 | w = firstch.toUpperCase() + w.substr(1); 84 | 85 | // Step 1a 86 | re = /^(.+?)(ss|i)es$/; 87 | re2 = /^(.+?)([^s])s$/; 88 | 89 | if (re.test(w)) 90 | w = w.replace(re,"$1$2"); 91 | else if (re2.test(w)) 92 | w = w.replace(re2,"$1$2"); 93 | 94 | // Step 1b 95 | re = /^(.+?)eed$/; 96 | re2 = /^(.+?)(ed|ing)$/; 97 | if (re.test(w)) { 98 | var fp = re.exec(w); 99 | re = new RegExp(mgr0); 100 | if (re.test(fp[1])) { 101 | re = /.$/; 102 | w = w.replace(re,""); 103 | } 104 | } 105 | else if (re2.test(w)) { 106 | var fp = re2.exec(w); 107 | stem = fp[1]; 108 | re2 = new RegExp(s_v); 109 | if (re2.test(stem)) { 110 | w = stem; 111 | re2 = /(at|bl|iz)$/; 112 | re3 = new RegExp("([^aeiouylsz])\\1$"); 113 | re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); 114 | if (re2.test(w)) 115 | w = w + "e"; 116 | else if (re3.test(w)) { 117 | re = /.$/; 118 | w = w.replace(re,""); 119 | } 120 | else if (re4.test(w)) 121 | w = w + "e"; 122 | } 123 | } 124 | 125 | // Step 1c 126 | re = /^(.+?)y$/; 127 | if (re.test(w)) { 128 | var fp = re.exec(w); 129 | stem = fp[1]; 130 | re = new RegExp(s_v); 131 | if (re.test(stem)) 132 | w = stem + "i"; 133 | } 134 | 135 | // Step 2 136 | re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; 137 | if (re.test(w)) { 138 | var fp = re.exec(w); 139 | stem = fp[1]; 140 | suffix = fp[2]; 141 | re = new RegExp(mgr0); 142 | if (re.test(stem)) 143 | w = stem + step2list[suffix]; 144 | } 145 | 146 | // Step 3 147 | re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; 148 | if (re.test(w)) { 149 | var fp = re.exec(w); 150 | stem = fp[1]; 151 | suffix = fp[2]; 152 | re = new RegExp(mgr0); 153 | if (re.test(stem)) 154 | w = stem + step3list[suffix]; 155 | } 156 | 157 | // Step 4 158 | re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; 159 | re2 = /^(.+?)(s|t)(ion)$/; 160 | if (re.test(w)) { 161 | var fp = re.exec(w); 162 | stem = fp[1]; 163 | re = new RegExp(mgr1); 164 | if (re.test(stem)) 165 | w = stem; 166 | } 167 | else if (re2.test(w)) { 168 | var fp = re2.exec(w); 169 | stem = fp[1] + fp[2]; 170 | re2 = new RegExp(mgr1); 171 | if (re2.test(stem)) 172 | w = stem; 173 | } 174 | 175 | // Step 5 176 | re = /^(.+?)e$/; 177 | if (re.test(w)) { 178 | var fp = re.exec(w); 179 | stem = fp[1]; 180 | re = new RegExp(mgr1); 181 | re2 = new RegExp(meq1); 182 | re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); 183 | if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) 184 | w = stem; 185 | } 186 | re = /ll$/; 187 | re2 = new RegExp(mgr1); 188 | if (re.test(w) && re2.test(w)) { 189 | re = /.$/; 190 | w = w.replace(re,""); 191 | } 192 | 193 | // and turn initial Y back to y 194 | if (firstch == "y") 195 | w = firstch.toLowerCase() + w.substr(1); 196 | return w; 197 | } 198 | } 199 | 200 | -------------------------------------------------------------------------------- /_build/html/searchindex.js: -------------------------------------------------------------------------------- 1 | Search.setIndex({"docnames": ["intro", "markdown", "markdown-notebooks", "mymarkdownfile", "notebooks"], "filenames": ["intro.md", "markdown.md", "markdown-notebooks.md", "mymarkdownfile.md", "notebooks.ipynb"], "titles": ["Welcome to your Jupyter Book", "Markdown Files", "Notebooks with MyST Markdown", "Here\u2019s my sample title", "Content with notebooks"], "terms": {"thi": [1, 2, 3, 4], "i": [2, 3, 4], "small": [0, 1], "sampl": [0, 4], "give": 0, "you": [0, 1, 2, 4], "feel": 0, "how": [0, 2], "content": [0, 1, 2], "structur": [0, 1], "It": [0, 1], "show": [0, 1, 2], "off": [0, 1, 2], "few": 0, "major": 0, "file": [0, 2], "type": 0, "well": [0, 4], "some": [0, 1, 3, 4], "doe": 0, "go": 0, "depth": 0, "ani": [0, 2], "particular": 0, "topic": 0, "check": [0, 4], "out": [0, 4], "document": [0, 1, 2, 4], "more": [0, 2, 4], "inform": [0, 2, 4], "page": [0, 1, 2], "bundl": 0, "see": [0, 1, 2, 4], "markdown": 0, "notebook": [0, 1], "myst": 0, "hello": 0, "world": 0, "meant": 0, "test": 0, "capabl": 0, "here": [0, 1, 4], "note": [0, 1], "And": 0, "code": [0, 1, 2], "block": [0, 2], "e": 0, "mc": 0, "2": [0, 2, 4], "whether": 1, "write": [1, 2], "your": [1, 2, 4], "book": [1, 2, 4], "": [0, 1, 2, 4], "jupyt": [1, 2, 4], "ipynb": 1, "regular": 1, "md": [1, 2], "ll": 1, "same": 1, "flavor": 1, "call": [1, 4], "simpl": 1, "help": 1, "get": [1, 2], "start": [1, 2], "syntax": 1, "stand": 1, "markedli": 1, "text": [1, 2, 3], "slight": 1, "variat": 1, "commonmark": 1, "extens": 1, "allow": 1, "sphinx": 1, "ecosystem": 1, "For": [1, 4], "about": [1, 2, 4], "overview": 1, "ar": [1, 2], "two": [1, 2], "most": [1, 4], "power": 1, "tool": 1, "thei": 1, "like": [1, 2], "function": 1, "written": [1, 2], "markup": 1, "languag": 1, "both": 1, "serv": 1, "similar": 1, "purpos": 1, "one": 1, "line": [1, 2, 4], "wherea": 1, "span": 1, "mani": [1, 2], "accept": 1, "differ": 1, "kind": 1, "input": 1, "do": [1, 4], "those": 1, "depend": 1, "specif": 1, "being": 1, "render": 1, "special": 1, "box": 1, "when": [1, 2], "build": 1, "an": 1, "inlin": 1, "refer": [1, 3], "can": [1, 2, 4], "also": [1, 2, 4], "cite": 1, "store": 1, "bibtex": 1, "exampl": [1, 4], "follow": [1, 2], "holdgraf_evidence_2014": 1, "hdhpk14": 1, "moreov": 1, "insert": 1, "bibliographi": 1, "The": [1, 2], "must": 1, "us": [1, 2], "all": [1, 2], "properli": 1, "bib": 1, "christoph": 1, "ramsai": 1, "holdgraf": 1, "wendi": 1, "de": 1, "heer": 1, "brian": 1, "n": [1, 4], "paslei": 1, "robert": 1, "t": [1, 4], "knight": 1, "evid": 1, "predict": 1, "human": 1, "auditori": 1, "cortex": 1, "In": [1, 4], "intern": 1, "confer": 1, "cognit": 1, "neurosci": 1, "brisban": 1, "australia": 1, "2014": 1, "frontier": 1, "just": 1, "starter": 1, "lot": [1, 4], "jupyterbook": 1, "org": 1, "let": 2, "base": 2, "detail": 2, "instruct": 2, "With": 2, "defin": 2, "direct": 2, "so": 2, "print": 2, "4": [2, 4], "built": 2, "execut": 2, "default": 2, "kernel": 2, "output": 2, "displai": 2, "rest": 2, "jupytext": 2, "convert": 2, "support": 2, "other": 2, "thing": 2, "need": 2, "understand": 2, "should": 2, "includ": [2, 4], "top": 2, "presenc": 2, "which": 2, "That": 2, "If": 2, "have": 2, "d": 2, "treat": 2, "run": 2, "command": 2, "init": 2, "path": 2, "markdownfil": 2, "creat": 4, "mean": 4, "As": 4, "emb": 4, "imag": 4, "html": 4, "etc": 4, "post": 4, "add_": 4, "math": 4, "begin": 4, "align": 4, "mbox": 4, "la_": 4, "tex": 4, "end": 4, "But": 4, "make": 4, "sure": 4, "escap": 4, "dollar": 4, "sign": 4, "want": 4, "keep": 4, "work": 4, "guid": 4, "matplotlib": 4, "from": 4, "import": 4, "rcparam": 4, "cycler": 4, "pyplot": 4, "plt": 4, "numpi": 4, "np": 4, "ion": 4, "modulenotfounderror": 4, "traceback": 4, "recent": 4, "last": 4, "cell": 4, "1": 4, "3": 4, "No": 4, "modul": 4, "name": 4, "fix": 4, "random": 4, "state": 4, "reproduc": 4, "seed": 4, "19680801": 4, "10": 4, "data": 4, "logspac": 4, "0": 4, "100": 4, "randn": 4, "ii": 4, "rang": 4, "arrai": 4, "cmap": 4, "cm": 4, "coolwarm": 4, "ax": 4, "prop_cycl": 4, "color": 4, "linspac": 4, "line2d": 4, "custom_lin": 4, "lw": 4, "5": 4, "fig": 4, "subplot": 4, "figsiz": 4, "plot": 4, "legend": 4, "cold": 4, "medium": 4, "hot": 4, "There": 4, "interact": 4, "my": 0, "titl": 0, "intro": 3}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"welcom": 0, "your": 0, "jupyt": 0, "book": 0, "head": 0, "1": [], "markdown": [1, 2, 4], "file": 1, "what": 1, "i": [0, 1], "myst": [1, 2, 4], "sampl": [1, 3], "role": 1, "direct": 1, "citat": 1, "learn": 1, "more": 1, "notebook": [2, 4], "an": 2, "exampl": 2, "cell": 2, "creat": 2, "quickli": 2, "add": 2, "yaml": 2, "metadata": 2, "content": 4, "code": 4, "block": 4, "output": 4, "thi": 0, "here": 3, "": 3, "my": 3, "titl": 3, "first": 3, "section": 3}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinxcontrib.bibtex": 9, "sphinx": 57}, "alltitles": {"Welcome to your Jupyter Book": [[0, "welcome-to-your-jupyter-book"]], "This is a heading": [[0, "this-is-a-heading"]], "Markdown Files": [[1, "markdown-files"]], "What is MyST?": [[1, "what-is-myst"]], "Sample Roles and Directives": [[1, "sample-roles-and-directives"]], "Citations": [[1, "citations"]], "Learn more": [[1, "learn-more"]], "Notebooks with MyST Markdown": [[2, "notebooks-with-myst-markdown"]], "An example cell": [[2, "an-example-cell"]], "Create a notebook with MyST Markdown": [[2, "create-a-notebook-with-myst-markdown"]], "Quickly add YAML metadata for MyST Notebooks": [[2, "quickly-add-yaml-metadata-for-myst-notebooks"]], "Here\u2019s my sample title": [[3, "here-s-my-sample-title"]], "Here\u2019s my first section": [[3, "here-s-my-first-section"]], "Content with notebooks": [[4, "content-with-notebooks"]], "Markdown + notebooks": [[4, "markdown-notebooks"]], "MyST markdown": [[4, "myst-markdown"]], "Code blocks and outputs": [[4, "code-blocks-and-outputs"]]}, "indexentries": {}}) -------------------------------------------------------------------------------- /_build/html/_static/vendor/fontawesome/6.5.2/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Fonticons, Inc. (https://fontawesome.com) 2 | 3 | -------------------------------------------------------------------------------- 4 | 5 | Font Awesome Free License 6 | 7 | Font Awesome Free is free, open source, and GPL friendly. You can use it for 8 | commercial projects, open source projects, or really almost whatever you want. 9 | Full Font Awesome Free license: https://fontawesome.com/license/free. 10 | 11 | -------------------------------------------------------------------------------- 12 | 13 | # Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/) 14 | 15 | The Font Awesome Free download is licensed under a Creative Commons 16 | Attribution 4.0 International License and applies to all icons packaged 17 | as SVG and JS file types. 18 | 19 | -------------------------------------------------------------------------------- 20 | 21 | # Fonts: SIL OFL 1.1 License 22 | 23 | In the Font Awesome Free download, the SIL OFL license applies to all icons 24 | packaged as web and desktop font files. 25 | 26 | Copyright (c) 2024 Fonticons, Inc. (https://fontawesome.com) 27 | with Reserved Font Name: "Font Awesome". 28 | 29 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 30 | This license is copied below, and is also available with a FAQ at: 31 | http://scripts.sil.org/OFL 32 | 33 | SIL OPEN FONT LICENSE 34 | Version 1.1 - 26 February 2007 35 | 36 | PREAMBLE 37 | The goals of the Open Font License (OFL) are to stimulate worldwide 38 | development of collaborative font projects, to support the font creation 39 | efforts of academic and linguistic communities, and to provide a free and 40 | open framework in which fonts may be shared and improved in partnership 41 | with others. 42 | 43 | The OFL allows the licensed fonts to be used, studied, modified and 44 | redistributed freely as long as they are not sold by themselves. The 45 | fonts, including any derivative works, can be bundled, embedded, 46 | redistributed and/or sold with any software provided that any reserved 47 | names are not used by derivative works. The fonts and derivatives, 48 | however, cannot be released under any other type of license. The 49 | requirement for fonts to remain under this license does not apply 50 | to any document created using the fonts or their derivatives. 51 | 52 | DEFINITIONS 53 | "Font Software" refers to the set of files released by the Copyright 54 | Holder(s) under this license and clearly marked as such. This may 55 | include source files, build scripts and documentation. 56 | 57 | "Reserved Font Name" refers to any names specified as such after the 58 | copyright statement(s). 59 | 60 | "Original Version" refers to the collection of Font Software components as 61 | distributed by the Copyright Holder(s). 62 | 63 | "Modified Version" refers to any derivative made by adding to, deleting, 64 | or substituting — in part or in whole — any of the components of the 65 | Original Version, by changing formats or by porting the Font Software to a 66 | new environment. 67 | 68 | "Author" refers to any designer, engineer, programmer, technical 69 | writer or other person who contributed to the Font Software. 70 | 71 | PERMISSION & CONDITIONS 72 | Permission is hereby granted, free of charge, to any person obtaining 73 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 74 | redistribute, and sell modified and unmodified copies of the Font 75 | Software, subject to the following conditions: 76 | 77 | 1) Neither the Font Software nor any of its individual components, 78 | in Original or Modified Versions, may be sold by itself. 79 | 80 | 2) Original or Modified Versions of the Font Software may be bundled, 81 | redistributed and/or sold with any software, provided that each copy 82 | contains the above copyright notice and this license. These can be 83 | included either as stand-alone text files, human-readable headers or 84 | in the appropriate machine-readable metadata fields within text or 85 | binary files as long as those fields can be easily viewed by the user. 86 | 87 | 3) No Modified Version of the Font Software may use the Reserved Font 88 | Name(s) unless explicit written permission is granted by the corresponding 89 | Copyright Holder. This restriction only applies to the primary font name as 90 | presented to the users. 91 | 92 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 93 | Software shall not be used to promote, endorse or advertise any 94 | Modified Version, except to acknowledge the contribution(s) of the 95 | Copyright Holder(s) and the Author(s) or with their explicit written 96 | permission. 97 | 98 | 5) The Font Software, modified or unmodified, in part or in whole, 99 | must be distributed entirely under this license, and must not be 100 | distributed under any other license. The requirement for fonts to 101 | remain under this license does not apply to any document created 102 | using the Font Software. 103 | 104 | TERMINATION 105 | This license becomes null and void if any of the above conditions are 106 | not met. 107 | 108 | DISCLAIMER 109 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 110 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 111 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 112 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 113 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 114 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 115 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 116 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 117 | OTHER DEALINGS IN THE FONT SOFTWARE. 118 | 119 | -------------------------------------------------------------------------------- 120 | 121 | # Code: MIT License (https://opensource.org/licenses/MIT) 122 | 123 | In the Font Awesome Free download, the MIT license applies to all non-font and 124 | non-icon files. 125 | 126 | Copyright 2024 Fonticons, Inc. 127 | 128 | Permission is hereby granted, free of charge, to any person obtaining a copy of 129 | this software and associated documentation files (the "Software"), to deal in the 130 | Software without restriction, including without limitation the rights to use, copy, 131 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 132 | and to permit persons to whom the Software is furnished to do so, subject to the 133 | following conditions: 134 | 135 | The above copyright notice and this permission notice shall be included in all 136 | copies or substantial portions of the Software. 137 | 138 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 139 | INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 140 | PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 141 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 142 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 143 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 144 | 145 | -------------------------------------------------------------------------------- 146 | 147 | # Attribution 148 | 149 | Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font 150 | Awesome Free files already contain embedded comments with sufficient 151 | attribution, so you shouldn't need to do anything additional when using these 152 | files normally. 153 | 154 | We've kept attribution comments terse, so we ask that you do not actively work 155 | to remove them from files, especially code. They're a great way for folks to 156 | learn about Font Awesome. 157 | 158 | -------------------------------------------------------------------------------- 159 | 160 | # Brand Icons 161 | 162 | All brand icons are trademarks of their respective owners. The use of these 163 | trademarks does not indicate endorsement of the trademark holder by Font 164 | Awesome, nor vice versa. **Please do not use brand logos for any purpose except 165 | to represent the company, product, or service to which they refer.** 166 | -------------------------------------------------------------------------------- /_build/html/_static/scripts/quantecon-book-theme.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function n(o){if(t[o])return t[o].exports;var l=t[o]={i:o,l:!1,exports:{}};return e[o].call(l.exports,l,l.exports,n),l.l=!0,l.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var l in e)n.d(o,l,function(t){return e[t]}.bind(null,l));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";n.r(t);n.p;document.addEventListener("DOMContentLoaded",(function(){!function(){for(var e,t=function(){},n=["assert","clear","count","debug","dir","dirxml","error","exception","group","groupCollapsed","groupEnd","info","log","markTimeline","profile","profileEnd","table","time","timeEnd","timeline","timelineEnd","timeStamp","trace","warn"],o=n.length,l=window.console=window.console||{};o--;)l[e=n[o]]||(l[e]=t)}(),feather.replace();$(window),$("head");var e=$("body"),t=$(".qe-sidebar"),n=$(".logo-img"),o=$(".dark-logo-img"),l=$(".btn__sidebar");function r(){l.addClass("btn-active"),t.removeClass("inactive"),$(".qe-toolbar svg.feather.feather-menu").replaceWith(feather.icons.x.toSvg()),localStorage.setSidebar=1}function a(){l.removeClass("btn-active"),t.addClass("inactive"),$(".qe-toolbar svg.feather.feather-x").replaceWith(feather.icons.menu.toSvg()),localStorage.setSidebar=0}function s(){var e=localStorage.toolbarFont;1==e?$("html").addClass("font-plus"):-1==e?$("html").addClass("font-minus"):($("html").removeClass("font-plus"),$("html").removeClass("font-minus"),localStorage.toolbarFont=0)}1==localStorage.setContrast&&(e.addClass("dark-theme"),$(".btn__contrast").addClass("btn-active")),$(".btn__contrast").on("click",(function(t){t.preventDefault(),t.stopPropagation(),$(this).hasClass("btn-active")?($(this).removeClass("btn-active"),localStorage.setContrast=0,e.removeClass("dark-theme")):($(this).addClass("btn-active"),localStorage.setContrast=1,e.addClass("dark-theme"),o.length||n.css("display","block"))})),$("#search-icon").on("click",(function(e){$("#search-input").hasClass("search-open")?$("#search-input").closest("form").trigger("submit"):($("#search-input").addClass("search-open").focus(),$(this).css("pointer-events","none"))})),$("#search-input").on("focusout",(function(){$(this).val()||($(this).removeClass("search-open"),$("#search-icon").css("pointer-events","auto"))})),1==localStorage.setSidebar&&t.hasClass("persistent")&&$(window).width()>1340&&r(),$(document).on("click",".btn__sidebar",(function(n){n.preventDefault(),n.stopPropagation(),t.hasClass("inactive")?r():a(),window.innerWidth<=1340&&$(document.body).on("click",(function(t){$(n.target).is(".sidebar *")||(a(),e.off("click"))}))})),$(".btn__top").on("click",(function(e){e.preventDefault(),e.stopPropagation(),$("html, body").animate({scrollTop:0},"slow")})),$(".btn__fullscreen").on("click",(function(){event.preventDefault(),event.stopPropagation(),$(this).toggleClass("btn-active"),document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():document.documentElement.requestFullscreen?document.documentElement.requestFullscreen():document.documentElement.webkitRequestFullscreen?document.documentElement.webkitRequestFullscreen():document.documentElement.mozRequestFullScreen?document.documentElement.mozRequestFullScreen():document.documentElement.msRequestFullscreen&&document.documentElement.msRequestFullscreen()})),s(),$(".btn__plus").on("click",(function(e){e.preventDefault(),e.stopPropagation();var t=parseInt(localStorage.getItem("toolbarFont"))+1;t>0&&(t=1),localStorage.toolbarFont=t,s()})),$(".btn__minus").on("click",(function(e){e.preventDefault(),e.stopPropagation();var t=parseInt(localStorage.getItem("toolbarFont"))-1;t<0&&(t=-1),localStorage.toolbarFont=t,s()}));const c=(e,t)=>{e.includes("tag_collapse")&&(index=e.indexOf("-"),height=e.substring(index+1),height&&!isNaN(height)&&(t.style.height=parseInt(height)+.5+"em"))},i=document.querySelectorAll("div[class^='cell tag_collapse']");for(var u=0;u{c(t,e)});const t=document.createElement("div");t.innerHTML='Show more...',e.parentNode.insertBefore(t,e.nextSibling)}const d=document.querySelectorAll("div[class^='cell tag_collapse'] .toggle");for(u=0;u{c(e,codeBlockH)})):(t.classList.add("expanded"),this.style.display="none",this.previousSibling.style.display="block",codeBlockH.style.height="auto")}));const m=document.querySelectorAll(".qe-page__content table");for(u=0;u{let e=document.getElementById("launcher-private-input").value;if($(this.event.currentTarget)[0].getAttribute("id").indexOf("private")>-1){e.includes("http")||e.includes("https")||(e="http://"+e);let t=document.getElementsByClassName("page")[0].getAttribute("id"),n=document.getElementById("launcher-private-input").dataset.repourl,o=document.getElementById("launcher-private-input").dataset.urlpath;url=e+("/jupyter/hub/user-redirect/git-pull?repo="+n+"&urlpath="+o)+t+".ipynb",launchButton.getElementsByTagName("a")[0].setAttribute("href",url)}else{let e=document.getElementById("launcher-public-input").value;document.getElementById("launchButton").getElementsByTagName("a")[0].setAttribute("href",e)}},document.querySelectorAll("form.bd-search").forEach(e=>e.querySelector(".search-button__kbd-shortcut").remove()),function(){const e=document.getElementsByClassName("qe-page__header-authors")[0],t=e.getAttribute("font-size"),n=document.querySelector(".main-index h1");if(!n)return;const o=document.createElement("p");o.setAttribute("id","qe-page-author-links"),o.setAttribute("style",t?`font-size: ${t}px`:"");e&&(e.querySelectorAll("a").length&&""!==e.querySelectorAll("a")[0].innerText||""!==e.innerText)&&(o.innerHTML=e.innerHTML),n.insertAdjacentElement("afterend",o)}();const g=document.getElementsByClassName("margin"),h=document.querySelectorAll("figure.margin-caption figcaption"),f=document.getElementsByClassName("qe-page__toc-footer")[0],b=Array.from(g).concat(Array.from(h)),y=new IntersectionObserver((e,t)=>{e.forEach(e=>{e.isIntersecting?f.style.display="none":f.style.display=""})},{root:null,rootMargin:"0px 0px -80% 0px"});Array.from(b).forEach(e=>y.observe(e)),tippy("[data-tippy-content]",{touch:!1})}))}]); 2 | //# sourceMappingURL=quantecon-book-theme.js.map -------------------------------------------------------------------------------- /_build/html/_static/togglebutton.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Add Toggle Buttons to elements 3 | */ 4 | 5 | let toggleChevron = ` 6 | 7 | 8 | 9 | `; 10 | 11 | var initToggleItems = () => { 12 | var itemsToToggle = document.querySelectorAll(togglebuttonSelector); 13 | console.log(`[togglebutton]: Adding toggle buttons to ${itemsToToggle.length} items`) 14 | // Add the button to each admonition and hook up a callback to toggle visibility 15 | itemsToToggle.forEach((item, index) => { 16 | if (item.classList.contains("admonition")) { 17 | // If it's an admonition block, then we'll add a button inside 18 | // Generate unique IDs for this item 19 | var toggleID = `toggle-${index}`; 20 | var buttonID = `button-${toggleID}`; 21 | 22 | item.setAttribute('id', toggleID); 23 | if (!item.classList.contains("toggle")){ 24 | item.classList.add("toggle"); 25 | } 26 | // This is the button that will be added to each item to trigger the toggle 27 | var collapseButton = ` 28 | `; 31 | 32 | title = item.querySelector(".admonition-title") 33 | title.insertAdjacentHTML("beforeend", collapseButton); 34 | thisButton = document.getElementById(buttonID); 35 | 36 | // Add click handlers for the button + admonition title (if admonition) 37 | admonitionTitle = document.querySelector(`#${toggleID} > .admonition-title`) 38 | if (admonitionTitle) { 39 | // If an admonition, then make the whole title block clickable 40 | admonitionTitle.addEventListener('click', toggleClickHandler); 41 | admonitionTitle.dataset.target = toggleID 42 | admonitionTitle.dataset.button = buttonID 43 | } else { 44 | // If not an admonition then we'll listen for the button click 45 | thisButton.addEventListener('click', toggleClickHandler); 46 | } 47 | 48 | // Now hide the item for this toggle button unless explicitly noted to show 49 | if (!item.classList.contains("toggle-shown")) { 50 | toggleHidden(thisButton); 51 | } 52 | } else { 53 | // If not an admonition, wrap the block in a
block 54 | // Define the structure of the details block and insert it as a sibling 55 | var detailsBlock = ` 56 |
57 | 58 | ${toggleChevron} 59 | ${toggleHintShow} 60 | 61 |
`; 62 | item.insertAdjacentHTML("beforebegin", detailsBlock); 63 | 64 | // Now move the toggle-able content inside of the details block 65 | details = item.previousElementSibling 66 | details.appendChild(item) 67 | item.classList.add("toggle-details__container") 68 | 69 | // Set up a click trigger to change the text as needed 70 | details.addEventListener('click', (click) => { 71 | let parent = click.target.parentElement; 72 | if (parent.tagName.toLowerCase() == "details") { 73 | summary = parent.querySelector("summary"); 74 | details = parent; 75 | } else { 76 | summary = parent; 77 | details = parent.parentElement; 78 | } 79 | // Update the inner text for the proper hint 80 | if (details.open) { 81 | summary.querySelector("span.toggle-details__summary-text").innerText = toggleHintShow; 82 | } else { 83 | summary.querySelector("span.toggle-details__summary-text").innerText = toggleHintHide; 84 | } 85 | 86 | }); 87 | 88 | // If we have a toggle-shown class, open details block should be open 89 | if (item.classList.contains("toggle-shown")) { 90 | details.click(); 91 | } 92 | } 93 | }) 94 | }; 95 | 96 | // This should simply add / remove the collapsed class and change the button text 97 | var toggleHidden = (button) => { 98 | target = button.dataset['target'] 99 | var itemToToggle = document.getElementById(target); 100 | if (itemToToggle.classList.contains("toggle-hidden")) { 101 | itemToToggle.classList.remove("toggle-hidden"); 102 | button.classList.remove("toggle-button-hidden"); 103 | } else { 104 | itemToToggle.classList.add("toggle-hidden"); 105 | button.classList.add("toggle-button-hidden"); 106 | } 107 | } 108 | 109 | var toggleClickHandler = (click) => { 110 | // Be cause the admonition title is clickable and extends to the whole admonition 111 | // We only look for a click event on this title to trigger the toggle. 112 | 113 | if (click.target.classList.contains("admonition-title")) { 114 | button = click.target.querySelector(".toggle-button"); 115 | } else if (click.target.classList.contains("tb-icon")) { 116 | // We've clicked the icon and need to search up one parent for the button 117 | button = click.target.parentElement; 118 | } else if (click.target.tagName == "polyline") { 119 | // We've clicked the SVG elements inside the button, need to up 2 layers 120 | button = click.target.parentElement.parentElement; 121 | } else if (click.target.classList.contains("toggle-button")) { 122 | // We've clicked the button itself and so don't need to do anything 123 | button = click.target; 124 | } else { 125 | console.log(`[togglebutton]: Couldn't find button for ${click.target}`) 126 | } 127 | target = document.getElementById(button.dataset['button']); 128 | toggleHidden(target); 129 | } 130 | 131 | // If we want to blanket-add toggle classes to certain cells 132 | var addToggleToSelector = () => { 133 | const selector = ""; 134 | if (selector.length > 0) { 135 | document.querySelectorAll(selector).forEach((item) => { 136 | item.classList.add("toggle"); 137 | }) 138 | } 139 | } 140 | 141 | // Helper function to run when the DOM is finished 142 | const sphinxToggleRunWhenDOMLoaded = cb => { 143 | if (document.readyState != 'loading') { 144 | cb() 145 | } else if (document.addEventListener) { 146 | document.addEventListener('DOMContentLoaded', cb) 147 | } else { 148 | document.attachEvent('onreadystatechange', function() { 149 | if (document.readyState == 'complete') cb() 150 | }) 151 | } 152 | } 153 | sphinxToggleRunWhenDOMLoaded(addToggleToSelector) 154 | sphinxToggleRunWhenDOMLoaded(initToggleItems) 155 | 156 | /** Toggle details blocks to be open when printing */ 157 | if (toggleOpenOnPrint == "true") { 158 | window.addEventListener("beforeprint", () => { 159 | // Open the details 160 | document.querySelectorAll("details.toggle-details").forEach((el) => { 161 | el.dataset["togglestatus"] = el.open; 162 | el.open = true; 163 | }); 164 | 165 | // Open the admonitions 166 | document.querySelectorAll(".admonition.toggle.toggle-hidden").forEach((el) => { 167 | console.log(el); 168 | el.querySelector("button.toggle-button").click(); 169 | el.dataset["toggle_after_print"] = "true"; 170 | }); 171 | }); 172 | window.addEventListener("afterprint", () => { 173 | // Re-close the details that were closed 174 | document.querySelectorAll("details.toggle-details").forEach((el) => { 175 | el.open = el.dataset["togglestatus"] == "true"; 176 | delete el.dataset["togglestatus"]; 177 | }); 178 | 179 | // Re-close the admonition toggle buttons 180 | document.querySelectorAll(".admonition.toggle").forEach((el) => { 181 | if (el.dataset["toggle_after_print"] == "true") { 182 | el.querySelector("button.toggle-button").click(); 183 | delete el.dataset["toggle_after_print"]; 184 | } 185 | }); 186 | }); 187 | } 188 | -------------------------------------------------------------------------------- /_build/html/_static/clipboard.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * clipboard.js v2.0.8 3 | * https://clipboardjs.com/ 4 | * 5 | * Licensed MIT © Zeno Rocha 6 | */ 7 | !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 62 | ${messages[locale]['copy_success']} 63 | 64 | 65 | ` 66 | 67 | // If the user specified their own SVG use that, otherwise use the default 68 | let iconCopy = ``; 69 | if (!iconCopy) { 70 | iconCopy = ` 71 | ${messages[locale]['copy_to_clipboard']} 72 | 73 | 74 | 75 | ` 76 | } 77 | 78 | /** 79 | * Set up copy/paste for code blocks 80 | */ 81 | 82 | const runWhenDOMLoaded = cb => { 83 | if (document.readyState != 'loading') { 84 | cb() 85 | } else if (document.addEventListener) { 86 | document.addEventListener('DOMContentLoaded', cb) 87 | } else { 88 | document.attachEvent('onreadystatechange', function() { 89 | if (document.readyState == 'complete') cb() 90 | }) 91 | } 92 | } 93 | 94 | const codeCellId = index => `codecell${index}` 95 | 96 | // Clears selected text since ClipboardJS will select the text when copying 97 | const clearSelection = () => { 98 | if (window.getSelection) { 99 | window.getSelection().removeAllRanges() 100 | } else if (document.selection) { 101 | document.selection.empty() 102 | } 103 | } 104 | 105 | // Changes tooltip text for a moment, then changes it back 106 | // We want the timeout of our `success` class to be a bit shorter than the 107 | // tooltip and icon change, so that we can hide the icon before changing back. 108 | var timeoutIcon = 2000; 109 | var timeoutSuccessClass = 1500; 110 | 111 | const temporarilyChangeTooltip = (el, oldText, newText) => { 112 | el.setAttribute('data-tooltip', newText) 113 | el.classList.add('success') 114 | // Remove success a little bit sooner than we change the tooltip 115 | // So that we can use CSS to hide the copybutton first 116 | setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) 117 | setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) 118 | } 119 | 120 | // Changes the copy button icon for two seconds, then changes it back 121 | const temporarilyChangeIcon = (el) => { 122 | el.innerHTML = iconCheck; 123 | setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) 124 | } 125 | 126 | const addCopyButtonToCodeCells = () => { 127 | // If ClipboardJS hasn't loaded, wait a bit and try again. This 128 | // happens because we load ClipboardJS asynchronously. 129 | if (window.ClipboardJS === undefined) { 130 | setTimeout(addCopyButtonToCodeCells, 250) 131 | return 132 | } 133 | 134 | // Add copybuttons to all of our code cells 135 | const COPYBUTTON_SELECTOR = 'div.highlight pre'; 136 | const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) 137 | codeCells.forEach((codeCell, index) => { 138 | const id = codeCellId(index) 139 | codeCell.setAttribute('id', id) 140 | 141 | const clipboardButton = id => 142 | `` 145 | codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) 146 | }) 147 | 148 | function escapeRegExp(string) { 149 | return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string 150 | } 151 | 152 | /** 153 | * Removes excluded text from a Node. 154 | * 155 | * @param {Node} target Node to filter. 156 | * @param {string} exclude CSS selector of nodes to exclude. 157 | * @returns {DOMString} Text from `target` with text removed. 158 | */ 159 | function filterText(target, exclude) { 160 | const clone = target.cloneNode(true); // clone as to not modify the live DOM 161 | if (exclude) { 162 | // remove excluded nodes 163 | clone.querySelectorAll(exclude).forEach(node => node.remove()); 164 | } 165 | return clone.innerText; 166 | } 167 | 168 | // Callback when a copy button is clicked. Will be passed the node that was clicked 169 | // should then grab the text and replace pieces of text that shouldn't be used in output 170 | function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { 171 | var regexp; 172 | var match; 173 | 174 | // Do we check for line continuation characters and "HERE-documents"? 175 | var useLineCont = !!lineContinuationChar 176 | var useHereDoc = !!hereDocDelim 177 | 178 | // create regexp to capture prompt and remaining line 179 | if (isRegexp) { 180 | regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') 181 | } else { 182 | regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') 183 | } 184 | 185 | const outputLines = []; 186 | var promptFound = false; 187 | var gotLineCont = false; 188 | var gotHereDoc = false; 189 | const lineGotPrompt = []; 190 | for (const line of textContent.split('\n')) { 191 | match = line.match(regexp) 192 | if (match || gotLineCont || gotHereDoc) { 193 | promptFound = regexp.test(line) 194 | lineGotPrompt.push(promptFound) 195 | if (removePrompts && promptFound) { 196 | outputLines.push(match[2]) 197 | } else { 198 | outputLines.push(line) 199 | } 200 | gotLineCont = line.endsWith(lineContinuationChar) & useLineCont 201 | if (line.includes(hereDocDelim) & useHereDoc) 202 | gotHereDoc = !gotHereDoc 203 | } else if (!onlyCopyPromptLines) { 204 | outputLines.push(line) 205 | } else if (copyEmptyLines && line.trim() === '') { 206 | outputLines.push(line) 207 | } 208 | } 209 | 210 | // If no lines with the prompt were found then just use original lines 211 | if (lineGotPrompt.some(v => v === true)) { 212 | textContent = outputLines.join('\n'); 213 | } 214 | 215 | // Remove a trailing newline to avoid auto-running when pasting 216 | if (textContent.endsWith("\n")) { 217 | textContent = textContent.slice(0, -1) 218 | } 219 | return textContent 220 | } 221 | 222 | 223 | var copyTargetText = (trigger) => { 224 | var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); 225 | 226 | // get filtered text 227 | let exclude = '.linenos'; 228 | 229 | let text = filterText(target, exclude); 230 | return formatCopyText(text, '', false, true, true, true, '', '') 231 | } 232 | 233 | // Initialize with a callback so we can modify the text before copy 234 | const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) 235 | 236 | // Update UI with error/success messages 237 | clipboard.on('success', event => { 238 | clearSelection() 239 | temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) 240 | temporarilyChangeIcon(event.trigger) 241 | }) 242 | 243 | clipboard.on('error', event => { 244 | temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) 245 | }) 246 | } 247 | 248 | runWhenDOMLoaded(addCopyButtonToCodeCells) -------------------------------------------------------------------------------- /_build/html/_static/scripts/pydata-sphinx-theme.js: -------------------------------------------------------------------------------- 1 | (()=>{"use strict";function e(e){"loading"!=document.readyState?e():document.addEventListener("DOMContentLoaded",e)}const t=e=>"string"==typeof e&&/^[v\d]/.test(e)&&o.test(e),n=(e,t,n)=>{u(n);const o=((e,t)=>{const n=r(e),o=r(t),a=n.pop(),c=o.pop(),s=i(n,o);return 0!==s?s:a&&c?i(a.split("."),c.split(".")):a||c?a?-1:1:0})(e,t);return d[n].includes(o)},o=/^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i,r=e=>{if("string"!=typeof e)throw new TypeError("Invalid argument expected string");const t=e.match(o);if(!t)throw new Error(`Invalid argument not valid semver ('${e}' received)`);return t.shift(),t},a=e=>"*"===e||"x"===e||"X"===e,c=e=>{const t=parseInt(e,10);return isNaN(t)?e:t},s=(e,t)=>{if(a(e)||a(t))return 0;const[n,o]=((e,t)=>typeof e!=typeof t?[String(e),String(t)]:[e,t])(c(e),c(t));return n>o?1:n{for(let n=0;n":[1],">=":[0,1],"=":[0],"<=":[-1,0],"<":[-1]},l=Object.keys(d),u=e=>{if("string"!=typeof e)throw new TypeError("Invalid operator type, expected string but got "+typeof e);if(-1===l.indexOf(e))throw new Error(`Invalid operator, expected one of ${l.join("|")}`)};var m=window.matchMedia("(prefers-color-scheme: dark)");function h(e){document.documentElement.dataset.theme=m.matches?"dark":"light"}function p(e){"light"!==e&&"dark"!==e&&"auto"!==e&&(console.error(`Got invalid theme mode: ${e}. Resetting to auto.`),e="auto");var t=m.matches?"dark":"light";document.documentElement.dataset.mode=e;var n="auto"==e?t:e;document.documentElement.dataset.theme=n,document.querySelectorAll(".dropdown-menu").forEach((e=>{"dark"===n?e.classList.add("dropdown-menu-dark"):e.classList.remove("dropdown-menu-dark")})),localStorage.setItem("mode",e),localStorage.setItem("theme",n),console.log(`[PST]: Changed to ${e} mode using the ${n} theme.`),m.onchange="auto"==e?h:""}function f(){const e=document.documentElement.dataset.defaultMode||"auto",t=localStorage.getItem("mode")||e;var n,o;p(((o=(n=m.matches?["auto","light","dark"]:["auto","dark","light"]).indexOf(t)+1)===n.length&&(o=0),n[o]))}var g=()=>{let e=document.querySelectorAll("form.bd-search");return e.length?(1==e.length?e[0]:document.querySelector("div:not(.search-button__search-container) > form.bd-search")).querySelector("input"):void 0},v=()=>{let e=g(),t=document.querySelector(".search-button__wrapper");e===t.querySelector("input")&&t.classList.toggle("show"),document.activeElement===e?e.blur():(e.focus(),e.select(),e.scrollIntoView({block:"center"}))},y=0===navigator.platform.indexOf("Mac")||"iPhone"===navigator.platform,b=()=>"dirhtml"==DOCUMENTATION_OPTIONS.BUILDER?"index"==DOCUMENTATION_OPTIONS.pagename?"/":`${DOCUMENTATION_OPTIONS.pagename}/`:`${DOCUMENTATION_OPTIONS.pagename}.html`;async function w(e){document.querySelector("#bd-header-version-warning").remove();const t=DOCUMENTATION_OPTIONS.VERSION,n=new Date,o=JSON.parse(localStorage.getItem("pst_banner_pref")||"{}");console.debug(`[PST] Dismissing the version warning banner on ${t} starting ${n}.`),o[t]=n,localStorage.setItem("pst_banner_pref",JSON.stringify(o))}async function E(e){e.preventDefault();const t=b();let n=e.currentTarget.getAttribute("href"),o=n.replace(t,"");try{(await fetch(n,{method:"HEAD"})).ok?location.href=n:location.href=o}catch(e){location.href=o}}async function S(){var e=document.querySelectorAll(".version-switcher__button");const o=e.length>0,r=DOCUMENTATION_OPTIONS.hasOwnProperty("theme_switcher_json_url"),a=DOCUMENTATION_OPTIONS.show_version_warning_banner;if(r&&(o||a)){const o=await async function(e){try{var t=new URL(e)}catch(n){if(!(n instanceof TypeError))throw n;{if(!window.location.origin)return null;const n=await fetch(window.location.origin,{method:"HEAD"});t=new URL(e,n.url)}}const n=await fetch(t);return await n.json()}(DOCUMENTATION_OPTIONS.theme_switcher_json_url);o&&(function(e,t){const n=b();t.forEach((e=>{e.dataset.activeVersionName="",e.dataset.activeVersion=""}));const o=(e=e.map((e=>(e.match=e.version==DOCUMENTATION_OPTIONS.theme_switcher_version_match,e.preferred=e.preferred||!1,"name"in e||(e.name=e.version),e)))).map((e=>e.preferred&&e.match)).some(Boolean);var r=!1;e.forEach((e=>{const a=document.createElement("a");a.setAttribute("class","dropdown-item list-group-item list-group-item-action py-1"),a.setAttribute("href",`${e.url}${n}`),a.setAttribute("role","option");const c=document.createElement("span");c.textContent=`${e.name}`,a.appendChild(c),a.dataset.versionName=e.name,a.dataset.version=e.version;let s=o&&e.preferred,i=!o&&!r&&e.match;(s||i)&&(a.classList.add("active"),t.forEach((t=>{t.innerText=e.name,t.dataset.activeVersionName=e.name,t.dataset.activeVersion=e.version})),r=!0),document.querySelectorAll(".version-switcher__menu").forEach((e=>{let t=a.cloneNode(!0);t.onclick=E,e.append(t)}))}))}(o,e),a&&function(e){var o=DOCUMENTATION_OPTIONS.VERSION,r=e.filter((e=>e.preferred));if(1!==r.length){const e=0==r.length?"No":"Multiple";return void console.log(`[PST] ${e} versions marked "preferred" found in versions JSON, ignoring.`)}const a=r[0].version,c=r[0].url,s=t(o)&&t(a);if(s&&n(o,a,"="))return void console.log("This is the prefered version of the docs, not showing the warning banner.");const i=JSON.parse(localStorage.getItem("pst_banner_pref")||"{}")[o];if(null!=i){const e=new Date(i),t=(new Date-e)/864e5;if(t<14)return void console.info(`[PST] Suppressing version warning banner; was dismissed ${Math.floor(t)} day(s) ago`)}const d=document.querySelector("#bd-header-version-warning"),l=document.createElement("div"),u=document.createElement("div"),m=document.createElement("strong"),h=document.createElement("a"),p=document.createElement("a");l.classList="bd-header-announcement__content ms-auto me-auto",u.classList="sidebar-message",h.classList="btn text-wrap font-weight-bold ms-3 my-1 align-baseline pst-button-link-to-stable-version",h.href=`${c}${b()}`,h.innerText="Switch to stable version",h.onclick=E,p.classList="ms-3 my-1 align-baseline";const f=document.createElement("i");p.append(f),f.classList="fa-solid fa-xmark",p.onclick=w,u.innerText="This is documentation for ";const g=o.includes("dev")||o.includes("rc")||o.includes("pre"),v=s&&n(o,a,">");g||v?m.innerText="an unstable development version":s&&n(o,a,"<")?m.innerText=`an old version (${o})`:m.innerText=o?`version ${o}`:"an unknown version",d.appendChild(l),d.append(p),l.appendChild(u),u.appendChild(m),u.appendChild(document.createTextNode(".")),u.appendChild(h),d.classList.remove("d-none")}(o))}}function T(){const e=()=>{document.querySelectorAll("pre, .nboutput > .output_area, .cell_output > .output, .jp-RenderedHTMLCommon").forEach((e=>{e.tabIndex=e.scrollWidth>e.clientWidth||e.scrollHeight>e.clientHeight?0:-1}))},t=function(e,t){let n=null;return(...t)=>{clearTimeout(n),n=setTimeout((()=>{e(...t)}),300)}}(e);window.addEventListener("resize",t),new MutationObserver(t).observe(document.getElementById("main-content"),{subtree:!0,childList:!0}),e()}async function O(){const e=document.querySelector(".bd-header-announcement"),{pstAnnouncementUrl:t}=e?e.dataset:null;if(t)try{const n=await fetch(t);if(!n.ok)throw new Error(`[PST]: HTTP response status not ok: ${n.status} ${n.statusText}`);const o=await n.text();if(0===o.length)return void console.log(`[PST]: Empty announcement at: ${t}`);e.innerHTML=`
${o}
`,e.classList.remove("d-none")}catch(e){console.log(`[PST]: Failed to load announcement at: ${t}`),console.error(e)}}e((async function(){await Promise.allSettled([S(),O()]);const e=document.querySelector(".pst-async-banner-revealer");if(!e)return;e.classList.remove("d-none");const t=Array.from(e.children).reduce(((e,t)=>e+t.offsetHeight),0);e.style.setProperty("height",`${t}px`),setTimeout((()=>{e.style.setProperty("height","auto")}),320)})),e((function(){p(document.documentElement.dataset.mode),document.querySelectorAll(".theme-switch-button").forEach((e=>{e.addEventListener("click",f)}))})),e((function(){if(!document.querySelector(".bd-docs-nav"))return;var e=document.querySelector("div.bd-sidebar");let t=parseInt(sessionStorage.getItem("sidebar-scroll-top"),10);if(isNaN(t)){var n=document.querySelector(".bd-docs-nav").querySelectorAll(".active");if(n.length>0){var o=n[n.length-1],r=o.getBoundingClientRect().y-e.getBoundingClientRect().y;if(o.getBoundingClientRect().y>.5*window.innerHeight){let t=.25;e.scrollTop=r-e.clientHeight*t,console.log("[PST]: Scrolled sidebar using last active link...")}}}else e.scrollTop=t,console.log("[PST]: Scrolled sidebar using stored browser position...");window.addEventListener("beforeunload",(()=>{sessionStorage.setItem("sidebar-scroll-top",e.scrollTop)}))})),e((function(){window.addEventListener("activate.bs.scrollspy",(function(){document.querySelectorAll(".bd-toc-nav a").forEach((e=>{e.parentElement.classList.remove("active")})),document.querySelectorAll(".bd-toc-nav a.active").forEach((e=>{e.parentElement.classList.add("active")}))}))})),e((()=>{(()=>{let e=document.querySelectorAll(".search-button__kbd-shortcut");y&&e.forEach((e=>e.querySelector("kbd.kbd-shortcut__modifier").innerText="⌘"))})(),window.addEventListener("keydown",(e=>{let t=g();e.shiftKey||e.altKey||(y?!e.metaKey||e.ctrlKey:e.metaKey||!e.ctrlKey)||!/^k$/i.test(e.key)?document.activeElement===t&&/Escape/i.test(e.key)&&v():(e.preventDefault(),v())}),!0),document.querySelectorAll(".search-button__button").forEach((e=>{e.onclick=v}));let e=document.querySelector(".search-button__overlay");e&&(e.onclick=v)})),e((function(){new MutationObserver(((e,t)=>{e.forEach((e=>{0!==e.addedNodes.length&&void 0!==e.addedNodes[0].data&&-1!=e.addedNodes[0].data.search("Inserted RTD Footer")&&e.addedNodes.forEach((e=>{document.getElementById("rtd-footer-container").append(e)}))}))})).observe(document.body,{childList:!0})})),e((function(){const e=document.getElementById("pst-primary-sidebar-checkbox"),t=document.getElementById("pst-secondary-sidebar-checkbox"),n=document.querySelector(".bd-sidebar-primary"),o=document.querySelector(".bd-sidebar-secondary"),r=document.querySelector(".primary-toggle"),a=document.querySelector(".secondary-toggle");[[r,e,n],[a,t,o]].forEach((([e,t,n])=>{e&&e.addEventListener("click",(e=>{if(e.preventDefault(),e.stopPropagation(),t.checked=!t.checked,t.checked){const e=n.querySelector("a, button");setTimeout((()=>e.focus()),100)}}))})),[[n,e,r],[o,t,a]].forEach((([e,t,n])=>{e&&e.addEventListener("keydown",(e=>{"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),t.checked=!1,n.focus())}))})),[[e,r],[t,a]].forEach((([e,t])=>{e.addEventListener("change",(e=>{e.currentTarget.checked||t.focus()}))}))})),"complete"===document.readyState?T():window.addEventListener("load",T)})(); 2 | //# sourceMappingURL=pydata-sphinx-theme.js.map -------------------------------------------------------------------------------- /_build/html/_static/pygments.css: -------------------------------------------------------------------------------- 1 | html[data-theme="light"] .highlight pre { line-height: 125%; } 2 | html[data-theme="light"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } 3 | html[data-theme="light"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } 4 | html[data-theme="light"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } 5 | html[data-theme="light"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } 6 | html[data-theme="light"] .highlight .hll { background-color: #fae4c2 } 7 | html[data-theme="light"] .highlight { background: #fefefe; color: #080808 } 8 | html[data-theme="light"] .highlight .c { color: #515151 } /* Comment */ 9 | html[data-theme="light"] .highlight .err { color: #a12236 } /* Error */ 10 | html[data-theme="light"] .highlight .k { color: #6730c5 } /* Keyword */ 11 | html[data-theme="light"] .highlight .l { color: #7f4707 } /* Literal */ 12 | html[data-theme="light"] .highlight .n { color: #080808 } /* Name */ 13 | html[data-theme="light"] .highlight .o { color: #00622f } /* Operator */ 14 | html[data-theme="light"] .highlight .p { color: #080808 } /* Punctuation */ 15 | html[data-theme="light"] .highlight .ch { color: #515151 } /* Comment.Hashbang */ 16 | html[data-theme="light"] .highlight .cm { color: #515151 } /* Comment.Multiline */ 17 | html[data-theme="light"] .highlight .cp { color: #515151 } /* Comment.Preproc */ 18 | html[data-theme="light"] .highlight .cpf { color: #515151 } /* Comment.PreprocFile */ 19 | html[data-theme="light"] .highlight .c1 { color: #515151 } /* Comment.Single */ 20 | html[data-theme="light"] .highlight .cs { color: #515151 } /* Comment.Special */ 21 | html[data-theme="light"] .highlight .gd { color: #005b82 } /* Generic.Deleted */ 22 | html[data-theme="light"] .highlight .ge { font-style: italic } /* Generic.Emph */ 23 | html[data-theme="light"] .highlight .gh { color: #005b82 } /* Generic.Heading */ 24 | html[data-theme="light"] .highlight .gs { font-weight: bold } /* Generic.Strong */ 25 | html[data-theme="light"] .highlight .gu { color: #005b82 } /* Generic.Subheading */ 26 | html[data-theme="light"] .highlight .kc { color: #6730c5 } /* Keyword.Constant */ 27 | html[data-theme="light"] .highlight .kd { color: #6730c5 } /* Keyword.Declaration */ 28 | html[data-theme="light"] .highlight .kn { color: #6730c5 } /* Keyword.Namespace */ 29 | html[data-theme="light"] .highlight .kp { color: #6730c5 } /* Keyword.Pseudo */ 30 | html[data-theme="light"] .highlight .kr { color: #6730c5 } /* Keyword.Reserved */ 31 | html[data-theme="light"] .highlight .kt { color: #7f4707 } /* Keyword.Type */ 32 | html[data-theme="light"] .highlight .ld { color: #7f4707 } /* Literal.Date */ 33 | html[data-theme="light"] .highlight .m { color: #7f4707 } /* Literal.Number */ 34 | html[data-theme="light"] .highlight .s { color: #00622f } /* Literal.String */ 35 | html[data-theme="light"] .highlight .na { color: #912583 } /* Name.Attribute */ 36 | html[data-theme="light"] .highlight .nb { color: #7f4707 } /* Name.Builtin */ 37 | html[data-theme="light"] .highlight .nc { color: #005b82 } /* Name.Class */ 38 | html[data-theme="light"] .highlight .no { color: #005b82 } /* Name.Constant */ 39 | html[data-theme="light"] .highlight .nd { color: #7f4707 } /* Name.Decorator */ 40 | html[data-theme="light"] .highlight .ni { color: #00622f } /* Name.Entity */ 41 | html[data-theme="light"] .highlight .ne { color: #6730c5 } /* Name.Exception */ 42 | html[data-theme="light"] .highlight .nf { color: #005b82 } /* Name.Function */ 43 | html[data-theme="light"] .highlight .nl { color: #7f4707 } /* Name.Label */ 44 | html[data-theme="light"] .highlight .nn { color: #080808 } /* Name.Namespace */ 45 | html[data-theme="light"] .highlight .nx { color: #080808 } /* Name.Other */ 46 | html[data-theme="light"] .highlight .py { color: #005b82 } /* Name.Property */ 47 | html[data-theme="light"] .highlight .nt { color: #005b82 } /* Name.Tag */ 48 | html[data-theme="light"] .highlight .nv { color: #a12236 } /* Name.Variable */ 49 | html[data-theme="light"] .highlight .ow { color: #6730c5 } /* Operator.Word */ 50 | html[data-theme="light"] .highlight .pm { color: #080808 } /* Punctuation.Marker */ 51 | html[data-theme="light"] .highlight .w { color: #080808 } /* Text.Whitespace */ 52 | html[data-theme="light"] .highlight .mb { color: #7f4707 } /* Literal.Number.Bin */ 53 | html[data-theme="light"] .highlight .mf { color: #7f4707 } /* Literal.Number.Float */ 54 | html[data-theme="light"] .highlight .mh { color: #7f4707 } /* Literal.Number.Hex */ 55 | html[data-theme="light"] .highlight .mi { color: #7f4707 } /* Literal.Number.Integer */ 56 | html[data-theme="light"] .highlight .mo { color: #7f4707 } /* Literal.Number.Oct */ 57 | html[data-theme="light"] .highlight .sa { color: #00622f } /* Literal.String.Affix */ 58 | html[data-theme="light"] .highlight .sb { color: #00622f } /* Literal.String.Backtick */ 59 | html[data-theme="light"] .highlight .sc { color: #00622f } /* Literal.String.Char */ 60 | html[data-theme="light"] .highlight .dl { color: #00622f } /* Literal.String.Delimiter */ 61 | html[data-theme="light"] .highlight .sd { color: #00622f } /* Literal.String.Doc */ 62 | html[data-theme="light"] .highlight .s2 { color: #00622f } /* Literal.String.Double */ 63 | html[data-theme="light"] .highlight .se { color: #00622f } /* Literal.String.Escape */ 64 | html[data-theme="light"] .highlight .sh { color: #00622f } /* Literal.String.Heredoc */ 65 | html[data-theme="light"] .highlight .si { color: #00622f } /* Literal.String.Interpol */ 66 | html[data-theme="light"] .highlight .sx { color: #00622f } /* Literal.String.Other */ 67 | html[data-theme="light"] .highlight .sr { color: #a12236 } /* Literal.String.Regex */ 68 | html[data-theme="light"] .highlight .s1 { color: #00622f } /* Literal.String.Single */ 69 | html[data-theme="light"] .highlight .ss { color: #005b82 } /* Literal.String.Symbol */ 70 | html[data-theme="light"] .highlight .bp { color: #7f4707 } /* Name.Builtin.Pseudo */ 71 | html[data-theme="light"] .highlight .fm { color: #005b82 } /* Name.Function.Magic */ 72 | html[data-theme="light"] .highlight .vc { color: #a12236 } /* Name.Variable.Class */ 73 | html[data-theme="light"] .highlight .vg { color: #a12236 } /* Name.Variable.Global */ 74 | html[data-theme="light"] .highlight .vi { color: #a12236 } /* Name.Variable.Instance */ 75 | html[data-theme="light"] .highlight .vm { color: #7f4707 } /* Name.Variable.Magic */ 76 | html[data-theme="light"] .highlight .il { color: #7f4707 } /* Literal.Number.Integer.Long */ 77 | html[data-theme="dark"] .highlight pre { line-height: 125%; } 78 | html[data-theme="dark"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } 79 | html[data-theme="dark"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } 80 | html[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } 81 | html[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } 82 | html[data-theme="dark"] .highlight .hll { background-color: #ffd9002e } 83 | html[data-theme="dark"] .highlight { background: #2b2b2b; color: #f8f8f2 } 84 | html[data-theme="dark"] .highlight .c { color: #ffd900 } /* Comment */ 85 | html[data-theme="dark"] .highlight .err { color: #ffa07a } /* Error */ 86 | html[data-theme="dark"] .highlight .k { color: #dcc6e0 } /* Keyword */ 87 | html[data-theme="dark"] .highlight .l { color: #ffd900 } /* Literal */ 88 | html[data-theme="dark"] .highlight .n { color: #f8f8f2 } /* Name */ 89 | html[data-theme="dark"] .highlight .o { color: #abe338 } /* Operator */ 90 | html[data-theme="dark"] .highlight .p { color: #f8f8f2 } /* Punctuation */ 91 | html[data-theme="dark"] .highlight .ch { color: #ffd900 } /* Comment.Hashbang */ 92 | html[data-theme="dark"] .highlight .cm { color: #ffd900 } /* Comment.Multiline */ 93 | html[data-theme="dark"] .highlight .cp { color: #ffd900 } /* Comment.Preproc */ 94 | html[data-theme="dark"] .highlight .cpf { color: #ffd900 } /* Comment.PreprocFile */ 95 | html[data-theme="dark"] .highlight .c1 { color: #ffd900 } /* Comment.Single */ 96 | html[data-theme="dark"] .highlight .cs { color: #ffd900 } /* Comment.Special */ 97 | html[data-theme="dark"] .highlight .gd { color: #00e0e0 } /* Generic.Deleted */ 98 | html[data-theme="dark"] .highlight .ge { font-style: italic } /* Generic.Emph */ 99 | html[data-theme="dark"] .highlight .gh { color: #00e0e0 } /* Generic.Heading */ 100 | html[data-theme="dark"] .highlight .gs { font-weight: bold } /* Generic.Strong */ 101 | html[data-theme="dark"] .highlight .gu { color: #00e0e0 } /* Generic.Subheading */ 102 | html[data-theme="dark"] .highlight .kc { color: #dcc6e0 } /* Keyword.Constant */ 103 | html[data-theme="dark"] .highlight .kd { color: #dcc6e0 } /* Keyword.Declaration */ 104 | html[data-theme="dark"] .highlight .kn { color: #dcc6e0 } /* Keyword.Namespace */ 105 | html[data-theme="dark"] .highlight .kp { color: #dcc6e0 } /* Keyword.Pseudo */ 106 | html[data-theme="dark"] .highlight .kr { color: #dcc6e0 } /* Keyword.Reserved */ 107 | html[data-theme="dark"] .highlight .kt { color: #ffd900 } /* Keyword.Type */ 108 | html[data-theme="dark"] .highlight .ld { color: #ffd900 } /* Literal.Date */ 109 | html[data-theme="dark"] .highlight .m { color: #ffd900 } /* Literal.Number */ 110 | html[data-theme="dark"] .highlight .s { color: #abe338 } /* Literal.String */ 111 | html[data-theme="dark"] .highlight .na { color: #ffd900 } /* Name.Attribute */ 112 | html[data-theme="dark"] .highlight .nb { color: #ffd900 } /* Name.Builtin */ 113 | html[data-theme="dark"] .highlight .nc { color: #00e0e0 } /* Name.Class */ 114 | html[data-theme="dark"] .highlight .no { color: #00e0e0 } /* Name.Constant */ 115 | html[data-theme="dark"] .highlight .nd { color: #ffd900 } /* Name.Decorator */ 116 | html[data-theme="dark"] .highlight .ni { color: #abe338 } /* Name.Entity */ 117 | html[data-theme="dark"] .highlight .ne { color: #dcc6e0 } /* Name.Exception */ 118 | html[data-theme="dark"] .highlight .nf { color: #00e0e0 } /* Name.Function */ 119 | html[data-theme="dark"] .highlight .nl { color: #ffd900 } /* Name.Label */ 120 | html[data-theme="dark"] .highlight .nn { color: #f8f8f2 } /* Name.Namespace */ 121 | html[data-theme="dark"] .highlight .nx { color: #f8f8f2 } /* Name.Other */ 122 | html[data-theme="dark"] .highlight .py { color: #00e0e0 } /* Name.Property */ 123 | html[data-theme="dark"] .highlight .nt { color: #00e0e0 } /* Name.Tag */ 124 | html[data-theme="dark"] .highlight .nv { color: #ffa07a } /* Name.Variable */ 125 | html[data-theme="dark"] .highlight .ow { color: #dcc6e0 } /* Operator.Word */ 126 | html[data-theme="dark"] .highlight .pm { color: #f8f8f2 } /* Punctuation.Marker */ 127 | html[data-theme="dark"] .highlight .w { color: #f8f8f2 } /* Text.Whitespace */ 128 | html[data-theme="dark"] .highlight .mb { color: #ffd900 } /* Literal.Number.Bin */ 129 | html[data-theme="dark"] .highlight .mf { color: #ffd900 } /* Literal.Number.Float */ 130 | html[data-theme="dark"] .highlight .mh { color: #ffd900 } /* Literal.Number.Hex */ 131 | html[data-theme="dark"] .highlight .mi { color: #ffd900 } /* Literal.Number.Integer */ 132 | html[data-theme="dark"] .highlight .mo { color: #ffd900 } /* Literal.Number.Oct */ 133 | html[data-theme="dark"] .highlight .sa { color: #abe338 } /* Literal.String.Affix */ 134 | html[data-theme="dark"] .highlight .sb { color: #abe338 } /* Literal.String.Backtick */ 135 | html[data-theme="dark"] .highlight .sc { color: #abe338 } /* Literal.String.Char */ 136 | html[data-theme="dark"] .highlight .dl { color: #abe338 } /* Literal.String.Delimiter */ 137 | html[data-theme="dark"] .highlight .sd { color: #abe338 } /* Literal.String.Doc */ 138 | html[data-theme="dark"] .highlight .s2 { color: #abe338 } /* Literal.String.Double */ 139 | html[data-theme="dark"] .highlight .se { color: #abe338 } /* Literal.String.Escape */ 140 | html[data-theme="dark"] .highlight .sh { color: #abe338 } /* Literal.String.Heredoc */ 141 | html[data-theme="dark"] .highlight .si { color: #abe338 } /* Literal.String.Interpol */ 142 | html[data-theme="dark"] .highlight .sx { color: #abe338 } /* Literal.String.Other */ 143 | html[data-theme="dark"] .highlight .sr { color: #ffa07a } /* Literal.String.Regex */ 144 | html[data-theme="dark"] .highlight .s1 { color: #abe338 } /* Literal.String.Single */ 145 | html[data-theme="dark"] .highlight .ss { color: #00e0e0 } /* Literal.String.Symbol */ 146 | html[data-theme="dark"] .highlight .bp { color: #ffd900 } /* Name.Builtin.Pseudo */ 147 | html[data-theme="dark"] .highlight .fm { color: #00e0e0 } /* Name.Function.Magic */ 148 | html[data-theme="dark"] .highlight .vc { color: #ffa07a } /* Name.Variable.Class */ 149 | html[data-theme="dark"] .highlight .vg { color: #ffa07a } /* Name.Variable.Global */ 150 | html[data-theme="dark"] .highlight .vi { color: #ffa07a } /* Name.Variable.Instance */ 151 | html[data-theme="dark"] .highlight .vm { color: #ffd900 } /* Name.Variable.Magic */ 152 | html[data-theme="dark"] .highlight .il { color: #ffd900 } /* Literal.Number.Integer.Long */ -------------------------------------------------------------------------------- /_build/html/genindex.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Index — Hello World 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 |
76 | 77 | 79 | 80 | 81 | 84 | 85 | 86 | 89 | 90 | 91 |
92 |
93 |
94 |
110 |
111 | 112 |
113 | 114 |
115 | 116 | 117 | 119 | 120 | 121 |
122 |
123 | 124 | 125 | 126 | 127 | 128 |
129 | 130 | 131 | 132 | 138 | 139 | 182 | 183 | 184 | 186 | 187 | 188 | 189 | 190 |
191 | 192 |
193 | 194 | 195 | 196 |
197 | 198 |
199 |
200 | 201 |
202 |
203 | 204 |
205 | 206 |
209 | 210 |
211 | 212 | 213 |
214 | 215 |
216 | 217 |
218 | 219 | 220 | 221 | 222 | 223 | 264 | 265 | 266 | 267 | 268 | 280 | 281 | 282 | 283 | 292 | 293 | 294 | 301 | 302 |
303 | 304 |
305 | 306 |
307 |
308 | 309 | 310 | 311 |
312 |

313 | 314 |
315 |
316 | 317 |
318 |
319 |
320 | 321 | 322 | 323 | 324 |
325 | 326 | 327 |

Index

328 | 329 |
330 | 331 |
332 | 333 | 334 |
335 | 336 | 337 | 338 | 339 | 340 | 341 |
342 | 343 |
344 |
345 |
346 | 347 |
348 | 349 | 350 | 351 | 352 |
353 |
354 | 355 | 386 |
387 | 388 | 389 |
390 |
391 |
392 | 393 | 394 | 395 | 396 | 397 |
398 |
399 | 400 | -------------------------------------------------------------------------------- /_build/html/search.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Search - Hello World 11 | 12 | 13 | 14 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 |
78 | 79 | 81 | 82 | 83 | 86 | 87 | 88 | 91 | 92 | 93 |
94 |
95 |
96 |
112 |
113 | 114 |
115 | 116 |
117 | 118 | 119 | 121 | 122 | 123 |
124 |
125 | 126 | 127 | 128 | 129 | 130 |
131 | 132 | 133 | 134 | 140 | 141 | 184 | 185 | 186 | 188 | 189 | 190 | 191 | 192 |
193 | 194 |
195 | 196 | 197 | 198 |
199 | 200 |
201 |
202 | 203 |
204 |
205 | 206 |
207 | 208 |
211 | 212 |
213 | 214 | 215 |
216 | 217 |
218 | 219 |
220 | 221 | 222 | 223 | 224 | 225 | 266 | 267 | 268 | 269 | 270 | 282 | 283 | 284 | 285 | 294 | 295 | 296 | 303 | 304 |
305 | 306 |
307 | 308 |
309 |
310 | 311 | 312 |
313 |

Search

314 | 320 | 321 | 337 |
338 |
339 | 348 | 349 | 350 | 351 | 352 | 353 |
354 | 355 |
356 |
357 |
358 | 359 |
360 | 361 | 362 | 363 | 364 |
365 |
366 | 367 | 398 |
399 | 400 | 401 |
402 |
403 |
404 | 405 | 406 | 407 | 408 | 409 |
410 |
411 | 412 | -------------------------------------------------------------------------------- /_build/html/mymarkdownfile.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Here’s my sample title — Hello World 13 | 14 | 15 | 16 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 |
78 | 79 | 81 | 82 | 83 | 86 | 87 | 88 | 91 | 92 | 93 |
94 |
95 |
96 |
112 |
113 | 114 |
115 | 116 |
117 | 118 | 119 | 121 | 122 | 123 |
124 |
125 | 126 | 127 | 128 |
129 | 130 | 131 | 132 | 138 | 139 | 182 | 183 | 184 | 186 | 187 | 188 | 189 | 190 |
191 | 192 |
193 | 194 | 195 | 196 |
197 | 198 |
199 |
200 | 201 |
202 |
203 | 204 |
205 | 206 |
209 | 210 |
211 | 212 | 213 |
214 | 215 |
216 | 217 |
218 | 219 | 220 | 221 | 222 | 223 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 312 | 313 | 314 | 315 | 316 | 328 | 329 | 330 | 331 | 340 | 341 | 342 | 349 | 352 |
353 | 354 |
355 | 356 |
357 |
358 | 359 | 360 | 361 |
362 |

Here’s my sample title

363 | 364 |
365 |
366 | 367 |
368 |

Contents

369 |
370 | 375 |
376 |
377 |
378 | 379 | 380 | 381 | 382 |
383 | 384 |
385 |

Here’s my sample title#

386 |

This is some sample text.

387 |
388 |

Here’s my first section#

389 |

Here is a reference to the intro. Here is a reference to Here’s my first section.

390 |
391 |
392 | 393 | 411 | 412 | 413 |
414 | 415 | 416 | 417 | 418 | 419 | 420 | 434 | 435 |
436 | 437 | 438 | 439 |
453 | 454 | 455 |
456 |
457 | 458 | 489 |
490 | 491 | 492 |
493 |
494 |
495 | 496 | 497 | 498 | 499 | 500 | 502 | 503 | --------------------------------------------------------------------------------