We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Add statistics tracker to the new website
### Which documentation?

Tutorials site

### What needs to be documented?

Stefan gave us a `data-domain` for Plausible; we should add this text

```html
<script defer data-domain="awkward-array.org" src="https://views.scientific-python.org/js/plausible.js"></script>
```

to every HTML page. The HTML is generated by Sphinx, so it has to go into a template somewhere. I think we don't actually have the default HTML templates; I think that all of the HTML in [docs-sphinx/_templates](https://github.com/scikit-hep/awkward/tree/main/docs-sphinx/_templates) is an override. For instance, the [breadcrumbs.html](https://github.com/scikit-hep/awkward/blob/main/docs-sphinx/_templates/breadcrumbs.html) is just to eliminate something that would be on the default page (the "fork me on GitHub" ribbon?).

@agoose77, you've recently added [funding.html](https://github.com/scikit-hep/awkward/blob/main/docs-sphinx/_templates/funding.html), which appears at the bottom of every page. (I just checked.) If the `<script>` is added there, I think it would reach every page.

Except redirects. The [redirect.html](https://github.com/scikit-hep/awkward/blob/main/docs-sphinx/_templates/redirect.html) describes an entire page. It's debatable whether we'd want to count redirects. It would tell us how many people are using old URLs versus new URLs, but I don't see how useful that information is, and it would have to be disaggregated from the totals, since redirected links shouldn't be counted twice if we're interested in how many people went to a given _topic_ (not _page_). I vote for no statistics on redirects, and I'm not even sure if the script will work if the redirect happens through the meta mechanism (because such an access has `<noscript>`.

Arguably, a `<script>` element ought to go in the HTML `<head>`, rather than the `<body>` (`footer.html`). That's where I usually see them. Actually, I stand corrected: they're legal anywhere, and there are reasons to put them in the `<body>`. [This StackOverflow post](https://stackoverflow.com/a/24070373/1623645) presents the pros and cons: page rendering will pause while a script is being downloaded an executed, and that's no good. We could follow that page's "antiquated recommendation" by putting the `<script>` at the end of the page (`footer.html`); the reason against it doesn't apply: we don't need the statistics-counter script to run to render the page—that can happen late. The "modern approach" is to use `async` or `defer`, which I just noticed is in our snippet, so there are no constraints on when this snippet can be placed. (And it could be `async`, rather than `defer`, because we don't care whether it runs before or after other scripts on the page.)

The only argument I can see for putting it in the `<head>`, then, is that if the statistics-counter starts too late, we could undercount our bounce rate: users click the back button before rendering gets to the `<script>` and the page view gets counted. There will always be some cut-off in the bounce rate, much like $p_T$ in a tracking distribution, since very small values are hard to measure. Having a lower implicit cut on bounce rate, rather than a higher implicit cut, doesn't sound very important to me.

Trying to get it into the `<head>` would mean overloading more templates, and I don't like to overload Sphinx templates because it means we no longer get version updates for that part of the page, and who knows if the template designer intends some relationship between two parts of a page, starting with a particular version number? So I'm in favor of adding the `<script>` to `footer.html`, and `defer` may be replaced by `async` just to loosen an unnecessary constraint for the browser.

Sorry for the long-winded write-up; just thinking through the issues while I type!

Oh, one last thing: let's add the statistics-counter to the new documentation _only_. In other words, _not_ the one with the `latest` tag. The v1 documentation (`latest`) is split between two sites, I don't want to add it to the Netlify site, and the statistics will be easier to interpret if we have it on only one site: we'll know what page is meant by a given URL. We should also see the turn-on curve when the new documentation goes public. If we include the old documentation, we might not be able to filter it out of the statistics, since some of the URLs are the same.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `docs-sphinx/conf.py`
Content:
```
1 # Configuration file for the Sphinx documentation builder.
2 #
3 # This file only contains a selection of the most common options. For a full
4 # list see the documentation:
5 # https://www.sphinx-doc.org/en/master/usage/configuration.html
6 
7 # -- Path setup --------------------------------------------------------------
8 
9 # If extensions (or modules to document with autodoc) are in another directory,
10 # add these directories to sys.path here. If the directory is relative to the
11 # documentation root, use os.path.abspath to make it absolute, like shown here.
12 #
13 import os
14 import json
15 import datetime
16 import runpy
17 import sys
18 import subprocess
19 import pathlib
20 
21 # -- Project information -----------------------------------------------------
22 
23 project = "Awkward Array"
24 copyright = f"{datetime.datetime.now().year}, Awkward Array development team"
25 author = "Jim Pivarski"
26 
27 # -- General configuration ---------------------------------------------------
28 
29 # Add any Sphinx extension module names here, as strings. They can be
30 # extensions coming with Sphinx (named "sphinx.ext.*") or your custom
31 # ones.
32 extensions = [
33     "sphinx_copybutton",
34     "sphinx_design",
35     "sphinx_external_toc",
36     "sphinx.ext.intersphinx",
37     "myst_nb",
38     # Preserve old links
39     "sphinx_reredirects",
40     "jupyterlite_sphinx",
41 ]
42 
43 # Add any paths that contain templates here, relative to this directory.
44 templates_path = ["_templates"]
45 
46 # List of patterns, relative to source directory, that match files and
47 # directories to ignore when looking for source files.
48 # This pattern also affects html_static_path and html_extra_path.
49 exclude_patterns = ["_build", "_templates", "Thumbs.db", "jupyter_execute", ".*"]
50 
51 # -- Options for HTML output -------------------------------------------------
52 
53 # The theme to use for HTML and HTML Help pages.  See the documentation for
54 # a list of builtin themes.
55 #
56 html_context = {
57     "github_user": "scikit-hep",
58     "github_repo": "awkward",
59     # TODO: set this
60     "github_version": os.environ.get("READTHEDOCS_VERSION", "main"),
61     "doc_path": "docs-sphinx",
62 }
63 html_theme = "pydata_sphinx_theme"
64 html_show_sourcelink = True
65 html_theme_options = {
66     "logo": {
67         "image_light": "image/logo-300px.png",
68         "image_dark": "image/logo-300px-white.png",
69     },
70     "github_url": "https://github.com/scikit-hep/awkward",
71     # Add light/dark mode and documentation version switcher:
72     "navbar_end": ["theme-switcher", "navbar-icon-links"],
73     "footer_items": ["copyright", "sphinx-version", "funding"],
74     "icon_links": [
75         {
76             "name": "PyPI",
77             "url": "https://pypi.org/project/awkward",
78             "icon": "fab fa-python",
79         }
80     ],
81     "use_edit_page_button": True,
82     "external_links": [
83         {
84             "name": "Contributor guide",
85             "url": "https://github.com/scikit-hep/awkward/blob/main/CONTRIBUTING.md",
86         },
87         {
88             "name": "Release history",
89             "url": "https://github.com/scikit-hep/awkward/releases",
90         },
91     ],
92 }
93 
94 # Add any paths that contain custom static files (such as style sheets) here,
95 # relative to this directory. They are copied after the builtin static files,
96 # so a file named "default.css" will overwrite the builtin "default.css".
97 html_static_path = ["_static"]
98 html_css_files = ["css/awkward.css"]
99 
100 # MyST settings
101 myst_enable_extensions = [
102     "colon_fence",
103 ]
104 
105 nb_execution_mode = "cache"
106 nb_execution_raise_on_error = True
107 # unpkg is currently _very_ slow
108 nb_ipywidgets_js = {
109     # Load RequireJS, used by the IPywidgets for dependency management
110     "https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js": {
111         "integrity": "sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=",
112         "crossorigin": "anonymous",
113     },
114     # Load IPywidgets bundle for embedding.
115     "https://cdn.jsdelivr.net/npm/@jupyter-widgets/html-manager@0.20.0/dist/embed-amd.js": {
116         "data-jupyter-widgets-cdn": "https://cdn.jsdelivr.net/npm/",
117         "crossorigin": "anonymous",
118     },
119 }
120 # Additional stuff
121 master_doc = "index"
122 
123 # Cross-reference existing Python objects
124 intersphinx_mapping = {
125     "python": ("https://docs.python.org/3/", None),
126     "pandas": ("https://pandas.pydata.org/pandas-docs/stable", None),
127     "numpy": ("https://numpy.org/doc/stable", None),
128     "scipy": ("https://docs.scipy.org/doc/scipy", None),
129     "numba": ("https://numba.pydata.org/numba-doc/latest", None),
130     "arrow": ("https://arrow.apache.org/docs/", None),
131     "jax": ("https://jax.readthedocs.io/en/latest", None),
132 }
133 
134 # Preserve legacy routes
135 with open("redirects.json") as f:
136     redirects = json.load(f)
137 
138 redirect_html_template_file = "_templates/redirect.html"
139 
140 # JupyterLite configuration
141 jupyterlite_dir = "./lite"
142 # Don't override ipynb format
143 jupyterlite_bind_ipynb_suffix = False
144 # We've disabled localstorage, so we must provide the contents explicitly
145 jupyterlite_contents = ["getting-started/demo/*"]
146 
147 HERE = pathlib.Path(__file__).parent
148 
149 # Generate C++ bindings
150 subprocess.check_call(
151     ["doxygen", str(HERE.parent / "docs-doxygen" / "Doxyfile")], cwd=HERE.parent
152 )
153 
154 # Generate Python docstrings
155 runpy.run_path(HERE / "prepare_docstrings.py", run_name="__main__")
156 
157 # Generate kernel docs
158 runpy.run_path(HERE.parent / "dev" / "generate-kerneldocs.py", run_name="__main__")
159
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/docs-sphinx/conf.py b/docs-sphinx/conf.py
--- a/docs-sphinx/conf.py
+++ b/docs-sphinx/conf.py
@@ -89,6 +89,10 @@
             "url": "https://github.com/scikit-hep/awkward/releases",
         },
     ],
+    "analytics": {
+        "plausible_analytics_domain": "awkward-array.org",
+        "plausible_analytics_url": "https://views.scientific-python.org/js/plausible.js"
+    }
 }
 
 # Add any paths that contain custom static files (such as style sheets) here,

{"golden_diff": "diff --git a/docs-sphinx/conf.py b/docs-sphinx/conf.py\n--- a/docs-sphinx/conf.py\n+++ b/docs-sphinx/conf.py\n@@ -89,6 +89,10 @@\n             \"url\": \"https://github.com/scikit-hep/awkward/releases\",\n         },\n     ],\n+    \"analytics\": {\n+        \"plausible_analytics_domain\": \"awkward-array.org\",\n+        \"plausible_analytics_url\": \"https://views.scientific-python.org/js/plausible.js\"\n+    }\n }\n \n # Add any paths that contain custom static files (such as style sheets) here,\n", "issue": "Add statistics tracker to the new website\n### Which documentation?\n\nTutorials site\n\n### What needs to be documented?\n\nStefan gave us a `data-domain` for Plausible; we should add this text\r\n\r\n```html\r\n<script defer data-domain=\"awkward-array.org\" src=\"https://views.scientific-python.org/js/plausible.js\"></script>\r\n```\r\n\r\nto every HTML page. The HTML is generated by Sphinx, so it has to go into a template somewhere. I think we don't actually have the default HTML templates; I think that all of the HTML in [docs-sphinx/_templates](https://github.com/scikit-hep/awkward/tree/main/docs-sphinx/_templates) is an override. For instance, the [breadcrumbs.html](https://github.com/scikit-hep/awkward/blob/main/docs-sphinx/_templates/breadcrumbs.html) is just to eliminate something that would be on the default page (the \"fork me on GitHub\" ribbon?).\r\n\r\n@agoose77, you've recently added [funding.html](https://github.com/scikit-hep/awkward/blob/main/docs-sphinx/_templates/funding.html), which appears at the bottom of every page. (I just checked.) If the `<script>` is added there, I think it would reach every page.\r\n\r\nExcept redirects. The [redirect.html](https://github.com/scikit-hep/awkward/blob/main/docs-sphinx/_templates/redirect.html) describes an entire page. It's debatable whether we'd want to count redirects. It would tell us how many people are using old URLs versus new URLs, but I don't see how useful that information is, and it would have to be disaggregated from the totals, since redirected links shouldn't be counted twice if we're interested in how many people went to a given _topic_ (not _page_). I vote for no statistics on redirects, and I'm not even sure if the script will work if the redirect happens through the meta mechanism (because such an access has `<noscript>`.\r\n\r\nArguably, a `<script>` element ought to go in the HTML `<head>`, rather than the `<body>` (`footer.html`). That's where I usually see them. Actually, I stand corrected: they're legal anywhere, and there are reasons to put them in the `<body>`. [This StackOverflow post](https://stackoverflow.com/a/24070373/1623645) presents the pros and cons: page rendering will pause while a script is being downloaded an executed, and that's no good. We could follow that page's \"antiquated recommendation\" by putting the `<script>` at the end of the page (`footer.html`); the reason against it doesn't apply: we don't need the statistics-counter script to run to render the page\u2014that can happen late. The \"modern approach\" is to use `async` or `defer`, which I just noticed is in our snippet, so there are no constraints on when this snippet can be placed. (And it could be `async`, rather than `defer`, because we don't care whether it runs before or after other scripts on the page.)\r\n\r\nThe only argument I can see for putting it in the `<head>`, then, is that if the statistics-counter starts too late, we could undercount our bounce rate: users click the back button before rendering gets to the `<script>` and the page view gets counted. There will always be some cut-off in the bounce rate, much like $p_T$ in a tracking distribution, since very small values are hard to measure. Having a lower implicit cut on bounce rate, rather than a higher implicit cut, doesn't sound very important to me.\r\n\r\nTrying to get it into the `<head>` would mean overloading more templates, and I don't like to overload Sphinx templates because it means we no longer get version updates for that part of the page, and who knows if the template designer intends some relationship between two parts of a page, starting with a particular version number? So I'm in favor of adding the `<script>` to `footer.html`, and `defer` may be replaced by `async` just to loosen an unnecessary constraint for the browser.\r\n\r\nSorry for the long-winded write-up; just thinking through the issues while I type!\r\n\r\nOh, one last thing: let's add the statistics-counter to the new documentation _only_. In other words, _not_ the one with the `latest` tag. The v1 documentation (`latest`) is split between two sites, I don't want to add it to the Netlify site, and the statistics will be easier to interpret if we have it on only one site: we'll know what page is meant by a given URL. We should also see the turn-on curve when the new documentation goes public. If we include the old documentation, we might not be able to filter it out of the statistics, since some of the URLs are the same.\n", "before_files": [{"content": "# Configuration file for the Sphinx documentation builder.\n#\n# This file only contains a selection of the most common options. For a full\n# list see the documentation:\n# https://www.sphinx-doc.org/en/master/usage/configuration.html\n\n# -- Path setup --------------------------------------------------------------\n\n# If extensions (or modules to document with autodoc) are in another directory,\n# add these directories to sys.path here. If the directory is relative to the\n# documentation root, use os.path.abspath to make it absolute, like shown here.\n#\nimport os\nimport json\nimport datetime\nimport runpy\nimport sys\nimport subprocess\nimport pathlib\n\n# -- Project information -----------------------------------------------------\n\nproject = \"Awkward Array\"\ncopyright = f\"{datetime.datetime.now().year}, Awkward Array development team\"\nauthor = \"Jim Pivarski\"\n\n# -- General configuration ---------------------------------------------------\n\n# Add any Sphinx extension module names here, as strings. They can be\n# extensions coming with Sphinx (named \"sphinx.ext.*\") or your custom\n# ones.\nextensions = [\n    \"sphinx_copybutton\",\n    \"sphinx_design\",\n    \"sphinx_external_toc\",\n    \"sphinx.ext.intersphinx\",\n    \"myst_nb\",\n    # Preserve old links\n    \"sphinx_reredirects\",\n    \"jupyterlite_sphinx\",\n]\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = [\"_templates\"]\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\n# This pattern also affects html_static_path and html_extra_path.\nexclude_patterns = [\"_build\", \"_templates\", \"Thumbs.db\", \"jupyter_execute\", \".*\"]\n\n# -- Options for HTML output -------------------------------------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\n#\nhtml_context = {\n    \"github_user\": \"scikit-hep\",\n    \"github_repo\": \"awkward\",\n    # TODO: set this\n    \"github_version\": os.environ.get(\"READTHEDOCS_VERSION\", \"main\"),\n    \"doc_path\": \"docs-sphinx\",\n}\nhtml_theme = \"pydata_sphinx_theme\"\nhtml_show_sourcelink = True\nhtml_theme_options = {\n    \"logo\": {\n        \"image_light\": \"image/logo-300px.png\",\n        \"image_dark\": \"image/logo-300px-white.png\",\n    },\n    \"github_url\": \"https://github.com/scikit-hep/awkward\",\n    # Add light/dark mode and documentation version switcher:\n    \"navbar_end\": [\"theme-switcher\", \"navbar-icon-links\"],\n    \"footer_items\": [\"copyright\", \"sphinx-version\", \"funding\"],\n    \"icon_links\": [\n        {\n            \"name\": \"PyPI\",\n            \"url\": \"https://pypi.org/project/awkward\",\n            \"icon\": \"fab fa-python\",\n        }\n    ],\n    \"use_edit_page_button\": True,\n    \"external_links\": [\n        {\n            \"name\": \"Contributor guide\",\n            \"url\": \"https://github.com/scikit-hep/awkward/blob/main/CONTRIBUTING.md\",\n        },\n        {\n            \"name\": \"Release history\",\n            \"url\": \"https://github.com/scikit-hep/awkward/releases\",\n        },\n    ],\n}\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\nhtml_static_path = [\"_static\"]\nhtml_css_files = [\"css/awkward.css\"]\n\n# MyST settings\nmyst_enable_extensions = [\n    \"colon_fence\",\n]\n\nnb_execution_mode = \"cache\"\nnb_execution_raise_on_error = True\n# unpkg is currently _very_ slow\nnb_ipywidgets_js = {\n    # Load RequireJS, used by the IPywidgets for dependency management\n    \"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\": {\n        \"integrity\": \"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\",\n        \"crossorigin\": \"anonymous\",\n    },\n    # Load IPywidgets bundle for embedding.\n    \"https://cdn.jsdelivr.net/npm/@jupyter-widgets/html-manager@0.20.0/dist/embed-amd.js\": {\n        \"data-jupyter-widgets-cdn\": \"https://cdn.jsdelivr.net/npm/\",\n        \"crossorigin\": \"anonymous\",\n    },\n}\n# Additional stuff\nmaster_doc = \"index\"\n\n# Cross-reference existing Python objects\nintersphinx_mapping = {\n    \"python\": (\"https://docs.python.org/3/\", None),\n    \"pandas\": (\"https://pandas.pydata.org/pandas-docs/stable\", None),\n    \"numpy\": (\"https://numpy.org/doc/stable\", None),\n    \"scipy\": (\"https://docs.scipy.org/doc/scipy\", None),\n    \"numba\": (\"https://numba.pydata.org/numba-doc/latest\", None),\n    \"arrow\": (\"https://arrow.apache.org/docs/\", None),\n    \"jax\": (\"https://jax.readthedocs.io/en/latest\", None),\n}\n\n# Preserve legacy routes\nwith open(\"redirects.json\") as f:\n    redirects = json.load(f)\n\nredirect_html_template_file = \"_templates/redirect.html\"\n\n# JupyterLite configuration\njupyterlite_dir = \"./lite\"\n# Don't override ipynb format\njupyterlite_bind_ipynb_suffix = False\n# We've disabled localstorage, so we must provide the contents explicitly\njupyterlite_contents = [\"getting-started/demo/*\"]\n\nHERE = pathlib.Path(__file__).parent\n\n# Generate C++ bindings\nsubprocess.check_call(\n    [\"doxygen\", str(HERE.parent / \"docs-doxygen\" / \"Doxyfile\")], cwd=HERE.parent\n)\n\n# Generate Python docstrings\nrunpy.run_path(HERE / \"prepare_docstrings.py\", run_name=\"__main__\")\n\n# Generate kernel docs\nrunpy.run_path(HERE.parent / \"dev\" / \"generate-kerneldocs.py\", run_name=\"__main__\")\n", "path": "docs-sphinx/conf.py"}], "after_files": [{"content": "# Configuration file for the Sphinx documentation builder.\n#\n# This file only contains a selection of the most common options. For a full\n# list see the documentation:\n# https://www.sphinx-doc.org/en/master/usage/configuration.html\n\n# -- Path setup --------------------------------------------------------------\n\n# If extensions (or modules to document with autodoc) are in another directory,\n# add these directories to sys.path here. If the directory is relative to the\n# documentation root, use os.path.abspath to make it absolute, like shown here.\n#\nimport os\nimport json\nimport datetime\nimport runpy\nimport sys\nimport subprocess\nimport pathlib\n\n# -- Project information -----------------------------------------------------\n\nproject = \"Awkward Array\"\ncopyright = f\"{datetime.datetime.now().year}, Awkward Array development team\"\nauthor = \"Jim Pivarski\"\n\n# -- General configuration ---------------------------------------------------\n\n# Add any Sphinx extension module names here, as strings. They can be\n# extensions coming with Sphinx (named \"sphinx.ext.*\") or your custom\n# ones.\nextensions = [\n    \"sphinx_copybutton\",\n    \"sphinx_design\",\n    \"sphinx_external_toc\",\n    \"sphinx.ext.intersphinx\",\n    \"myst_nb\",\n    # Preserve old links\n    \"sphinx_reredirects\",\n    \"jupyterlite_sphinx\",\n]\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = [\"_templates\"]\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\n# This pattern also affects html_static_path and html_extra_path.\nexclude_patterns = [\"_build\", \"_templates\", \"Thumbs.db\", \"jupyter_execute\", \".*\"]\n\n# -- Options for HTML output -------------------------------------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\n#\nhtml_context = {\n    \"github_user\": \"scikit-hep\",\n    \"github_repo\": \"awkward\",\n    # TODO: set this\n    \"github_version\": os.environ.get(\"READTHEDOCS_VERSION\", \"main\"),\n    \"doc_path\": \"docs-sphinx\",\n}\nhtml_theme = \"pydata_sphinx_theme\"\nhtml_show_sourcelink = True\nhtml_theme_options = {\n    \"logo\": {\n        \"image_light\": \"image/logo-300px.png\",\n        \"image_dark\": \"image/logo-300px-white.png\",\n    },\n    \"github_url\": \"https://github.com/scikit-hep/awkward\",\n    # Add light/dark mode and documentation version switcher:\n    \"navbar_end\": [\"theme-switcher\", \"navbar-icon-links\"],\n    \"footer_items\": [\"copyright\", \"sphinx-version\", \"funding\"],\n    \"icon_links\": [\n        {\n            \"name\": \"PyPI\",\n            \"url\": \"https://pypi.org/project/awkward\",\n            \"icon\": \"fab fa-python\",\n        }\n    ],\n    \"use_edit_page_button\": True,\n    \"external_links\": [\n        {\n            \"name\": \"Contributor guide\",\n            \"url\": \"https://github.com/scikit-hep/awkward/blob/main/CONTRIBUTING.md\",\n        },\n        {\n            \"name\": \"Release history\",\n            \"url\": \"https://github.com/scikit-hep/awkward/releases\",\n        },\n    ],\n    \"analytics\": {\n        \"plausible_analytics_domain\": \"awkward-array.org\",\n        \"plausible_analytics_url\": \"https://views.scientific-python.org/js/plausible.js\"\n    }\n}\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\nhtml_static_path = [\"_static\"]\nhtml_css_files = [\"css/awkward.css\"]\n\n# MyST settings\nmyst_enable_extensions = [\n    \"colon_fence\",\n]\n\nnb_execution_mode = \"cache\"\nnb_execution_raise_on_error = True\n# unpkg is currently _very_ slow\nnb_ipywidgets_js = {\n    # Load RequireJS, used by the IPywidgets for dependency management\n    \"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\": {\n        \"integrity\": \"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\",\n        \"crossorigin\": \"anonymous\",\n    },\n    # Load IPywidgets bundle for embedding.\n    \"https://cdn.jsdelivr.net/npm/@jupyter-widgets/html-manager@0.20.0/dist/embed-amd.js\": {\n        \"data-jupyter-widgets-cdn\": \"https://cdn.jsdelivr.net/npm/\",\n        \"crossorigin\": \"anonymous\",\n    },\n}\n# Additional stuff\nmaster_doc = \"index\"\n\n# Cross-reference existing Python objects\nintersphinx_mapping = {\n    \"python\": (\"https://docs.python.org/3/\", None),\n    \"pandas\": (\"https://pandas.pydata.org/pandas-docs/stable\", None),\n    \"numpy\": (\"https://numpy.org/doc/stable\", None),\n    \"scipy\": (\"https://docs.scipy.org/doc/scipy\", None),\n    \"numba\": (\"https://numba.pydata.org/numba-doc/latest\", None),\n    \"arrow\": (\"https://arrow.apache.org/docs/\", None),\n    \"jax\": (\"https://jax.readthedocs.io/en/latest\", None),\n}\n\n# Preserve legacy routes\nwith open(\"redirects.json\") as f:\n    redirects = json.load(f)\n\nredirect_html_template_file = \"_templates/redirect.html\"\n\n# JupyterLite configuration\njupyterlite_dir = \"./lite\"\n# Don't override ipynb format\njupyterlite_bind_ipynb_suffix = False\n# We've disabled localstorage, so we must provide the contents explicitly\njupyterlite_contents = [\"getting-started/demo/*\"]\n\nHERE = pathlib.Path(__file__).parent\n\n# Generate C++ bindings\nsubprocess.check_call(\n    [\"doxygen\", str(HERE.parent / \"docs-doxygen\" / \"Doxyfile\")], cwd=HERE.parent\n)\n\n# Generate Python docstrings\nrunpy.run_path(HERE / \"prepare_docstrings.py\")\n\n# Generate kernel docs\nrunpy.run_path(HERE.parent / \"dev\" / \"generate-kerneldocs.py\")\n", "path": "docs-sphinx/conf.py"}]}