You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tvm.apache.org by tq...@apache.org on 2026/10/16 21:02:41 UTC

(tvm-site) branch asf-site updated: deploying tirx docs (6a4f354cf444c9ff9bd534cee49f5d9c66152542)

This is an automated email from the ASF dual-hosted git repository.

tqchen pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/tvm-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new aeb695f41dd deploying tirx docs (6a4f354cf444c9ff9bd534cee49f5d9c66152542)
aeb695f41dd is described below

commit aeb695f41dd15e4ec53ab32786acf2763fdb143e
Author: tqchen <ti...@gmail.com>
AuthorDate: Fri Oct 16 20:59:15 2026 +0000

    deploying tirx docs (6a4f354cf444c9ff9bd534cee49f5d9c66152542)
---
 tirx/.buildinfo                                    |    4 +
 tirx/_sources/index.rst                            |   28 +
 .../generated/tvm_tirx.codegen.Executable.rst      |   24 +
 .../python/generated/tvm_tirx.ir.Expr.rst          |   32 +
 .../python/generated/tvm_tirx.ir.IRModule.rst      |   48 +
 .../python/generated/tvm_tirx.ir.Stmt.rst          |   33 +
 .../python/generated/tvm_tirx.runtime.Module.rst   |   47 +
 .../python/generated/tvm_tirx.runtime.Tensor.rst   |   42 +
 .../python/generated/tvm_tirx.target.Target.rst    |   43 +
 .../python/generated/tvm_tirx.tirx.Function.rst    |   46 +
 .../python/generated/tvm_tirx.tirx.IndexMap.rst    |   40 +
 .../python/generated/tvm_tirx.tirx.Layout.rst      |   40 +
 .../python/generated/tvm_tirx.tirx.TensorType.rst  |   48 +
 .../python/generated/tvm_tirx.tirx.TileLayout.rst  |   50 +
 .../python/generated/tvm_tirx.tirx.Var.rst         |   38 +
 .../python/generated/tvm_tirx.tirx.compile.rst     |    6 +
 .../python/generated/tvm_tirx.tirx.decl_tensor.rst |    6 +
 tirx/_sources/reference/python/index.rst           |   78 ++
 tirx/_static/base-stemmer.js                       |  476 +++++++++
 tirx/_static/basic.css                             |  906 +++++++++++++++++
 tirx/_static/doctools.js                           |  150 +++
 tirx/_static/documentation_options.js              |   13 +
 tirx/_static/english-stemmer.js                    | 1066 ++++++++++++++++++++
 tirx/_static/file.png                              |  Bin 0 -> 286 bytes
 tirx/_static/images/logo_binder.svg                |   19 +
 tirx/_static/images/logo_colab.png                 |  Bin 0 -> 7601 bytes
 tirx/_static/images/logo_deepnote.svg              |    1 +
 tirx/_static/images/logo_jupyterhub.svg            |    1 +
 tirx/_static/images/logo_jupyterlite.svg           |   17 +
 tirx/_static/language_data.js                      |   13 +
 tirx/_static/locales/ar/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1541 bytes
 tirx/_static/locales/ar/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/bg/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1708 bytes
 tirx/_static/locales/bg/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/bn/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1646 bytes
 tirx/_static/locales/bn/LC_MESSAGES/booktheme.po   |   63 ++
 tirx/_static/locales/ca/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1246 bytes
 tirx/_static/locales/ca/LC_MESSAGES/booktheme.po   |   66 ++
 tirx/_static/locales/cs/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1405 bytes
 tirx/_static/locales/cs/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/da/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1304 bytes
 tirx/_static/locales/da/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/de/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1388 bytes
 tirx/_static/locales/de/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/el/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1722 bytes
 tirx/_static/locales/el/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/eo/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1337 bytes
 tirx/_static/locales/eo/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/es/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1396 bytes
 tirx/_static/locales/es/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/et/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1341 bytes
 tirx/_static/locales/et/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/fi/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1368 bytes
 tirx/_static/locales/fi/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/fr/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1412 bytes
 tirx/_static/locales/fr/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/hr/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1402 bytes
 tirx/_static/locales/hr/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/hu/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1422 bytes
 tirx/_static/locales/hu/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/id/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1323 bytes
 tirx/_static/locales/id/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/it/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1403 bytes
 tirx/_static/locales/it/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/iw/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1445 bytes
 tirx/_static/locales/iw/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/ja/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1471 bytes
 tirx/_static/locales/ja/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/ko/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1375 bytes
 tirx/_static/locales/ko/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/lt/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1413 bytes
 tirx/_static/locales/lt/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/lv/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1404 bytes
 tirx/_static/locales/lv/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/ml/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1883 bytes
 tirx/_static/locales/ml/LC_MESSAGES/booktheme.po   |   66 ++
 tirx/_static/locales/mr/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1674 bytes
 tirx/_static/locales/mr/LC_MESSAGES/booktheme.po   |   66 ++
 tirx/_static/locales/ms/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1213 bytes
 tirx/_static/locales/ms/LC_MESSAGES/booktheme.po   |   66 ++
 tirx/_static/locales/nl/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1356 bytes
 tirx/_static/locales/nl/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/no/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1317 bytes
 tirx/_static/locales/no/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/pl/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1371 bytes
 tirx/_static/locales/pl/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/pt/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1364 bytes
 tirx/_static/locales/pt/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/ro/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1390 bytes
 tirx/_static/locales/ro/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/ru/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1729 bytes
 tirx/_static/locales/ru/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/sk/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1393 bytes
 tirx/_static/locales/sk/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/sl/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1374 bytes
 tirx/_static/locales/sl/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/sr/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1679 bytes
 tirx/_static/locales/sr/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/sv/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1365 bytes
 tirx/_static/locales/sv/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/ta/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1928 bytes
 tirx/_static/locales/ta/LC_MESSAGES/booktheme.po   |   66 ++
 tirx/_static/locales/te/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1806 bytes
 tirx/_static/locales/te/LC_MESSAGES/booktheme.po   |   66 ++
 tirx/_static/locales/tg/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1628 bytes
 tirx/_static/locales/tg/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/th/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1766 bytes
 tirx/_static/locales/th/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/tl/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1273 bytes
 tirx/_static/locales/tl/LC_MESSAGES/booktheme.po   |   66 ++
 tirx/_static/locales/tr/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1373 bytes
 tirx/_static/locales/tr/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/uk/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1681 bytes
 tirx/_static/locales/uk/LC_MESSAGES/booktheme.po   |   75 ++
 tirx/_static/locales/ur/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1462 bytes
 tirx/_static/locales/ur/LC_MESSAGES/booktheme.po   |   66 ++
 tirx/_static/locales/vi/LC_MESSAGES/booktheme.mo   |  Bin 0 -> 1431 bytes
 tirx/_static/locales/vi/LC_MESSAGES/booktheme.po   |   75 ++
 .../_static/locales/zh_CN/LC_MESSAGES/booktheme.mo |  Bin 0 -> 1310 bytes
 .../_static/locales/zh_CN/LC_MESSAGES/booktheme.po |   75 ++
 .../_static/locales/zh_TW/LC_MESSAGES/booktheme.mo |  Bin 0 -> 1341 bytes
 .../_static/locales/zh_TW/LC_MESSAGES/booktheme.po |   75 ++
 tirx/_static/minus.png                             |  Bin 0 -> 90 bytes
 tirx/_static/plus.png                              |  Bin 0 -> 90 bytes
 tirx/_static/pygments.css                          |  152 +++
 tirx/_static/sbt-webpack-macros.html               |   11 +
 tirx/_static/scripts/bootstrap.js                  |    3 +
 tirx/_static/scripts/bootstrap.js.LICENSE.txt      |    5 +
 tirx/_static/scripts/bootstrap.js.map              |    1 +
 tirx/_static/scripts/fontawesome.js                |    3 +
 tirx/_static/scripts/fontawesome.js.LICENSE.txt    |    5 +
 tirx/_static/scripts/fontawesome.js.map            |    1 +
 tirx/_static/scripts/pydata-sphinx-theme.js        |    2 +
 tirx/_static/scripts/pydata-sphinx-theme.js.map    |    1 +
 tirx/_static/scripts/sphinx-book-theme.js          |    2 +
 tirx/_static/scripts/sphinx-book-theme.js.map      |    1 +
 tirx/_static/searchtools.js                        |  693 +++++++++++++
 tirx/_static/sphinx_highlight.js                   |  159 +++
 tirx/_static/styles/pydata-sphinx-theme.css        |   27 +
 tirx/_static/styles/pydata-sphinx-theme.css.map    |    1 +
 tirx/_static/styles/sphinx-book-theme.css          |   16 +
 tirx/_static/styles/sphinx-book-theme.css.map      |    1 +
 tirx/_static/styles/theme.css                      |    2 +
 .../fontawesome/webfonts/fa-brands-400.woff2       |  Bin 0 -> 110088 bytes
 .../fontawesome/webfonts/fa-regular-400.woff2      |  Bin 0 -> 18924 bytes
 .../vendor/fontawesome/webfonts/fa-solid-900.woff2 |  Bin 0 -> 114740 bytes
 tirx/_static/webpack-macros.html                   |   24 +
 tirx/commit_hash                                   |    1 +
 tirx/genindex.html                                 |  536 ++++++++++
 tirx/index.html                                    |  475 +++++++++
 tirx/objects.inv                                   |  Bin 0 -> 914 bytes
 tirx/py-modindex.html                              |  397 ++++++++
 .../generated/tvm_tirx.codegen.Executable.html     |  497 +++++++++
 .../python/generated/tvm_tirx.ir.Expr.html         |  521 ++++++++++
 .../python/generated/tvm_tirx.ir.IRModule.html     |  575 +++++++++++
 .../python/generated/tvm_tirx.ir.Stmt.html         |  524 ++++++++++
 .../python/generated/tvm_tirx.runtime.Module.html  |  612 +++++++++++
 .../python/generated/tvm_tirx.runtime.Tensor.html  |  557 ++++++++++
 .../python/generated/tvm_tirx.target.Target.html   |  630 ++++++++++++
 .../python/generated/tvm_tirx.tirx.Function.html   |  574 +++++++++++
 .../python/generated/tvm_tirx.tirx.IndexMap.html   |  558 ++++++++++
 .../python/generated/tvm_tirx.tirx.Layout.html     |  544 ++++++++++
 .../python/generated/tvm_tirx.tirx.TensorType.html |  579 +++++++++++
 .../python/generated/tvm_tirx.tirx.TileLayout.html |  575 +++++++++++
 .../python/generated/tvm_tirx.tirx.Var.html        |  548 ++++++++++
 .../python/generated/tvm_tirx.tirx.compile.html    |  495 +++++++++
 .../generated/tvm_tirx.tirx.decl_tensor.html       |  479 +++++++++
 tirx/reference/python/index.html                   |  578 +++++++++++
 tirx/search.html                                   |  387 +++++++
 tirx/searchindex.js                                |    1 +
 170 files changed, 18434 insertions(+)

diff --git a/tirx/.buildinfo b/tirx/.buildinfo
new file mode 100644
index 00000000000..9a6d0b88beb
--- /dev/null
+++ b/tirx/.buildinfo
@@ -0,0 +1,4 @@
+# Sphinx build info version 1
+# This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: 3f05d14c37c3c414ebd9d51e67b7368d
+tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/tirx/_sources/index.rst b/tirx/_sources/index.rst
new file mode 100644
index 00000000000..5abf08212fc
--- /dev/null
+++ b/tirx/_sources/index.rst
@@ -0,0 +1,28 @@
+..  Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+..    http://www.apache.org/licenses/LICENSE-2.0
+
+..  Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+Apache TVM TIRx Documentation
+==============================
+
+Table of Contents
+-----------------
+
+.. toctree::
+   :maxdepth: 1
+   :caption: Reference
+
+   reference/python/index.rst
diff --git a/tirx/_sources/reference/python/generated/tvm_tirx.codegen.Executable.rst b/tirx/_sources/reference/python/generated/tvm_tirx.codegen.Executable.rst
new file mode 100644
index 00000000000..e2fd71df638
--- /dev/null
+++ b/tirx/_sources/reference/python/generated/tvm_tirx.codegen.Executable.rst
@@ -0,0 +1,24 @@
+tvm\_tirx.codegen.Executable
+============================
+
+.. currentmodule:: tvm_tirx.codegen
+
+.. autoclass:: Executable
+
+   
+   .. automethod:: __init__
+
+   
+   .. rubric:: Methods
+
+   .. autosummary::
+   
+      ~Executable.__init__
+      ~Executable.export_library
+      ~Executable.jit
+   
+   
+
+   
+   
+   
\ No newline at end of file
diff --git a/tirx/_sources/reference/python/generated/tvm_tirx.ir.Expr.rst b/tirx/_sources/reference/python/generated/tvm_tirx.ir.Expr.rst
new file mode 100644
index 00000000000..3b6d6694b63
--- /dev/null
+++ b/tirx/_sources/reference/python/generated/tvm_tirx.ir.Expr.rst
@@ -0,0 +1,32 @@
+tvm\_tirx.ir.Expr
+=================
+
+.. currentmodule:: tvm_tirx.ir
+
+.. autoclass:: Expr
+
+   
+   .. automethod:: __init__
+
+   
+   .. rubric:: Methods
+
+   .. autosummary::
+   
+      ~Expr.__init__
+      ~Expr.is_
+      ~Expr.same_as
+   
+   
+
+   
+   
+   .. rubric:: Attributes
+
+   .. autosummary::
+   
+      ~Expr.id_
+      ~Expr.loc
+      ~Expr.ty
+   
+   
\ No newline at end of file
diff --git a/tirx/_sources/reference/python/generated/tvm_tirx.ir.IRModule.rst b/tirx/_sources/reference/python/generated/tvm_tirx.ir.IRModule.rst
new file mode 100644
index 00000000000..5642b0a8584
--- /dev/null
+++ b/tirx/_sources/reference/python/generated/tvm_tirx.ir.IRModule.rst
@@ -0,0 +1,48 @@
+tvm\_tirx.ir.IRModule
+=====================
+
+.. currentmodule:: tvm_tirx.ir
+
+.. autoclass:: IRModule
+
+   
+   .. automethod:: __init__
+
+   
+   .. rubric:: Methods
+
+   .. autosummary::
+   
+      ~IRModule.__init__
+      ~IRModule.clone
+      ~IRModule.from_expr
+      ~IRModule.functions_items
+      ~IRModule.get_attr
+      ~IRModule.get_global_var
+      ~IRModule.get_global_vars
+      ~IRModule.is_
+      ~IRModule.same_as
+      ~IRModule.script
+      ~IRModule.show
+      ~IRModule.update
+      ~IRModule.update_func
+      ~IRModule.update_global_info
+      ~IRModule.with_attr
+      ~IRModule.with_attrs
+      ~IRModule.without_attr
+   
+   
+
+   
+   
+   .. rubric:: Attributes
+
+   .. autosummary::
+   
+      ~IRModule.attrs
+      ~IRModule.functions
+      ~IRModule.global_infos
+      ~IRModule.global_var_map_
+      ~IRModule.id_
+   
+   
\ No newline at end of file
diff --git a/tirx/_sources/reference/python/generated/tvm_tirx.ir.Stmt.rst b/tirx/_sources/reference/python/generated/tvm_tirx.ir.Stmt.rst
new file mode 100644
index 00000000000..625710ff230
--- /dev/null
+++ b/tirx/_sources/reference/python/generated/tvm_tirx.ir.Stmt.rst
@@ -0,0 +1,33 @@
+tvm\_tirx.ir.Stmt
+=================
+
+.. currentmodule:: tvm_tirx.ir
+
+.. autoclass:: Stmt
+
+   
+   .. automethod:: __init__
+
+   
+   .. rubric:: Methods
+
+   .. autosummary::
+   
+      ~Stmt.__init__
+      ~Stmt.is_
+      ~Stmt.same_as
+      ~Stmt.script
+      ~Stmt.show
+   
+   
+
+   
+   
+   .. rubric:: Attributes
+
+   .. autosummary::
+   
+      ~Stmt.id_
+      ~Stmt.loc
+   
+   
\ No newline at end of file
diff --git a/tirx/_sources/reference/python/generated/tvm_tirx.runtime.Module.rst b/tirx/_sources/reference/python/generated/tvm_tirx.runtime.Module.rst
new file mode 100644
index 00000000000..5d67d50f85f
--- /dev/null
+++ b/tirx/_sources/reference/python/generated/tvm_tirx.runtime.Module.rst
@@ -0,0 +1,47 @@
+tvm\_tirx.runtime.Module
+========================
+
+.. currentmodule:: tvm_tirx.runtime
+
+.. autoclass:: Module
+
+   
+   .. automethod:: __init__
+
+   
+   .. rubric:: Methods
+
+   .. autosummary::
+   
+      ~Module.__init__
+      ~Module.clear_imports
+      ~Module.get_function
+      ~Module.get_function_doc
+      ~Module.get_function_metadata
+      ~Module.get_property_mask
+      ~Module.get_write_formats
+      ~Module.implements_function
+      ~Module.import_module
+      ~Module.inspect_source
+      ~Module.is_
+      ~Module.is_binary_serializable
+      ~Module.is_compilation_exportable
+      ~Module.is_runnable
+      ~Module.same_as
+      ~Module.write_to_file
+   
+   
+
+   
+   
+   .. rubric:: Attributes
+
+   .. autosummary::
+   
+      ~Module.entry_name
+      ~Module.id_
+      ~Module.imports
+      ~Module.imports_
+      ~Module.kind
+   
+   
\ No newline at end of file
diff --git a/tirx/_sources/reference/python/generated/tvm_tirx.runtime.Tensor.rst b/tirx/_sources/reference/python/generated/tvm_tirx.runtime.Tensor.rst
new file mode 100644
index 00000000000..478b5f3a958
--- /dev/null
+++ b/tirx/_sources/reference/python/generated/tvm_tirx.runtime.Tensor.rst
@@ -0,0 +1,42 @@
+tvm\_tirx.runtime.Tensor
+========================
+
+.. currentmodule:: tvm_tirx.runtime
+
+.. autoclass:: Tensor
+
+   
+   .. automethod:: __init__
+
+   
+   .. rubric:: Methods
+
+   .. autosummary::
+   
+      ~Tensor.__init__
+      ~Tensor.copyfrom
+      ~Tensor.copyto
+      ~Tensor.data_ptr
+      ~Tensor.is_
+      ~Tensor.is_contiguous
+      ~Tensor.numel
+      ~Tensor.numpy
+      ~Tensor.same_as
+      ~Tensor.size
+   
+   
+
+   
+   
+   .. rubric:: Attributes
+
+   .. autosummary::
+   
+      ~Tensor.device
+      ~Tensor.dtype
+      ~Tensor.id_
+      ~Tensor.ndim
+      ~Tensor.shape
+      ~Tensor.strides
+   
+   
\ No newline at end of file
diff --git a/tirx/_sources/reference/python/generated/tvm_tirx.target.Target.rst b/tirx/_sources/reference/python/generated/tvm_tirx.target.Target.rst
new file mode 100644
index 00000000000..8e46288b17f
--- /dev/null
+++ b/tirx/_sources/reference/python/generated/tvm_tirx.target.Target.rst
@@ -0,0 +1,43 @@
+tvm\_tirx.target.Target
+=======================
+
+.. currentmodule:: tvm_tirx.target
+
+.. autoclass:: Target
+
+   
+   .. automethod:: __init__
+
+   
+   .. rubric:: Methods
+
+   .. autosummary::
+   
+      ~Target.__init__
+      ~Target.current
+      ~Target.export
+      ~Target.from_device
+      ~Target.get_target_device_type
+      ~Target.is_
+      ~Target.list_kinds
+      ~Target.same_as
+      ~Target.target_or_current
+      ~Target.with_host
+   
+   
+
+   
+   
+   .. rubric:: Attributes
+
+   .. autosummary::
+   
+      ~Target.attrs
+      ~Target.features
+      ~Target.host
+      ~Target.id_
+      ~Target.keys
+      ~Target.kind
+      ~Target.tag
+   
+   
\ No newline at end of file
diff --git a/tirx/_sources/reference/python/generated/tvm_tirx.tirx.Function.rst b/tirx/_sources/reference/python/generated/tvm_tirx.tirx.Function.rst
new file mode 100644
index 00000000000..fc33ce55354
--- /dev/null
+++ b/tirx/_sources/reference/python/generated/tvm_tirx.tirx.Function.rst
@@ -0,0 +1,46 @@
+tvm\_tirx.tirx.Function
+=======================
+
+.. currentmodule:: tvm_tirx.tirx
+
+.. autoclass:: Function
+
+   
+   .. automethod:: __init__
+
+   
+   .. rubric:: Methods
+
+   .. autosummary::
+   
+      ~Function.__init__
+      ~Function.astype
+      ~Function.equal
+      ~Function.expr_ty
+      ~Function.is_
+      ~Function.same_as
+      ~Function.script
+      ~Function.show
+      ~Function.specialize
+      ~Function.with_attr
+      ~Function.with_attrs
+      ~Function.with_body
+      ~Function.without_attr
+   
+   
+
+   
+   
+   .. rubric:: Attributes
+
+   .. autosummary::
+   
+      ~Function.attrs
+      ~Function.body
+      ~Function.id_
+      ~Function.loc
+      ~Function.params
+      ~Function.ret_type
+      ~Function.ty
+   
+   
\ No newline at end of file
diff --git a/tirx/_sources/reference/python/generated/tvm_tirx.tirx.IndexMap.rst b/tirx/_sources/reference/python/generated/tvm_tirx.tirx.IndexMap.rst
new file mode 100644
index 00000000000..4558e521901
--- /dev/null
+++ b/tirx/_sources/reference/python/generated/tvm_tirx.tirx.IndexMap.rst
@@ -0,0 +1,40 @@
+tvm\_tirx.tirx.IndexMap
+=======================
+
+.. currentmodule:: tvm_tirx.tirx
+
+.. autoclass:: IndexMap
+
+   
+   .. automethod:: __init__
+
+   
+   .. rubric:: Methods
+
+   .. autosummary::
+   
+      ~IndexMap.__init__
+      ~IndexMap.from_func
+      ~IndexMap.inverse
+      ~IndexMap.is_
+      ~IndexMap.is_equivalent_to
+      ~IndexMap.map_indices
+      ~IndexMap.map_shape
+      ~IndexMap.map_tensor
+      ~IndexMap.non_surjective_inverse
+      ~IndexMap.same_as
+   
+   
+
+   
+   
+   .. rubric:: Attributes
+
+   .. autosummary::
+   
+      ~IndexMap.final_indices
+      ~IndexMap.id_
+      ~IndexMap.initial_indices
+      ~IndexMap.inverse_index_map
+   
+   
\ No newline at end of file
diff --git a/tirx/_sources/reference/python/generated/tvm_tirx.tirx.Layout.rst b/tirx/_sources/reference/python/generated/tvm_tirx.tirx.Layout.rst
new file mode 100644
index 00000000000..c5a9dd2479e
--- /dev/null
+++ b/tirx/_sources/reference/python/generated/tvm_tirx.tirx.Layout.rst
@@ -0,0 +1,40 @@
+tvm\_tirx.tirx.Layout
+=====================
+
+.. currentmodule:: tvm_tirx.tirx
+
+.. autoclass:: Layout
+
+   
+   .. automethod:: __init__
+
+   
+   .. rubric:: Methods
+
+   .. autosummary::
+   
+      ~Layout.__init__
+      ~Layout.apply
+      ~Layout.canonicalize
+      ~Layout.is_
+      ~Layout.is_trivial
+      ~Layout.pack
+      ~Layout.same_as
+      ~Layout.size
+      ~Layout.span
+      ~Layout.tile
+      ~Layout.tile_to
+      ~Layout.unpack
+      ~Layout.verify_well_formed
+   
+   
+
+   
+   
+   .. rubric:: Attributes
+
+   .. autosummary::
+   
+      ~Layout.id_
+   
+   
\ No newline at end of file
diff --git a/tirx/_sources/reference/python/generated/tvm_tirx.tirx.TensorType.rst b/tirx/_sources/reference/python/generated/tvm_tirx.tirx.TensorType.rst
new file mode 100644
index 00000000000..34e54d05acf
--- /dev/null
+++ b/tirx/_sources/reference/python/generated/tvm_tirx.tirx.TensorType.rst
@@ -0,0 +1,48 @@
+tvm\_tirx.tirx.TensorType
+=========================
+
+.. currentmodule:: tvm_tirx.tirx
+
+.. autoclass:: TensorType
+
+   
+   .. automethod:: __init__
+
+   
+   .. rubric:: Methods
+
+   .. autosummary::
+   
+      ~TensorType.__init__
+      ~TensorType.effective_layout
+      ~TensorType.is_
+      ~TensorType.is_scalar
+      ~TensorType.missing
+      ~TensorType.permute
+      ~TensorType.ptr_to
+      ~TensorType.rearrange
+      ~TensorType.same_as
+      ~TensorType.script
+      ~TensorType.show
+      ~TensorType.view
+   
+   
+
+   
+   
+   .. rubric:: Attributes
+
+   .. autosummary::
+   
+      ~TensorType.data_alignment
+      ~TensorType.dtype
+      ~TensorType.elem_offset
+      ~TensorType.id_
+      ~TensorType.layout
+      ~TensorType.loc
+      ~TensorType.offset_factor
+      ~TensorType.scope
+      ~TensorType.shape
+      ~TensorType.strides
+   
+   
\ No newline at end of file
diff --git a/tirx/_sources/reference/python/generated/tvm_tirx.tirx.TileLayout.rst b/tirx/_sources/reference/python/generated/tvm_tirx.tirx.TileLayout.rst
new file mode 100644
index 00000000000..a173ec5cce7
--- /dev/null
+++ b/tirx/_sources/reference/python/generated/tvm_tirx.tirx.TileLayout.rst
@@ -0,0 +1,50 @@
+tvm\_tirx.tirx.TileLayout
+=========================
+
+.. currentmodule:: tvm_tirx.tirx
+
+.. autoclass:: TileLayout
+
+   
+   .. automethod:: __init__
+
+   
+   .. rubric:: Methods
+
+   .. autosummary::
+   
+      ~TileLayout.__init__
+      ~TileLayout.apply
+      ~TileLayout.canonicalize
+      ~TileLayout.from_iters
+      ~TileLayout.get_scope
+      ~TileLayout.group
+      ~TileLayout.is_
+      ~TileLayout.is_trivial
+      ~TileLayout.pack
+      ~TileLayout.permute_by_groups
+      ~TileLayout.permute_dims
+      ~TileLayout.same_as
+      ~TileLayout.size
+      ~TileLayout.span
+      ~TileLayout.tile
+      ~TileLayout.tile_to
+      ~TileLayout.unpack
+      ~TileLayout.verify_well_formed
+   
+   
+
+   
+   
+   .. rubric:: Attributes
+
+   .. autosummary::
+   
+      ~TileLayout.id_
+      ~TileLayout.offset
+      ~TileLayout.replica
+      ~TileLayout.shard
+      ~TileLayout.replicate
+      ~TileLayout.exclude
+   
+   
\ No newline at end of file
diff --git a/tirx/_sources/reference/python/generated/tvm_tirx.tirx.Var.rst b/tirx/_sources/reference/python/generated/tvm_tirx.tirx.Var.rst
new file mode 100644
index 00000000000..bde5a7129df
--- /dev/null
+++ b/tirx/_sources/reference/python/generated/tvm_tirx.tirx.Var.rst
@@ -0,0 +1,38 @@
+tvm\_tirx.tirx.Var
+==================
+
+.. currentmodule:: tvm_tirx.tirx
+
+.. autoclass:: Var
+
+   
+   .. automethod:: __init__
+
+   
+   .. rubric:: Methods
+
+   .. autosummary::
+   
+      ~Var.__init__
+      ~Var.astype
+      ~Var.equal
+      ~Var.expr_ty
+      ~Var.is_
+      ~Var.same_as
+      ~Var.script
+      ~Var.show
+   
+   
+
+   
+   
+   .. rubric:: Attributes
+
+   .. autosummary::
+   
+      ~Var.id_
+      ~Var.loc
+      ~Var.name
+      ~Var.ty
+   
+   
\ No newline at end of file
diff --git a/tirx/_sources/reference/python/generated/tvm_tirx.tirx.compile.rst b/tirx/_sources/reference/python/generated/tvm_tirx.tirx.compile.rst
new file mode 100644
index 00000000000..3b6ecdc16f4
--- /dev/null
+++ b/tirx/_sources/reference/python/generated/tvm_tirx.tirx.compile.rst
@@ -0,0 +1,6 @@
+tvm\_tirx.tirx.compile
+======================
+
+.. currentmodule:: tvm_tirx.tirx
+
+.. autofunction:: compile
\ No newline at end of file
diff --git a/tirx/_sources/reference/python/generated/tvm_tirx.tirx.decl_tensor.rst b/tirx/_sources/reference/python/generated/tvm_tirx.tirx.decl_tensor.rst
new file mode 100644
index 00000000000..6f6cb795b52
--- /dev/null
+++ b/tirx/_sources/reference/python/generated/tvm_tirx.tirx.decl_tensor.rst
@@ -0,0 +1,6 @@
+tvm\_tirx.tirx.decl\_tensor
+===========================
+
+.. currentmodule:: tvm_tirx.tirx
+
+.. autofunction:: decl_tensor
\ No newline at end of file
diff --git a/tirx/_sources/reference/python/index.rst b/tirx/_sources/reference/python/index.rst
new file mode 100644
index 00000000000..6c5442af574
--- /dev/null
+++ b/tirx/_sources/reference/python/index.rst
@@ -0,0 +1,78 @@
+..  Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+..    http://www.apache.org/licenses/LICENSE-2.0
+
+..  Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+Python API
+==========
+
+.. automodule:: tvm_tirx
+   :no-members:
+
+.. currentmodule:: tvm_tirx
+
+.. contents:: Table of Contents
+   :local:
+   :depth: 2
+
+IR
+--
+
+.. autosummary::
+   :toctree: generated/
+
+   ir.IRModule
+   ir.Expr
+   ir.Stmt
+
+TIRx
+----
+
+.. autosummary::
+   :toctree: generated/
+
+   tirx.Function
+   tirx.Var
+   tirx.TensorType
+   tirx.decl_tensor
+   tirx.IndexMap
+   tirx.Layout
+   tirx.TileLayout
+   tirx.compile
+
+Target
+------
+
+.. autosummary::
+   :toctree: generated/
+
+   target.Target
+
+Runtime
+-------
+
+.. autosummary::
+   :toctree: generated/
+
+   runtime.Tensor
+   runtime.Module
+
+Code Generation
+---------------
+
+.. autosummary::
+   :toctree: generated/
+
+   codegen.Executable
diff --git a/tirx/_static/base-stemmer.js b/tirx/_static/base-stemmer.js
new file mode 100644
index 00000000000..e6fa0c49260
--- /dev/null
+++ b/tirx/_static/base-stemmer.js
@@ -0,0 +1,476 @@
+// @ts-check
+
+/**@constructor*/
+BaseStemmer = function() {
+    /** @protected */
+    this.current = '';
+    this.cursor = 0;
+    this.limit = 0;
+    this.limit_backward = 0;
+    this.bra = 0;
+    this.ket = 0;
+
+    /**
+     * @param {string} value
+     */
+    this.setCurrent = function(value) {
+        this.current = value;
+        this.cursor = 0;
+        this.limit = this.current.length;
+        this.limit_backward = 0;
+        this.bra = this.cursor;
+        this.ket = this.limit;
+    };
+
+    /**
+     * @return {string}
+     */
+    this.getCurrent = function() {
+        return this.current;
+    };
+
+    /**
+     * @param {BaseStemmer} other
+     */
+    this.copy_from = function(other) {
+        /** @protected */
+        this.current          = other.current;
+        this.cursor           = other.cursor;
+        this.limit            = other.limit;
+        this.limit_backward   = other.limit_backward;
+        this.bra              = other.bra;
+        this.ket              = other.ket;
+    };
+
+    /**
+     * @param {number[]} s
+     * @param {number} min
+     * @param {number} max
+     * @return {boolean}
+     */
+    this.in_grouping = function(s, min, max) {
+        /** @protected */
+        if (this.cursor >= this.limit) return false;
+        var ch = this.current.charCodeAt(this.cursor);
+        if (ch > max || ch < min) return false;
+        ch -= min;
+        if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false;
+        this.cursor++;
+        return true;
+    };
+
+    /**
+     * @param {number[]} s
+     * @param {number} min
+     * @param {number} max
+     * @return {boolean}
+     */
+    this.go_in_grouping = function(s, min, max) {
+        /** @protected */
+        while (this.cursor < this.limit) {
+            var ch = this.current.charCodeAt(this.cursor);
+            if (ch > max || ch < min)
+                return true;
+            ch -= min;
+            if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0)
+                return true;
+            this.cursor++;
+        }
+        return false;
+    };
+
+    /**
+     * @param {number[]} s
+     * @param {number} min
+     * @param {number} max
+     * @return {boolean}
+     */
+    this.in_grouping_b = function(s, min, max) {
+        /** @protected */
+        if (this.cursor <= this.limit_backward) return false;
+        var ch = this.current.charCodeAt(this.cursor - 1);
+        if (ch > max || ch < min) return false;
+        ch -= min;
+        if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false;
+        this.cursor--;
+        return true;
+    };
+
+    /**
+     * @param {number[]} s
+     * @param {number} min
+     * @param {number} max
+     * @return {boolean}
+     */
+    this.go_in_grouping_b = function(s, min, max) {
+        /** @protected */
+        while (this.cursor > this.limit_backward) {
+            var ch = this.current.charCodeAt(this.cursor - 1);
+            if (ch > max || ch < min) return true;
+            ch -= min;
+            if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return true;
+            this.cursor--;
+        }
+        return false;
+    };
+
+    /**
+     * @param {number[]} s
+     * @param {number} min
+     * @param {number} max
+     * @return {boolean}
+     */
+    this.out_grouping = function(s, min, max) {
+        /** @protected */
+        if (this.cursor >= this.limit) return false;
+        var ch = this.current.charCodeAt(this.cursor);
+        if (ch > max || ch < min) {
+            this.cursor++;
+            return true;
+        }
+        ch -= min;
+        if ((s[ch >>> 3] & (0X1 << (ch & 0x7))) == 0) {
+            this.cursor++;
+            return true;
+        }
+        return false;
+    };
+
+    /**
+     * @param {number[]} s
+     * @param {number} min
+     * @param {number} max
+     * @return {boolean}
+     */
+    this.go_out_grouping = function(s, min, max) {
+        /** @protected */
+        while (this.cursor < this.limit) {
+            var ch = this.current.charCodeAt(this.cursor);
+            if (ch <= max && ch >= min) {
+                ch -= min;
+                if ((s[ch >>> 3] & (0X1 << (ch & 0x7))) != 0) {
+                    return true;
+                }
+            }
+            this.cursor++;
+        }
+        return false;
+    };
+
+    /**
+     * @param {number[]} s
+     * @param {number} min
+     * @param {number} max
+     * @return {boolean}
+     */
+    this.out_grouping_b = function(s, min, max) {
+        /** @protected */
+        if (this.cursor <= this.limit_backward) return false;
+        var ch = this.current.charCodeAt(this.cursor - 1);
+        if (ch > max || ch < min) {
+            this.cursor--;
+            return true;
+        }
+        ch -= min;
+        if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) {
+            this.cursor--;
+            return true;
+        }
+        return false;
+    };
+
+    /**
+     * @param {number[]} s
+     * @param {number} min
+     * @param {number} max
+     * @return {boolean}
+     */
+    this.go_out_grouping_b = function(s, min, max) {
+        /** @protected */
+        while (this.cursor > this.limit_backward) {
+            var ch = this.current.charCodeAt(this.cursor - 1);
+            if (ch <= max && ch >= min) {
+                ch -= min;
+                if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) != 0) {
+                    return true;
+                }
+            }
+            this.cursor--;
+        }
+        return false;
+    };
+
+    /**
+     * @param {string} s
+     * @return {boolean}
+     */
+    this.eq_s = function(s)
+    {
+        /** @protected */
+        if (this.limit - this.cursor < s.length) return false;
+        if (this.current.slice(this.cursor, this.cursor + s.length) != s)
+        {
+            return false;
+        }
+        this.cursor += s.length;
+        return true;
+    };
+
+    /**
+     * @param {string} s
+     * @return {boolean}
+     */
+    this.eq_s_b = function(s)
+    {
+        /** @protected */
+        if (this.cursor - this.limit_backward < s.length) return false;
+        if (this.current.slice(this.cursor - s.length, this.cursor) != s)
+        {
+            return false;
+        }
+        this.cursor -= s.length;
+        return true;
+    };
+
+    /**
+     * @param {Among[]} v
+     * @return {number}
+     */
+    this.find_among = function(v)
+    {
+        /** @protected */
+        var i = 0;
+        var j = v.length;
+
+        var c = this.cursor;
+        var l = this.limit;
+
+        var common_i = 0;
+        var common_j = 0;
+
+        var first_key_inspected = false;
+
+        while (true)
+        {
+            var k = i + ((j - i) >>> 1);
+            var diff = 0;
+            var common = common_i < common_j ? common_i : common_j; // smaller
+            // w[0]: string, w[1]: substring_i, w[2]: result, w[3]: function (optional)
+            var w = v[k];
+            var i2;
+            for (i2 = common; i2 < w[0].length; i2++)
+            {
+                if (c + common == l)
+                {
+                    diff = -1;
+                    break;
+                }
+                diff = this.current.charCodeAt(c + common) - w[0].charCodeAt(i2);
+                if (diff != 0) break;
+                common++;
+            }
+            if (diff < 0)
+            {
+                j = k;
+                common_j = common;
+            }
+            else
+            {
+                i = k;
+                common_i = common;
+            }
+            if (j - i <= 1)
+            {
+                if (i > 0) break; // v->s has been inspected
+                if (j == i) break; // only one item in v
+
+                // - but now we need to go round once more to get
+                // v->s inspected. This looks messy, but is actually
+                // the optimal approach.
+
+                if (first_key_inspected) break;
+                first_key_inspected = true;
+            }
+        }
+        do {
+            var w = v[i];
+            if (common_i >= w[0].length)
+            {
+                this.cursor = c + w[0].length;
+                if (w.length < 4) return w[2];
+                var res = w[3](this);
+                this.cursor = c + w[0].length;
+                if (res) return w[2];
+            }
+            i = w[1];
+        } while (i >= 0);
+        return 0;
+    };
+
+    // find_among_b is for backwards processing. Same comments apply
+    /**
+     * @param {Among[]} v
+     * @return {number}
+     */
+    this.find_among_b = function(v)
+    {
+        /** @protected */
+        var i = 0;
+        var j = v.length
+
+        var c = this.cursor;
+        var lb = this.limit_backward;
+
+        var common_i = 0;
+        var common_j = 0;
+
+        var first_key_inspected = false;
+
+        while (true)
+        {
+            var k = i + ((j - i) >> 1);
+            var diff = 0;
+            var common = common_i < common_j ? common_i : common_j;
+            var w = v[k];
+            var i2;
+            for (i2 = w[0].length - 1 - common; i2 >= 0; i2--)
+            {
+                if (c - common == lb)
+                {
+                    diff = -1;
+                    break;
+                }
+                diff = this.current.charCodeAt(c - 1 - common) - w[0].charCodeAt(i2);
+                if (diff != 0) break;
+                common++;
+            }
+            if (diff < 0)
+            {
+                j = k;
+                common_j = common;
+            }
+            else
+            {
+                i = k;
+                common_i = common;
+            }
+            if (j - i <= 1)
+            {
+                if (i > 0) break;
+                if (j == i) break;
+                if (first_key_inspected) break;
+                first_key_inspected = true;
+            }
+        }
+        do {
+            var w = v[i];
+            if (common_i >= w[0].length)
+            {
+                this.cursor = c - w[0].length;
+                if (w.length < 4) return w[2];
+                var res = w[3](this);
+                this.cursor = c - w[0].length;
+                if (res) return w[2];
+            }
+            i = w[1];
+        } while (i >= 0);
+        return 0;
+    };
+
+    /* to replace chars between c_bra and c_ket in this.current by the
+     * chars in s.
+     */
+    /**
+     * @param {number} c_bra
+     * @param {number} c_ket
+     * @param {string} s
+     * @return {number}
+     */
+    this.replace_s = function(c_bra, c_ket, s)
+    {
+        /** @protected */
+        var adjustment = s.length - (c_ket - c_bra);
+        this.current = this.current.slice(0, c_bra) + s + this.current.slice(c_ket);
+        this.limit += adjustment;
+        if (this.cursor >= c_ket) this.cursor += adjustment;
+        else if (this.cursor > c_bra) this.cursor = c_bra;
+        return adjustment;
+    };
+
+    /**
+     * @return {boolean}
+     */
+    this.slice_check = function()
+    {
+        /** @protected */
+        if (this.bra < 0 ||
+            this.bra > this.ket ||
+            this.ket > this.limit ||
+            this.limit > this.current.length)
+        {
+            return false;
+        }
+        return true;
+    };
+
+    /**
+     * @param {number} c_bra
+     * @return {boolean}
+     */
+    this.slice_from = function(s)
+    {
+        /** @protected */
+        var result = false;
+        if (this.slice_check())
+        {
+            this.replace_s(this.bra, this.ket, s);
+            result = true;
+        }
+        return result;
+    };
+
+    /**
+     * @return {boolean}
+     */
+    this.slice_del = function()
+    {
+        /** @protected */
+        return this.slice_from("");
+    };
+
+    /**
+     * @param {number} c_bra
+     * @param {number} c_ket
+     * @param {string} s
+     */
+    this.insert = function(c_bra, c_ket, s)
+    {
+        /** @protected */
+        var adjustment = this.replace_s(c_bra, c_ket, s);
+        if (c_bra <= this.bra) this.bra += adjustment;
+        if (c_bra <= this.ket) this.ket += adjustment;
+    };
+
+    /**
+     * @return {string}
+     */
+    this.slice_to = function()
+    {
+        /** @protected */
+        var result = '';
+        if (this.slice_check())
+        {
+            result = this.current.slice(this.bra, this.ket);
+        }
+        return result;
+    };
+
+    /**
+     * @return {string}
+     */
+    this.assign_to = function()
+    {
+        /** @protected */
+        return this.current.slice(0, this.limit);
+    };
+};
diff --git a/tirx/_static/basic.css b/tirx/_static/basic.css
new file mode 100644
index 00000000000..4738b2edc4c
--- /dev/null
+++ b/tirx/_static/basic.css
@@ -0,0 +1,906 @@
+/*
+ * Sphinx stylesheet -- basic theme.
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+    clear: both;
+}
+
+div.section::after {
+    display: block;
+    content: '';
+    clear: left;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+    width: 100%;
+    font-size: 90%;
+}
+
+div.related h3 {
+    display: none;
+}
+
+div.related ul {
+    margin: 0;
+    padding: 0 0 0 10px;
+    list-style: none;
+}
+
+div.related li {
+    display: inline;
+}
+
+div.related li.right {
+    float: right;
+    margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+    padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+    float: left;
+    width: 230px;
+    margin-left: -100%;
+    font-size: 90%;
+    word-wrap: break-word;
+    overflow-wrap : break-word;
+}
+
+div.sphinxsidebar ul {
+    list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+    margin-left: 20px;
+    list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+    margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #98dbcc;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox form.search {
+    overflow: hidden;
+}
+
+div.sphinxsidebar #searchbox input[type="text"] {
+    float: left;
+    width: 80%;
+    padding: 0.25em;
+    box-sizing: border-box;
+}
+
+div.sphinxsidebar #searchbox input[type="submit"] {
+    float: left;
+    width: 20%;
+    border-left: none;
+    padding: 0.25em;
+    box-sizing: border-box;
+}
+
+
+img {
+    border: 0;
+    max-width: 100%;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+    margin-top: 10px;
+}
+
+ul.search li {
+    padding: 5px 0;
+}
+
+ul.search li a {
+    font-weight: bold;
+}
+
+ul.search li p.context {
+    color: #888;
+    margin: 2px 0 0 30px;
+    text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+    font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+    width: 90%;
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table.contentstable p.biglink {
+    line-height: 150%;
+}
+
+a.biglink {
+    font-size: 1.3em;
+}
+
+span.linkdescr {
+    font-style: italic;
+    padding-top: 5px;
+    font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable {
+    width: 100%;
+}
+
+table.indextable td {
+    text-align: left;
+    vertical-align: top;
+}
+
+table.indextable ul {
+    margin-top: 0;
+    margin-bottom: 0;
+    list-style-type: none;
+}
+
+table.indextable > tbody > tr > td > ul {
+    padding-left: 0em;
+}
+
+table.indextable tr.pcap {
+    height: 10px;
+}
+
+table.indextable tr.cap {
+    margin-top: 10px;
+    background-color: #f2f2f2;
+}
+
+img.toggler {
+    margin-right: 3px;
+    margin-top: 3px;
+    cursor: pointer;
+}
+
+div.modindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+div.genindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+/* -- domain module index --------------------------------------------------- */
+
+table.modindextable td {
+    padding: 2px;
+    border-collapse: collapse;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+div.body {
+    min-width: 360px;
+    max-width: 800px;
+}
+
+div.body p, div.body dd, div.body li, div.body blockquote {
+    -moz-hyphens: auto;
+    -ms-hyphens: auto;
+    -webkit-hyphens: auto;
+    hyphens: auto;
+}
+
+a.headerlink {
+    visibility: hidden;
+}
+
+a:visited {
+    color: #551A8B;
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink,
+caption:hover > a.headerlink,
+p.caption:hover > a.headerlink,
+div.code-block-caption:hover > a.headerlink {
+    visibility: visible;
+}
+
+div.body p.caption {
+    text-align: inherit;
+}
+
+div.body td {
+    text-align: left;
+}
+
+.first {
+    margin-top: 0 !important;
+}
+
+p.rubric {
+    margin-top: 30px;
+    font-weight: bold;
+}
+
+img.align-left, figure.align-left, .figure.align-left, object.align-left {
+    clear: left;
+    float: left;
+    margin-right: 1em;
+}
+
+img.align-right, figure.align-right, .figure.align-right, object.align-right {
+    clear: right;
+    float: right;
+    margin-left: 1em;
+}
+
+img.align-center, figure.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+img.align-default, figure.align-default, .figure.align-default {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+    text-align: left;
+}
+
+.align-center {
+    text-align: center;
+}
+
+.align-default {
+    text-align: center;
+}
+
+.align-right {
+    text-align: right;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar,
+aside.sidebar {
+    margin: 0 0 0.5em 1em;
+    border: 1px solid #ddb;
+    padding: 7px;
+    background-color: #ffe;
+    width: 40%;
+    float: right;
+    clear: right;
+    overflow-x: auto;
+}
+
+p.sidebar-title {
+    font-weight: bold;
+}
+
+nav.contents,
+aside.topic,
+div.admonition, div.topic, blockquote {
+    clear: left;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+nav.contents,
+aside.topic,
+div.topic {
+    border: 1px solid #ccc;
+    padding: 7px;
+    margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+    font-size: 1.1em;
+    font-weight: bold;
+    margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    padding: 7px;
+}
+
+div.admonition dt {
+    font-weight: bold;
+}
+
+p.admonition-title {
+    margin: 0px 10px 5px 0px;
+    font-weight: bold;
+}
+
+div.body p.centered {
+    text-align: center;
+    margin-top: 25px;
+}
+
+/* -- content of sidebars/topics/admonitions -------------------------------- */
+
+div.sidebar > :last-child,
+aside.sidebar > :last-child,
+nav.contents > :last-child,
+aside.topic > :last-child,
+div.topic > :last-child,
+div.admonition > :last-child {
+    margin-bottom: 0;
+}
+
+div.sidebar::after,
+aside.sidebar::after,
+nav.contents::after,
+aside.topic::after,
+div.topic::after,
+div.admonition::after,
+blockquote::after {
+    display: block;
+    content: '';
+    clear: both;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    border: 0;
+    border-collapse: collapse;
+}
+
+table.align-center {
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table.align-default {
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table caption span.caption-number {
+    font-style: italic;
+}
+
+table caption span.caption-text {
+}
+
+table.docutils td, table.docutils th {
+    padding: 1px 8px 1px 5px;
+    border-top: 0;
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 1px solid #aaa;
+}
+
+th {
+    text-align: left;
+    padding-right: 5px;
+}
+
+table.citation {
+    border-left: solid 1px gray;
+    margin-left: 1px;
+}
+
+table.citation td {
+    border-bottom: none;
+}
+
+th > :first-child,
+td > :first-child {
+    margin-top: 0px;
+}
+
+th > :last-child,
+td > :last-child {
+    margin-bottom: 0px;
+}
+
+/* -- figures --------------------------------------------------------------- */
+
+div.figure, figure {
+    margin: 0.5em;
+    padding: 0.5em;
+}
+
+div.figure p.caption, figcaption {
+    padding: 0.3em;
+}
+
+div.figure p.caption span.caption-number,
+figcaption span.caption-number {
+    font-style: italic;
+}
+
+div.figure p.caption span.caption-text,
+figcaption span.caption-text {
+}
+
+/* -- field list styles ----------------------------------------------------- */
+
+table.field-list td, table.field-list th {
+    border: 0 !important;
+}
+
+.field-list ul {
+    margin: 0;
+    padding-left: 1em;
+}
+
+.field-list p {
+    margin: 0;
+}
+
+.field-name {
+    -moz-hyphens: manual;
+    -ms-hyphens: manual;
+    -webkit-hyphens: manual;
+    hyphens: manual;
+}
+
+/* -- hlist styles ---------------------------------------------------------- */
+
+table.hlist {
+    margin: 1em 0;
+}
+
+table.hlist td {
+    vertical-align: top;
+}
+
+/* -- object description styles --------------------------------------------- */
+
+.sig {
+	font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+}
+
+.sig-name, code.descname {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+.sig-name {
+	font-size: 1.1em;
+}
+
+code.descname {
+    font-size: 1.2em;
+}
+
+.sig-prename, code.descclassname {
+    background-color: transparent;
+}
+
+.optional {
+    font-size: 1.3em;
+}
+
+.sig-paren {
+    font-size: larger;
+}
+
+.sig-param.n {
+	font-style: italic;
+}
+
+/* C++ specific styling */
+
+.sig-inline.c-texpr,
+.sig-inline.cpp-texpr {
+	font-family: unset;
+}
+
+.sig.c   .k, .sig.c   .kt,
+.sig.cpp .k, .sig.cpp .kt {
+	color: #0033B3;
+}
+
+.sig.c   .m,
+.sig.cpp .m {
+	color: #1750EB;
+}
+
+.sig.c   .s, .sig.c   .sc,
+.sig.cpp .s, .sig.cpp .sc {
+	color: #067D17;
+}
+
+
+/* -- other body styles ----------------------------------------------------- */
+
+ol.arabic {
+    list-style: decimal;
+}
+
+ol.loweralpha {
+    list-style: lower-alpha;
+}
+
+ol.upperalpha {
+    list-style: upper-alpha;
+}
+
+ol.lowerroman {
+    list-style: lower-roman;
+}
+
+ol.upperroman {
+    list-style: upper-roman;
+}
+
+:not(li) > ol > li:first-child > :first-child,
+:not(li) > ul > li:first-child > :first-child {
+    margin-top: 0px;
+}
+
+:not(li) > ol > li:last-child > :last-child,
+:not(li) > ul > li:last-child > :last-child {
+    margin-bottom: 0px;
+}
+
+ol.simple ol p,
+ol.simple ul p,
+ul.simple ol p,
+ul.simple ul p {
+    margin-top: 0;
+}
+
+ol.simple > li:not(:first-child) > p,
+ul.simple > li:not(:first-child) > p {
+    margin-top: 0;
+}
+
+ol.simple p,
+ul.simple p {
+    margin-bottom: 0;
+}
+
+aside.footnote > span,
+div.citation > span {
+    float: left;
+}
+aside.footnote > span:last-of-type,
+div.citation > span:last-of-type {
+  padding-right: 0.5em;
+}
+aside.footnote > p {
+  margin-left: 2em;
+}
+div.citation > p {
+  margin-left: 4em;
+}
+aside.footnote > p:last-of-type,
+div.citation > p:last-of-type {
+    margin-bottom: 0em;
+}
+aside.footnote > p:last-of-type:after,
+div.citation > p:last-of-type:after {
+    content: "";
+    clear: both;
+}
+
+dl.field-list {
+    display: grid;
+    grid-template-columns: fit-content(30%) auto;
+}
+
+dl.field-list > dt {
+    font-weight: bold;
+    word-break: break-word;
+    padding-left: 0.5em;
+    padding-right: 5px;
+}
+
+dl.field-list > dd {
+    padding-left: 0.5em;
+    margin-top: 0em;
+    margin-left: 0em;
+    margin-bottom: 0em;
+}
+
+dl {
+    margin-bottom: 15px;
+}
+
+dd > :first-child {
+    margin-top: 0px;
+}
+
+dd ul, dd table {
+    margin-bottom: 10px;
+}
+
+dd {
+    margin-top: 3px;
+    margin-bottom: 10px;
+    margin-left: 30px;
+}
+
+.sig dd {
+    margin-top: 0px;
+    margin-bottom: 0px;
+}
+
+.sig dl {
+    margin-top: 0px;
+    margin-bottom: 0px;
+}
+
+dl > dd:last-child,
+dl > dd:last-child > :last-child {
+    margin-bottom: 0;
+}
+
+dt:target, span.highlighted {
+    background-color: #fbe54e;
+}
+
+rect.highlighted {
+    fill: #fbe54e;
+}
+
+dl.glossary dt {
+    font-weight: bold;
+    font-size: 1.1em;
+}
+
+.versionmodified {
+    font-style: italic;
+}
+
+.system-message {
+    background-color: #fda;
+    padding: 5px;
+    border: 3px solid red;
+}
+
+.footnote:target  {
+    background-color: #ffa;
+}
+
+.line-block {
+    display: block;
+    margin-top: 1em;
+    margin-bottom: 1em;
+}
+
+.line-block .line-block {
+    margin-top: 0;
+    margin-bottom: 0;
+    margin-left: 1.5em;
+}
+
+.guilabel, .menuselection {
+    font-family: sans-serif;
+}
+
+.accelerator {
+    text-decoration: underline;
+}
+
+.classifier {
+    font-style: oblique;
+}
+
+.classifier:before {
+    font-style: normal;
+    margin: 0 0.5em;
+    content: ":";
+    display: inline-block;
+}
+
+abbr, acronym {
+    border-bottom: dotted 1px;
+    cursor: help;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+    overflow: auto;
+    overflow-y: hidden;  /* fixes display issues on Chrome browsers */
+}
+
+pre, div[class*="highlight-"] {
+    clear: both;
+}
+
+span.pre {
+    -moz-hyphens: none;
+    -ms-hyphens: none;
+    -webkit-hyphens: none;
+    hyphens: none;
+    white-space: nowrap;
+}
+
+div[class*="highlight-"] {
+    margin: 1em 0;
+}
+
+td.linenos pre {
+    border: 0;
+    background-color: transparent;
+    color: #aaa;
+}
+
+table.highlighttable {
+    display: block;
+}
+
+table.highlighttable tbody {
+    display: block;
+}
+
+table.highlighttable tr {
+    display: flex;
+}
+
+table.highlighttable td {
+    margin: 0;
+    padding: 0;
+}
+
+table.highlighttable td.linenos {
+    padding-right: 0.5em;
+}
+
+table.highlighttable td.code {
+    flex: 1;
+    overflow: hidden;
+}
+
+.highlight .hll {
+    display: block;
+}
+
+div.highlight pre,
+table.highlighttable pre {
+    margin: 0;
+}
+
+div.code-block-caption + div {
+    margin-top: 0;
+}
+
+div.code-block-caption {
+    margin-top: 1em;
+    padding: 2px 5px;
+    font-size: small;
+}
+
+div.code-block-caption code {
+    background-color: transparent;
+}
+
+table.highlighttable td.linenos,
+span.linenos,
+div.highlight span.gp {  /* gp: Generic.Prompt */
+  user-select: none;
+  -webkit-user-select: text; /* Safari fallback only */
+  -webkit-user-select: none; /* Chrome/Safari */
+  -moz-user-select: none; /* Firefox */
+  -ms-user-select: none; /* IE10+ */
+}
+
+div.code-block-caption span.caption-number {
+    padding: 0.1em 0.3em;
+    font-style: italic;
+}
+
+div.code-block-caption span.caption-text {
+}
+
+div.literal-block-wrapper {
+    margin: 1em 0;
+}
+
+code.xref, a code {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
+    background-color: transparent;
+}
+
+.viewcode-link {
+    float: right;
+}
+
+.viewcode-back {
+    float: right;
+    font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+    margin: -1px -10px;
+    padding: 0 10px;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+    vertical-align: middle;
+}
+
+div.body div.math p {
+    text-align: center;
+}
+
+span.eqno {
+    float: right;
+}
+
+span.eqno a.headerlink {
+    position: absolute;
+    z-index: 1;
+}
+
+div.math:hover a.headerlink {
+    visibility: visible;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+    div.document,
+    div.documentwrapper,
+    div.bodywrapper {
+        margin: 0 !important;
+        width: 100%;
+    }
+
+    div.sphinxsidebar,
+    div.related,
+    div.footer,
+    #top-link {
+        display: none;
+    }
+}
\ No newline at end of file
diff --git a/tirx/_static/doctools.js b/tirx/_static/doctools.js
new file mode 100644
index 00000000000..807cdb176c0
--- /dev/null
+++ b/tirx/_static/doctools.js
@@ -0,0 +1,150 @@
+/*
+ * Base JavaScript utilities for all Sphinx HTML documentation.
+ */
+"use strict";
+
+const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
+  "TEXTAREA",
+  "INPUT",
+  "SELECT",
+  "BUTTON",
+]);
+
+const _ready = (callback) => {
+  if (document.readyState !== "loading") {
+    callback();
+  } else {
+    document.addEventListener("DOMContentLoaded", callback);
+  }
+};
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+const Documentation = {
+  init: () => {
+    Documentation.initDomainIndexTable();
+    Documentation.initOnKeyListeners();
+  },
+
+  /**
+   * i18n support
+   */
+  TRANSLATIONS: {},
+  PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
+  LOCALE: "unknown",
+
+  // gettext and ngettext don't access this so that the functions
+  // can safely bound to a different name (_ = Documentation.gettext)
+  gettext: (string) => {
+    const translated = Documentation.TRANSLATIONS[string];
+    switch (typeof translated) {
+      case "undefined":
+        return string; // no translation
+      case "string":
+        return translated; // translation exists
+      default:
+        return translated[0]; // (singular, plural) translation tuple exists
+    }
+  },
+
+  ngettext: (singular, plural, n) => {
+    const translated = Documentation.TRANSLATIONS[singular];
+    if (typeof translated !== "undefined")
+      return translated[Documentation.PLURAL_EXPR(n)];
+    return n === 1 ? singular : plural;
+  },
+
+  addTranslations: (catalog) => {
+    Object.assign(Documentation.TRANSLATIONS, catalog.messages);
+    Documentation.PLURAL_EXPR = new Function(
+      "n",
+      `return (${catalog.plural_expr})`,
+    );
+    Documentation.LOCALE = catalog.locale;
+  },
+
+  /**
+   * helper function to focus on search bar
+   */
+  focusSearchBar: () => {
+    document.querySelectorAll("input[name=q]")[0]?.focus();
+  },
+
+  /**
+   * Initialise the domain index toggle buttons
+   */
+  initDomainIndexTable: () => {
+    const toggler = (el) => {
+      const idNumber = el.id.substr(7);
+      const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
+      if (el.src.substr(-9) === "minus.png") {
+        el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
+        toggledRows.forEach((el) => (el.style.display = "none"));
+      } else {
+        el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
+        toggledRows.forEach((el) => (el.style.display = ""));
+      }
+    };
+
+    const togglerElements = document.querySelectorAll("img.toggler");
+    togglerElements.forEach((el) =>
+      el.addEventListener("click", (event) => toggler(event.currentTarget)),
+    );
+    togglerElements.forEach((el) => (el.style.display = ""));
+    if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
+  },
+
+  initOnKeyListeners: () => {
+    // only install a listener if it is really needed
+    if (
+      !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS
+      && !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
+    )
+      return;
+
+    document.addEventListener("keydown", (event) => {
+      // bail for input elements
+      if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName))
+        return;
+      // bail with special keys
+      if (event.altKey || event.ctrlKey || event.metaKey) return;
+
+      if (!event.shiftKey) {
+        switch (event.key) {
+          case "ArrowLeft":
+            if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
+
+            const prevLink = document.querySelector('link[rel="prev"]');
+            if (prevLink && prevLink.href) {
+              window.location.href = prevLink.href;
+              event.preventDefault();
+            }
+            break;
+          case "ArrowRight":
+            if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
+
+            const nextLink = document.querySelector('link[rel="next"]');
+            if (nextLink && nextLink.href) {
+              window.location.href = nextLink.href;
+              event.preventDefault();
+            }
+            break;
+        }
+      }
+
+      // some keyboard layouts may need Shift to get /
+      switch (event.key) {
+        case "/":
+          if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
+          Documentation.focusSearchBar();
+          event.preventDefault();
+      }
+    });
+  },
+};
+
+// quick alias for translations
+const _ = Documentation.gettext;
+
+_ready(Documentation.init);
diff --git a/tirx/_static/documentation_options.js b/tirx/_static/documentation_options.js
new file mode 100644
index 00000000000..dab586c0d27
--- /dev/null
+++ b/tirx/_static/documentation_options.js
@@ -0,0 +1,13 @@
+const DOCUMENTATION_OPTIONS = {
+    VERSION: '',
+    LANGUAGE: 'en',
+    COLLAPSE_INDEX: false,
+    BUILDER: 'html',
+    FILE_SUFFIX: '.html',
+    LINK_SUFFIX: '.html',
+    HAS_SOURCE: true,
+    SOURCELINK_SUFFIX: '',
+    NAVIGATION_WITH_KEYS: false,
+    SHOW_SEARCH_SUMMARY: true,
+    ENABLE_SEARCH_SHORTCUTS: true,
+};
\ No newline at end of file
diff --git a/tirx/_static/english-stemmer.js b/tirx/_static/english-stemmer.js
new file mode 100644
index 00000000000..056760ee8aa
--- /dev/null
+++ b/tirx/_static/english-stemmer.js
@@ -0,0 +1,1066 @@
+// Generated from english.sbl by Snowball 3.0.1 - https://snowballstem.org/
+
+/**@constructor*/
+var EnglishStemmer = function() {
+    var base = new BaseStemmer();
+
+    /** @const */ var a_0 = [
+        ["arsen", -1, -1],
+        ["commun", -1, -1],
+        ["emerg", -1, -1],
+        ["gener", -1, -1],
+        ["later", -1, -1],
+        ["organ", -1, -1],
+        ["past", -1, -1],
+        ["univers", -1, -1]
+    ];
+
+    /** @const */ var a_1 = [
+        ["'", -1, 1],
+        ["'s'", 0, 1],
+        ["'s", -1, 1]
+    ];
+
+    /** @const */ var a_2 = [
+        ["ied", -1, 2],
+        ["s", -1, 3],
+        ["ies", 1, 2],
+        ["sses", 1, 1],
+        ["ss", 1, -1],
+        ["us", 1, -1]
+    ];
+
+    /** @const */ var a_3 = [
+        ["succ", -1, 1],
+        ["proc", -1, 1],
+        ["exc", -1, 1]
+    ];
+
+    /** @const */ var a_4 = [
+        ["even", -1, 2],
+        ["cann", -1, 2],
+        ["inn", -1, 2],
+        ["earr", -1, 2],
+        ["herr", -1, 2],
+        ["out", -1, 2],
+        ["y", -1, 1]
+    ];
+
+    /** @const */ var a_5 = [
+        ["", -1, -1],
+        ["ed", 0, 2],
+        ["eed", 1, 1],
+        ["ing", 0, 3],
+        ["edly", 0, 2],
+        ["eedly", 4, 1],
+        ["ingly", 0, 2]
+    ];
+
+    /** @const */ var a_6 = [
+        ["", -1, 3],
+        ["bb", 0, 2],
+        ["dd", 0, 2],
+        ["ff", 0, 2],
+        ["gg", 0, 2],
+        ["bl", 0, 1],
+        ["mm", 0, 2],
+        ["nn", 0, 2],
+        ["pp", 0, 2],
+        ["rr", 0, 2],
+        ["at", 0, 1],
+        ["tt", 0, 2],
+        ["iz", 0, 1]
+    ];
+
+    /** @const */ var a_7 = [
+        ["anci", -1, 3],
+        ["enci", -1, 2],
+        ["ogi", -1, 14],
+        ["li", -1, 16],
+        ["bli", 3, 12],
+        ["abli", 4, 4],
+        ["alli", 3, 8],
+        ["fulli", 3, 9],
+        ["lessli", 3, 15],
+        ["ousli", 3, 10],
+        ["entli", 3, 5],
+        ["aliti", -1, 8],
+        ["biliti", -1, 12],
+        ["iviti", -1, 11],
+        ["tional", -1, 1],
+        ["ational", 14, 7],
+        ["alism", -1, 8],
+        ["ation", -1, 7],
+        ["ization", 17, 6],
+        ["izer", -1, 6],
+        ["ator", -1, 7],
+        ["iveness", -1, 11],
+        ["fulness", -1, 9],
+        ["ousness", -1, 10],
+        ["ogist", -1, 13]
+    ];
+
+    /** @const */ var a_8 = [
+        ["icate", -1, 4],
+        ["ative", -1, 6],
+        ["alize", -1, 3],
+        ["iciti", -1, 4],
+        ["ical", -1, 4],
+        ["tional", -1, 1],
+        ["ational", 5, 2],
+        ["ful", -1, 5],
+        ["ness", -1, 5]
+    ];
+
+    /** @const */ var a_9 = [
+        ["ic", -1, 1],
+        ["ance", -1, 1],
+        ["ence", -1, 1],
+        ["able", -1, 1],
+        ["ible", -1, 1],
+        ["ate", -1, 1],
+        ["ive", -1, 1],
+        ["ize", -1, 1],
+        ["iti", -1, 1],
+        ["al", -1, 1],
+        ["ism", -1, 1],
+        ["ion", -1, 2],
+        ["er", -1, 1],
+        ["ous", -1, 1],
+        ["ant", -1, 1],
+        ["ent", -1, 1],
+        ["ment", 15, 1],
+        ["ement", 16, 1]
+    ];
+
+    /** @const */ var a_10 = [
+        ["e", -1, 1],
+        ["l", -1, 2]
+    ];
+
+    /** @const */ var a_11 = [
+        ["andes", -1, -1],
+        ["atlas", -1, -1],
+        ["bias", -1, -1],
+        ["cosmos", -1, -1],
+        ["early", -1, 5],
+        ["gently", -1, 3],
+        ["howe", -1, -1],
+        ["idly", -1, 2],
+        ["news", -1, -1],
+        ["only", -1, 6],
+        ["singly", -1, 7],
+        ["skies", -1, 1],
+        ["sky", -1, -1],
+        ["ugly", -1, 4]
+    ];
+
+    /** @const */ var /** Array<int> */ g_aeo = [17, 64];
+
+    /** @const */ var /** Array<int> */ g_v = [17, 65, 16, 1];
+
+    /** @const */ var /** Array<int> */ g_v_WXY = [1, 17, 65, 208, 1];
+
+    /** @const */ var /** Array<int> */ g_valid_LI = [55, 141, 2];
+
+    var /** boolean */ B_Y_found = false;
+    var /** number */ I_p2 = 0;
+    var /** number */ I_p1 = 0;
+
+
+    /** @return {boolean} */
+    function r_prelude() {
+        B_Y_found = false;
+        /** @const */ var /** number */ v_1 = base.cursor;
+        lab0: {
+            base.bra = base.cursor;
+            if (!(base.eq_s("'")))
+            {
+                break lab0;
+            }
+            base.ket = base.cursor;
+            if (!base.slice_del())
+            {
+                return false;
+            }
+        }
+        base.cursor = v_1;
+        /** @const */ var /** number */ v_2 = base.cursor;
+        lab1: {
+            base.bra = base.cursor;
+            if (!(base.eq_s("y")))
+            {
+                break lab1;
+            }
+            base.ket = base.cursor;
+            if (!base.slice_from("Y"))
+            {
+                return false;
+            }
+            B_Y_found = true;
+        }
+        base.cursor = v_2;
+        /** @const */ var /** number */ v_3 = base.cursor;
+        lab2: {
+            while(true)
+            {
+                /** @const */ var /** number */ v_4 = base.cursor;
+                lab3: {
+                    golab4: while(true)
+                    {
+                        /** @const */ var /** number */ v_5 = base.cursor;
+                        lab5: {
+                            if (!(base.in_grouping(g_v, 97, 121)))
+                            {
+                                break lab5;
+                            }
+                            base.bra = base.cursor;
+                            if (!(base.eq_s("y")))
+                            {
+                                break lab5;
+                            }
+                            base.ket = base.cursor;
+                            base.cursor = v_5;
+                            break golab4;
+                        }
+                        base.cursor = v_5;
+                        if (base.cursor >= base.limit)
+                        {
+                            break lab3;
+                        }
+                        base.cursor++;
+                    }
+                    if (!base.slice_from("Y"))
+                    {
+                        return false;
+                    }
+                    B_Y_found = true;
+                    continue;
+                }
+                base.cursor = v_4;
+                break;
+            }
+        }
+        base.cursor = v_3;
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_mark_regions() {
+        I_p1 = base.limit;
+        I_p2 = base.limit;
+        /** @const */ var /** number */ v_1 = base.cursor;
+        lab0: {
+            lab1: {
+                /** @const */ var /** number */ v_2 = base.cursor;
+                lab2: {
+                    if (base.find_among(a_0) == 0)
+                    {
+                        break lab2;
+                    }
+                    break lab1;
+                }
+                base.cursor = v_2;
+                if (!base.go_out_grouping(g_v, 97, 121))
+                {
+                    break lab0;
+                }
+                base.cursor++;
+                if (!base.go_in_grouping(g_v, 97, 121))
+                {
+                    break lab0;
+                }
+                base.cursor++;
+            }
+            I_p1 = base.cursor;
+            if (!base.go_out_grouping(g_v, 97, 121))
+            {
+                break lab0;
+            }
+            base.cursor++;
+            if (!base.go_in_grouping(g_v, 97, 121))
+            {
+                break lab0;
+            }
+            base.cursor++;
+            I_p2 = base.cursor;
+        }
+        base.cursor = v_1;
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_shortv() {
+        lab0: {
+            /** @const */ var /** number */ v_1 = base.limit - base.cursor;
+            lab1: {
+                if (!(base.out_grouping_b(g_v_WXY, 89, 121)))
+                {
+                    break lab1;
+                }
+                if (!(base.in_grouping_b(g_v, 97, 121)))
+                {
+                    break lab1;
+                }
+                if (!(base.out_grouping_b(g_v, 97, 121)))
+                {
+                    break lab1;
+                }
+                break lab0;
+            }
+            base.cursor = base.limit - v_1;
+            lab2: {
+                if (!(base.out_grouping_b(g_v, 97, 121)))
+                {
+                    break lab2;
+                }
+                if (!(base.in_grouping_b(g_v, 97, 121)))
+                {
+                    break lab2;
+                }
+                if (base.cursor > base.limit_backward)
+                {
+                    break lab2;
+                }
+                break lab0;
+            }
+            base.cursor = base.limit - v_1;
+            if (!(base.eq_s_b("past")))
+            {
+                return false;
+            }
+        }
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_R1() {
+        return I_p1 <= base.cursor;
+    };
+
+    /** @return {boolean} */
+    function r_R2() {
+        return I_p2 <= base.cursor;
+    };
+
+    /** @return {boolean} */
+    function r_Step_1a() {
+        var /** number */ among_var;
+        /** @const */ var /** number */ v_1 = base.limit - base.cursor;
+        lab0: {
+            base.ket = base.cursor;
+            if (base.find_among_b(a_1) == 0)
+            {
+                base.cursor = base.limit - v_1;
+                break lab0;
+            }
+            base.bra = base.cursor;
+            if (!base.slice_del())
+            {
+                return false;
+            }
+        }
+        base.ket = base.cursor;
+        among_var = base.find_among_b(a_2);
+        if (among_var == 0)
+        {
+            return false;
+        }
+        base.bra = base.cursor;
+        switch (among_var) {
+            case 1:
+                if (!base.slice_from("ss"))
+                {
+                    return false;
+                }
+                break;
+            case 2:
+                lab1: {
+                    /** @const */ var /** number */ v_2 = base.limit - base.cursor;
+                    lab2: {
+                        {
+                            /** @const */ var /** number */ c1 = base.cursor - 2;
+                            if (c1 < base.limit_backward)
+                            {
+                                break lab2;
+                            }
+                            base.cursor = c1;
+                        }
+                        if (!base.slice_from("i"))
+                        {
+                            return false;
+                        }
+                        break lab1;
+                    }
+                    base.cursor = base.limit - v_2;
+                    if (!base.slice_from("ie"))
+                    {
+                        return false;
+                    }
+                }
+                break;
+            case 3:
+                if (base.cursor <= base.limit_backward)
+                {
+                    return false;
+                }
+                base.cursor--;
+                if (!base.go_out_grouping_b(g_v, 97, 121))
+                {
+                    return false;
+                }
+                base.cursor--;
+                if (!base.slice_del())
+                {
+                    return false;
+                }
+                break;
+        }
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_Step_1b() {
+        var /** number */ among_var;
+        base.ket = base.cursor;
+        among_var = base.find_among_b(a_5);
+        base.bra = base.cursor;
+        lab0: {
+            /** @const */ var /** number */ v_1 = base.limit - base.cursor;
+            lab1: {
+                switch (among_var) {
+                    case 1:
+                        /** @const */ var /** number */ v_2 = base.limit - base.cursor;
+                        lab2: {
+                            lab3: {
+                                /** @const */ var /** number */ v_3 = base.limit - base.cursor;
+                                lab4: {
+                                    if (base.find_among_b(a_3) == 0)
+                                    {
+                                        break lab4;
+                                    }
+                                    if (base.cursor > base.limit_backward)
+                                    {
+                                        break lab4;
+                                    }
+                                    break lab3;
+                                }
+                                base.cursor = base.limit - v_3;
+                                if (!r_R1())
+                                {
+                                    break lab2;
+                                }
+                                if (!base.slice_from("ee"))
+                                {
+                                    return false;
+                                }
+                            }
+                        }
+                        base.cursor = base.limit - v_2;
+                        break;
+                    case 2:
+                        break lab1;
+                    case 3:
+                        among_var = base.find_among_b(a_4);
+                        if (among_var == 0)
+                        {
+                            break lab1;
+                        }
+                        switch (among_var) {
+                            case 1:
+                                /** @const */ var /** number */ v_4 = base.limit - base.cursor;
+                                if (!(base.out_grouping_b(g_v, 97, 121)))
+                                {
+                                    break lab1;
+                                }
+                                if (base.cursor > base.limit_backward)
+                                {
+                                    break lab1;
+                                }
+                                base.cursor = base.limit - v_4;
+                                base.bra = base.cursor;
+                                if (!base.slice_from("ie"))
+                                {
+                                    return false;
+                                }
+                                break;
+                            case 2:
+                                if (base.cursor > base.limit_backward)
+                                {
+                                    break lab1;
+                                }
+                                break;
+                        }
+                        break;
+                }
+                break lab0;
+            }
+            base.cursor = base.limit - v_1;
+            /** @const */ var /** number */ v_5 = base.limit - base.cursor;
+            if (!base.go_out_grouping_b(g_v, 97, 121))
+            {
+                return false;
+            }
+            base.cursor--;
+            base.cursor = base.limit - v_5;
+            if (!base.slice_del())
+            {
+                return false;
+            }
+            base.ket = base.cursor;
+            base.bra = base.cursor;
+            /** @const */ var /** number */ v_6 = base.limit - base.cursor;
+            among_var = base.find_among_b(a_6);
+            switch (among_var) {
+                case 1:
+                    if (!base.slice_from("e"))
+                    {
+                        return false;
+                    }
+                    return false;
+                case 2:
+                    {
+                        /** @const */ var /** number */ v_7 = base.limit - base.cursor;
+                        lab5: {
+                            if (!(base.in_grouping_b(g_aeo, 97, 111)))
+                            {
+                                break lab5;
+                            }
+                            if (base.cursor > base.limit_backward)
+                            {
+                                break lab5;
+                            }
+                            return false;
+                        }
+                        base.cursor = base.limit - v_7;
+                    }
+                    break;
+                case 3:
+                    if (base.cursor != I_p1)
+                    {
+                        return false;
+                    }
+                    /** @const */ var /** number */ v_8 = base.limit - base.cursor;
+                    if (!r_shortv())
+                    {
+                        return false;
+                    }
+                    base.cursor = base.limit - v_8;
+                    if (!base.slice_from("e"))
+                    {
+                        return false;
+                    }
+                    return false;
+            }
+            base.cursor = base.limit - v_6;
+            base.ket = base.cursor;
+            if (base.cursor <= base.limit_backward)
+            {
+                return false;
+            }
+            base.cursor--;
+            base.bra = base.cursor;
+            if (!base.slice_del())
+            {
+                return false;
+            }
+        }
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_Step_1c() {
+        base.ket = base.cursor;
+        lab0: {
+            /** @const */ var /** number */ v_1 = base.limit - base.cursor;
+            lab1: {
+                if (!(base.eq_s_b("y")))
+                {
+                    break lab1;
+                }
+                break lab0;
+            }
+            base.cursor = base.limit - v_1;
+            if (!(base.eq_s_b("Y")))
+            {
+                return false;
+            }
+        }
+        base.bra = base.cursor;
+        if (!(base.out_grouping_b(g_v, 97, 121)))
+        {
+            return false;
+        }
+        lab2: {
+            if (base.cursor > base.limit_backward)
+            {
+                break lab2;
+            }
+            return false;
+        }
+        if (!base.slice_from("i"))
+        {
+            return false;
+        }
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_Step_2() {
+        var /** number */ among_var;
+        base.ket = base.cursor;
+        among_var = base.find_among_b(a_7);
+        if (among_var == 0)
+        {
+            return false;
+        }
+        base.bra = base.cursor;
+        if (!r_R1())
+        {
+            return false;
+        }
+        switch (among_var) {
+            case 1:
+                if (!base.slice_from("tion"))
+                {
+                    return false;
+                }
+                break;
+            case 2:
+                if (!base.slice_from("ence"))
+                {
+                    return false;
+                }
+                break;
+            case 3:
+                if (!base.slice_from("ance"))
+                {
+                    return false;
+                }
+                break;
+            case 4:
+                if (!base.slice_from("able"))
+                {
+                    return false;
+                }
+                break;
+            case 5:
+                if (!base.slice_from("ent"))
+                {
+                    return false;
+                }
+                break;
+            case 6:
+                if (!base.slice_from("ize"))
+                {
+                    return false;
+                }
+                break;
+            case 7:
+                if (!base.slice_from("ate"))
+                {
+                    return false;
+                }
+                break;
+            case 8:
+                if (!base.slice_from("al"))
+                {
+                    return false;
+                }
+                break;
+            case 9:
+                if (!base.slice_from("ful"))
+                {
+                    return false;
+                }
+                break;
+            case 10:
+                if (!base.slice_from("ous"))
+                {
+                    return false;
+                }
+                break;
+            case 11:
+                if (!base.slice_from("ive"))
+                {
+                    return false;
+                }
+                break;
+            case 12:
+                if (!base.slice_from("ble"))
+                {
+                    return false;
+                }
+                break;
+            case 13:
+                if (!base.slice_from("og"))
+                {
+                    return false;
+                }
+                break;
+            case 14:
+                if (!(base.eq_s_b("l")))
+                {
+                    return false;
+                }
+                if (!base.slice_from("og"))
+                {
+                    return false;
+                }
+                break;
+            case 15:
+                if (!base.slice_from("less"))
+                {
+                    return false;
+                }
+                break;
+            case 16:
+                if (!(base.in_grouping_b(g_valid_LI, 99, 116)))
+                {
+                    return false;
+                }
+                if (!base.slice_del())
+                {
+                    return false;
+                }
+                break;
+        }
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_Step_3() {
+        var /** number */ among_var;
+        base.ket = base.cursor;
+        among_var = base.find_among_b(a_8);
+        if (among_var == 0)
+        {
+            return false;
+        }
+        base.bra = base.cursor;
+        if (!r_R1())
+        {
+            return false;
+        }
+        switch (among_var) {
+            case 1:
+                if (!base.slice_from("tion"))
+                {
+                    return false;
+                }
+                break;
+            case 2:
+                if (!base.slice_from("ate"))
+                {
+                    return false;
+                }
+                break;
+            case 3:
+                if (!base.slice_from("al"))
+                {
+                    return false;
+                }
+                break;
+            case 4:
+                if (!base.slice_from("ic"))
+                {
+                    return false;
+                }
+                break;
+            case 5:
+                if (!base.slice_del())
+                {
+                    return false;
+                }
+                break;
+            case 6:
+                if (!r_R2())
+                {
+                    return false;
+                }
+                if (!base.slice_del())
+                {
+                    return false;
+                }
+                break;
+        }
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_Step_4() {
+        var /** number */ among_var;
+        base.ket = base.cursor;
+        among_var = base.find_among_b(a_9);
+        if (among_var == 0)
+        {
+            return false;
+        }
+        base.bra = base.cursor;
+        if (!r_R2())
+        {
+            return false;
+        }
+        switch (among_var) {
+            case 1:
+                if (!base.slice_del())
+                {
+                    return false;
+                }
+                break;
+            case 2:
+                lab0: {
+                    /** @const */ var /** number */ v_1 = base.limit - base.cursor;
+                    lab1: {
+                        if (!(base.eq_s_b("s")))
+                        {
+                            break lab1;
+                        }
+                        break lab0;
+                    }
+                    base.cursor = base.limit - v_1;
+                    if (!(base.eq_s_b("t")))
+                    {
+                        return false;
+                    }
+                }
+                if (!base.slice_del())
+                {
+                    return false;
+                }
+                break;
+        }
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_Step_5() {
+        var /** number */ among_var;
+        base.ket = base.cursor;
+        among_var = base.find_among_b(a_10);
+        if (among_var == 0)
+        {
+            return false;
+        }
+        base.bra = base.cursor;
+        switch (among_var) {
+            case 1:
+                lab0: {
+                    lab1: {
+                        if (!r_R2())
+                        {
+                            break lab1;
+                        }
+                        break lab0;
+                    }
+                    if (!r_R1())
+                    {
+                        return false;
+                    }
+                    {
+                        /** @const */ var /** number */ v_1 = base.limit - base.cursor;
+                        lab2: {
+                            if (!r_shortv())
+                            {
+                                break lab2;
+                            }
+                            return false;
+                        }
+                        base.cursor = base.limit - v_1;
+                    }
+                }
+                if (!base.slice_del())
+                {
+                    return false;
+                }
+                break;
+            case 2:
+                if (!r_R2())
+                {
+                    return false;
+                }
+                if (!(base.eq_s_b("l")))
+                {
+                    return false;
+                }
+                if (!base.slice_del())
+                {
+                    return false;
+                }
+                break;
+        }
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_exception1() {
+        var /** number */ among_var;
+        base.bra = base.cursor;
+        among_var = base.find_among(a_11);
+        if (among_var == 0)
+        {
+            return false;
+        }
+        base.ket = base.cursor;
+        if (base.cursor < base.limit)
+        {
+            return false;
+        }
+        switch (among_var) {
+            case 1:
+                if (!base.slice_from("sky"))
+                {
+                    return false;
+                }
+                break;
+            case 2:
+                if (!base.slice_from("idl"))
+                {
+                    return false;
+                }
+                break;
+            case 3:
+                if (!base.slice_from("gentl"))
+                {
+                    return false;
+                }
+                break;
+            case 4:
+                if (!base.slice_from("ugli"))
+                {
+                    return false;
+                }
+                break;
+            case 5:
+                if (!base.slice_from("earli"))
+                {
+                    return false;
+                }
+                break;
+            case 6:
+                if (!base.slice_from("onli"))
+                {
+                    return false;
+                }
+                break;
+            case 7:
+                if (!base.slice_from("singl"))
+                {
+                    return false;
+                }
+                break;
+        }
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_postlude() {
+        if (!B_Y_found)
+        {
+            return false;
+        }
+        while(true)
+        {
+            /** @const */ var /** number */ v_1 = base.cursor;
+            lab0: {
+                golab1: while(true)
+                {
+                    /** @const */ var /** number */ v_2 = base.cursor;
+                    lab2: {
+                        base.bra = base.cursor;
+                        if (!(base.eq_s("Y")))
+                        {
+                            break lab2;
+                        }
+                        base.ket = base.cursor;
+                        base.cursor = v_2;
+                        break golab1;
+                    }
+                    base.cursor = v_2;
+                    if (base.cursor >= base.limit)
+                    {
+                        break lab0;
+                    }
+                    base.cursor++;
+                }
+                if (!base.slice_from("y"))
+                {
+                    return false;
+                }
+                continue;
+            }
+            base.cursor = v_1;
+            break;
+        }
+        return true;
+    };
+
+    this.stem = /** @return {boolean} */ function() {
+        lab0: {
+            /** @const */ var /** number */ v_1 = base.cursor;
+            lab1: {
+                if (!r_exception1())
+                {
+                    break lab1;
+                }
+                break lab0;
+            }
+            base.cursor = v_1;
+            lab2: {
+                {
+                    /** @const */ var /** number */ v_2 = base.cursor;
+                    lab3: {
+                        {
+                            /** @const */ var /** number */ c1 = base.cursor + 3;
+                            if (c1 > base.limit)
+                            {
+                                break lab3;
+                            }
+                            base.cursor = c1;
+                        }
+                        break lab2;
+                    }
+                    base.cursor = v_2;
+                }
+                break lab0;
+            }
+            base.cursor = v_1;
+            r_prelude();
+            r_mark_regions();
+            base.limit_backward = base.cursor; base.cursor = base.limit;
+            /** @const */ var /** number */ v_3 = base.limit - base.cursor;
+            r_Step_1a();
+            base.cursor = base.limit - v_3;
+            /** @const */ var /** number */ v_4 = base.limit - base.cursor;
+            r_Step_1b();
+            base.cursor = base.limit - v_4;
+            /** @const */ var /** number */ v_5 = base.limit - base.cursor;
+            r_Step_1c();
+            base.cursor = base.limit - v_5;
+            /** @const */ var /** number */ v_6 = base.limit - base.cursor;
+            r_Step_2();
+            base.cursor = base.limit - v_6;
+            /** @const */ var /** number */ v_7 = base.limit - base.cursor;
+            r_Step_3();
+            base.cursor = base.limit - v_7;
+            /** @const */ var /** number */ v_8 = base.limit - base.cursor;
+            r_Step_4();
+            base.cursor = base.limit - v_8;
+            /** @const */ var /** number */ v_9 = base.limit - base.cursor;
+            r_Step_5();
+            base.cursor = base.limit - v_9;
+            base.cursor = base.limit_backward;
+            /** @const */ var /** number */ v_10 = base.cursor;
+            r_postlude();
+            base.cursor = v_10;
+        }
+        return true;
+    };
+
+    /**@return{string}*/
+    this['stemWord'] = function(/**string*/word) {
+        base.setCurrent(word);
+        this.stem();
+        return base.getCurrent();
+    };
+};
diff --git a/tirx/_static/file.png b/tirx/_static/file.png
new file mode 100644
index 00000000000..a858a410e4f
Binary files /dev/null and b/tirx/_static/file.png differ
diff --git a/tirx/_static/images/logo_binder.svg b/tirx/_static/images/logo_binder.svg
new file mode 100644
index 00000000000..45fecf75114
--- /dev/null
+++ b/tirx/_static/images/logo_binder.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 44.4 44.4" style="enable-background:new 0 0 44.4 44.4;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:none;stroke:#F5A252;stroke-width:5;stroke-miterlimit:10;}
+	.st1{fill:none;stroke:#579ACA;stroke-width:5;stroke-miterlimit:10;}
+	.st2{fill:none;stroke:#E66581;stroke-width:5;stroke-miterlimit:10;}
+</style>
+<title>logo</title>
+<g>
+	<path class="st0" d="M33.9,6.4c3.6,3.9,3.4,9.9-0.5,13.5s-9.9,3.4-13.5-0.5s-3.4-9.9,0.5-13.5l0,0C24.2,2.4,30.2,2.6,33.9,6.4z"/>
+	<path class="st1" d="M35.1,27.3c2.6,4.6,1.1,10.4-3.5,13c-4.6,2.6-10.4,1.1-13-3.5s-1.1-10.4,3.5-13l0,0
+		C26.6,21.2,32.4,22.7,35.1,27.3z"/>
+	<path class="st2" d="M25.9,17.8c2.6,4.6,1.1,10.4-3.5,13s-10.4,1.1-13-3.5s-1.1-10.4,3.5-13l0,0C17.5,11.7,23.3,13.2,25.9,17.8z"/>
+	<path class="st1" d="M19.2,26.4c3.1-4.3,9.1-5.2,13.3-2.1c1.1,0.8,2,1.8,2.7,3"/>
+	<path class="st0" d="M19.9,19.4c-3.6-3.9-3.4-9.9,0.5-13.5s9.9-3.4,13.5,0.5"/>
+</g>
+</svg>
diff --git a/tirx/_static/images/logo_colab.png b/tirx/_static/images/logo_colab.png
new file mode 100644
index 00000000000..b7560ec216b
Binary files /dev/null and b/tirx/_static/images/logo_colab.png differ
diff --git a/tirx/_static/images/logo_deepnote.svg b/tirx/_static/images/logo_deepnote.svg
new file mode 100644
index 00000000000..fa77ebfc258
--- /dev/null
+++ b/tirx/_static/images/logo_deepnote.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M0 128h52.512l29.539-11.077-11.077-43.487-34.051 3.693L0 128Z" fill="#0076D4"/><path fill-rule="evenodd" clip-rule="evenodd" d="M52.513 128s16.6-8.759 19.673-24.277c3.072-15.517-12.091-26.594-35.263-26.594 0-.41 20.343-28.718 20.343-28.718l49.4 1.435L95.71 107.7l-20.452 15.978L52.513 128Z" fill="#002868"/><path fill-rule="evenodd" clip-rule="evenodd" d="M0 60.718 41. [...]
diff --git a/tirx/_static/images/logo_jupyterhub.svg b/tirx/_static/images/logo_jupyterhub.svg
new file mode 100644
index 00000000000..60cfe9f222e
--- /dev/null
+++ b/tirx/_static/images/logo_jupyterhub.svg
@@ -0,0 +1 @@
+<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="38.73" height="50" viewBox="0 0 38.73 50"><defs><style>.cls-1{fill:#767677;}.cls-2{fill:#f37726;}.cls-3{fill:#9e9e9e;}.cls-4{fill:#616262;}.cls-5{font-size:17.07px;fill:#fff;font-family:Roboto-Regular, Roboto;}</style></defs><title>logo_jupyterhub</title><g id="Canvas"><path id="path7_fill" data-name="path7 fill" class="cls-1" d="M39.51,3.53a3,3,0,0,1-1.7,2.9A3,3,0,0,1,34.48,6a3,3,0,0,1-.82-3.26,3,3,0,0,1,1.0 [...]
diff --git a/tirx/_static/images/logo_jupyterlite.svg b/tirx/_static/images/logo_jupyterlite.svg
new file mode 100644
index 00000000000..09e821f6608
--- /dev/null
+++ b/tirx/_static/images/logo_jupyterlite.svg
@@ -0,0 +1,17 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="68" height="68" viewBox="0 0 17.992 17.992">
+  <g transform="translate(.46 .448)">
+    <circle style="display:inline;opacity:1;vector-effect:none;fill:#f7dc1e;fill-opacity:1;stroke:none;stroke-width:.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" cx="83.727" cy="85.633" r="6.598" transform="translate(-75.191 -79.025)"/>
+    <rect style="display:inline;opacity:1;vector-effect:none;fill:#9e9e9e;fill-opacity:1;stroke:none;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" width="5.653" height="1.01" x="80.831" y="92.344" ry=".413" rx=".413" transform="translate(-75.191 -79.025)"/>
+    <rect y="93.671" x="80.837" height="1.031" width="5.641" style="display:inline;opacity:1;vector-effect:none;fill:#767677;fill-opacity:1;stroke:none;stroke-width:1.99999976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" ry=".421" rx=".421" transform="translate(-75.191 -79.025)"/>
+    <rect style="display:inline;opacity:1;vector-effect:none;fill:#616262;fill-opacity:1;stroke:none;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" width="3.24" height="1.02" x="82.038" y="95.019" ry=".417" rx=".417" transform="translate(-75.191 -79.025)"/>
+    <g style="display:inline;fill:#1a1a1a">
+      <g style="font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:8.46666718px;line-height:1.25;font-family:Vibur;-inkscape-font-specification:'Vibur, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0;word-spacing:0;writing-mode:lr-tb;text-anchor:start;fill:#1a1a1a;stroke-width:.26458335" aria-label="l">
+        <path style="font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:8.46666718px;font-family:Vibur;-inkscape-font-specification:'Vibur, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#1a1a1a;stroke-width:.26458335" d="M87.065 90.289q-.996-.041-1.475-1.216-.356-.884-.356-2.166 0-.066.008-.17.058-.872.323-1.6.43-1.173 1.215 [...]
+      </g>
+      <path d="M84.998 83.663a.694.694 0 0 1-.694.695.694.694 0 0 1-.694-.695.694.694 0 0 1 .694-.694.694.694 0 0 1 .694.694z" style="opacity:1;vector-effect:none;fill:#1a1a1a;fill-opacity:1;stroke:none;stroke-width:.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" transform="translate(-76.409 -79.473)"/>
+      <g style="font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:8.46666718px;line-height:1.25;font-family:Vibur;-inkscape-font-specification:'Vibur, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0;word-spacing:0;writing-mode:lr-tb;text-anchor:start;fill:#1a1a1a;stroke-width:.26458335" aria-label="j">
+        <path style="font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:8.46666718px;font-family:Vibur;-inkscape-font-specification:'Vibur, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#1a1a1a;stroke-width:.26458335" d="M84.155 84.667q.269.004.277.35l-.459 3.283q1.034-.79 1.162-.893.153-.132.314-.136.058 0 .112.037.12.083.1 [...]
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/tirx/_static/language_data.js b/tirx/_static/language_data.js
new file mode 100644
index 00000000000..57767864227
--- /dev/null
+++ b/tirx/_static/language_data.js
@@ -0,0 +1,13 @@
+/*
+ * This script contains the language-specific data used by searchtools.js,
+ * namely the set of stopwords, stemmer, scorer and splitter.
+ */
+
+const stopwords = new Set(["a", "about", "above", "after", "again", "against", "all", "am", "an", "and", "any", "are", "aren't", "as", "at", "be", "because", "been", "before", "being", "below", "between", "both", "but", "by", "can't", "cannot", "could", "couldn't", "did", "didn't", "do", "does", "doesn't", "doing", "don't", "down", "during", "each", "few", "for", "from", "further", "had", "hadn't", "has", "hasn't", "have", "haven't", "having", "he", "he'd", "he'll", "he's", "her", "here" [...]
+window.stopwords = stopwords;  // Export to global scope
+
+
+/* Non-minified versions are copied as separate JavaScript files, if available */
+BaseStemmer=function(){this.current="",this.cursor=0,this.limit=0,this.limit_backward=0,this.bra=0,this.ket=0,this.setCurrent=function(t){this.current=t,this.cursor=0,this.limit=this.current.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},this.getCurrent=function(){return this.current},this.copy_from=function(t){this.current=t.current,this.cursor=t.cursor,this.limit=t.limit,this.limit_backward=t.limit_backward,this.bra=t.bra,this.ket=t.ket},this.in_grouping=functio [...]
+var EnglishStemmer=function(){var a=new BaseStemmer,c=[["arsen",-1,-1],["commun",-1,-1],["emerg",-1,-1],["gener",-1,-1],["later",-1,-1],["organ",-1,-1],["past",-1,-1],["univers",-1,-1]],o=[["'",-1,1],["'s'",0,1],["'s",-1,1]],u=[["ied",-1,2],["s",-1,3],["ies",1,2],["sses",1,1],["ss",1,-1],["us",1,-1]],t=[["succ",-1,1],["proc",-1,1],["exc",-1,1]],l=[["even",-1,2],["cann",-1,2],["inn",-1,2],["earr",-1,2],["herr",-1,2],["out",-1,2],["y",-1,1]],n=[["",-1,-1],["ed",0,2],["eed",1,1],["ing",0,3] [...]
+window.Stemmer = EnglishStemmer;
diff --git a/tirx/_static/locales/ar/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/ar/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..15541a6a375
Binary files /dev/null and b/tirx/_static/locales/ar/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/ar/LC_MESSAGES/booktheme.po b/tirx/_static/locales/ar/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..066f20f9036
--- /dev/null
+++ b/tirx/_static/locales/ar/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "بواسطة"
+
+msgid "By"
+msgstr "بواسطة"
+
+msgid "Contents"
+msgstr "محتويات"
+
+msgid "Copyright"
+msgstr "حقوق النشر"
+
+msgid "Download notebook file"
+msgstr "تنزيل ملف دفتر الملاحظات"
+
+msgid "Download source file"
+msgstr "تنزيل ملف المصدر"
+
+msgid "Download this page"
+msgstr "قم بتنزيل هذه الصفحة"
+
+msgid "Edit this page"
+msgstr "قم بتحرير هذه الصفحة"
+
+msgid "Fullscreen mode"
+msgstr "وضع ملء الشاشة"
+
+msgid "Last updated on"
+msgstr "آخر تحديث في"
+
+msgid "Launch"
+msgstr "إطلاق"
+
+msgid "Open an issue"
+msgstr "افتح قضية"
+
+msgid "Print to PDF"
+msgstr "طباعة إلى PDF"
+
+msgid "Source repository"
+msgstr "مستودع المصدر"
+
+msgid "Sphinx Book Theme"
+msgstr "موضوع كتاب أبو الهول"
+
+msgid "Theme by the"
+msgstr "موضوع بواسطة"
+
+msgid "Toggle navigation"
+msgstr "تبديل التنقل"
+
+msgid "next page"
+msgstr "الصفحة التالية"
+
+msgid "open issue"
+msgstr "قضية مفتوحة"
+
+msgid "previous page"
+msgstr "الصفحة السابقة"
+
+msgid "repository"
+msgstr "مخزن"
+
+msgid "suggest edit"
+msgstr "أقترح تحرير"
diff --git a/tirx/_static/locales/bg/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/bg/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..da95120037f
Binary files /dev/null and b/tirx/_static/locales/bg/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/bg/LC_MESSAGES/booktheme.po b/tirx/_static/locales/bg/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..0f22f49ad72
--- /dev/null
+++ b/tirx/_static/locales/bg/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: bg\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "По"
+
+msgid "By"
+msgstr "От"
+
+msgid "Contents"
+msgstr "Съдържание"
+
+msgid "Copyright"
+msgstr "Авторско право"
+
+msgid "Download notebook file"
+msgstr "Изтеглете файла на бележника"
+
+msgid "Download source file"
+msgstr "Изтеглете изходния файл"
+
+msgid "Download this page"
+msgstr "Изтеглете тази страница"
+
+msgid "Edit this page"
+msgstr "Редактирайте тази страница"
+
+msgid "Fullscreen mode"
+msgstr "Режим на цял екран"
+
+msgid "Last updated on"
+msgstr "Последна актуализация на"
+
+msgid "Launch"
+msgstr "Стартиране"
+
+msgid "Open an issue"
+msgstr "Отворете проблем"
+
+msgid "Print to PDF"
+msgstr "Печат в PDF"
+
+msgid "Source repository"
+msgstr "Хранилище на източника"
+
+msgid "Sphinx Book Theme"
+msgstr "Тема на книгата Sphinx"
+
+msgid "Theme by the"
+msgstr "Тема от"
+
+msgid "Toggle navigation"
+msgstr "Превключване на навигацията"
+
+msgid "next page"
+msgstr "Следваща страница"
+
+msgid "open issue"
+msgstr "отворен брой"
+
+msgid "previous page"
+msgstr "предишна страница"
+
+msgid "repository"
+msgstr "хранилище"
+
+msgid "suggest edit"
+msgstr "предложи редактиране"
diff --git a/tirx/_static/locales/bn/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/bn/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..6b96639b726
Binary files /dev/null and b/tirx/_static/locales/bn/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/bn/LC_MESSAGES/booktheme.po b/tirx/_static/locales/bn/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..7202a5f3203
--- /dev/null
+++ b/tirx/_static/locales/bn/LC_MESSAGES/booktheme.po
@@ -0,0 +1,63 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: bn\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "দ্বারা"
+
+msgid "By"
+msgstr "দ্বারা"
+
+msgid "Copyright"
+msgstr "কপিরাইট"
+
+msgid "Download notebook file"
+msgstr "নোটবুক ফাইল ডাউনলোড করুন"
+
+msgid "Download source file"
+msgstr "উত্স ফাইল ডাউনলোড করুন"
+
+msgid "Download this page"
+msgstr "এই পৃষ্ঠাটি ডাউনলোড করুন"
+
+msgid "Edit this page"
+msgstr "এই পৃষ্ঠাটি সম্পাদনা করুন"
+
+msgid "Last updated on"
+msgstr "সর্বশেষ আপডেট"
+
+msgid "Launch"
+msgstr "শুরু করা"
+
+msgid "Open an issue"
+msgstr "একটি সমস্যা খুলুন"
+
+msgid "Print to PDF"
+msgstr "পিডিএফ প্রিন্ট করুন"
+
+msgid "Source repository"
+msgstr "উত্স সংগ্রহস্থল"
+
+msgid "Sphinx Book Theme"
+msgstr "স্পিনিক্স বুক থিম"
+
+msgid "Theme by the"
+msgstr "থিম দ্বারা"
+
+msgid "Toggle navigation"
+msgstr "নেভিগেশন টগল করুন"
+
+msgid "next page"
+msgstr "পরবর্তী পৃষ্ঠা"
+
+msgid "open issue"
+msgstr "খোলা সমস্যা"
+
+msgid "previous page"
+msgstr "আগের পৃষ্ঠা"
diff --git a/tirx/_static/locales/ca/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/ca/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..a4dd30e9bd7
Binary files /dev/null and b/tirx/_static/locales/ca/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/ca/LC_MESSAGES/booktheme.po b/tirx/_static/locales/ca/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..a325041f14a
--- /dev/null
+++ b/tirx/_static/locales/ca/LC_MESSAGES/booktheme.po
@@ -0,0 +1,66 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ca\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Per la"
+
+msgid "By"
+msgstr "Per"
+
+msgid "Copyright"
+msgstr "Copyright"
+
+msgid "Download notebook file"
+msgstr "Descarregar fitxer de quadern"
+
+msgid "Download source file"
+msgstr "Baixeu el fitxer font"
+
+msgid "Download this page"
+msgstr "Descarregueu aquesta pàgina"
+
+msgid "Edit this page"
+msgstr "Editeu aquesta pàgina"
+
+msgid "Last updated on"
+msgstr "Darrera actualització el"
+
+msgid "Launch"
+msgstr "Llançament"
+
+msgid "Open an issue"
+msgstr "Obriu un número"
+
+msgid "Print to PDF"
+msgstr "Imprimeix a PDF"
+
+msgid "Source repository"
+msgstr "Dipòsit de fonts"
+
+msgid "Sphinx Book Theme"
+msgstr "Tema del llibre Esfinx"
+
+msgid "Theme by the"
+msgstr "Tema del"
+
+msgid "Toggle navigation"
+msgstr "Commuta la navegació"
+
+msgid "next page"
+msgstr "pàgina següent"
+
+msgid "open issue"
+msgstr "número obert"
+
+msgid "previous page"
+msgstr "Pàgina anterior"
+
+msgid "suggest edit"
+msgstr "suggerir edició"
diff --git a/tirx/_static/locales/cs/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/cs/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..c39e01a6ae9
Binary files /dev/null and b/tirx/_static/locales/cs/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/cs/LC_MESSAGES/booktheme.po b/tirx/_static/locales/cs/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..97e52e8a5b2
--- /dev/null
+++ b/tirx/_static/locales/cs/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: cs\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Podle"
+
+msgid "By"
+msgstr "Podle"
+
+msgid "Contents"
+msgstr "Obsah"
+
+msgid "Copyright"
+msgstr "autorská práva"
+
+msgid "Download notebook file"
+msgstr "Stáhnout soubor poznámkového bloku"
+
+msgid "Download source file"
+msgstr "Stáhněte si zdrojový soubor"
+
+msgid "Download this page"
+msgstr "Stáhněte si tuto stránku"
+
+msgid "Edit this page"
+msgstr "Upravit tuto stránku"
+
+msgid "Fullscreen mode"
+msgstr "Režim celé obrazovky"
+
+msgid "Last updated on"
+msgstr "Naposledy aktualizováno"
+
+msgid "Launch"
+msgstr "Zahájení"
+
+msgid "Open an issue"
+msgstr "Otevřete problém"
+
+msgid "Print to PDF"
+msgstr "Tisk do PDF"
+
+msgid "Source repository"
+msgstr "Zdrojové úložiště"
+
+msgid "Sphinx Book Theme"
+msgstr "Téma knihy Sfinga"
+
+msgid "Theme by the"
+msgstr "Téma od"
+
+msgid "Toggle navigation"
+msgstr "Přepnout navigaci"
+
+msgid "next page"
+msgstr "další strana"
+
+msgid "open issue"
+msgstr "otevřené číslo"
+
+msgid "previous page"
+msgstr "předchozí stránka"
+
+msgid "repository"
+msgstr "úložiště"
+
+msgid "suggest edit"
+msgstr "navrhnout úpravy"
diff --git a/tirx/_static/locales/da/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/da/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..f43157d70c6
Binary files /dev/null and b/tirx/_static/locales/da/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/da/LC_MESSAGES/booktheme.po b/tirx/_static/locales/da/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..084b4e57109
--- /dev/null
+++ b/tirx/_static/locales/da/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: da\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Ved"
+
+msgid "By"
+msgstr "Ved"
+
+msgid "Contents"
+msgstr "Indhold"
+
+msgid "Copyright"
+msgstr "ophavsret"
+
+msgid "Download notebook file"
+msgstr "Download notesbog-fil"
+
+msgid "Download source file"
+msgstr "Download kildefil"
+
+msgid "Download this page"
+msgstr "Download denne side"
+
+msgid "Edit this page"
+msgstr "Rediger denne side"
+
+msgid "Fullscreen mode"
+msgstr "Fuldskærmstilstand"
+
+msgid "Last updated on"
+msgstr "Sidst opdateret den"
+
+msgid "Launch"
+msgstr "Start"
+
+msgid "Open an issue"
+msgstr "Åbn et problem"
+
+msgid "Print to PDF"
+msgstr "Udskriv til PDF"
+
+msgid "Source repository"
+msgstr "Kildelager"
+
+msgid "Sphinx Book Theme"
+msgstr "Sphinx bogtema"
+
+msgid "Theme by the"
+msgstr "Tema af"
+
+msgid "Toggle navigation"
+msgstr "Skift navigation"
+
+msgid "next page"
+msgstr "Næste side"
+
+msgid "open issue"
+msgstr "åbent nummer"
+
+msgid "previous page"
+msgstr "forrige side"
+
+msgid "repository"
+msgstr "lager"
+
+msgid "suggest edit"
+msgstr "foreslå redigering"
diff --git a/tirx/_static/locales/de/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/de/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..648b565c782
Binary files /dev/null and b/tirx/_static/locales/de/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/de/LC_MESSAGES/booktheme.po b/tirx/_static/locales/de/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..1ed1dc16a9d
--- /dev/null
+++ b/tirx/_static/locales/de/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Bis zum"
+
+msgid "By"
+msgstr "Durch"
+
+msgid "Contents"
+msgstr "Inhalt"
+
+msgid "Copyright"
+msgstr "Urheberrechte ©"
+
+msgid "Download notebook file"
+msgstr "Notebook-Datei herunterladen"
+
+msgid "Download source file"
+msgstr "Quelldatei herunterladen"
+
+msgid "Download this page"
+msgstr "Laden Sie diese Seite herunter"
+
+msgid "Edit this page"
+msgstr "Bearbeite diese Seite"
+
+msgid "Fullscreen mode"
+msgstr "Vollbildmodus"
+
+msgid "Last updated on"
+msgstr "Zuletzt aktualisiert am"
+
+msgid "Launch"
+msgstr "Starten"
+
+msgid "Open an issue"
+msgstr "Öffnen Sie ein Problem"
+
+msgid "Print to PDF"
+msgstr "In PDF drucken"
+
+msgid "Source repository"
+msgstr "Quell-Repository"
+
+msgid "Sphinx Book Theme"
+msgstr "Sphinx-Buch-Thema"
+
+msgid "Theme by the"
+msgstr "Thema von der"
+
+msgid "Toggle navigation"
+msgstr "Navigation umschalten"
+
+msgid "next page"
+msgstr "Nächste Seite"
+
+msgid "open issue"
+msgstr "offenes Thema"
+
+msgid "previous page"
+msgstr "vorherige Seite"
+
+msgid "repository"
+msgstr "Repository"
+
+msgid "suggest edit"
+msgstr "vorschlagen zu bearbeiten"
diff --git a/tirx/_static/locales/el/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/el/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..fca6e9355f3
Binary files /dev/null and b/tirx/_static/locales/el/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/el/LC_MESSAGES/booktheme.po b/tirx/_static/locales/el/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..27d1274a288
--- /dev/null
+++ b/tirx/_static/locales/el/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: el\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Από το"
+
+msgid "By"
+msgstr "Με"
+
+msgid "Contents"
+msgstr "Περιεχόμενα"
+
+msgid "Copyright"
+msgstr "Πνευματική ιδιοκτησία"
+
+msgid "Download notebook file"
+msgstr "Λήψη αρχείου σημειωματάριου"
+
+msgid "Download source file"
+msgstr "Λήψη αρχείου προέλευσης"
+
+msgid "Download this page"
+msgstr "Λήψη αυτής της σελίδας"
+
+msgid "Edit this page"
+msgstr "Επεξεργαστείτε αυτήν τη σελίδα"
+
+msgid "Fullscreen mode"
+msgstr "ΛΕΙΤΟΥΡΓΙΑ ΠΛΗΡΟΥΣ ΟΘΟΝΗΣ"
+
+msgid "Last updated on"
+msgstr "Τελευταία ενημέρωση στις"
+
+msgid "Launch"
+msgstr "Εκτόξευση"
+
+msgid "Open an issue"
+msgstr "Ανοίξτε ένα ζήτημα"
+
+msgid "Print to PDF"
+msgstr "Εκτύπωση σε PDF"
+
+msgid "Source repository"
+msgstr "Αποθήκη πηγής"
+
+msgid "Sphinx Book Theme"
+msgstr "Θέμα βιβλίου Sphinx"
+
+msgid "Theme by the"
+msgstr "Θέμα από το"
+
+msgid "Toggle navigation"
+msgstr "Εναλλαγή πλοήγησης"
+
+msgid "next page"
+msgstr "επόμενη σελίδα"
+
+msgid "open issue"
+msgstr "ανοιχτό ζήτημα"
+
+msgid "previous page"
+msgstr "προηγούμενη σελίδα"
+
+msgid "repository"
+msgstr "αποθήκη"
+
+msgid "suggest edit"
+msgstr "προτείνω επεξεργασία"
diff --git a/tirx/_static/locales/eo/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/eo/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..d1072bbec62
Binary files /dev/null and b/tirx/_static/locales/eo/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/eo/LC_MESSAGES/booktheme.po b/tirx/_static/locales/eo/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..1fda1bcd31b
--- /dev/null
+++ b/tirx/_static/locales/eo/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Per la"
+
+msgid "By"
+msgstr "De"
+
+msgid "Contents"
+msgstr "Enhavo"
+
+msgid "Copyright"
+msgstr "Kopirajto"
+
+msgid "Download notebook file"
+msgstr "Elŝutu kajeran dosieron"
+
+msgid "Download source file"
+msgstr "Elŝutu fontodosieron"
+
+msgid "Download this page"
+msgstr "Elŝutu ĉi tiun paĝon"
+
+msgid "Edit this page"
+msgstr "Redaktu ĉi tiun paĝon"
+
+msgid "Fullscreen mode"
+msgstr "Plenekrana reĝimo"
+
+msgid "Last updated on"
+msgstr "Laste ĝisdatigita la"
+
+msgid "Launch"
+msgstr "Lanĉo"
+
+msgid "Open an issue"
+msgstr "Malfermu numeron"
+
+msgid "Print to PDF"
+msgstr "Presi al PDF"
+
+msgid "Source repository"
+msgstr "Fonto-deponejo"
+
+msgid "Sphinx Book Theme"
+msgstr "Sfinksa Libro-Temo"
+
+msgid "Theme by the"
+msgstr "Temo de la"
+
+msgid "Toggle navigation"
+msgstr "Ŝalti navigadon"
+
+msgid "next page"
+msgstr "sekva paĝo"
+
+msgid "open issue"
+msgstr "malferma numero"
+
+msgid "previous page"
+msgstr "antaŭa paĝo"
+
+msgid "repository"
+msgstr "deponejo"
+
+msgid "suggest edit"
+msgstr "sugesti redaktadon"
diff --git a/tirx/_static/locales/es/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/es/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..ba2ee4dc221
Binary files /dev/null and b/tirx/_static/locales/es/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/es/LC_MESSAGES/booktheme.po b/tirx/_static/locales/es/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..c91b41b9483
--- /dev/null
+++ b/tirx/_static/locales/es/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Por el"
+
+msgid "By"
+msgstr "Por"
+
+msgid "Contents"
+msgstr "Contenido"
+
+msgid "Copyright"
+msgstr "Derechos de autor"
+
+msgid "Download notebook file"
+msgstr "Descargar archivo de cuaderno"
+
+msgid "Download source file"
+msgstr "Descargar archivo fuente"
+
+msgid "Download this page"
+msgstr "Descarga esta pagina"
+
+msgid "Edit this page"
+msgstr "Edita esta página"
+
+msgid "Fullscreen mode"
+msgstr "Modo de pantalla completa"
+
+msgid "Last updated on"
+msgstr "Ultima actualización en"
+
+msgid "Launch"
+msgstr "Lanzamiento"
+
+msgid "Open an issue"
+msgstr "Abrir un problema"
+
+msgid "Print to PDF"
+msgstr "Imprimir en PDF"
+
+msgid "Source repository"
+msgstr "Repositorio de origen"
+
+msgid "Sphinx Book Theme"
+msgstr "Tema del libro de la esfinge"
+
+msgid "Theme by the"
+msgstr "Tema por el"
+
+msgid "Toggle navigation"
+msgstr "Navegación de palanca"
+
+msgid "next page"
+msgstr "siguiente página"
+
+msgid "open issue"
+msgstr "Tema abierto"
+
+msgid "previous page"
+msgstr "pagina anterior"
+
+msgid "repository"
+msgstr "repositorio"
+
+msgid "suggest edit"
+msgstr "sugerir editar"
diff --git a/tirx/_static/locales/et/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/et/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..983b82391f4
Binary files /dev/null and b/tirx/_static/locales/et/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/et/LC_MESSAGES/booktheme.po b/tirx/_static/locales/et/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..2fd1ea20878
--- /dev/null
+++ b/tirx/_static/locales/et/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: et\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Autor"
+
+msgid "By"
+msgstr "Kõrval"
+
+msgid "Contents"
+msgstr "Sisu"
+
+msgid "Copyright"
+msgstr "Autoriõigus"
+
+msgid "Download notebook file"
+msgstr "Laadige sülearvuti fail alla"
+
+msgid "Download source file"
+msgstr "Laadige alla lähtefail"
+
+msgid "Download this page"
+msgstr "Laadige see leht alla"
+
+msgid "Edit this page"
+msgstr "Muutke seda lehte"
+
+msgid "Fullscreen mode"
+msgstr "Täisekraanirežiim"
+
+msgid "Last updated on"
+msgstr "Viimati uuendatud"
+
+msgid "Launch"
+msgstr "Käivitage"
+
+msgid "Open an issue"
+msgstr "Avage probleem"
+
+msgid "Print to PDF"
+msgstr "Prindi PDF-i"
+
+msgid "Source repository"
+msgstr "Allikahoidla"
+
+msgid "Sphinx Book Theme"
+msgstr "Sfinksiraamatu teema"
+
+msgid "Theme by the"
+msgstr "Teema"
+
+msgid "Toggle navigation"
+msgstr "Lülita navigeerimine sisse"
+
+msgid "next page"
+msgstr "järgmine leht"
+
+msgid "open issue"
+msgstr "avatud küsimus"
+
+msgid "previous page"
+msgstr "eelmine leht"
+
+msgid "repository"
+msgstr "hoidla"
+
+msgid "suggest edit"
+msgstr "soovita muuta"
diff --git a/tirx/_static/locales/fi/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/fi/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..d8ac054597c
Binary files /dev/null and b/tirx/_static/locales/fi/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/fi/LC_MESSAGES/booktheme.po b/tirx/_static/locales/fi/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..2843f2c79ff
--- /dev/null
+++ b/tirx/_static/locales/fi/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Mukaan"
+
+msgid "By"
+msgstr "Tekijä"
+
+msgid "Contents"
+msgstr "Sisällys"
+
+msgid "Copyright"
+msgstr "Tekijänoikeus"
+
+msgid "Download notebook file"
+msgstr "Lataa muistikirjatiedosto"
+
+msgid "Download source file"
+msgstr "Lataa lähdetiedosto"
+
+msgid "Download this page"
+msgstr "Lataa tämä sivu"
+
+msgid "Edit this page"
+msgstr "Muokkaa tätä sivua"
+
+msgid "Fullscreen mode"
+msgstr "Koko näytön tila"
+
+msgid "Last updated on"
+msgstr "Viimeksi päivitetty"
+
+msgid "Launch"
+msgstr "Tuoda markkinoille"
+
+msgid "Open an issue"
+msgstr "Avaa ongelma"
+
+msgid "Print to PDF"
+msgstr "Tulosta PDF-tiedostoon"
+
+msgid "Source repository"
+msgstr "Lähteen arkisto"
+
+msgid "Sphinx Book Theme"
+msgstr "Sphinx-kirjan teema"
+
+msgid "Theme by the"
+msgstr "Teeman tekijä"
+
+msgid "Toggle navigation"
+msgstr "Vaihda navigointia"
+
+msgid "next page"
+msgstr "seuraava sivu"
+
+msgid "open issue"
+msgstr "avoin ongelma"
+
+msgid "previous page"
+msgstr "Edellinen sivu"
+
+msgid "repository"
+msgstr "arkisto"
+
+msgid "suggest edit"
+msgstr "ehdottaa muokkausta"
diff --git a/tirx/_static/locales/fr/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/fr/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..f663d39f0fa
Binary files /dev/null and b/tirx/_static/locales/fr/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/fr/LC_MESSAGES/booktheme.po b/tirx/_static/locales/fr/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..351cddd6bfa
--- /dev/null
+++ b/tirx/_static/locales/fr/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Par le"
+
+msgid "By"
+msgstr "Par"
+
+msgid "Contents"
+msgstr "Contenu"
+
+msgid "Copyright"
+msgstr "droits d'auteur"
+
+msgid "Download notebook file"
+msgstr "Télécharger le fichier notebook"
+
+msgid "Download source file"
+msgstr "Télécharger le fichier source"
+
+msgid "Download this page"
+msgstr "Téléchargez cette page"
+
+msgid "Edit this page"
+msgstr "Modifier cette page"
+
+msgid "Fullscreen mode"
+msgstr "Mode plein écran"
+
+msgid "Last updated on"
+msgstr "Dernière mise à jour le"
+
+msgid "Launch"
+msgstr "lancement"
+
+msgid "Open an issue"
+msgstr "Ouvrez un problème"
+
+msgid "Print to PDF"
+msgstr "Imprimer au format PDF"
+
+msgid "Source repository"
+msgstr "Dépôt source"
+
+msgid "Sphinx Book Theme"
+msgstr "Thème du livre Sphinx"
+
+msgid "Theme by the"
+msgstr "Thème par le"
+
+msgid "Toggle navigation"
+msgstr "Basculer la navigation"
+
+msgid "next page"
+msgstr "page suivante"
+
+msgid "open issue"
+msgstr "signaler un problème"
+
+msgid "previous page"
+msgstr "page précédente"
+
+msgid "repository"
+msgstr "dépôt"
+
+msgid "suggest edit"
+msgstr "suggestion de modification"
diff --git a/tirx/_static/locales/hr/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/hr/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..eca4a1a2842
Binary files /dev/null and b/tirx/_static/locales/hr/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/hr/LC_MESSAGES/booktheme.po b/tirx/_static/locales/hr/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..3c1cf079542
--- /dev/null
+++ b/tirx/_static/locales/hr/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Od strane"
+
+msgid "By"
+msgstr "Po"
+
+msgid "Contents"
+msgstr "Sadržaj"
+
+msgid "Copyright"
+msgstr "Autorska prava"
+
+msgid "Download notebook file"
+msgstr "Preuzmi datoteku bilježnice"
+
+msgid "Download source file"
+msgstr "Preuzmi izvornu datoteku"
+
+msgid "Download this page"
+msgstr "Preuzmite ovu stranicu"
+
+msgid "Edit this page"
+msgstr "Uredite ovu stranicu"
+
+msgid "Fullscreen mode"
+msgstr "Način preko cijelog zaslona"
+
+msgid "Last updated on"
+msgstr "Posljednje ažuriranje:"
+
+msgid "Launch"
+msgstr "Pokrenite"
+
+msgid "Open an issue"
+msgstr "Otvorite izdanje"
+
+msgid "Print to PDF"
+msgstr "Ispis u PDF"
+
+msgid "Source repository"
+msgstr "Izvorno spremište"
+
+msgid "Sphinx Book Theme"
+msgstr "Tema knjige Sphinx"
+
+msgid "Theme by the"
+msgstr "Tema autora"
+
+msgid "Toggle navigation"
+msgstr "Uključi / isključi navigaciju"
+
+msgid "next page"
+msgstr "sljedeća stranica"
+
+msgid "open issue"
+msgstr "otvoreno izdanje"
+
+msgid "previous page"
+msgstr "Prethodna stranica"
+
+msgid "repository"
+msgstr "spremište"
+
+msgid "suggest edit"
+msgstr "predloži uređivanje"
diff --git a/tirx/_static/locales/hu/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/hu/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..63f6e6da14c
Binary files /dev/null and b/tirx/_static/locales/hu/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/hu/LC_MESSAGES/booktheme.po b/tirx/_static/locales/hu/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..1f0b2b020b4
--- /dev/null
+++ b/tirx/_static/locales/hu/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Szerző:"
+
+msgid "By"
+msgstr "Szerző:"
+
+msgid "Contents"
+msgstr "Tartalom"
+
+msgid "Copyright"
+msgstr "Szerzői jog"
+
+msgid "Download notebook file"
+msgstr "Jegyzettömbfájl letöltése"
+
+msgid "Download source file"
+msgstr "Forrásfájl letöltése"
+
+msgid "Download this page"
+msgstr "Az oldal letöltése"
+
+msgid "Edit this page"
+msgstr "Az oldal szerkesztése"
+
+msgid "Fullscreen mode"
+msgstr "Teljes képernyős mód"
+
+msgid "Last updated on"
+msgstr "Utoljára frissítve:"
+
+msgid "Launch"
+msgstr "Indítás"
+
+msgid "Open an issue"
+msgstr "Problémajegy nyitása"
+
+msgid "Print to PDF"
+msgstr "Nyomtatás PDF-be"
+
+msgid "Source repository"
+msgstr "Forráskódtároló"
+
+msgid "Sphinx Book Theme"
+msgstr "Sphinx könyvsablon"
+
+msgid "Theme by the"
+msgstr "Téma készítője:"
+
+msgid "Toggle navigation"
+msgstr "Navigáció ki- és bekapcsolása"
+
+msgid "next page"
+msgstr "következő oldal"
+
+msgid "open issue"
+msgstr "problémajegy nyitása"
+
+msgid "previous page"
+msgstr "előző oldal"
+
+msgid "repository"
+msgstr "tároló"
+
+msgid "suggest edit"
+msgstr "szerkesztési javaslat"
diff --git a/tirx/_static/locales/id/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/id/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..d07a06a9d27
Binary files /dev/null and b/tirx/_static/locales/id/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/id/LC_MESSAGES/booktheme.po b/tirx/_static/locales/id/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..809498c723c
--- /dev/null
+++ b/tirx/_static/locales/id/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Oleh"
+
+msgid "By"
+msgstr "Oleh"
+
+msgid "Contents"
+msgstr "Isi"
+
+msgid "Copyright"
+msgstr "hak cipta"
+
+msgid "Download notebook file"
+msgstr "Unduh file notebook"
+
+msgid "Download source file"
+msgstr "Unduh file sumber"
+
+msgid "Download this page"
+msgstr "Unduh halaman ini"
+
+msgid "Edit this page"
+msgstr "Edit halaman ini"
+
+msgid "Fullscreen mode"
+msgstr "Mode layar penuh"
+
+msgid "Last updated on"
+msgstr "Terakhir diperbarui saat"
+
+msgid "Launch"
+msgstr "Meluncurkan"
+
+msgid "Open an issue"
+msgstr "Buka masalah"
+
+msgid "Print to PDF"
+msgstr "Cetak ke PDF"
+
+msgid "Source repository"
+msgstr "Repositori sumber"
+
+msgid "Sphinx Book Theme"
+msgstr "Tema Buku Sphinx"
+
+msgid "Theme by the"
+msgstr "Tema oleh"
+
+msgid "Toggle navigation"
+msgstr "Alihkan navigasi"
+
+msgid "next page"
+msgstr "halaman selanjutnya"
+
+msgid "open issue"
+msgstr "masalah terbuka"
+
+msgid "previous page"
+msgstr "halaman sebelumnya"
+
+msgid "repository"
+msgstr "gudang"
+
+msgid "suggest edit"
+msgstr "menyarankan edit"
diff --git a/tirx/_static/locales/it/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/it/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..53ba476edd2
Binary files /dev/null and b/tirx/_static/locales/it/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/it/LC_MESSAGES/booktheme.po b/tirx/_static/locales/it/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..fbc8d03b9ed
--- /dev/null
+++ b/tirx/_static/locales/it/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Dal"
+
+msgid "By"
+msgstr "Di"
+
+msgid "Contents"
+msgstr "Contenuti"
+
+msgid "Copyright"
+msgstr "Diritto d'autore"
+
+msgid "Download notebook file"
+msgstr "Scarica il file del taccuino"
+
+msgid "Download source file"
+msgstr "Scarica il file sorgente"
+
+msgid "Download this page"
+msgstr "Scarica questa pagina"
+
+msgid "Edit this page"
+msgstr "Modifica questa pagina"
+
+msgid "Fullscreen mode"
+msgstr "Modalità schermo intero"
+
+msgid "Last updated on"
+msgstr "Ultimo aggiornamento il"
+
+msgid "Launch"
+msgstr "Lanciare"
+
+msgid "Open an issue"
+msgstr "Apri un problema"
+
+msgid "Print to PDF"
+msgstr "Stampa in PDF"
+
+msgid "Source repository"
+msgstr "Repository di origine"
+
+msgid "Sphinx Book Theme"
+msgstr "Tema del libro della Sfinge"
+
+msgid "Theme by the"
+msgstr "Tema di"
+
+msgid "Toggle navigation"
+msgstr "Attiva / disattiva la navigazione"
+
+msgid "next page"
+msgstr "pagina successiva"
+
+msgid "open issue"
+msgstr "questione aperta"
+
+msgid "previous page"
+msgstr "pagina precedente"
+
+msgid "repository"
+msgstr "repository"
+
+msgid "suggest edit"
+msgstr "suggerisci modifica"
diff --git a/tirx/_static/locales/iw/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/iw/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..a45c6575e46
Binary files /dev/null and b/tirx/_static/locales/iw/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/iw/LC_MESSAGES/booktheme.po b/tirx/_static/locales/iw/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..a82f351297e
--- /dev/null
+++ b/tirx/_static/locales/iw/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: iw\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "דרך"
+
+msgid "By"
+msgstr "על ידי"
+
+msgid "Contents"
+msgstr "תוכן"
+
+msgid "Copyright"
+msgstr "זכויות יוצרים"
+
+msgid "Download notebook file"
+msgstr "הורד קובץ מחברת"
+
+msgid "Download source file"
+msgstr "הורד את קובץ המקור"
+
+msgid "Download this page"
+msgstr "הורד דף זה"
+
+msgid "Edit this page"
+msgstr "ערוך דף זה"
+
+msgid "Fullscreen mode"
+msgstr "מצב מסך מלא"
+
+msgid "Last updated on"
+msgstr "עודכן לאחרונה ב"
+
+msgid "Launch"
+msgstr "לְהַשִׁיק"
+
+msgid "Open an issue"
+msgstr "פתח גיליון"
+
+msgid "Print to PDF"
+msgstr "הדפס לקובץ PDF"
+
+msgid "Source repository"
+msgstr "מאגר המקורות"
+
+msgid "Sphinx Book Theme"
+msgstr "נושא ספר ספינקס"
+
+msgid "Theme by the"
+msgstr "נושא מאת"
+
+msgid "Toggle navigation"
+msgstr "החלף ניווט"
+
+msgid "next page"
+msgstr "עמוד הבא"
+
+msgid "open issue"
+msgstr "בעיה פתוחה"
+
+msgid "previous page"
+msgstr "עמוד קודם"
+
+msgid "repository"
+msgstr "מאגר"
+
+msgid "suggest edit"
+msgstr "מציע לערוך"
diff --git a/tirx/_static/locales/ja/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/ja/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..1cefd29ce3c
Binary files /dev/null and b/tirx/_static/locales/ja/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/ja/LC_MESSAGES/booktheme.po b/tirx/_static/locales/ja/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..3caab09e196
--- /dev/null
+++ b/tirx/_static/locales/ja/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ja\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "によって"
+
+msgid "By"
+msgstr "著者"
+
+msgid "Contents"
+msgstr "目次"
+
+msgid "Copyright"
+msgstr "Copyright"
+
+msgid "Download notebook file"
+msgstr "ノートブックファイルをダウンロード"
+
+msgid "Download source file"
+msgstr "ソースファイルをダウンロード"
+
+msgid "Download this page"
+msgstr "このページをダウンロード"
+
+msgid "Edit this page"
+msgstr "このページを編集"
+
+msgid "Fullscreen mode"
+msgstr "全画面モード"
+
+msgid "Last updated on"
+msgstr "最終更新日"
+
+msgid "Launch"
+msgstr "起動"
+
+msgid "Open an issue"
+msgstr "問題を報告"
+
+msgid "Print to PDF"
+msgstr "PDFに印刷"
+
+msgid "Source repository"
+msgstr "ソースリポジトリ"
+
+msgid "Sphinx Book Theme"
+msgstr "スフィンクスの本のテーマ"
+
+msgid "Theme by the"
+msgstr "のテーマ"
+
+msgid "Toggle navigation"
+msgstr "ナビゲーションを切り替え"
+
+msgid "next page"
+msgstr "次のページ"
+
+msgid "open issue"
+msgstr "未解決の問題"
+
+msgid "previous page"
+msgstr "前のページ"
+
+msgid "repository"
+msgstr "リポジトリ"
+
+msgid "suggest edit"
+msgstr "編集を提案する"
diff --git a/tirx/_static/locales/ko/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/ko/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..06c7ec938b4
Binary files /dev/null and b/tirx/_static/locales/ko/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/ko/LC_MESSAGES/booktheme.po b/tirx/_static/locales/ko/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..2db12a1b7d6
--- /dev/null
+++ b/tirx/_static/locales/ko/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ko\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "에 의해"
+
+msgid "By"
+msgstr "으로"
+
+msgid "Contents"
+msgstr "내용"
+
+msgid "Copyright"
+msgstr "저작권"
+
+msgid "Download notebook file"
+msgstr "노트북 파일 다운로드"
+
+msgid "Download source file"
+msgstr "소스 파일 다운로드"
+
+msgid "Download this page"
+msgstr "이 페이지 다운로드"
+
+msgid "Edit this page"
+msgstr "이 페이지 편집"
+
+msgid "Fullscreen mode"
+msgstr "전체 화면으로보기"
+
+msgid "Last updated on"
+msgstr "마지막 업데이트"
+
+msgid "Launch"
+msgstr "시작하다"
+
+msgid "Open an issue"
+msgstr "이슈 열기"
+
+msgid "Print to PDF"
+msgstr "PDF로 인쇄"
+
+msgid "Source repository"
+msgstr "소스 저장소"
+
+msgid "Sphinx Book Theme"
+msgstr "스핑크스 도서 테마"
+
+msgid "Theme by the"
+msgstr "테마별"
+
+msgid "Toggle navigation"
+msgstr "탐색 전환"
+
+msgid "next page"
+msgstr "다음 페이지"
+
+msgid "open issue"
+msgstr "열린 문제"
+
+msgid "previous page"
+msgstr "이전 페이지"
+
+msgid "repository"
+msgstr "저장소"
+
+msgid "suggest edit"
+msgstr "편집 제안"
diff --git a/tirx/_static/locales/lt/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/lt/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..4468ba04bc1
Binary files /dev/null and b/tirx/_static/locales/lt/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/lt/LC_MESSAGES/booktheme.po b/tirx/_static/locales/lt/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..07b64680be0
--- /dev/null
+++ b/tirx/_static/locales/lt/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lt\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Prie"
+
+msgid "By"
+msgstr "Iki"
+
+msgid "Contents"
+msgstr "Turinys"
+
+msgid "Copyright"
+msgstr "Autorių teisės"
+
+msgid "Download notebook file"
+msgstr "Atsisiųsti nešiojamojo kompiuterio failą"
+
+msgid "Download source file"
+msgstr "Atsisiųsti šaltinio failą"
+
+msgid "Download this page"
+msgstr "Atsisiųskite šį puslapį"
+
+msgid "Edit this page"
+msgstr "Redaguoti šį puslapį"
+
+msgid "Fullscreen mode"
+msgstr "Pilno ekrano režimas"
+
+msgid "Last updated on"
+msgstr "Paskutinį kartą atnaujinta"
+
+msgid "Launch"
+msgstr "Paleiskite"
+
+msgid "Open an issue"
+msgstr "Atidarykite problemą"
+
+msgid "Print to PDF"
+msgstr "Spausdinti į PDF"
+
+msgid "Source repository"
+msgstr "Šaltinio saugykla"
+
+msgid "Sphinx Book Theme"
+msgstr "Sfinkso knygos tema"
+
+msgid "Theme by the"
+msgstr "Tema"
+
+msgid "Toggle navigation"
+msgstr "Perjungti naršymą"
+
+msgid "next page"
+msgstr "Kitas puslapis"
+
+msgid "open issue"
+msgstr "atviras klausimas"
+
+msgid "previous page"
+msgstr "Ankstesnis puslapis"
+
+msgid "repository"
+msgstr "saugykla"
+
+msgid "suggest edit"
+msgstr "pasiūlyti redaguoti"
diff --git a/tirx/_static/locales/lv/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/lv/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..74aa4d8985d
Binary files /dev/null and b/tirx/_static/locales/lv/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/lv/LC_MESSAGES/booktheme.po b/tirx/_static/locales/lv/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..b741c2891d8
--- /dev/null
+++ b/tirx/_static/locales/lv/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lv\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Ar"
+
+msgid "By"
+msgstr "Autors"
+
+msgid "Contents"
+msgstr "Saturs"
+
+msgid "Copyright"
+msgstr "Autortiesības"
+
+msgid "Download notebook file"
+msgstr "Lejupielādēt piezīmju grāmatiņu"
+
+msgid "Download source file"
+msgstr "Lejupielādēt avota failu"
+
+msgid "Download this page"
+msgstr "Lejupielādējiet šo lapu"
+
+msgid "Edit this page"
+msgstr "Rediģēt šo lapu"
+
+msgid "Fullscreen mode"
+msgstr "Pilnekrāna režīms"
+
+msgid "Last updated on"
+msgstr "Pēdējoreiz atjaunināts"
+
+msgid "Launch"
+msgstr "Uzsākt"
+
+msgid "Open an issue"
+msgstr "Atveriet problēmu"
+
+msgid "Print to PDF"
+msgstr "Drukāt PDF formātā"
+
+msgid "Source repository"
+msgstr "Avota krātuve"
+
+msgid "Sphinx Book Theme"
+msgstr "Sfinksa grāmatas tēma"
+
+msgid "Theme by the"
+msgstr "Autora tēma"
+
+msgid "Toggle navigation"
+msgstr "Pārslēgt navigāciju"
+
+msgid "next page"
+msgstr "nākamā lapaspuse"
+
+msgid "open issue"
+msgstr "atklāts jautājums"
+
+msgid "previous page"
+msgstr "iepriekšējā lapa"
+
+msgid "repository"
+msgstr "krātuve"
+
+msgid "suggest edit"
+msgstr "ieteikt rediģēt"
diff --git a/tirx/_static/locales/ml/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/ml/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..2736e8fcf6f
Binary files /dev/null and b/tirx/_static/locales/ml/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/ml/LC_MESSAGES/booktheme.po b/tirx/_static/locales/ml/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..bdad3de20cf
--- /dev/null
+++ b/tirx/_static/locales/ml/LC_MESSAGES/booktheme.po
@@ -0,0 +1,66 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ml\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "എഴുതിയത്"
+
+msgid "By"
+msgstr "എഴുതിയത്"
+
+msgid "Copyright"
+msgstr "പകർപ്പവകാശം"
+
+msgid "Download notebook file"
+msgstr "നോട്ട്ബുക്ക് ഫയൽ ഡൺലോഡ് ചെയ്യുക"
+
+msgid "Download source file"
+msgstr "ഉറവിട ഫയൽ ഡൗൺലോഡുചെയ്യുക"
+
+msgid "Download this page"
+msgstr "ഈ പേജ് ഡൗൺലോഡുചെയ്യുക"
+
+msgid "Edit this page"
+msgstr "ഈ പേജ് എഡിറ്റുചെയ്യുക"
+
+msgid "Last updated on"
+msgstr "അവസാനം അപ്‌ഡേറ്റുചെയ്‌തത്"
+
+msgid "Launch"
+msgstr "സമാരംഭിക്കുക"
+
+msgid "Open an issue"
+msgstr "ഒരു പ്രശ്നം തുറക്കുക"
+
+msgid "Print to PDF"
+msgstr "PDF- ലേക്ക് പ്രിന്റുചെയ്യുക"
+
+msgid "Source repository"
+msgstr "ഉറവിട ശേഖരം"
+
+msgid "Sphinx Book Theme"
+msgstr "സ്ഫിങ്ക്സ് പുസ്തക തീം"
+
+msgid "Theme by the"
+msgstr "പ്രമേയം"
+
+msgid "Toggle navigation"
+msgstr "നാവിഗേഷൻ ടോഗിൾ ചെയ്യുക"
+
+msgid "next page"
+msgstr "അടുത്ത പേജ്"
+
+msgid "open issue"
+msgstr "തുറന്ന പ്രശ്നം"
+
+msgid "previous page"
+msgstr "മുൻപത്തെ താൾ"
+
+msgid "suggest edit"
+msgstr "എഡിറ്റുചെയ്യാൻ നിർദ്ദേശിക്കുക"
diff --git a/tirx/_static/locales/mr/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/mr/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..fe530100d77
Binary files /dev/null and b/tirx/_static/locales/mr/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/mr/LC_MESSAGES/booktheme.po b/tirx/_static/locales/mr/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..61bfad4d4c2
--- /dev/null
+++ b/tirx/_static/locales/mr/LC_MESSAGES/booktheme.po
@@ -0,0 +1,66 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: mr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "द्वारा"
+
+msgid "By"
+msgstr "द्वारा"
+
+msgid "Copyright"
+msgstr "कॉपीराइट"
+
+msgid "Download notebook file"
+msgstr "नोटबुक फाईल डाउनलोड करा"
+
+msgid "Download source file"
+msgstr "स्त्रोत फाइल डाउनलोड करा"
+
+msgid "Download this page"
+msgstr "हे पृष्ठ डाउनलोड करा"
+
+msgid "Edit this page"
+msgstr "हे पृष्ठ संपादित करा"
+
+msgid "Last updated on"
+msgstr "अखेरचे अद्यतनित"
+
+msgid "Launch"
+msgstr "लाँच करा"
+
+msgid "Open an issue"
+msgstr "एक मुद्दा उघडा"
+
+msgid "Print to PDF"
+msgstr "पीडीएफवर मुद्रित करा"
+
+msgid "Source repository"
+msgstr "स्त्रोत भांडार"
+
+msgid "Sphinx Book Theme"
+msgstr "स्फिंक्स बुक थीम"
+
+msgid "Theme by the"
+msgstr "द्वारा थीम"
+
+msgid "Toggle navigation"
+msgstr "नेव्हिगेशन टॉगल करा"
+
+msgid "next page"
+msgstr "पुढील पृष्ठ"
+
+msgid "open issue"
+msgstr "खुला मुद्दा"
+
+msgid "previous page"
+msgstr "मागील पान"
+
+msgid "suggest edit"
+msgstr "संपादन सुचवा"
diff --git a/tirx/_static/locales/ms/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/ms/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..f02603fa252
Binary files /dev/null and b/tirx/_static/locales/ms/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/ms/LC_MESSAGES/booktheme.po b/tirx/_static/locales/ms/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..ade6515a777
--- /dev/null
+++ b/tirx/_static/locales/ms/LC_MESSAGES/booktheme.po
@@ -0,0 +1,66 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ms\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Oleh"
+
+msgid "By"
+msgstr "Oleh"
+
+msgid "Copyright"
+msgstr "hak cipta"
+
+msgid "Download notebook file"
+msgstr "Muat turun fail buku nota"
+
+msgid "Download source file"
+msgstr "Muat turun fail sumber"
+
+msgid "Download this page"
+msgstr "Muat turun halaman ini"
+
+msgid "Edit this page"
+msgstr "Edit halaman ini"
+
+msgid "Last updated on"
+msgstr "Terakhir dikemas kini pada"
+
+msgid "Launch"
+msgstr "Lancarkan"
+
+msgid "Open an issue"
+msgstr "Buka masalah"
+
+msgid "Print to PDF"
+msgstr "Cetak ke PDF"
+
+msgid "Source repository"
+msgstr "Repositori sumber"
+
+msgid "Sphinx Book Theme"
+msgstr "Tema Buku Sphinx"
+
+msgid "Theme by the"
+msgstr "Tema oleh"
+
+msgid "Toggle navigation"
+msgstr "Togol navigasi"
+
+msgid "next page"
+msgstr "muka surat seterusnya"
+
+msgid "open issue"
+msgstr "isu terbuka"
+
+msgid "previous page"
+msgstr "halaman sebelumnya"
+
+msgid "suggest edit"
+msgstr "cadangkan edit"
diff --git a/tirx/_static/locales/nl/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/nl/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..e59e7ecb308
Binary files /dev/null and b/tirx/_static/locales/nl/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/nl/LC_MESSAGES/booktheme.po b/tirx/_static/locales/nl/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..e114611d69d
--- /dev/null
+++ b/tirx/_static/locales/nl/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Door de"
+
+msgid "By"
+msgstr "Door"
+
+msgid "Contents"
+msgstr "Inhoud"
+
+msgid "Copyright"
+msgstr "auteursrechten"
+
+msgid "Download notebook file"
+msgstr "Download notebookbestand"
+
+msgid "Download source file"
+msgstr "Download het bronbestand"
+
+msgid "Download this page"
+msgstr "Download deze pagina"
+
+msgid "Edit this page"
+msgstr "bewerk deze pagina"
+
+msgid "Fullscreen mode"
+msgstr "Volledig scherm"
+
+msgid "Last updated on"
+msgstr "Laatst geupdate op"
+
+msgid "Launch"
+msgstr "Lancering"
+
+msgid "Open an issue"
+msgstr "Open een probleem"
+
+msgid "Print to PDF"
+msgstr "Afdrukken naar pdf"
+
+msgid "Source repository"
+msgstr "Bronopslagplaats"
+
+msgid "Sphinx Book Theme"
+msgstr "Sphinx-boekthema"
+
+msgid "Theme by the"
+msgstr "Thema door de"
+
+msgid "Toggle navigation"
+msgstr "Schakel navigatie"
+
+msgid "next page"
+msgstr "volgende bladzijde"
+
+msgid "open issue"
+msgstr "open probleem"
+
+msgid "previous page"
+msgstr "vorige pagina"
+
+msgid "repository"
+msgstr "repository"
+
+msgid "suggest edit"
+msgstr "suggereren bewerken"
diff --git a/tirx/_static/locales/no/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/no/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..6cd15c88de6
Binary files /dev/null and b/tirx/_static/locales/no/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/no/LC_MESSAGES/booktheme.po b/tirx/_static/locales/no/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..53fa9fc3662
--- /dev/null
+++ b/tirx/_static/locales/no/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: no\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Ved"
+
+msgid "By"
+msgstr "Av"
+
+msgid "Contents"
+msgstr "Innhold"
+
+msgid "Copyright"
+msgstr "opphavsrett"
+
+msgid "Download notebook file"
+msgstr "Last ned notatbokfilen"
+
+msgid "Download source file"
+msgstr "Last ned kildefilen"
+
+msgid "Download this page"
+msgstr "Last ned denne siden"
+
+msgid "Edit this page"
+msgstr "Rediger denne siden"
+
+msgid "Fullscreen mode"
+msgstr "Fullskjerm-modus"
+
+msgid "Last updated on"
+msgstr "Sist oppdatert den"
+
+msgid "Launch"
+msgstr "Start"
+
+msgid "Open an issue"
+msgstr "Åpne et problem"
+
+msgid "Print to PDF"
+msgstr "Skriv ut til PDF"
+
+msgid "Source repository"
+msgstr "Kildedepot"
+
+msgid "Sphinx Book Theme"
+msgstr "Sphinx boktema"
+
+msgid "Theme by the"
+msgstr "Tema av"
+
+msgid "Toggle navigation"
+msgstr "Bytt navigasjon"
+
+msgid "next page"
+msgstr "neste side"
+
+msgid "open issue"
+msgstr "åpent nummer"
+
+msgid "previous page"
+msgstr "forrige side"
+
+msgid "repository"
+msgstr "oppbevaringssted"
+
+msgid "suggest edit"
+msgstr "foreslå redigering"
diff --git a/tirx/_static/locales/pl/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/pl/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..9ebb584f770
Binary files /dev/null and b/tirx/_static/locales/pl/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/pl/LC_MESSAGES/booktheme.po b/tirx/_static/locales/pl/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..a4822159fb9
--- /dev/null
+++ b/tirx/_static/locales/pl/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Przez"
+
+msgid "By"
+msgstr "Przez"
+
+msgid "Contents"
+msgstr "Zawartość"
+
+msgid "Copyright"
+msgstr "prawa autorskie"
+
+msgid "Download notebook file"
+msgstr "Pobierz plik notatnika"
+
+msgid "Download source file"
+msgstr "Pobierz plik źródłowy"
+
+msgid "Download this page"
+msgstr "Pobierz tę stronę"
+
+msgid "Edit this page"
+msgstr "Edytuj tę strone"
+
+msgid "Fullscreen mode"
+msgstr "Pełny ekran"
+
+msgid "Last updated on"
+msgstr "Ostatnia aktualizacja"
+
+msgid "Launch"
+msgstr "Uruchomić"
+
+msgid "Open an issue"
+msgstr "Otwórz problem"
+
+msgid "Print to PDF"
+msgstr "Drukuj do PDF"
+
+msgid "Source repository"
+msgstr "Repozytorium źródłowe"
+
+msgid "Sphinx Book Theme"
+msgstr "Motyw książki Sphinx"
+
+msgid "Theme by the"
+msgstr "Motyw autorstwa"
+
+msgid "Toggle navigation"
+msgstr "Przełącz nawigację"
+
+msgid "next page"
+msgstr "Następna strona"
+
+msgid "open issue"
+msgstr "otwarty problem"
+
+msgid "previous page"
+msgstr "Poprzednia strona"
+
+msgid "repository"
+msgstr "magazyn"
+
+msgid "suggest edit"
+msgstr "zaproponuj edycję"
diff --git a/tirx/_static/locales/pt/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/pt/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..d0ddb8728e1
Binary files /dev/null and b/tirx/_static/locales/pt/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/pt/LC_MESSAGES/booktheme.po b/tirx/_static/locales/pt/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..bbc872d0842
--- /dev/null
+++ b/tirx/_static/locales/pt/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Pelo"
+
+msgid "By"
+msgstr "De"
+
+msgid "Contents"
+msgstr "Conteúdo"
+
+msgid "Copyright"
+msgstr "direito autoral"
+
+msgid "Download notebook file"
+msgstr "Baixar arquivo de notebook"
+
+msgid "Download source file"
+msgstr "Baixar arquivo fonte"
+
+msgid "Download this page"
+msgstr "Baixe esta página"
+
+msgid "Edit this page"
+msgstr "Edite essa página"
+
+msgid "Fullscreen mode"
+msgstr "Modo tela cheia"
+
+msgid "Last updated on"
+msgstr "Última atualização em"
+
+msgid "Launch"
+msgstr "Lançamento"
+
+msgid "Open an issue"
+msgstr "Abra um problema"
+
+msgid "Print to PDF"
+msgstr "Imprimir em PDF"
+
+msgid "Source repository"
+msgstr "Repositório fonte"
+
+msgid "Sphinx Book Theme"
+msgstr "Tema do livro Sphinx"
+
+msgid "Theme by the"
+msgstr "Tema por"
+
+msgid "Toggle navigation"
+msgstr "Alternar de navegação"
+
+msgid "next page"
+msgstr "próxima página"
+
+msgid "open issue"
+msgstr "questão aberta"
+
+msgid "previous page"
+msgstr "página anterior"
+
+msgid "repository"
+msgstr "repositório"
+
+msgid "suggest edit"
+msgstr "sugerir edição"
diff --git a/tirx/_static/locales/ro/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/ro/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..3c36ab1df7c
Binary files /dev/null and b/tirx/_static/locales/ro/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/ro/LC_MESSAGES/booktheme.po b/tirx/_static/locales/ro/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..b9b8b4f39c4
--- /dev/null
+++ b/tirx/_static/locales/ro/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ro\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Langa"
+
+msgid "By"
+msgstr "De"
+
+msgid "Contents"
+msgstr "Cuprins"
+
+msgid "Copyright"
+msgstr "Drepturi de autor"
+
+msgid "Download notebook file"
+msgstr "Descărcați fișierul notebook"
+
+msgid "Download source file"
+msgstr "Descărcați fișierul sursă"
+
+msgid "Download this page"
+msgstr "Descarcă această pagină"
+
+msgid "Edit this page"
+msgstr "Editați această pagină"
+
+msgid "Fullscreen mode"
+msgstr "Modul ecran întreg"
+
+msgid "Last updated on"
+msgstr "Ultima actualizare la"
+
+msgid "Launch"
+msgstr "Lansa"
+
+msgid "Open an issue"
+msgstr "Deschideți o problemă"
+
+msgid "Print to PDF"
+msgstr "Imprimați în PDF"
+
+msgid "Source repository"
+msgstr "Depozit sursă"
+
+msgid "Sphinx Book Theme"
+msgstr "Tema Sphinx Book"
+
+msgid "Theme by the"
+msgstr "Tema de"
+
+msgid "Toggle navigation"
+msgstr "Comutare navigare"
+
+msgid "next page"
+msgstr "pagina următoare"
+
+msgid "open issue"
+msgstr "problema deschisă"
+
+msgid "previous page"
+msgstr "pagina anterioară"
+
+msgid "repository"
+msgstr "repertoriu"
+
+msgid "suggest edit"
+msgstr "sugerează editare"
diff --git a/tirx/_static/locales/ru/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/ru/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..5ea2e5c9f17
Binary files /dev/null and b/tirx/_static/locales/ru/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/ru/LC_MESSAGES/booktheme.po b/tirx/_static/locales/ru/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..e0f355514ab
--- /dev/null
+++ b/tirx/_static/locales/ru/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ru\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Посредством"
+
+msgid "By"
+msgstr "Автор:"
+
+msgid "Contents"
+msgstr "Содержание"
+
+msgid "Copyright"
+msgstr "авторское право"
+
+msgid "Download notebook file"
+msgstr "Скачать файл записной книжки"
+
+msgid "Download source file"
+msgstr "Скачать исходный файл"
+
+msgid "Download this page"
+msgstr "Загрузите эту страницу"
+
+msgid "Edit this page"
+msgstr "Редактировать эту страницу"
+
+msgid "Fullscreen mode"
+msgstr "Полноэкранный режим"
+
+msgid "Last updated on"
+msgstr "Последнее обновление"
+
+msgid "Launch"
+msgstr "Запуск"
+
+msgid "Open an issue"
+msgstr "Открыть вопрос"
+
+msgid "Print to PDF"
+msgstr "Распечатать в PDF"
+
+msgid "Source repository"
+msgstr "Исходный репозиторий"
+
+msgid "Sphinx Book Theme"
+msgstr "Тема книги Сфинкс"
+
+msgid "Theme by the"
+msgstr "Тема от"
+
+msgid "Toggle navigation"
+msgstr "Переключить навигацию"
+
+msgid "next page"
+msgstr "Следующая страница"
+
+msgid "open issue"
+msgstr "открытый вопрос"
+
+msgid "previous page"
+msgstr "Предыдущая страница"
+
+msgid "repository"
+msgstr "хранилище"
+
+msgid "suggest edit"
+msgstr "предложить редактировать"
diff --git a/tirx/_static/locales/sk/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/sk/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..59bd0ddfa34
Binary files /dev/null and b/tirx/_static/locales/sk/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/sk/LC_MESSAGES/booktheme.po b/tirx/_static/locales/sk/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..4b5225a36b1
--- /dev/null
+++ b/tirx/_static/locales/sk/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Podľa"
+
+msgid "By"
+msgstr "Autor:"
+
+msgid "Contents"
+msgstr "Obsah"
+
+msgid "Copyright"
+msgstr "Autorské práva"
+
+msgid "Download notebook file"
+msgstr "Stiahnite si zošit"
+
+msgid "Download source file"
+msgstr "Stiahnite si zdrojový súbor"
+
+msgid "Download this page"
+msgstr "Stiahnite si túto stránku"
+
+msgid "Edit this page"
+msgstr "Upraviť túto stránku"
+
+msgid "Fullscreen mode"
+msgstr "Režim celej obrazovky"
+
+msgid "Last updated on"
+msgstr "Posledná aktualizácia dňa"
+
+msgid "Launch"
+msgstr "Spustiť"
+
+msgid "Open an issue"
+msgstr "Otvorte problém"
+
+msgid "Print to PDF"
+msgstr "Tlač do PDF"
+
+msgid "Source repository"
+msgstr "Zdrojové úložisko"
+
+msgid "Sphinx Book Theme"
+msgstr "Téma knihy Sfinga"
+
+msgid "Theme by the"
+msgstr "Téma od"
+
+msgid "Toggle navigation"
+msgstr "Prepnúť navigáciu"
+
+msgid "next page"
+msgstr "ďalšia strana"
+
+msgid "open issue"
+msgstr "otvorené vydanie"
+
+msgid "previous page"
+msgstr "predchádzajúca strana"
+
+msgid "repository"
+msgstr "Úložisko"
+
+msgid "suggest edit"
+msgstr "navrhnúť úpravu"
diff --git a/tirx/_static/locales/sl/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/sl/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..87bf26de683
Binary files /dev/null and b/tirx/_static/locales/sl/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/sl/LC_MESSAGES/booktheme.po b/tirx/_static/locales/sl/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..45592e71cf3
--- /dev/null
+++ b/tirx/_static/locales/sl/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Avtor"
+
+msgid "By"
+msgstr "Avtor"
+
+msgid "Contents"
+msgstr "Vsebina"
+
+msgid "Copyright"
+msgstr "avtorske pravice"
+
+msgid "Download notebook file"
+msgstr "Prenesite datoteko zvezka"
+
+msgid "Download source file"
+msgstr "Prenesite izvorno datoteko"
+
+msgid "Download this page"
+msgstr "Prenesite to stran"
+
+msgid "Edit this page"
+msgstr "Uredite to stran"
+
+msgid "Fullscreen mode"
+msgstr "Celozaslonski način"
+
+msgid "Last updated on"
+msgstr "Nazadnje posodobljeno dne"
+
+msgid "Launch"
+msgstr "Kosilo"
+
+msgid "Open an issue"
+msgstr "Odprite številko"
+
+msgid "Print to PDF"
+msgstr "Natisni v PDF"
+
+msgid "Source repository"
+msgstr "Izvorno skladišče"
+
+msgid "Sphinx Book Theme"
+msgstr "Tema knjige Sphinx"
+
+msgid "Theme by the"
+msgstr "Tema avtorja"
+
+msgid "Toggle navigation"
+msgstr "Preklopi navigacijo"
+
+msgid "next page"
+msgstr "Naslednja stran"
+
+msgid "open issue"
+msgstr "odprto vprašanje"
+
+msgid "previous page"
+msgstr "Prejšnja stran"
+
+msgid "repository"
+msgstr "odlagališče"
+
+msgid "suggest edit"
+msgstr "predlagajte urejanje"
diff --git a/tirx/_static/locales/sr/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/sr/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..ec740f4852f
Binary files /dev/null and b/tirx/_static/locales/sr/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/sr/LC_MESSAGES/booktheme.po b/tirx/_static/locales/sr/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..4ddf693d150
--- /dev/null
+++ b/tirx/_static/locales/sr/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Од"
+
+msgid "By"
+msgstr "Од стране"
+
+msgid "Contents"
+msgstr "Садржај"
+
+msgid "Copyright"
+msgstr "Ауторско право"
+
+msgid "Download notebook file"
+msgstr "Преузмите датотеку бележнице"
+
+msgid "Download source file"
+msgstr "Преузми изворну датотеку"
+
+msgid "Download this page"
+msgstr "Преузмите ову страницу"
+
+msgid "Edit this page"
+msgstr "Уредите ову страницу"
+
+msgid "Fullscreen mode"
+msgstr "Режим целог екрана"
+
+msgid "Last updated on"
+msgstr "Последње ажурирање"
+
+msgid "Launch"
+msgstr "Лансирање"
+
+msgid "Open an issue"
+msgstr "Отворите издање"
+
+msgid "Print to PDF"
+msgstr "Испис у ПДФ"
+
+msgid "Source repository"
+msgstr "Изворно спремиште"
+
+msgid "Sphinx Book Theme"
+msgstr "Тема књиге Спхинк"
+
+msgid "Theme by the"
+msgstr "Тхеме би"
+
+msgid "Toggle navigation"
+msgstr "Укључи / искључи навигацију"
+
+msgid "next page"
+msgstr "Следећа страна"
+
+msgid "open issue"
+msgstr "отворено издање"
+
+msgid "previous page"
+msgstr "Претходна страница"
+
+msgid "repository"
+msgstr "спремиште"
+
+msgid "suggest edit"
+msgstr "предложи уређивање"
diff --git a/tirx/_static/locales/sv/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/sv/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..b07dc76ff21
Binary files /dev/null and b/tirx/_static/locales/sv/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/sv/LC_MESSAGES/booktheme.po b/tirx/_static/locales/sv/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..a5587a56786
--- /dev/null
+++ b/tirx/_static/locales/sv/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sv\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Av den"
+
+msgid "By"
+msgstr "Av"
+
+msgid "Contents"
+msgstr "Innehåll"
+
+msgid "Copyright"
+msgstr "Upphovsrätt"
+
+msgid "Download notebook file"
+msgstr "Ladda ner notebook-fil"
+
+msgid "Download source file"
+msgstr "Ladda ner källfil"
+
+msgid "Download this page"
+msgstr "Ladda ner den här sidan"
+
+msgid "Edit this page"
+msgstr "Redigera den här sidan"
+
+msgid "Fullscreen mode"
+msgstr "Fullskärmsläge"
+
+msgid "Last updated on"
+msgstr "Senast uppdaterad den"
+
+msgid "Launch"
+msgstr "Öppna"
+
+msgid "Open an issue"
+msgstr "Öppna en problemrapport"
+
+msgid "Print to PDF"
+msgstr "Skriv ut till PDF"
+
+msgid "Source repository"
+msgstr "Källkodsrepositorium"
+
+msgid "Sphinx Book Theme"
+msgstr "Sphinx Boktema"
+
+msgid "Theme by the"
+msgstr "Tema av"
+
+msgid "Toggle navigation"
+msgstr "Växla navigering"
+
+msgid "next page"
+msgstr "nästa sida"
+
+msgid "open issue"
+msgstr "öppna problemrapport"
+
+msgid "previous page"
+msgstr "föregående sida"
+
+msgid "repository"
+msgstr "repositorium"
+
+msgid "suggest edit"
+msgstr "föreslå ändring"
diff --git a/tirx/_static/locales/ta/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/ta/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..29f52e1f6f1
Binary files /dev/null and b/tirx/_static/locales/ta/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/ta/LC_MESSAGES/booktheme.po b/tirx/_static/locales/ta/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..fb871e23e56
--- /dev/null
+++ b/tirx/_static/locales/ta/LC_MESSAGES/booktheme.po
@@ -0,0 +1,66 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ta\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "மூலம்"
+
+msgid "By"
+msgstr "வழங்கியவர்"
+
+msgid "Copyright"
+msgstr "பதிப்புரிமை"
+
+msgid "Download notebook file"
+msgstr "நோட்புக் கோப்பைப் பதிவிறக்கவும்"
+
+msgid "Download source file"
+msgstr "மூல கோப்பைப் பதிவிறக்குக"
+
+msgid "Download this page"
+msgstr "இந்தப் பக்கத்தைப் பதிவிறக்கவும்"
+
+msgid "Edit this page"
+msgstr "இந்தப் பக்கத்தைத் திருத்தவும்"
+
+msgid "Last updated on"
+msgstr "கடைசியாக புதுப்பிக்கப்பட்டது"
+
+msgid "Launch"
+msgstr "தொடங்க"
+
+msgid "Open an issue"
+msgstr "சிக்கலைத் திறக்கவும்"
+
+msgid "Print to PDF"
+msgstr "PDF இல் அச்சிடுக"
+
+msgid "Source repository"
+msgstr "மூல களஞ்சியம்"
+
+msgid "Sphinx Book Theme"
+msgstr "ஸ்பிங்க்ஸ் புத்தக தீம்"
+
+msgid "Theme by the"
+msgstr "வழங்கிய தீம்"
+
+msgid "Toggle navigation"
+msgstr "வழிசெலுத்தலை நிலைமாற்று"
+
+msgid "next page"
+msgstr "அடுத்த பக்கம்"
+
+msgid "open issue"
+msgstr "திறந்த பிரச்சினை"
+
+msgid "previous page"
+msgstr "முந்தைய பக்கம்"
+
+msgid "suggest edit"
+msgstr "திருத்த பரிந்துரைக்கவும்"
diff --git a/tirx/_static/locales/te/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/te/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..0a5f4b46adf
Binary files /dev/null and b/tirx/_static/locales/te/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/te/LC_MESSAGES/booktheme.po b/tirx/_static/locales/te/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..22ab77c1575
--- /dev/null
+++ b/tirx/_static/locales/te/LC_MESSAGES/booktheme.po
@@ -0,0 +1,66 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: te\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "ద్వారా"
+
+msgid "By"
+msgstr "ద్వారా"
+
+msgid "Copyright"
+msgstr "కాపీరైట్"
+
+msgid "Download notebook file"
+msgstr "నోట్బుక్ ఫైల్ను డౌన్లోడ్ చేయండి"
+
+msgid "Download source file"
+msgstr "మూల ఫైల్‌ను డౌన్‌లోడ్ చేయండి"
+
+msgid "Download this page"
+msgstr "ఈ పేజీని డౌన్‌లోడ్ చేయండి"
+
+msgid "Edit this page"
+msgstr "ఈ పేజీని సవరించండి"
+
+msgid "Last updated on"
+msgstr "చివరిగా నవీకరించబడింది"
+
+msgid "Launch"
+msgstr "ప్రారంభించండి"
+
+msgid "Open an issue"
+msgstr "సమస్యను తెరవండి"
+
+msgid "Print to PDF"
+msgstr "PDF కి ముద్రించండి"
+
+msgid "Source repository"
+msgstr "మూల రిపోజిటరీ"
+
+msgid "Sphinx Book Theme"
+msgstr "సింహిక పుస్తక థీమ్"
+
+msgid "Theme by the"
+msgstr "ద్వారా థీమ్"
+
+msgid "Toggle navigation"
+msgstr "నావిగేషన్‌ను టోగుల్ చేయండి"
+
+msgid "next page"
+msgstr "తరువాతి పేజీ"
+
+msgid "open issue"
+msgstr "ఓపెన్ ఇష్యూ"
+
+msgid "previous page"
+msgstr "ముందు పేజి"
+
+msgid "suggest edit"
+msgstr "సవరించమని సూచించండి"
diff --git a/tirx/_static/locales/tg/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/tg/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..b21c6c63401
Binary files /dev/null and b/tirx/_static/locales/tg/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/tg/LC_MESSAGES/booktheme.po b/tirx/_static/locales/tg/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..e499352dbef
--- /dev/null
+++ b/tirx/_static/locales/tg/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tg\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Бо"
+
+msgid "By"
+msgstr "Бо"
+
+msgid "Contents"
+msgstr "Мундариҷа"
+
+msgid "Copyright"
+msgstr "Ҳуқуқи муаллиф"
+
+msgid "Download notebook file"
+msgstr "Файли дафтарро зеркашӣ кунед"
+
+msgid "Download source file"
+msgstr "Файли манбаъро зеркашӣ кунед"
+
+msgid "Download this page"
+msgstr "Ин саҳифаро зеркашӣ кунед"
+
+msgid "Edit this page"
+msgstr "Ин саҳифаро таҳрир кунед"
+
+msgid "Fullscreen mode"
+msgstr "Ҳолати экрани пурра"
+
+msgid "Last updated on"
+msgstr "Last навсозӣ дар"
+
+msgid "Launch"
+msgstr "Оғоз"
+
+msgid "Open an issue"
+msgstr "Масъаларо кушоед"
+
+msgid "Print to PDF"
+msgstr "Чоп ба PDF"
+
+msgid "Source repository"
+msgstr "Анбори манбаъ"
+
+msgid "Sphinx Book Theme"
+msgstr "Сфинкс Мавзӯи китоб"
+
+msgid "Theme by the"
+msgstr "Мавзӯъи аз"
+
+msgid "Toggle navigation"
+msgstr "Гузаришро иваз кунед"
+
+msgid "next page"
+msgstr "саҳифаи оянда"
+
+msgid "open issue"
+msgstr "барориши кушод"
+
+msgid "previous page"
+msgstr "саҳифаи қаблӣ"
+
+msgid "repository"
+msgstr "анбор"
+
+msgid "suggest edit"
+msgstr "пешниҳод вироиш"
diff --git a/tirx/_static/locales/th/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/th/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..abede98aa11
Binary files /dev/null and b/tirx/_static/locales/th/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/th/LC_MESSAGES/booktheme.po b/tirx/_static/locales/th/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..6f0103ea28d
--- /dev/null
+++ b/tirx/_static/locales/th/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: th\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "โดย"
+
+msgid "By"
+msgstr "โดย"
+
+msgid "Contents"
+msgstr "สารบัญ"
+
+msgid "Copyright"
+msgstr "ลิขสิทธิ์"
+
+msgid "Download notebook file"
+msgstr "ดาวน์โหลดไฟล์สมุดบันทึก"
+
+msgid "Download source file"
+msgstr "ดาวน์โหลดไฟล์ต้นฉบับ"
+
+msgid "Download this page"
+msgstr "ดาวน์โหลดหน้านี้"
+
+msgid "Edit this page"
+msgstr "แก้ไขหน้านี้"
+
+msgid "Fullscreen mode"
+msgstr "โหมดเต็มหน้าจอ"
+
+msgid "Last updated on"
+msgstr "ปรับปรุงล่าสุดเมื่อ"
+
+msgid "Launch"
+msgstr "เปิด"
+
+msgid "Open an issue"
+msgstr "เปิดปัญหา"
+
+msgid "Print to PDF"
+msgstr "พิมพ์เป็น PDF"
+
+msgid "Source repository"
+msgstr "ที่เก็บซอร์ส"
+
+msgid "Sphinx Book Theme"
+msgstr "ธีมหนังสือสฟิงซ์"
+
+msgid "Theme by the"
+msgstr "ธีมโดย"
+
+msgid "Toggle navigation"
+msgstr "ไม่ต้องสลับช่องทาง"
+
+msgid "next page"
+msgstr "หน้าต่อไป"
+
+msgid "open issue"
+msgstr "เปิดปัญหา"
+
+msgid "previous page"
+msgstr "หน้าที่แล้ว"
+
+msgid "repository"
+msgstr "ที่เก็บ"
+
+msgid "suggest edit"
+msgstr "แนะนำแก้ไข"
diff --git a/tirx/_static/locales/tl/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/tl/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..8df1b73310e
Binary files /dev/null and b/tirx/_static/locales/tl/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/tl/LC_MESSAGES/booktheme.po b/tirx/_static/locales/tl/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..dbeb2565d3c
--- /dev/null
+++ b/tirx/_static/locales/tl/LC_MESSAGES/booktheme.po
@@ -0,0 +1,66 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Sa pamamagitan ng"
+
+msgid "By"
+msgstr "Ni"
+
+msgid "Copyright"
+msgstr "Copyright"
+
+msgid "Download notebook file"
+msgstr "Mag-download ng file ng notebook"
+
+msgid "Download source file"
+msgstr "Mag-download ng file ng pinagmulan"
+
+msgid "Download this page"
+msgstr "I-download ang pahinang ito"
+
+msgid "Edit this page"
+msgstr "I-edit ang pahinang ito"
+
+msgid "Last updated on"
+msgstr "Huling na-update noong"
+
+msgid "Launch"
+msgstr "Ilunsad"
+
+msgid "Open an issue"
+msgstr "Magbukas ng isyu"
+
+msgid "Print to PDF"
+msgstr "I-print sa PDF"
+
+msgid "Source repository"
+msgstr "Pinagmulan ng imbakan"
+
+msgid "Sphinx Book Theme"
+msgstr "Tema ng Sphinx Book"
+
+msgid "Theme by the"
+msgstr "Tema ng"
+
+msgid "Toggle navigation"
+msgstr "I-toggle ang pag-navigate"
+
+msgid "next page"
+msgstr "Susunod na pahina"
+
+msgid "open issue"
+msgstr "bukas na isyu"
+
+msgid "previous page"
+msgstr "Nakaraang pahina"
+
+msgid "suggest edit"
+msgstr "iminumungkahi i-edit"
diff --git a/tirx/_static/locales/tr/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/tr/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..029ae18afb5
Binary files /dev/null and b/tirx/_static/locales/tr/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/tr/LC_MESSAGES/booktheme.po b/tirx/_static/locales/tr/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..610c1ab0262
--- /dev/null
+++ b/tirx/_static/locales/tr/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Tarafından"
+
+msgid "By"
+msgstr "Tarafından"
+
+msgid "Contents"
+msgstr "İçindekiler"
+
+msgid "Copyright"
+msgstr "Telif hakkı"
+
+msgid "Download notebook file"
+msgstr "Defter dosyasını indirin"
+
+msgid "Download source file"
+msgstr "Kaynak dosyayı indirin"
+
+msgid "Download this page"
+msgstr "Bu sayfayı indirin"
+
+msgid "Edit this page"
+msgstr "Bu sayfayı düzenle"
+
+msgid "Fullscreen mode"
+msgstr "Tam ekran modu"
+
+msgid "Last updated on"
+msgstr "Son güncelleme tarihi"
+
+msgid "Launch"
+msgstr "Başlatmak"
+
+msgid "Open an issue"
+msgstr "Bir sorunu açın"
+
+msgid "Print to PDF"
+msgstr "PDF olarak yazdır"
+
+msgid "Source repository"
+msgstr "Kaynak kod deposu"
+
+msgid "Sphinx Book Theme"
+msgstr "Sfenks Kitap Teması"
+
+msgid "Theme by the"
+msgstr "Tarafından tema"
+
+msgid "Toggle navigation"
+msgstr "Gezinmeyi değiştir"
+
+msgid "next page"
+msgstr "sonraki Sayfa"
+
+msgid "open issue"
+msgstr "Açık konu"
+
+msgid "previous page"
+msgstr "önceki sayfa"
+
+msgid "repository"
+msgstr "depo"
+
+msgid "suggest edit"
+msgstr "düzenleme öner"
diff --git a/tirx/_static/locales/uk/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/uk/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..16ab78909cf
Binary files /dev/null and b/tirx/_static/locales/uk/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/uk/LC_MESSAGES/booktheme.po b/tirx/_static/locales/uk/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..8ae61c4851c
--- /dev/null
+++ b/tirx/_static/locales/uk/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: uk\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "По"
+
+msgid "By"
+msgstr "Автор"
+
+msgid "Contents"
+msgstr "Зміст"
+
+msgid "Copyright"
+msgstr "Авторське право"
+
+msgid "Download notebook file"
+msgstr "Завантажте файл блокнота"
+
+msgid "Download source file"
+msgstr "Завантажити вихідний файл"
+
+msgid "Download this page"
+msgstr "Завантажте цю сторінку"
+
+msgid "Edit this page"
+msgstr "Редагувати цю сторінку"
+
+msgid "Fullscreen mode"
+msgstr "Повноекранний режим"
+
+msgid "Last updated on"
+msgstr "Останнє оновлення:"
+
+msgid "Launch"
+msgstr "Запуск"
+
+msgid "Open an issue"
+msgstr "Відкрийте випуск"
+
+msgid "Print to PDF"
+msgstr "Друк у форматі PDF"
+
+msgid "Source repository"
+msgstr "Джерело сховища"
+
+msgid "Sphinx Book Theme"
+msgstr "Тема книги \"Сфінкс\""
+
+msgid "Theme by the"
+msgstr "Тема від"
+
+msgid "Toggle navigation"
+msgstr "Переключити навігацію"
+
+msgid "next page"
+msgstr "Наступна сторінка"
+
+msgid "open issue"
+msgstr "відкритий випуск"
+
+msgid "previous page"
+msgstr "Попередня сторінка"
+
+msgid "repository"
+msgstr "сховище"
+
+msgid "suggest edit"
+msgstr "запропонувати редагувати"
diff --git a/tirx/_static/locales/ur/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/ur/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..de8c84b935e
Binary files /dev/null and b/tirx/_static/locales/ur/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/ur/LC_MESSAGES/booktheme.po b/tirx/_static/locales/ur/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..63018eaecf6
--- /dev/null
+++ b/tirx/_static/locales/ur/LC_MESSAGES/booktheme.po
@@ -0,0 +1,66 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ur\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "کی طرف"
+
+msgid "By"
+msgstr "بذریعہ"
+
+msgid "Copyright"
+msgstr "کاپی رائٹ"
+
+msgid "Download notebook file"
+msgstr "نوٹ بک فائل ڈاؤن لوڈ کریں"
+
+msgid "Download source file"
+msgstr "سورس فائل ڈاؤن لوڈ کریں"
+
+msgid "Download this page"
+msgstr "اس صفحے کو ڈاؤن لوڈ کریں"
+
+msgid "Edit this page"
+msgstr "اس صفحے میں ترمیم کریں"
+
+msgid "Last updated on"
+msgstr "آخری بار تازہ کاری ہوئی"
+
+msgid "Launch"
+msgstr "لانچ کریں"
+
+msgid "Open an issue"
+msgstr "ایک مسئلہ کھولیں"
+
+msgid "Print to PDF"
+msgstr "پی ڈی ایف پرنٹ کریں"
+
+msgid "Source repository"
+msgstr "ماخذ ذخیرہ"
+
+msgid "Sphinx Book Theme"
+msgstr "سپنکس بک تھیم"
+
+msgid "Theme by the"
+msgstr "کے ذریعہ تھیم"
+
+msgid "Toggle navigation"
+msgstr "نیویگیشن ٹوگل کریں"
+
+msgid "next page"
+msgstr "اگلا صفحہ"
+
+msgid "open issue"
+msgstr "کھلا مسئلہ"
+
+msgid "previous page"
+msgstr "سابقہ ​​صفحہ"
+
+msgid "suggest edit"
+msgstr "ترمیم کی تجویز کریں"
diff --git a/tirx/_static/locales/vi/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/vi/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..2bb32555c3e
Binary files /dev/null and b/tirx/_static/locales/vi/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/vi/LC_MESSAGES/booktheme.po b/tirx/_static/locales/vi/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..ac91b0f16c6
--- /dev/null
+++ b/tirx/_static/locales/vi/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: vi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "Bằng"
+
+msgid "By"
+msgstr "Bởi"
+
+msgid "Contents"
+msgstr "Nội dung"
+
+msgid "Copyright"
+msgstr "Bản quyền"
+
+msgid "Download notebook file"
+msgstr "Tải xuống tệp sổ tay"
+
+msgid "Download source file"
+msgstr "Tải xuống tệp nguồn"
+
+msgid "Download this page"
+msgstr "Tải xuống trang này"
+
+msgid "Edit this page"
+msgstr "chỉnh sửa trang này"
+
+msgid "Fullscreen mode"
+msgstr "Chế độ toàn màn hình"
+
+msgid "Last updated on"
+msgstr "Cập nhật lần cuối vào"
+
+msgid "Launch"
+msgstr "Phóng"
+
+msgid "Open an issue"
+msgstr "Mở một vấn đề"
+
+msgid "Print to PDF"
+msgstr "In sang PDF"
+
+msgid "Source repository"
+msgstr "Kho nguồn"
+
+msgid "Sphinx Book Theme"
+msgstr "Chủ đề sách nhân sư"
+
+msgid "Theme by the"
+msgstr "Chủ đề của"
+
+msgid "Toggle navigation"
+msgstr "Chuyển đổi điều hướng thành"
+
+msgid "next page"
+msgstr "Trang tiếp theo"
+
+msgid "open issue"
+msgstr "vấn đề mở"
+
+msgid "previous page"
+msgstr "trang trước"
+
+msgid "repository"
+msgstr "kho"
+
+msgid "suggest edit"
+msgstr "đề nghị chỉnh sửa"
diff --git a/tirx/_static/locales/zh_CN/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/zh_CN/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..0e3235d090c
Binary files /dev/null and b/tirx/_static/locales/zh_CN/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/zh_CN/LC_MESSAGES/booktheme.po b/tirx/_static/locales/zh_CN/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..ff1c9383c81
--- /dev/null
+++ b/tirx/_static/locales/zh_CN/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_CN\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "作者:"
+
+msgid "By"
+msgstr "作者:"
+
+msgid "Contents"
+msgstr "目录"
+
+msgid "Copyright"
+msgstr "版权"
+
+msgid "Download notebook file"
+msgstr "下载笔记本文件"
+
+msgid "Download source file"
+msgstr "下载源文件"
+
+msgid "Download this page"
+msgstr "下载此页面"
+
+msgid "Edit this page"
+msgstr "编辑此页面"
+
+msgid "Fullscreen mode"
+msgstr "全屏模式"
+
+msgid "Last updated on"
+msgstr "上次更新时间:"
+
+msgid "Launch"
+msgstr "启动"
+
+msgid "Open an issue"
+msgstr "创建议题"
+
+msgid "Print to PDF"
+msgstr "列印成 PDF"
+
+msgid "Source repository"
+msgstr "源码库"
+
+msgid "Sphinx Book Theme"
+msgstr "Sphinx Book 主题"
+
+msgid "Theme by the"
+msgstr "主题作者:"
+
+msgid "Toggle navigation"
+msgstr "显示或隐藏导航栏"
+
+msgid "next page"
+msgstr "下一页"
+
+msgid "open issue"
+msgstr "创建议题"
+
+msgid "previous page"
+msgstr "上一页"
+
+msgid "repository"
+msgstr "仓库"
+
+msgid "suggest edit"
+msgstr "提出修改建议"
diff --git a/tirx/_static/locales/zh_TW/LC_MESSAGES/booktheme.mo b/tirx/_static/locales/zh_TW/LC_MESSAGES/booktheme.mo
new file mode 100644
index 00000000000..9116fa95d0a
Binary files /dev/null and b/tirx/_static/locales/zh_TW/LC_MESSAGES/booktheme.mo differ
diff --git a/tirx/_static/locales/zh_TW/LC_MESSAGES/booktheme.po b/tirx/_static/locales/zh_TW/LC_MESSAGES/booktheme.po
new file mode 100644
index 00000000000..f2b300fa87f
--- /dev/null
+++ b/tirx/_static/locales/zh_TW/LC_MESSAGES/booktheme.po
@@ -0,0 +1,75 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx-Book-Theme\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_TW\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "By the"
+msgstr "作者:"
+
+msgid "By"
+msgstr "作者:"
+
+msgid "Contents"
+msgstr "目錄"
+
+msgid "Copyright"
+msgstr "Copyright"
+
+msgid "Download notebook file"
+msgstr "下載 Notebook 檔案"
+
+msgid "Download source file"
+msgstr "下載原始檔"
+
+msgid "Download this page"
+msgstr "下載此頁面"
+
+msgid "Edit this page"
+msgstr "編輯此頁面"
+
+msgid "Fullscreen mode"
+msgstr "全螢幕模式"
+
+msgid "Last updated on"
+msgstr "最後更新時間:"
+
+msgid "Launch"
+msgstr "啟動"
+
+msgid "Open an issue"
+msgstr "開啟議題"
+
+msgid "Print to PDF"
+msgstr "列印成 PDF"
+
+msgid "Source repository"
+msgstr "來源儲存庫"
+
+msgid "Sphinx Book Theme"
+msgstr "Sphinx Book 佈景主題"
+
+msgid "Theme by the"
+msgstr "佈景主題作者:"
+
+msgid "Toggle navigation"
+msgstr "顯示或隱藏導覽列"
+
+msgid "next page"
+msgstr "下一頁"
+
+msgid "open issue"
+msgstr "公開的問題"
+
+msgid "previous page"
+msgstr "上一頁"
+
+msgid "repository"
+msgstr "儲存庫"
+
+msgid "suggest edit"
+msgstr "提出修改建議"
diff --git a/tirx/_static/minus.png b/tirx/_static/minus.png
new file mode 100644
index 00000000000..d96755fdaf8
Binary files /dev/null and b/tirx/_static/minus.png differ
diff --git a/tirx/_static/plus.png b/tirx/_static/plus.png
new file mode 100644
index 00000000000..7107cec93a9
Binary files /dev/null and b/tirx/_static/plus.png differ
diff --git a/tirx/_static/pygments.css b/tirx/_static/pygments.css
new file mode 100644
index 00000000000..d7dd57783f9
--- /dev/null
+++ b/tirx/_static/pygments.css
@@ -0,0 +1,152 @@
+html[data-theme="light"] .highlight pre { line-height: 125%; }
+html[data-theme="light"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+html[data-theme="light"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+html[data-theme="light"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+html[data-theme="light"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+html[data-theme="light"] .highlight .hll { background-color: #fae4c2 }
+html[data-theme="light"] .highlight { background: #fefefe; color: #080808 }
+html[data-theme="light"] .highlight .c { color: #515151 } /* Comment */
+html[data-theme="light"] .highlight .err { color: #A12236 } /* Error */
+html[data-theme="light"] .highlight .k { color: #6730C5 } /* Keyword */
+html[data-theme="light"] .highlight .l { color: #7F4707 } /* Literal */
+html[data-theme="light"] .highlight .n { color: #080808 } /* Name */
+html[data-theme="light"] .highlight .o { color: #00622F } /* Operator */
+html[data-theme="light"] .highlight .p { color: #080808 } /* Punctuation */
+html[data-theme="light"] .highlight .ch { color: #515151 } /* Comment.Hashbang */
+html[data-theme="light"] .highlight .cm { color: #515151 } /* Comment.Multiline */
+html[data-theme="light"] .highlight .cp { color: #515151 } /* Comment.Preproc */
+html[data-theme="light"] .highlight .cpf { color: #515151 } /* Comment.PreprocFile */
+html[data-theme="light"] .highlight .c1 { color: #515151 } /* Comment.Single */
+html[data-theme="light"] .highlight .cs { color: #515151 } /* Comment.Special */
+html[data-theme="light"] .highlight .gd { color: #005B82 } /* Generic.Deleted */
+html[data-theme="light"] .highlight .ge { font-style: italic } /* Generic.Emph */
+html[data-theme="light"] .highlight .gh { color: #005B82 } /* Generic.Heading */
+html[data-theme="light"] .highlight .gs { font-weight: bold } /* Generic.Strong */
+html[data-theme="light"] .highlight .gu { color: #005B82 } /* Generic.Subheading */
+html[data-theme="light"] .highlight .kc { color: #6730C5 } /* Keyword.Constant */
+html[data-theme="light"] .highlight .kd { color: #6730C5 } /* Keyword.Declaration */
+html[data-theme="light"] .highlight .kn { color: #6730C5 } /* Keyword.Namespace */
+html[data-theme="light"] .highlight .kp { color: #6730C5 } /* Keyword.Pseudo */
+html[data-theme="light"] .highlight .kr { color: #6730C5 } /* Keyword.Reserved */
+html[data-theme="light"] .highlight .kt { color: #7F4707 } /* Keyword.Type */
+html[data-theme="light"] .highlight .ld { color: #7F4707 } /* Literal.Date */
+html[data-theme="light"] .highlight .m { color: #7F4707 } /* Literal.Number */
+html[data-theme="light"] .highlight .s { color: #00622F } /* Literal.String */
+html[data-theme="light"] .highlight .na { color: #912583 } /* Name.Attribute */
+html[data-theme="light"] .highlight .nb { color: #7F4707 } /* Name.Builtin */
+html[data-theme="light"] .highlight .nc { color: #005B82 } /* Name.Class */
+html[data-theme="light"] .highlight .no { color: #005B82 } /* Name.Constant */
+html[data-theme="light"] .highlight .nd { color: #7F4707 } /* Name.Decorator */
+html[data-theme="light"] .highlight .ni { color: #00622F } /* Name.Entity */
+html[data-theme="light"] .highlight .ne { color: #6730C5 } /* Name.Exception */
+html[data-theme="light"] .highlight .nf { color: #005B82 } /* Name.Function */
+html[data-theme="light"] .highlight .nl { color: #7F4707 } /* Name.Label */
+html[data-theme="light"] .highlight .nn { color: #080808 } /* Name.Namespace */
+html[data-theme="light"] .highlight .nx { color: #080808 } /* Name.Other */
+html[data-theme="light"] .highlight .py { color: #005B82 } /* Name.Property */
+html[data-theme="light"] .highlight .nt { color: #005B82 } /* Name.Tag */
+html[data-theme="light"] .highlight .nv { color: #A12236 } /* Name.Variable */
+html[data-theme="light"] .highlight .ow { color: #6730C5 } /* Operator.Word */
+html[data-theme="light"] .highlight .pm { color: #080808 } /* Punctuation.Marker */
+html[data-theme="light"] .highlight .w { color: #080808 } /* Text.Whitespace */
+html[data-theme="light"] .highlight .mb { color: #7F4707 } /* Literal.Number.Bin */
+html[data-theme="light"] .highlight .mf { color: #7F4707 } /* Literal.Number.Float */
+html[data-theme="light"] .highlight .mh { color: #7F4707 } /* Literal.Number.Hex */
+html[data-theme="light"] .highlight .mi { color: #7F4707 } /* Literal.Number.Integer */
+html[data-theme="light"] .highlight .mo { color: #7F4707 } /* Literal.Number.Oct */
+html[data-theme="light"] .highlight .sa { color: #00622F } /* Literal.String.Affix */
+html[data-theme="light"] .highlight .sb { color: #00622F } /* Literal.String.Backtick */
+html[data-theme="light"] .highlight .sc { color: #00622F } /* Literal.String.Char */
+html[data-theme="light"] .highlight .dl { color: #00622F } /* Literal.String.Delimiter */
+html[data-theme="light"] .highlight .sd { color: #00622F } /* Literal.String.Doc */
+html[data-theme="light"] .highlight .s2 { color: #00622F } /* Literal.String.Double */
+html[data-theme="light"] .highlight .se { color: #00622F } /* Literal.String.Escape */
+html[data-theme="light"] .highlight .sh { color: #00622F } /* Literal.String.Heredoc */
+html[data-theme="light"] .highlight .si { color: #00622F } /* Literal.String.Interpol */
+html[data-theme="light"] .highlight .sx { color: #00622F } /* Literal.String.Other */
+html[data-theme="light"] .highlight .sr { color: #A12236 } /* Literal.String.Regex */
+html[data-theme="light"] .highlight .s1 { color: #00622F } /* Literal.String.Single */
+html[data-theme="light"] .highlight .ss { color: #005B82 } /* Literal.String.Symbol */
+html[data-theme="light"] .highlight .bp { color: #7F4707 } /* Name.Builtin.Pseudo */
+html[data-theme="light"] .highlight .fm { color: #005B82 } /* Name.Function.Magic */
+html[data-theme="light"] .highlight .vc { color: #A12236 } /* Name.Variable.Class */
+html[data-theme="light"] .highlight .vg { color: #A12236 } /* Name.Variable.Global */
+html[data-theme="light"] .highlight .vi { color: #A12236 } /* Name.Variable.Instance */
+html[data-theme="light"] .highlight .vm { color: #7F4707 } /* Name.Variable.Magic */
+html[data-theme="light"] .highlight .il { color: #7F4707 } /* Literal.Number.Integer.Long */
+html[data-theme="dark"] .highlight pre { line-height: 125%; }
+html[data-theme="dark"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+html[data-theme="dark"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+html[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+html[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+html[data-theme="dark"] .highlight .hll { background-color: #ffd9002e }
+html[data-theme="dark"] .highlight { background: #2b2b2b; color: #F8F8F2 }
+html[data-theme="dark"] .highlight .c { color: #FFD900 } /* Comment */
+html[data-theme="dark"] .highlight .err { color: #FFA07A } /* Error */
+html[data-theme="dark"] .highlight .k { color: #DCC6E0 } /* Keyword */
+html[data-theme="dark"] .highlight .l { color: #FFD900 } /* Literal */
+html[data-theme="dark"] .highlight .n { color: #F8F8F2 } /* Name */
+html[data-theme="dark"] .highlight .o { color: #ABE338 } /* Operator */
+html[data-theme="dark"] .highlight .p { color: #F8F8F2 } /* Punctuation */
+html[data-theme="dark"] .highlight .ch { color: #FFD900 } /* Comment.Hashbang */
+html[data-theme="dark"] .highlight .cm { color: #FFD900 } /* Comment.Multiline */
+html[data-theme="dark"] .highlight .cp { color: #FFD900 } /* Comment.Preproc */
+html[data-theme="dark"] .highlight .cpf { color: #FFD900 } /* Comment.PreprocFile */
+html[data-theme="dark"] .highlight .c1 { color: #FFD900 } /* Comment.Single */
+html[data-theme="dark"] .highlight .cs { color: #FFD900 } /* Comment.Special */
+html[data-theme="dark"] .highlight .gd { color: #00E0E0 } /* Generic.Deleted */
+html[data-theme="dark"] .highlight .ge { font-style: italic } /* Generic.Emph */
+html[data-theme="dark"] .highlight .gh { color: #00E0E0 } /* Generic.Heading */
+html[data-theme="dark"] .highlight .gs { font-weight: bold } /* Generic.Strong */
+html[data-theme="dark"] .highlight .gu { color: #00E0E0 } /* Generic.Subheading */
+html[data-theme="dark"] .highlight .kc { color: #DCC6E0 } /* Keyword.Constant */
+html[data-theme="dark"] .highlight .kd { color: #DCC6E0 } /* Keyword.Declaration */
+html[data-theme="dark"] .highlight .kn { color: #DCC6E0 } /* Keyword.Namespace */
+html[data-theme="dark"] .highlight .kp { color: #DCC6E0 } /* Keyword.Pseudo */
+html[data-theme="dark"] .highlight .kr { color: #DCC6E0 } /* Keyword.Reserved */
+html[data-theme="dark"] .highlight .kt { color: #FFD900 } /* Keyword.Type */
+html[data-theme="dark"] .highlight .ld { color: #FFD900 } /* Literal.Date */
+html[data-theme="dark"] .highlight .m { color: #FFD900 } /* Literal.Number */
+html[data-theme="dark"] .highlight .s { color: #ABE338 } /* Literal.String */
+html[data-theme="dark"] .highlight .na { color: #FFD900 } /* Name.Attribute */
+html[data-theme="dark"] .highlight .nb { color: #FFD900 } /* Name.Builtin */
+html[data-theme="dark"] .highlight .nc { color: #00E0E0 } /* Name.Class */
+html[data-theme="dark"] .highlight .no { color: #00E0E0 } /* Name.Constant */
+html[data-theme="dark"] .highlight .nd { color: #FFD900 } /* Name.Decorator */
+html[data-theme="dark"] .highlight .ni { color: #ABE338 } /* Name.Entity */
+html[data-theme="dark"] .highlight .ne { color: #DCC6E0 } /* Name.Exception */
+html[data-theme="dark"] .highlight .nf { color: #00E0E0 } /* Name.Function */
+html[data-theme="dark"] .highlight .nl { color: #FFD900 } /* Name.Label */
+html[data-theme="dark"] .highlight .nn { color: #F8F8F2 } /* Name.Namespace */
+html[data-theme="dark"] .highlight .nx { color: #F8F8F2 } /* Name.Other */
+html[data-theme="dark"] .highlight .py { color: #00E0E0 } /* Name.Property */
+html[data-theme="dark"] .highlight .nt { color: #00E0E0 } /* Name.Tag */
+html[data-theme="dark"] .highlight .nv { color: #FFA07A } /* Name.Variable */
+html[data-theme="dark"] .highlight .ow { color: #DCC6E0 } /* Operator.Word */
+html[data-theme="dark"] .highlight .pm { color: #F8F8F2 } /* Punctuation.Marker */
+html[data-theme="dark"] .highlight .w { color: #F8F8F2 } /* Text.Whitespace */
+html[data-theme="dark"] .highlight .mb { color: #FFD900 } /* Literal.Number.Bin */
+html[data-theme="dark"] .highlight .mf { color: #FFD900 } /* Literal.Number.Float */
+html[data-theme="dark"] .highlight .mh { color: #FFD900 } /* Literal.Number.Hex */
+html[data-theme="dark"] .highlight .mi { color: #FFD900 } /* Literal.Number.Integer */
+html[data-theme="dark"] .highlight .mo { color: #FFD900 } /* Literal.Number.Oct */
+html[data-theme="dark"] .highlight .sa { color: #ABE338 } /* Literal.String.Affix */
+html[data-theme="dark"] .highlight .sb { color: #ABE338 } /* Literal.String.Backtick */
+html[data-theme="dark"] .highlight .sc { color: #ABE338 } /* Literal.String.Char */
+html[data-theme="dark"] .highlight .dl { color: #ABE338 } /* Literal.String.Delimiter */
+html[data-theme="dark"] .highlight .sd { color: #ABE338 } /* Literal.String.Doc */
+html[data-theme="dark"] .highlight .s2 { color: #ABE338 } /* Literal.String.Double */
+html[data-theme="dark"] .highlight .se { color: #ABE338 } /* Literal.String.Escape */
+html[data-theme="dark"] .highlight .sh { color: #ABE338 } /* Literal.String.Heredoc */
+html[data-theme="dark"] .highlight .si { color: #ABE338 } /* Literal.String.Interpol */
+html[data-theme="dark"] .highlight .sx { color: #ABE338 } /* Literal.String.Other */
+html[data-theme="dark"] .highlight .sr { color: #FFA07A } /* Literal.String.Regex */
+html[data-theme="dark"] .highlight .s1 { color: #ABE338 } /* Literal.String.Single */
+html[data-theme="dark"] .highlight .ss { color: #00E0E0 } /* Literal.String.Symbol */
+html[data-theme="dark"] .highlight .bp { color: #FFD900 } /* Name.Builtin.Pseudo */
+html[data-theme="dark"] .highlight .fm { color: #00E0E0 } /* Name.Function.Magic */
+html[data-theme="dark"] .highlight .vc { color: #FFA07A } /* Name.Variable.Class */
+html[data-theme="dark"] .highlight .vg { color: #FFA07A } /* Name.Variable.Global */
+html[data-theme="dark"] .highlight .vi { color: #FFA07A } /* Name.Variable.Instance */
+html[data-theme="dark"] .highlight .vm { color: #FFD900 } /* Name.Variable.Magic */
+html[data-theme="dark"] .highlight .il { color: #FFD900 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/tirx/_static/sbt-webpack-macros.html b/tirx/_static/sbt-webpack-macros.html
new file mode 100644
index 00000000000..6cbf559faac
--- /dev/null
+++ b/tirx/_static/sbt-webpack-macros.html
@@ -0,0 +1,11 @@
+<!--
+  All these macros are auto-generated and must **NOT** be edited by hand.
+  See the webpack.config.js file, to learn more about how this is generated.
+-->
+{% macro head_pre_bootstrap() %}
+  <link href="{{ pathto('_static/styles/sphinx-book-theme.css', 1) }}" rel="stylesheet">
+{% endmacro %}
+
+{% macro body_post() %}
+  <script src="{{ pathto('_static/scripts/sphinx-book-theme.js', 1) }}"></script>
+{% endmacro %}
diff --git a/tirx/_static/scripts/bootstrap.js b/tirx/_static/scripts/bootstrap.js
new file mode 100644
index 00000000000..92d9df996ac
--- /dev/null
+++ b/tirx/_static/scripts/bootstrap.js
@@ -0,0 +1,3 @@
+/*! For license information please see bootstrap.js.LICENSE.txt */
+(()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{afterMain:()=>E,afterRead:()=>v,afterWrite:()=>T,applyStyles:()=>$,arrow:()=>J,auto:()=>a,basePlacements:()=>l,beforeMain:()=>y,bef [...]
+//# sourceMappingURL=bootstrap.js.map
\ No newline at end of file
diff --git a/tirx/_static/scripts/bootstrap.js.LICENSE.txt b/tirx/_static/scripts/bootstrap.js.LICENSE.txt
new file mode 100644
index 00000000000..28755c2c5bb
--- /dev/null
+++ b/tirx/_static/scripts/bootstrap.js.LICENSE.txt
@@ -0,0 +1,5 @@
+/*!
+  * Bootstrap v5.3.3 (https://getbootstrap.com/)
+  * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+  */
diff --git a/tirx/_static/scripts/bootstrap.js.map b/tirx/_static/scripts/bootstrap.js.map
new file mode 100644
index 00000000000..a8ea336ac1a
--- /dev/null
+++ b/tirx/_static/scripts/bootstrap.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"scripts/bootstrap.js","mappings":";mBACA,IAAIA,EAAsB,CCA1BA,EAAwB,CAACC,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXF,EAAoBI,EAAEF,EAAYC,KAASH,EAAoBI,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,MCJ3EH,EAAwB,CAACS,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFV,EAAyBC,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,M,u1BCLhD,IAAI,EAAM,MACNC,EAAS,SACTC,EAAQ,QACRC,EAAO,OACPC,EAAO,OACPC,EAAi [...]
\ No newline at end of file
diff --git a/tirx/_static/scripts/fontawesome.js b/tirx/_static/scripts/fontawesome.js
new file mode 100644
index 00000000000..1ab9bfdd7e5
--- /dev/null
+++ b/tirx/_static/scripts/fontawesome.js
@@ -0,0 +1,3 @@
+/*! For license information please see fontawesome.js.LICENSE.txt */
+(()=>{var c={654(){(()=>{var c={},l={};try{"undefined"!=typeof window&&(c=window),"undefined"!=typeof document&&(l=document)}catch(c){}var s=void 0===(s=(c.navigator||{}).userAgent)?"":s;function a(c,l){(null==l||l>c.length)&&(l=c.length);for(var s=0,a=Array(l);s<l;s++)a[s]=c[s];return a}function e(c,l,s){return(l="symbol"==typeof(a=(c=>{if("object"!=typeof c||!c)return c;var l=c[Symbol.toPrimitive];if(void 0===l)return String(c);if("object"!=typeof(l=l.call(c,"string")))return l;throw n [...]
+//# sourceMappingURL=fontawesome.js.map
\ No newline at end of file
diff --git a/tirx/_static/scripts/fontawesome.js.LICENSE.txt b/tirx/_static/scripts/fontawesome.js.LICENSE.txt
new file mode 100644
index 00000000000..e3c272acc8e
--- /dev/null
+++ b/tirx/_static/scripts/fontawesome.js.LICENSE.txt
@@ -0,0 +1,5 @@
+/*!
+ * Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2026 Fonticons, Inc.
+ */
diff --git a/tirx/_static/scripts/fontawesome.js.map b/tirx/_static/scripts/fontawesome.js.map
new file mode 100644
index 00000000000..af09873b0ed
--- /dev/null
+++ b/tirx/_static/scripts/fontawesome.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"scripts/fontawesome.js","mappings":";mBAKA,MAAM,IAAIA,EAAE,CAAC,EAAEC,EAAE,CAAC,EAAE,IAAI,oBAAoBC,SAASF,EAAEE,QAAQ,oBAAoBC,WAAWF,EAAEE,SAAS,CAAC,MAAMH,GAAG,CAAC,IAAII,OAAO,KAAKA,GAAGJ,EAAEK,WAAW,CAAC,GAAGC,WAAW,GAAGF,EAAE,SAASG,EAAEP,EAAEC,IAAI,MAAMA,GAAGA,EAAED,EAAEQ,UAAUP,EAAED,EAAEQ,QAAQ,IAAI,IAAIJ,EAAE,EAAEG,EAAEE,MAAMR,GAAGG,EAAEH,EAAEG,IAAIG,EAAEH,GAAGJ,EAAEI,GAAG,OAAOG,CAAC,CAAC,SAASG,EAAEV,EAAEC,EAAEG,GAAG,OAAOH,EAAE,iBAAiBM,EAAE,CAAEP,IAAO,GAAG,iBAAiBA,IAAIA [...]
\ No newline at end of file
diff --git a/tirx/_static/scripts/pydata-sphinx-theme.js b/tirx/_static/scripts/pydata-sphinx-theme.js
new file mode 100644
index 00000000000..bdc57fbb00e
--- /dev/null
+++ b/tirx/_static/scripts/pydata-sphinx-theme.js
@@ -0,0 +1,2 @@
+(()=>{"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),s=n.pop(),a=o.pop(),i=c(n,o);return 0!==i?i:s&&a?c(s.split("."),a.split(".")):s||a?s?-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\-]+)*)?)?)? [...]
+//# sourceMappingURL=pydata-sphinx-theme.js.map
\ No newline at end of file
diff --git a/tirx/_static/scripts/pydata-sphinx-theme.js.map b/tirx/_static/scripts/pydata-sphinx-theme.js.map
new file mode 100644
index 00000000000..bc383c37ec4
--- /dev/null
+++ b/tirx/_static/scripts/pydata-sphinx-theme.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"scripts/pydata-sphinx-theme.js","mappings":"mBASO,SAASA,EAAcC,GACD,WAAvBC,SAASC,WAAyBF,IACjCC,SAASE,iBAAiB,mBAAoBH,EACrD,CCLO,MAiCMI,EAAYC,GAA+B,iBAAZA,GAAwB,SAASC,KAAKD,IAAYE,EAAOD,KAAKD,GAkB7FG,EAAU,CAACC,EAAIC,EAAIC,KAE5BC,EAAoBD,GAGpB,MAAME,EAxDqB,EAACJ,EAAIC,KAEhC,MAAMI,EAAKC,EAAiBN,GACtBO,EAAKD,EAAiBL,GAEtBO,EAAKH,EAAGI,MACRC,EAAKH,EAAGE,MAERE,EAAIC,EAAgBP,EAAIE,GAC9B,OAAU,IAANI,EACOA,EAEPH,GAAME,EACCE,EAAgBJ,EAAGK,MAAM,KAAMH,EAAGG,MAAM,MAE1CL,GAAME,EACJF,GAAM, [...]
\ No newline at end of file
diff --git a/tirx/_static/scripts/sphinx-book-theme.js b/tirx/_static/scripts/sphinx-book-theme.js
new file mode 100644
index 00000000000..f41fc7b3060
--- /dev/null
+++ b/tirx/_static/scripts/sphinx-book-theme.js
@@ -0,0 +1,2 @@
+(()=>{"use strict";var e=e=>{"loading"!=document.readyState?e():document.addEventListener?document.addEventListener("DOMContentLoaded",e):document.attachEvent("onreadystatechange",(function(){"complete"==document.readyState&&e()}))};window.initThebeSBT=()=>{var e=document.querySelector("section h1");e.nextElementSibling.classList.contains("thebe-launch-button")||e.insertAdjacentHTML("afterend","<button class='thebe-launch-button'></button>"),initThebe()},window.toggleFullScreen=()=>{var  [...]
+//# sourceMappingURL=sphinx-book-theme.js.map
\ No newline at end of file
diff --git a/tirx/_static/scripts/sphinx-book-theme.js.map b/tirx/_static/scripts/sphinx-book-theme.js.map
new file mode 100644
index 00000000000..8a22740e115
--- /dev/null
+++ b/tirx/_static/scripts/sphinx-book-theme.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"scripts/sphinx-book-theme.js","mappings":"mBASA,IAAIA,EAAsBC,IACG,WAAvBC,SAASC,WACXF,IACSC,SAASE,iBAClBF,SAASE,iBAAiB,mBAAoBH,GAE9CC,SAASG,YAAY,sBAAsB,WACd,YAAvBH,SAASC,YAA0BF,GACzC,GACF,EAkKFK,OAAOC,aAtCY,KACjB,IAAIC,EAAQN,SAASO,cAAc,cACrBD,EAAME,mBAGPC,UAAUC,SAAS,wBAC9BJ,EAAMK,mBACJ,WACA,iDAIJC,WAAW,EA2BbR,OAAOS,iBAzJgB,KACrB,IAAIC,EACDd,SAASe,mBAAoD,OAA/Bf,SAASe,mBACvCf,SAASgB,yBAC6B,OAArChB,SAASgB,wBACb,IAAIC,EAASjB,SAASkB,gBACjBJ,GAQHK,QAAQC,IAAI,8BACRpB,SAASqB, [...]
\ No newline at end of file
diff --git a/tirx/_static/searchtools.js b/tirx/_static/searchtools.js
new file mode 100644
index 00000000000..e29b1c754ba
--- /dev/null
+++ b/tirx/_static/searchtools.js
@@ -0,0 +1,693 @@
+/*
+ * Sphinx JavaScript utilities for the full-text search.
+ */
+"use strict";
+
+/**
+ * Simple result scoring code.
+ */
+if (typeof Scorer === "undefined") {
+  var Scorer = {
+    // Implement the following function to further tweak the score for each result
+    // The function takes a result array [docname, title, anchor, descr, score, filename]
+    // and returns the new score.
+    /*
+    score: result => {
+      const [docname, title, anchor, descr, score, filename, kind] = result
+      return score
+    },
+    */
+
+    // query matches the full name of an object
+    objNameMatch: 11,
+    // or matches in the last dotted part of the object name
+    objPartialMatch: 6,
+    // Additive scores depending on the priority of the object
+    objPrio: {
+      0: 15, // used to be importantResults
+      1: 5, // used to be objectResults
+      2: -5, // used to be unimportantResults
+    },
+    //  Used when the priority is not in the mapping.
+    objPrioDefault: 0,
+
+    // query found in title
+    title: 15,
+    partialTitle: 7,
+    // query found in terms
+    term: 5,
+    partialTerm: 2,
+  };
+}
+
+// Global search result kind enum, used by themes to style search results.
+// prettier-ignore
+class SearchResultKind {
+  static get index() { return "index"; }
+  static get object() { return "object"; }
+  static get text() { return "text"; }
+  static get title() { return "title"; }
+}
+
+const _removeChildren = (element) => {
+  while (element && element.lastChild) element.removeChild(element.lastChild);
+};
+
+/**
+ * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
+ */
+const _escapeRegExp = (string) =>
+  string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
+
+const _escapeHTML = (text) => {
+  return text
+    .replaceAll("&", "&amp;")
+    .replaceAll("<", "&lt;")
+    .replaceAll(">", "&gt;")
+    .replaceAll('"', "&quot;")
+    .replaceAll("'", "&apos;");
+};
+
+const _displayItem = (item, searchTerms, highlightTerms) => {
+  const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
+  const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
+  const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
+  const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
+  const contentRoot = document.documentElement.dataset.content_root;
+
+  const [docName, title, anchor, descr, score, _filename, kind] = item;
+
+  let listItem = document.createElement("li");
+  // Add a class representing the item's type:
+  // can be used by a theme's CSS selector for styling
+  // See SearchResultKind for the class names.
+  listItem.classList.add(`kind-${kind}`);
+  let requestUrl;
+  let linkUrl;
+  if (docBuilder === "dirhtml") {
+    // dirhtml builder
+    let dirname = docName + "/";
+    if (dirname.match(/\/index\/$/))
+      dirname = dirname.substring(0, dirname.length - 6);
+    else if (dirname === "index/") dirname = "";
+    requestUrl = contentRoot + dirname;
+    linkUrl = requestUrl;
+  } else {
+    // normal html builders
+    requestUrl = contentRoot + docName + docFileSuffix;
+    linkUrl = docName + docLinkSuffix;
+  }
+  let linkEl = listItem.appendChild(document.createElement("a"));
+  linkEl.href = linkUrl + anchor;
+  linkEl.dataset.score = score;
+  linkEl.innerHTML = _escapeHTML(title);
+  if (descr) {
+    listItem.appendChild(document.createElement("span")).innerHTML =
+      ` (${_escapeHTML(descr)})`;
+    // highlight search terms in the description
+    if (SPHINX_HIGHLIGHT_ENABLED)
+      // SPHINX_HIGHLIGHT_ENABLED is set in sphinx_highlight.js
+      highlightTerms.forEach((term) =>
+        _highlightText(listItem, term, "highlighted"),
+      );
+  } else if (showSearchSummary)
+    fetch(requestUrl)
+      .then((responseData) => responseData.text())
+      .then((data) => {
+        if (data)
+          listItem.appendChild(
+            Search.makeSearchSummary(data, searchTerms, anchor),
+          );
+        // highlight search terms in the summary
+        if (SPHINX_HIGHLIGHT_ENABLED)
+          // SPHINX_HIGHLIGHT_ENABLED is set in sphinx_highlight.js
+          highlightTerms.forEach((term) =>
+            _highlightText(listItem, term, "highlighted"),
+          );
+      });
+  Search.output.appendChild(listItem);
+};
+const _finishSearch = (resultCount) => {
+  Search.stopPulse();
+  Search.title.innerText = _("Search Results");
+  if (!resultCount)
+    Search.status.innerText = Documentation.gettext(
+      "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.",
+    );
+  else
+    Search.status.innerText = Documentation.ngettext(
+      "Search finished, found one page matching the search query.",
+      "Search finished, found ${resultCount} pages matching the search query.",
+      resultCount,
+    ).replace("${resultCount}", resultCount);
+};
+const _displayNextItem = (
+  results,
+  resultCount,
+  searchTerms,
+  highlightTerms,
+) => {
+  // results left, load the summary and display it
+  // this is intended to be dynamic (don't sub resultsCount)
+  if (results.length) {
+    _displayItem(results.pop(), searchTerms, highlightTerms);
+    setTimeout(
+      () => _displayNextItem(results, resultCount, searchTerms, highlightTerms),
+      5,
+    );
+  }
+  // search finished, update title and status message
+  else _finishSearch(resultCount);
+};
+// Helper function used by query() to order search results.
+// Each input is an array of [docname, title, anchor, descr, score, filename, kind].
+// Order the results by score (in opposite order of appearance, since the
+// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically.
+const _orderResultsByScoreThenName = (a, b) => {
+  const leftScore = a[4];
+  const rightScore = b[4];
+  if (leftScore === rightScore) {
+    // same score: sort alphabetically
+    const leftTitle = a[1].toLowerCase();
+    const rightTitle = b[1].toLowerCase();
+    if (leftTitle === rightTitle) return 0;
+    return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
+  }
+  return leftScore > rightScore ? 1 : -1;
+};
+
+/**
+ * Default splitQuery function. Can be overridden in ``sphinx.search`` with a
+ * custom function per language.
+ *
+ * The regular expression works by splitting the string on consecutive characters
+ * that are not Unicode letters, numbers, underscores, or emoji characters.
+ * This is the same as ``\W+`` in Python, preserving the surrogate pair area.
+ */
+if (typeof splitQuery === "undefined") {
+  var splitQuery = (query) =>
+    query
+      .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
+      .filter((term) => term); // remove remaining empty strings
+}
+
+/**
+ * Search Module
+ */
+const Search = {
+  _index: null,
+  _queued_query: null,
+  _pulse_status: -1,
+
+  htmlToText: (htmlString, anchor) => {
+    const htmlElement = new DOMParser().parseFromString(
+      htmlString,
+      "text/html",
+    );
+    for (const removalQuery of [".headerlink", "script", "style"]) {
+      htmlElement.querySelectorAll(removalQuery).forEach((el) => {
+        el.remove();
+      });
+    }
+    if (anchor) {
+      const anchorContent = htmlElement.querySelector(
+        `[role="main"] ${anchor}`,
+      );
+      if (anchorContent) return anchorContent.textContent;
+
+      console.warn(
+        `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.`,
+      );
+    }
+
+    // if anchor not specified or not found, fall back to main content
+    const docContent = htmlElement.querySelector('[role="main"]');
+    if (docContent) return docContent.textContent;
+
+    console.warn(
+      "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template.",
+    );
+    return "";
+  },
+
+  init: () => {
+    const query = new URLSearchParams(window.location.search).get("q");
+    document
+      .querySelectorAll('input[name="q"]')
+      .forEach((el) => (el.value = query));
+    if (query) Search.performSearch(query);
+  },
+
+  loadIndex: (url) =>
+    (document.body.appendChild(document.createElement("script")).src = url),
+
+  setIndex: (index) => {
+    Search._index = index;
+    if (Search._queued_query !== null) {
+      const query = Search._queued_query;
+      Search._queued_query = null;
+      Search.query(query);
+    }
+  },
+
+  hasIndex: () => Search._index !== null,
+
+  deferQuery: (query) => (Search._queued_query = query),
+
+  stopPulse: () => (Search._pulse_status = -1),
+
+  startPulse: () => {
+    if (Search._pulse_status >= 0) return;
+
+    const pulse = () => {
+      Search._pulse_status = (Search._pulse_status + 1) % 4;
+      Search.dots.innerText = ".".repeat(Search._pulse_status);
+      if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
+    };
+    pulse();
+  },
+
+  /**
+   * perform a search for something (or wait until index is loaded)
+   */
+  performSearch: (query) => {
+    // create the required interface elements
+    const searchText = document.createElement("h2");
+    searchText.textContent = _("Searching");
+    const searchSummary = document.createElement("p");
+    searchSummary.classList.add("search-summary");
+    searchSummary.innerText = "";
+    const searchList = document.createElement("ul");
+    searchList.setAttribute("role", "list");
+    searchList.classList.add("search");
+
+    const out = document.getElementById("search-results");
+    Search.title = out.appendChild(searchText);
+    Search.dots = Search.title.appendChild(document.createElement("span"));
+    Search.status = out.appendChild(searchSummary);
+    Search.output = out.appendChild(searchList);
+
+    const searchProgress = document.getElementById("search-progress");
+    // Some themes don't use the search progress node
+    if (searchProgress) {
+      searchProgress.innerText = _("Preparing search...");
+    }
+    Search.startPulse();
+
+    // index already loaded, the browser was quick!
+    if (Search.hasIndex()) Search.query(query);
+    else Search.deferQuery(query);
+  },
+
+  _parseQuery: (query) => {
+    // stem the search terms and add them to the correct list
+    const stemmer = new Stemmer();
+    const searchTerms = new Set();
+    const excludedTerms = new Set();
+    const highlightTerms = new Set();
+    const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
+    splitQuery(query.trim()).forEach((queryTerm) => {
+      const queryTermLower = queryTerm.toLowerCase();
+
+      // maybe skip this "word"
+      // stopwords set is from language_data.js
+      if (stopwords.has(queryTermLower) || queryTerm.match(/^\d+$/)) return;
+
+      // stem the word
+      let word = stemmer.stemWord(queryTermLower);
+      // select the correct list
+      if (word[0] === "-") excludedTerms.add(word.substr(1));
+      else {
+        searchTerms.add(word);
+        highlightTerms.add(queryTermLower);
+      }
+    });
+
+    if (SPHINX_HIGHLIGHT_ENABLED) {
+      // SPHINX_HIGHLIGHT_ENABLED is set in sphinx_highlight.js
+      localStorage.setItem(
+        "sphinx_highlight_terms",
+        [...highlightTerms].join(" "),
+      );
+    }
+
+    // console.debug("SEARCH: searching for:");
+    // console.info("required: ", [...searchTerms]);
+    // console.info("excluded: ", [...excludedTerms]);
+
+    return [query, searchTerms, excludedTerms, highlightTerms, objectTerms];
+  },
+
+  /**
+   * execute search (requires search index to be loaded)
+   */
+  _performSearch: (
+    query,
+    searchTerms,
+    excludedTerms,
+    highlightTerms,
+    objectTerms,
+  ) => {
+    const filenames = Search._index.filenames;
+    const docNames = Search._index.docnames;
+    const titles = Search._index.titles;
+    const allTitles = Search._index.alltitles;
+    const indexEntries = Search._index.indexentries;
+
+    // Collect multiple result groups to be sorted separately and then ordered.
+    // Each is an array of [docname, title, anchor, descr, score, filename, kind].
+    const normalResults = [];
+    const nonMainIndexResults = [];
+
+    _removeChildren(document.getElementById("search-progress"));
+
+    const queryLower = query.toLowerCase().trim();
+    for (const [title, foundTitles] of Object.entries(allTitles)) {
+      if (
+        title.toLowerCase().trim().includes(queryLower)
+        && queryLower.length >= title.length / 2
+      ) {
+        for (const [file, id] of foundTitles) {
+          const score = Math.round(
+            (Scorer.title * queryLower.length) / title.length,
+          );
+          const boost = titles[file] === title ? 1 : 0; // add a boost for document titles
+          normalResults.push([
+            docNames[file],
+            titles[file] !== title ? `${titles[file]} > ${title}` : title,
+            id !== null ? "#" + id : "",
+            null,
+            score + boost,
+            filenames[file],
+            SearchResultKind.title,
+          ]);
+        }
+      }
+    }
+
+    // search for explicit entries in index directives
+    for (const [entry, foundEntries] of Object.entries(indexEntries)) {
+      if (entry.includes(queryLower) && queryLower.length >= entry.length / 2) {
+        for (const [file, id, isMain] of foundEntries) {
+          const score = Math.round((100 * queryLower.length) / entry.length);
+          const result = [
+            docNames[file],
+            titles[file],
+            id ? "#" + id : "",
+            null,
+            score,
+            filenames[file],
+            SearchResultKind.index,
+          ];
+          if (isMain) {
+            normalResults.push(result);
+          } else {
+            nonMainIndexResults.push(result);
+          }
+        }
+      }
+    }
+
+    // lookup as object
+    objectTerms.forEach((term) =>
+      normalResults.push(...Search.performObjectSearch(term, objectTerms)),
+    );
+
+    // lookup as search terms in fulltext
+    normalResults.push(
+      ...Search.performTermsSearch(searchTerms, excludedTerms),
+    );
+
+    // let the scorer override scores with a custom scoring function
+    if (Scorer.score) {
+      normalResults.forEach((item) => (item[4] = Scorer.score(item)));
+      nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item)));
+    }
+
+    // Sort each group of results by score and then alphabetically by name.
+    normalResults.sort(_orderResultsByScoreThenName);
+    nonMainIndexResults.sort(_orderResultsByScoreThenName);
+
+    // Combine the result groups in (reverse) order.
+    // Non-main index entries are typically arbitrary cross-references,
+    // so display them after other results.
+    let results = [...nonMainIndexResults, ...normalResults];
+
+    // remove duplicate search results
+    // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
+    let seen = new Set();
+    results = results.reverse().reduce((acc, result) => {
+      let resultStr = result
+        .slice(0, 4)
+        .concat([result[5]])
+        .map((v) => String(v))
+        .join(",");
+      if (!seen.has(resultStr)) {
+        acc.push(result);
+        seen.add(resultStr);
+      }
+      return acc;
+    }, []);
+
+    return results.reverse();
+  },
+
+  query: (query) => {
+    const [
+      searchQuery,
+      searchTerms,
+      excludedTerms,
+      highlightTerms,
+      objectTerms,
+    ] = Search._parseQuery(query);
+    const results = Search._performSearch(
+      searchQuery,
+      searchTerms,
+      excludedTerms,
+      highlightTerms,
+      objectTerms,
+    );
+
+    // for debugging
+    //Search.lastresults = results.slice();  // a copy
+    // console.info("search results:", Search.lastresults);
+
+    // print the results
+    _displayNextItem(results, results.length, searchTerms, highlightTerms);
+  },
+
+  /**
+   * search for object names
+   */
+  performObjectSearch: (object, objectTerms) => {
+    const filenames = Search._index.filenames;
+    const docNames = Search._index.docnames;
+    const objects = Search._index.objects;
+    const objNames = Search._index.objnames;
+    const titles = Search._index.titles;
+
+    const results = [];
+
+    const objectSearchCallback = (prefix, match) => {
+      const name = match[4];
+      const fullname = (prefix ? prefix + "." : "") + name;
+      const fullnameLower = fullname.toLowerCase();
+      if (fullnameLower.indexOf(object) < 0) return;
+
+      let score = 0;
+      const parts = fullnameLower.split(".");
+
+      // check for different match types: exact matches of full name or
+      // "last name" (i.e. last dotted part)
+      if (fullnameLower === object || parts.slice(-1)[0] === object)
+        score += Scorer.objNameMatch;
+      else if (parts.slice(-1)[0].indexOf(object) > -1)
+        score += Scorer.objPartialMatch; // matches in last name
+
+      const objName = objNames[match[1]][2];
+      const title = titles[match[0]];
+
+      // If more than one term searched for, we require other words to be
+      // found in the name/title/description
+      const otherTerms = new Set(objectTerms);
+      otherTerms.delete(object);
+      if (otherTerms.size > 0) {
+        const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
+        if (
+          [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
+        )
+          return;
+      }
+
+      let anchor = match[3];
+      if (anchor === "") anchor = fullname;
+      else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
+
+      const descr = objName + _(", in ") + title;
+
+      // add custom score for some objects according to scorer
+      if (Scorer.objPrio.hasOwnProperty(match[2]))
+        score += Scorer.objPrio[match[2]];
+      else score += Scorer.objPrioDefault;
+
+      results.push([
+        docNames[match[0]],
+        fullname,
+        "#" + anchor,
+        descr,
+        score,
+        filenames[match[0]],
+        SearchResultKind.object,
+      ]);
+    };
+    Object.keys(objects).forEach((prefix) =>
+      objects[prefix].forEach((array) => objectSearchCallback(prefix, array)),
+    );
+    return results;
+  },
+
+  /**
+   * search for full-text terms in the index
+   */
+  performTermsSearch: (searchTerms, excludedTerms) => {
+    // prepare search
+    const terms = Search._index.terms;
+    const titleTerms = Search._index.titleterms;
+    const filenames = Search._index.filenames;
+    const docNames = Search._index.docnames;
+    const titles = Search._index.titles;
+
+    const scoreMap = new Map();
+    const fileMap = new Map();
+
+    // perform the search on the required terms
+    searchTerms.forEach((word) => {
+      const files = [];
+      // find documents, if any, containing the query word in their text/title term indices
+      // use Object.hasOwnProperty to avoid mismatching against prototype properties
+      const arr = [
+        {
+          files: terms.hasOwnProperty(word) ? terms[word] : undefined,
+          score: Scorer.term,
+        },
+        {
+          files: titleTerms.hasOwnProperty(word) ? titleTerms[word] : undefined,
+          score: Scorer.title,
+        },
+      ];
+      // add support for partial matches
+      if (word.length > 2) {
+        const escapedWord = _escapeRegExp(word);
+        if (!terms.hasOwnProperty(word)) {
+          Object.keys(terms).forEach((term) => {
+            if (term.match(escapedWord))
+              arr.push({ files: terms[term], score: Scorer.partialTerm });
+          });
+        }
+        if (!titleTerms.hasOwnProperty(word)) {
+          Object.keys(titleTerms).forEach((term) => {
+            if (term.match(escapedWord))
+              arr.push({ files: titleTerms[term], score: Scorer.partialTitle });
+          });
+        }
+      }
+
+      // no match but word was a required one
+      if (arr.every((record) => record.files === undefined)) return;
+
+      // found search word in contents
+      arr.forEach((record) => {
+        if (record.files === undefined) return;
+
+        let recordFiles = record.files;
+        if (recordFiles.length === undefined) recordFiles = [recordFiles];
+        files.push(...recordFiles);
+
+        // set score for the word in each file
+        recordFiles.forEach((file) => {
+          if (!scoreMap.has(file)) scoreMap.set(file, new Map());
+          const fileScores = scoreMap.get(file);
+          fileScores.set(word, record.score);
+        });
+      });
+
+      // create the mapping
+      files.forEach((file) => {
+        if (!fileMap.has(file)) fileMap.set(file, [word]);
+        else if (fileMap.get(file).indexOf(word) === -1)
+          fileMap.get(file).push(word);
+      });
+    });
+
+    // now check if the files don't contain excluded terms
+    const results = [];
+    for (const [file, wordList] of fileMap) {
+      // check if all requirements are matched
+
+      // as search terms with length < 3 are discarded
+      const filteredTermCount = [...searchTerms].filter(
+        (term) => term.length > 2,
+      ).length;
+      if (
+        wordList.length !== searchTerms.size
+        && wordList.length !== filteredTermCount
+      )
+        continue;
+
+      // ensure that none of the excluded terms is in the search result
+      if (
+        [...excludedTerms].some(
+          (term) =>
+            terms[term] === file
+            || titleTerms[term] === file
+            || (terms[term] || []).includes(file)
+            || (titleTerms[term] || []).includes(file),
+        )
+      )
+        break;
+
+      // select one (max) score for the file.
+      const score = Math.max(...wordList.map((w) => scoreMap.get(file).get(w)));
+      // add result to the result list
+      results.push([
+        docNames[file],
+        titles[file],
+        "",
+        null,
+        score,
+        filenames[file],
+        SearchResultKind.text,
+      ]);
+    }
+    return results;
+  },
+
+  /**
+   * helper function to return a node containing the
+   * search summary for a given text. keywords is a list
+   * of stemmed words.
+   */
+  makeSearchSummary: (htmlText, keywords, anchor) => {
+    const text = Search.htmlToText(htmlText, anchor);
+    if (text === "") return null;
+
+    const textLower = text.toLowerCase();
+    const actualStartPosition = [...keywords]
+      .map((k) => textLower.indexOf(k.toLowerCase()))
+      .filter((i) => i > -1)
+      .slice(-1)[0];
+    const startWithContext = Math.max(actualStartPosition - 120, 0);
+
+    const top = startWithContext === 0 ? "" : "...";
+    const tail = startWithContext + 240 < text.length ? "..." : "";
+
+    let summary = document.createElement("p");
+    summary.classList.add("context");
+    summary.textContent =
+      top + text.substr(startWithContext, 240).trim() + tail;
+
+    return summary;
+  },
+};
+
+_ready(Search.init);
diff --git a/tirx/_static/sphinx_highlight.js b/tirx/_static/sphinx_highlight.js
new file mode 100644
index 00000000000..a74e103a831
--- /dev/null
+++ b/tirx/_static/sphinx_highlight.js
@@ -0,0 +1,159 @@
+/* Highlighting utilities for Sphinx HTML documentation. */
+"use strict";
+
+const SPHINX_HIGHLIGHT_ENABLED = true;
+
+/**
+ * highlight a given string on a node by wrapping it in
+ * span elements with the given class name.
+ */
+const _highlight = (node, addItems, text, className) => {
+  if (node.nodeType === Node.TEXT_NODE) {
+    const val = node.nodeValue;
+    const parent = node.parentNode;
+    const pos = val.toLowerCase().indexOf(text);
+    if (
+      pos >= 0
+      && !parent.classList.contains(className)
+      && !parent.classList.contains("nohighlight")
+    ) {
+      let span;
+
+      const closestNode = parent.closest("body, svg, foreignObject");
+      const isInSVG = closestNode && closestNode.matches("svg");
+      if (isInSVG) {
+        span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
+      } else {
+        span = document.createElement("span");
+        span.classList.add(className);
+      }
+
+      span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+      const rest = document.createTextNode(val.substr(pos + text.length));
+      parent.insertBefore(span, parent.insertBefore(rest, node.nextSibling));
+      node.nodeValue = val.substr(0, pos);
+      /* There may be more occurrences of search term in this node. So call this
+       * function recursively on the remaining fragment.
+       */
+      _highlight(rest, addItems, text, className);
+
+      if (isInSVG) {
+        const rect = document.createElementNS(
+          "http://www.w3.org/2000/svg",
+          "rect",
+        );
+        const bbox = parent.getBBox();
+        rect.x.baseVal.value = bbox.x;
+        rect.y.baseVal.value = bbox.y;
+        rect.width.baseVal.value = bbox.width;
+        rect.height.baseVal.value = bbox.height;
+        rect.setAttribute("class", className);
+        addItems.push({ parent: parent, target: rect });
+      }
+    }
+  } else if (node.matches && !node.matches("button, select, textarea")) {
+    node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
+  }
+};
+const _highlightText = (thisNode, text, className) => {
+  let addItems = [];
+  _highlight(thisNode, addItems, text, className);
+  addItems.forEach((obj) =>
+    obj.parent.insertAdjacentElement("beforebegin", obj.target),
+  );
+};
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+const SphinxHighlight = {
+  /**
+   * highlight the search words provided in localstorage in the text
+   */
+  highlightSearchWords: () => {
+    if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
+
+    // get and clear terms from localstorage
+    const url = new URL(window.location);
+    const highlight =
+      localStorage.getItem("sphinx_highlight_terms")
+      || url.searchParams.get("highlight")
+      || "";
+    localStorage.removeItem("sphinx_highlight_terms");
+    // Update history only if '?highlight' is present; otherwise it
+    // clears text fragments (not set in window.location by the browser)
+    if (url.searchParams.has("highlight")) {
+      url.searchParams.delete("highlight");
+      window.history.replaceState({}, "", url);
+    }
+
+    // get individual terms from highlight string
+    const terms = highlight
+      .toLowerCase()
+      .split(/\s+/)
+      .filter((x) => x);
+    if (terms.length === 0) return; // nothing to do
+
+    // There should never be more than one element matching "div.body"
+    const divBody = document.querySelectorAll("div.body");
+    const body = divBody.length ? divBody[0] : document.querySelector("body");
+    window.setTimeout(() => {
+      terms.forEach((term) => _highlightText(body, term, "highlighted"));
+    }, 10);
+
+    const searchBox = document.getElementById("searchbox");
+    if (searchBox === null) return;
+    searchBox.appendChild(
+      document
+        .createRange()
+        .createContextualFragment(
+          '<p class="highlight-link">'
+            + '<a href="javascript:SphinxHighlight.hideSearchWords()">'
+            + _("Hide Search Matches")
+            + "</a></p>",
+        ),
+    );
+  },
+
+  /**
+   * helper function to hide the search marks again
+   */
+  hideSearchWords: () => {
+    document
+      .querySelectorAll("#searchbox .highlight-link")
+      .forEach((el) => el.remove());
+    document
+      .querySelectorAll("span.highlighted")
+      .forEach((el) => el.classList.remove("highlighted"));
+    localStorage.removeItem("sphinx_highlight_terms");
+  },
+
+  initEscapeListener: () => {
+    // only install a listener if it is really needed
+    if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
+
+    document.addEventListener("keydown", (event) => {
+      // bail for input elements
+      if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName))
+        return;
+      // bail with special keys
+      if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey)
+        return;
+      if (
+        DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
+        && event.key === "Escape"
+      ) {
+        SphinxHighlight.hideSearchWords();
+        event.preventDefault();
+      }
+    });
+  },
+};
+
+_ready(() => {
+  /* Do not call highlightSearchWords() when we are on the search page.
+   * It will highlight words from the *previous* search query.
+   */
+  if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords();
+  SphinxHighlight.initEscapeListener();
+});
diff --git a/tirx/_static/styles/pydata-sphinx-theme.css b/tirx/_static/styles/pydata-sphinx-theme.css
new file mode 100644
index 00000000000..e55c4ed290c
--- /dev/null
+++ b/tirx/_static/styles/pydata-sphinx-theme.css
@@ -0,0 +1,27 @@
+@charset "UTF-8";
+/*!
+ * Bootstrap  v5.3.3 (https://getbootstrap.com/)
+ * Copyright 2011-2024 The Bootstrap Authors
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;-- [...]
+
+/*!
+ * Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2026 Fonticons, Inc.
+ */:host,:root{--fa-font-solid:normal 900 1em/1 var(--fa-family-classic)}@font-face{font-display:block;font-family:Font Awesome\ 7 Free;font-style:normal;font-weight:900;src:url(../vendor/fontawesome/webfonts/fa-solid-900.woff2)}.fas{--fa-family:var(--fa-family-classic)}.fa-solid,.fas{--fa-style:900}
+
+/*!
+ * Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2026 Fonticons, Inc.
+ */:host,:root{--fa-family-classic:"Font Awesome 7 Free";--fa-font-regular:normal 400 1em/1 var(--fa-family-classic);--fa-style-family-classic:var(--fa-family-classic)}@font-face{font-display:block;font-family:Font Awesome\ 7 Free;font-style:normal;font-weight:400;src:url(../vendor/fontawesome/webfonts/fa-regular-400.woff2)}.far{--fa-family:var(--fa-family-classic);--fa-style:400}.fa-classic{--fa-family:var(--fa-family-classic)}.fa-regular{--fa-style:400}
+
+/*!
+ * Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2026 Fonticons, Inc.
+ */:host,:root{--fa-family-brands:"Font Awesome 7 Brands";--fa-font-brands:normal 400 1em/1 var(--fa-family-brands)}@font-face{font-display:block;font-family:Font Awesome\ 7 Brands;font-style:normal;font-weight:400;src:url(../vendor/fontawesome/webfonts/fa-brands-400.woff2)}.fa-brands,.fa-classic.fa-brands,.fab{--fa-family:var(--fa-family-brands);--fa-style:400}.fa-firefox-browser{--fa:"\e007"}.fa-ideal{--fa:"\e013"}.fa-microblog{--fa:"\e01a"}.fa-pied-piper-square,.fa-square-pied-piper{- [...]
+    --pst-color-text-base
+  )}.table a{color:var(--pst-color-link-higher-contrast)}.table td~td,.table td~th,.table th~td,.table th~th{border-left:1px solid var(--pst-color-table-inner-border)}.table thead tr{background-color:var(--pst-color-table-heading-bg);border-bottom:2px solid var(--pst-color-primary)}.table tbody tr:nth-child(odd){background-color:var(--pst-color-table-row-zebra-low-bg)}.table tbody tr:nth-child(2n){background-color:var(--pst-color-table-row-zebra-high-bg)}.pst-scrollable-table-container{o [...]
+/*# sourceMappingURL=pydata-sphinx-theme.css.map*/
\ No newline at end of file
diff --git a/tirx/_static/styles/pydata-sphinx-theme.css.map b/tirx/_static/styles/pydata-sphinx-theme.css.map
new file mode 100644
index 00000000000..dff8d5aece7
--- /dev/null
+++ b/tirx/_static/styles/pydata-sphinx-theme.css.map
@@ -0,0 +1 @@
+{"version":3,"file":"styles/pydata-sphinx-theme.css","mappings":"AAsGE,gBC+kBF;ACprBE;;;;EAAA,CCDF,4BASI,qQAIA,sMAIA,iKAIA,sNAIA,iRAIA,iPAIA,iRAGF,2BACA,qBAMA,yMACA,mGACA,4EAOA,gDC2OI,wBALI,CDpOR,0BACA,0BAKA,wBACA,6BACA,kBACA,6BAEA,yBACA,8BAEA,wCACA,kCACA,0BACA,kCAEA,sCACA,iCACA,yBACA,iCAGA,2BAEA,wBACA,+BACA,+BAEA,8BACA,oCAMA,wBACA,6BACA,0BAGA,sBACA,wBACA,0BACA,+CAEA,4BACA,8BACA,6BACA,2BACA,4BACA,mDACA,8BAGA,8CACA,uDACA,gDACA,uDAIA,gCACA,0BACA,8CAIA,8BACA,qCACA,gCACA,sCFFF,CI9GI,qBFsHA,i [...]
\ No newline at end of file
diff --git a/tirx/_static/styles/sphinx-book-theme.css b/tirx/_static/styles/sphinx-book-theme.css
new file mode 100644
index 00000000000..de252d866e8
--- /dev/null
+++ b/tirx/_static/styles/sphinx-book-theme.css
@@ -0,0 +1,16 @@
+/*! sphinx-book-theme CSS
+ * BSD 3-Clause License
+ * Copyright (c) 2020, EBP
+ * All rights reserved.
+ *
+ * This follows the 7-1 pattern described here:
+ * https://sass-guidelin.es/#architecture
+ */html[data-theme=dark],html[data-theme=light]{--pst-font-size-base:none;--pst-color-secondary:#e89217}html[data-theme=light]{--sbt-color-announcement:#616161;--pst-color-primary:#176de8}html[data-theme=dark]{--pst-color-primary:#528fe4;--sbt-color-announcement:#616161;--pst-color-background:#121212}html{scroll-padding-top:4rem}.sbt-scroll-pixel-helper{height:0;left:0;position:absolute;top:0;width:0}.d-n,.onlyprint{display:none}@media print{.onlyprint{display:block!important}.noprint{di [...]
+ * BSD 3-Clause License
+ * Copyright (c) 2020, EBP
+ * All rights reserved.
+ *
+ * This follows the 7-1 pattern described here:
+ * https://sass-guidelin.es/#architecture
+ */@media(min-width:768px){button.sidebar-toggle.primary-toggle{display:inline-block}}@media(max-width:768px){button.sidebar-toggle.primary-toggle{margin-bottom:0}}@media(min-width:1200px){button.sidebar-toggle.secondary-toggle{display:none}}@media(max-width:768px){button.sidebar-toggle.secondary-toggle{margin-bottom:0}}.bd-header-article{align-items:center;background-color:var(--pst-color-background);display:flex;font-size:.9em;padding:0 1rem;position:sticky;top:0;transition:left .2s;z- [...]
+/*# sourceMappingURL=sphinx-book-theme.css.map*/
\ No newline at end of file
diff --git a/tirx/_static/styles/sphinx-book-theme.css.map b/tirx/_static/styles/sphinx-book-theme.css.map
new file mode 100644
index 00000000000..d705bf7c2c7
--- /dev/null
+++ b/tirx/_static/styles/sphinx-book-theme.css.map
@@ -0,0 +1 @@
+{"version":3,"file":"styles/sphinx-book-theme.css","mappings":"AAAA;;;;;;;EAAA,CC0CA,6CAGE,yBAA0B,CAG1B,6BAA8B,CAKhC,uBAEE,gCAAyC,CAEzC,2BAA4B,CAG9B,sBAEE,2BAA4B,CAG5B,gCAAyC,CAEzC,8BAA+B,CC9DjC,KAIE,wBAOF,yBAGE,SAEA,MAAK,CAJL,kBAGA,MAFA,OAGA,CAYF,gBACE,aAEA,aAHF,WAII,wBAKJ,SAEI,uBAPA,CChCF,6JAME,6BAIF,kDAEE,gBAKJ,kBACE,cACA,oBACA,eAGF,MACE,kBC1BF,aAEI,qBAEE,YADA,gBACA,CAEA,yCACE,cAEA,4CACE,cAEA,eAAc,CADd,iBACA,CAIJ,iCACE,cAGA,kDACE,aAKJ,gCACE,sBAIF,wBAEE,kBADA,cACA,CAEF,gGAIE,kBACA,WAGF [...]
\ No newline at end of file
diff --git a/tirx/_static/styles/theme.css b/tirx/_static/styles/theme.css
new file mode 100644
index 00000000000..4519dd91202
--- /dev/null
+++ b/tirx/_static/styles/theme.css
@@ -0,0 +1,2 @@
+/* Provided by Sphinx's 'basic' theme, and included in the final set of assets */
+@import "../basic.css";
diff --git a/tirx/_static/vendor/fontawesome/webfonts/fa-brands-400.woff2 b/tirx/_static/vendor/fontawesome/webfonts/fa-brands-400.woff2
new file mode 100644
index 00000000000..e8bd881bb91
Binary files /dev/null and b/tirx/_static/vendor/fontawesome/webfonts/fa-brands-400.woff2 differ
diff --git a/tirx/_static/vendor/fontawesome/webfonts/fa-regular-400.woff2 b/tirx/_static/vendor/fontawesome/webfonts/fa-regular-400.woff2
new file mode 100644
index 00000000000..344b101afda
Binary files /dev/null and b/tirx/_static/vendor/fontawesome/webfonts/fa-regular-400.woff2 differ
diff --git a/tirx/_static/vendor/fontawesome/webfonts/fa-solid-900.woff2 b/tirx/_static/vendor/fontawesome/webfonts/fa-solid-900.woff2
new file mode 100644
index 00000000000..ea09c935a97
Binary files /dev/null and b/tirx/_static/vendor/fontawesome/webfonts/fa-solid-900.woff2 differ
diff --git a/tirx/_static/webpack-macros.html b/tirx/_static/webpack-macros.html
new file mode 100644
index 00000000000..44db71ca5e3
--- /dev/null
+++ b/tirx/_static/webpack-macros.html
@@ -0,0 +1,24 @@
+<!--
+  AUTO-GENERATED from webpack.config.js, do **NOT** edit by hand.
+  These are re-used in layout.html
+-->
+
+{% macro head_pre_assets() %}
+  <!-- Loaded before other Sphinx assets -->
+  <link href="{{ pathto('_static/styles/theme.css', 1) }}?digest=90905a2f556bf617f1a9" rel="stylesheet" />
+<link href="{{ pathto('_static/styles/pydata-sphinx-theme.css', 1) }}?digest=90905a2f556bf617f1a9" rel="stylesheet" />
+{% endmacro %}
+
+{% macro head_js_preload() %}
+  <!-- So that users can add custom icons -->
+  <script defer src="{{ pathto('_static/scripts/fontawesome.js', 1) }}?digest=90905a2f556bf617f1a9"></script>
+  <!-- Pre-loaded scripts that we'll load fully later -->
+  <link rel="preload" as="script" href="{{ pathto('_static/scripts/bootstrap.js', 1) }}?digest=90905a2f556bf617f1a9" />
+<link rel="preload" as="script" href="{{ pathto('_static/scripts/pydata-sphinx-theme.js', 1) }}?digest=90905a2f556bf617f1a9" />
+{% endmacro %}
+
+{% macro body_post() %}
+  <!-- Scripts loaded after <body> so the DOM is not blocked -->
+  <script defer src="{{ pathto('_static/scripts/bootstrap.js', 1) }}?digest=90905a2f556bf617f1a9"></script>
+<script defer src="{{ pathto('_static/scripts/pydata-sphinx-theme.js', 1) }}?digest=90905a2f556bf617f1a9"></script>
+{% endmacro %}
\ No newline at end of file
diff --git a/tirx/commit_hash b/tirx/commit_hash
new file mode 100644
index 00000000000..9076447e09a
--- /dev/null
+++ b/tirx/commit_hash
@@ -0,0 +1 @@
+6a4f354cf444c9ff9bd534cee49f5d9c66152542
diff --git a/tirx/genindex.html b/tirx/genindex.html
new file mode 100644
index 00000000000..9dab9a30ffc
--- /dev/null
+++ b/tirx/genindex.html
@@ -0,0 +1,536 @@
+
+<!DOCTYPE html>
+
+
+<html lang="en" data-content_root="./" >
+
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Index &#8212; Apache TVM TIRx  documentation</title>
+  
+  
+  
+  <script data-cfasync="false">
+    document.documentElement.dataset.mode = localStorage.getItem("mode") || "";
+    document.documentElement.dataset.theme = localStorage.getItem("theme") || "";
+  </script>
+  <!--
+    this give us a css class that will be invisible only if js is disabled
+  -->
+  <noscript>
+    <style>
+      .pst-js-only { display: none !important; }
+
+    </style>
+  </noscript>
+  
+  <!-- Loaded before other Sphinx assets -->
+  <link href="_static/styles/theme.css?digest=90905a2f556bf617f1a9" rel="stylesheet" />
+<link href="_static/styles/pydata-sphinx-theme.css?digest=90905a2f556bf617f1a9" rel="stylesheet" />
+
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=8f2a1f02" />
+    <link rel="stylesheet" type="text/css" href="_static/styles/sphinx-book-theme.css?v=4418a689" />
+  
+  <!-- So that users can add custom icons -->
+  <script defer src="_static/scripts/fontawesome.js?digest=90905a2f556bf617f1a9"></script>
+  <!-- Pre-loaded scripts that we'll load fully later -->
+  <link rel="preload" as="script" href="_static/scripts/bootstrap.js?digest=90905a2f556bf617f1a9" />
+<link rel="preload" as="script" href="_static/scripts/pydata-sphinx-theme.js?digest=90905a2f556bf617f1a9" />
+
+    <script src="_static/documentation_options.js?v=9eb32ce0"></script>
+    <script src="_static/doctools.js?v=fd6eb6e6"></script>
+    <script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
+    <script src="_static/scripts/sphinx-book-theme.js?v=fab101a9"></script>
+    <script>DOCUMENTATION_OPTIONS.pagename = 'genindex';</script>
+    <script>DOCUMENTATION_OPTIONS.search_as_you_type = false;</script>
+    <link rel="index" title="Index" href="#" />
+    <link rel="search" title="Search" href="search.html" />
+  <meta name="viewport" content="width=device-width, initial-scale=1"/>
+  <meta name="docsearch:language" content="en"/>
+  <meta name="docsearch:version" content="" />
+  
+    
+    <script src="_static/searchtools.js"></script>
+    <script src="_static/language_data.js"></script>
+    <script src="searchindex.js"></script>
+  
+  </head>
+  <body data-default-mode="">
+  
+  
+  <div id="pst-skip-link" class="skip-link d-print-none"><a href="#main-content">Skip to main content</a></div>
+
+  
+  <div id="pst-scroll-pixel-helper"></div>
+  
+  <button type="button" class="btn rounded-pill" id="pst-back-to-top">
+    <i class="fa-solid fa-arrow-up"></i>Back to top</button>
+  
+  
+  
+  
+  <dialog id="pst-search-dialog">
+    
+<form class="bd-search d-flex align-items-center"
+      action="search.html"
+      method="get">
+  <i class="fa-solid fa-magnifying-glass"></i>
+  <input type="search"
+         class="form-control"
+         name="q"
+         placeholder="Search..."
+         aria-label="Search..."
+         autocomplete="off"
+         autocorrect="off"
+         autocapitalize="off"
+         spellcheck="false"/>
+  <span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd>K</kbd></span>
+</form>
+  </dialog>
+
+  <div class="pst-async-banner-revealer d-none">
+  <aside id="bd-header-version-warning" class="d-none d-print-none" aria-label="Version warning"></aside>
+</div>
+
+  
+    <header id="pst-header" class="bd-header navbar navbar-expand-lg bd-navbar d-print-none">
+<div class="bd-header__inner bd-page-width">
+  <button class="pst-navbar-icon sidebar-toggle primary-toggle" aria-label="Site navigation">
+    <span class="fa-solid fa-bars"></span>
+  </button>
+  
+  
+  <div class="col-lg-9 navbar-header-items">
+    
+    
+    <div class="navbar-header-items__end">
+      
+        <div class="navbar-item navbar-persistent--container">
+          
+
+<button class="btn search-button-field search-button__button pst-js-only" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
+ <i class="fa-solid fa-magnifying-glass"></i>
+ <span class="search-button__default-text">Search</span>
+ <span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
+</button>
+        </div>
+      
+      
+    </div>
+    
+  </div>
+  
+  
+    <div class="navbar-persistent--mobile">
+
+<button class="btn search-button-field search-button__button pst-js-only" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
+ <i class="fa-solid fa-magnifying-glass"></i>
+ <span class="search-button__default-text">Search</span>
+ <span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
+</button>
+    </div>
+  
+
+  
+</div>
+
+    </header>
+  
+
+  <div class="bd-container">
+    <div class="bd-container__inner bd-page-width">
+      
+      
+      
+        
+      
+      <dialog id="pst-primary-sidebar-modal"></dialog>
+      <div id="pst-primary-sidebar" class="bd-sidebar-primary bd-sidebar">
+        
+
+  
+  <div class="sidebar-header-items sidebar-primary__section">
+    
+    
+    
+    
+  </div>
+  
+    <div class="sidebar-primary-items__start sidebar-primary__section">
+        <div class="sidebar-primary-item">
+
+  
+    
+  
+
+<a class="navbar-brand logo" href="index.html">
+  
+  
+  
+  
+  
+  
+    <p class="title logo__title">Apache TVM TIRx  documentation</p>
+  
+</a></div>
+        <div class="sidebar-primary-item">
+
+<button class="btn search-button-field search-button__button pst-js-only" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
+ <i class="fa-solid fa-magnifying-glass"></i>
+ <span class="search-button__default-text">Search</span>
+ <span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
+</button></div>
+        <div class="sidebar-primary-item"><nav class="bd-links bd-docs-nav" aria-label="Main">
+    <div class="bd-toc-item navbar-nav active">
+        <p aria-level="2" class="caption" role="heading"><span class="caption-text">Reference</span></p>
+<ul class="nav bd-sidenav">
+<li class="toctree-l1 has-children"><a class="reference internal" href="reference/python/index.html">Python API</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.ir.IRModule.html">tvm_tirx.ir.IRModule</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.ir.Expr.html">tvm_tirx.ir.Expr</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.ir.Stmt.html">tvm_tirx.ir.Stmt</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.tirx.Function.html">tvm_tirx.tirx.Function</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.tirx.Var.html">tvm_tirx.tirx.Var</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.tirx.TensorType.html">tvm_tirx.tirx.TensorType</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.tirx.decl_tensor.html">tvm_tirx.tirx.decl_tensor</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.tirx.IndexMap.html">tvm_tirx.tirx.IndexMap</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.tirx.Layout.html">tvm_tirx.tirx.Layout</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.tirx.TileLayout.html">tvm_tirx.tirx.TileLayout</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.tirx.compile.html">tvm_tirx.tirx.compile</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.target.Target.html">tvm_tirx.target.Target</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.runtime.Tensor.html">tvm_tirx.runtime.Tensor</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.runtime.Module.html">tvm_tirx.runtime.Module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.codegen.Executable.html">tvm_tirx.codegen.Executable</a></li>
+</ul>
+</details></li>
+</ul>
+
+    </div>
+</nav></div>
+    </div>
+  
+  
+  <div class="sidebar-primary-items__end sidebar-primary__section">
+      <div class="sidebar-primary-item">
+<div id="ethical-ad-placement"
+      class="flat"
+      data-ea-publisher="readthedocs"
+      data-ea-type="readthedocs-sidebar"
+      data-ea-manual="true">
+</div></div>
+  </div>
+
+
+      </div>
+      
+      <main id="main-content" class="bd-main" role="main">
+        
+        
+
+<div class="sbt-scroll-pixel-helper"></div>
+
+          <div class="bd-content">
+            <div class="bd-article-container">
+              
+              <div class="bd-header-article d-print-none">
+<div class="header-article-items header-article__inner">
+  
+    <div class="header-article-items__start">
+      
+        <div class="header-article-item"><button class="sidebar-toggle primary-toggle btn btn-sm" title="Toggle primary sidebar" data-bs-placement="bottom" data-bs-toggle="tooltip">
+  <span class="fa-solid fa-bars"></span>
+</button></div>
+      
+    </div>
+  
+  
+    <div class="header-article-items__end">
+      
+        <div class="header-article-item">
+
+<div class="article-header-buttons">
+
+
+
+<button onclick="toggleFullScreen()"
+  class="btn btn-sm btn-fullscreen-button pst-navbar-icon"
+  title="Fullscreen mode"
+  data-bs-placement="bottom" data-bs-toggle="tooltip"
+>
+  
+
+<span class="btn__icon-container">
+  <i class="fas fa-expand"></i>
+  </span>
+
+</button>
+
+
+
+<div class="theme-switch-container dropdown pst-js-only" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Color mode">
+  <button class="btn btn-sm nav-link pst-navbar-icon theme-switch-button dropdown-toggle" aria-label="Color mode" data-bs-toggle="dropdown">
+    <i class="theme-switch fa-solid fa-sun fa-lg fa-fw" data-mode="light" title="Light"></i>
+    <i class="theme-switch fa-solid fa-moon fa-lg fa-fw" data-mode="dark" title="Dark"></i>
+    <i class="theme-switch fa-solid fa-circle-half-stroke fa-lg fa-fw" data-mode="auto" title="System Settings"></i>
+  </button>
+  <ul class="dropdown-menu dropdown-menu-end">
+    <li><button class="dropdown-item d-flex align-items-center theme-change-button" data-mode="auto"><i class="fa-solid fa-circle-half-stroke fa-lg fa-fw me-1"></i>System Settings</button></li>
+    <li><button class="dropdown-item d-flex align-items-center theme-change-button" data-mode="light"><i class="fa-solid fa-sun fa-lg fa-fw me-1"></i>Light</button></li>
+    <li><button class="dropdown-item d-flex align-items-center theme-change-button" data-mode="dark"><i class="fa-solid fa-moon fa-lg fa-fw me-1"></i>Dark</button></li>
+  </ul>
+</div>
+
+
+<button class="btn btn-sm pst-navbar-icon search-button search-button__button pst-js-only" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
+    <i class="fa-solid fa-magnifying-glass fa-lg"></i>
+</button>
+
+</div></div>
+      
+    </div>
+  
+</div>
+</div>
+              
+              
+
+<div id="jb-print-docs-body" class="onlyprint">
+    <h1></h1>
+    <!-- Table of contents -->
+    <div id="print-main-content">
+        <div id="jb-print-toc">
+            
+        </div>
+    </div>
+</div>
+
+              
+                
+<div id="searchbox"></div>
+                <article class="bd-article">
+                  
+
+<h1 id="index">Index</h1>
+
+<div class="genindex-jumpbox">
+ <a href="#_"><strong>_</strong></a>
+ | <a href="#C"><strong>C</strong></a>
+ | <a href="#D"><strong>D</strong></a>
+ | <a href="#E"><strong>E</strong></a>
+ | <a href="#F"><strong>F</strong></a>
+ | <a href="#I"><strong>I</strong></a>
+ | <a href="#L"><strong>L</strong></a>
+ | <a href="#M"><strong>M</strong></a>
+ | <a href="#S"><strong>S</strong></a>
+ | <a href="#T"><strong>T</strong></a>
+ | <a href="#V"><strong>V</strong></a>
+ 
+</div>
+<h2 id="_">_</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="reference/python/generated/tvm_tirx.codegen.Executable.html#tvm_tirx.codegen.Executable.__init__">__init__() (tvm_tirx.codegen.Executable method)</a>
+
+      <ul>
+        <li><a href="reference/python/generated/tvm_tirx.ir.Expr.html#tvm_tirx.ir.Expr.__init__">(tvm_tirx.ir.Expr method)</a>
+</li>
+        <li><a href="reference/python/generated/tvm_tirx.ir.IRModule.html#tvm_tirx.ir.IRModule.__init__">(tvm_tirx.ir.IRModule method)</a>
+</li>
+        <li><a href="reference/python/generated/tvm_tirx.ir.Stmt.html#tvm_tirx.ir.Stmt.__init__">(tvm_tirx.ir.Stmt method)</a>
+</li>
+        <li><a href="reference/python/generated/tvm_tirx.runtime.Module.html#tvm_tirx.runtime.Module.__init__">(tvm_tirx.runtime.Module method)</a>
+</li>
+        <li><a href="reference/python/generated/tvm_tirx.runtime.Tensor.html#tvm_tirx.runtime.Tensor.__init__">(tvm_tirx.runtime.Tensor method)</a>
+</li>
+        <li><a href="reference/python/generated/tvm_tirx.target.Target.html#tvm_tirx.target.Target.__init__">(tvm_tirx.target.Target method)</a>
+</li>
+        <li><a href="reference/python/generated/tvm_tirx.tirx.Function.html#tvm_tirx.tirx.Function.__init__">(tvm_tirx.tirx.Function method)</a>
+</li>
+        <li><a href="reference/python/generated/tvm_tirx.tirx.IndexMap.html#tvm_tirx.tirx.IndexMap.__init__">(tvm_tirx.tirx.IndexMap method)</a>
+</li>
+        <li><a href="reference/python/generated/tvm_tirx.tirx.Layout.html#tvm_tirx.tirx.Layout.__init__">(tvm_tirx.tirx.Layout method)</a>
+</li>
+        <li><a href="reference/python/generated/tvm_tirx.tirx.TensorType.html#tvm_tirx.tirx.TensorType.__init__">(tvm_tirx.tirx.TensorType method)</a>
+</li>
+        <li><a href="reference/python/generated/tvm_tirx.tirx.TileLayout.html#tvm_tirx.tirx.TileLayout.__init__">(tvm_tirx.tirx.TileLayout method)</a>
+</li>
+        <li><a href="reference/python/generated/tvm_tirx.tirx.Var.html#tvm_tirx.tirx.Var.__init__">(tvm_tirx.tirx.Var method)</a>
+</li>
+      </ul></li>
+  </ul></td>
+</tr></table>
+
+<h2 id="C">C</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="reference/python/generated/tvm_tirx.tirx.compile.html#tvm_tirx.tirx.compile">compile() (in module tvm_tirx.tirx)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="D">D</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="reference/python/generated/tvm_tirx.tirx.decl_tensor.html#tvm_tirx.tirx.decl_tensor">decl_tensor() (in module tvm_tirx.tirx)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="E">E</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="reference/python/generated/tvm_tirx.codegen.Executable.html#tvm_tirx.codegen.Executable">Executable (class in tvm_tirx.codegen)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="reference/python/generated/tvm_tirx.ir.Expr.html#tvm_tirx.ir.Expr">Expr (class in tvm_tirx.ir)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="F">F</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="reference/python/generated/tvm_tirx.tirx.Function.html#tvm_tirx.tirx.Function">Function (class in tvm_tirx.tirx)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="I">I</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="reference/python/generated/tvm_tirx.tirx.IndexMap.html#tvm_tirx.tirx.IndexMap">IndexMap (class in tvm_tirx.tirx)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="reference/python/generated/tvm_tirx.ir.IRModule.html#tvm_tirx.ir.IRModule">IRModule (class in tvm_tirx.ir)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="L">L</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="reference/python/generated/tvm_tirx.tirx.Layout.html#tvm_tirx.tirx.Layout">Layout (class in tvm_tirx.tirx)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="M">M</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li>
+    module
+
+      <ul>
+        <li><a href="reference/python/index.html#module-tvm_tirx">tvm_tirx</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="reference/python/generated/tvm_tirx.runtime.Module.html#tvm_tirx.runtime.Module">Module (class in tvm_tirx.runtime)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="S">S</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="reference/python/generated/tvm_tirx.ir.Stmt.html#tvm_tirx.ir.Stmt">Stmt (class in tvm_tirx.ir)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="T">T</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="reference/python/generated/tvm_tirx.target.Target.html#tvm_tirx.target.Target">Target (class in tvm_tirx.target)</a>
+</li>
+      <li><a href="reference/python/generated/tvm_tirx.runtime.Tensor.html#tvm_tirx.runtime.Tensor">Tensor (class in tvm_tirx.runtime)</a>
+</li>
+      <li><a href="reference/python/generated/tvm_tirx.tirx.TensorType.html#tvm_tirx.tirx.TensorType">TensorType (class in tvm_tirx.tirx)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="reference/python/generated/tvm_tirx.tirx.TileLayout.html#tvm_tirx.tirx.TileLayout">TileLayout (class in tvm_tirx.tirx)</a>
+</li>
+      <li>
+    tvm_tirx
+
+      <ul>
+        <li><a href="reference/python/index.html#module-tvm_tirx">module</a>
+</li>
+      </ul></li>
+  </ul></td>
+</tr></table>
+
+<h2 id="V">V</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="reference/python/generated/tvm_tirx.tirx.Var.html#tvm_tirx.tirx.Var">Var (class in tvm_tirx.tirx)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+
+
+                </article>
+              
+
+              
+              
+              
+              
+                <footer class="prev-next-footer d-print-none">
+                  
+<div class="prev-next-area">
+</div>
+                </footer>
+              
+            </div>
+            
+            
+              
+            
+          </div>
+          <footer class="bd-footer-content">
+            
+<div class="bd-footer-content__inner container">
+  
+  <div class="footer-item">
+    
+<p class="component-author">
+By Apache TVM Community
+</p>
+
+  </div>
+  
+  <div class="footer-item">
+    
+
+  </div>
+  
+  <div class="footer-item">
+    
+  </div>
+  
+  <div class="footer-item">
+    
+  </div>
+  
+</div>
+          </footer>
+        
+
+      </main>
+    </div>
+  </div>
+  
+  <!-- Scripts loaded after <body> so the DOM is not blocked -->
+  <script defer src="_static/scripts/bootstrap.js?digest=90905a2f556bf617f1a9"></script>
+<script defer src="_static/scripts/pydata-sphinx-theme.js?digest=90905a2f556bf617f1a9"></script>
+
+  <footer class="bd-footer">
+  </footer>
+  </body>
+</html>
\ No newline at end of file
diff --git a/tirx/index.html b/tirx/index.html
new file mode 100644
index 00000000000..cf9ed7c4b0d
--- /dev/null
+++ b/tirx/index.html
@@ -0,0 +1,475 @@
+
+<!DOCTYPE html>
+
+
+<html lang="en" data-content_root="./" >
+
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
+
+    <title>Apache TVM TIRx Documentation &#8212; Apache TVM TIRx  documentation</title>
+  
+  
+  
+  <script data-cfasync="false">
+    document.documentElement.dataset.mode = localStorage.getItem("mode") || "";
+    document.documentElement.dataset.theme = localStorage.getItem("theme") || "";
+  </script>
+  <!--
+    this give us a css class that will be invisible only if js is disabled
+  -->
+  <noscript>
+    <style>
+      .pst-js-only { display: none !important; }
+
+    </style>
+  </noscript>
+  
+  <!-- Loaded before other Sphinx assets -->
+  <link href="_static/styles/theme.css?digest=90905a2f556bf617f1a9" rel="stylesheet" />
+<link href="_static/styles/pydata-sphinx-theme.css?digest=90905a2f556bf617f1a9" rel="stylesheet" />
+
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=8f2a1f02" />
+    <link rel="stylesheet" type="text/css" href="_static/styles/sphinx-book-theme.css?v=4418a689" />
+  
+  <!-- So that users can add custom icons -->
+  <script defer src="_static/scripts/fontawesome.js?digest=90905a2f556bf617f1a9"></script>
+  <!-- Pre-loaded scripts that we'll load fully later -->
+  <link rel="preload" as="script" href="_static/scripts/bootstrap.js?digest=90905a2f556bf617f1a9" />
+<link rel="preload" as="script" href="_static/scripts/pydata-sphinx-theme.js?digest=90905a2f556bf617f1a9" />
+
+    <script src="_static/documentation_options.js?v=9eb32ce0"></script>
+    <script src="_static/doctools.js?v=fd6eb6e6"></script>
+    <script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
+    <script src="_static/scripts/sphinx-book-theme.js?v=fab101a9"></script>
+    <script>DOCUMENTATION_OPTIONS.pagename = 'index';</script>
+    <script>DOCUMENTATION_OPTIONS.search_as_you_type = false;</script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Python API" href="reference/python/index.html" />
+  <meta name="viewport" content="width=device-width, initial-scale=1"/>
+  <meta name="docsearch:language" content="en"/>
+  <meta name="docsearch:version" content="" />
+  
+    
+    <script src="_static/searchtools.js"></script>
+    <script src="_static/language_data.js"></script>
+    <script src="searchindex.js"></script>
+  
+  </head>
+  <body data-default-mode="">
+  
+  
+  <div id="pst-skip-link" class="skip-link d-print-none"><a href="#main-content">Skip to main content</a></div>
+
+  
+  <div id="pst-scroll-pixel-helper"></div>
+  
+  <button type="button" class="btn rounded-pill" id="pst-back-to-top">
+    <i class="fa-solid fa-arrow-up"></i>Back to top</button>
+  
+  
+  
+  
+  <dialog id="pst-search-dialog">
+    
+<form class="bd-search d-flex align-items-center"
+      action="search.html"
+      method="get">
+  <i class="fa-solid fa-magnifying-glass"></i>
+  <input type="search"
+         class="form-control"
+         name="q"
+         placeholder="Search..."
+         aria-label="Search..."
+         autocomplete="off"
+         autocorrect="off"
+         autocapitalize="off"
+         spellcheck="false"/>
+  <span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd>K</kbd></span>
+</form>
+  </dialog>
+
+  <div class="pst-async-banner-revealer d-none">
+  <aside id="bd-header-version-warning" class="d-none d-print-none" aria-label="Version warning"></aside>
+</div>
+
+  
+    <header id="pst-header" class="bd-header navbar navbar-expand-lg bd-navbar d-print-none">
+<div class="bd-header__inner bd-page-width">
+  <button class="pst-navbar-icon sidebar-toggle primary-toggle" aria-label="Site navigation">
+    <span class="fa-solid fa-bars"></span>
+  </button>
+  
+  
+  <div class="col-lg-9 navbar-header-items">
+    
+    
+    <div class="navbar-header-items__end">
+      
+        <div class="navbar-item navbar-persistent--container">
+          
+
+<button class="btn search-button-field search-button__button pst-js-only" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
+ <i class="fa-solid fa-magnifying-glass"></i>
+ <span class="search-button__default-text">Search</span>
+ <span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
+</button>
+        </div>
+      
+      
+    </div>
+    
+  </div>
+  
+  
+    <div class="navbar-persistent--mobile">
+
+<button class="btn search-button-field search-button__button pst-js-only" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
+ <i class="fa-solid fa-magnifying-glass"></i>
+ <span class="search-button__default-text">Search</span>
+ <span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
+</button>
+    </div>
+  
+
+  
+    <button class="pst-navbar-icon sidebar-toggle secondary-toggle" aria-label="On this page">
+      <span class="fa-solid fa-outdent"></span>
+    </button>
+  
+</div>
+
+    </header>
+  
+
+  <div class="bd-container">
+    <div class="bd-container__inner bd-page-width">
+      
+      
+      
+        
+      
+      <dialog id="pst-primary-sidebar-modal"></dialog>
+      <div id="pst-primary-sidebar" class="bd-sidebar-primary bd-sidebar">
+        
+
+  
+  <div class="sidebar-header-items sidebar-primary__section">
+    
+    
+    
+    
+  </div>
+  
+    <div class="sidebar-primary-items__start sidebar-primary__section">
+        <div class="sidebar-primary-item">
+
+  
+    
+  
+
+<a class="navbar-brand logo" href="#">
+  
+  
+  
+  
+  
+  
+    <p class="title logo__title">Apache TVM TIRx  documentation</p>
+  
+</a></div>
+        <div class="sidebar-primary-item">
+
+<button class="btn search-button-field search-button__button pst-js-only" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
+ <i class="fa-solid fa-magnifying-glass"></i>
+ <span class="search-button__default-text">Search</span>
+ <span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
+</button></div>
+        <div class="sidebar-primary-item"><nav class="bd-links bd-docs-nav" aria-label="Main">
+    <div class="bd-toc-item navbar-nav active">
+        <p aria-level="2" class="caption" role="heading"><span class="caption-text">Reference</span></p>
+<ul class="nav bd-sidenav">
+<li class="toctree-l1 has-children"><a class="reference internal" href="reference/python/index.html">Python API</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.ir.IRModule.html">tvm_tirx.ir.IRModule</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.ir.Expr.html">tvm_tirx.ir.Expr</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.ir.Stmt.html">tvm_tirx.ir.Stmt</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.tirx.Function.html">tvm_tirx.tirx.Function</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.tirx.Var.html">tvm_tirx.tirx.Var</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.tirx.TensorType.html">tvm_tirx.tirx.TensorType</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.tirx.decl_tensor.html">tvm_tirx.tirx.decl_tensor</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.tirx.IndexMap.html">tvm_tirx.tirx.IndexMap</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.tirx.Layout.html">tvm_tirx.tirx.Layout</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.tirx.TileLayout.html">tvm_tirx.tirx.TileLayout</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.tirx.compile.html">tvm_tirx.tirx.compile</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.target.Target.html">tvm_tirx.target.Target</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.runtime.Tensor.html">tvm_tirx.runtime.Tensor</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.runtime.Module.html">tvm_tirx.runtime.Module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_tirx.codegen.Executable.html">tvm_tirx.codegen.Executable</a></li>
+</ul>
+</details></li>
+</ul>
+
+    </div>
+</nav></div>
+    </div>
+  
+  
+  <div class="sidebar-primary-items__end sidebar-primary__section">
+      <div class="sidebar-primary-item">
+<div id="ethical-ad-placement"
+      class="flat"
+      data-ea-publisher="readthedocs"
+      data-ea-type="readthedocs-sidebar"
+      data-ea-manual="true">
+</div></div>
+  </div>
+
+
+      </div>
+      
+      <main id="main-content" class="bd-main" role="main">
+        
+        
+
+<div class="sbt-scroll-pixel-helper"></div>
+
+          <div class="bd-content">
+            <div class="bd-article-container">
+              
+              <div class="bd-header-article d-print-none">
+<div class="header-article-items header-article__inner">
+  
+    <div class="header-article-items__start">
+      
+        <div class="header-article-item"><button class="sidebar-toggle primary-toggle btn btn-sm" title="Toggle primary sidebar" data-bs-placement="bottom" data-bs-toggle="tooltip">
+  <span class="fa-solid fa-bars"></span>
+</button></div>
+      
+    </div>
+  
+  
+    <div class="header-article-items__end">
+      
+        <div class="header-article-item">
+
+<div class="article-header-buttons">
+
+
+
+
+
+<div class="dropdown dropdown-download-buttons">
+  <button class="btn dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false" aria-label="Download this page">
+    <i class="fas fa-download"></i>
+  </button>
+  <ul class="dropdown-menu">
+      
+      
+      
+      <li><a href="_sources/index.rst" target="_blank"
+   class="btn btn-sm btn-download-source-button dropdown-item"
+   title="Download source file"
+   data-bs-placement="left" data-bs-toggle="tooltip"
+>
+  
+
+<span class="btn__icon-container">
+  <i class="fas fa-file"></i>
+  </span>
+<span class="btn__text-container">.rst</span>
+</a>
+</li>
+      
+      
+      
+      
+      <li>
+<button onclick="window.print()"
+  class="btn btn-sm btn-download-pdf-button dropdown-item"
+  title="Print to PDF"
+  data-bs-placement="left" data-bs-toggle="tooltip"
+>
+  
+
+<span class="btn__icon-container">
+  <i class="fas fa-file-pdf"></i>
+  </span>
+<span class="btn__text-container">.pdf</span>
+</button>
+</li>
+      
+  </ul>
+</div>
+
+
+
+
+<button onclick="toggleFullScreen()"
+  class="btn btn-sm btn-fullscreen-button pst-navbar-icon"
+  title="Fullscreen mode"
+  data-bs-placement="bottom" data-bs-toggle="tooltip"
+>
+  
+
+<span class="btn__icon-container">
+  <i class="fas fa-expand"></i>
+  </span>
+
+</button>
+
+
+
+<div class="theme-switch-container dropdown pst-js-only" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Color mode">
+  <button class="btn btn-sm nav-link pst-navbar-icon theme-switch-button dropdown-toggle" aria-label="Color mode" data-bs-toggle="dropdown">
+    <i class="theme-switch fa-solid fa-sun fa-lg fa-fw" data-mode="light" title="Light"></i>
+    <i class="theme-switch fa-solid fa-moon fa-lg fa-fw" data-mode="dark" title="Dark"></i>
+    <i class="theme-switch fa-solid fa-circle-half-stroke fa-lg fa-fw" data-mode="auto" title="System Settings"></i>
+  </button>
+  <ul class="dropdown-menu dropdown-menu-end">
+    <li><button class="dropdown-item d-flex align-items-center theme-change-button" data-mode="auto"><i class="fa-solid fa-circle-half-stroke fa-lg fa-fw me-1"></i>System Settings</button></li>
+    <li><button class="dropdown-item d-flex align-items-center theme-change-button" data-mode="light"><i class="fa-solid fa-sun fa-lg fa-fw me-1"></i>Light</button></li>
+    <li><button class="dropdown-item d-flex align-items-center theme-change-button" data-mode="dark"><i class="fa-solid fa-moon fa-lg fa-fw me-1"></i>Dark</button></li>
+  </ul>
+</div>
+
+
+<button class="btn btn-sm pst-navbar-icon search-button search-button__button pst-js-only" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
+    <i class="fa-solid fa-magnifying-glass fa-lg"></i>
+</button>
+<button class="sidebar-toggle secondary-toggle btn btn-sm pst-navbar-icon" title="Toggle secondary sidebar" data-bs-placement="bottom" data-bs-toggle="tooltip">
+    <span class="fa-solid fa-list"></span>
+</button>
+</div></div>
+      
+    </div>
+  
+</div>
+</div>
+              
+              
+
+<div id="jb-print-docs-body" class="onlyprint">
+    <h1>Apache TVM TIRx Documentation</h1>
+    <!-- Table of contents -->
+    <div id="print-main-content">
+        <div id="jb-print-toc">
+            
+            <div>
+                <h2> Contents </h2>
+            </div>
+            <nav aria-label="Page">
+                <ul class="pst-show_toc_level nav section-nav flex-column">
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#table-of-contents">Table of Contents</a></li>
+</ul>
+            </nav>
+        </div>
+    </div>
+</div>
+
+              
+                
+<div id="searchbox"></div>
+                <article class="bd-article">
+                  
+  <section id="apache-tvm-tirx-documentation">
+<h1>Apache TVM TIRx Documentation<a class="headerlink" href="#apache-tvm-tirx-documentation" title="Link to this heading">#</a></h1>
+<section id="table-of-contents">
+<h2>Table of Contents<a class="headerlink" href="#table-of-contents" title="Link to this heading">#</a></h2>
+<div class="toctree-wrapper compound">
+<p aria-level="2" class="caption" role="heading"><span class="caption-text">Reference</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="reference/python/index.html">Python API</a></li>
+</ul>
+</div>
+</section>
+</section>
+
+
+                </article>
+              
+
+              
+              
+              
+              
+                <footer class="prev-next-footer d-print-none">
+                  
+<div class="prev-next-area">
+    <a class="right-next"
+       href="reference/python/index.html"
+       title="next page">
+      <div class="prev-next-info">
+        <p class="prev-next-subtitle">next</p>
+        <p class="prev-next-title">Python API</p>
+      </div>
+      <i class="fa-solid fa-angle-right"></i>
+    </a>
+</div>
+                </footer>
+              
+            </div>
+            
+            
+              
+                <dialog id="pst-secondary-sidebar-modal"></dialog>
+                <div id="pst-secondary-sidebar" class="bd-sidebar-secondary bd-toc"><div class="sidebar-secondary-items sidebar-secondary__inner">
+
+
+  <div class="sidebar-secondary-item"><div
+    id="pst-page-navigation-heading-2"
+    class="page-toc tocsection onthispage">
+    <i class="fa-solid fa-list"></i> Contents
+  </div>
+  <nav id="pst-page-toc-nav" class="page-toc" aria-labelledby="pst-page-navigation-heading-2">
+    <ul class="pst-show_toc_level nav section-nav flex-column">
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#table-of-contents">Table of Contents</a></li>
+</ul>
+  </nav></div>
+
+</div></div>
+              
+            
+          </div>
+          <footer class="bd-footer-content">
+            
+<div class="bd-footer-content__inner container">
+  
+  <div class="footer-item">
+    
+<p class="component-author">
+By Apache TVM Community
+</p>
+
+  </div>
+  
+  <div class="footer-item">
+    
+
+  </div>
+  
+  <div class="footer-item">
+    
+  </div>
+  
+  <div class="footer-item">
+    
+  </div>
+  
+</div>
+          </footer>
+        
+
+      </main>
+    </div>
+  </div>
+  
+  <!-- Scripts loaded after <body> so the DOM is not blocked -->
+  <script defer src="_static/scripts/bootstrap.js?digest=90905a2f556bf617f1a9"></script>
+<script defer src="_static/scripts/pydata-sphinx-theme.js?digest=90905a2f556bf617f1a9"></script>
+
+  <footer class="bd-footer">
+  </footer>
+  </body>
+</html>
\ No newline at end of file
diff --git a/tirx/objects.inv b/tirx/objects.inv
new file mode 100644
index 00000000000..855a948820d
Binary files /dev/null and b/tirx/objects.inv differ
diff --git a/tirx/py-modindex.html b/tirx/py-modindex.html
new file mode 100644
index 00000000000..e6eaad21789
--- /dev/null
+++ b/tirx/py-modindex.html
@@ -0,0 +1,397 @@
+
+<!DOCTYPE html>
+
+
+<html lang="en" data-content_root="./" >
+
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Python Module Index &#8212; Apache TVM TIRx  documentation</title>
+  
+  
+  
+  <script data-cfasync="false">
+    document.documentElement.dataset.mode = localStorage.getItem("mode") || "";
+    document.documentElement.dataset.theme = localStorage.getItem("theme") || "";
+  </script>
+  <!--
+    this give us a css class that will be invisible only if js is disabled
+  -->
+  <noscript>
+    <style>
+      .pst-js-only { display: none !important; }
+
+    </style>
+  </noscript>
+  
+  <!-- Loaded before other Sphinx assets -->
+  <link href="_static/styles/theme.css?digest=90905a2f556bf617f1a9" rel="stylesheet" />
+<link href="_static/styles/pydata-sphinx-theme.css?digest=90905a2f556bf617f1a9" rel="stylesheet" />
+
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=8f2a1f02" />
+    <link rel="stylesheet" type="text/css" href="_static/styles/sphinx-book-theme.css?v=4418a689" />
+  
+  <!-- So that users can add custom icons -->
+  <script defer src="_static/scripts/fontawesome.js?digest=90905a2f556bf617f1a9"></script>
+  <!-- Pre-loaded scripts that we'll load fully later -->
+  <link rel="preload" as="script" href="_static/scripts/bootstrap.js?digest=90905a2f556bf617f1a9" />
+<link rel="preload" as="script" href="_static/scripts/pydata-sphinx-theme.js?digest=90905a2f556bf617f1a9" />
+
+    <script src="_static/documentation_options.js?v=9eb32ce0"></script>
+    <script src="_static/doctools.js?v=fd6eb6e6"></script>
+    <script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
+    <script src="_static/scripts/sphinx-book-theme.js?v=fab101a9"></script>
+    <script>DOCUMENTATION_OPTIONS.pagename = 'py-modindex';</script>
+    <script>DOCUMENTATION_OPTIONS.search_as_you_type = false;</script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+
+  <meta name="viewport" content="width=device-width, initial-scale=1"/>
+  <meta name="docsearch:language" content="en"/>
+  <meta name="docsearch:version" content="" />
+  
+    
+    <script src="_static/searchtools.js"></script>
+    <script src="_static/language_data.js"></script>
+    <script src="searchindex.js"></script>
+  
+
+    <script>
+      DOCUMENTATION_OPTIONS.COLLAPSE_INDEX = true;
+    </script>
+
+
+  </head>
+  <body data-default-mode="">
+  
+  
+  <div id="pst-skip-link" class="skip-link d-print-none"><a href="#main-content">Skip to main content</a></div>
+
+  
+  <div id="pst-scroll-pixel-helper"></div>
+  
+  <button type="button" class="btn rounded-pill" id="pst-back-to-top">
+    <i class="fa-solid fa-arrow-up"></i>Back to top</button>
+  
+  
+  
+  
+  <dialog id="pst-search-dialog">
+    
+<form class="bd-search d-flex align-items-center"
+      action="search.html"
+      method="get">
+  <i class="fa-solid fa-magnifying-glass"></i>
+  <input type="search"
+         class="form-control"
+         name="q"
+         placeholder="Search..."
+         aria-label="Search..."
+         autocomplete="off"
+         autocorrect="off"
+         autocapitalize="off"
+         spellcheck="false"/>
+  <span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd>K</kbd></span>
+</form>
+  </dialog>
+
+  <div class="pst-async-banner-revealer d-none">
+  <aside id="bd-header-version-warning" class="d-none d-print-none" aria-label="Version warning"></aside>
+</div>
+
+  
+    <header id="pst-header" class="bd-header navbar navbar-expand-lg bd-navbar d-print-none">
+<div class="bd-header__inner bd-page-width">
+  <button class="pst-navbar-icon sidebar-toggle primary-toggle" aria-label="Site navigation">
+    <span class="fa-solid fa-bars"></span>
+  </button>
+  
+  
+  <div class="col-lg-9 navbar-header-items">
+    
+    
+    <div class="navbar-header-items__end">
+      
+        <div class="navbar-item navbar-persistent--container">
+          
+
+<button class="btn search-button-field search-button__button pst-js-only" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
+ <i class="fa-solid fa-magnifying-glass"></i>
+ <span class="search-button__default-text">Search</span>
+ <span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
+</button>
+        </div>
+      
+      
+    </div>
+    
+  </div>
+  
+  
+    <div class="navbar-persistent--mobile">
+
+<button class="btn search-button-field search-button__button pst-js-only" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
+ <i class="fa-solid fa-magnifying-glass"></i>
+ <span class="search-button__default-text">Search</span>
+ <span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
+</button>
+    </div>
+  
+
+  
+</div>
+
+    </header>
+  
+
+  <div class="bd-container">
+    <div class="bd-container__inner bd-page-width">
+      
+      
+      
+        
+      
+      <dialog id="pst-primary-sidebar-modal"></dialog>
+      <div id="pst-primary-sidebar" class="bd-sidebar-primary bd-sidebar">
+        
+
+  
+  <div class="sidebar-header-items sidebar-primary__section">
+    
+    
+    
+    
+  </div>
+  
+    <div class="sidebar-primary-items__start sidebar-primary__section">
+        <div class="sidebar-primary-item">
+
+  
+    
+  
+
+<a class="navbar-brand logo" href="index.html">
+  
+  
+  
+  
... 9580 lines suppressed ...